Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
examples/extended/electromagnetic/TestEm9/src/DetectorMessenger.cc
이 파일의 문서화 페이지로 가기
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 //
28 //
29 // $Id: DetectorMessenger.cc 67268 2013-02-13 11:38:40Z ihrivnac $
30 //
31 //
33 //
34 // TestEm9: Crystal calorimeter
35 //
36 // Created: 31.01.03 V.Ivanchenko
37 //
38 // Modified:
39 //
41 //
42 
43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
45 
46 #include "DetectorMessenger.hh"
47 
48 #include "DetectorConstruction.hh"
49 #include "G4UIdirectory.hh"
50 #include "G4UIcmdWithAString.hh"
51 #include "G4UIcmdWith3Vector.hh"
54 #include "HistoManager.hh"
55 
56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
57 
59  :G4UImessenger(),fDetector(det),
60  fAtestemDir(0),
61  fAMaterCmd(0),
62  fALBinCmd(0),
63  fAl1Cmd(0),
64  fAl2Cmd(0),
65  fAl3Cmd(0),
66  fAl4Cmd(0),
67  fAl5Cmd(0),
68  fAl6Cmd(0),
69  fAUpdateCmd(0),
70  fAaccCmd1(0),
71  fAaccCmd2(0),
72  fAaccCmd3(0)
73 {
74  fAtestemDir = new G4UIdirectory("/testem/");
75  fAtestemDir->SetGuidance(" detector control.");
76 
77  fAMaterCmd = new G4UIcmdWithAString("/testem/det/CalMat",this);
78  fAMaterCmd->SetGuidance("Select Material for calorimeter");
79  fAMaterCmd->SetParameterName("calMaterial",false);
81 
82  fALBinCmd = new G4UIcmdWithAString("/testem/det/AbsMat",this);
83  fALBinCmd->SetGuidance("Select Material for absorber");
84  fALBinCmd->SetParameterName("absMarerial",false);
86 
87  fAl1Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/EcalLength",this);
88  fAl1Cmd->SetGuidance("Set length of Ecal");
89  fAl1Cmd->SetParameterName("lEcal",false);
90  fAl1Cmd->SetUnitCategory("Length");
91  fAl1Cmd->SetRange("lEcal>0");
93 
94  fAl2Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/EcalWidth",this);
95  fAl2Cmd->SetGuidance("Set width of Ecal crystal");
96  fAl2Cmd->SetParameterName("wEcal",false);
97  fAl2Cmd->SetUnitCategory("Length");
99 
100  fAl3Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/AbsLength",this);
101  fAl3Cmd->SetGuidance("Set length of the absorber");
102  fAl3Cmd->SetParameterName("lAbs",false);
103  fAl3Cmd->SetUnitCategory("Length");
105 
106  fAl4Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/VertexLength",this);
107  fAl4Cmd->SetGuidance("Set length of the vertex region");
108  fAl4Cmd->SetParameterName("lVert",false);
109  fAl4Cmd->SetUnitCategory("Length");
111 
112  fAl5Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/PadLength",this);
113  fAl5Cmd->SetGuidance("Set length of vertex detector");
114  fAl5Cmd->SetParameterName("lPad",false);
115  fAl5Cmd->SetUnitCategory("Length");
117 
118  fAl6Cmd = new G4UIcmdWithADoubleAndUnit("/testem/det/PadWidth",this);
119  fAl6Cmd->SetGuidance("Set width of a vertex pad");
120  fAl6Cmd->SetParameterName("wPad",false);
121  fAl6Cmd->SetUnitCategory("Length");
123 
124  fAUpdateCmd = new G4UIcmdWithoutParameter("/testem/det/update",this);
125  fAUpdateCmd->SetGuidance("Update geometry.");
126  fAUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
127  fAUpdateCmd->SetGuidance("if you changed geometrical value(s)");
129 
130  fAaccCmd1 = new G4UIcmdWith3Vector("/testem/det/acceptance1",this);
131  fAaccCmd1->SetGuidance("set Edep and RMS");
132  fAaccCmd1->SetGuidance("acceptance values for central cell");
133  fAaccCmd1->SetParameterName("edep","rms","limit",true);
134  fAaccCmd1->SetRange("edep>0 && edep<1 && rms>0");
136 
137  fAaccCmd2 = new G4UIcmdWith3Vector("/testem/det/acceptance9",this);
138  fAaccCmd2->SetGuidance("set Edep and RMS");
139  fAaccCmd2->SetGuidance("acceptance values for 3x3 matrix");
140  fAaccCmd2->SetParameterName("edep","rms","limit",true);
141  fAaccCmd2->SetRange("edep>0 && edep<1 && rms>0");
143 
144  fAaccCmd3 = new G4UIcmdWith3Vector("/testem/det/acceptance25",this);
145  fAaccCmd3->SetGuidance("set Edep and RMS");
146  fAaccCmd3->SetGuidance("acceptance values for 5x5 matrix");
147  fAaccCmd3->SetParameterName("edep","rms","limit",true);
148  fAaccCmd3->SetRange("edep>0 && edep<1 && rms>0");
150 
151 }
152 
153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
154 
156 {
157  delete fAMaterCmd;
158  delete fALBinCmd;
159  delete fAl1Cmd;
160  delete fAl2Cmd;
161  delete fAl3Cmd;
162  delete fAl4Cmd;
163  delete fAl5Cmd;
164  delete fAl6Cmd;
165  delete fAUpdateCmd;
166  delete fAtestemDir;
167  delete fAaccCmd1;
168  delete fAaccCmd2;
169  delete fAaccCmd3;
170 }
171 
172 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
173 
175 {
176  if( command == fAMaterCmd )
177  { fDetector->SetEcalMaterial(newValue);}
178 
179  if( command == fALBinCmd )
180  { fDetector->SetAbsMaterial(newValue);}
181 
182  if( command == fAl1Cmd )
184 
185  if( command == fAl2Cmd )
187 
188  if( command == fAl3Cmd )
190 
191  if( command == fAl4Cmd )
193 
194  if( command == fAl5Cmd )
196 
197  if( command == fAl6Cmd )
199 
200  if( command == fAUpdateCmd )
202 
204  if( command == fAaccCmd1 )
205  { histo->SetEdepAndRMS(0,fAaccCmd1->GetNew3VectorValue(newValue));}
206 
207  if( command == fAaccCmd2 )
208  { histo->SetEdepAndRMS(1,fAaccCmd2->GetNew3VectorValue(newValue));}
209 
210  if( command == fAaccCmd3 )
211  { histo->SetEdepAndRMS(2,fAaccCmd3->GetNew3VectorValue(newValue));}
212 
213 
214 }
215 
216 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
217 
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetParameterName(const char *theNameX, const char *theNameY, const char *theNameZ, G4bool omittable, G4bool currentAsDefault=false)
void SetRange(const char *rs)
Definition: G4UIcommand.hh:125
static G4double GetNewDoubleValue(const char *paramString)
void SetUnitCategory(const char *unitCategory)
static G4ThreeVector GetNew3VectorValue(const char *paramString)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:242
Simple detector construction with a box volume placed in a world.