Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VProcess.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30// ------------------------------------------------------------
31// GEANT 4 class header file
32//
33// History: first implementation, based on object model of
34// 2nd December 1995, G.Cosmo
35//
36// Class Description
37// This class is the virtual class for physics process objects.
38// It defines public methods which describe the behavior of
39// a physics process.
40//
41// ------------------------------------------------------------
42// New Physics scheme 18 Dec. 1996 H.Kurahige
43// ------------------------------------------------------------
44// change DoIt/GetPIL arguments type 20 Mar. 1997 H.Kurashige
45// modified AlongStepGPIL 17 Dec. 1997 H.Kurashige
46// modified for new ParticleChange 12 Mar. 1998 H.Kurashige
47// Add process trype 27 Mar. 1998 H.Kurashige
48// Remove thePhysicsTable 2 Aug. 1998 H.Kurashige
49// Add PILfactor and GPIL 3 Nov. 2000 H.Kurashige
50// Add Store/RetrievePhysicsTable 8 Nov. 2000 H.Kurashige
51// Modify Store/RetrievePhysicsTable methods 9 Mar. 2001 H.Kurashige
52// Added PreparePhysicsTable 20 Aug. 2004 H.Kurashige
53// Added isXXXXDoItIsEnabled 2 Oct. 2007 H.Kurashige
54// Added ProcessSubType 15 Nov. 2007 H.Kurashige
55
56#ifndef G4VProcess_h
57#define G4VProcess_h 1
58
59#include "globals.hh"
60#include <cmath>
61#include "G4ios.hh"
62
65class G4Track;
66class G4Step;
67
68#include "G4PhysicsTable.hh"
69#include "G4VParticleChange.hh"
70#include "G4ForceCondition.hh"
71#include "G4GPILSelection.hh"
72#include "G4ParticleChange.hh"
73#include "G4ProcessType.hh"
74
76{
77 // A virtual class for physics process objects. It defines
78 // public methods which describe the behavior of a
79 // physics process.
80
81 private:
82 // hide default constructor and assignment operator as private
83 // do not hide default constructor for alpha version
84 // G4VProcess G4VProcess();
85 G4VProcess & operator=(const G4VProcess &right);
86
87 public: // with description
88 // constructor requires the process name and type
89 G4VProcess(const G4String& aName = "NoName",
90 G4ProcessType aType = fNotDefined );
91
92 // copy constructor copys the name but does not copy the
93 // physics table (0 pointer is assigned)
94 G4VProcess(const G4VProcess &right);
95
96 public:
97 // destructor
98 virtual ~G4VProcess();
99
100 // equal opperators
101 G4int operator==(const G4VProcess &right) const;
102 G4int operator!=(const G4VProcess &right) const;
103
104 public: // with description
105 ////////////////////////////
106 // DoIt /////////////////
107 ///////////////////////////
109 const G4Track& track,
110 const G4Step& stepData
111 ) = 0;
112
114 const G4Track& track,
115 const G4Step& stepData
116 ) = 0;
118 const G4Track& track,
119 const G4Step& stepData
120 ) = 0;
121 // A virtual base class function that has to be overridden
122 // by any subclass. The DoIt method actually performs the
123 // physics process and determines either momentum change
124 // of the production of secondaries etc.
125 // arguments
126 // const G4Track& track:
127 // reference to the current G4Track information
128 // const G4Step& stepData:
129 // reference to the current G4Step information
130
131 //////////////////////////
132 // GPIL //////////////
133 /////////////////////////
135 const G4Track& track,
136 G4double previousStepSize,
137 G4double currentMinimumStep,
138 G4double& proposedSafety,
139 G4GPILSelection* selection) = 0;
140
142 const G4Track& track,
144 ) = 0;
145
147 const G4Track& track,
148 G4double previousStepSize,
150 ) = 0;
151
152 // Returns the Step-size (actual length) which is allowed
153 // by "this" process. (for AtRestGetPhysicalInteractionLength,
154 // return value is Step-time) The NumberOfInteractionLengthLeft is
155 // recalculated by using previousStepSize and the Step-size is
156 // calucalted accoding to the resultant NumberOfInteractionLengthLeft.
157 // using NumberOfInteractionLengthLeft, which is recalculated at
158 // arguments
159 // const G4Track& track:
160 // reference to the current G4Track information
161 // G4double* previousStepSize:
162 // the Step-size (actual length) of the previous Step
163 // of this track. Negative calue indicates that
164 // NumberOfInteractionLengthLeft must be reset.
165 // the current physical interaction legth of this process
166 // G4ForceCondition* condition:
167 // the flag indicates DoIt of this process is forced
168 // to be called
169 // Forced: Corresponding DoIt is forced
170 // NotForced: Corresponding DoIt is called
171 // if the Step size of this Step is determined
172 // by this process
173 // !! AlongStepDoIt is always called !!
174 // G4double& currentMinimumStep:
175 // this value is used for transformation of
176 // true path length to geometrical path length
177
179 // Returns currentInteractionLength
180
181 ////////// PIL factor ////////
182 void SetPILfactor(G4double value);
183 G4double GetPILfactor() const;
184 // Set/Get factor for PhysicsInteractionLength
185 // which is passed to G4SteppingManager for both AtRest and PostStep
186
187 // These three GPIL methods are used by Stepping Manager.
188 // They invoke virtual GPIL methods listed above.
189 // As for AtRest and PostStep the returned value is multipled by thePILfactor
190 //
191 G4double AlongStepGPIL( const G4Track& track,
192 G4double previousStepSize,
193 G4double currentMinimumStep,
194 G4double& proposedSafety,
195 G4GPILSelection* selection );
196
197 G4double AtRestGPIL( const G4Track& track,
199
200 G4double PostStepGPIL( const G4Track& track,
201 G4double previousStepSize,
203
204 //////////////////////
205 virtual G4bool IsApplicable(const G4ParticleDefinition&){return true;}
206 // Returns true if this process object is applicable to
207 // the particle type
208 // Process will not be registered to a particle if IsApplicable is false
209
211 // Messaged by the Particle definition (via the Process manager)
212 // whenever cross section tables have to be rebuilt (i.e. if new
213 // materials have been defined).
214 // It is overloaded by individual processes when they need physics
215 // tables.
216
218 // Messaged by the Particle definition (via the Process manager)
219 // whenever cross section tables have to be prepare for rebuilt
220 // (i.e. if new materials have been defined).
221 // It is overloaded by individual processes when they need physics
222 // tables.
223
224 // Processes which Build physics tables independent of cuts
225 // (for example in their constructors)
226 // should preferably use private
227 // void BuildThePhysicsTable() and void PreparePhysicsTable().
228 // Not another BuildPhysicsTable, please.
229
230
232 const G4String&, G4bool){return true;}
233 // Store PhysicsTable in a file.
234 // (return false in case of failure at I/O )
235
237 const G4String&, G4bool){return false;}
238 // Retrieve Physics from a file.
239 // (return true if the Physics Table can be build by using file)
240 // (return false if the process has no functionality or in case of failure)
241 // File name should be defined by each process
242 // and the file should be placed under the directory specifed by the argument.
244 const G4String& directory,
245 const G4String& tableName,
246 G4bool ascii =false);
247 // this method is utility for Store/RetreivePhysicsTable
248
249 ////////////////////////////
250 const G4String& GetProcessName() const;
251 // Returns the name of the process.
252
254 // Returns the process type.
255
257 // Set the process type.
258
259 G4int GetProcessSubType() const;
260 // Returns the process sub type.
261
263 // Set the process sub type.
264
266 // Returns the process type name
267
268 virtual void StartTracking(G4Track*);
269 virtual void EndTracking();
270 // inform Start/End of tracking for each track to the physics process
271
272 public:
273 virtual void SetProcessManager(const G4ProcessManager*);
274 // A process manager set its own pointer when the process is registered
275 // the process Manager
276 virtual const G4ProcessManager* GetProcessManager();
277 // Get the process manager which the process belongs to
278
279 protected:
281
282 protected:
284 // The pointer to G4VParticleChange object
285 // which is modified and returned by address by the DoIt() method.
286 // This pointer should be set in each physics process
287 // after construction of derived class object.
288
290 // This object is kept for compatibility with old scheme
291 // This will be removed in future
292
294 // The flight length left for the current tracking particle
295 // in unit of "Interaction length".
296
298 // The InteractionLength in the current material
299
301 // The initial value when ResetNumberOfInteractionLengthLeft is invoked
302
303 public: // with description
305 // reset (determine the value of)NumberOfInteractionLengthLeft
306
308 // get NumberOfInteractionLengthLeft
309
311 // get NumberOfInteractionLength
312 // after ResetNumberOfInteractionLengthLeft is invoked
313
314 protected: // with description
316 G4double previousStepSize
317 );
318 // subtract NumberOfInteractionLengthLeft by the value corresponding to
319 // previousStepSize
320
322 // clear NumberOfInteractionLengthLeft
323 // !!! This method should be at the end of PostStepDoIt()
324 // !!! and AtRestDoIt
325
326 public: // with description
327 // These methods indicate which DoIt is enabled
328 // These methods are used by G4ProcessManager to check
329 // that ordering parameters are set properly
333
334 protected:
336 // The name of the process
337
339
341 // The type of the process
342
344 // The sub type of the process
345
347 // factor for PhysicsInteractionLength
348 // which is passed to G4SteppingManager
349
353
354 public: // with description
355 virtual void DumpInfo() const;
356 // dump out process information
357
358 public: // with description
359 void SetVerboseLevel(G4int value);
360 G4int GetVerboseLevel() const;
361 // set/get controle flag for output message
362 // 0: Silent
363 // 1: Warning message
364 // 2: More
365
366
367 protected:
369 // controle flag for output message
370
371};
372
373// -----------------------------------------
374// inlined function members implementation
375// -----------------------------------------
376#include "Randomize.hh"
377
378inline
380{
381 return theProcessName;
382}
383
384inline
386{
387 return theProcessType;
388}
389
390inline
392{
393 theProcessType = aType;
394}
395
396inline
398{
399 return theProcessSubType;
400}
401
402inline
404{
405 theProcessSubType = value;
406}
407
409{
410 verboseLevel = value;
411}
412
414{
415 return verboseLevel;
416}
417
419{
422}
423
425{
427}
428
430{
432
434{
436}
437
439{
440 if (value>0.) {
441 thePILfactor = value;
442 }
443}
444
446{
447 return thePILfactor;
448}
449
451 G4double previousStepSize,
452 G4double currentMinimumStep,
453 G4double& proposedSafety,
454 G4GPILSelection* selection )
455{
456 G4double value
457 =AlongStepGetPhysicalInteractionLength(track, previousStepSize, currentMinimumStep, proposedSafety, selection);
458 return value;
459}
460
463{
464 G4double value
466 return thePILfactor*value;
467}
468
470 G4double previousStepSize,
472{
473 G4double value
474 =PostStepGetPhysicalInteractionLength(track, previousStepSize, condition);
475 return thePILfactor*value;
476}
477
478inline
480{
481 aProcessManager = procMan;
482}
483
484inline
486{
487 return aProcessManager;
488}
489
490inline
492{
493 return enableAtRestDoIt;
494}
495
496inline
498{
499 return enableAlongStepDoIt;
500}
501
502inline
504{
505 return enablePostStepDoIt;
506}
507
508#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4GPILSelection
G4ProcessType
@ fNotDefined
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
Definition: G4Step.hh:78
G4int operator==(const G4VProcess &right) const
Definition: G4VProcess.cc:196
G4double currentInteractionLength
Definition: G4VProcess.hh:297
G4double theInitialNumberOfInteractionLength
Definition: G4VProcess.hh:300
static const G4String & GetProcessTypeName(G4ProcessType)
Definition: G4VProcess.cc:150
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:408
G4int GetVerboseLevel() const
Definition: G4VProcess.hh:413
G4ProcessType theProcessType
Definition: G4VProcess.hh:340
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)=0
virtual void ResetNumberOfInteractionLengthLeft()
Definition: G4VProcess.cc:92
virtual G4VParticleChange * AtRestDoIt(const G4Track &track, const G4Step &stepData)=0
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &, G4bool)
Definition: G4VProcess.hh:236
G4ParticleChange aParticleChange
Definition: G4VProcess.hh:289
void ClearNumberOfInteractionLengthLeft()
Definition: G4VProcess.hh:418
void SetPILfactor(G4double value)
Definition: G4VProcess.hh:438
void SubtractNumberOfInteractionLengthLeft(G4double previousStepSize)
Definition: G4VProcess.cc:98
virtual const G4ProcessManager * GetProcessManager()
Definition: G4VProcess.hh:485
G4ProcessType GetProcessType() const
Definition: G4VProcess.hh:385
G4String thePhysicsTableFileName
Definition: G4VProcess.hh:338
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)=0
G4bool enableAtRestDoIt
Definition: G4VProcess.hh:350
G4double PostStepGPIL(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
Definition: G4VProcess.hh:469
virtual ~G4VProcess()
Definition: G4VProcess.cc:70
virtual G4bool IsApplicable(const G4ParticleDefinition &)
Definition: G4VProcess.hh:205
G4int verboseLevel
Definition: G4VProcess.hh:368
G4double AtRestGPIL(const G4Track &track, G4ForceCondition *condition)
Definition: G4VProcess.hh:461
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)=0
G4bool isAtRestDoItIsEnabled() const
Definition: G4VProcess.hh:491
G4int operator!=(const G4VProcess &right) const
Definition: G4VProcess.cc:201
G4bool enableAlongStepDoIt
Definition: G4VProcess.hh:351
G4double thePILfactor
Definition: G4VProcess.hh:346
G4double theNumberOfInteractionLengthLeft
Definition: G4VProcess.hh:293
void SetProcessSubType(G4int)
Definition: G4VProcess.hh:403
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)=0
G4double GetCurrentInteractionLength() const
Definition: G4VProcess.hh:433
G4double AlongStepGPIL(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
Definition: G4VProcess.hh:450
void SetProcessType(G4ProcessType)
Definition: G4VProcess.hh:391
virtual void StartTracking(G4Track *)
Definition: G4VProcess.cc:125
G4bool enablePostStepDoIt
Definition: G4VProcess.hh:352
G4double GetTotalNumberOfInteractionLengthTraversed() const
Definition: G4VProcess.hh:429
const G4ProcessManager * aProcessManager
Definition: G4VProcess.hh:280
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
Definition: G4VProcess.hh:210
G4double GetNumberOfInteractionLengthLeft() const
Definition: G4VProcess.hh:424
G4int theProcessSubType
Definition: G4VProcess.hh:343
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &, G4bool)
Definition: G4VProcess.hh:231
G4bool isPostStepDoItIsEnabled() const
Definition: G4VProcess.hh:503
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
Definition: G4VProcess.hh:217
G4bool isAlongStepDoItIsEnabled() const
Definition: G4VProcess.hh:497
virtual G4double AtRestGetPhysicalInteractionLength(const G4Track &track, G4ForceCondition *condition)=0
G4String theProcessName
Definition: G4VProcess.hh:335
virtual void SetProcessManager(const G4ProcessManager *)
Definition: G4VProcess.hh:479
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
G4int GetProcessSubType() const
Definition: G4VProcess.hh:397
virtual void DumpInfo() const
Definition: G4VProcess.cc:206
virtual void EndTracking()
Definition: G4VProcess.cc:137
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
Definition: G4VProcess.cc:214
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379
G4double GetPILfactor() const
Definition: G4VProcess.hh:445