Loading...
Searching...
No Matches
VoxelizedSensitiveDetectorMessenger.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27/// \file radiobiology/src/VoxelizedSensitiveDetectorMessenger.cc
28/// \brief Implementation of the RadioBio::VoxelizedSensitiveDetectorMessenger class
29
31
32#include "G4UIcmdWith3VectorAndUnit.hh"
33#include "G4UIcmdWithADoubleAndUnit.hh"
34#include "G4UIcmdWithoutParameter.hh"
35#include "G4UIcommand.hh"
36#include "G4UIdirectory.hh"
37#include "G4UIparameter.hh"
38
40
41namespace RadioBio
42{
43
44//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
45
48 : G4UImessenger(), fVoxelizedDetector(VoxDet)
49{
50 // Diretory for voxelization commands
51 fVoxelsDir = new G4UIdirectory("/voxels/");
52 fVoxelsDir->SetGuidance("commands to change voxels size");
53
54 // Set voxel size with a ThreeVector
55 fVoxelSizeCmd = new G4UIcmdWith3VectorAndUnit("/voxels/setVoxelSizes", this);
56 fVoxelSizeCmd->SetGuidance("Insert voxel sizes X Y and Z");
57 fVoxelSizeCmd->SetParameterName("SizeAlongX", "SizeAlongY", "SizeAlongZ", false);
58 fVoxelSizeCmd->SetRange("SizeAlongX>0. && SizeAlongY>0. && SizeAlongZ>0.");
59 fVoxelSizeCmd->SetUnitCategory("Length");
60 fVoxelSizeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
61 fVoxelSizeCmd->SetToBeBroadcasted(false);
62
63 // Set X voxel size
64 fVoxelSizeXCmd = new G4UIcmdWithADoubleAndUnit("/voxels/setSizeX", this);
65 fVoxelSizeXCmd->SetGuidance("Set X width of voxels");
66 fVoxelSizeXCmd->SetParameterName("Size", false);
67 fVoxelSizeXCmd->SetRange("Size>0.");
68 fVoxelSizeXCmd->SetUnitCategory("Length");
69 fVoxelSizeXCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
70 fVoxelSizeXCmd->SetToBeBroadcasted(false);
71
72 // Set Y voxel size
73 fVoxelSizeYCmd = new G4UIcmdWithADoubleAndUnit("/voxels/setSizeY", this);
74 fVoxelSizeYCmd->SetGuidance("Set Y width of voxels");
75 fVoxelSizeYCmd->SetParameterName("Size", false);
76 fVoxelSizeYCmd->SetRange("Size>0.");
77 fVoxelSizeYCmd->SetUnitCategory("Length");
78 fVoxelSizeYCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
79 fVoxelSizeYCmd->SetToBeBroadcasted(false);
80
81 // Set Z voxel size
82 fVoxelSizeZCmd = new G4UIcmdWithADoubleAndUnit("/voxels/setSizeZ", this);
83 fVoxelSizeZCmd->SetGuidance("Set Z width of voxels");
84 fVoxelSizeZCmd->SetParameterName("Size", false);
85 fVoxelSizeZCmd->SetRange("Size>0.");
86 fVoxelSizeZCmd->SetUnitCategory("Length");
87 fVoxelSizeZCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
88 fVoxelSizeZCmd->SetToBeBroadcasted(false);
89
90 // Update voxelized geometry
91 fUpdateVoxCmd = new G4UIcmdWithoutParameter("/voxels/update", this);
92 fUpdateVoxCmd->SetGuidance("Update voxelized geometry");
93 fUpdateVoxCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
94 fUpdateVoxCmd->SetGuidance("if you changed voxelization");
95 fUpdateVoxCmd->AvailableForStates(G4State_Idle);
96}
97
98//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
99
109
110//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
111
113{
114 if (command == fVoxelSizeCmd) {
115 fVoxelizedDetector->SetVoxelWidth(fVoxelSizeCmd->GetNew3VectorValue(newValue));
116 }
117
118 if (command == fVoxelSizeXCmd) {
119 fVoxelizedDetector->SetVoxelWidthX(fVoxelSizeXCmd->GetNewDoubleValue(newValue));
120 }
121
122 if (command == fVoxelSizeYCmd) {
123 fVoxelizedDetector->SetVoxelWidthY(fVoxelSizeYCmd->GetNewDoubleValue(newValue));
124 }
125
126 if (command == fVoxelSizeZCmd) {
127 fVoxelizedDetector->SetVoxelWidthZ(fVoxelSizeZCmd->GetNewDoubleValue(newValue));
128 }
129
130 if (command == fUpdateVoxCmd) {
132 }
133}
134
135//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
136
137} // namespace RadioBio
Definition of the RadioBio::VoxelizedSensitiveDetectorMessenger class.
Definition of the RadioBio::VoxelizedSensitiveDetector class.
Singleton class performing the voxelization of the world volume and tracking of a voxel index given t...
void SetVoxelWidthY(G4double voxWidthY)
Method to set the voxel Y width.
void SetVoxelWidth(G4ThreeVector voxWidth)
Method to set the voxel shape to be a box with given sides.
void UpdateVoxelizedGeometry()
Method to update voxelized geometry.
void SetVoxelWidthX(G4double voxWidthX)
Method to set the voxel X width.
void SetVoxelWidthZ(G4double voxWidthZ)
Method to set the voxel Z width.

Applications | User Support | Publications | Collaboration