84 void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px, Double_t py, Double_t pz, Double_t e,
85 Double_t vx, Double_t vy, Double_t vz, Double_t
time, Double_t polx, Double_t poly, Double_t polz,
86 TMCProcess proc, Int_t& ntr, Double_t
weight, Int_t is)
override;
88 void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px, Double_t py, Double_t pz, Double_t e,
89 Double_t vx, Double_t vy, Double_t vz, Double_t
time, Double_t polx, Double_t poly, Double_t polz,
90 TMCProcess proc, Int_t& ntr, Double_t
weight, Int_t is, Int_t secondParentId)
override;
92 void PushTrack(Int_t toBeDone, Int_t parentID, Int_t pdgCode, Double_t px, Double_t py, Double_t pz, Double_t e,
93 Double_t vx, Double_t vy, Double_t vz, Double_t
time, Double_t polx, Double_t poly, Double_t polz,
94 TMCProcess proc, Int_t& ntr, Double_t
weight, Int_t is, Int_t secondParentId, Int_t daughter1Id, Int_t daughter2Id,
119 Int_t
GetNtrack()
const override {
return mNumberOfEntriesInParticles; }
122 Int_t
GetNprimary()
const override {
return mNumberOfPrimaryParticles; }
128 return const_cast<TParticle*
>(&mCurrentParticle);
136 Int_t GetCurrentParentTrackNumber()
const override;
139 TMCProcess GetProdProcessOfCurrentTrack()
const;
142 void FillTrackArray()
override;
145 void UpdateTrackIndex(TRefArray* detArray =
nullptr)
override;
148 void FinishPrimary()
override;
151 void Reset()
override;
154 void Register()
override;
159 virtual void Print(Int_t iVerbose = 0)
const;
163 void Print(Option_t* option =
nullptr)
const override;
165 void ReorderKine(std::vector<MCTrack>& particles, std::vector<int>& reOrderedIndices);
174 void addHit(
int iDet);
177 void modifiesHit(
int iDet);
179 TClonesArray* GetListOfParticles()
override;
181 std::vector<MCTrack>
const*
const getMCTracks()
const {
return mTracks; }
190 const std::vector<TParticle>&
getPrimaries()
const {
return mPrimaryParticles; }
197 for (
auto p : primaries) {
202 PushTrack(doTrack, p);
204 mNumberOfPrimaryParticles = primaries.size();
205 mNumberOfEntriesInParticles = mNumberOfPrimaryParticles;
211 int getMotherTrackId(
int )
const;
215 bool isTrackDaughterOf(
int ,
int )
const;
218 bool isFromRadDecay(
int trackid)
const;
220 bool isCurrentTrackDaughterOf(
int parentid)
const;
223 int getCurrentPrimaryIndex()
const;
227 void fillParentIDs(std::vector<int>&
ids)
const;
235 void updateEventStats();
246 typedef std::function<bool(
const TParticle& p,
const std::vector<TParticle>& particles)>
TransportFcn;
251 std::stack<TParticle> mStack;
255 std::vector<o2::MCTrack> mParticles;
256 std::vector<int> mTransportedIDs;
257 std::vector<int> mIndexOfPrimaries;
258 std::vector<int> mTrackIDtoParticlesEntry;
260 TParticle mCurrentParticle;
261 TParticle mCurrentParticle0;
265 std::vector<TParticle> mPrimaryParticles;
268 std::vector<o2::MCTrack>* mTracks;
271 std::map<Int_t, Int_t> mIndexMap;
274 std::vector<o2::base::Detector*> mActiveDetectors;
277 Int_t mIndexOfCurrentTrack;
278 Int_t mIndexOfCurrentPrimary;
279 Int_t mNumberOfPrimaryParticles;
280 Int_t mNumberOfEntriesInParticles;
281 Int_t mNumberOfEntriesInTracks;
282 Int_t mNumberOfPrimariesforTracking;
283 Int_t mNumberOfPrimariesPopped;
287 Bool_t mStoreMothers;
288 Bool_t mStoreSecondaries;
289 bool mPruneKinematics =
false;
291 Int_t mHitCounter = 0;
292 Double32_t mEnergyCut;
295 Int_t mCleanupCounter = 0;
296 Int_t mCleanupThreshold = 1;
297 Int_t mPrimariesDone = 0;
298 Int_t mTracksDone = 0;
300 bool mIsG4Like =
false;
302 bool mIsExternalMode =
false;
303 bool mDoTrackSeeding =
false;
305 TransportFcn mTransportPrimary = [](
const TParticle& p,
const std::vector<TParticle>& particles) {
return false; };
308 std::vector<o2::TrackReference>* mTrackRefs =
nullptr;
318 bool isPrimary(
const MCTrack& part);
319 bool isFromPrimaryDecayChain(
const MCTrack& part);
320 bool isFromPrimaryPairProduction(
const MCTrack& part);
322 bool keepPhysics(
const MCTrack& part);
331 void addHit(
int iDet, Int_t iTrack);
333 void handleTransportPrimary(TParticle& p);
335 ClassDefOverride(
Stack, 1);
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