BmnRoot
Loading...
Searching...
No Matches
CbmStack.h
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- CbmStack header file -----
3// ----- Created 10/08/04 by D. Bertini / V. Friese -----
4// -------------------------------------------------------------------------
5
28#ifndef CBMSTACK_H
29#define CBMSTACK_H
30
31#include "BmnDetectorList.h" // for DetectorId
32#include "FairGenericStack.h" // for FairGenericStack
33
34#include <TMCProcess.h> // for TMCProcess
35#include <TParticle.h> // for TParticle
36#include <TClonesArray.h> // for TClonesArray
37#include <TRefArray.h> // for TRefArray
38
39#include <map> // for map, map<>::iterator
40#include <stack> // for stack
41#include <utility> // for pair
42
43class CbmStack : public FairGenericStack
44{
45 public:
49 CbmStack(Int_t size = 100);
50
52 virtual ~CbmStack();
53
69 virtual void PushTrack(Int_t toBeDone,
70 Int_t parentID,
71 Int_t pdgCode,
72 Double_t px,
73 Double_t py,
74 Double_t pz,
75 Double_t e,
76 Double_t vx,
77 Double_t vy,
78 Double_t vz,
79 Double_t time,
80 Double_t polx,
81 Double_t poly,
82 Double_t polz,
83 TMCProcess proc,
84 Int_t& ntr,
85 Double_t weight,
86 Int_t is);
87
88 virtual void PushTrack(Int_t toBeDone,
89 Int_t parentID,
90 Int_t pdgCode,
91 Double_t px,
92 Double_t py,
93 Double_t pz,
94 Double_t e,
95 Double_t vx,
96 Double_t vy,
97 Double_t vz,
98 Double_t time,
99 Double_t polx,
100 Double_t poly,
101 Double_t polz,
102 TMCProcess proc,
103 Int_t& ntr,
104 Double_t weight,
105 Int_t is,
106 Int_t secondParentId);
107
113 virtual TParticle* PopNextTrack(Int_t& iTrack);
114
120 virtual TParticle* PopPrimaryForTracking(Int_t iPrim);
121
126 virtual void SetCurrentTrack(Int_t iTrack) { fCurrentTrack = iTrack; }
127
131 virtual Int_t GetNtrack() const { return fNParticles; }
132
136 virtual Int_t GetNprimary() const { return fNPrimaries; }
137
141 virtual TParticle* GetCurrentTrack() const;
142
146 virtual Int_t GetCurrentTrackNumber() const { return fCurrentTrack; }
147
151 virtual Int_t GetCurrentParentTrackNumber() const;
152
154 virtual void AddParticle(TParticle* part);
155
157 virtual void FillTrackArray();
158
160 virtual void UpdateTrackIndex(TRefArray* detArray = 0);
161
163 virtual void Reset();
164
166 virtual void Register();
167
171 virtual void Print(Option_t*) const;
172
174 void StoreSecondaries(Bool_t choice = kTRUE) { fStoreSecondaries = choice; }
175 void SetMinPoints(Int_t min) { fMinPoints = min; }
176 void SetEnergyCut(Double_t eMin) { fEnergyCut = eMin; }
177 void SetStartZCut(Double_t zMax) { fStartZCut = zMax; }
178 void StoreMothers(Bool_t choice = kTRUE) { fStoreMothers = choice; }
179
184
189 void AddPoint(DetectorId iDet, Int_t iTrack);
190
192 TParticle* GetParticle(Int_t trackId) const;
193 TClonesArray* GetListOfParticles() { return fParticles; }
194
195 void SetParticleArray(TClonesArray* partArray)
196 {
197 for (Int_t ipart = 0; ipart < partArray->GetEntries(); ipart++) {
198 ((TParticle*)(partArray->At(ipart)))->SetUniqueID(fNPrimaries);
199 fStack.push((TParticle*)partArray->At(ipart));
200 AddParticle((TParticle*)partArray->At(ipart));
201 fNParticles++;
202 fNPrimaries++;
203 }
204 }
205
206 void SetParticleArray(TClonesArray* partArray, Int_t partFrom, Int_t partTo)
207 {
208 for (Int_t ipart = partFrom; ipart < partTo; ipart++) {
209 ((TParticle*)(partArray->At(ipart)))->SetUniqueID(fNPrimaries);
210 ((TParticle*)(partArray->At(ipart)))->SetStatusCode(fNPrimaries);
211 fStack.push((TParticle*)partArray->At(ipart));
212 AddParticle((TParticle*)partArray->At(ipart));
213 fNParticles++;
214 fNPrimaries++;
215 }
216 }
217
219 virtual FairGenericStack* CloneStack() const
220 {
221 CbmStack* clonedStack = new CbmStack();
222 clonedStack->StoreSecondaries(fStoreSecondaries);
223 clonedStack->SetMinPoints(fMinPoints);
224 clonedStack->SetEnergyCut(fEnergyCut);
225 clonedStack->StoreMothers(fStoreMothers);
226 return clonedStack;
227 }
228
229 private:
231 std::stack<TParticle*> fStack;
232
236 TClonesArray* fParticles;
237
239 TClonesArray* fTracks;
240
242 std::map<Int_t, Bool_t> fStoreMap;
243 std::map<Int_t, Bool_t>::iterator fStoreIter;
244
246 std::map<Int_t, Int_t> fIndexMap;
247 std::map<Int_t, Int_t>::iterator fIndexIter;
248
250 std::map<std::pair<Int_t, Int_t>, Int_t> fPointsMap;
251
253 Int_t fCurrentTrack;
254 Int_t fNPrimaries;
255 Int_t fNParticles;
256 Int_t fNTracks;
257 Int_t fIndex;
258
260 Bool_t fStoreSecondaries;
261 Int_t fMinPoints;
262 Double32_t fEnergyCut;
263 Double_t fStartZCut;
264 Bool_t fStoreMothers;
265
267 void SelectTracks();
268
269 CbmStack(const CbmStack&);
270 CbmStack& operator=(const CbmStack&);
271
272 ClassDef(CbmStack, 2);
273};
274
275#endif
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:30
DetectorId
void SetStartZCut(Double_t zMax)
Definition CbmStack.h:177
virtual ~CbmStack()
void StoreSecondaries(Bool_t choice=kTRUE)
Definition CbmStack.h:174
virtual void FillTrackArray()
void AddPoint(DetectorId iDet)
virtual Int_t GetNtrack() const
Definition CbmStack.h:131
virtual void UpdateTrackIndex(TRefArray *detArray=0)
void AddPoint(DetectorId iDet, Int_t iTrack)
virtual TParticle * PopNextTrack(Int_t &iTrack)
void StoreMothers(Bool_t choice=kTRUE)
Definition CbmStack.h:178
virtual void Register()
void SetMinPoints(Int_t min)
Definition CbmStack.h:175
virtual TParticle * GetCurrentTrack() const
virtual void AddParticle(TParticle *part)
Definition CbmStack.cxx:188
void SetEnergyCut(Double_t eMin)
Definition CbmStack.h:176
TParticle * GetParticle(Int_t trackId) const
virtual void AddParticle(TParticle *part)
virtual Int_t GetNprimary() const
Definition CbmStack.h:136
virtual void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vx, Double_t vy, Double_t vz, Double_t time, Double_t polx, Double_t poly, Double_t polz, TMCProcess proc, Int_t &ntr, Double_t weight, Int_t is)
CbmStack(Int_t size=100)
virtual Int_t GetCurrentParentTrackNumber() const
TClonesArray * GetListOfParticles()
Definition CbmStack.h:193
virtual Int_t GetCurrentTrackNumber() const
Definition CbmStack.h:146
virtual void Reset()
virtual void SetCurrentTrack(Int_t iTrack)
Definition CbmStack.h:126
virtual void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vx, Double_t vy, Double_t vz, Double_t time, Double_t polx, Double_t poly, Double_t polz, TMCProcess proc, Int_t &ntr, Double_t weight, Int_t is, Int_t secondParentId)
virtual void Print(Option_t *) const
virtual FairGenericStack * CloneStack() const
Definition CbmStack.h:219
virtual TParticle * PopPrimaryForTracking(Int_t iPrim)
void SetParticleArray(TClonesArray *partArray, Int_t partFrom, Int_t partTo)
Definition CbmStack.h:206
void SetParticleArray(TClonesArray *partArray)
Definition CbmStack.h:195
Defines unique identifiers (enum) for all BM@N detector systems.