Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4RegionStore.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// G4RegionStore
27//
28// Class description:
29//
30// Container for all regions, with functionality derived from
31// std::vector<T>. The class is a 'singleton', in that only
32// one can exist, and access is provided via the static method
33// G4RegionStore::GetInstance().
34//
35// All regions should be registered with G4RegionStore, and removed on their
36// destruction. The underlying container initially has a capacity of 20.
37// A map indexed by volume names is also recorded for fast search;
38// pointers to regions with same name are stored in buckets.
39//
40// If much additional functionality is added, should consider containment
41// instead of inheritance for std::vector<T>.
42
43// 18.09.02, G.Cosmo - Initial version
44// --------------------------------------------------------------------
45#ifndef G4REGIONSTORE_HH
46#define G4REGIONSTORE_HH 1
47
48#include <vector>
49#include <map>
50
51#include "G4Types.hh"
52#include "G4String.hh"
53#include "G4VStoreNotifier.hh"
54
55class G4Region;
57
58class G4RegionStore : public std::vector<G4Region*>
59{
60 public:
61
62 static void Register(G4Region* pRegion);
63 // Add the region to the collection.
64 static void DeRegister(G4Region* pRegion);
65 // Remove the region from the collection.
66 static G4RegionStore* GetInstance();
67 // Get a ptr to the unique G4RegionStore, creating it if necessary.
68 static void SetNotifier(G4VStoreNotifier* pNotifier);
69 // Assign a notifier for allocation/deallocation of regions.
70 static void Clean();
71 // Delete all regions from the store except for the world region.
72
73 G4bool IsModified() const;
74 // Loops through all regions to verify if a region has been
75 // modified. It returns TRUE if just one region is modified.
77 // Loops through all regions to reset flag for modification
78 // to FALSE. Used by the run manager to notify that the
79 // physics table has been updated.
80
81 void UpdateMaterialList(G4VPhysicalVolume* currentWorld=nullptr);
82 // Forces recomputation of material lists in all regions
83 // in the store.
84
85 G4Region* GetRegion(const G4String& name, G4bool verbose = true) const;
86 // Returns a region through its name specification. Uses the internal
87 // map for fast search and warns if a region in the collection is not
88 // unique or not found.
89
90 inline G4bool IsMapValid() const { return mvalid; }
91 inline void SetMapValid(G4bool val) { mvalid = val; }
92 // Accessor to assess validity of the internal map.
93 inline const std::map<G4String,
94 std::vector<G4Region*> >& GetMap() const { return bmap; }
95 // Return the internal map.
96 void UpdateMap();
97 // Bring contents of internal map up to date and resets validity flag.
98
100 // Returns a region through its name specification, if it exists.
101 // If it does not exist it will allocate one delegating ownership
102 // to the client.
103
104 void SetWorldVolume();
105 // Set a world volume pointer to a region that belongs to it.
106 // Scan over all world volumes.
107 // This method should be exclusively used by G4RunManagerKernel.
108
109 virtual ~G4RegionStore();
110 // Destructor: takes care to delete allocated regions.
111
112 G4RegionStore(const G4RegionStore&) = delete;
114 // Forbidden copy constructor and assignment operator
115
116 protected:
117
119 // Protected singleton constructor.
120
121 private:
122
123 static G4RegionStore* fgInstance;
124 static G4ThreadLocal G4VStoreNotifier* fgNotifier;
125 static G4ThreadLocal G4bool locked;
126
127 std::map<G4String, std::vector<G4Region*> > bmap;
128 G4bool mvalid = false; // Flag to indicate if map is up to date or not
129};
130
131#endif
bool G4bool
Definition: G4Types.hh:86
static void DeRegister(G4Region *pRegion)
static void Register(G4Region *pRegion)
static G4RegionStore * GetInstance()
static void SetNotifier(G4VStoreNotifier *pNotifier)
void UpdateMaterialList(G4VPhysicalVolume *currentWorld=nullptr)
virtual ~G4RegionStore()
const std::map< G4String, std::vector< G4Region * > > & GetMap() const
static void Clean()
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
G4bool IsMapValid() const
G4Region * FindOrCreateRegion(const G4String &name)
void SetMapValid(G4bool val)
void ResetRegionModified()
G4RegionStore & operator=(const G4RegionStore &)=delete
G4RegionStore(const G4RegionStore &)=delete
G4bool IsModified() const
void SetWorldVolume()
#define G4ThreadLocal
Definition: tls.hh:77