Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/management/include/G4ProcessManager.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 /processes/management/include/G4ProcessManager.hh (Version 11.3.0) and /processes/management/include/G4ProcessManager.hh (Version 10.3.p3)


  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 // G4ProcessManager                            << 
 27 //                                                 26 //
 28 // Class Description:                          <<  27 // $Id: G4ProcessManager.hh 71231 2013-06-12 13:06:28Z gcosmo $
 29 //                                                 28 //
 30 // G4ProcessManager collects all physics a par <<  29 // 
 31 // vectors. These vectors are:                 <<  30 // ------------------------------------------------------------
 32 // - one vector for all processes (called as " <<  31 //  GEANT 4 class header file 
 33 // - two vectors for processes with AtRestGetP <<  32 //
 34 //                              and AtRestDoIt <<  33 //  History: first implementation, based on object model of
 35 // - two vectors for processes with AlongStepG <<  34 //  2nd December 1995, G.Cosmo
 36 //                              and AlongStepD <<  35 //   ----------------  G4ProcessManager  -----------------
 37 // - two vectors for processes with PostStepGe <<  36 // Class Description 
 38 //                              and PostStepDo <<  37 //  It collects all physics a particle can undertake as seven vectors.
 39 // The tracking will message three types of Ge <<  38 //  These vectors are 
 40 // in order to limit the Step and select the o <<  39 //   one vector for all processes (called as "process List")
 41 // It will message the corresponding DoIt() to <<  40 //   two vectors for processes with AtRestGetPhysicalInteractionLength
 42 // processes. In addition, the Tracking will l <<  41 //                                    and AtRestDoIt
 43 // and select the occurrence of the processes  <<  42 //   two vectors for processes with AlongStepGetPhysicalInteractionLength
 44 // the shortest physical interaction length co <<  43 //                                    and AlongStepDoIt
 45 // processes at rest, for which the Tracking w <<  44 //   two vectors for processes with PostStepGetPhysicalInteractionLength
 46 // occurrence of the process which returns the <<  45 //                                    and PostStepDoIt
 47 // life-time from the GetPhysicalInteractionLe <<  46 //  The tracking will message three types of GetPhysicalInteractionLength
 48                                                <<  47 //  in order to limit the Step and select the occurence of processes. 
 49 // Authors:                                    <<  48 //  It will message the corresponding DoIt() to apply the selected 
 50 // - 02.12.1995, G.Cosmo - First implementatio <<  49 //  processes. In addition, the Tracking will limit the Step
 51 // - 06.05.1996, G.Cosmo - Revised; added vect <<  50 //  and select the occurence of the processes according to
 52 // - 08.01.1997, H.Kurashige - New Physics sch <<  51 //  the shortest physical interaction length computed (except for
 53 // ------------------------------------------- <<  52 //  processes at rest, for which the Tracking will select the
 54 #ifndef G4ProcessManager_hh                    <<  53 //  occurence of the process which returns the shortest mean
 55 #define G4ProcessManager_hh 1                  <<  54 //  life-time from the GetPhysicalInteractionLength()).
                                                   >>  55 //
                                                   >>  56 // History:
                                                   >>  57 // revised by G.Cosmo, 06 May 1996
                                                   >>  58 //    Added vector of processes at rest, 06 May 1996
                                                   >>  59 // ------------------------------------------------------------
                                                   >>  60 //   New Physics scheme           8 Jan. 1997  H.Kurahige
                                                   >>  61 //   Add SetProcessOrdering methods     27 Mar 1998  H.Kurahige
                                                   >>  62 //   Add copy constructor (deep copy)   28 June 1998 H.Kurashige
                                                   >>  63 //   Add GetProcessActivation     3 May. 1999 H.Kurashige
                                                   >>  64 //   Use STL vector instead of RW vector    1. Mar 00 H.Kurashige
                                                   >>  65 //   Modify G4ProcessVectorOrdering to fix FindInsedrtPosition 15 Feb. 2005
                                                   >>  66 //   Add  
                                                   >>  67 // ------------------------------------------------------------
 56                                                    68 
 57 #include <vector>                              <<  69 #ifndef G4ProcessManager_h
                                                   >>  70 #define G4ProcessManager_h 1
 58                                                    71 
 59 #include "globals.hh"                              72 #include "globals.hh"
 60 #include "G4ios.hh"                                73 #include "G4ios.hh"
                                                   >>  74 #include <vector>
 61                                                    75 
 62 #include "G4VProcess.hh"                           76 #include "G4VProcess.hh"
 63 #include "G4ProcessVector.hh"                      77 #include "G4ProcessVector.hh"
 64 #include "G4ParticleDefinition.hh"                 78 #include "G4ParticleDefinition.hh"
 65                                                    79 
 66 class G4ProcessManagerMessenger;                   80 class G4ProcessManagerMessenger;
 67 class G4ProcessAttribute;                          81 class G4ProcessAttribute;
 68                                                    82 
 69 // Indexes for ProcessVector                   <<  83 //  Indexes for ProcessVector
 70 //                                             << 
 71 enum G4ProcessVectorTypeIndex                      84 enum G4ProcessVectorTypeIndex
 72 {                                                  85 { 
 73   typeGPIL = 0,        // for GetPhysicalInter <<  86     typeGPIL = 0, // for GetPhysicalInteractionLength 
 74   typeDoIt =1          // for DoIt             <<  87   typeDoIt =1   // for DoIt
 75 };                                                 88 };
 76 enum G4ProcessVectorDoItIndex                      89 enum G4ProcessVectorDoItIndex
 77 {                                                  90 {
 78   idxAll = -1,         // for all DoIt/GPIL    <<  91     idxAll = -1,    // for all DoIt/GPIL 
 79   idxAtRest = 0,       // for AtRestDoIt/GPIL  <<  92     idxAtRest = 0,    // for AtRestDoIt/GPIL
 80   idxAlongStep = 1,    // for AlongStepDoIt/GP <<  93   idxAlongStep = 1,   // for AlongStepDoIt/GPIL
 81   idxPostStep =2,      // for AlongSTepDoIt/GP <<  94   idxPostStep =2,   // for AlongSTepDoIt/GPIL
 82   NDoit =3                                     <<  95   NDoit =3
 83 };                                                 96 };
 84                                                    97 
 85 // Enumeration for Ordering Parameter          <<  98 //  enumeration for Ordering Parameter      
 86 //                                             << 
 87 enum G4ProcessVectorOrdering                       99 enum G4ProcessVectorOrdering
 88 {                                                 100 { 
 89   ordInActive = -1,    // ordering parameter t << 101     ordInActive = -1, // ordering parameter to indicate InActive DoIt
 90   ordDefault = 1000,   // default ordering par << 102     ordDefault = 1000,  // default ordering parameter
 91   ordLast    = 9999    // ordering parameter t << 103     ordLast    = 9999   // ordering parameter to indicate the last DoIt
 92 };                                                104 };
 93                                                   105 
 94 class G4ProcessManager                            106 class G4ProcessManager 
 95 {                                                 107 {
 96   using G4ProcessAttrVector = std::vector<G4Pr << 108  
 97                                                << 
 98   public:                                         109   public: 
                                                   >> 110       // copy constructor
                                                   >> 111       G4ProcessManager(G4ProcessManager &right);
 99                                                   112 
100     G4ProcessManager(const G4ParticleDefinitio << 113   private:
                                                   >> 114       // hide default constructor and assignment operator
                                                   >> 115       G4ProcessManager & operator=(const G4ProcessManager &right);
                                                   >> 116       G4ProcessManager();
                                                   >> 117 
                                                   >> 118   public:
                                                   >> 119  
                                                   >> 120       G4ProcessManager(const G4ParticleDefinition* aParticleType);
101       //  Constructor                             121       //  Constructor
102                                                   122 
103     G4ProcessManager(G4ProcessManager& right); << 123       ~G4ProcessManager();
104       // copy constructor                      << 124       //  Destructor
105                                                << 
106     G4ProcessManager() = delete;               << 
107     G4ProcessManager& operator=(const G4Proces << 
108       // Default constructor and assignment op << 
109                                                   125 
110     ~G4ProcessManager();                       << 126       G4int operator==(const G4ProcessManager &right) const;
111       // Destructor                            << 127       G4int operator!=(const G4ProcessManager &right) const;
112                                                   128 
113     G4bool operator==(const G4ProcessManager & << 129  public: //  with description
114     G4bool operator!=(const G4ProcessManager & << 130       G4ProcessVector* GetProcessList() const;
                                                   >> 131       //  Returns the address of the vector of all processes 
115                                                   132 
116     inline G4ProcessVector* GetProcessList() c << 133       G4int  GetProcessListLength() const;
117       // Returns the address of the vector of  << 134       //  Returns the number of process in the ProcessVector 
118                                                   135 
119     inline G4int GetProcessListLength() const; << 136       G4int GetProcessIndex(G4VProcess *) const;
120       // Returns the number of process in the  << 137       //  Returns the index of the process in the process List
121                                                   138 
122     inline G4int GetProcessIndex(G4VProcess*)  << 139       // --------------------------------------
123       // Returns the index of the process in t << 
124                                                   140 
125     inline G4ProcessVector* GetProcessVector(  << 141       G4ProcessVector* GetProcessVector( 
126                                G4ProcessVector << 142              G4ProcessVectorDoItIndex idx,
127                                G4ProcessVector << 143              G4ProcessVectorTypeIndex typ = typeGPIL
128                               ) const;         << 144             ) const;
129       // Returns the address of the vector of  << 145       //  Returns the address of the vector of processes 
130                                                   146 
131     inline G4ProcessVector* GetAtRestProcessVe << 147       G4ProcessVector* GetAtRestProcessVector(
132                                G4ProcessVector << 148              G4ProcessVectorTypeIndex typ = typeGPIL
133                               ) const;            149                               ) const; 
134       // Returns the address of the vector of  << 150       //  Returns the address of the vector of processes for
135       //    AtRestGetPhysicalInteractionLength    151       //    AtRestGetPhysicalInteractionLength      idx =0
136       //    AtRestGetPhysicalDoIt                 152       //    AtRestGetPhysicalDoIt                   idx =1
137                                                << 153       G4ProcessVector* GetAlongStepProcessVector(
138     inline G4ProcessVector* GetAlongStepProces << 154              G4ProcessVectorTypeIndex typ = typeGPIL
139                                G4ProcessVector << 
140                               ) const;            155                               ) const;
141       // Returns the address of the vector of  << 156       //  Returns the address of the vector of processes for
142       //    AlongStepGetPhysicalInteractionLen    157       //    AlongStepGetPhysicalInteractionLength      idx =0
143       //    AlongStepGetPhysicalDoIt              158       //    AlongStepGetPhysicalDoIt                   idx =1
144                                                   159 
145     inline G4ProcessVector* GetPostStepProcess << 160       G4ProcessVector* GetPostStepProcessVector(
146                                G4ProcessVector << 161              G4ProcessVectorTypeIndex typ = typeGPIL
147                               ) const;            162                               ) const;
148       // Returns the address of the vector of  << 163       //  Returns the address of the vector of processes for
149       //    PostStepGetPhysicalInteractionLeng    164       //    PostStepGetPhysicalInteractionLength      idx =0
150       //    PostStepGetPhysicalDoIt               165       //    PostStepGetPhysicalDoIt                   idx =1
151                                                   166 
152     G4int GetProcessVectorIndex(               << 167       G4int GetProcessVectorIndex(
153                            G4VProcess* aProces    168                            G4VProcess* aProcess,
154                            G4ProcessVectorDoIt << 169          G4ProcessVectorDoItIndex idx,
155                            G4ProcessVectorType << 170          G4ProcessVectorTypeIndex typ  = typeGPIL
156                            ) const;            << 171          ) const;
157     inline G4int GetAtRestIndex(               << 172       G4int GetAtRestIndex(
158                            G4VProcess* aProces    173                            G4VProcess* aProcess,
159                            G4ProcessVectorType << 174          G4ProcessVectorTypeIndex typ  = typeGPIL
160                            ) const;            << 175          ) const;
161     inline G4int GetAlongStepIndex(            << 176       G4int GetAlongStepIndex(
162                            G4VProcess* aProces    177                            G4VProcess* aProcess,
163                            G4ProcessVectorType << 178          G4ProcessVectorTypeIndex typ  = typeGPIL
164                            ) const;            << 179          ) const;
165     inline G4int GetPostStepIndex(             << 180       G4int GetPostStepIndex(
166                            G4VProcess* aProces << 181          G4VProcess* aProcess,
167                            G4ProcessVectorType << 182          G4ProcessVectorTypeIndex typ = typeGPIL
168                            ) const;            << 183          ) const;
169       // Returns the index for GPIL/DoIt proce << 184       //  Returns the index for GPIL/DoIt process vector of the process  
170                                                << 185 
171     G4int AddProcess( G4VProcess* aProcess,    << 186       G4int AddProcess(
172                       G4int ordAtRestDoIt = or << 187              G4VProcess *aProcess,
173                       G4int ordAlongSteptDoIt  << 188              G4int      ordAtRestDoIt = ordInActive,
174                       G4int ordPostStepDoIt =  << 189              G4int      ordAlongSteptDoIt = ordInActive,
175       // Adds a process to the process List    << 190              G4int      ordPostStepDoIt = ordInActive
176       // Return values is the index to the Lis << 191             );
177       // indicates that the process has not be << 192       //  Add a process to the process List
178       // The first argument is a pointer to th << 193       //  return values are index to the List. Negative return value 
179       // Successive arguments are ordering par << 194       //  indicates that the process has not be added due to some errors
180       // process vectors. If value is negative << 195       //  The first argument is a pointer to process.
181       // not added to the corresponding proces << 196       //  Following arguments are ordering parameters of the process in 
                                                   >> 197       //  process vectors. If value is negative, the process is
                                                   >> 198       //  not added to the corresponding process vector. 
182                                                   199    
183     ////////////////////////////////////////// << 200       //  following methods are provided for simple processes  
184     // The following methods are provided for  << 201       //   AtRestProcess has only AtRestDoIt
185     //   AtRestProcess has only AtRestDoIt     << 202       //   ContinuousProcess has only AlongStepDoIt
186     //   ContinuousProcess has only AlongStepD << 203       //   DiscreteProcess has only PostStepDoIt
187     //   DiscreteProcess has only PostStepDoIt << 204       //  If the ording parameter is not specified, the process is
188     // If the ordering parameter is not specif << 205       //  added at the end of List of process vectors 
189     // added at the end of List of process vec << 206       //  If a process with same ordering parameter exists, 
190     // If a process with same ordering paramet << 207       //   this new process will be added just after processes 
191     // this new process will be added just aft << 208       //   with same ordering parameter  
192     // with same ordering parameter (except fo << 209       //  (except for processes assigned to LAST explicitly )
193     // explicitly) for both DoIt() and GetPhys << 210       //  for both DoIt and GetPhysicalInteractionLength
194     ////////////////////////////////////////// << 211       //  
195                                                << 212 
196     inline G4int AddRestProcess(G4VProcess* aP << 213       G4int AddRestProcess(G4VProcess *aProcess, G4int ord = ordDefault);
197     inline G4int AddDiscreteProcess(G4VProcess << 214       G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord = ordDefault);
198     inline G4int AddContinuousProcess(G4VProce << 215       G4int AddContinuousProcess(G4VProcess *aProcess, G4int ord = ordDefault);
199                                                << 216 
200     ////////////////////////////////////////// << 217 
201     // Alternative methods for setting orderin << 218        /////////////////////////////////////////////// 
202     // Note: AddProcess() method should preced << 219       // Methods for setting ordering parameters
203     ////////////////////////////////////////// << 220       // Altanative methods for setting ordering parameters 
204                                                << 221       //   Note: AddProcess method should precede these methods
205     G4int GetProcessOrdering(                  << 222 
206                             G4VProcess* aProce << 223       G4int GetProcessOrdering(
207                             G4ProcessVectorDoI << 224              G4VProcess *aProcess,
208                             );                 << 225              G4ProcessVectorDoItIndex idDoIt
209                                                << 226                                );
210     void SetProcessOrdering(                   << 227 
211                             G4VProcess* aProce << 228       void SetProcessOrdering(
212                             G4ProcessVectorDoI << 229              G4VProcess *aProcess,
213                             G4int ordDoIt = or << 230              G4ProcessVectorDoItIndex idDoIt,
214                            );                  << 231              G4int      ordDoIt = ordDefault
215       // Set ordering parameter for DoIt() spe << 232                                );
                                                   >> 233       // Set ordering parameter for DoIt specified by typeDoIt.
216       // If a process with same ordering param    234       // If a process with same ordering parameter exists, 
217       // this new process will be added just a    235       // this new process will be added just after processes 
218       // with same ordering parameter             236       // with same ordering parameter  
219       // Note: Ordering parameter will bet set    237       // Note: Ordering parameter will bet set to non-zero 
220       //       even if you set ordDoIt = 0     << 238       //       even if you set  ordDoIt = 0
221                                                   239             
222     void SetProcessOrderingToFirst(            << 240      void SetProcessOrderingToFirst(
223                             G4VProcess* aProce << 241              G4VProcess *aProcess,
224                             G4ProcessVectorDoI << 242              G4ProcessVectorDoItIndex idDoIt
225                            );                  << 243              );
226       // Set ordering parameter to the first o    244       // Set ordering parameter to the first of all processes 
227       // for DoIt() specified by idDoIt.       << 245       // for DoIt specified by idDoIt.
228       // Note: If you use this method for two  << 246       //  Note: If you use this method for two processes,
229       //       a process called later will be  << 247       //        a process called later will be first.
230                                                << 248 
231     void SetProcessOrderingToSecond(           << 249       void SetProcessOrderingToSecond(
232                             G4VProcess* aProce << 250              G4VProcess *aProcess,
233                             G4ProcessVectorDoI << 251              G4ProcessVectorDoItIndex idDoIt
234                            );                  << 252              );
235       // Set ordering parameter to 1 for DoIt( << 253       // Set ordering parameter to 1 for DoIt specified by idDoIt
236       // and the process will be added just af << 254       // and the rpocess will be added just after 
237       // the processes with ordering parameter    255       // the processes with ordering parameter equal to zero
238       // Note: If you use this method for two  << 256       //  Note: If you use this method for two processes,
239       //       a process called later will be  << 257       //        a process called later will be .
240                                                   258 
241     void SetProcessOrderingToLast(             << 259         void SetProcessOrderingToLast(
242                             G4VProcess* aProce << 260              G4VProcess *aProcess,
243                             G4ProcessVectorDoI << 261              G4ProcessVectorDoItIndex idDoIt
244                            );                  << 262              );
245       // Set ordering parameter to the last of    263       // Set ordering parameter to the last of all processes 
246       // for DoIt() specified by idDoIt.       << 264       // for DoIt specified by idDoIt.
247       // Note: If you use this method for two  << 265       //  Note: If you use this method for two processes,
248       //       a process called later will pre << 266       //        a process called later will precede.
249                                                << 267 
250     ////////////////////////////////////////// << 268       G4VProcess*  RemoveProcess(G4VProcess *aProcess);
251                                                << 269       G4VProcess*  RemoveProcess(G4int      index);
252     G4VProcess* RemoveProcess(G4VProcess* aPro << 270       //  Removes a process from the process List.
253     G4VProcess* RemoveProcess(G4int index);    << 271       //  return value is pointer to the removed process.
254       // Removes a process from the process Li << 272       //  (0 value will be returned in case of errors)
255       // Returns pointer to the removed proces << 273 
256       // (nullptr value will be returned in ca << 274       G4VProcess* SetProcessActivation(G4VProcess *aProcess, G4bool fActive);
257                                                << 275       G4VProcess* SetProcessActivation(G4int      index, G4bool fActive);
258     G4VProcess* SetProcessActivation(G4VProces << 276       //  Set activation flag. 
259     G4VProcess* SetProcessActivation(G4int ind << 277       //  return value is pointer to the applied process.
260       // Set activation flag.                  << 278       //  (0 value will be returned in case of errors)
261       // Returns pointer to the applied proces << 279 
262       // (nullptr value will be returned in ca << 280       G4bool GetProcessActivation(G4VProcess *aProcess) const;
263                                                << 281       G4bool GetProcessActivation(G4int      index) const;
264     G4bool GetProcessActivation(G4VProcess* aP << 282       //  Get activation flag. 
265     G4bool GetProcessActivation(G4int index) c << 283 
266       // Get activation flag.                  << 284       G4ParticleDefinition*  GetParticleType() const;
267                                                << 285       // get the particle type 
268     inline G4ParticleDefinition* GetParticleTy << 286       void SetParticleType(const G4ParticleDefinition*);
269       // Get the particle type                 << 287       // set the particle type 
270     inline void SetParticleType(const G4Partic << 288 
271       // Set the particle type                 << 289       void StartTracking(G4Track* aTrack=0);
272                                                << 290       void EndTracking();
273     G4VProcess* GetProcess (const G4String&) c << 291       // these two methods are used by G4TrackingManager 
274       // Get process by process name           << 
275                                                << 
276     void StartTracking(G4Track* aTrack = nullp << 
277     void EndTracking();                        << 
278       // These two methods are used by G4Track << 
279       // in order to inform Start/End of track    292       // in order to inform Start/End of tracking for each track
280       // to the process manager and all physic << 293       // to the process manager and all physics processes 
281                                                << 
282     void DumpInfo();                           << 
283                                                << 
284     inline void SetVerboseLevel(G4int value);  << 
285     inline G4int GetVerboseLevel() const;      << 
286       // Control flag for output message       << 
287       //  0: Silent                            << 
288       //  1: Warning message                   << 
289       //  2: More                              << 
290                                                   294 
291     enum {SizeOfProcVectorArray = 6};          << 
292                                                   295 
                                                   >> 296   public:
                                                   >> 297       enum {SizeOfProcVectorArray = 6};
293   private:                                        298   private:
                                                   >> 299       G4ProcessVector* theProcVector[SizeOfProcVectorArray];
                                                   >> 300       // vector for processes with GetPhysicalInteractionLength/DoIt
294                                                   301 
295     G4int InsertAt(G4int position, G4VProcess* << 302       typedef std::vector<G4ProcessAttribute*> G4ProcessAttrVector; 
296       // Insert process at position in theProc << 303       G4ProcessAttrVector*  theAttrVector;
                                                   >> 304       // vector for process attribute  
                                                   >> 305 
                                                   >> 306   protected: // with description
                                                   >> 307       G4int InsertAt(G4int position, G4VProcess* process, G4int ivec);
                                                   >> 308       // insert process at position in theProcVector[ivec]
297                                                   309 
298     G4int RemoveAt(G4int position, G4VProcess* << 310       G4int RemoveAt(G4int position, G4VProcess* process, G4int ivec);
299       // Remove process at position in theProc << 311       // remove process at position in theProcVector[ivec]
300                                                   312 
301     G4int FindInsertPosition(G4int ord, G4int  << 313       G4int FindInsertPosition(G4int ord, G4int ivec);
302       // Find insert position according to ord << 314       // find insert position according to ordering parameter 
303       // in theProcVector[ivec]                   315       // in theProcVector[ivec]
304                                                   316 
305     inline G4int GetProcessVectorId(G4ProcessV << 317       G4int GetProcessVectorId(G4ProcessVectorDoItIndex idx,
306                              G4ProcessVectorTy << 318              G4ProcessVectorTypeIndex typ  = typeGPIL) const;
307                                                   319 
308     void CheckOrderingParameters(G4VProcess*)  << 320   void CheckOrderingParameters(G4VProcess*) const;
309       // Check consistencies between ordering  << 321        // check consistencies between ordering parameters and 
310       // validity of DoIt() of the Process     << 322        // validity of DoIt of the Process 
311                                                << 323 
312     G4ProcessAttribute* GetAttribute(G4int ind << 324   private:     
313     G4ProcessAttribute* GetAttribute(G4VProces << 325       G4ProcessAttribute* GetAttribute(G4int      index) const;
314       // Get Pointer to ProcessAttribute       << 326       G4ProcessAttribute* GetAttribute(G4VProcess *aProcess) const;
315                                                << 327       // get Pointer to ProcessAttribute
316     void  CreateGPILvectors();                 << 328 
317     void  SetIndexToProcessVector(G4int ivec); << 329       G4VProcess* ActivateProcess(G4int   index);
318                                                << 330       G4VProcess* InActivateProcess(G4int  index);
319     G4VProcess* ActivateProcess(G4int index);  << 331       // Activate/InActivateProcess   Process
320     G4VProcess* InActivateProcess(G4int index) << 
321       // Activate/InActivate process           << 
322                                                   332       
323   private:                                     << 333   private:     
324                                                << 334       const G4ParticleDefinition*   theParticleType;
325     G4ProcessVector* theProcVector[SizeOfProcV << 335       //  particle which has this process manager object     
326       // Vector for processes with GetPhysical << 336 
327                                                << 337       G4int             numberOfProcesses;
328     G4ProcessAttrVector* theAttrVector = nullp << 338       G4ProcessVector*  theProcessList;
329       // Vector for process attribute          << 339       // vector for all processes (called as "process List")
                                                   >> 340 
                                                   >> 341  private:
                                                   >> 342       G4bool  duringTracking;
                                                   >> 343       void    CreateGPILvectors();
                                                   >> 344       void    SetIndexToProcessVector(G4int ivec);
                                                   >> 345 
                                                   >> 346       G4bool  isSetOrderingFirstInvoked[NDoit];
                                                   >> 347       G4bool  isSetOrderingLastInvoked[NDoit];
                                                   >> 348 
                                                   >> 349  public: // with description
                                                   >> 350    void  DumpInfo();
                                                   >> 351 
                                                   >> 352    void  SetVerboseLevel(G4int value);
                                                   >> 353    G4int GetVerboseLevel() const;
                                                   >> 354    // controle flag for output message
                                                   >> 355    //  0: Silent
                                                   >> 356    //  1: Warning message
                                                   >> 357    //  2: More
330                                                   358 
331     const G4ParticleDefinition* theParticleTyp << 359  protected:
332       // Particle which has this process manag << 360    G4int verboseLevel;
333                                                << 
334     G4int numberOfProcesses = 0;               << 
335     G4ProcessVector* theProcessList = nullptr; << 
336       // Vector for all processes (called as " << 
337                                                << 
338     G4bool duringTracking = false;             << 
339                                                << 
340     G4bool isSetOrderingFirstInvoked[NDoit];   << 
341     G4bool isSetOrderingLastInvoked[NDoit];    << 
342                                                << 
343     G4int verboseLevel = 1;                    << 
344                                                   361   
345     static G4ThreadLocal G4ProcessManagerMesse << 362  private:
346     static G4ThreadLocal G4int counterOfObject << 363    static G4ThreadLocal G4ProcessManagerMessenger* fProcessManagerMessenger;
                                                   >> 364    static G4ThreadLocal G4int                      counterOfObjects;
347 };                                                365 };
348                                                << 
349 #include "G4ProcessManager.icc"                   366 #include "G4ProcessManager.icc"
350                                                   367 
351 #endif                                            368 #endif
                                                   >> 369 
352                                                   370