Geant4 VMC Version 6.8
Loading...
Searching...
No Matches
TG4SDServices.h
Go to the documentation of this file.
1#ifndef TG4_SD_SERVICES_H
2#define TG4_SD_SERVICES_H
3
4//------------------------------------------------
5// The Geant4 Virtual Monte Carlo package
6// Copyright (C) 2007 - 2014 Ivana Hrivnacova
7// All rights reserved.
8//
9// For the licensing terms see geant4_vmc/LICENSE.
10// Contact: root-vmc@cern.ch
11//-------------------------------------------------
12
17
18#include <globals.hh>
19
20#include <Rtypes.h>
21
22#include <map>
23#include <set>
24#include <vector>
25
27
28class G4LogicalVolume;
30
31class TVirtualMCSensitiveDetector;
32
41
43{
44 public:
47
48 // static methods
49 static TG4SDServices* Instance();
50 static G4int GetFirstVolumeId();
51
52 // methods
53 void ClearVolumeMaps();
54 void MapVolume(G4LogicalVolume* lv, G4int id, G4bool fillLVToVolIdMap);
55 void MapUserSD(
56 const G4String& volumeName, TVirtualMCSensitiveDetector* userSD);
57 void PrintStatistics(G4bool open, G4bool close) const;
58 void PrintVolNameToIdMap() const;
59 void PrintVolIdToLVMap() const;
60 void PrintSensitiveVolumes() const;
61 void PrintUserSensitiveDetectors() const;
62
63 // set methods
64 void SetIsStopRun(G4bool stopRun);
65
66 // get methods
67 // volume IDs conversions
68 G4int GetVolumeID(const G4String& volumeName) const;
69 G4int GetVolumeID(G4LogicalVolume* volume) const;
70 G4int GetMediumID(G4LogicalVolume* volume) const;
71 G4String GetVolumeName(G4int volumeId) const;
72 std::vector<G4LogicalVolume*> GetLogicalVolumes(G4int volumeId) const;
73 // Representative only; not suitable for applying settings to all variants.
74 G4LogicalVolume* GetLogicalVolume(G4int volumeId, G4bool warn = true) const;
75 G4int GetMediumId(G4int volumeId) const;
76 TVirtualMCSensitiveDetector* GetUserSD(
77 G4String volumeName, G4bool warn = true) const;
78 G4bool GetIsStopRun() const;
79 // SDs
80 Int_t NofSensitiveDetectors() const;
82 std::set<TVirtualMCSensitiveDetector*>* GetUserSDs() const;
83
84 // Daughters
85 Int_t NofVolDaughters(const char* volName) const;
86 const char* VolDaughterName(const char* volName, Int_t i) const;
87 Int_t VolDaughterCopyNo(const char* volName, Int_t i) const;
88
89 private:
94
95 // static data members
97
98 static const G4int fgkFirstVolumeId;
99
100 G4bool fIsStopRun;
101
103 std::map<G4String, G4int> fVolNameToIdMap;
104
106 std::multimap<G4int, G4LogicalVolume*> fVolIdToLVMap;
107
109 std::map<G4LogicalVolume*, G4int> fLVToVolIdMap;
110
112 std::vector<G4int> fInstanceToVolId;
113
115 static G4ThreadLocal std::set<TVirtualMCSensitiveDetector*>* fgUserSDs;
116
118 static G4ThreadLocal std::map<G4String, TVirtualMCSensitiveDetector*>*
120
123};
124
125// inline methods
126
128{
130 return fgInstance;
131}
132
134{
136 return fgkFirstVolumeId;
137}
138
139inline void TG4SDServices::SetIsStopRun(G4bool isStopRun)
140{
142 fIsStopRun = isStopRun;
143}
144
145inline G4bool TG4SDServices::GetIsStopRun() const
146{
148 return fIsStopRun;
149}
150
151inline std::set<TVirtualMCSensitiveDetector*>* TG4SDServices::GetUserSDs() const
152{
154 return fgUserSDs;
155}
156
157#endif // TG4_SD_SERVICES_H
G4int GetMediumID(G4LogicalVolume *volume) const
static G4ThreadLocal std::set< TVirtualMCSensitiveDetector * > * fgUserSDs
vector of user SDs
void SetIsStopRun(G4bool stopRun)
static TG4SDServices * fgInstance
this instance
G4bool fIsUserSDs
info about user SDs
static G4ThreadLocal std::map< G4String, TVirtualMCSensitiveDetector * > * fgUserSDMap
map volume name -> user SD
TG4SensitiveDetector * GetSensitiveDetector(G4VSensitiveDetector *sd) const
std::vector< G4int > fInstanceToVolId
Dense read-only stepping cache, indexed by Geant4 instance ID.
TG4SDServices(const TG4SDServices &right)
Not implemented.
std::map< G4LogicalVolume *, G4int > fLVToVolIdMap
map logical volume -> volume id
TVirtualMCSensitiveDetector * GetUserSD(G4String volumeName, G4bool warn=true) const
void PrintUserSensitiveDetectors() const
G4int GetVolumeID(const G4String &volumeName) const
G4bool fIsStopRun
info about run stopping by user
void PrintSensitiveVolumes() const
TG4SDServices & operator=(const TG4SDServices &right)
Not implemented.
void PrintVolNameToIdMap() const
Int_t NofVolDaughters(const char *volName) const
void MapVolume(G4LogicalVolume *lv, G4int id, G4bool fillLVToVolIdMap)
std::map< G4String, G4int > fVolNameToIdMap
map volume name -> volume id
static const G4int fgkFirstVolumeId
the first volume id
Int_t NofSensitiveDetectors() const
void MapUserSD(const G4String &volumeName, TVirtualMCSensitiveDetector *userSD)
void PrintStatistics(G4bool open, G4bool close) const
G4bool GetIsStopRun() const
std::set< TVirtualMCSensitiveDetector * > * GetUserSDs() const
void PrintVolIdToLVMap() const
Int_t VolDaughterCopyNo(const char *volName, Int_t i) const
static TG4SDServices * Instance()
G4String GetVolumeName(G4int volumeId) const
std::vector< G4LogicalVolume * > GetLogicalVolumes(G4int volumeId) const
G4int GetMediumId(G4int volumeId) const
std::multimap< G4int, G4LogicalVolume * > fVolIdToLVMap
one VMC source ID -> all its Geant4 representations
G4LogicalVolume * GetLogicalVolume(G4int volumeId, G4bool warn=true) const
const char * VolDaughterName(const char *volName, Int_t i) const
static G4int GetFirstVolumeId()
Sensitive detector class for calling a user defined stepping function.