SLIC  6.1.1
Simulation for the Linear Collider (SLIC) - Geant4 simulation application
MCParticleManager.hh
Go to the documentation of this file.
1 #ifndef SLIC_MCPARTICLE_MANAGER_HH_
2 #define SLIC_MCPARTICLE_MANAGER_HH_ 1
3 
4 // SLIC
5 #include "Module.hh"
6 #include "Singleton.hh"
7 
8 // LCIO
9 #include "EVENT/LCCollection.h"
10 #include "IMPL/LCCollectionVec.h"
11 #include "IMPL/MCParticleImpl.h"
12 #include "EVENT/MCParticle.h"
13 
14 // Geant4
15 #include "globals.hh"
16 #include "G4Event.hh"
17 #include "G4PrimaryParticle.hh"
18 
19 // STL
20 #include <map>
21 #include <set>
22 
23 using std::map;
24 using std::set;
25 
26 using EVENT::LCCollection;
27 using EVENT::MCParticle;
28 using IMPL::MCParticleImpl;
29 using IMPL::LCCollectionVec;
30 
31 namespace slic {
32 
33 typedef map<G4int, MCParticle*> TrackIDMap;
34 typedef map<MCParticle*, G4PrimaryParticle*> PrimaryParticleMap;
35 typedef map<G4PrimaryParticle*, MCParticle*> MCParticleMap;
36 typedef PrimaryParticleMap::iterator PrimaryParticleMapIterator;
37 typedef set<MCParticle*> MCParticleSet;
38 
48 class MCParticleManager: public Singleton<MCParticleManager>, Module {
49 
50  public:
51 
56  Module("MCParticleManager"), _mcpVec(0) {
57  }
58 
62  virtual ~MCParticleManager() {
63  }
64 
68  LCCollectionVec* getMCParticleCollection() {
69  return _mcpVec;
70  }
71 
77  void addMCParticleTrackID(G4int trackId, MCParticle* particle) {
78  if (trackId <= 0) {
79  return;
80  }
81  _trackIDMap[trackId] = particle;
82  }
83 
89  MCParticle* findMCParticle(G4int trackId) {
90  return _trackIDMap[trackId];
91  }
92 
98  return &_primaryMap;
99  }
100 
104  void reset() {
105  _trackIDMap.clear();
106  _primaryMap.clear();
107  _mcpMap.clear();
108  _mcpVec = 0;
109  }
110 
115  if (_mcpVec == 0) {
116  _mcpVec = new LCCollectionVec(EVENT::LCIO::MCPARTICLE);
117  }
118  }
119 
124  inline int indexOf(MCParticle* particle) {
125  return std::find(_inputVec->begin(), _inputVec->end(), particle) - _inputVec->begin();
126  }
127 
132  inline int indexOf(G4PrimaryParticle* primary) {
133  return std::find(_primaryVec.begin(), _primaryVec.end(), primary) - _primaryVec.begin();
134  }
135 
141  void generateEvent(LCCollectionVec* mcparticles, G4Event* event);
142 
148  void applyLorentzTransformation(LCCollection* mcparticles, const G4double angle);
149 
155  G4double smearZPosition(const G4double rms);
156 
162  std::set<G4PrimaryParticle*> createPrimary(G4PrimaryParticle* parent, MCParticle* mcp);
163 
169  G4PrimaryVertex* createVertex(MCParticle* mcp);
170 
175  bool isDaughter(G4PrimaryParticle* particle, const std::set<G4PrimaryParticle*>& primaries);
176 
177  private:
178 
183  void setMCParticleCollection(LCCollectionVec* mcpVec) {
184  _mcpVec = mcpVec;
185  }
186 
187  private:
188 
193 
198 
203 
204  LCCollectionVec* _inputVec;
205 
211  LCCollectionVec* _mcpVec;
212 
213  std::vector<G4PrimaryParticle*> _primaryVec;
214 };
215 
216 }
217 
218 #endif
Management of global MCParticle information.
int indexOf(MCParticle *particle)
std::vector< G4PrimaryParticle * > _primaryVec
void applyLorentzTransformation(LCCollection *mcparticles, const G4double angle)
void addMCParticleTrackID(G4int trackId, MCParticle *particle)
void generateEvent(LCCollectionVec *mcparticles, G4Event *event)
PrimaryParticleMap _primaryMap
PrimaryParticleMap * getPrimaryParticleMap()
G4double smearZPosition(const G4double rms)
void setMCParticleCollection(LCCollectionVec *mcpVec)
LCCollectionVec * _inputVec
int indexOf(G4PrimaryParticle *primary)
std::set< G4PrimaryParticle * > createPrimary(G4PrimaryParticle *parent, MCParticle *mcp)
G4PrimaryVertex * createVertex(MCParticle *mcp)
bool isDaughter(G4PrimaryParticle *particle, const std::set< G4PrimaryParticle * > &primaries)
LCCollectionVec * getMCParticleCollection()
MCParticle * findMCParticle(G4int trackId)
Base class for slic code modules that provides common functionality, such as logging to an output str...
Definition: Module.hh:25
map< G4PrimaryParticle *, MCParticle * > MCParticleMap
set< MCParticle * > MCParticleSet
map< MCParticle *, G4PrimaryParticle * > PrimaryParticleMap
PrimaryParticleMap::iterator PrimaryParticleMapIterator
map< G4int, MCParticle * > TrackIDMap