Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/magneticfield/include/G4FieldManager.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 /geometry/magneticfield/include/G4FieldManager.hh (Version 11.3.0) and /geometry/magneticfield/include/G4FieldManager.hh (Version ReleaseNotes)


** Warning: Cannot open xref database.

  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4FieldManager                                 
 27 //                                                
 28 // Class description:                             
 29 //                                                
 30 // A class to manage (Store) a pointer to the     
 31 // describes the field of a detector (magnetic    
 32 // Also stores a reference to the chord finder    
 33 //                                                
 34 // The G4FieldManager class exists to allow th    
 35 // the electric, magnetic and/or other field(s    
 36 //                                                
 37 // A field manager can be set to a logical vol    
 38 // in order to vary its field from that of the    
 39 // a zero or constant field can override a glo    
 40 // less exact version can override the externa    
 41 // or higher precision for tracking can be spe    
 42 // stepper can be chosen for different volumes    
 43 //                                                
 44 // It also stores a pointer to the ChordFinder    
 45 // propagation in this field. All geometrical     
 46 // in the field is handled by this ChordFinder    
 47 //                                                
 48 // G4FieldManager allows the other classes/obj    
 49 // & other class categories) to find out wheth    
 50 // exists and what that object is.                
 51 //                                                
 52 // The Chord Finder must be created either by     
 53 // for a Magnetic Field or by the user creatin    
 54 // "manually" and setting this pointer.           
 55 //                                                
 56 // A default FieldManager is created by the si    
 57 // G4NavigatorForTracking and exists before ma    
 58 // However a new one can be created and given     
 59 //                                                
 60 // Our current design envisions that one Field    
 61 // valid for each region detector.                
 62 //                                                
 63 // It is expected that a particular geometrica    
 64 // By default a Field Manager is created for t    
 65 // will be utilised for all volumes unless it     
 66 // field manager.                                 
 67 // Note also that a region with both electric     
 68 // have these treated as one field.               
 69 // Similarly it could be extended to treat oth    
 70 // components of a single field type.             
 71                                                   
 72 // Author: John Apostolakis, 10.03.97 - design    
 73 // -------------------------------------------    
 74 #ifndef G4FIELDMANAGER_HH                         
 75 #define G4FIELDMANAGER_HH 1                       
 76                                                   
 77 #include "globals.hh"                             
 78                                                   
 79 class G4Field;                                    
 80 class G4MagneticField;                            
 81 class G4ChordFinder;                              
 82 class G4Track;  // Forward reference for param    
 83                                                   
 84 class G4FieldManager                              
 85 {                                                 
 86   public:  // with description                    
 87     G4FieldManager(G4Field* detectorField = nu    
 88                    G4ChordFinder* pChordFinder    
 89                    G4bool b = true ); // field    
 90       // General constructor for any field.       
 91       // -> Must be set with field and chordfi    
 92     G4FieldManager(G4MagneticField* detectorMa    
 93       // Creates ChordFinder                      
 94       // -> Assumes pure magnetic field (so en    
 95                                                   
 96     virtual ~G4FieldManager();                    
 97                                                   
 98     G4FieldManager(const G4FieldManager&) = de    
 99     G4FieldManager& operator=(const G4FieldMan    
100                                                   
101     G4bool SetDetectorField(G4Field* detectorF    
102       // Pushes the field to the equation.        
103       // Failure to push the field (due to abs    
104       // stepper or equation) is                  
105       //      - '0' = quiet      : Do not comp    
106       //                            (It will s    
107       //      - '1' = warn       : a warning i    
108       //      - '2'/else = FATAL : a fatal err    
109       // Returns success (true) or failure (fa    
110                                                   
111     inline void ProposeDetectorField(G4Field*     
112       // Pushes the field to this class only -    
113       // Should be used  to initialise this fi    
114       // the chord finder and its dependent cl    
115       // User is then responsible to ensure th    
116       //     i) an equation, stepper, driver a    
117       //    ii) this field is used by the equa    
118                                                   
119     inline void  ChangeDetectorField(G4Field*     
120       // Pushes the field to the equation ( &     
121       // Can be used only once the equation, s    
122       // have all been created.  Else it is an    
123                                                   
124     inline const G4Field*  GetDetectorField()     
125     inline G4bool          DoesFieldExist() co    
126       // Set, get and check the field object      
127                                                   
128     void CreateChordFinder(G4MagneticField* de    
129     inline void SetChordFinder(G4ChordFinder*     
130     inline G4ChordFinder* GetChordFinder();       
131     inline const G4ChordFinder* GetChordFinder    
132       // Create, set or get the associated Cho    
133                                                   
134     virtual void   ConfigureForTrack( const G4    
135       // Setup the choice of the configurable     
136       // relying on the current track's energy    
137       // Note: in addition to the values of me    
138       //       a user can use this to change t    
139                                                   
140     // static functions to handle global field    
141     static void SetGlobalFieldManager(G4FieldM    
142     static G4FieldManager* GetGlobalFieldManag    
143                                                   
144   public:  // with description                    
145                                                   
146     inline G4double GetDeltaIntersection() con    
147       // Accuracy for boundary intersection.      
148                                                   
149     inline G4double GetDeltaOneStep() const;      
150       // Accuracy for one tracking/physics ste    
151                                                   
152     inline void SetAccuraciesWithDeltaOneStep(    
153       // Sets both accuracies, maintaining a f    
154       // of volume Intersection and Integratio    
155                                                   
156     inline void     SetDeltaOneStep(G4double v    
157       // Set accuracy for integration of one s    
158     inline void     SetDeltaIntersection(G4dou    
159       // Set accuracy of  intersection of a vo    
160                                                   
161     inline G4double  GetMinimumEpsilonStep() c    
162     G4bool           SetMinimumEpsilonStep( G4    
163       // Minimum for Relative accuracy of a St    
164                                                   
165     inline G4double  GetMaximumEpsilonStep() c    
166     G4bool           SetMaximumEpsilonStep( G4    
167       // Maximum for Relative accuracy of a St    
168                                                   
169     inline G4bool   DoesFieldChangeEnergy() co    
170     inline void     SetFieldChangesEnergy(G4bo    
171       // For electric field this should be tru    
172       // For magnetic field this should be fal    
173                                                   
174     virtual G4FieldManager* Clone() const;        
175       // Needed for multi-threading, create a     
176                                                   
177   public:                                         
178     static G4double GetMaxAcceptedEpsilon();      
179     static G4bool   SetMaxAcceptedEpsilon(G4do    
180      // Set value -- within limits.               
181      // If it fails, with softFail=true it giv    
182                                                   
183   protected:                                      
184     static G4double fMaxAcceptedEpsilon;          
185     static constexpr G4double fMinAcceptedEpsi    
186       // Epsilon_min/max values must be smalle    
187                                                   
188     static constexpr G4double fMaxWarningEpsil    
189     static constexpr G4double fMaxFinalEpsilon    
190                                                   
191     static G4bool             fVerboseConstruc    
192       // Control verbosity of constructors        
193                                                   
194   private:                                        
195                                                   
196     void InitialiseFieldChangesEnergy();          
197       // Check whether field/equation change t    
198       // and sets the data member accordingly     
199       // Note: does not handle special cases -    
200       // separately  (e.g. magnetic monopole i    
201                                                   
202   protected:                                      
203      void ReportBadEpsilonValue(G4ExceptionDes    
204                                 G4String& name    
205                                                   
206   private:                                        
207     G4Field* fDetectorField = nullptr;            
208     G4ChordFinder* fChordFinder = nullptr;        
209       // Dependent objects -- with state that     
210                                                   
211     G4bool fAllocatedChordFinder = false; // D    
212                                           // c    
213     // INVARIANTS of tracking  ---------------    
214     //                                            
215     //  1. 'CONSTANTS' - default values for ac    
216     //                                            
217     const G4double fEpsilonMinDefault= 5.0e-5;    
218     const G4double fEpsilonMaxDefault= 1.0e-3;    
219                                                   
220     static G4double fDefault_Delta_One_Step_Va    
221     static G4double fDefault_Delta_Intersectio    
222       // Default values for accuracy parameter    
223                                                   
224     //  2. CHARACTERISTIC of field                
225     //                                            
226     G4bool fFieldChangesEnergy = false;           
227                                                   
228     //  3. PARAMETERS that determine the accur    
229     //                                            
230     G4double fDelta_One_Step_Value;      //  f    
231     G4double fDelta_Intersection_Val;    //  f    
232       // Values for the required accuracies       
233                                                   
234     G4double fEpsilonMin;                         
235     G4double fEpsilonMax;                         
236       // Values for the small possible relativ    
237       // (corresponding to the greatest possib    
238                                                   
239     static G4ThreadLocal G4FieldManager* fGlob    
240       // Global field manager set by G4Transpo    
241       // to allow accessing the global field w    
242       // on navigation                            
243 };                                                
244                                                   
245 // Implementation of inline functions             
246                                                   
247 #include "G4FieldManager.icc"                     
248                                                   
249 #endif                                            
250