1 #ifndef _DParticleComboStep_
2 #define _DParticleComboStep_
32 void Set_Contents(
const DKinematicData* locInitialParticle,
const vector<const DKinematicData*>& locFinalParticles,
const DLorentzVector& locSpacetimeVertex);
36 void Set_InitialKinFitParticle(std::shared_ptr<const DKinFitParticle> locInitialKinFitParticle){dInitialKinFitParticle = locInitialKinFitParticle;}
56 const DKinematicData* Get_FinalParticle(
size_t locFinalParticleIndex)
const;
57 const DKinematicData* Get_FinalParticle_Measured(
size_t locFinalParticleIndex)
const;
59 vector<const DKinematicData*>
Get_FinalParticles_Measured(
void)
const{
return ((dMeasuredStep ==
nullptr) ? dFinalParticles : dMeasuredStep->Get_FinalParticles());}
61 vector<const DKinematicData*> Get_FinalParticles(
const DReactionStep* locReactionStep,
bool locIncludeMissingFlag,
bool locIncludeDecayingFlag =
true,
Charge_t locCharge =
d_AllCharges)
const;
70 double Get_Time(
void)
const{
return dSpacetimeVertex.T();}
78 std::shared_ptr<const DKinFitParticle> dInitialKinFitParticle =
nullptr;
90 if(locInit !=
nullptr)
93 cout <<
"init: pid, p, theta, phi = " << locInit->PID() <<
", " << locP3.Mag() <<
", " << locP3.Theta()*180.0/TMath::Pi() <<
", " << locP3.Phi()*180.0/TMath::Pi() <<
"\n";
97 if(locParticle ==
nullptr)
99 auto locP3 = locParticle->momentum();
100 cout <<
"init: pid, p, theta, phi = " << locParticle->PID() <<
", " << locP3.Mag() <<
", " << locP3.Theta()*180.0/TMath::Pi() <<
", " << locP3.Phi()*180.0/TMath::Pi() <<
"\n";
106 inline const DKinematicData* DParticleComboStep::Get_InitialParticle_Measured(
void)
const
108 return ((dMeasuredStep !=
nullptr) ? dMeasuredStep->Get_InitialParticle() : dInitialParticle);
111 inline void DParticleComboStep::Reset(
void)
113 dMeasuredStep =
nullptr;
114 dInitialParticle =
nullptr;
115 dInitialKinFitParticle =
nullptr;
116 dFinalParticles.clear();
117 dSpacetimeVertex.SetXYZT(0.0, 0.0, 0.0, 0.0);
120 inline void DParticleComboStep::Set_Contents(
const DKinematicData* locInitialParticle,
const vector<const DKinematicData*>& locFinalParticles,
const DLorentzVector& locSpacetimeVertex)
122 dInitialParticle = locInitialParticle;
123 dFinalParticles = locFinalParticles;
124 dSpacetimeVertex = locSpacetimeVertex;
132 inline const DKinematicData* DParticleComboStep::Get_FinalParticle(
size_t locFinalParticleIndex)
const
134 if(locFinalParticleIndex >= dFinalParticles.size())
136 return dFinalParticles[locFinalParticleIndex];
139 inline const DKinematicData* DParticleComboStep::Get_FinalParticle_Measured(
size_t locFinalParticleIndex)
const
141 if(dMeasuredStep !=
nullptr)
142 return dMeasuredStep->Get_FinalParticle_Measured(locFinalParticleIndex);
143 if(locFinalParticleIndex >= dFinalParticles.size())
145 return dFinalParticles[locFinalParticleIndex];
151 if(locMissingParticleIndex == DReactionStep::Get_ParticleIndex_None())
153 return dFinalParticles[locMissingParticleIndex];
156 inline vector<const DKinematicData*> DParticleComboStep::Get_FinalParticles(
const DReactionStep* locReactionStep,
bool locIncludeMissingFlag,
bool locIncludeDecayingFlag,
Charge_t locCharge)
const
158 vector<const DKinematicData*> locFinalParticles;
160 for(
int locPIDIndex = 0; locPIDIndex < int(locReactionStep->
Get_NumFinalPIDs()); ++locPIDIndex)
162 if(!locIncludeMissingFlag && (locPIDIndex == locMissingParticleIndex))
168 locFinalParticles.push_back(dFinalParticles[locPIDIndex]);
170 return locFinalParticles;
173 inline vector<const DKinematicData*> DParticleComboStep::Get_FinalParticles_Measured(
const DReactionStep* locReactionStep,
Charge_t locCharge)
const
175 auto locStepPointer = (dMeasuredStep !=
nullptr) ? dMeasuredStep :
this;
176 return locStepPointer->Get_FinalParticles(locReactionStep,
false,
false, locCharge);
179 inline vector<const JObject*> DParticleComboStep::Get_FinalParticle_SourceObjects(
Charge_t locCharge)
const
181 vector<const JObject*> locSourceObjects;
182 for(
size_t loc_i = 0; loc_i < Get_NumFinalParticles(); ++loc_i)
185 if(locSourceObject ==
nullptr)
188 locSourceObjects.push_back(locSourceObject);
190 return locSourceObjects;
195 vector<const DKinematicData*> locOutputParticles;
196 for(
auto locParticle : locInputParticles)
198 if(locParticle ==
nullptr)
200 if(locParticle->PID() == locPID)
201 locOutputParticles.push_back(locParticle);
203 return locOutputParticles;
208 if(locParticle ==
nullptr)
212 if(locChargedHypo !=
nullptr)
215 locChargedHypo->GetSingle(locChargedTrack);
216 return static_cast<const JObject*
>(locChargedTrack);
220 return ((locNeutralHypo !=
nullptr) ?
static_cast<const JObject*
>(locNeutralHypo->Get_NeutralShower()) :
nullptr);
225 #endif // _DParticleComboStep_
vector< const DKinematicData * > Get_FinalParticles_Measured(void) const
void Set_InitialKinFitParticle(std::shared_ptr< const DKinFitParticle > locInitialKinFitParticle)
void Set_MeasuredParticleComboStep(const DParticleComboStep *locMeasuredParticleComboStep)
const JObject * Get_FinalParticle_SourceObject(const DKinematicData *locParticle)
void Add_FinalParticle(const DKinematicData *locFinalParticle)
TLorentzVector DLorentzVector
void Set_FinalParticle(const DKinematicData *locFinalParticle, size_t locFinalParticleIndex)
void Set_InitialParticle(const DKinematicData *locInitialParticle)
vector< const DKinematicData * > Get_FinalParticles(void) const
Particle_t Get_FinalPID(size_t locIndex) const
size_t Get_NumFinalParticles(void) const
DLorentzVector Get_SpacetimeVertex(void) const
int Get_MissingParticleIndex(void) const
static int Is_CorrectCharge(Particle_t locPID, Charge_t locCharge)
vector< const DKinematicData * > Get_ParticlesWithPID(Particle_t locPID, const vector< const DKinematicData * > &locInputParticles)
const DKinematicData * Get_InitialParticle(void) const
size_t Get_NumFinalPIDs(void) const
const DVector3 & momentum(void) const
vector< const DKinematicData * > dFinalParticles
double Get_Time(void) const
DVector3 Get_Position(void) const
void Set_SpacetimeVertex(const DLorentzVector &locSpacetimeVertex)
std::shared_ptr< const DKinFitParticle > Get_InitialKinFitParticle(void) const
DLorentzVector dSpacetimeVertex