Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/run/include/G4VUserPhysicsList.hh

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/include/G4VUserPhysicsList.hh (Version 11.3.0) and /run/include/G4VUserPhysicsList.hh (Version 11.1.2)


  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 // G4VUserPhysicsList                              26 // G4VUserPhysicsList
 27 //                                                 27 //
 28 // Class description:                              28 // Class description:
 29 //                                                 29 //
 30 // This class is an abstract class for constru     30 // This class is an abstract class for constructing particles and processes.
 31 // User must implement the following two pure      31 // User must implement the following two pure virtual methods in the concrete
 32 // class derived from this class:                  32 // class derived from this class:
 33 // - G4VUserPhysicsList::ConstructParticle()       33 // - G4VUserPhysicsList::ConstructParticle()
 34 //     Construct particles                         34 //     Construct particles
 35 // - G4VUserPhysicsList::ConstructProcess()        35 // - G4VUserPhysicsList::ConstructProcess()
 36 //     Construct procesess and register them t     36 //     Construct procesess and register them to particles.
 37                                                    37 
 38 // Original author: H.Kurashige (Kobe Universi     38 // Original author: H.Kurashige (Kobe University), 9 January 1998
 39 // -------------------------------------------     39 // --------------------------------------------------------------------
 40 #ifndef G4VUserPhysicsList_hh                      40 #ifndef G4VUserPhysicsList_hh
 41 #define G4VUserPhysicsList_hh 1                    41 #define G4VUserPhysicsList_hh 1
 42                                                    42 
                                                   >>  43 #include "G4ios.hh"
                                                   >>  44 #include "globals.hh"
                                                   >>  45 #include "rundefs.hh"
                                                   >>  46 #include "tls.hh"
                                                   >>  47 
 43 #include "G4ParticleDefinition.hh"                 48 #include "G4ParticleDefinition.hh"
 44 #include "G4ParticleTable.hh"                      49 #include "G4ParticleTable.hh"
 45 #include "G4PhysicsModelCatalog.hh"            << 
 46 #include "G4ProductionCutsTable.hh"                50 #include "G4ProductionCutsTable.hh"
 47 #include "G4Threading.hh"                      << 
 48 #include "G4VUPLSplitter.hh"                       51 #include "G4VUPLSplitter.hh"
 49 #include "G4ios.hh"                            << 
 50 #include "globals.hh"                          << 
 51                                                    52 
 52 #include "rundefs.hh"                          <<  53 #include "G4Threading.hh"
 53 #include "tls.hh"                              <<  54 #include "G4PhysicsModelCatalog.hh"
 54                                                    55 
 55 class G4UserPhysicsListMessenger;                  56 class G4UserPhysicsListMessenger;
 56 class G4PhysicsListHelper;                         57 class G4PhysicsListHelper;
 57 class G4VProcess;                                  58 class G4VProcess;
 58                                                    59 
 59 // Encapsulate the fields of class G4VUserPhys << 
 60 class G4VUPLData                                   60 class G4VUPLData
 61 {                                                  61 {
                                                   >>  62   // Encapsulate the fields of class G4VUserPhysicsList that are per-thread.
                                                   >>  63 
 62   public:                                          64   public:
                                                   >>  65 
 63     void initialize();                             66     void initialize();
 64                                                    67 
 65     G4ParticleTable::G4PTblDicIterator* _thePa     68     G4ParticleTable::G4PTblDicIterator* _theParticleIterator = nullptr;
 66     G4UserPhysicsListMessenger* _theMessenger      69     G4UserPhysicsListMessenger* _theMessenger = nullptr;
 67     G4PhysicsListHelper* _thePLHelper = nullpt     70     G4PhysicsListHelper* _thePLHelper = nullptr;
 68     G4bool _fIsPhysicsTableBuilt = false;          71     G4bool _fIsPhysicsTableBuilt = false;
 69     G4int _fDisplayThreshold = 0;                  72     G4int _fDisplayThreshold = 0;
 70 };                                                 73 };
 71                                                    74 
 72 // The type G4VUPLManager is introduced to enc     75 // The type G4VUPLManager is introduced to encapsulate the methods used by
 73 // both the master thread and worker threads t     76 // both the master thread and worker threads to allocate memory space for
 74 // the fields encapsulated by the class G4VUPL     77 // the fields encapsulated by the class G4VUPLData. When each thread
 75 // changes the value for these fields, it refe     78 // changes the value for these fields, it refers to them using a macro
 76 // definition defined below. For every G4VUser     79 // definition defined below. For every G4VUserPhysicsList instance,
 77 // there is a corresponding G4VUPLData instanc     80 // there is a corresponding G4VUPLData instance. All G4VUPLData instances
 78 // are organized by the class G4VUPLManager as     81 // are organized by the class G4VUPLManager as an array.
 79 // The field "int g4vuplInstanceID" is added t     82 // The field "int g4vuplInstanceID" is added to the class G4VUserPhysicsList.
 80 // The value of this field in each G4VUserPhys     83 // The value of this field in each G4VUserPhysicsList instance is the
 81 // subscript of the corresponding G44VUPLData      84 // subscript of the corresponding G44VUPLData instance.
 82 // In order to use the class G44VUPLManager, w     85 // In order to use the class G44VUPLManager, we add a static member in the class
 83 // G4VUserPhysicsList as follows: "static G4VU     86 // G4VUserPhysicsList as follows: "static G4VUPLManager subInstanceManager".
 84 // Both the master thread and worker threads c     87 // Both the master thread and worker threads change the length of the array
 85 // for G44VUPLData instances mutually along wi     88 // for G44VUPLData instances mutually along with G4VUserPhysicsList
 86 // instances are created. For each worker thre     89 // instances are created. For each worker thread, it dynamically creates ions.
 87 // Consider any thread A, if there is any othe     90 // Consider any thread A, if there is any other thread which creates an ion.
 88 // This ion is shared by the thread A. So the      91 // This ion is shared by the thread A. So the thread A leaves an empty space
 89 // in the array of G4PDefData instances for th     92 // in the array of G4PDefData instances for the ion.
 90 //                                                 93 //
 91 // Important Note: you may wonder why we are i     94 // Important Note: you may wonder why we are introducing this mechanism
 92 //                 since there is only one PL      95 //                 since there is only one PL for each application.
 93 //                 This is true, in the sense      96 //                 This is true, in the sense that only one PL is allowed
 94 //                 to be associated to a G4Run     97 //                 to be associated to a G4RunManager, however user can
 95 //                 instantiate as many PLs are     98 //                 instantiate as many PLs are needed and at run-time select one
 96 //                 of the PLs to be used we th     99 //                 of the PLs to be used we thus need this mechanism to
 97 //                 guarantee that the system w    100 //                 guarantee that the system works without problems in case of
 98 //                 this (unusual) case. This m    101 //                 this (unusual) case. This may be reviewed in the future
 99 //                                                102 //
100 using G4VUPLManager = G4VUPLSplitter<G4VUPLDat    103 using G4VUPLManager = G4VUPLSplitter<G4VUPLData>;
101 using G4VUserPhysicsListSubInstanceManager = G    104 using G4VUserPhysicsListSubInstanceManager = G4VUPLManager;
102                                                   105 
103 class G4VUserPhysicsList                          106 class G4VUserPhysicsList
104 {                                                 107 {
105   public:                                         108   public:
                                                   >> 109 
106     G4VUserPhysicsList();                         110     G4VUserPhysicsList();
107     virtual ~G4VUserPhysicsList();                111     virtual ~G4VUserPhysicsList();
                                                   >> 112 
108     G4VUserPhysicsList(const G4VUserPhysicsLis    113     G4VUserPhysicsList(const G4VUserPhysicsList&);
109     G4VUserPhysicsList& operator=(const G4VUse    114     G4VUserPhysicsList& operator=(const G4VUserPhysicsList&);
                                                   >> 115       // Copy constructor and assignment operator.
110                                                   116 
111     // Each particle type will be instantiated << 
112     // This method is invoked by the RunManger << 
113     virtual void ConstructParticle() = 0;         117     virtual void ConstructParticle() = 0;
                                                   >> 118       // Each particle type will be instantiated.
                                                   >> 119       // This method is invoked by the RunManger.
114                                                   120 
115     // By calling the "Construct" method,      << 
116     // process manager and processes are creat << 
117     void Construct();                             121     void Construct();
                                                   >> 122       // By calling the "Construct" method,
                                                   >> 123       // process manager and processes are created.
118                                                   124 
119     // Each physics process will be instantiat << 
120     // registered to the process manager of ea << 
121     // Invoked in the Construct() method.      << 
122     virtual void ConstructProcess() = 0;          125     virtual void ConstructProcess() = 0;
                                                   >> 126       // Each physics process will be instantiated and
                                                   >> 127       // registered to the process manager of each particle type.
                                                   >> 128       // Invoked in the Construct() method.
123                                                   129 
124     // Sets a cut value for all particle types << 
125     virtual void SetCuts();                       130     virtual void SetCuts();
                                                   >> 131       // Sets a cut value for all particle types in the particle table.
126                                                   132 
127     // Set/get the default cut value. Calling  << 
128     // re-calcuration of cut values and physic << 
129     // next event loop.                        << 
130     void SetDefaultCutValue(G4double newCutVal    133     void SetDefaultCutValue(G4double newCutValue);
131     G4double GetDefaultCutValue() const;          134     G4double GetDefaultCutValue() const;
                                                   >> 135       // Set/get the default cut value. Calling SetDefaultCutValue() causes
                                                   >> 136       // re-calcuration of cut values and physics tables just before the
                                                   >> 137       // next event loop.
132                                                   138 
133     // Invoke BuildPhysicsTable for all proces << 
134     // In case of "Retrieve" flag is ON, Physi << 
135     // retrieved from files.                   << 
136     void BuildPhysicsTable();                     139     void BuildPhysicsTable();
                                                   >> 140       // Invoke BuildPhysicsTable for all processes for all particles.
                                                   >> 141       // In case of "Retrieve" flag is ON, PhysicsTable will be
                                                   >> 142       // retrieved from files.
137                                                   143 
138     // Prepare the PhysicsTable for specified  << 
139     void PreparePhysicsTable(G4ParticleDefinit    144     void PreparePhysicsTable(G4ParticleDefinition*);
                                                   >> 145       // Prepare the PhysicsTable for specified particle type.
140                                                   146 
141     // Build the PhysicsTable for specified pa << 
142     void BuildPhysicsTable(G4ParticleDefinitio    147     void BuildPhysicsTable(G4ParticleDefinition*);
                                                   >> 148       // Build the PhysicsTable for specified particle type.
143                                                   149 
144     // Store PhysicsTable together with both m << 
145     // information in files under the specifie << 
146     // Returns "true" if files are successfull << 
147     G4bool StorePhysicsTable(const G4String& d    150     G4bool StorePhysicsTable(const G4String& directory = ".");
                                                   >> 151       // Store PhysicsTable together with both material and cut value
                                                   >> 152       // information in files under the specified directory.
                                                   >> 153       // Returns "true" if files are successfully created.
148                                                   154 
149     // Return true if "Retrieve" flag is ON.   << 
150     // (i.e. PhysicsTable will be retrieved fr << 
151     G4bool IsPhysicsTableRetrieved() const;       155     G4bool IsPhysicsTableRetrieved() const;
152     G4bool IsStoredInAscii() const;               156     G4bool IsStoredInAscii() const;
                                                   >> 157       // Return true if "Retrieve" flag is ON.
                                                   >> 158       // (i.e. PhysicsTable will be retrieved from files).
153                                                   159 
154     // Get directory path for physics table fi << 
155     const G4String& GetPhysicsTableDirectory()    160     const G4String& GetPhysicsTableDirectory() const;
                                                   >> 161       // Get directory path for physics table files.
156                                                   162 
157     // Set "Retrieve" flag. Directory path can << 
158     // Null string (default) means directory i << 
159     // from the current value.                 << 
160     void SetPhysicsTableRetrieved(const G4Stri    163     void SetPhysicsTableRetrieved(const G4String& directory = "");
161     void SetStoredInAscii();                      164     void SetStoredInAscii();
                                                   >> 165       // Set "Retrieve" flag. Directory path can be set together.
                                                   >> 166       // Null string (default) means directory is not changed
                                                   >> 167       // from the current value.
162                                                   168 
163     // Reset "Retrieve" flag.                  << 
164     void ResetPhysicsTableRetrieved();            169     void ResetPhysicsTableRetrieved();
165     void ResetStoredInAscii();                    170     void ResetStoredInAscii();
                                                   >> 171       // Reset "Retrieve" flag.
166                                                   172 
167     // Print out the List of registered partic << 
168     void DumpList() const;                        173     void DumpList() const;
                                                   >> 174       // Print out the List of registered particles types.
169                                                   175 
170     // Request to print out information of cut << 
171     // Printing will be performed when all tab << 
172     void DumpCutValuesTable(G4int flag = 1);      176     void DumpCutValuesTable(G4int flag = 1);
                                                   >> 177       // Request to print out information of cut values.
                                                   >> 178       // Printing will be performed when all tables are made.
173                                                   179 
174     // Triggers the print-out requested by the << 
175     // This method must be invoked by RunManag << 
176     void DumpCutValuesTableIfRequested();         180     void DumpCutValuesTableIfRequested();
                                                   >> 181       // Triggers the print-out requested by the above method.
                                                   >> 182       // This method must be invoked by RunManager at the proper moment.
177                                                   183 
178     // Set/get control flag for output message << 
179     //  0: Silent                              << 
180     //  1: Warning message                     << 
181     //  2: More                                << 
182     void SetVerboseLevel(G4int value);            184     void SetVerboseLevel(G4int value);
183     G4int GetVerboseLevel() const;                185     G4int GetVerboseLevel() const;
                                                   >> 186       // Set/get control flag for output message
                                                   >> 187       //  0: Silent
                                                   >> 188       //  1: Warning message
                                                   >> 189       //  2: More
184                                                   190 
185     void UseCoupledTransportation(G4bool vl =     191     void UseCoupledTransportation(G4bool vl = true);
186                                                   192 
187     // Invokes default SetCuts() method.       << 
188     // Note: cut values will not be overwritte << 
189     // Use of default SetCuts() method is reco << 
190     void SetCutsWithDefault();                    193     void SetCutsWithDefault();
                                                   >> 194       // Invokes default SetCuts() method.
                                                   >> 195       // Note: cut values will not be overwritten.
                                                   >> 196       // Use of default SetCuts() method is recommended.
191                                                   197 
192     // Sets a cut value for a particle type fo << 
193     void SetCutValue(G4double aCut, const G4St    198     void SetCutValue(G4double aCut, const G4String& pname);
                                                   >> 199       // Sets a cut value for a particle type for the default region.
194                                                   200 
195     // Gets a cut value for a particle type fo << 
196     G4double GetCutValue(const G4String& pname    201     G4double GetCutValue(const G4String& pname) const;
                                                   >> 202       // Gets a cut value for a particle type for the default region.
197                                                   203 
198     // Sets a cut value for a particle type fo << 204     void SetCutValue(G4double aCut, const G4String& pname,
199     void SetCutValue(G4double aCut, const G4St << 205                      const G4String& rname);
200                                                << 206       // Sets a cut value for a particle type for a region.
201     // Invoke SetCuts for specified particle f << 207 
202     // If the pointer to the region is NULL, t << 208     void SetParticleCuts(G4double cut, G4ParticleDefinition* particle,
203     // In case of "Retrieve" flag is ON, cut v << 209                          G4Region* region = nullptr);
204     // from files.                             << 210     void SetParticleCuts(G4double cut, const G4String& particleName,
205     void SetParticleCuts(G4double cut, G4Parti << 211                          G4Region* region = nullptr);
206     void SetParticleCuts(G4double cut, const G << 212       // Invoke SetCuts for specified particle for a region.
                                                   >> 213       // If the pointer to the region is NULL, the default region is used
                                                   >> 214       // In case of "Retrieve" flag is ON, cut values will be retrieved
                                                   >> 215       // from files.
207                                                   216 
208     // Invoke SetCuts() for all particles in a << 
209     void SetCutsForRegion(G4double aCut, const    217     void SetCutsForRegion(G4double aCut, const G4String& rname);
                                                   >> 218       // Invoke SetCuts() for all particles in a region.
210                                                   219 
211     // Gets/sets the flag for ApplyCuts().     << 
212     void SetApplyCuts(G4bool value, const G4St    220     void SetApplyCuts(G4bool value, const G4String& name);
213     G4bool GetApplyCuts(const G4String& name)     221     G4bool GetApplyCuts(const G4String& name) const;
                                                   >> 222       // Gets/sets the flag for ApplyCuts().
214                                                   223 
215     // Remove and delete ProcessManagers for a << 
216     // Particle Table.                         << 
217     void RemoveProcessManager();                  224     void RemoveProcessManager();
                                                   >> 225       // Remove and delete ProcessManagers for all particles in the
                                                   >> 226       // Particle Table.
218                                                   227 
219     // Remove and delete TrackingManagers for  << 
220     // Particle Table.                         << 
221     void RemoveTrackingManager();                 228     void RemoveTrackingManager();
                                                   >> 229       // Remove and delete TrackingManagers for all particles in the
                                                   >> 230       // Particle Table.
222                                                   231 
223     // Add process manager for particles creat << 
224     void AddProcessManager(G4ParticleDefinitio    232     void AddProcessManager(G4ParticleDefinition* newParticle,
225                            G4ProcessManager* n    233                            G4ProcessManager* newManager = nullptr);
                                                   >> 234       // Add process manager for particles created on-the-fly.
226                                                   235 
227     // Check consistencies of list of particle << 
228     void CheckParticleList();                     236     void CheckParticleList();
                                                   >> 237       // Check consistencies of list of particles.
229                                                   238 
230     void DisableCheckParticleList();              239     void DisableCheckParticleList();
231                                                   240 
232     inline G4int GetInstanceID() const;           241     inline G4int GetInstanceID() const;
233     static const G4VUPLManager& GetSubInstance    242     static const G4VUPLManager& GetSubInstanceManager();
234                                                << 243       // Used by Worker threads on the shared instance of physics-list
235     // Used by Worker threads on the shared in << 244       // to initialise workers. Derived class re-implementing this method
236     // to initialise workers. Derived class re << 245       // must also call this base class method.
237     // must also call this base class method.  << 
238     virtual void InitializeWorker();              246     virtual void InitializeWorker();
239                                                << 247       // Destroy thread-local data. Note that derived classes
240     // Destroy thread-local data. Note that de << 248       // implementing this method should still call this base class one.
241     // implementing this method should still c << 
242     virtual void TerminateWorker();               249     virtual void TerminateWorker();
243                                                   250 
244   protected:                                      251   protected:
245     // User must invoke this method in his Con << 252 
246     // implementation in order to enable parti << 
247     void AddTransportation();                     253     void AddTransportation();
                                                   >> 254       // User must invoke this method in his ConstructProcess()
                                                   >> 255       // implementation in order to enable particle transportation.
248                                                   256 
249     // Register a process to the particle type << 
250     // according to the ordering parameter tab << 
251     // 'true' is returned if the process is re << 
252     G4bool RegisterProcess(G4VProcess* process    257     G4bool RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle);
                                                   >> 258       // Register a process to the particle type
                                                   >> 259       // according to the ordering parameter table.
                                                   >> 260       // 'true' is returned if the process is registerd successfully.
253                                                   261 
254     // Build PhysicsTable for making the integ << 
255     void BuildIntegralPhysicsTable(G4VProcess*    262     void BuildIntegralPhysicsTable(G4VProcess*, G4ParticleDefinition*);
                                                   >> 263       // Build PhysicsTable for making the integral schema.
256                                                   264 
257     // Retrieve PhysicsTable from files for pr << 265     virtual void RetrievePhysicsTable(G4ParticleDefinition*,
258     // Normal BuildPhysics procedure of proces << 266                                       const G4String& directory,
259     // fails (in case of process's RetrievePhy << 
260     virtual void RetrievePhysicsTable(G4Partic << 
261                                       G4bool a    267                                       G4bool ascii = false);
                                                   >> 268       // Retrieve PhysicsTable from files for process belonging to the particle.
                                                   >> 269       // Normal BuildPhysics procedure of processes will be invoked, if it
                                                   >> 270       // fails (in case of process's RetrievePhysicsTable() returns false).
262                                                   271 
263     // Adds new ProcessManager to all particle << 
264     // This function is used in Construct().   << 
265     void InitializeProcessManager();              272     void InitializeProcessManager();
                                                   >> 273       // Adds new ProcessManager to all particles in the Particle Table.
                                                   >> 274       // This function is used in Construct().
266                                                   275 
267     G4ParticleTable::G4PTblDicIterator* GetPar    276     G4ParticleTable::G4PTblDicIterator* GetParticleIterator() const;
268                                                   277 
269   protected:                                      278   protected:
270     // The particle table has the complete Lis << 279 
271     G4ParticleTable* theParticleTable = nullpt    280     G4ParticleTable* theParticleTable = nullptr;
                                                   >> 281       // The particle table has the complete List of existing particle types.
272                                                   282 
273     G4int verboseLevel = 1;                       283     G4int verboseLevel = 1;
274                                                   284 
275     // Default cut value for all particles     << 
276     G4double defaultCutValue = 1.0;               285     G4double defaultCutValue = 1.0;
                                                   >> 286       // Default cut value for all particles
277     G4bool isSetDefaultCutValue = false;          287     G4bool isSetDefaultCutValue = false;
278                                                   288 
279     // Pointer to ProductionCutsTable.         << 
280     G4ProductionCutsTable* fCutsTable = nullpt    289     G4ProductionCutsTable* fCutsTable = nullptr;
                                                   >> 290       // Pointer to ProductionCutsTable.
281                                                   291 
282     // Flag to determine if physics table will << 
283     G4bool fRetrievePhysicsTable = false;         292     G4bool fRetrievePhysicsTable = false;
                                                   >> 293       // Flag to determine if physics table will be build from file or not.
284     G4bool fStoredInAscii = true;                 294     G4bool fStoredInAscii = true;
285                                                   295 
286     G4bool fIsCheckedForRetrievePhysicsTable =    296     G4bool fIsCheckedForRetrievePhysicsTable = false;
287     G4bool fIsRestoredCutValues = false;          297     G4bool fIsRestoredCutValues = false;
288                                                   298 
289     // Directory name for physics table files. << 
290     G4String directoryPhysicsTable = ".";         299     G4String directoryPhysicsTable = ".";
                                                   >> 300       // Directory name for physics table files.
291                                                   301 
292     // Flag for CheckParticleList().           << 
293     G4bool fDisableCheckParticleList = false;     302     G4bool fDisableCheckParticleList = false;
                                                   >> 303       // Flag for CheckParticleList().
294                                                   304 
295     // MT data                                 << 
296     G4int g4vuplInstanceID = 0;                   305     G4int g4vuplInstanceID = 0;
297     G4RUN_DLL static G4VUPLManager subInstance    306     G4RUN_DLL static G4VUPLManager subInstanceManager;
                                                   >> 307       // MT data
                                                   >> 308 
                                                   >> 309   private:
                                                   >> 310 
                                                   >> 311     enum
                                                   >> 312     {
                                                   >> 313       FixedStringLengthForStore = 32
                                                   >> 314     };
298 };                                                315 };
299                                                   316 
300 // Inline methods implementations                 317 // Inline methods implementations
301                                                   318 
302 inline void G4VUserPhysicsList::Construct()       319 inline void G4VUserPhysicsList::Construct()
303 {                                                 320 {
304 #ifdef G4VERBOSE                               << 321   #ifdef G4VERBOSE
305   if (verboseLevel > 1) G4cout << "G4VUserPhys << 322     if(verboseLevel > 1)
306 #endif                                         << 323       G4cout << "G4VUserPhysicsList::Construct()" << G4endl;
307                                                << 324   #endif
308   if (G4Threading::IsMasterThread()) G4Physics << 
309                                                   325 
                                                   >> 326   if ( G4Threading::IsMasterThread() ) G4PhysicsModelCatalog::Initialize();
                                                   >> 327   
310   InitializeProcessManager();                     328   InitializeProcessManager();
311                                                   329 
312 #ifdef G4VERBOSE                               << 330   #ifdef G4VERBOSE
313   if (verboseLevel > 1) G4cout << "Construct p << 331     if(verboseLevel > 1)
314 #endif                                         << 332       G4cout << "Construct processes " << G4endl;
                                                   >> 333   #endif
315   ConstructProcess();                             334   ConstructProcess();
316 }                                                 335 }
317                                                   336 
318 inline G4double G4VUserPhysicsList::GetDefault    337 inline G4double G4VUserPhysicsList::GetDefaultCutValue() const
319 {                                                 338 {
320   return defaultCutValue;                         339   return defaultCutValue;
321 }                                                 340 }
322                                                   341 
323 inline G4int G4VUserPhysicsList::GetVerboseLev    342 inline G4int G4VUserPhysicsList::GetVerboseLevel() const
324 {                                                 343 {
325   return verboseLevel;                            344   return verboseLevel;
326 }                                                 345 }
327                                                   346 
328 inline G4bool G4VUserPhysicsList::IsPhysicsTab    347 inline G4bool G4VUserPhysicsList::IsPhysicsTableRetrieved() const
329 {                                                 348 {
330   return fRetrievePhysicsTable;                   349   return fRetrievePhysicsTable;
331 }                                                 350 }
332                                                   351 
333 inline G4bool G4VUserPhysicsList::IsStoredInAs    352 inline G4bool G4VUserPhysicsList::IsStoredInAscii() const
334 {                                                 353 {
335   return fStoredInAscii;                          354   return fStoredInAscii;
336 }                                                 355 }
337                                                   356 
338 inline const G4String& G4VUserPhysicsList::Get    357 inline const G4String& G4VUserPhysicsList::GetPhysicsTableDirectory() const
339 {                                                 358 {
340   return directoryPhysicsTable;                   359   return directoryPhysicsTable;
341 }                                                 360 }
342                                                   361 
343 inline void G4VUserPhysicsList::SetStoredInAsc    362 inline void G4VUserPhysicsList::SetStoredInAscii()
344 {                                                 363 {
345   fStoredInAscii = true;                          364   fStoredInAscii = true;
346 }                                                 365 }
347                                                   366 
348 inline void G4VUserPhysicsList::ResetPhysicsTa    367 inline void G4VUserPhysicsList::ResetPhysicsTableRetrieved()
349 {                                                 368 {
350   fRetrievePhysicsTable = false;               << 369   fRetrievePhysicsTable             = false;
351   fIsRestoredCutValues = false;                << 370   fIsRestoredCutValues              = false;
352   fIsCheckedForRetrievePhysicsTable = false;      371   fIsCheckedForRetrievePhysicsTable = false;
353 }                                                 372 }
354                                                   373 
355 inline void G4VUserPhysicsList::ResetStoredInA    374 inline void G4VUserPhysicsList::ResetStoredInAscii()
356 {                                                 375 {
357   fStoredInAscii = false;                         376   fStoredInAscii = false;
358 }                                                 377 }
359                                                   378 
360 inline void G4VUserPhysicsList::DisableCheckPa    379 inline void G4VUserPhysicsList::DisableCheckParticleList()
361 {                                                 380 {
362   fDisableCheckParticleList = true;               381   fDisableCheckParticleList = true;
363 }                                                 382 }
364                                                   383 
365 inline G4int G4VUserPhysicsList::GetInstanceID    384 inline G4int G4VUserPhysicsList::GetInstanceID() const
366 {                                                 385 {
367   return g4vuplInstanceID;                        386   return g4vuplInstanceID;
368 }                                                 387 }
369                                                   388 
370 inline const G4VUPLManager& G4VUserPhysicsList    389 inline const G4VUPLManager& G4VUserPhysicsList::GetSubInstanceManager()
371 {                                                 390 {
372   return subInstanceManager;                      391   return subInstanceManager;
373 }                                                 392 }
374                                                   393 
375 #endif                                            394 #endif
376                                                   395