Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/run/src/G4UserPhysicsListMessenger.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /run/src/G4UserPhysicsListMessenger.cc (Version 11.3.0) and /run/src/G4UserPhysicsListMessenger.cc (Version 11.0.p3,)


** Warning: Cannot open xref database.

  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4UserPhysicsListMessenger implementation      
 27 //                                                
 28 // Original author: H.Kurashige, 9 January 199    
 29 // -------------------------------------------    
 30                                                   
 31 #include "G4UserPhysicsListMessenger.hh"          
 32                                                   
 33 #include "G4ParticleTable.hh"                     
 34 #include "G4PhysicsListHelper.hh"                 
 35 #include "G4SystemOfUnits.hh"                     
 36 #include "G4Tokenizer.hh"                         
 37 #include "G4UIcmdWithADoubleAndUnit.hh"           
 38 #include "G4UIcmdWithAString.hh"                  
 39 #include "G4UIcmdWithAnInteger.hh"                
 40 #include "G4UIcmdWithoutParameter.hh"             
 41 #include "G4UIdirectory.hh"                       
 42 #include "G4UIparameter.hh"                       
 43 #include "G4VUserPhysicsList.hh"                  
 44 #include "G4ios.hh"                               
 45                                                   
 46 #include <sstream>                                
 47                                                   
 48 G4UserPhysicsListMessenger::G4UserPhysicsListM    
 49   : thePhysicsList(pParticleList)                 
 50 {                                                 
 51   G4UIparameter* param = nullptr;                 
 52   // /run/particle    directory                   
 53   theDirectory = new G4UIdirectory("/run/parti    
 54   theDirectory->SetGuidance("Commands for G4VU    
 55                                                   
 56   // /run/particle/Verbose command                
 57   verboseCmd = new G4UIcmdWithAnInteger("/run/    
 58   verboseCmd->SetGuidance("Set the Verbose lev    
 59   verboseCmd->SetGuidance(" 0 : Silent (defaul    
 60   verboseCmd->SetGuidance(" 1 : Display warnin    
 61   verboseCmd->SetGuidance(" 2 : Display more")    
 62   verboseCmd->SetParameterName("level", true);    
 63   verboseCmd->SetDefaultValue(0);                 
 64   verboseCmd->SetRange("level >=0 && level <=3    
 65                                                   
 66   // /run/setCut command                          
 67   setCutCmd = new G4UIcmdWithADoubleAndUnit("/    
 68   setCutCmd->SetGuidance("Set default cut valu    
 69   setCutCmd->SetParameterName("cut", false);      
 70   setCutCmd->SetDefaultValue(1.0);                
 71   setCutCmd->SetRange("cut >=0.0");               
 72   setCutCmd->SetDefaultUnit("mm");                
 73   setCutCmd->AvailableForStates(G4State_PreIni    
 74                                                   
 75   // /run/setCutForAGivenParticle command         
 76   setCutForAGivenParticleCmd = new G4UIcommand    
 77   setCutForAGivenParticleCmd->SetGuidance("Set    
 78   setCutForAGivenParticleCmd->SetGuidance("Usa    
 79   param = new G4UIparameter("particleName", 's    
 80   param->SetParameterCandidates("e- e+ gamma p    
 81   setCutForAGivenParticleCmd->SetParameter(par    
 82   param = new G4UIparameter("cut", 'd', false)    
 83   param->SetDefaultValue("1.");                   
 84   param->SetParameterRange("cut>=0.0");           
 85   setCutForAGivenParticleCmd->SetParameter(par    
 86   param = new G4UIparameter("unit", 's', false    
 87   param->SetDefaultUnit("mm");                    
 88   setCutForAGivenParticleCmd->SetParameter(par    
 89   setCutForAGivenParticleCmd->AvailableForStat    
 90                                                   
 91   // /run/getCutForAGivenParticle command         
 92   getCutForAGivenParticleCmd = new G4UIcmdWith    
 93   getCutForAGivenParticleCmd->SetGuidance("Get    
 94   getCutForAGivenParticleCmd->SetGuidance("Usa    
 95   getCutForAGivenParticleCmd->SetParameterName    
 96   getCutForAGivenParticleCmd->SetCandidates("e    
 97   getCutForAGivenParticleCmd->AvailableForStat    
 98                                                   
 99                                                   
100   // /run/setCutForRegion command                 
101   setCutRCmd = new G4UIcommand("/run/setCutFor    
102   setCutRCmd->SetGuidance("Set cut value for a    
103   param = new G4UIparameter("Region", 's', fal    
104   setCutRCmd->SetParameter(param);                
105   param = new G4UIparameter("cut", 'd', false)    
106   param->SetParameterRange("cut >=0.0");          
107   setCutRCmd->SetParameter(param);                
108   param = new G4UIparameter("Unit", 's', true)    
109   param->SetDefaultValue("mm");                   
110   param->SetParameterCandidates(setCutRCmd->Un    
111   setCutRCmd->SetParameter(param);                
112   setCutRCmd->AvailableForStates(G4State_Idle)    
113                                                   
114   // /run/particle/DumpList command               
115   dumpListCmd = new G4UIcmdWithoutParameter("/    
116   dumpListCmd->SetGuidance("Dump List of parti    
117                                                   
118   // /run/particle/addProcManager command         
119   addProcManCmd = new G4UIcmdWithAString("/run    
120   addProcManCmd->SetToBeBroadcasted(false);       
121   addProcManCmd->SetGuidance("add process mana    
122   addProcManCmd->SetParameterName("particleTyp    
123   addProcManCmd->SetDefaultValue("");             
124   addProcManCmd->AvailableForStates(G4State_Pr    
125                                     G4State_Ev    
126                                                   
127   // /run/particle/buildPhysicsTable command      
128   buildPTCmd = new G4UIcmdWithAString("/run/pa    
129   buildPTCmd->SetGuidance("build physics table    
130   buildPTCmd->SetParameterName("particleType",    
131   buildPTCmd->SetDefaultValue("");                
132   buildPTCmd->AvailableForStates(G4State_Init,    
133                                                   
134   // /run/particle/storePhysicsTable command      
135   storeCmd = new G4UIcmdWithAString("/run/part    
136   storeCmd->SetGuidance("Store Physics Table")    
137   storeCmd->SetGuidance("  Enter directory nam    
138   storeCmd->SetParameterName("dirName", true);    
139   storeCmd->SetDefaultValue("");                  
140   storeCmd->AvailableForStates(G4State_Idle);     
141                                                   
142   //  /run/particle/retrievePhysicsTable comma    
143   retrieveCmd = new G4UIcmdWithAString("/run/p    
144   retrieveCmd->SetGuidance("Retrieve Physics T    
145   retrieveCmd->SetGuidance("  Enter directory     
146   retrieveCmd->SetParameterName("dirName", tru    
147   retrieveCmd->SetDefaultValue("");               
148   retrieveCmd->AvailableForStates(G4State_PreI    
149                                                   
150   //  /run/particle/setStoredInAscii command      
151   asciiCmd = new G4UIcmdWithAnInteger("/run/pa    
152   asciiCmd->SetGuidance("Switch on/off ascii m    
153   asciiCmd->SetGuidance("  Enter 0(binary) or     
154   asciiCmd->SetParameterName("ascii", true);      
155   asciiCmd->SetDefaultValue(0);                   
156   asciiCmd->AvailableForStates(G4State_PreInit    
157   asciiCmd->SetRange("ascii ==0 || ascii ==1")    
158                                                   
159   // Commnad    /run/particle/applyCuts comman    
160   applyCutsCmd = new G4UIcommand("/run/particl    
161   applyCutsCmd->SetGuidance("Set applyCuts fla    
162   applyCutsCmd->SetGuidance(" Some EM processe    
163   applyCutsCmd->SetGuidance("may generate gamm    
164   applyCutsCmd->SetGuidance("below the product    
165   applyCutsCmd->SetGuidance("such secondaries     
166   applyCutsCmd->SetGuidance("kinetic energies     
167   applyCutsCmd->SetGuidance("to the energy dep    
168   applyCutsCmd->SetGuidance(" Note that 'apply    
169   applyCutsCmd->SetGuidance("e- and e+. If thi    
170   applyCutsCmd->SetGuidance("a warning message    
171   applyCutsCmd->SetGuidance("ignored.");          
172   applyCutsCmd->SetGuidance(" If particle name    
173   applyCutsCmd->SetGuidance("gamma, e- and e+.    
174   param = new G4UIparameter("Flag", 's', true)    
175   param->SetDefaultValue("true");                 
176   applyCutsCmd->SetParameter(param);              
177   param = new G4UIparameter("Particle", 's', t    
178   param->SetDefaultValue("all");                  
179   applyCutsCmd->SetParameter(param);              
180   applyCutsCmd->AvailableForStates(G4State_Pre    
181                                                   
182   //  /run/particle/dumpCutValues command         
183   dumpCutValuesCmd = new G4UIcmdWithAString("/    
184   dumpCutValuesCmd->SetGuidance("Dump a list o    
185   dumpCutValuesCmd->SetGuidance("for all regis    
186   dumpCutValuesCmd->SetGuidance("Dumping a lis    
187   dumpCutValuesCmd->SetGuidance("actual conver    
188   dumpCutValuesCmd->SetGuidance(                  
189     "If you want a list 'immediately', use '/r    
190   dumpCutValuesCmd->SetGuidance("list given in    
191   dumpCutValuesCmd->SetGuidance(                  
192     "current list if you have already issued '    
193   dumpCutValuesCmd->SetParameterName("particle    
194   dumpCutValuesCmd->SetDefaultValue("all");       
195   dumpCutValuesCmd->AvailableForStates(G4State    
196                                                   
197   //  /run/particle/dumpCutValues command         
198   dumpOrdParamCmd = new G4UIcmdWithAnInteger("    
199   dumpOrdParamCmd->SetGuidance("Dump a list of    
200   dumpOrdParamCmd->SetParameterName("subtype",    
201   dumpOrdParamCmd->SetDefaultValue(-1);           
202   dumpOrdParamCmd->AvailableForStates(G4State_    
203 }                                                 
204                                                   
205 // -------------------------------------------    
206 G4UserPhysicsListMessenger::~G4UserPhysicsList    
207 {                                                 
208   delete setCutCmd;                               
209   delete setCutRCmd;                              
210   delete setCutForAGivenParticleCmd;              
211   delete getCutForAGivenParticleCmd;              
212   delete verboseCmd;                              
213   delete dumpListCmd;                             
214   delete addProcManCmd;                           
215   delete buildPTCmd;                              
216   delete storeCmd;                                
217   delete retrieveCmd;                             
218   delete asciiCmd;                                
219   delete applyCutsCmd;                            
220   delete dumpCutValuesCmd;                        
221   delete dumpOrdParamCmd;                         
222   delete theDirectory;                            
223 }                                                 
224                                                   
225 // -------------------------------------------    
226 void G4UserPhysicsListMessenger::SetNewValue(G    
227 {                                                 
228   G4ExceptionDescription ed;                      
229   if (command == setCutCmd) {                     
230     G4double newCut = setCutCmd->GetNewDoubleV    
231     thePhysicsList->SetDefaultCutValue(newCut)    
232     thePhysicsList->SetCuts();                    
233   }                                               
234   else if (command == setCutForAGivenParticleC    
235     G4String particleName, unit;                  
236     G4double cut;                                 
237     std::istringstream str(newValue);             
238     str >> particleName >> cut >> unit;           
239     thePhysicsList->SetCutValue(cut * G4UIcomm    
240   }                                               
241   else if (command == getCutForAGivenParticleC    
242     G4cout << thePhysicsList->GetCutValue(newV    
243   }                                               
244   else if (command == setCutRCmd) {               
245     std::istringstream is(newValue);              
246     G4String regName;                             
247     G4String uniName;                             
248     G4double cVal = -1.0;                         
249     is >> regName >> cVal >> uniName;             
250     if (is.fail()) {                              
251       ed << "illegal arguments : " << newValue    
252       command->CommandFailed(ed);                 
253       return;                                     
254     }                                             
255     thePhysicsList->SetCutsForRegion(cVal * (s    
256   }                                               
257   else if (command == verboseCmd) {               
258     thePhysicsList->SetVerboseLevel(verboseCmd    
259   }                                               
260   else if (command == dumpListCmd) {              
261     thePhysicsList->DumpList();                   
262   }                                               
263   else if (command == dumpOrdParamCmd) {          
264     G4int stype = dumpOrdParamCmd->GetNewIntVa    
265     G4PhysicsListHelper::GetPhysicsListHelper(    
266   }                                               
267   else if (command == addProcManCmd) {            
268     G4ParticleDefinition* particle = (G4Partic    
269     if (particle == nullptr) {                    
270       ed << " Particle is not found : " << new    
271       command->CommandFailed(ed);                 
272       return;                                     
273     }                                             
274     if (particle->GetProcessManager() != nullp    
275       ed << " Particle is not initialized : "     
276       command->CommandFailed(ed);                 
277       return;                                     
278     }                                             
279     thePhysicsList->AddProcessManager(particle    
280   }                                               
281   else if (command == buildPTCmd) {               
282     G4ParticleDefinition* particle = (G4Partic    
283     if (particle == nullptr) {                    
284       ed << " Particle is not found : " << new    
285       command->CommandFailed(ed);                 
286       return;                                     
287     }                                             
288     thePhysicsList->PreparePhysicsTable(partic    
289     thePhysicsList->BuildPhysicsTable(particle    
290   }                                               
291   else if (command == storeCmd) {                 
292     thePhysicsList->StorePhysicsTable(newValue    
293   }                                               
294   else if (command == retrieveCmd) {              
295     if ((newValue == "OFF") || (newValue == "o    
296       thePhysicsList->ResetPhysicsTableRetriev    
297     }                                             
298     else {                                        
299       thePhysicsList->SetPhysicsTableRetrieved    
300     }                                             
301   }                                               
302   else if (command == asciiCmd) {                 
303     if (asciiCmd->GetNewIntValue(newValue) ==     
304       thePhysicsList->ResetStoredInAscii();       
305     }                                             
306     else {                                        
307       thePhysicsList->SetStoredInAscii();         
308     }                                             
309   }                                               
310   else if (command == applyCutsCmd) {             
311     G4Tokenizer next(newValue);                   
312                                                   
313     // check 1st argument                         
314     G4String temp = G4String(next());             
315     G4bool flag = (temp == "true" || temp == "    
316                                                   
317     // check 2nd argument                         
318     G4String name = G4String(next());             
319                                                   
320     thePhysicsList->SetApplyCuts(flag, name);     
321   }                                               
322   else if (command == dumpCutValuesCmd) {         
323     thePhysicsList->DumpCutValuesTable(1);        
324   }                                               
325 }                                                 
326                                                   
327 // -------------------------------------------    
328 G4String G4UserPhysicsListMessenger::GetCurren    
329 {                                                 
330   G4String cv;                                    
331   G4String candidates("none");                    
332   auto piter = G4ParticleTable::GetParticleTab    
333                                                   
334   if (command == setCutCmd) {                     
335     cv = setCutCmd->ConvertToString(thePhysics    
336   }                                               
337   else if (command == verboseCmd) {               
338     cv = verboseCmd->ConvertToString(thePhysic    
339   }                                               
340   else if (command == addProcManCmd) {            
341     // set candidate list                         
342     piter->reset();                               
343     while ((*piter)()) {                          
344       G4ParticleDefinition* particle = piter->    
345       candidates += " " + particle->GetParticl    
346     }                                             
347     addProcManCmd->SetCandidates(candidates);     
348     cv = "";                                      
349   }                                               
350   else if (command == buildPTCmd) {               
351     // set candidate list                         
352     piter->reset();                               
353     while ((*piter)()) {                          
354       G4ParticleDefinition* particle = piter->    
355       candidates += " " + particle->GetParticl    
356     }                                             
357     addProcManCmd->SetCandidates(candidates);     
358     cv = "";                                      
359   }                                               
360   else if (command == storeCmd) {                 
361     cv = thePhysicsList->GetPhysicsTableDirect    
362   }                                               
363   else if (command == retrieveCmd) {              
364     if (thePhysicsList->IsPhysicsTableRetrieve    
365       cv = thePhysicsList->GetPhysicsTableDire    
366     }                                             
367     else {                                        
368       cv = "OFF";                                 
369     }                                             
370   }                                               
371   else if (command == asciiCmd) {                 
372     if (thePhysicsList->IsStoredInAscii()) {      
373       cv = "1";                                   
374     }                                             
375     else {                                        
376       cv = "0";                                   
377     }                                             
378   }                                               
379                                                   
380   return cv;                                      
381 }                                                 
382