10 #include "JANA/JObject.h"
11 #include "JANA/JEventLoop.h"
12 #include "JANA/JFactory.h"
18 using namespace DAnalysis;
42 DReaction(
string locReactionName, vector<const DReactionStep*> locSteps = {},
DKinFitType locKinFitType =
d_NoFit,
string locTreeFileName =
"");
58 void Set_MaxExtraShowers(
size_t locMaxExtraShowers){dMaxExtraShowers = pair<bool, size_t>(
true, locMaxExtraShowers);}
59 void Set_MaxExtraGoodTracks(
size_t locMaxExtraGoodTracks){dMaxExtraGoodTracks = pair<bool, size_t>(
true, locMaxExtraGoodTracks);}
62 void Set_MaxPhotonRFDeltaT(
double locMaxPhotonRFDeltaT);
63 void Set_InvariantMassCut(
Particle_t locStepInitialPID,
double locMinInvariantMass,
double locMaxInvariantMass);
65 void Set_MinChargedPIDFOM(
double locMinChargedPIDFOM){cout <<
"WARNING: DReaction::Set_MinChargedPIDFOM() IS CURRENTLY DEPRECATED AND DOES NOTHING." << endl;}
66 void Set_MinPhotonPIDFOM(
double locMinPhotonPIDFOM){cout <<
"WARNING: DReaction::Set_MinPhotonPIDFOM() IS CURRENTLY DEPRECATED AND DOES NOTHING." << endl;}
67 void Set_MinProtonMomentum(
double locMinProtonMomentum){cout <<
"WARNING: DReaction::Set_MinProtonMomentum() IS DEPRECATED AND DOES NOTHING." << endl;}
68 void Set_MaxNumBeamPhotonsInBunch(
size_t locMaxNumBeamPhotonsInBunch){cout <<
"WARNING: DReaction::Set_MinProtonMomentum() IS DEPRECATED AND DOES NOTHING." << endl;}
69 void Set_AnyComboFlag(
bool locAnyComboFlag){cout <<
"WARNING: DReaction::Set_AnyComboFlag() IS CURRENTLY DEPRECATED AND DOES NOTHING." << endl;}
76 bool Get_IsInclusiveFlag(
void)
const;
88 vector<Particle_t> Get_FinalPIDs(
int locStepIndex = -1,
bool locIncludeMissingFlag =
true,
bool locIncludeDecayingFlag =
true,
90 vector<Particle_t> Get_MissingPIDs(
int locStepIndex = -1,
Charge_t locCharge =
d_AllCharges,
bool locIncludeDuplicatesFlag =
true)
const;
106 void Enable_TTreeOutput(
string locTTreeOutputFileName,
bool locSaveUnusedFlag =
false);
117 bool dKinFitUpdateCovarianceMatricesFlag =
false;
120 bool dEnableTTreeOutputFlag =
false;
121 bool dSaveUnusedFlag =
false;
122 string dTTreeOutputFileName =
"";
131 size_t dNumPlusMinusRFBunches = 99999;
132 pair<bool, double> dMaxPhotonRFDeltaT = make_pair(
false, 0.0);
133 pair<bool, size_t> dMaxExtraShowers = make_pair(
false,
size_t(0));
134 pair<bool, size_t> dMaxExtraGoodTracks = make_pair(
false,
size_t(0));
137 string dEventStoreSkims =
"";
144 vector<Particle_t>
Get_ChainPIDs(
const DReaction* locReaction,
size_t locStepIndex,
int locUpToStepIndex, vector<Particle_t> locUpThroughPIDs,
bool locExpandDecayingFlag,
bool locExcludeMissingFlag);
146 vector<const DReaction*>
Get_Reactions(JEventLoop* locEventLoop);
151 inline DReaction::DReaction(
string locReactionName, vector<const DReactionStep*> locSteps,
DKinFitType locKinFitType,
string locTreeFileName) :
152 dReactionName(locReactionName), dKinFitType(locKinFitType), dKinFitUpdateCovarianceMatricesFlag(false), dEnableTTreeOutputFlag(locTreeFileName !=
""),
153 dSaveUnusedFlag(false), dTTreeOutputFileName(locTreeFileName), dReactionSteps(locSteps) {}
159 auto locInclusiveSearcher = [](
const DReactionStep* locStep) ->
bool{
return locStep->Get_IsInclusiveFlag();};
182 return ((locFirstStep->Get_TargetPID() !=
Unknown) || (locFirstStep->Get_SecondBeamPID() !=
Unknown));
190 if(locSteps_lhs.size() != locSteps_rhs.size())
193 auto Equality_Checker = [&locSameOrderFlag, &locRightSubsetOfLeftFlag](
const DReactionStep* lhs,
const DReactionStep* rhs) ->
bool
195 return std::equal(locSteps_lhs.begin(), locSteps_lhs.end(), locSteps_rhs.begin(), Equality_Checker);
200 set<size_t> locNoConstrainMassSteps;
204 locNoConstrainMassSteps.insert(loc_i);
206 return locNoConstrainMassSteps;
211 inline vector<Particle_t>
Get_ChainPIDs(
const DReaction* locReaction,
Particle_t locInitialPID,
int locUpToStepIndex, vector<Particle_t> locUpThroughPIDs,
bool locExpandDecayingFlag,
bool locExcludeMissingFlag)
215 auto locPIDSearcher = [&locInitialPID](
const DReactionStep* locStep) ->
bool{
return (locStep->Get_InitialPID() == locInitialPID);};
216 auto locStepIterator = std::find_if(locReactionSteps.begin(), locReactionSteps.end(), locPIDSearcher);
217 if(locStepIterator == locReactionSteps.end())
220 size_t locStepIndex = std::distance(locReactionSteps.begin(), locStepIterator);
221 return Get_ChainPIDs(locReaction, locStepIndex, locUpToStepIndex, locUpThroughPIDs, locExpandDecayingFlag, locExcludeMissingFlag);
227 return Get_ChainPIDs(locReaction, locInitialPID, -1, vector<Particle_t>(), locExpandDecayingFlag, locExcludeMissingFlag);
233 vector<string> locParticleNames;
234 locParticleNames.reserve(locPIDs.size());
235 std::transform(locPIDs.begin(), locPIDs.end(), std::back_inserter(locParticleNames), locPIDTransformer);
236 return std::accumulate(locParticleNames.begin(), locParticleNames.end(),
string(
""));
241 vector<pair<int, int>> locMissingDecayProductIndices;
243 if(locReactionStep->Get_IsInclusiveFlag())
245 if(locReactionStep->Get_MissingPID() !=
Unknown)
246 locMissingDecayProductIndices.emplace_back(locStepIndex, locReactionStep->Get_MissingParticleIndex());
248 for(
size_t loc_i = 0; loc_i < locReactionStep->Get_NumFinalPIDs(); ++loc_i)
251 if(locDecayStepIndex <= 0)
254 locMissingDecayProductIndices.insert(locMissingDecayProductIndices.end(), locFurtherMissingDecayProducts.begin(), locFurtherMissingDecayProducts.end());
256 return locMissingDecayProductIndices;
266 map<DType, size_t> locMap;
267 for(
const auto& locObject : locVector)
269 auto locIterator = locMap.find(locObject);
270 if(locIterator != locMap.end())
271 ++(locIterator->second);
273 locMap.emplace(locObject, 1);
280 #endif // _DReaction_
string Get_TTreeOutputFileName(void) const
bool Get_IsFirstStepBeam(const DReaction *locReaction)
set< size_t > Get_NoConstrainMassSteps(const DReaction *locReaction)
string Get_EventStoreSkims(void) const
void Add_ReactionStep(const DReactionStep *locReactionStep)
string dTTreeOutputFileName
static char * ParticleName_ROOT(Particle_t p)
pair< int, int > Get_InitialParticleDecayFromIndices(const DReaction *locReaction, int locStepIndex)
void Set_MaxExtraGoodTracks(size_t locMaxExtraGoodTracks)
vector< size_t > Get_DefinedParticleStepIndex(const DReaction *locReaction)
void Enable_TTreeOutput(string locTTreeOutputFileName, bool locSaveUnusedFlag=false)
DKinFitType Get_KinFitType(void) const
bool Check_ChannelEquality(const DReaction *lhs, const DReaction *rhs, bool locSameOrderFlag=true, bool locRightSubsetOfLeftFlag=false)
void Set_MaxExtraShowers(size_t locMaxExtraShowers)
bool Get_KinFitConstrainInitMassFlag(void) const
string Convert_PIDsToROOTName(const vector< Particle_t > &locPIDs)
vector< const DReaction * > Get_Reactions(JEventLoop *locEventLoop)
void Set_MinProtonMomentum(double locMinProtonMomentum)
bool Get_EnableTTreeOutputFlag(void) const
void Clear_ReactionSteps(void)
bool Get_SaveUnusedFlag(void) const
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
bool Check_IfMissingDecayProduct(const DReaction *locReaction, size_t locStepIndex)
vector< Particle_t > Get_ChainPIDs(const DReaction *locReaction, size_t locStepIndex, int locUpToStepIndex, vector< Particle_t > locUpThroughPIDs, bool locExpandDecayingFlag, bool locExcludeMissingFlag)
void Set_KinFitType(DKinFitType locKinFitType)
void Set_MinPhotonPIDFOM(double locMinPhotonPIDFOM)
vector< pair< int, int > > Get_MissingDecayProductIndices(const DReaction *locReaction, size_t locStepIndex)
size_t Get_NumAnalysisActions(void) const
pair< bool, size_t > Get_MaxExtraShowers(void) const
void Print_ReactionStep(const DReactionStep *locReactionStep)
void Set_EventStoreSkims(string locEventStoreSkims)
vector< const DReactionStep * > dReactionSteps
map< DType, size_t > Convert_VectorToCountMap(const vector< DType > &locVector)
string Get_ReactionName(void) const
pair< bool, size_t > Get_MaxExtraGoodTracks(void) const
size_t Get_NumPlusMinusRFBunches(void) const
void Set_KinFitUpdateCovarianceMatricesFlag(bool locUpdateFlag)
static constexpr int Get_ParticleIndex_Inclusive(void)
void Set_MinChargedPIDFOM(double locMinChargedPIDFOM)
void Set_AnyComboFlag(bool locAnyComboFlag)
size_t Get_ParticleInstanceIndex(const DReactionStep *locStep, size_t locParticleIndex)
bool dEnableTTreeOutputFlag
pair< bool, double > Get_MaxPhotonRFDeltaT(void) const
void Set_MaxNumBeamPhotonsInBunch(size_t locMaxNumBeamPhotonsInBunch)
bool Get_KinFitUpdateCovarianceMatricesFlag(void) const
const DReactionStep * Get_ReactionStep(size_t locStepIndex) const
int Get_DecayStepIndex(const DReaction *locReaction, size_t locStepIndex, size_t locParticleIndex)
bool Get_IsInclusiveFlag(void) const
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
vector< const DReactionStep * > Get_ReactionSteps(void) const
vector< DAnalysisAction * > dAnalysisActions
size_t Get_NumReactionSteps(void) const
void Print_Reaction(const DReaction *locReaction)
vector< DAnalysisAction * > Get_AnalysisActions(void) const