FairShip
Loading...
Searching...
No Matches
ShipStack.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// SPDX-FileCopyrightText: Copyright CERN for the benefit of the SHiP
3// Collaboration
4
5// -------------------------------------------------------------------------
6// ----- ShipStack header file -----
7// -------------------------------------------------------------------------
8
27#ifndef SHIPDATA_SHIPSTACK_H_
28#define SHIPDATA_SHIPSTACK_H_
29
30#include <map> // for map, map<>::iterator
31#include <stack> // for stack
32#include <utility> // for pair
33#include <vector> // for vector
34
35#include "FairGenericStack.h" // for FairGenericStack
36#include "Rtypes.h" // for Int_t, Double_t, Bool_t, etc
37#include "ShipDetectorList.h" // for DetectorId
38#include "TMCProcess.h" // for TMCProcess
39
40class TClonesArray;
41class ShipMCTrack;
42class TParticle;
43class TRefArray;
44class FairLogger;
45
46enum { kDoneBit = 1 };
47
48class ShipStack : public FairGenericStack {
49 public:
53 explicit ShipStack(Int_t size = 100);
54
56 ~ShipStack() override;
57
73 void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px,
74 Double_t py, Double_t pz, Double_t e, Double_t vx, Double_t vy,
75 Double_t vz, Double_t time, Double_t polx, Double_t poly,
76 Double_t polz, TMCProcess proc, Int_t& ntr, Double_t weight,
77 Int_t is) override;
78
79 void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px,
80 Double_t py, Double_t pz, Double_t e, Double_t vx, Double_t vy,
81 Double_t vz, Double_t time, Double_t polx, Double_t poly,
82 Double_t polz, TMCProcess proc, Int_t& ntr, Double_t weight,
83 Int_t is, Int_t secondParentId) override;
84
90 TParticle* PopNextTrack(Int_t& iTrack) override;
91
97 TParticle* PopPrimaryForTracking(Int_t iPrim) override;
98
103 void SetCurrentTrack(Int_t iTrack) override { fCurrentTrack = iTrack; }
104
108 Int_t GetNtrack() const override { return fNParticles; }
109
113 Int_t GetNprimary() const override { return fNPrimaries; }
114
118 TParticle* GetCurrentTrack() const override;
119
123 Int_t GetCurrentTrackNumber() const override { return fCurrentTrack; }
124
128 Int_t GetCurrentParentTrackNumber() const override;
129
131 void AddParticle(TParticle* part);
132
134 void FillTrackArray() override;
135
137 void UpdateTrackIndex(TRefArray* detArray = 0) override;
138
140 void Reset() override;
141
143 void Register() override;
144
148 virtual void Print(Int_t iVerbose = 0) const;
149
151 void StoreSecondaries(Bool_t choice = kTRUE) { fStoreSecondaries = choice; }
152 void SetMinPoints(Int_t min) { fMinPoints = min; }
153 void SetEnergyCut(Double_t eMin) { fEnergyCut = eMin; }
154 void StoreMothers(Bool_t choice = kTRUE) { fStoreMothers = choice; }
155
159 void AddPoint(DetectorId iDet);
160
165 void AddPoint(DetectorId iDet, Int_t iTrack);
166
168 TParticle* GetParticle(Int_t trackId) const;
169 TClonesArray* GetListOfParticles() { return fParticles; }
170
171 private:
173 std::stack<TParticle*> fStack;
174
178 TClonesArray* fParticles;
179
181 std::vector<ShipMCTrack>* fTracks;
182
184 std::map<Int_t, Bool_t> fStoreMap;
185 std::map<Int_t, Bool_t>::iterator fStoreIter;
186
188 std::map<Int_t, Int_t> fIndexMap;
189 std::map<Int_t, Int_t>::iterator fIndexIter;
190
192 std::map<std::pair<Int_t, Int_t>, Int_t> fPointsMap;
193
198 Int_t fNTracks;
199 Int_t fIndex;
200
204 Double32_t fEnergyCut;
206
208 void SelectTracks();
209
210 ShipStack(const ShipStack&) = delete;
211 ShipStack& operator=(const ShipStack&) = delete;
212
213 ClassDefOverride(ShipStack, 1)
214};
215
216#endif // SHIPDATA_SHIPSTACK_H_
DetectorId
@ kDoneBit
Definition: ShipStack.h:46
Int_t fMinPoints
Definition: ShipStack.h:203
Bool_t fStoreMothers
Definition: ShipStack.h:205
void AddPoint(DetectorId iDet)
Definition: ShipStack.cxx:348
Int_t GetCurrentParentTrackNumber() const override
Definition: ShipStack.cxx:368
std::map< std::pair< Int_t, Int_t >, Int_t > fPointsMap
Definition: ShipStack.h:192
Int_t GetCurrentTrackNumber() const override
Definition: ShipStack.h:123
void Register() override
Definition: ShipStack.cxx:329
void SetCurrentTrack(Int_t iTrack) override
Definition: ShipStack.h:103
~ShipStack() override
Definition: ShipStack.cxx:58
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) override
Definition: ShipStack.cxx:69
Int_t fNTracks
Number of entries in fParticles.
Definition: ShipStack.h:198
void Reset() override
Definition: ShipStack.cxx:315
void StoreSecondaries(Bool_t choice=kTRUE)
Definition: ShipStack.h:151
std::map< Int_t, Int_t > fIndexMap
Definition: ShipStack.h:188
Int_t GetNtrack() const override
Definition: ShipStack.h:108
void StoreMothers(Bool_t choice=kTRUE)
Definition: ShipStack.h:154
TParticle * GetParticle(Int_t trackId) const
Definition: ShipStack.cxx:379
Int_t fIndex
Number of entries in fTracks.
Definition: ShipStack.h:199
TParticle * GetCurrentTrack() const override
Definition: ShipStack.cxx:183
TClonesArray * GetListOfParticles()
Definition: ShipStack.h:169
virtual void Print(Int_t iVerbose=0) const
Definition: ShipStack.cxx:335
std::map< Int_t, Bool_t >::iterator fStoreIter
Definition: ShipStack.h:185
void UpdateTrackIndex(TRefArray *detArray=0) override
Definition: ShipStack.cxx:255
Double32_t fEnergyCut
Definition: ShipStack.h:204
void FillTrackArray() override
Definition: ShipStack.cxx:203
Int_t GetNprimary() const override
Definition: ShipStack.h:113
Bool_t fStoreSecondaries
Used for merging.
Definition: ShipStack.h:202
TParticle * PopPrimaryForTracking(Int_t iPrim) override
Definition: ShipStack.cxx:158
TParticle * PopNextTrack(Int_t &iTrack) override
Definition: ShipStack.cxx:134
Int_t fNParticles
Number of primary particles.
Definition: ShipStack.h:197
ShipStack(const ShipStack &)=delete
std::map< Int_t, Bool_t > fStoreMap
Definition: ShipStack.h:184
void SetMinPoints(Int_t min)
Definition: ShipStack.h:152
void SetEnergyCut(Double_t eMin)
Definition: ShipStack.h:153
Int_t fNPrimaries
Index of current track.
Definition: ShipStack.h:196
std::stack< TParticle * > fStack
Definition: ShipStack.h:173
std::map< Int_t, Int_t >::iterator fIndexIter
Definition: ShipStack.h:189
TClonesArray * fParticles
Definition: ShipStack.h:178
void SelectTracks()
Definition: ShipStack.cxx:389
Int_t fCurrentTrack
Definition: ShipStack.h:195
std::vector< ShipMCTrack > * fTracks
Definition: ShipStack.h:181
ShipStack & operator=(const ShipStack &)=delete
void AddParticle(TParticle *part)
Definition: ShipStack.cxx:193