13 #ifndef ROOT_TMCManagerStack
14 #define ROOT_TMCManagerStack
31 struct TMCParticleStatus;
32 class TGeoBranchArray;
33 class TGeoMCBranchArrayContainer;
35 class TMCManagerStack :
public TVirtualMCStack {
41 virtual ~TMCManagerStack() =
default;
62 void PushTrack(Int_t toBeDone, Int_t parent, Int_t pdg, Double_t px, Double_t py, Double_t pz, Double_t e,
63 Double_t vx, Double_t vy, Double_t vz, Double_t tof, Double_t polx, Double_t poly, Double_t polz,
64 TMCProcess mech, Int_t &ntr, Double_t weight, Int_t is)
override final;
71 TParticle *PopNextTrack(Int_t &itrack)
override final;
74 TParticle *PopPrimaryForTracking(Int_t i)
override final;
78 TParticle *PopPrimaryForTracking(Int_t i, Int_t &itrack);
81 Int_t GetNtrack() const override final;
84 Int_t GetStackedNtrack() const;
87 Int_t GetNprimary() const override final;
90 Int_t GetStackedNprimary() const;
93 TParticle *GetCurrentTrack() const override final;
96 Int_t GetCurrentTrackNumber() const override final;
99 Int_t GetCurrentParentTrackNumber() const override final;
103 void SetCurrentTrack(Int_t trackId) override final;
106 const TMCParticleStatus *GetParticleStatus(Int_t trackId) const;
109 const TGeoBranchArray *GetGeoState(Int_t trackId) const;
112 const TGeoBranchArray *GetCurrentGeoState() const;
115 friend class TMCManager;
117 Bool_t HasTrackId(Int_t trackId) const;
119 void SetUserStack(TVirtualMCStack *stack);
121 void ConnectTrackContainers(std::vector<TParticle *> *particles,
122 std::vector<std::unique_ptr<TMCParticleStatus>> *tracksStatus,
123 TGeoMCBranchArrayContainer *branchArrayContainer, Int_t *totalNPrimaries,
124 Int_t *totalNTracks);
126 void PushPrimaryTrackId(Int_t trackId);
128 void PushSecondaryTrackId(Int_t trackId);
130 void ResetInternals();
134 Int_t fCurrentTrackId;
136 TVirtualMCStack *fUserStack;
138 Int_t *fTotalNPrimaries;
140 Int_t *fTotalNTracks;
142 std::vector<TParticle *> *fParticles;
144 std::vector<std::unique_ptr<TMCParticleStatus>> *fParticlesStatus;
146 TGeoMCBranchArrayContainer *fBranchArrayContainer;
148 std::stack<Int_t> fPrimariesStack;
150 std::stack<Int_t> fSecondariesStack;
152 ClassDefOverride(TMCManagerStack, 1)
155 #endif // ROOT_TMCManagerStack