1 #ifndef DReactionStepVertexInfo_h
2 #define DReactionStepVertexInfo_h
32 void Set_Members(
const DReaction* locReaction,
size_t locStartStepIndex);
36 void Add_ReactionStep(
size_t locStepIndex);
37 void Set_ParticleIndices(
bool locFitFlag,
const vector<pair<int, int>>& locFullConstrainParticles,
const vector<pair<int, int>>& locDecayingParticles,
38 const vector<pair<int, int>>& locOnlyConstrainTimeParticles,
const vector<pair<int, int>>& locNoConstrainParticles);
41 void Register_DecayingNoConstrainUseVertex(
bool locFitFlag,
const pair<int, int>& locDecayingNoConstrainPair,
const DReactionStepVertexInfo* locVertexInfo);
42 void Register_DecayingParticleConstraints(
bool locFitFlag,
const vector<pair<int, int>>& locNoConstrainDecayingParticles,
61 bool locIncludeDecayingFlag =
true,
bool locIncludeMissingFlag =
true,
bool locIncludeTargetFlag =
true)
const;
70 bool locIncludeDecayingFlag =
true,
bool locIncludeMissingFlag =
true,
bool locIncludeTargetFlag =
true)
const;
84 vector<pair<int, int>> Filter_Particles(vector<pair<int, int>> locParticles,
DReactionState_t locState,
Charge_t locCharge,
85 bool locIncludeDecayingFlag =
true,
bool locIncludeMissingFlag =
true,
bool locIncludeTargetFlag =
true)
const;
90 bool dIsProductionVertexFlag =
false;
91 bool dIsInclusiveVertexFlag =
false;
110 bool dIsDanglingVertexFlag =
false;
111 bool dIsFittableVertexFlag =
true;
122 inline DReactionStepVertexInfo::DReactionStepVertexInfo(
void)
124 dFullConstrainParticles.emplace(
true, vector<pair<int, int>>{});
125 dFullConstrainParticles.emplace(
false, vector<pair<int, int>>{});
126 dNoConstrainParticles.emplace(
true, vector<pair<int, int>>{});
127 dNoConstrainParticles.emplace(
false, vector<pair<int, int>>{});
135 inline void DReactionStepVertexInfo::Set_Members(
const DReaction* locReaction,
size_t locStartStepIndex)
137 dReaction = locReaction;
138 dReactionStepIndices = {locStartStepIndex};
142 inline void DReactionStepVertexInfo::Reset(
void)
146 dReactionStepIndices.clear();
147 dIsProductionVertexFlag =
false;
148 dIsInclusiveVertexFlag =
false;
151 dFullConstrainParticles.clear();
152 dOnlyConstrainTimeParticles.clear();
153 dNoConstrainParticles.clear();
156 dDecayingParticles.clear();
157 dDecayingParticles_NoConstrain.clear();
158 dDecayingParticles_FullConstrain.clear();
161 dFullConstrainParticles.emplace(
true, vector<pair<int, int>>{});
162 dFullConstrainParticles.emplace(
false, vector<pair<int, int>>{});
163 dNoConstrainParticles.emplace(
true, vector<pair<int, int>>{});
164 dNoConstrainParticles.emplace(
false, vector<pair<int, int>>{});
172 dIsDanglingVertexFlag =
false;
173 dIsFittableVertexFlag =
true;
174 dParentVertexInfo =
nullptr;
179 inline void DReactionStepVertexInfo::Add_ReactionStep(
size_t locStepIndex)
181 dReactionStepIndices.push_back(locStepIndex);
182 std::sort(dReactionStepIndices.begin(), dReactionStepIndices.end());
185 inline void DReactionStepVertexInfo::Register_DecayingNoConstrainUseVertex(
bool locFitFlag,
const pair<int, int>& locDecayingNoConstrainPair,
const DReactionStepVertexInfo* locVertexInfo)
187 dDecayingParticles_NoConstrain[locFitFlag][locDecayingNoConstrainPair] = locVertexInfo;
192 return Filter_Particles(dFullConstrainParticles.find(locFitFlag)->second, locState, locCharge, locIncludeDecayingFlag);
197 return Filter_Particles(dDecayingParticles, locState, locCharge);
200 inline vector<pair<int, int>> DReactionStepVertexInfo::Get_NoConstrainParticles(
bool locFitFlag,
DReactionState_t locState,
Charge_t locCharge,
201 bool locIncludeDecayingFlag,
bool locIncludeMissingFlag,
bool locIncludeTargetFlag)
const
203 return Filter_Particles(dNoConstrainParticles.find(locFitFlag)->second, locState, locCharge, locIncludeDecayingFlag, locIncludeMissingFlag, locIncludeTargetFlag);
208 vector<pair<int, int>> locParticles = Filter_Particles(dNoConstrainParticles.find(
false)->second, locState, locCharge,
false,
true,
false);
210 auto Check_NotMissing = [&](
const pair<int, int>& locIndices) ->
bool
211 {
return (locIndices.second != dReaction->Get_ReactionStep(locIndices.first)->Get_MissingParticleIndex());};
213 locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_NotMissing), locParticles.end());
217 inline vector<pair<int, int>> DReactionStepVertexInfo::Get_Particles(
DReactionState_t locState,
Charge_t locCharge,
bool locIncludeDecayingFlag,
bool locIncludeMissingFlag,
bool locIncludeTargetFlag)
const
220 vector<pair<int, int>> locParticles = dFullConstrainParticles.find(
true)->second;
221 locParticles.insert(locParticles.end(), dOnlyConstrainTimeParticles.begin(), dOnlyConstrainTimeParticles.end());
222 locParticles.insert(locParticles.end(), dNoConstrainParticles.find(
true)->second.begin(), dNoConstrainParticles.find(
true)->second.end());
223 std::sort(locParticles.begin(), locParticles.end());
224 return Filter_Particles(locParticles, locState, locCharge, locIncludeDecayingFlag, locIncludeMissingFlag, locIncludeTargetFlag);
229 #endif // DReactionStepVertexInfo_h
bool Get_IsFirstStepBeam(const DReaction *locReaction)
map< bool, vector< pair< int, int > > > dFullConstrainParticles
vector< size_t > dReactionStepIndices
bool Get_DanglingVertexFlag(void) const
void Print_ReactionStepVertexInfo(const DReactionStepVertexInfo *locStepInfo)
string Build_VertexConstraintString(const DReactionStepVertexInfo *locVertexInfo, bool locSpacetimeFitFlag)
void Set_FittableVertexFlag(bool locIsFittableVertexFlag)
bool Get_FittableVertexFlag(void) const
map< pair< int, int >, const DReactionStepVertexInfo * > Get_DecayingParticles_FullConstrain(bool locFitFlag) const
bool Get_ProductionVertexFlag(void) const
void Set_ParentVertexInfo(const DReactionStepVertexInfo *locStepVertexInfo)
map< bool, vector< pair< int, int > > > dNoConstrainParticles
vector< pair< int, int > > dDecayingParticles
void Set_IsInclusiveVertexFlag(bool locIsInclusiveVertexFlag)
const DReactionStepVertexInfo * Get_ParentVertexInfo(void) const
map< bool, map< pair< int, int >, const DReactionStepVertexInfo * > > dDecayingParticles_NoConstrain
const DReaction * Get_Reaction(void) const
map< bool, map< pair< int, int >, const DReactionStepVertexInfo * > > dDecayingParticles_FullConstrain
void Set_DanglingVertexFlag(bool locIsDanglingVertexFlag)
vector< pair< int, int > > Get_FullConstrainParticles(const DReactionVertexInfo *locReactionVertexInfo, bool locFitFlag, DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges, bool locIncludeDecayingFlag=true)
vector< pair< int, int > > Get_OnlyConstrainTimeParticles(void) const
bool Get_IsInclusiveVertexFlag(void) const
map< pair< int, int >, const DReactionStepVertexInfo * > Get_DecayingParticles_NoConstrain(bool locFitFlag) const
vector< size_t > Get_StepIndices(void) const
vector< pair< int, int > > dOnlyConstrainTimeParticles