Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/field/field01/field01.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 /examples/extended/field/field01/field01.cc (Version 11.3.0) and /examples/extended/field/field01/field01.cc (Version 11.0.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 /// \file field/field01/field01.cc                 27 /// \file field/field01/field01.cc
 28 /// \brief Main program of the field/field01 e     28 /// \brief Main program of the field/field01 example
 29 //                                                 29 //
                                                   >>  30 //
                                                   >>  31 //
                                                   >>  32 //
 30 //....oooOO0OOooo........oooOO0OOooo........oo     33 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 31 //....oooOO0OOooo........oooOO0OOooo........oo     34 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 32                                                    35 
 33 #include "F01ActionInitialization.hh"          <<  36 #include "G4Types.hh"
                                                   >>  37 
                                                   >>  38 #ifdef G4MULTITHREADED
                                                   >>  39 // #define USE_MULTITHREADED
                                                   >>  40 #endif
                                                   >>  41 
                                                   >>  42 #ifdef   USE_MULTITHREADED
                                                   >>  43 #include "G4MTRunManager.hh"
                                                   >>  44 #else
                                                   >>  45 #include "F01SteppingVerbose.hh"
                                                   >>  46 #include "G4RunManager.hh"
                                                   >>  47 #endif
                                                   >>  48 
 34 #include "F01DetectorConstruction.hh"              49 #include "F01DetectorConstruction.hh"
                                                   >>  50 #include "F01ActionInitialization.hh"
                                                   >>  51 
 35 #include "F01RunAction.hh"                         52 #include "F01RunAction.hh"
 36 #include "F01SteppingVerbose.hh"               << 
 37                                                    53 
 38 #include "G4RunManagerFactory.hh"              << 
 39 #include "G4Types.hh"                          << 
 40 #include "G4UImanager.hh"                          54 #include "G4UImanager.hh"
 41                                                    55 
 42 #include "FTFP_BERT.hh"                        << 
 43                                                << 
 44 #include "G4EmParameters.hh"                       56 #include "G4EmParameters.hh"
 45 #include "G4HadronicParameters.hh"             <<  57 #include "G4HadronicProcessStore.hh"
                                                   >>  58 
 46 #include "G4PhysicsListHelper.hh"                  59 #include "G4PhysicsListHelper.hh"
                                                   >>  60 
                                                   >>  61 #include "FTFP_BERT.hh"
 47 #include "G4StepLimiterPhysics.hh"                 62 #include "G4StepLimiterPhysics.hh"
 48 #include "G4UIExecutive.hh"                    << 
 49 #include "G4VisExecutive.hh"                   << 
 50 #include "Randomize.hh"                            63 #include "Randomize.hh"
 51                                                    64 
                                                   >>  65 #include "G4VisExecutive.hh"
                                                   >>  66 #include "G4UIExecutive.hh"
                                                   >>  67 
 52 // For Printing statistic from Transporation p     68 // For Printing statistic from Transporation process(es)
 53 #include "G4CoupledTransportation.hh"          << 
 54 #include "G4Electron.hh"                           69 #include "G4Electron.hh"
 55 #include "G4Transportation.hh"                     70 #include "G4Transportation.hh"
 56 #include "G4TransportationParameters.hh"       <<  71 #include "G4CoupledTransportation.hh"
 57                                                    72 
 58 //....oooOO0OOooo........oooOO0OOooo........oo     73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 59                                                    74 
 60 int main(int argc, char** argv)                <<  75 int main(int argc,char** argv)
 61 {                                                  76 {
 62   // Instantiate G4UIExecutive if there are no     77   // Instantiate G4UIExecutive if there are no arguments (interactive mode)
 63   //                                           << 
 64   G4UIExecutive* ui = nullptr;                     78   G4UIExecutive* ui = nullptr;
 65   if (argc == 1) {                             <<  79   if ( argc == 1 ) {
 66     ui = new G4UIExecutive(argc, argv);            80     ui = new G4UIExecutive(argc, argv);
 67   }                                                81   }
 68                                                    82 
 69   // Setting the application-specific Stepping <<  83   // Choose the Random engine
 70   //                                               84   //
 71   auto verbosity = new F01SteppingVerbose;     <<  85   G4Random::setTheEngine(new CLHEP::RanecuEngine);
 72                                                    86 
 73   // Construct the default run manager             87   // Construct the default run manager
 74   auto runManager = G4RunManagerFactory::Creat <<  88   //
 75                                                <<  89 #ifdef USE_MULTITHREADED
 76   // G4TransportationWithMscType: fDisabled, f <<  90   G4MTRunManager * runManager = new G4MTRunManager;
 77   // G4EmParameters::Instance()->SetTransporta <<  91 #else
                                                   >>  92   G4VSteppingVerbose::SetInstance(new F01SteppingVerbose);
                                                   >>  93   G4RunManager * runManager = new G4RunManager;
                                                   >>  94 #endif
 78                                                    95 
 79   // Set mandatory initialization classes          96   // Set mandatory initialization classes
 80   //                                               97   //
 81   // Detector construction                         98   // Detector construction
 82   auto detector = new F01DetectorConstruction( <<  99   F01DetectorConstruction* detector = new F01DetectorConstruction();
 83   // detector->SetUseFSALstepper();  // Uncomm    100   // detector->SetUseFSALstepper();  // Uncomment to use FSAL steppers
 84                                                << 101           
 85   runManager->SetUserInitialization(detector);    102   runManager->SetUserInitialization(detector);
 86                                                   103 
 87   // Configure the use of low thresholds for l    104   // Configure the use of low thresholds for looping particles
 88   //  ( appropriate for typical applications u    105   //  ( appropriate for typical applications using low-energy physics. )
 89   // auto plHelper = G4PhysicsListHelper::GetP << 106   auto plHelper = G4PhysicsListHelper::GetPhysicsListHelper();
 90   // plHelper->UseLowLooperThresholds();       << 107   plHelper->UseLowLooperThresholds();
 91   // plHelper->UseHighLooperThresholds();      << 
 92   // Request a set of pre-selected values of t    108   // Request a set of pre-selected values of the parameters for looping
 93   //    particles:                             << 109   //  particles
 94   //       - High for collider HEP application << 110   
 95   //       - Low  for 'low-E' applications, me << 
 96   // Note: If helper is used select low or hig << 
 97   //       values from TransportationParameter << 
 98                                                << 
 99   // They are currently applied in the followi << 
100   // 1. Transportation Parameters - fine grain << 
101   // 2. Physics List Helper       - impose a f << 
102   // 3. Run Action (F01RunAction) - revise val << 
103   // 4. Tracking Action           - could revi << 
104   //     Note that this also could customise b << 
105   //     to mu-/mu+ , e-/e+ vs others)         << 
106   // If multiple are present, later methods ov << 
107                                                << 
108   // Physics list                                 111   // Physics list
109   G4VModularPhysicsList* physicsList = new FTF    112   G4VModularPhysicsList* physicsList = new FTFP_BERT;
110   physicsList->RegisterPhysics(new G4StepLimit    113   physicsList->RegisterPhysics(new G4StepLimiterPhysics());
111   runManager->SetUserInitialization(physicsLis    114   runManager->SetUserInitialization(physicsList);
112                                                   115 
113   // User action initialization                   116   // User action initialization
114   runManager->SetUserInitialization(new F01Act    117   runManager->SetUserInitialization(new F01ActionInitialization(detector));
115                                                   118 
116   G4double warningE = 10.0 * CLHEP::keV;       << 119   // Fine grained control of thresholds for looping particles
117   G4double importantE = 0.1 * CLHEP::MeV;      << 120   auto runAction= new F01RunAction();
118   G4int numTrials = 30;                        << 121   runAction->SetWarningEnergy(   10.0 * CLHEP::keV );
119                                                << 122               // Looping particles with E < 10 keV will be killed after 1 step
120   G4bool useTransportParams = true;  // Use th << 123               //   with warning.
121                                                << 124               // Looping particles with E > 10 keV will generate a warning.
122   if (useTransportParams) {                    << 125   runAction->SetImportantEnergy( 0.1  * CLHEP::MeV );
123     auto transportParams = G4TransportationPar << 126   runAction->SetNumberOfTrials( 30 );
124     transportParams->SetWarningEnergy(warningE << 127               // Looping particles with E > 0.1 MeV will survive for up to
125     transportParams->SetImportantEnergy(import << 128               //  30 'tracking' steps, and only be killed if they still loop.
126     transportParams->SetNumberOfTrials(numTria << 
127     G4cout << "field01: Using G4Transportation << 
128   }                                            << 
129   else {                                       << 
130     // Fine grained control of thresholds for  << 
131     auto runAction = new F01RunAction();       << 
132     runAction->SetWarningEnergy(warningE);     << 
133     // Looping particles with E < 10 keV will  << 
134     //   with warning.                         << 
135     // Looping particles with E > 10 keV will  << 
136     runAction->SetImportantEnergy(importantE); << 
137     runAction->SetNumberOfTrials(numTrials);   << 
138     // Looping particles with E > 0.1 MeV will << 
139     //  30 'tracking' steps, and only be kille << 
140                                                << 
141     G4cout << "field01: Using F01RunAction to  << 
142     runManager->SetUserAction(runAction);      << 
143   }                                            << 
144                                                << 
145   // Note: this mechanism overwrites the thres    129   // Note: this mechanism overwrites the thresholds established by
146   //       the call to UseLowLooperThresholds(    130   //       the call to UseLowLooperThresholds() above.
                                                   >> 131   
                                                   >> 132   runManager->SetUserAction(runAction);
147                                                   133 
148   // Suppress large verbosity from EM & hadron    134   // Suppress large verbosity from EM & hadronic processes
149   G4EmParameters::Instance()->SetVerbose(0);   << 135   G4EmParameters::Instance()->SetVerbose(-1);
150   G4HadronicParameters::Instance()->SetVerbose << 136   G4HadronicProcessStore::Instance()->SetVerbose(0);
151                                                << 137   
152   // Initialize G4 kernel                         138   // Initialize G4 kernel
153   //                                              139   //
154   runManager->Initialize();                       140   runManager->Initialize();
155                                                   141 
156   // Initialize visualization                     142   // Initialize visualization
157   //                                              143   //
                                                   >> 144   G4VisManager* visManager = new G4VisExecutive;
158   // G4VisExecutive can take a verbosity argum    145   // G4VisExecutive can take a verbosity argument - see /vis/verbose
159   G4VisManager* visManager = new G4VisExecutiv << 146   // G4VisManager* visManager = new G4VisExecutive("Quiet");
160   visManager->Initialize();                       147   visManager->Initialize();
161                                                   148 
162   // Get the pointer to the User Interface man    149   // Get the pointer to the User Interface manager
163   //                                              150   //
164   G4UImanager* UImanager = G4UImanager::GetUIp    151   G4UImanager* UImanager = G4UImanager::GetUIpointer();
165                                                   152 
166   if (!ui)  // batch mode                      << 153   if (!ui)   // batch mode
167   {                                            << 154     {
168     G4String command = "/control/execute ";    << 155       G4String command = "/control/execute ";
169     G4String fileName = argv[1];               << 156       G4String fileName = argv[1];
170     UImanager->ApplyCommand(command + fileName << 157       UImanager->ApplyCommand(command+fileName);
171   }                                            << 158     }
172   else {  // interactive mode : define UI sess << 159   else
173     UImanager->ApplyCommand("/control/execute  << 160     {  // interactive mode : define UI session
174     if (ui->IsGUI()) UImanager->ApplyCommand(" << 161      UImanager->ApplyCommand("/control/execute init_vis.mac");
175     ui->SessionStart();                        << 162      if (ui->IsGUI())
176     delete ui;                                 << 163        UImanager->ApplyCommand("/control/execute gui.mac");
177   }                                            << 164      ui->SessionStart();
                                                   >> 165      delete ui;
                                                   >> 166     }
178                                                   167 
179   // Statistics of tracks killed by G4Transpor    168   // Statistics of tracks killed by G4Transportation are currently
180   //  printed in the RunAction's EndOfEvent ac    169   //  printed in the RunAction's EndOfEvent action.
181   // ( Eventually a summary could be provided     170   // ( Eventually a summary could be provided here instead or as well. )
182                                                   171 
183   delete verbosity;                            << 
184   delete visManager;                              172   delete visManager;
185   delete runManager;                              173   delete runManager;
186                                                   174 
187   return 0;                                       175   return 0;
188 }                                                 176 }
189                                                   177 
190 //....oooOO0OOooo........oooOO0OOooo........oo    178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191                                                   179