Geant4  10.02.p01
G4AdjointSimMessenger.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 // $Id: G4AdjointSimMessenger.cc 81773 2014-06-05 08:35:38Z gcosmo $
27 //
29 // Class Name: G4AdjointCrossSurfChecker
30 // Author: L. Desorgher
31 // Organisation: SpaceIT GmbH
32 // Contract: ESA contract 21435/08/NL/AT
33 // Customer: ESA/ESTEC
35 
36 #include <sstream>
37 
38 #include "G4AdjointSimMessenger.hh"
39 #include "G4RunManager.hh"
40 #include "G4AdjointSimManager.hh"
41 #include "G4UIdirectory.hh"
42 #include "G4UIcmdWithABool.hh"
43 #include "G4UIcmdWithAnInteger.hh"
45 #include "G4UIcmdWithADouble.hh"
47 #include "G4UIcmdWithAString.hh"
48 #include "G4UnitsTable.hh"
50 /*
51 #ifdef G4MULTITHREADED
52 #include "G4MTAdjointSimManager.hh"
53 #endif
54 */
56 //
58  : theAdjointRunManager(pAdjointRunManager)
59 /*
60 #ifdef G4MULTITHREADED
61  ,theMTAdjointRunManager(0),beamOnCmd(0)
62 #endif
63 */
64 
65 {
66  AdjointSimDir = new G4UIdirectory("/adjoint/");
67  AdjointSimDir->SetGuidance("Control of the adjoint or reverse monte carlo simulation");
68 
69 
70  //Start and adjoint Run
71  //---------------------
72  //if (G4RunManager::GetRunManager()->GetRunManagerType() == G4RunManager::sequentialRM){
73  beamOnCmd = new G4UIcommand("/adjoint/start_run",this);
74  beamOnCmd->SetGuidance("Start an adjoint Run.");
75  beamOnCmd->SetGuidance("Default number of events to be processed is 1.");
77  G4UIparameter* p1 = new G4UIparameter("numberOfEvent",'i',true);
78  p1->SetDefaultValue(1);
79  p1->SetParameterRange("numberOfEvent >= 0");
81  //}
82 
83  //Commands to define parameters relative to the external source
84  //------------------------------------------------------------
85 
86  G4UIparameter* pos_x_par = new G4UIparameter("X",'d',true);
87 
88  G4UIparameter* pos_y_par = new G4UIparameter("Y",'d',true);
89 
90  G4UIparameter* pos_z_par = new G4UIparameter("Z",'d',true);
91 
92  G4UIparameter* radius_par = new G4UIparameter("R",'d',true);
93 
94  radius_par->SetParameterRange("R >= 0");
95 
96  G4UIparameter* unit_par = new G4UIparameter("unit",'s',true);
97 
98  DefineSpherExtSourceCmd = new G4UIcommand("/adjoint/DefineSphericalExtSource",this);
99  DefineSpherExtSourceCmd->SetGuidance("Define a spherical external source.");
105 
106  G4UIparameter* phys_vol_name_par = new G4UIparameter("phys_vol_name",'s',true);
107 
108  DefineSpherExtSourceCenteredOnAVolumeCmd= new G4UIcommand("/adjoint/DefineSphericalExtSourceCenteredOnAVolume",this);
109  DefineSpherExtSourceCenteredOnAVolumeCmd->SetGuidance("Define a spherical external source with the center located at the center of a physical volume");
113 
114  DefineExtSourceOnAVolumeExtSurfaceCmd= new G4UIcmdWithAString("/adjoint/DefineExtSourceOnExtSurfaceOfAVolume",this);
115  DefineExtSourceOnAVolumeExtSurfaceCmd->SetGuidance("Set the external source on the external surface of a physical volume");
117 
118  setExtSourceEMaxCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetExtSourceEmax",this);
119  setExtSourceEMaxCmd->SetGuidance("Set the maximum energy of the external source");
120  setExtSourceEMaxCmd->SetParameterName("Emax",false);
123 
124  //Commands to define the adjoint source
125  //------------------------------------------------------------
126 
127  DefineSpherAdjSourceCmd = new G4UIcommand("/adjoint/DefineSphericalAdjSource",this);
128  DefineSpherAdjSourceCmd->SetGuidance("Define a spherical adjoint source.");
134 
135  DefineSpherAdjSourceCenteredOnAVolumeCmd= new G4UIcommand("/adjoint/DefineSphericalAdjSourceCenteredOnAVolume",this);
136  DefineSpherAdjSourceCenteredOnAVolumeCmd->SetGuidance("Define a spherical adjoint source with the center located at the center of a physical volume");
140 
141  DefineAdjSourceOnAVolumeExtSurfaceCmd= new G4UIcmdWithAString("/adjoint/DefineAdjSourceOnExtSurfaceOfAVolume",this);
142  DefineAdjSourceOnAVolumeExtSurfaceCmd->SetGuidance("Set the adjoint source on the external surface of physical volume");
144 
145  setAdjSourceEminCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmin",this);
146  setAdjSourceEminCmd->SetGuidance("Set the minimum energy of the adjoint source");
147  setAdjSourceEminCmd->SetParameterName("Emin",false);
150 
151  setAdjSourceEmaxCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmax",this);
152  setAdjSourceEmaxCmd->SetGuidance("Set the maximum energy of the adjoint source");
153  setAdjSourceEmaxCmd->SetParameterName("Emax",false);
156 
157  ConsiderParticleAsPrimaryCmd = new G4UIcmdWithAString("/adjoint/ConsiderAsPrimary",this);
158  ConsiderParticleAsPrimaryCmd->SetGuidance("Set the selected particle as primary");
160  ConsiderParticleAsPrimaryCmd->SetCandidates("e- gamma proton ion");
161 
162  NeglectParticleAsPrimaryCmd= new G4UIcmdWithAString("/adjoint/NeglectAsPrimary",this);
163  NeglectParticleAsPrimaryCmd->SetGuidance("Remove the selected particle from the lits of primaries");
165  NeglectParticleAsPrimaryCmd->SetCandidates("e- gamma proton ion");
166 
167 
169  new G4UIcmdWithAnInteger("/adjoint/SetNbOfPrimaryFwdGammasPerEvent",this);
170  setNbOfPrimaryFwdGammasPerEventCmd->SetGuidance("Set the nb of primary fwd gamm generated on the adjoint source");
173 
174 
175 
176 }
178 //
179 /*
180 #ifdef G4MULTITHREADED
181 G4AdjointSimMessenger::G4AdjointSimMessenger(G4MTAdjointSimManager* pAdjointRunManager)
182  : theAdjointRunManager(0),theMTAdjointRunManager(pAdjointRunManager),DefineSpherExtSourceCmd(0),
183  DefineSpherExtSourceCenteredOnAVolumeCmd(0), DefineExtSourceOnAVolumeExtSurfaceCmd(0),
184  setExtSourceEMaxCmd(0),DefineSpherAdjSourceCmd(0),DefineSpherAdjSourceCenteredOnAVolumeCmd(0),
185  DefineAdjSourceOnAVolumeExtSurfaceCmd(0),setAdjSourceEminCmd(0),setAdjSourceEmaxCmd(0),
186  ConsiderParticleAsPrimaryCmd(0),NeglectParticleAsPrimaryCmd(0)
187 {
188  AdjointSimDir = new G4UIdirectory("/adjoint/");
189  AdjointSimDir->SetGuidance("Control of the adjoint or reverse monte carlo simulation");
190 
191 
192  //Start and adjoint Run
193  //---------------------
194  beamOnCmd = new G4UIcommand("/adjoint/start_run",this);
195  beamOnCmd->SetGuidance("Start an adjoint Run.");
196  beamOnCmd->SetGuidance("Default number of events to be processed is 1.");
197  beamOnCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
198  G4UIparameter* p1 = new G4UIparameter("numberOfEvent",'i',true);
199  p1->SetDefaultValue(1);
200  p1->SetParameterRange("numberOfEvent >= 0");
201  beamOnCmd->SetParameter(p1);
202 
203 
204  ConsiderParticleAsPrimaryCmd = new G4UIcmdWithAString("/adjoint/ConsiderAsPrimary",this);
205  ConsiderParticleAsPrimaryCmd->SetGuidance("Set the selected particle as primary");
206  ConsiderParticleAsPrimaryCmd->SetParameterName("particle",false);
207  ConsiderParticleAsPrimaryCmd->SetCandidates("e- gamma proton ion");
208 
209  NeglectParticleAsPrimaryCmd= new G4UIcmdWithAString("/adjoint/NeglectAsPrimary",this);
210  NeglectParticleAsPrimaryCmd->SetGuidance("Remove the selected particle from the lits of primaries");
211  NeglectParticleAsPrimaryCmd->SetParameterName("particle",false);
212  NeglectParticleAsPrimaryCmd->SetCandidates("e- gamma proton ion");
213 
214 
215 }
216 #endif
217 */
218 
220 //
221 
223 {
224  if (beamOnCmd) delete beamOnCmd;
225 }
226 
228 //
229 
231 {
232  if (!command) return;
233  if( command==beamOnCmd )
234  {
235  G4int nev;
236  const char* nv = (const char*)newValue;
237  std::istringstream is(nv);
238  is >> nev ;
240 /*
241 #ifdef G4MULTITHREADED
242  else if (theMTAdjointRunManager) theMTAdjointRunManager->RunAdjointSimulation(nev);
243  else if (theAdjointRunManager) theAdjointRunManager->SwitchToAdjointSimulationMode();
244 #endif
245 */
246  //G4cout<<"G4AdjointSimMessenger::SetNewValue BeamOnCmd out"<<std::endl;
247  }
248  else if ( command==ConsiderParticleAsPrimaryCmd){
250  }
251  else if ( command==NeglectParticleAsPrimaryCmd){
253  }
254 /*
255 #ifdef G4MULTITHREADED
256  if (G4RunManager::GetRunManager()->GetRunManagerType() == G4RunManager::masterRM) return;
257 #endif
258 */
259  if ( command==DefineSpherExtSourceCmd){
260 
261  G4double x,y,z,r;
262  G4String unit;
263  const char* nv = (const char*)newValue;
264  std::istringstream is(nv);
265  is >> x>>y>>z>>r>>unit;
266 
272  }
273  else if ( command==DefineSpherExtSourceCenteredOnAVolumeCmd){
274 
275  G4double r;
276  G4String vol_name, unit;
277  const char* nv = (const char*)newValue;
278  std::istringstream is(nv);
279  is >>vol_name>>r>>unit;
282  }
283  else if ( command==DefineExtSourceOnAVolumeExtSurfaceCmd){
285  }
286  else if ( command== setExtSourceEMaxCmd){
287 
289  }
290  else if ( command==DefineSpherAdjSourceCmd){
291 
292  G4double x,y,z,r;
293  G4String unit;
294  const char* nv = (const char*)newValue;
295  std::istringstream is(nv);
296  is >> x>>y>>z>>r>>unit;
297 
303  }
304  else if ( command==DefineSpherAdjSourceCenteredOnAVolumeCmd){
305 
306  G4double r;
307  G4String vol_name, unit;
308  const char* nv = (const char*)newValue;
309  std::istringstream is(nv);
310  is >>vol_name>>r>>unit;
313  }
314  else if ( command==DefineAdjSourceOnAVolumeExtSurfaceCmd){
315 
317  }
318  else if ( command== setAdjSourceEminCmd){
319 
321  }
322  else if ( command== setAdjSourceEmaxCmd){
323 
325  }
326  else if ( command== setNbOfPrimaryFwdGammasPerEventCmd){
328  }
329 
330 
331 }
332 
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
G4UIcmdWithADoubleAndUnit * setExtSourceEMaxCmd
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:152
void SetNewValue(G4UIcommand *, G4String)
void SetAdjointSourceEmax(G4double Emax)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
CLHEP::Hep3Vector G4ThreeVector
static G4int GetNewIntValue(const char *paramString)
void SetParameterRange(const char *theRange)
G4double z
Definition: TRTMaterials.hh:39
G4AdjointSimManager * theAdjointRunManager
void SetDefaultValue(const char *theDefaultValue)
G4bool DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume(G4double radius, const G4String &volume_name)
G4UIcmdWithAnInteger * setNbOfPrimaryFwdGammasPerEventCmd
G4bool DefineSphericalAdjointSource(G4double radius, G4ThreeVector pos)
void SetUnitCategory(const char *unitCategory)
G4UIcmdWithADoubleAndUnit * setAdjSourceEminCmd
static G4double GetNewDoubleValue(const char *paramString)
int G4int
Definition: G4Types.hh:78
void SetAdjointSourceEmin(G4double Emin)
G4UIcommand * DefineSpherExtSourceCenteredOnAVolumeCmd
static G4double GetValueOf(const G4String &)
G4UIcommand * DefineSpherAdjSourceCenteredOnAVolumeCmd
G4bool DefineAdjointSourceOnTheExtSurfaceOfAVolume(const G4String &volume_name)
G4UIcmdWithAString * DefineAdjSourceOnAVolumeExtSurfaceCmd
void SetNbOfPrimaryFwdGammasPerEvent(G4int)
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
void RunAdjointSimulation(G4int nb_evt)
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:239
G4UIcmdWithAString * DefineExtSourceOnAVolumeExtSurfaceCmd
G4bool DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume(G4double radius, const G4String &volume_name)
G4bool DefineSphericalExtSource(G4double radius, G4ThreeVector pos)
G4UIcmdWithADoubleAndUnit * setAdjSourceEmaxCmd
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
G4UIcmdWithAString * ConsiderParticleAsPrimaryCmd
void ConsiderParticleAsPrimary(const G4String &particle_name)
const G4double x[NPOINTSGL]
G4bool DefineExtSourceOnTheExtSurfaceOfAVolume(const G4String &volume_name)
void SetCandidates(const char *candidateList)
double G4double
Definition: G4Types.hh:76
G4UIcmdWithAString * NeglectParticleAsPrimaryCmd
void SetExtSourceEmax(G4double Emax)
G4AdjointSimMessenger(G4AdjointSimManager *)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void NeglectParticleAsPrimary(const G4String &particle_name)