9 dSourceComboer(locSourceComboer), dSourceComboTimeHandler(locSourceComboTimeHandler), dSourceComboVertexer(locSourceComboVertexer)
11 gPARMS->SetDefaultParameter(
"COMBO:DEBUG_LEVEL",
dDebugLevel);
19 double locTargetCenterZ = 65.0;
27 vector<const DNeutralParticleHypothesis*> locNeutralParticleHypotheses;
28 locEventLoop->Get(locNeutralParticleHypotheses);
31 vector<const DChargedTrackHypothesis*> locChargedTrackHypotheses;
32 locEventLoop->Get(locChargedTrackHypotheses);
35 vector<const DBeamPhoton*> locBeamPhotons;
36 locEventLoop->Get(locBeamPhotons);
99 bool locDanglingNeutralsFlag =
false;
101 locDanglingNeutralsFlag = locDanglingIterator->second;
106 if(locStepVertexInfo->Get_FittableVertexFlag())
108 if(!locStepVertexInfo->Get_OnlyConstrainTimeParticles().empty())
110 locDanglingNeutralsFlag =
true;
113 if(!locStepVertexInfo->Get_NoConstrainParticles(
true,
d_FinalState,
d_Neutral,
false,
false,
false).empty())
115 locDanglingNeutralsFlag =
true;
121 return ((locKinFitType !=
d_NoFit) && ((locKinFitType ==
d_P4Fit) || locDanglingNeutralsFlag));
127 cout <<
"Building particle combo" << endl;
130 auto locComboTuple = std::make_tuple(locReactionVertexInfo, locFullCombo, locBeamParticle, locRFBunchShift, locCreateNeutralErrorMatrixFlag_Combo);
131 auto locComboIterator =
dComboMap.find(locComboTuple);
135 cout <<
"Combo previously created, returning." << endl;
136 return locComboIterator->second;
140 dComboMap.emplace(locComboTuple, locParticleCombo);
142 auto locReaction = locReactionVertexInfo->
Get_Reaction();
147 auto locRFIterator =
dRFBunchMap.find(locRFBunchShift);
149 locEventRFBunch = locRFIterator->second;
154 locNewEventRFBunch->
Reset();
156 locNewEventRFBunch->Set_Content(locInitialEventRFBunch->dTimeSource, locRFTime, locInitialEventRFBunch->dTimeVariance, 0);
157 locEventRFBunch = locNewEventRFBunch;
158 dRFBunchMap.emplace(locRFBunchShift, locEventRFBunch);
160 locParticleCombo->Set_EventRFBunch(locEventRFBunch);
162 cout <<
"RF Bunch set, shift = " << locRFBunchShift << endl;
164 auto locReactionSteps = locReaction->Get_ReactionSteps();
165 for(
size_t loc_i = 0; loc_i < locReactionSteps.size(); ++loc_i)
168 cout <<
"Step: " << loc_i << endl;
170 auto locReactionStep = locReactionSteps[loc_i];
171 auto locStepVertexInfo = locReactionVertexInfo->Get_StepVertexInfo(loc_i);
172 auto locStepBeamParticle = (loc_i == 0) ? locBeamParticle :
nullptr;
173 auto locIsProductionVertex = locStepVertexInfo->Get_ProductionVertexFlag();
175 auto locVertexPrimaryCombo = dSourceComboer->Get_VertexPrimaryCombo(locFullCombo, locStepVertexInfo);
178 cout <<
"VERTEX PRIMARY COMBO:" << endl;
182 auto locSourceCombo = (loc_i == 0) ? locFullCombo : dSourceComboer->Get_StepSourceCombo(locReaction, loc_i, locVertexPrimaryCombo, locStepVertexInfo->Get_StepIndices().front());
185 cout <<
"STEP " << loc_i <<
", SOURCE COMBO:" << endl;
189 bool locCreateNeutralErrorMatrixFlag = (locKinFitType !=
d_NoFit) && ((locKinFitType ==
d_P4Fit) || !locStepVertexInfo->Get_FittableVertexFlag());
190 if(locReactionStep->Get_FinalPIDs(
false,
d_Neutral,
false).empty())
191 locCreateNeutralErrorMatrixFlag =
false;
194 auto locStepTuple = std::make_tuple(*locReactionStep, locSourceCombo, locCreateNeutralErrorMatrixFlag, locIsProductionVertex, locFullCombo, locBeamParticle);
195 auto locStepIterator = dComboStepMap.find(locStepTuple);
196 if(locStepIterator != dComboStepMap.end())
198 locParticleCombo->Add_ParticleComboStep(locStepIterator->second);
200 cout <<
"step already created, reuse" << endl;
205 auto locParticleComboStep = Get_ParticleComboStepResource();
208 auto locVertex = dSourceComboVertexer->Get_Vertex(locStepVertexInfo, locFullCombo, locBeamParticle,
false);
209 if(dDebugLevel >= 20)
210 cout <<
"vertex: " << locVertex.X() <<
", " << locVertex.Y() <<
", " << locVertex.Z() << endl;
211 auto locTimeOffset = dSourceComboVertexer->Get_TimeOffset(locReactionVertexInfo, locStepVertexInfo, locFullCombo, locBeamParticle);
212 if(dDebugLevel >= 20)
213 cout <<
"time offset: " << locTimeOffset << endl;
216 auto locPropagatedRFTime = dSourceComboTimeHandler->Calc_PropagatedRFTime(locPrimaryVertexZ, locRFBunchShift, locTimeOffset);
217 if(dDebugLevel >= 20)
218 cout <<
"prop rf time: " << locPropagatedRFTime << endl;
219 DLorentzVector locSpacetimeVertex(locVertex, locPropagatedRFTime);
221 cout <<
"spacetime vertex xyzt: " << locSpacetimeVertex.X() <<
", " << locSpacetimeVertex.Y() <<
", " << locSpacetimeVertex.Z() <<
", " << locSpacetimeVertex.T() << endl;
224 if((locBeamParticle !=
nullptr) && (loc_i == 0))
227 cout <<
"beam particle set: " << locBeamParticle << endl;
228 locParticleComboStep->Set_InitialParticle(locBeamParticle);
231 locParticleComboStep->Set_InitialParticle(
nullptr);
234 auto locFinalPIDs = locReactionStep->Get_FinalPIDs();
235 map<Particle_t, size_t> locPIDCountMap;
236 vector<const DKinematicData*> locFinalParticles;
237 for(
size_t loc_j = 0; loc_j < locFinalPIDs.size(); ++loc_j)
242 locFinalParticles.push_back(
nullptr);
247 auto locPID = locFinalPIDs[loc_j];
248 auto locPIDIterator = locPIDCountMap.find(locPID);
249 if(locPIDIterator != locPIDCountMap.end())
250 ++(locPIDIterator->second);
252 locPIDCountMap.emplace(locPID, 1);
254 size_t locPIDCountSoFar = 0;
258 cout <<
"pid index, pid, source particle: " << loc_j <<
", " << locPID <<
", " << locSourceParticle << endl;
263 auto locNeutralShower =
static_cast<const DNeutralShower*
>(locSourceParticle);
264 auto locHypoTuple = std::make_tuple(locNeutralShower, locPID, locRFBunchShift, locCreateNeutralErrorMatrixFlag, locIsProductionVertex, locFullCombo, locVertexPrimaryCombo, locBeamParticle);
267 auto locHypoIterator = dNeutralHypoMap.find(locHypoTuple);
268 if(locHypoIterator != dNeutralHypoMap.end())
269 locNewNeutralHypo = locHypoIterator->second;
273 auto locCreateThisNeutralErrorMatrixFlag = locCreateNeutralErrorMatrixFlag ?
true : ((
ParticleMass(locPID) > 0.0) && !locSpactimeIsFitFlag);
274 auto locVertexCovMatrix = locCreateThisNeutralErrorMatrixFlag ? &dVertexCovMatrix :
nullptr;
275 locNewNeutralHypo = dNeutralParticleHypothesisFactory->Create_DNeutralParticleHypothesis(locNeutralShower, locPID, locEventRFBunch, locSpacetimeVertex, locVertexCovMatrix);
276 dCreated_NeutralHypo.push_back(const_cast<DNeutralParticleHypothesis*>(locNewNeutralHypo));
277 dNeutralHypoMap.emplace(locHypoTuple, locNewNeutralHypo);
280 locFinalParticles.push_back(static_cast<const DKinematicData*>(locNewNeutralHypo));
284 auto locChargedTrack =
static_cast<const DChargedTrack*
>(locSourceParticle);
285 auto locHypoTuple = std::make_tuple(locChargedTrack, locPID, locRFBunchShift, locIsProductionVertex, locFullCombo, locVertexPrimaryCombo, locBeamParticle);
288 auto locHypoIterator = dChargedHypoMap.find(locHypoTuple);
289 if(locHypoIterator != dChargedHypoMap.end())
290 locNewChargedHypo = locHypoIterator->second;
293 locNewChargedHypo = Create_ChargedHypo(locChargedTrack, locPID, locPropagatedRFTime, locIsProductionVertex, locFullCombo, locVertexPrimaryCombo, locBeamParticle, locSpacetimeVertex.Vect());
294 dChargedHypoMap.emplace(locHypoTuple, locNewChargedHypo);
297 locFinalParticles.push_back(static_cast<const DKinematicData*>(locNewChargedHypo));
300 locParticleComboStep->Set_Contents(locStepBeamParticle, locFinalParticles, locSpacetimeVertex);
303 locParticleCombo->Add_ParticleComboStep(locParticleComboStep);
304 dComboStepMap.emplace(locStepTuple, locParticleComboStep);
307 return locParticleCombo;
316 locNewHypo->Share_FromInput(locOrigHypo,
true,
false,
true);
319 locNewHypo->Set_TimeAtPOCAToVertex(locTrackPOCAX4.T());
321 locNewHypo->Set_T0(locPropagatedRFTime, locOrigHypo->t0_err(), locOrigHypo->t0_detector());
322 locNewHypo->AddAssociatedObject(locChargedTrack);
332 cout <<
"Create kinfit combo" << endl;
336 locNewCombo->Set_KinFitResults(locKinFitResults);
344 cout <<
"Step: " << loc_j << endl;
349 locNewCombo->Add_ParticleComboStep(locNewComboStep);
350 locNewComboStep->Set_MeasuredParticleComboStep(locComboStep);
353 locNewComboStep->Set_SpacetimeVertex(locComboStep->Get_SpacetimeVertex());
354 Set_SpacetimeVertex(locReaction, locNewCombo, locOrigCombo, locNewComboStep, loc_j, locKinFitResults, locKinFitChain, locOrigShiftedRFTime);
355 auto locSpacetimeVertex = locNewComboStep->Get_SpacetimeVertex();
357 cout <<
"spacetime vertex set" << endl;
360 auto locInitialParticle_Measured = locComboStep->Get_InitialParticle_Measured();
361 if(locInitialParticle_Measured !=
nullptr)
364 if(locKinFitParticle == NULL)
365 locNewComboStep->Set_InitialParticle(locInitialParticle_Measured);
368 locNewComboStep->Set_InitialParticle(
Create_BeamPhoton_KinFit(static_cast<const DBeamPhoton*>(locInitialParticle_Measured), locKinFitParticle.get(), locSpacetimeVertex));
369 locNewComboStep->Set_InitialKinFitParticle(locKinFitParticle);
373 Set_DecayingParticles(locReaction, locNewCombo, locOrigCombo, loc_j, locNewComboStep, locKinFitChain, locKinFitResults);
376 for(
size_t loc_k = 0; loc_k < locComboStep->Get_NumFinalParticles(); ++loc_k)
378 auto locKinematicData_Measured = locComboStep->Get_FinalParticle_Measured(loc_k);
379 if(locReactionStep->Get_MissingParticleIndex() == int(loc_k))
382 if(!locMissingParticles.empty())
384 auto locNewKinematicData =
Build_KinematicData(locKinFitResults, (*locMissingParticles.begin()).
get(), locSpacetimeVertex,
true);
385 locNewComboStep->Add_FinalParticle(locNewKinematicData);
388 locNewComboStep->Add_FinalParticle(NULL);
390 else if(locKinematicData_Measured ==
nullptr)
391 locNewComboStep->Add_FinalParticle(
nullptr);
397 if(locKinFitParticle == NULL)
399 if(locKinFitParticle == NULL)
400 locNewComboStep->Add_FinalParticle(locKinematicData_Measured);
402 locNewComboStep->Add_FinalParticle(
Create_NeutralHypo_KinFit(locNeutralHypo, locKinFitParticle.get(), locSpacetimeVertex.T()));
408 if(locKinFitParticle == NULL)
409 locNewComboStep->Add_FinalParticle(locKinematicData_Measured);
412 auto locChargedTrack =
static_cast<const DChargedTrack*
>(locComboStep->Get_FinalParticle_SourceObject(loc_k));
413 auto locNewHypo =
Create_ChargedHypo_KinFit(locChargedTrack, locKinematicData_Measured->PID(), locKinFitParticle.get(), locSpacetimeVertex.T());
414 locNewComboStep->Add_FinalParticle(locNewHypo);
426 cout <<
"DParticleComboCreator::Set_SpacetimeVertex" << endl;
435 auto locAllParticles = locKinFitChain->Get_KinFitChainStep(locStepIndex)->Get_FinalParticles();
436 if(locAllParticles.empty())
439 cout <<
"somehow no particles at this step" << endl;
440 if(locStepIndex == 0)
442 size_t locNextStepIndex = 1;
443 while(locAllParticles.empty() && (locNextStepIndex < locKinFitChain->Get_NumKinFitChainSteps()))
445 locAllParticles = locKinFitChain->Get_KinFitChainStep(locNextStepIndex)->Get_FinalParticles();
453 auto locPreviousParticleComboStep = locNewParticleCombo->
Get_ParticleComboStep(locDecayFromStepIndex);
454 locNewParticleComboStep->
Set_SpacetimeVertex(locPreviousParticleComboStep->Get_SpacetimeVertex());
459 auto locKinFitParticle = locAllParticles[0];
460 auto locParticleType = locKinFitParticle->Get_KinFitParticleType();
462 cout <<
"particle type, common vx param index, vx param index: " << locParticleType <<
", " << int(locKinFitParticle->Get_CommonVxParamIndex()) <<
", " <<
int(locKinFitParticle->Get_VxParamIndex()) << endl;
463 if((locParticleType ==
d_DetectedParticle) && (locKinFitParticle->Get_CommonVxParamIndex() < 0))
465 if((locParticleType !=
d_DetectedParticle) && (locKinFitParticle->Get_VxParamIndex() < 0))
469 TLorentzVector locSpacetimeVertex;
470 if(locKinFitParticle->Get_VertexP4AtProductionVertex())
471 locSpacetimeVertex = locKinFitParticle->Get_SpacetimeVertex();
473 locSpacetimeVertex = locKinFitParticle->Get_CommonSpacetimeVertex();
478 cout <<
"particle type, common t param index, t param index: " << locParticleType <<
", " << int(locKinFitParticle->Get_CommonTParamIndex()) <<
", " <<
int(locKinFitParticle->Get_TParamIndex()) << endl;
479 if((locParticleType ==
d_DetectedParticle) && (locKinFitParticle->Get_CommonTParamIndex() >= 0))
481 if((locParticleType !=
d_DetectedParticle) && (locKinFitParticle->Get_TParamIndex() >= 0))
485 if(locStepIndex == 0)
489 cout <<
"step 0: orig rf time, vertex-z, targz, shifted rf time: " << locOrigShiftedRFTime <<
", " << locSpacetimeVertex.Z() <<
", " <<
dTargetCenter.Z() <<
", " << locSpacetimeVertex.T() << endl;
495 cout <<
"decay from indices: " << locDecayFromStepIndices.first <<
", " << locDecayFromStepIndices.second << endl;
496 auto locPreviousParticleComboStep = locNewParticleCombo->
Get_ParticleComboStep(locDecayFromStepIndices.first);
499 cout <<
"previous spacetime vertex: " << locPreviousSpacetimeVertex.X() <<
", " << locPreviousSpacetimeVertex.Y() <<
", " << locPreviousSpacetimeVertex.Z() <<
", " << locPreviousSpacetimeVertex.T() << endl;
501 auto locDecayingParticle =
Get_DecayingParticle(locReaction, locOldParticleCombo, locStepIndex, locKinFitChain, locKinFitResults);
503 locSpacetimeVertex.SetT(locPreviousSpacetimeVertex.T());
506 auto locBeta = locDecayingParticle->Get_P4().Beta();
507 auto locPathLength = (locSpacetimeVertex.Vect() - locPreviousSpacetimeVertex.Vect()).Mag();
508 auto locTime = locPreviousSpacetimeVertex.T() + locPathLength/(locBeta*
SPEED_OF_LIGHT);
510 cout <<
"calced beta, path, time: " << locBeta <<
", " << locPathLength <<
", " << locTime << endl;
511 locSpacetimeVertex.SetT(locTime);
520 auto locKinFitParticle =
Get_DecayingParticle(locReaction, locOldParticleCombo, locStepIndex, locKinFitChain, locKinFitResults);
521 if(locKinFitParticle ==
nullptr)
528 auto locPID =
PDGtoPType(locKinFitParticle->Get_PID());
532 auto locKinematicData_Production =
Build_KinematicData(locKinFitResults, locKinFitParticle.get(), locProductionSpacetimeVertex,
true);
534 bool locCreate2ndObjectFlag = (
IsDetachedVertex(locPID) && (locStepIndex != 0) && (locFromStepIndex >= 0));
536 auto locKinematicData_Decay = locCreate2ndObjectFlag ?
Build_KinematicData(locKinFitResults, locKinFitParticle.get(), locDecaySpacetimeVertex,
false) : locKinematicData_Production;
542 if((locStepIndex == 0) || (locFromStepIndex < 0))
547 for(
size_t loc_i = 0; loc_i < locParticleComboStep->Get_NumFinalParticles(); ++loc_i)
550 if(locDecayStepIndex !=
int(locStepIndex))
552 locParticleComboStep->Set_FinalParticle(locKinematicData_Production, loc_i);
565 for(
size_t loc_i = 0; loc_i < locKinFitChain->Get_NumKinFitChainSteps(); ++loc_i)
567 auto locKinFitChainStep = locKinFitChain->Get_KinFitChainStep(loc_i);
570 shared_ptr<DKinFitParticle> locDecayingParticle =
nullptr;
571 auto locInitialParticles = locKinFitChainStep->Get_InitialParticles();
572 for(
auto locKinFitParticle : locInitialParticles)
574 if(locKinFitParticle ==
nullptr)
578 locDecayingParticle = locKinFitParticle;
581 if(locDecayingParticle ==
nullptr)
583 if(
PDGtoPType(locDecayingParticle->Get_PID()) != locPID)
592 const DKinematicData* locMeasuredParticle = locMeasuredParticles[0];
594 if(locKinFitParticle == NULL)
604 return locDecayingParticle;
612 auto locKinFitChainStep = locKinFitChain->Get_KinFitChainStep(locStepToSearch);
613 auto locFinalParticles = locKinFitChainStep->Get_FinalParticles();
614 std::sort(locFinalParticles.begin(), locFinalParticles.end());
615 if(std::binary_search(locFinalParticles.begin(), locFinalParticles.end(), locParticleToFind))
619 for(
auto locKinFitParticle : locFinalParticles)
621 if(locKinFitParticle ==
nullptr)
626 int locDecayStepIndex = locKinFitChain->Get_DecayStepIndex(locKinFitParticle);
637 return locBeamIterator->second;
643 locNewBeamPhoton->dCounter = locBeamPhoton->
dCounter;
644 locNewBeamPhoton->dSystem = locBeamPhoton->
dSystem;
645 locNewBeamPhoton->setPID(locBeamPhoton->
PID());
650 locNewBeamPhoton->setPosition(locSpacetimeVertex.Vect());
652 locNewBeamPhoton->setTime(locKinFitParticle->
Get_Time());
654 locNewBeamPhoton->setTime(locBeamPhoton->
time() + (locNewBeamPhoton->position().Z() - locBeamPhoton->
position().Z())/
SPEED_OF_LIGHT);
656 return locNewBeamPhoton;
664 return locHypoIterator->second;
670 locNewHypo->setPID(locPID);
671 locNewHypo->AddAssociatedObject(locChargedTrack);
674 TVector3 locFitMomentum = locKinFitParticle->
Get_Momentum();
675 TVector3 locFitVertex = locKinFitParticle->
Get_Position();
676 locNewHypo->setMomentum(
DVector3(locFitMomentum.X(), locFitMomentum.Y(), locFitMomentum.Z()));
677 locNewHypo->setPosition(
DVector3(locFitVertex.X(), locFitVertex.Y(), locFitVertex.Z()));
680 locNewHypo->setTime(locKinFitParticle->
Get_Time());
687 locNewHypo->Share_FromInput(locOrigHypo,
true,
true,
false);
692 locNewHypo->Share_FromInput(locOrigHypo,
true,
false,
false);
698 locNewHypo->Set_T0(locPropagatedRFTime, locOrigHypo->t0_err(), locOrigHypo->t0_detector());
699 locNewHypo->Set_TimeAtPOCAToVertex(locNewHypo->time());
703 locNewHypo->Set_T0(locOrigHypo->t0(), locOrigHypo->t0_err(), locOrigHypo->t0_detector());
704 locNewHypo->Set_TimeAtPOCAToVertex(locOrigHypo->Get_TimeAtPOCAToVertex() + locNewHypo->time() - locOrigHypo->time());
715 return locHypoIterator->second;
720 locNewHypo->setPID(locOrigHypo->
PID());
724 auto locWasNeutralShowerInFit = (locKinFitParticle->
Get_EParamIndex() >= 0);
725 TVector3 locFitMomentum = locKinFitParticle->
Get_Momentum();
727 locNewHypo->setMomentum(
DVector3(locFitMomentum.X(), locFitMomentum.Y(), locFitMomentum.Z()));
728 locNewHypo->setPosition(
DVector3(locFitVertex.X(), locFitVertex.Y(), locFitVertex.Z()));
731 auto locTime = locWasNeutralShowerInFit ? locKinFitParticle->
Get_CommonTime() : locKinFitParticle->
Get_Time();
732 locNewHypo->setTime(locTime);
740 locNewHypo->Share_FromInput(locOrigHypo,
true,
false);
746 cout <<
"orig hypo time, orig vertz, new hypo time, new hypo vertz, t0: " << locOrigHypo->
time() <<
", " << locOrigHypo->
position().Z() <<
", " << locNewHypo->time() <<
", " << locNewHypo->position().Z() <<
", " << locPropagatedRFTime << endl;
747 locNewHypo->Set_T0(locPropagatedRFTime, locOrigHypo->
t0_err(), locOrigHypo->
t0_detector());
750 unsigned int locNDF = 0;
751 double locChiSq = 0.0;
752 double locFOM = -1.0;
753 if(locNewHypo->PID() ==
Gamma)
755 double locTimePull = 0.0;
758 locFOM = TMath::Prob(locChiSq, locNDF);
760 locNewHypo->Set_ChiSq_Overall(locChiSq, locNDF, locFOM);
770 locKinematicData->setPID(locPID);
778 locKinematicData->setPosition(locSpacetimeVertex.Vect());
782 locKinematicData->setPosition(
DVector3(locVertex.X(), locVertex.Y(), locVertex.Z()));
785 locKinematicData->setTime(locSpacetimeVertex.T());
787 locKinematicData->setTime(locKinFitParticle->
Get_Time());
794 return locKinematicData;
799 deque<pair<const DMCThrown*, deque<const DMCThrown*> > > locThrownSteps;
803 if(locThrownSteps.empty())
806 vector<const DReaction*> locReactions;
807 locEventLoop->Get(locReactions,
"Thrown");
814 auto locComboMapIterator =
dComboMap.find(locThrownComboTuple);
815 if(locComboMapIterator !=
dComboMap.end())
816 return locComboMapIterator->second;
818 vector<const DMCReaction*> locMCReactions;
819 locEventLoop->Get(locMCReactions);
821 vector<const DEventRFBunch*> locEventRFBunches;
822 locEventLoop->Get(locEventRFBunches,
"Thrown");
826 locParticleCombo->Set_EventRFBunch(locEventRFBunches[0]);
828 locParticleComboStep->Set_InitialParticle(&locMCReactions[0]->beam);
829 locParticleComboStep->Set_SpacetimeVertex(
DLorentzVector(locMCReactions[0]->beam.position(), locMCReactions[0]->beam.time()));
831 for(
size_t loc_i = 0; loc_i < locThrownSteps.size(); ++loc_i)
835 auto locMCThrown = locThrownSteps[loc_i].first;
838 int locInitialParticleDecayFromStepIndex = -1;
839 for(
size_t loc_j = 0; loc_j < loc_i; ++loc_j)
841 for(
size_t loc_k = 0; loc_k < locThrownSteps[loc_j].second.size(); ++loc_k)
843 if(locMCThrown != locThrownSteps[loc_j].second[loc_k])
845 locInitialParticleDecayFromStepIndex = loc_j;
848 if(locInitialParticleDecayFromStepIndex != -1)
851 locParticleComboStep->Set_InitialParticle(locMCThrown);
852 locParticleComboStep->Set_SpacetimeVertex(
DLorentzVector(locMCThrown->position(), locMCThrown->time()));
854 for(
size_t loc_j = 0; loc_j < locThrownSteps[loc_i].second.size(); ++loc_j)
855 locParticleComboStep->Add_FinalParticle(locThrownSteps[loc_i].second[loc_j]);
856 locParticleCombo->Add_ParticleComboStep(locParticleComboStep);
859 dComboMap.emplace(locThrownComboTuple, locParticleCombo);
860 return locParticleCombo;
DParticleComboCreator(JEventLoop *locEventLoop, const DSourceComboer *locSourceComboer, DSourceComboTimeHandler *locSourceComboTimeHandler, const DSourceComboVertexer *locSourceComboVertexer)
void Set_UpdateCovarianceMatricesFlag(bool locUpdateCovarianceMatricesFlag)
char Get_TParamIndex(void) const
void Set_InitialKinFitParticle(std::shared_ptr< const DKinFitParticle > locInitialKinFitParticle)
char Get_CommonVxParamIndex(void) const
DResourcePool< DKinematicData > dResourcePool_KinematicData
size_t Get_NumObjectsAllThreads(void) const
bool Get_CreateNeutralErrorMatrixFlag_Combo(const DReactionVertexInfo *locReactionVertexInfo, DKinFitType locKinFitType)
const DReaction * Get_Reaction(void) const
pair< int, int > Get_InitialParticleDecayFromIndices(const DReaction *locReaction, int locStepIndex)
void Recycle_Resources(vector< const DBeamPhoton * > &locBeams)
size_t Get_NumParticleComboSteps(void) const
DKinFitType Get_KinFitType(void) const
DResourcePool< DParticleComboStep > dResourcePool_ParticleComboStep
unordered_map< const DKinFitParticle *, DNeutralParticleHypothesis * > dKinFitNeutralHypoMap
DLorentzVector Get_ChargedPOCAToVertexX4(const DChargedTrackHypothesis *locHypothesis, bool locIsProductionVertex, const DSourceCombo *locReactionFullCombo, const DSourceCombo *locVertexPrimaryCombo, const DKinematicData *locBeamPhoton, bool locIsCombo2ndVertex, DVector3 locVertex)
const DBeamPhoton * Create_BeamPhoton_KinFit(const DBeamPhoton *locBeamPhoton, const DKinFitParticle *locKinFitParticle, const DLorentzVector &locSpacetimeVertex)
map< tuple< DReactionStep, const DSourceCombo *, bool, bool, const DSourceCombo *, const DKinematicData * >, const DParticleComboStep * > dComboStepMap
DKinFitUtils_GlueX * dKinFitUtils
double t0_err(void) const
DChargedTrackHypothesis_factory * dChargedTrackHypothesisFactory
const DVector3 & position(void) const
const DParticleCombo * Build_ThrownCombo(JEventLoop *locEventLoop)
static Particle_t PDGtoPType(int locPDG_PID)
const DParticleCombo * Create_KinFitCombo_NewCombo(const DParticleCombo *locOrigCombo, const DReaction *locReaction, const DKinFitResults *locKinFitResults, const shared_ptr< const DKinFitChain > &locKinFitChain)
map< tuple< const DChargedTrack *, Particle_t, int, bool, const DSourceCombo *, const DSourceCombo *, const DKinematicData * >, const DChargedTrackHypothesis * > dChargedHypoMap
static unsigned short int IsDetachedVertex(Particle_t p)
bool Propagate_TrackInfoToCommonVertex(DKinematicData *locKinematicData, DKinFitParticle *locKinFitParticle, const TMatrixDSym *locVXi)
const DChargedTrackHypothesis * Create_ChargedHypo(const DChargedTrack *locChargedTrack, Particle_t locPID, double locPropagatedRFTime, bool locIsProductionVertex, const DSourceCombo *locReactionFullCombo, const DSourceCombo *locVertexPrimaryFullCombo, const DKinematicData *locBeamParticle, DVector3 locVertex)
TLorentzVector DLorentzVector
DVector3 Get_PrimaryVertex(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locReactionCombo, const DKinematicData *locBeamParticle) const
DParticleComboStep * Get_ParticleComboStepResource(void)
const DEventRFBunch * Get_EventRFBunch(void) const
static int ParticleCharge(Particle_t p)
const DNeutralShower * Get_NeutralShower(void) const
const DChargedTrackHypothesis * Get_Hypothesis(Particle_t locPID) const
map< tuple< const DReactionVertexInfo *, const DSourceCombo *, const DKinematicData *, int, bool >, DParticleCombo * > dComboMap
DNeutralParticleHypothesis_factory * dNeutralParticleHypothesisFactory
vector< DParticleComboStep * > dCreated_ParticleComboStep
vector< DParticleCombo * > dCreated_ParticleCombo
DKinematicData * Build_KinematicData(const DKinFitResults *locKinFitResults, DKinFitParticle *locKinFitParticle, DLorentzVector locSpacetimeVertex, bool locProductionVertexFlag)
const DAnalysisUtilities * dAnalysisUtilities
map< tuple< const DNeutralShower *, Particle_t, int, bool, bool, const DSourceCombo *, const DSourceCombo *, const DKinematicData * >, const DNeutralParticleHypothesis * > dNeutralHypoMap
vector< DChargedTrackHypothesis * > dCreated_ChargedHypo
unordered_map< int, const DEventRFBunch * > dRFBunchMap
void Calc_ChargedPIDFOM(DChargedTrackHypothesis *locChargedTrackHypothesis) const
DType * Get_Resource(void)
size_t Get_NumObjectsAllThreads(void) const
vector< const DKinematicData * > Get_DecayChainParticles_Measured(const DReaction *locReaction, int locStepIndex) const
Particle_t Get_InitialPID(void) const
bool Search_ForParticleInDecay(const shared_ptr< const DKinFitChain > &locKinFitChain, size_t locStepToSearch, const shared_ptr< DKinFitParticle > &locParticleToFind) const
unordered_map< const DReactionVertexInfo *, bool > dDanglingNeutralsFlagMap
const DNeutralParticleHypothesis * Create_NeutralHypo_KinFit(const DNeutralParticleHypothesis *locOrigHypo, DKinFitParticle *locKinFitParticle, double locPropagatedRFTime)
DSourceComboTimeHandler * dSourceComboTimeHandler
const DSourceComboVertexer * dSourceComboVertexer
set< shared_ptr< DKinFitParticle > > Get_OutputKinFitParticles(void) const
vector< DBeamPhoton * > dCreated_BeamPhoton
DGeometry * GetDGeometry(unsigned int run_number)
DChargedTrackHypothesis * Get_Resource(void)
static unsigned short int IsFixedMass(Particle_t p)
void Set_InitialParticle(const DKinematicData *locInitialParticle)
DResourcePool< DParticleCombo > dResourcePool_ParticleCombo
const JObject * Get_SourceParticle_ThisStep(const DSourceCombo *locSourceCombo, Particle_t locPID, size_t locInstance, size_t &locPIDCountSoFar)
vector< DNeutralParticleHypothesis * > dCreated_NeutralHypo
DLorentzVector Get_SpacetimeVertex(void) const
shared_ptr< DKinFitParticle > Get_OutputKinFitParticle(const JObject *locSourceObject) const
void Get_ThrownParticleSteps(JEventLoop *locEventLoop, deque< pair< const DMCThrown *, deque< const DMCThrown * > > > &locThrownSteps) const
static double ParticleMass(Particle_t p)
vector< const DReactionStepVertexInfo * > Get_StepVertexInfos(void) const
shared_ptr< DKinFitParticle > Get_DecayingParticle(const DReaction *locReaction, const DParticleCombo *locOldParticleCombo, size_t locComboStepIndex, const shared_ptr< const DKinFitChain > &locKinFitChain, const DKinFitResults *locKinFitResults) const
double Calc_TimingChiSq(const DChargedTrackHypothesis *locChargedHypo, unsigned int &locNDF, double &locTimingPull) const
char Get_EParamIndex(void) const
char Get_VxParamIndex(void) const
unordered_map< const DKinFitParticle *, DBeamPhoton * > dKinFitBeamPhotonMap
shared_ptr< const TMatrixFSym > Get_CovarianceMatrix(void) const
unordered_map< const DKinFitParticle *, DChargedTrackHypothesis * > dKinFitChargedHypoMap
double Calc_RFTime(int locNumRFBunchShifts) const
double Get_CommonTime(void) const
vector< DKinematicData * > dCreated_KinematicData
char Get_CommonTParamIndex(void) const
const TMatrixDSym & Get_VXi(void) const
void Recycle_Hypotheses(vector< const DChargedTrackHypothesis * > &locHypos)
DNeutralParticleHypothesis * Get_Resource(void)
bool Get_KinFitUpdateCovarianceMatricesFlag(void) const
size_t Get_NumObjectsAllThreads(void) const
const DChargedTrackHypothesis * Create_ChargedHypo_KinFit(const DChargedTrack *locChargedTrack, Particle_t locPID, const DKinFitParticle *locKinFitParticle, double locPropagatedRFTime)
const DEventRFBunch * Get_InitialEventRFBunch(void) const
const DReactionStep * Get_ReactionStep(size_t locStepIndex) const
void Set_ControlParams(size_t locGetBatchSize, size_t locNumToAllocateAtOnce, size_t locMaxLocalPoolSize)
const DParticleID * dParticleID
int Get_DecayStepIndex(const DReaction *locReaction, size_t locStepIndex, size_t locParticleIndex)
TVector3 Get_Position(void) const
void Set_SpacetimeVertex(const DLorentzVector &locSpacetimeVertex)
DetectorSystem_t t0_detector(void) const
void Set_SpacetimeVertex(const DReaction *locReaction, const DParticleCombo *locNewParticleCombo, const DParticleCombo *locOldParticleCombo, DParticleComboStep *locNewParticleComboStep, size_t locStepIndex, const DKinFitResults *locKinFitResults, const shared_ptr< const DKinFitChain > &locKinFitChain, double locOrigShiftedRFTime) const
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
double Get_Time(void) const
TVector3 Get_CommonVertex(void) const
DBeamPhoton_factory * dBeamPhotonfactory
bool GetTargetZ(double &z_target) const
z-location of center of target
DResourcePool< DEventRFBunch > dResourcePool_EventRFBunch
TMatrixFSym dVertexCovMatrix
void Recycle_Hypotheses(vector< DNeutralParticleHypothesis * > &locHypos)
DBeamPhoton * Get_Resource(void)
Particle_t PID(void) const
TVector3 Get_Momentum(void) const
bool Get_VertexP4AtProductionVertex(void) const
void Set_DecayingParticles(const DReaction *locReaction, const DParticleCombo *locNewParticleCombo, const DParticleCombo *locOldParticleCombo, size_t locStepIndex, DParticleComboStep *locNewParticleComboStep, const shared_ptr< const DKinFitChain > &locKinFitChain, const DKinFitResults *locKinFitResults)
void Print_SourceCombo(const DSourceCombo *locCombo, unsigned char locNumTabs=0)
size_t Get_NumObjectsAllThreads(void) const
void Recycle(const DType *locResource)
DParticleCombo * Get_ParticleComboResource(void)