26 vector<DReaction*> locReactions;
31 auto locReaction =
new DReaction(
"TrackEff_MissingProton");
33 locReactions.push_back(locReaction);
36 locReaction =
new DReaction(
"TrackEff_MissingPiMinus");
38 locReactions.push_back(locReaction);
41 locReaction =
new DReaction(
"TrackEff_MissingPiPlus");
43 locReactions.push_back(locReaction);
46 locReaction =
new DReaction(
"TrackEff_MissingProton_4pi");
48 locReactions.push_back(locReaction);
51 locReaction =
new DReaction(
"TrackEff_MissingPiPlus_4pi");
53 locReactions.push_back(locReaction);
56 locReaction =
new DReaction(
"TrackEff_MissingPiMinus_4pi");
58 locReactions.push_back(locReaction);
76 for(
auto& locReaction : locReactions)
81 locReaction->Set_KinFitUpdateCovarianceMatricesFlag(
true);
84 locReaction->Set_NumPlusMinusRFBunches(1);
120 string locReactionName = locReaction->Get_ReactionName();
134 _data.push_back(locReaction);
158 size_t locNumInclusiveSteps = 0;
161 if(locReactionStep->Get_IsInclusiveFlag())
162 ++locNumInclusiveSteps;
166 set<Particle_t> locDecayPIDsUsed;
172 if(locP4Fit && locUseKinFitResultsFlag && locReactionStep->Get_KinFitConstrainInitMassFlag())
176 if(locDecayPIDsUsed.find(locDecayPID) != locDecayPIDsUsed.end())
182 locDecayPIDsUsed.insert(locDecayPID);
189 set<Particle_t> locMissingDecayPIDsUsed;
190 for(
size_t loc_j = 0; loc_j < locReactionStep->Get_NumFinalPIDs(); ++loc_j)
194 if(locMissingDecayPIDsUsed.find(locPID) != locMissingDecayPIDsUsed.end())
198 if(
int(loc_j) == locReactionStep->Get_MissingParticleIndex())
200 if((locNumMissingParticles > 1) || (locNumInclusiveSteps > 0))
202 if(locUseKinFitResultsFlag && locP4Fit)
210 if(locDecayStepIndex <= 0)
216 if((locNumMissingParticles - locMissingDecayProducts.size()) > 0)
220 size_t locNumInclusiveDecayProductSteps = 0;
221 for(
auto& locParticlePair : locMissingDecayProducts)
223 if(locParticlePair.second == DReactionStep::Get_ParticleIndex_Inclusive())
224 ++locNumInclusiveDecayProductSteps;
227 if((locNumInclusiveSteps - locNumInclusiveDecayProductSteps) > 0)
234 auto locFinalPIDs = locReactionStep->Get_FinalPIDs();
235 locFinalPIDs.erase(locFinalPIDs.begin() + loc_j);
236 deque<Particle_t> locMissingMassOffOfPIDs(locFinalPIDs.begin(), locFinalPIDs.end());
239 locMissingDecayPIDsUsed.insert(locPID);
244 if((locNumMissingParticles == 0) && (locNumInclusiveSteps == 0) && (!locUseKinFitResultsFlag || !locP4Fit))
255 for(
auto locPID : locFinalPIDs)
259 for(
auto& locSystemPair : locTimeCuts)
266 pair<float, float> locCutPair;
271 int locNumBins = int((locCutPair.second - locCutPair.first)*1000.0 + 0.001);
286 pair<TF1*, TF1*> locFuncPair;
289 auto locCutPair = std::make_pair(locFuncPair.first->Eval(12.0), locFuncPair.second->Eval(12.0));
292 int locNumBins = int((locCutPair.second - locCutPair.first)*1000.0 + 0.001);
299 ostringstream locActionUniqueNameStream;
300 if((locPID ==
Unknown) && (locMissingMassOffOfStepIndex == 0))
301 locActionUniqueNameStream << locBaseUniqueName;
302 else if(locMissingMassOffOfStepIndex == 0)
303 locActionUniqueNameStream <<
ParticleType(locPID) <<
"_" << locBaseUniqueName;
305 locActionUniqueNameStream <<
"Step" << locMissingMassOffOfStepIndex <<
"_" << locBaseUniqueName;
307 locActionUniqueNameStream <<
ParticleType(locPID) <<
"_Step" << locMissingMassOffOfStepIndex <<
"_" << locBaseUniqueName;
311 cout <<
"create miss mass squared action: off step index, kinfit flag, off pids: " << locMissingMassOffOfStepIndex <<
", " << locUseKinFitResultsFlag;
312 for(
auto& locPID : locMissingMassOffOfPIDs)
313 cout <<
", " << locPID;
bool Get_InvariantMassCuts(Particle_t locPID, pair< float, float > &locMinMaxCuts_GeV) const
DKinFitType Get_KinFitType(void) const
void Add_MassHistograms(DReaction *locReaction, bool locUseKinFitResultsFlag, string locBaseUniqueName="")
bool Get_MissingMassSquaredCuts(Particle_t locPID, pair< TF1 *, TF1 * > &locMinMaxCuts_GeVSq) const
bool Get_KinFitConstrainInitMassFlag(void) const
DSourceComboP4Handler * dSourceComboP4Handler
static char * ParticleType(Particle_t p)
void Add_PostKinfitTimingCuts(DReaction *locReaction)
bool Check_IfMissingDecayProduct(const DReaction *locReaction, size_t locStepIndex)
vector< Particle_t > Get_FinalPIDs(int locStepIndex=-1, bool locIncludeMissingFlag=true, bool locIncludeDecayingFlag=true, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
vector< pair< int, int > > Get_MissingDecayProductIndices(const DReaction *locReaction, size_t locStepIndex)
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
Particle_t Get_InitialPID(void) const
map< DetectorSystem_t, TF1 * > Get_TimeCuts(Particle_t locPID) const
void Create_InvariantMassHistogram(DReaction *locReaction, Particle_t locPID, bool locUseKinFitResultsFlag, string locBaseUniqueName)
Particle_t Get_FinalPID(size_t locIndex) const
jerror_t fini(void)
Called after last event of last event source has been processed.
vector< Particle_t > Get_MissingPIDs(int locStepIndex=-1, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
const DReactionStep * Get_ReactionStep(size_t locStepIndex) const
int Get_DecayStepIndex(const DReaction *locReaction, size_t locStepIndex, size_t locParticleIndex)
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
vector< const DReactionStep * > Get_ReactionSteps(void) const
DSourceComboTimeHandler * dSourceComboTimeHandler
size_t Get_NumReactionSteps(void) const
void Create_MissingMassSquaredHistogram(DReaction *locReaction, Particle_t locPID, bool locUseKinFitResultsFlag, string locBaseUniqueName, int locMissingMassOffOfStepIndex, const deque< Particle_t > &locMissingMassOffOfPIDs)
deque< DReactionStep * > dReactionStepPool