Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/management/include/G4Region.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/management/include/G4Region.hh (Version 11.3.0) and /geometry/management/include/G4Region.hh (Version 5.0)


  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 // G4Region                                       
 27 //                                                
 28 // Class description:                             
 29 //                                                
 30 // Defines a region or a group of regions in t    
 31 // setup, sharing properties associated to mat    
 32 // cuts which may affect or bias specific phys    
 33                                                   
 34 // 18.09.02, G.Cosmo - Initial version            
 35 // -------------------------------------------    
 36 #ifndef G4REGION_HH                               
 37 #define G4REGION_HH 1                             
 38                                                   
 39 #include <vector>                                 
 40 #include <map>                                    
 41 #include <algorithm>                              
 42                                                   
 43 #include "G4Types.hh"                             
 44 #include "G4String.hh"                            
 45 #include "G4GeomSplitter.hh"                      
 46                                                   
 47 class G4ProductionCuts;                           
 48 class G4LogicalVolume;                            
 49 class G4Material;                                 
 50 class G4VUserRegionInformation;                   
 51 class G4MaterialCutsCouple;                       
 52 class G4UserLimits;                               
 53 class G4FieldManager;                             
 54 class G4FastSimulationManager;                    
 55 class G4VPhysicalVolume;                          
 56 class G4UserSteppingAction;                       
 57                                                   
 58 class G4RegionData                                
 59 {                                                 
 60   // Encapsulates the fields associated to the    
 61   // G4Region that may not be read-only.          
 62                                                   
 63   public:                                         
 64                                                   
 65     void initialize()                             
 66     {                                             
 67       fFastSimulationManager = nullptr;           
 68       fRegionalSteppingAction = nullptr;          
 69     }                                             
 70                                                   
 71     G4FastSimulationManager* fFastSimulationMa    
 72     G4UserSteppingAction* fRegionalSteppingAct    
 73 };                                                
 74                                                   
 75 // The type G4RegionManager is introduced to e    
 76 // both the master thread and worker threads t    
 77 // the fields encapsulated by the class G4Regi    
 78 // initializes the value for these fields, it     
 79 // definition defined below. For every G4Regio    
 80 // corresponding G4RegionData instance. All G4    
 81 // organized by the class G4RegionManager as a    
 82 // The field "int instanceID" is added to the     
 83 // The value of this field in each G4Region in    
 84 // of the corresponding G4RegionData instance.    
 85 // In order to use the class G4RegionManager,     
 86 // the class G4Region as follows: "static G4Re    
 87 // For the master thread, the array for G4Regi    
 88 // dynamically along with G4Region instances a    
 89 // thread, it copies the array of G4RegionData    
 90 // In addition, it invokes a method similiar t    
 91 // to achieve the partial effect for each inst    
 92 //                                                
 93 using G4RegionManager = G4GeomSplitter<G4Regio    
 94                                                   
 95 class G4Region                                    
 96 {                                                 
 97   public:                                         
 98                                                   
 99     G4Region(const G4String& name);               
100     virtual ~G4Region();                          
101                                                   
102     G4Region(const G4Region&) = delete;           
103     G4Region& operator=(const G4Region&) = del    
104       // Copy constructor and assignment opera    
105                                                   
106     inline G4bool operator==(const G4Region& r    
107       // Equality defined by address only.        
108                                                   
109     void AddRootLogicalVolume(G4LogicalVolume*    
110     void RemoveRootLogicalVolume(G4LogicalVolu    
111       // Add/remove root logical volumes and s    
112       // daughters flags as regions. They also    
113       // materials list for the region. Flag f    
114       // always enabled by default. Search in     
115       // when adding, assuming the user guaran    
116       // NOT already inserted, in which case s    
117       // achieved in very complex flat geometr    
118                                                   
119     void SetName(const G4String& name);           
120     inline const G4String& GetName() const;       
121       // Set/get region's name.                   
122                                                   
123     inline void RegionModified(G4bool flag);      
124     inline G4bool IsModified() const;             
125       // Accessors to flag identifying if a re    
126       // (and still cuts needs to be computed)    
127                                                   
128     inline void SetProductionCuts(G4Production    
129     inline G4ProductionCuts* GetProductionCuts    
130                                                   
131     inline std::vector<G4LogicalVolume*>::iter    
132            GetRootLogicalVolumeIterator();        
133     inline std::vector<G4Material*>::const_ite    
134            GetMaterialIterator() const;           
135       // Return iterators to lists of root log    
136                                                   
137     inline std::size_t GetNumberOfMaterials()     
138     inline std::size_t GetNumberOfRootVolumes(    
139       // Return the number of elements in the     
140       // root logical volumes.                    
141                                                   
142     void UpdateMaterialList();                    
143       // Clears material list and recomputes i    
144       // each root logical volume in the regio    
145                                                   
146     void ClearMaterialList();                     
147       // Clears the material list.                
148                                                   
149     void ScanVolumeTree(G4LogicalVolume* lv, G    
150       // Scans recursively the 'lv' logical vo    
151       // and places all materials in the list     
152                                                   
153     inline void SetUserInformation(G4VUserRegi    
154     inline G4VUserRegionInformation* GetUserIn    
155       // Set and Get methods for user informat    
156                                                   
157     inline void SetUserLimits(G4UserLimits* ul    
158     inline G4UserLimits* GetUserLimits() const    
159       // Set and Get methods for userL-limits     
160       // Once user-limits are set, it will pro    
161                                                   
162     inline void ClearMap();                       
163       // Reset G4MaterialCoupleMap                
164                                                   
165     inline void RegisterMaterialCouplePair(G4M    
166                                            G4M    
167       // Method invoked by G4ProductionCutsTab    
168                                                   
169     inline G4MaterialCutsCouple* FindCouple(G4    
170       // Find a G4MaterialCutsCouple which cor    
171       // in this region.                          
172                                                   
173     void SetFastSimulationManager(G4FastSimula    
174     G4FastSimulationManager* GetFastSimulation    
175       // Set and Get methods for G4FastSimulat    
176       // The root logical volume that has the     
177       // becomes an envelope of fast simulatio    
178                                                   
179     void ClearFastSimulationManager();            
180       // Set G4FastSimulationManager pointer t    
181       // if it exists. Otherwise set to null.     
182                                                   
183     inline void SetFieldManager(G4FieldManager    
184     inline G4FieldManager* GetFieldManager() c    
185       // Set and Get methods for G4FieldManage    
186       // The region with assigned field-manage    
187       // geometrical area associated with it;     
188       // to local fields eventually set to log    
189                                                   
190     inline G4VPhysicalVolume* GetWorldPhysical    
191       // Get method for the world physical vol    
192       // belongs to. A valid pointer will be a    
193       // through G4RegionStore when the geomet    
194       // pointer may be incorrect at PreInit a    
195       // is null at the proper state, this par    
196       // to any world (maybe not assigned to a    
197                                                   
198     void SetWorld(G4VPhysicalVolume* wp);         
199       // Set the world physical volume if this    
200       // If wp is null, reset the pointer.        
201                                                   
202     G4bool BelongsTo(G4VPhysicalVolume* thePhy    
203       // Returns whether this region belongs t    
204       // (recursively scanned to the bottom of    
205                                                   
206     G4Region* GetParentRegion(G4bool& unique)     
207       // Returns a region that contains this r    
208       // Flag 'unique' is true if there is onl    
209       // the current region.                      
210                                                   
211     void SetRegionalSteppingAction(G4UserStepp    
212     G4UserSteppingAction* GetRegionalSteppingA    
213       // Set/Get method of the regional user s    
214                                                   
215   public:                                         
216                                                   
217     G4Region(__void__&);                          
218       // Fake default constructor for usage re    
219       // persistency for clients requiring pre    
220       // persistifiable objects.                  
221                                                   
222     inline G4int GetInstanceID() const;           
223       // Returns the instance ID.                 
224                                                   
225     static const G4RegionManager& GetSubInstan    
226       // Returns the private data instance man    
227                                                   
228     static void Clean();                          
229       // Clear memory allocated by sub-instanc    
230                                                   
231     inline void UsedInMassGeometry(G4bool val     
232     inline void UsedInParallelGeometry(G4bool     
233     inline G4bool IsInMassGeometry() const;       
234     inline G4bool IsInParallelGeometry() const    
235       // Utility methods to identify if region    
236       // geometry for tracking or a parallel g    
237                                                   
238   private:                                        
239                                                   
240     inline void AddMaterial (G4Material* aMate    
241       // Searchs the specified material in the    
242       // if not present adds it.                  
243                                                   
244   private:                                        
245                                                   
246     using G4RootLVList = std::vector<G4Logical    
247     using G4MaterialList = std::vector<G4Mater    
248     using G4MaterialCouplePair = std::pair<G4M    
249     using G4MaterialCoupleMap = std::map<G4Mat    
250                                                   
251     G4String fName;                               
252                                                   
253     G4RootLVList fRootVolumes;                    
254     G4MaterialList fMaterials;                    
255     G4MaterialCoupleMap fMaterialCoupleMap;       
256                                                   
257     G4bool fRegionMod = true;                     
258     G4ProductionCuts* fCut = nullptr;             
259                                                   
260     G4VUserRegionInformation* fUserInfo = null    
261     G4UserLimits* fUserLimits = nullptr;          
262     G4FieldManager* fFieldManager = nullptr;      
263                                                   
264     G4VPhysicalVolume* fWorldPhys = nullptr;      
265                                                   
266     G4bool fInMassGeometry = false;               
267     G4bool fInParallelGeometry = false;           
268                                                   
269     G4int instanceID;                             
270       // This field is used as instance ID.       
271     G4GEOM_DLL static G4RegionManager subInsta    
272       // This field helps to use the class G4R    
273 };                                                
274                                                   
275 #include "G4Region.icc"                           
276                                                   
277 #endif                                            
278