Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/run/src/G4RunMessenger.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/G4RunMessenger.cc (Version 11.3.0) and /run/src/G4RunMessenger.cc (Version 2.0)


                                                   >>   1 // This code implementation is the intellectual property of
                                                   >>   2 // the GEANT4 collaboration.
  1 //                                                  3 //
  2 // ******************************************* <<   4 // By copying, distributing or modifying the Program (or any work
  3 // * License and Disclaimer                    <<   5 // based on the Program) you indicate your acceptance of this statement,
  4 // *                                           <<   6 // and all its terms.
  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 //                                                  7 //
 26 // G4RunMessenger implementation               <<   8 // $Id: G4RunMessenger.cc,v 1.4.8.1.2.5 1999/12/14 09:16:50 gunter Exp $
                                                   >>   9 // GEANT4 tag $Name: geant4-02-00 $
 27 //                                                 10 //
 28 // Original author: M.Asai, 1997               << 
 29 // ------------------------------------------- << 
 30                                                    11 
 31 #include "G4RunMessenger.hh"                       12 #include "G4RunMessenger.hh"
 32                                                << 
 33 #include "G4MTRunManager.hh"                   << 
 34 #include "G4SubEvtRunManager.hh"               << 
 35 #include "G4ProductionCutsTable.hh"            << 
 36 #include "G4RunManager.hh"                         13 #include "G4RunManager.hh"
 37 #include "G4Tokenizer.hh"                      <<  14 #include "G4UIdirectory.hh"
 38 #include "G4UIcmdWithABool.hh"                 <<  15 #include "G4UIcmdWithoutParameter.hh"
 39 #include "G4UIcmdWithAString.hh"                   16 #include "G4UIcmdWithAString.hh"
 40 #include "G4UIcmdWithAnInteger.hh"                 17 #include "G4UIcmdWithAnInteger.hh"
 41 #include "G4UIcmdWithoutParameter.hh"          <<  18 #include "G4UIcmdWithABool.hh"
 42 #include "G4UIcommand.hh"                          19 #include "G4UIcommand.hh"
 43 #include "G4UIdirectory.hh"                    << 
 44 #include "G4UImanager.hh"                      << 
 45 #include "G4UIparameter.hh"                        20 #include "G4UIparameter.hh"
 46 #include "G4ios.hh"                                21 #include "G4ios.hh"
 47 #include "Randomize.hh"                        <<  22 #include "g4std/strstream"
 48                                                    23 
 49 #include <sstream>                             <<  24 G4RunMessenger::G4RunMessenger(G4RunManager * runMgr)
 50                                                <<  25 :runManager(runMgr)
 51 G4RunMessenger::G4RunMessenger(G4RunManager* r << 
 52 {                                                  26 {
 53   runDirectory = new G4UIdirectory("/run/");       27   runDirectory = new G4UIdirectory("/run/");
 54   runDirectory->SetGuidance("Run control comma     28   runDirectory->SetGuidance("Run control commands.");
 55                                                    29 
 56   initCmd = new G4UIcmdWithoutParameter("/run/ <<  30   initCmd = new G4UIcmdWithoutParameter("/run/initialize",this);
 57   initCmd->SetGuidance("Initialize G4 kernel."     31   initCmd->SetGuidance("Initialize G4 kernel.");
 58   initCmd->AvailableForStates(G4State_PreInit, <<  32   initCmd->AvailableForStates(PreInit,Idle),
 59                                                    33 
 60     beamOnCmd = new G4UIcommand("/run/beamOn", <<  34   beamOnCmd = new G4UIcommand("/run/beamOn",this);
 61   beamOnCmd->SetGuidance("Start a Run.");          35   beamOnCmd->SetGuidance("Start a Run.");
 62   beamOnCmd->SetGuidance("If G4 kernel is not      36   beamOnCmd->SetGuidance("If G4 kernel is not initialized, it will be initialized.");
 63   beamOnCmd->SetGuidance("Default number of ev     37   beamOnCmd->SetGuidance("Default number of events to be processed is 1.");
 64   beamOnCmd->SetGuidance("The second and third     38   beamOnCmd->SetGuidance("The second and third arguments can be used for");
 65   beamOnCmd->SetGuidance("executing a macro fi     39   beamOnCmd->SetGuidance("executing a macro file at the end of each event.");
 66   beamOnCmd->SetGuidance("If the second argume     40   beamOnCmd->SetGuidance("If the second argument, i.e. name of the macro");
 67   beamOnCmd->SetGuidance("file, is given but t     41   beamOnCmd->SetGuidance("file, is given but the third argument is not,");
 68   beamOnCmd->SetGuidance("the macro file will      42   beamOnCmd->SetGuidance("the macro file will be executed for all of the");
 69   beamOnCmd->SetGuidance("event.");                43   beamOnCmd->SetGuidance("event.");
 70   beamOnCmd->SetGuidance("If the third argumen     44   beamOnCmd->SetGuidance("If the third argument (nSelect) is given, the");
 71   beamOnCmd->SetGuidance("macro file will be e     45   beamOnCmd->SetGuidance("macro file will be executed only for the first");
 72   beamOnCmd->SetGuidance("nSelect events.");       46   beamOnCmd->SetGuidance("nSelect events.");
 73   beamOnCmd->AvailableForStates(G4State_PreIni <<  47   beamOnCmd->AvailableForStates(PreInit,Idle);
 74   beamOnCmd->SetToBeBroadcasted(false);        <<  48   G4UIparameter* p1 = new G4UIparameter("numberOfEvent",'i',true);
 75   auto p1 = new G4UIparameter("numberOfEvent", << 
 76   p1->SetDefaultValue(1);                          49   p1->SetDefaultValue(1);
 77   p1->SetParameterRange("numberOfEvent >= 0"); <<  50   p1->SetParameterRange("numberOfEvent > 0");
 78   beamOnCmd->SetParameter(p1);                     51   beamOnCmd->SetParameter(p1);
 79   auto p2 = new G4UIparameter("macroFile", 's' <<  52   G4UIparameter* p2 = new G4UIparameter("macroFile",'s',true);
 80   p2->SetDefaultValue("***NULL***");               53   p2->SetDefaultValue("***NULL***");
 81   beamOnCmd->SetParameter(p2);                     54   beamOnCmd->SetParameter(p2);
 82   auto p3 = new G4UIparameter("nSelect", 'i',  <<  55   G4UIparameter* p3 = new G4UIparameter("nSelect",'i',true);
 83   p3->SetDefaultValue(-1);                         56   p3->SetDefaultValue(-1);
 84   p3->SetParameterRange("nSelect>=-1");            57   p3->SetParameterRange("nSelect>=-1");
 85   beamOnCmd->SetParameter(p3);                     58   beamOnCmd->SetParameter(p3);
 86   // beamOnCmd->SetToBeBroadcasted(false);     << 
 87                                                    59 
 88   verboseCmd = new G4UIcmdWithAnInteger("/run/ <<  60   verboseCmd = new G4UIcmdWithAnInteger("/run/verbose",this);
 89   verboseCmd->SetGuidance("Set the Verbose lev     61   verboseCmd->SetGuidance("Set the Verbose level of G4RunManager.");
 90   verboseCmd->SetGuidance(" 0 : Silent (defaul     62   verboseCmd->SetGuidance(" 0 : Silent (default)");
 91   verboseCmd->SetGuidance(" 1 : Display main t     63   verboseCmd->SetGuidance(" 1 : Display main topics");
 92   verboseCmd->SetGuidance(" 2 : Display main t     64   verboseCmd->SetGuidance(" 2 : Display main topics and run summary");
 93   verboseCmd->SetGuidance(" 3 : Display some a <<  65   verboseCmd->SetParameterName("level",true);
 94   verboseCmd->SetGuidance(" 4 : Display detail << 
 95   verboseCmd->SetGuidance(" N.B. 3 or 4 may ca << 
 96   verboseCmd->SetParameterName("level", true); << 
 97   verboseCmd->SetDefaultValue(0);                  66   verboseCmd->SetDefaultValue(0);
 98   verboseCmd->SetRange("level >=0 && level <=4 <<  67   verboseCmd->SetRange("level >=0 && level <=2");
 99                                                << 
100   printProgCmd = new G4UIcmdWithAnInteger("/ru << 
101   printProgCmd->SetGuidance("Display begin_of_ << 
102   printProgCmd->SetGuidance("If it is set to z << 
103   printProgCmd->SetGuidance("If it is set to - << 
104   printProgCmd->SetParameterName("mod", true); << 
105   printProgCmd->SetDefaultValue(-1);           << 
106   printProgCmd->SetRange("mod>=-1");           << 
107                                                << 
108   nThreadsCmd = new G4UIcmdWithAnInteger("/run << 
109   nThreadsCmd->SetGuidance("Set the number of  << 
110   nThreadsCmd->SetGuidance("This command works << 
111   nThreadsCmd->SetGuidance("This command is va << 
112   nThreadsCmd->SetGuidance("The command is ign << 
113   nThreadsCmd->SetParameterName("nThreads", tr << 
114   nThreadsCmd->SetDefaultValue(2);             << 
115   nThreadsCmd->SetRange("nThreads >0");        << 
116   nThreadsCmd->SetToBeBroadcasted(false);      << 
117   nThreadsCmd->AvailableForStates(G4State_PreI << 
118                                                << 
119   maxThreadsCmd = new G4UIcmdWithoutParameter( << 
120   maxThreadsCmd->SetGuidance(                  << 
121     "Set the number of threads to be the numbe << 
122   maxThreadsCmd->SetGuidance("This command wor << 
123   maxThreadsCmd->SetGuidance("This command is  << 
124   maxThreadsCmd->SetGuidance("The command is i << 
125   maxThreadsCmd->SetToBeBroadcasted(false);    << 
126   maxThreadsCmd->AvailableForStates(G4State_Pr << 
127                                                << 
128   pinAffinityCmd = new G4UIcmdWithAnInteger("/ << 
129   pinAffinityCmd->SetGuidance(                 << 
130     "Locks each thread to a specific logical c << 
131     "are locked in round robin to logical core << 
132   pinAffinityCmd->SetGuidance("This command is << 
133   pinAffinityCmd->SetGuidance("This command wo << 
134   pinAffinityCmd->SetGuidance("This command is << 
135   pinAffinityCmd->SetGuidance(                 << 
136     "If a value n>0 is provided it starts sett << 
137     "from the n-th CPU (note: counting from 1) << 
138   pinAffinityCmd->SetGuidance(                 << 
139     "E.g. /run/pinAffinity 3 locks first threa << 
140     "third logical CPU (number 2).");          << 
141   pinAffinityCmd->SetGuidance("If a value n<0  << 
142   pinAffinityCmd->SetParameterName("pinAffinit << 
143   pinAffinityCmd->SetDefaultValue(1);          << 
144   pinAffinityCmd->SetToBeBroadcasted(false);   << 
145   pinAffinityCmd->SetRange("pinAffinity > 0 || << 
146   pinAffinityCmd->AvailableForStates(G4State_P << 
147                                                << 
148   evModCmd = new G4UIcommand("/run/eventModulo << 
149   evModCmd->SetGuidance("Set the event modulo  << 
150   evModCmd->SetGuidance("i.e. each worker thre << 
151   evModCmd->SetGuidance("comes back to G4MTRun << 
152   evModCmd->SetGuidance("If it is set to zero  << 
153   evModCmd->SetGuidance("   N = int( sqrt( num << 
154   evModCmd->SetGuidance("The value N may affec << 
155   evModCmd->SetGuidance("if N is too small com << 
156   evModCmd->SetGuidance("The second parameter  << 
157   evModCmd->SetGuidance("thread is seeded by t << 
158   evModCmd->SetGuidance("by the master G4MTRun << 
159   evModCmd->SetGuidance(" - If seedOnce is set << 
160   evModCmd->SetGuidance("   by G4MTRunManager  << 
161   evModCmd->SetGuidance("   This option guaran << 
162   evModCmd->SetGuidance("   of threads.");     << 
163   evModCmd->SetGuidance(" - If seedOnce is set << 
164   evModCmd->SetGuidance("   event of each run  << 
165   evModCmd->SetGuidance("   guaranteed only if << 
166   evModCmd->SetGuidance("   On the other hand, << 
167   evModCmd->SetGuidance("   in particular for  << 
168   evModCmd->SetGuidance("   particle energy an << 
169   evModCmd->SetGuidance(" - If seedOnce is set << 
170   evModCmd->SetGuidance("   group of N events. << 
171   evModCmd->SetGuidance("   Geant4 allows numb << 
172   evModCmd->SetGuidance("   event loop.");     << 
173   evModCmd->SetGuidance("This command is valid << 
174   evModCmd->SetGuidance("This command is ignor << 
175   evModCmd->SetGuidance("sub-event parallel mo << 
176   auto emp1 = new G4UIparameter("N", 'i', true << 
177   emp1->SetDefaultValue(0);                    << 
178   emp1->SetParameterRange("N >= 0");           << 
179   evModCmd->SetParameter(emp1);                << 
180   auto emp2 = new G4UIparameter("seedOnce", 'i << 
181   emp2->SetDefaultValue(0);                    << 
182   emp2->SetParameterRange("seedOnce >= 0 && se << 
183   evModCmd->SetParameter(emp2);                << 
184   evModCmd->SetToBeBroadcasted(false);         << 
185   evModCmd->AvailableForStates(G4State_PreInit << 
186                                                << 
187   dumpRegCmd = new G4UIcmdWithAString("/run/du << 
188   dumpRegCmd->SetGuidance("Dump region informa << 
189   dumpRegCmd->SetGuidance("In case name of a r << 
190   dumpRegCmd->SetParameterName("regionName", t << 
191   dumpRegCmd->SetDefaultValue("**ALL**");      << 
192   dumpRegCmd->AvailableForStates(G4State_Idle) << 
193                                                << 
194   dumpCoupleCmd = new G4UIcmdWithoutParameter( << 
195   dumpCoupleCmd->SetGuidance("Dump material-cu << 
196   dumpCoupleCmd->SetGuidance("Note that materi << 
197   dumpCoupleCmd->SetGuidance("after BeamOn has << 
198   dumpCoupleCmd->AvailableForStates(G4State_Id << 
199                                                    68 
200   optCmd = new G4UIcmdWithABool("/run/optimize <<  69   optCmd = new G4UIcmdWithABool("/run/optimizeGeometry",this);
201   optCmd->SetGuidance("Set the optimization fl     70   optCmd->SetGuidance("Set the optimization flag for geometry.");
202   optCmd->SetGuidance("If it is set to TRUE, G     71   optCmd->SetGuidance("If it is set to TRUE, G4GeometryManager will optimize");
203   optCmd->SetGuidance("the geometry definition     72   optCmd->SetGuidance("the geometry definitions.");
204   optCmd->SetGuidance("GEANT4 is initialized w     73   optCmd->SetGuidance("GEANT4 is initialized with this flag as TRUE.");
205   optCmd->SetParameterName("optimizeFlag", tru <<  74   optCmd->SetParameterName("optimizeFlag",true);
206   optCmd->SetDefaultValue(true);                   75   optCmd->SetDefaultValue(true);
207   optCmd->AvailableForStates(G4State_PreInit,  <<  76   optCmd->AvailableForStates(PreInit,Idle);
208                                                    77 
209   brkBoECmd = new G4UIcmdWithABool("/run/break <<  78   brkBoECmd = new G4UIcmdWithABool("/run/breakAtBeginOfEvent",this);
210   brkBoECmd->SetGuidance("Set a break point at <<  79   brkBoECmd->SetGuidance("Set a break point at the begining of every event.");
211   brkBoECmd->SetParameterName("flag", true);   <<  80   brkBoECmd->SetParameterName("flag",true);
212   brkBoECmd->SetDefaultValue(true);                81   brkBoECmd->SetDefaultValue(true);
213                                                <<  82   
214   brkEoECmd = new G4UIcmdWithABool("/run/break <<  83   brkEoECmd = new G4UIcmdWithABool("/run/breakAtEndOfEvent",this);
215   brkEoECmd->SetGuidance("Set a break point at     84   brkEoECmd->SetGuidance("Set a break point at the end of every event.");
216   brkEoECmd->SetParameterName("flag", true);   <<  85   brkEoECmd->SetParameterName("flag",true);
217   brkEoECmd->SetDefaultValue(true);                86   brkEoECmd->SetDefaultValue(true);
218                                                <<  87   
219   abortCmd = new G4UIcmdWithABool("/run/abort" <<  88   abortCmd = new G4UIcmdWithoutParameter("/run/abort",this);
220   abortCmd->SetGuidance("Abort current run pro     89   abortCmd->SetGuidance("Abort current run processing.");
221   abortCmd->SetGuidance(                       <<  90   abortCmd->AvailableForStates(GeomClosed,EventProc);
222     "If softAbort is false (default), currentl << 
223     "will be immediately aborted,");           << 
224   abortCmd->SetGuidance(                       << 
225     "while softAbort is true, abortion occurs  << 
226     "processing the current event.");          << 
227   abortCmd->AvailableForStates(G4State_GeomClo << 
228   abortCmd->SetParameterName("softAbort", true << 
229   abortCmd->SetDefaultValue(false);            << 
230                                                << 
231   abortEventCmd = new G4UIcmdWithoutParameter( << 
232   abortEventCmd->SetGuidance("Abort currently  << 
233   abortEventCmd->AvailableForStates(G4State_Ev << 
234                                                << 
235   geomCmd = new G4UIcmdWithoutParameter("/run/ << 
236   geomCmd->SetGuidance("Force geometry to be c << 
237   geomCmd->SetGuidance("This command must be a << 
238   geomCmd->SetGuidance(" after the first initi << 
239   geomCmd->AvailableForStates(G4State_PreInit, << 
240                                                << 
241   geomRebCmd = new G4UIcmdWithABool("/run/rein << 
242   geomRebCmd->SetGuidance("Force geometry to b << 
243   geomRebCmd->SetGuidance("This command must b << 
244   geomRebCmd->SetGuidance(" detector construct << 
245   geomRebCmd->SetGuidance("/run/geometryModifi << 
246   geomRebCmd->SetParameterName("destroyFirst", << 
247   geomRebCmd->SetDefaultValue(false);          << 
248   geomRebCmd->AvailableForStates(G4State_PreIn << 
249                                                << 
250   physCmd = new G4UIcmdWithoutParameter("/run/ << 
251   physCmd->SetGuidance("Force all physics tabl << 
252   physCmd->SetGuidance("This command must be a << 
253   physCmd->SetGuidance(" if physics process ha << 
254   physCmd->SetGuidance(" first initialization  << 
255   physCmd->AvailableForStates(G4State_PreInit, << 
256                                                << 
257   constScoreCmd = new G4UIcmdWithoutParameter( << 
258   constScoreCmd->SetGuidance("Construct scorin << 
259   constScoreCmd->SetGuidance(                  << 
260     "This command is not mandatory, but automa << 
261     "called when a run starts.");              << 
262   constScoreCmd->SetGuidance(                  << 
263     "But the user may use this to visualize th << 
264     "world(s) before a run to start.");        << 
265   constScoreCmd->AvailableForStates(G4State_Id << 
266                                                << 
267   randomDirectory = new G4UIdirectory("/random << 
268   randomDirectory->SetGuidance("Random number  << 
269                                                << 
270   seedCmd = new G4UIcmdWithAString("/random/se << 
271   seedCmd->SetGuidance("Initialize the random  << 
272   seedCmd->SetGuidance("Number of integers sho << 
273   seedCmd->SetGuidance(                        << 
274     "Actual number of integers to be used depe << 
275     "random number engine.");                  << 
276 #ifdef G4MULTITHREADED                         << 
277   seedCmd->SetGuidance("This command sets the  << 
278 #endif                                         << 
279   seedCmd->SetParameterName("IntArray", false) << 
280   seedCmd->AvailableForStates(G4State_PreInit, << 
281   seedCmd->SetToBeBroadcasted(false);          << 
282                                                << 
283   randDirCmd = new G4UIcmdWithAString("/random << 
284   randDirCmd->SetGuidance("Define the director << 
285   randDirCmd->SetGuidance("Directory will be c << 
286   randDirCmd->SetParameterName("fileName", tru << 
287   randDirCmd->SetDefaultValue("./");           << 
288   randDirCmd->AvailableForStates(G4State_PreIn << 
289                                                << 
290   savingFlagCmd = new G4UIcmdWithABool("/rando << 
291   savingFlagCmd->SetGuidance("The randomNumber << 
292   savingFlagCmd->SetGuidance(                  << 
293     "beginning of run (currentRun.rndm) and "  << 
294     "beginning of event (currentEvent.rndm) ") << 
295   savingFlagCmd->SetParameterName("flag", true << 
296   savingFlagCmd->SetDefaultValue(true);        << 
297                                                << 
298   saveThisRunCmd = new G4UIcmdWithoutParameter << 
299   saveThisRunCmd->SetGuidance("copy currentRun << 
300   saveThisRunCmd->AvailableForStates(G4State_I << 
301                                                << 
302   saveThisEventCmd = new G4UIcmdWithoutParamet << 
303   saveThisEventCmd->SetGuidance("copy currentE << 
304   saveThisEventCmd->AvailableForStates(G4State << 
305                                                    91 
306   restoreRandCmd = new G4UIcmdWithAString("/ra <<  92   geomCmd = new G4UIcmdWithoutParameter("/run/geometryModified",this);
307   restoreRandCmd->SetGuidance("Reset the statu <<  93   geomCmd->SetGuidance("Force geometry to be closed again.");
                                                   >>  94   geomCmd->SetGuidance("This command must be applied");
                                                   >>  95   geomCmd->SetGuidance(" if geometry has been modified after the");
                                                   >>  96   geomCmd->SetGuidance(" first initialization (or BeamOn).");
                                                   >>  97   geomCmd->AvailableForStates(PreInit,Idle),
                                                   >>  98 
                                                   >>  99   cutCmd = new G4UIcmdWithoutParameter("/run/cutoffModified",this);
                                                   >> 100   cutCmd->SetGuidance("Force closssection tables to be calculated again.");
                                                   >> 101   cutCmd->SetGuidance("This command must be applied");
                                                   >> 102   cutCmd->SetGuidance(" if cutoff value(s) have been modified after the");
                                                   >> 103   cutCmd->SetGuidance(" first initialization (or BeamOn).");
                                                   >> 104   cutCmd->AvailableForStates(PreInit,Idle);
                                                   >> 105 
                                                   >> 106   storeRandCmd = new G4UIcmdWithAnInteger("/run/storeRandomNumberStatus",this);
                                                   >> 107   storeRandCmd->SetGuidance("Store the status of the random number engine to a file.");
                                                   >> 108   storeRandCmd->SetGuidance("See CLHEP manual for detail.");
                                                   >> 109   storeRandCmd->SetGuidance("Frequency : 0 - not stored");
                                                   >> 110   storeRandCmd->SetGuidance("            1 - begining of each run");
                                                   >> 111   storeRandCmd->SetGuidance("           -1 - begining of each run (file overwritten)");
                                                   >> 112   storeRandCmd->SetGuidance("            2 - begining of each event before generating primaries");
                                                   >> 113   storeRandCmd->SetGuidance("           -2 - begining of each event before generating primaries (file overwritten)");
                                                   >> 114   storeRandCmd->SetGuidance("Stored status can be restored by ");
                                                   >> 115   storeRandCmd->SetGuidance("  /run/restoreRandomNumberStatus command.");
                                                   >> 116   storeRandCmd->SetGuidance("In case Frequency is negative, a output file (file name RandEngine.stat)");
                                                   >> 117   storeRandCmd->SetGuidance("  is overwitten every time.");
                                                   >> 118   storeRandCmd->SetGuidance("In case Frequency is 1, file names are RandEngineRxxx.stat,");
                                                   >> 119   storeRandCmd->SetGuidance("  where xxx is the run number.");
                                                   >> 120   storeRandCmd->SetGuidance("In case Frequency is 2, file names are RandEngineRxxxEyyy.stat,");
                                                   >> 121   storeRandCmd->SetGuidance("  where xxx is the run number and yyy is the event number.");
                                                   >> 122   storeRandCmd->AvailableForStates(PreInit,Idle);
                                                   >> 123   storeRandCmd->SetParameterName("frequency",true);
                                                   >> 124   storeRandCmd->SetDefaultValue(1);
                                                   >> 125   storeRandCmd->SetRange("frequency >=-2 && frequency <=2");
                                                   >> 126 
                                                   >> 127   restoreRandCmd = new G4UIcmdWithAString("/run/restoreRandomNumberStatus",this);
                                                   >> 128   restoreRandCmd->SetGuidance("Restore the status of the random number engine from a file.");
308   restoreRandCmd->SetGuidance("See CLHEP manua    129   restoreRandCmd->SetGuidance("See CLHEP manual for detail.");
309   restoreRandCmd->SetGuidance("The engine stat    130   restoreRandCmd->SetGuidance("The engine status must be stored beforehand.");
310   restoreRandCmd->SetGuidance(                 << 131   restoreRandCmd->SetParameterName("fileName",true);
311     "Directory of the status file should be se << 132   restoreRandCmd->SetDefaultValue("RandEngine.stat");
312     " /random/setDirectoryName.");             << 133   restoreRandCmd->AvailableForStates(PreInit,Idle,GeomClosed);
313   restoreRandCmd->SetParameterName("fileName", << 134 
314   restoreRandCmd->SetDefaultValue("currentRun. << 
315   restoreRandCmd->AvailableForStates(G4State_P << 
316   restoreRandCmd->SetToBeBroadcasted(false);   << 
317                                                << 
318   restoreRandCmdMT = new G4UIcmdWithABool("/ra << 
319   restoreRandCmdMT->SetGuidance("Reset the sta << 
320   restoreRandCmdMT->SetGuidance("Note that the << 
321   restoreRandCmdMT->SetGuidance(               << 
322     "run{#1}evt{#2}.rndm ; where #1 is the run << 
323     "number and #2 is the event number.");     << 
324   restoreRandCmdMT->SetGuidance(               << 
325     "For example to re-seed the first event of << 
326     "run the file should be called run0evt0.rn << 
327   restoreRandCmdMT->SetGuidance(               << 
328     "If for a specific run/event the file is n << 
329     "the standard re-seeding strategy is used. << 
330   restoreRandCmdMT->SetGuidance(               << 
331     "This command has meaning only in MT mode  << 
332     "strong reproducibility studies.");        << 
333   restoreRandCmdMT->SetGuidance(               << 
334     "Directory of the status file should be se << 
335     " /random/setDirectoryName.");             << 
336   restoreRandCmdMT->SetDefaultValue(false);    << 
337   restoreRandCmdMT->AvailableForStates(G4State << 
338                                                << 
339   saveEachEventCmd = new G4UIcmdWithABool("/ra << 
340   saveEachEventCmd->SetGuidance("Save random n << 
341   saveEachEventCmd->SetGuidance("File name con << 
342   saveEachEventCmd->SetParameterName("flag", t << 
343   saveEachEventCmd->SetDefaultValue(true);     << 
344                                                << 
345   randEvtCmd = new G4UIcmdWithAnInteger("/run/ << 
346   randEvtCmd->SetGuidance("Flag to store rndm  << 
347   randEvtCmd->SetGuidance(" flag = 0 : not sto << 
348   randEvtCmd->SetGuidance(" flag = 1 : status  << 
349   randEvtCmd->SetGuidance(                     << 
350     " flag = 2 : status before event processin << 
351     "particle generation) is stored");         << 
352   randEvtCmd->SetGuidance(" flag = 3 : both ar << 
353   randEvtCmd->SetGuidance(                     << 
354     "Note: Some performance overhead may be se << 
355     "status, in particular");                  << 
356   randEvtCmd->SetGuidance(                     << 
357     "for the case of simplest geometry and sma << 
358   randEvtCmd->SetParameterName("flag", true);  << 
359   randEvtCmd->SetDefaultValue(0);              << 
360   randEvtCmd->SetRange("flag>=0 && flag<=3");  << 
361   randEvtCmd->AvailableForStates(G4State_PreIn << 
362                                                << 
363   procUICmds = new G4UIcmdWithoutParameter("/r << 
364   procUICmds->SetToBeBroadcasted(false);       << 
365   procUICmds->SetGuidance("Force workers to pr << 
366   procUICmds->SetGuidance("This commands is me << 
367   procUICmds->AvailableForStates(G4State_PreIn << 
368                                                << 
369   trajMergeCmd = new G4UIcmdWithABool("/run/tr << 
370   trajMergeCmd->SetGuidance("Merge trajectorie << 
371   trajMergeCmd->SetGuidance("In sub-event para << 
372   trajMergeCmd->SetGuidance("threads are not m << 
373   trajMergeCmd->SetGuidance("due to the perfor << 
374   trajMergeCmd->SetGuidance("This command enab << 
375   trajMergeCmd->SetGuidance("/tracking/storeTr << 
376   trajMergeCmd->SetGuidance("This command is v << 
377   trajMergeCmd->AvailableForStates(G4State_Pre << 
378   trajMergeCmd->SetParameterName("flag", true) << 
379   trajMergeCmd->SetDefaultValue(true);         << 
380   trajMergeCmd->SetToBeBroadcasted(false);     << 
381 }                                                 135 }
382                                                   136 
383 // ------------------------------------------- << 
384 G4RunMessenger::~G4RunMessenger()                 137 G4RunMessenger::~G4RunMessenger()
385 {                                                 138 {
386   delete beamOnCmd;                               139   delete beamOnCmd;
387   delete verboseCmd;                              140   delete verboseCmd;
388   delete printProgCmd;                         << 
389   delete nThreadsCmd;                          << 
390   delete maxThreadsCmd;                        << 
391   delete pinAffinityCmd;                       << 
392   delete evModCmd;                             << 
393   delete optCmd;                                  141   delete optCmd;
394   delete dumpRegCmd;                           << 
395   delete dumpCoupleCmd;                        << 
396   delete brkBoECmd;                               142   delete brkBoECmd;
397   delete brkEoECmd;                               143   delete brkEoECmd;
398   delete abortCmd;                                144   delete abortCmd;
399   delete abortEventCmd;                        << 
400   delete initCmd;                                 145   delete initCmd;
401   delete geomCmd;                                 146   delete geomCmd;
402   delete geomRebCmd;                           << 147   delete cutCmd;
403   delete physCmd;                              << 148   delete storeRandCmd;
404   delete randEvtCmd;                           << 
405   delete constScoreCmd;                        << 
406   delete procUICmds;                           << 
407   delete trajMergeCmd;                         << 
408                                                << 
409   delete seedCmd;                              << 
410   delete savingFlagCmd;                        << 
411   delete saveThisRunCmd;                       << 
412   delete saveThisEventCmd;                     << 
413   delete restoreRandCmd;                          149   delete restoreRandCmd;
414   delete randomDirectory;                      << 
415   delete saveEachEventCmd;                     << 
416                                                << 
417   delete randDirCmd;                           << 
418   delete runDirectory;                            150   delete runDirectory;
419                                                << 
420   delete restoreRandCmdMT;                     << 
421 }                                                 151 }
422                                                   152 
423 // ------------------------------------------- << 153 void G4RunMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
424 void G4RunMessenger::SetNewValue(G4UIcommand*  << 
425 {                                                 154 {
426   if (command == beamOnCmd) {                  << 155   if( command==beamOnCmd )
                                                   >> 156   {
427     G4int nev;                                    157     G4int nev;
428     G4int nst;                                 << 158     G4int ns;
429     const auto nv = (const char*)newValue;     << 159     const char* nv = (const char*)newValue;
430     std::istringstream is(nv);                 << 160     G4std::istrstream is((char*)nv);
431     is >> nev >> macroFileName >> nst;         << 161     is >> nev >> macroFileName >> ns;
432     if (macroFileName == "***NULL***") {       << 162     if(macroFileName=="***NULL***")
433       runManager->BeamOn(nev);                 << 163     { runManager->BeamOn(nev); }
434     }                                          << 164     else
435     else {                                     << 165     { runManager->BeamOn(nev,macroFileName,ns); }
436       runManager->BeamOn(nev, macroFileName, n << 166   }
437     }                                          << 167   else if( command==verboseCmd )
438   }                                            << 168   { runManager->SetVerboseLevel(verboseCmd->GetNewIntValue(newValue)); }
439   else if (command == verboseCmd) {            << 169   else if( command==optCmd )
440     runManager->SetVerboseLevel(verboseCmd->Ge << 170   { runManager->SetGeometryToBeOptimized(optCmd->GetNewBoolValue(newValue)); }
441   }                                            << 171   else if( command==brkBoECmd )
442   else if (command == printProgCmd) {          << 172   { runManager->SetPauseAtBeginOfEvent(brkBoECmd->GetNewBoolValue(newValue)); }
443     runManager->SetPrintProgress(printProgCmd- << 173   else if( command==brkEoECmd )
444   }                                            << 174   { runManager->SetPauseAtEndOfEvent(brkEoECmd->GetNewBoolValue(newValue)); }
445   else if (command == nThreadsCmd) {           << 175   else if( command==abortCmd )
446     G4RunManager::RMType rmType = runManager-> << 176   { runManager->AbortRun(); }
447     if (rmType == G4RunManager::masterRM) {    << 177   else if( command==initCmd )
448       static_cast<G4MTRunManager*>(runManager) << 178   { runManager->Initialize(); }
449         ->SetNumberOfThreads(nThreadsCmd->GetN << 179   else if( command==geomCmd )
450     }                                          << 180   { runManager->GeometryHasBeenModified(); }
451     else if (rmType == G4RunManager::sequentia << 181   else if( command==cutCmd )
452       G4cout << "*** /run/numberOfThreads comm << 182   { runManager->CutOffHasBeenModified(); }
453              << "\nCommand is ignored." << G4e << 183   else if( command==storeRandCmd )
454     }                                          << 184   { runManager->SetRandomNumberStore(storeRandCmd->GetNewIntValue(newValue)); }
455     else {                                     << 185   else if( command==restoreRandCmd )
456       G4Exception("G4RunMessenger::ApplyNewCom << 186   { runManager->RestoreRandomNumberStatus(newValue); }
457                   "/run/numberOfThreads comman << 
458     }                                          << 
459   }                                            << 
460   else if (command == maxThreadsCmd) {         << 
461     G4RunManager::RMType rmType = runManager-> << 
462     if (rmType == G4RunManager::masterRM) {    << 
463       static_cast<G4MTRunManager*>(runManager) << 
464         ->SetNumberOfThreads(G4Threading::G4Ge << 
465     }                                          << 
466     else if (rmType == G4RunManager::sequentia << 
467       G4cout << "*** /run/useMaximumLogicalCor << 
468                 "sequential mode."             << 
469              << "\nCommand is ignored." << G4e << 
470     }                                          << 
471     else {                                     << 
472       G4Exception("G4RunMessenger::ApplyNewCom << 
473                   "/run/useMaximumLogicalCores << 
474     }                                          << 
475   }                                            << 
476   else if (command == pinAffinityCmd) {        << 
477     G4RunManager::RMType rmType = runManager-> << 
478     if (rmType == G4RunManager::masterRM) {    << 
479       static_cast<G4MTRunManager*>(runManager) << 
480         ->SetPinAffinity(pinAffinityCmd->GetNe << 
481     }                                          << 
482     else if (rmType == G4RunManager::sequentia << 
483       G4cout << "*** /run/pinAffinity command  << 
484              << "\nCommand is ignored." << G4e << 
485     }                                          << 
486     else {                                     << 
487       G4Exception("G4RunMessenger::ApplyNewCom << 
488                   "/run/pinAffinity command is << 
489     }                                          << 
490   }                                            << 
491   else if (command == evModCmd) {              << 
492     G4RunManager::RMType rmType = runManager-> << 
493     if (rmType == G4RunManager::masterRM) {    << 
494       G4int nevMod = 0;                        << 
495       G4int sOnce = 0;                         << 
496       const auto nv = (const char*)newValue;   << 
497       std::istringstream is(nv);               << 
498       is >> nevMod >> sOnce;                   << 
499       static_cast<G4MTRunManager*>(runManager) << 
500       G4MTRunManager::SetSeedOncePerCommunicat << 
501     }                                          << 
502     else if (rmType == G4RunManager::sequentia << 
503       G4cout << "*** /run/eventModulo command  << 
504              << "\nCommand is ignored." << G4e << 
505     }                                          << 
506     else if (rmType == G4RunManager::subEventM << 
507       G4cout << "*** /run/eventModulo command  << 
508              << "\nCommand is ignored." << G4e << 
509     }                                          << 
510     else {                                     << 
511       G4Exception("G4RunMessenger::ApplyNewCom << 
512                   "/run/eventModulo command is << 
513     }                                          << 
514   }                                            << 
515   else if (command == dumpRegCmd) {            << 
516     if (newValue == "**ALL**") {               << 
517       runManager->DumpRegion();                << 
518     }                                          << 
519     else {                                     << 
520       runManager->DumpRegion(newValue);        << 
521     }                                          << 
522   }                                            << 
523   else if (command == dumpCoupleCmd) {         << 
524     G4ProductionCutsTable::GetProductionCutsTa << 
525   }                                            << 
526   else if (command == optCmd) {                << 
527     runManager->SetGeometryToBeOptimized(optCm << 
528   }                                            << 
529   else if (command == brkBoECmd) {             << 
530     G4UImanager::GetUIpointer()->SetPauseAtBeg << 
531   }                                            << 
532   else if (command == brkEoECmd) {             << 
533     G4UImanager::GetUIpointer()->SetPauseAtEnd << 
534   }                                            << 
535   else if (command == abortCmd) {              << 
536     runManager->AbortRun(abortCmd->GetNewBoolV << 
537   }                                            << 
538   else if (command == abortEventCmd) {         << 
539     runManager->AbortEvent();                  << 
540   }                                            << 
541   else if (command == initCmd) {               << 
542     runManager->Initialize();                  << 
543   }                                            << 
544   else if (command == geomCmd) {               << 
545     runManager->GeometryHasBeenModified(false) << 
546   }                                            << 
547   else if (command == geomRebCmd) {            << 
548     runManager->ReinitializeGeometry(geomRebCm << 
549   }                                            << 
550   else if (command == physCmd) {               << 
551     runManager->PhysicsHasBeenModified();      << 
552   }                                            << 
553   else if (command == seedCmd) {               << 
554     G4Tokenizer next(newValue);                << 
555     G4int idx = 0;                             << 
556     G4long seeds[100];                         << 
557     G4String vl;                               << 
558     while (!(vl = next()).empty()) {           << 
559       seeds[idx] = StoL(vl);                   << 
560       ++idx;                                   << 
561     }                                          << 
562     if (idx < 2) {                             << 
563       G4cerr << "/random/setSeeds should have  << 
564                 "Command ignored."             << 
565              << G4endl;                        << 
566     }                                          << 
567     else {                                     << 
568       seeds[idx] = 0;                          << 
569       G4Random::setTheSeeds(seeds);            << 
570     }                                          << 
571   }                                            << 
572   else if (command == randDirCmd) {            << 
573     runManager->SetRandomNumberStoreDir(newVal << 
574   }                                            << 
575   else if (command == savingFlagCmd) {         << 
576     runManager->SetRandomNumberStore(savingFla << 
577   }                                            << 
578   else if (command == saveThisRunCmd) {        << 
579     runManager->rndmSaveThisRun();             << 
580   }                                            << 
581   else if (command == saveThisEventCmd) {      << 
582     runManager->rndmSaveThisEvent();           << 
583   }                                            << 
584   else if (command == restoreRandCmd) {        << 
585     runManager->RestoreRandomNumberStatus(newV << 
586   }                                            << 
587   else if (command == randEvtCmd) {            << 
588     runManager->StoreRandomNumberStatusToG4Eve << 
589   }                                            << 
590   else if (command == saveEachEventCmd) {      << 
591     runManager->SetRandomNumberStorePerEvent(s << 
592   }                                            << 
593   else if (command == constScoreCmd) {         << 
594     runManager->ConstructScoringWorlds();      << 
595   }                                            << 
596   else if (command == restoreRandCmdMT) {      << 
597     runManager->RestoreRndmEachEvent(restoreRa << 
598   }                                            << 
599   else if (command == procUICmds) {            << 
600     G4RunManager::RMType rmType = runManager-> << 
601     if (rmType == G4RunManager::masterRM) {    << 
602       auto rm = dynamic_cast<G4MTRunManager*>( << 
603       if (rm != nullptr) {                     << 
604         rm->RequestWorkersProcessCommandsStack << 
605       }                                        << 
606       else {                                   << 
607         G4Exception("G4RunManager::ApplyNewCom << 
608                     "/run/workersProcessCmds c << 
609                     "non-G4MTRunManager class  << 
610       }                                        << 
611     }                                          << 
612     else if (rmType == G4RunManager::sequentia << 
613       G4cout << "*** /run/workersProcessCmds c << 
614              << "\nCommand is ignored." << G4e << 
615     }                                          << 
616     else {                                     << 
617       G4Exception("G4RunMessenger::ApplyNewCom << 
618                   "/run/workersProcessCmds com << 
619     }                                          << 
620   }                                            << 
621   else if (command == trajMergeCmd) {          << 
622     G4RunManager::RMType rmType = runManager-> << 
623     if (rmType == G4RunManager::subEventMaster << 
624       auto rm = dynamic_cast<G4SubEvtRunManage << 
625       if (rm != nullptr) {                     << 
626         rm->TrajectoriesToBeMerged(trajMergeCm << 
627       }                                        << 
628       else {                                   << 
629         G4ExceptionDescription ed;             << 
630         ed << "/run/trajectoriesToBeMerged com << 
631            << "instance that is not G4SubEvtRu << 
632         G4Exception("G4RunManager::ApplyNewCom << 
633       }                                        << 
634     }                                          << 
635     else {                                     << 
636       G4cout << "*** /run/trajectoriesToBeMerg << 
637              << "class instance that is not G4 << 
638              << "\nCommand is ignored." << G4e << 
639     }                                          << 
640   }                                            << 
641 }                                                 187 }
642                                                   188 
643 // ------------------------------------------- << 189 G4String G4RunMessenger::GetCurrentValue(G4UIcommand * command)
644 G4String G4RunMessenger::GetCurrentValue(G4UIc << 
645 {                                                 190 {
646   G4String cv;                                    191   G4String cv;
647                                                << 192   
648   if (command == verboseCmd) {                 << 193   if( command==verboseCmd )
649     cv = verboseCmd->ConvertToString(runManage << 194   { cv = verboseCmd->ConvertToString(runManager->GetVerboseLevel()); }
650   }                                            << 195   else if( command==storeRandCmd )
651   else if (command == printProgCmd) {          << 196   { cv = storeRandCmd->ConvertToString(runManager->GetRandomNumberStore()); }
652     cv = printProgCmd->ConvertToString(runMana << 197   
653   }                                            << 
654   else if (command == randDirCmd) {            << 
655     cv = runManager->GetRandomNumberStoreDir() << 
656   }                                            << 
657   else if (command == randEvtCmd) {            << 
658     cv = randEvtCmd->ConvertToString(runManage << 
659   }                                            << 
660   else if (command == nThreadsCmd) {           << 
661     G4RunManager::RMType rmType = runManager-> << 
662     if (rmType == G4RunManager::masterRM) {    << 
663       cv = nThreadsCmd->ConvertToString(       << 
664         static_cast<G4MTRunManager*>(runManage << 
665     }                                          << 
666     else if (rmType == G4RunManager::sequentia << 
667       cv = "0";                                << 
668     }                                          << 
669   }                                            << 
670   else if (command == evModCmd) {              << 
671     G4RunManager::RMType rmType = runManager-> << 
672     if (rmType == G4RunManager::masterRM) {    << 
673       cv = evModCmd->ConvertToString(static_ca << 
674            + " " + evModCmd->ConvertToString(G << 
675     }                                          << 
676     else if (rmType == G4RunManager::sequentia << 
677       G4cout << "*** /run/eventModulo command  << 
678     }                                          << 
679   }                                            << 
680                                                << 
681   return cv;                                      198   return cv;
682 }                                                 199 }
                                                   >> 200 
683                                                   201