10 dSourceComboer(locSourceComboer), dSourceComboP4Handler(locSourceComboP4Handler)
19 double locTargetCenterZ = 65.0;
23 gPARMS->SetDefaultParameter(
"COMBO:DEBUG_LEVEL",
dDebugLevel);
28 if(locReactionCombo ==
nullptr)
31 vector<signed char> locVertexZBins;
33 locVertexZBins.emplace_back(
Get_VertexZBin(locStepInfo, locReactionCombo, locBeamParticle, locComboIsFullyCharged));
35 return locVertexZBins;
56 return (locParentVertexInfo !=
nullptr) ?
Get_Vertex(locParentVertexInfo, locReactionCombo, locBeamParticle, locComboIsFullyCharged) :
dTargetCenter;
69 return (locParentVertexInfo !=
nullptr) ?
Get_TimeOffset(locReactionVertexInfo, locParentVertexInfo, locReactionCombo, locBeamParticle) : 0.0;
74 return Get_TimeOffset(locIsPrimaryProductionVertex, locReactionCombo, locVertexPrimaryCombo, locBeamParticle);
79 if(locPrimaryVertexCombo ==
nullptr)
82 auto locConstrainingParticles =
Get_ConstrainingParticles(locIsProductionVertex, locReactionCombo, locPrimaryVertexCombo, locBeamParticle, locIsCombo2ndVertex);
83 if(locConstrainingParticles.empty())
85 auto locVertexZ =
Get_Vertex(locIsProductionVertex, locConstrainingParticles).Z();
92 cout <<
"DSourceComboVertexer::Calc_VertexTimeOffsets_WithCharged()" << endl;
99 map<pair<int, int>,
const DKinematicData*> locReconDecayParticleMap;
100 unordered_map<const DReactionStepVertexInfo*, const DSourceCombo*> locVertexPrimaryComboMap;
104 cout <<
"Step: " << locStepVertexInfo->Get_StepIndices().front() << endl;
109 auto locIsCombo2ndVertex = locStepVertexInfo->Get_FullConstrainParticles(
false,
d_FinalState,
d_Charged,
false).empty();
110 auto locIsProductionVertexFlag = locStepVertexInfo->Get_ProductionVertexFlag();
111 auto locComboProductionTuple = std::make_tuple(locIsProductionVertexFlag, (
const DSourceCombo*)
nullptr, locVertexPrimaryCombo, (
const DKinematicData*)
nullptr, locIsCombo2ndVertex);
113 if(locStepVertexInfo->Get_DanglingVertexFlag())
117 locVertexPrimaryComboMap.emplace(locStepVertexInfo, locVertexPrimaryCombo);
123 cout <<
"# charged/decaying particles at vertex = " << locChargedSourceParticles.size() <<
", " << locDecayingParticles.size() << endl;
131 auto locNumConstrainingParticles = locChargedSourceParticles.size() + locDecayingParticles.size();
134 bool locVertexDeterminableFlag = locIsProductionVertexFlag ? (locNumConstrainingParticles > 0) : (locNumConstrainingParticles > 1);
136 cout <<
"vertex determinable flag = " << locVertexDeterminableFlag << endl;
138 if(!locVertexDeterminableFlag)
141 else if(!locDeterminableIterator->second)
143 if(locEverythingFoundFlag)
146 vector<const DKinematicData*> locVertexParticles;
147 auto locVertex =
Calc_Vertex(locIsProductionVertexFlag, locChargedSourceParticles, locDecayingParticles, locVertexParticles);
152 for(
const auto& locVertexCombo : locVertexCombos)
156 if(locEverythingFoundFlag)
169 cout <<
"Calc_VertexTimeOffsets_WithPhotons()" << endl;
176 map<pair<int, int>,
const DKinematicData*> locReconDecayParticleMap;
179 if(locStepVertexInfo->Get_DanglingVertexFlag())
182 auto locIsProductionVertexFlag = locStepVertexInfo->Get_ProductionVertexFlag();
184 auto locIsChargedCombo2ndVertex = locStepVertexInfo->Get_FullConstrainParticles(
false,
d_EitherState,
d_AllCharges,
false).empty();
188 auto locFullComboProductionTuple = std::make_tuple(locIsProductionVertexFlag, (
const DSourceCombo*)
nullptr, locVertexPrimaryFullCombo, (
const DKinematicData*)
nullptr,
false);
189 auto locChargedComboProductionTuple = std::make_tuple(locIsProductionVertexFlag, (
const DSourceCombo*)
nullptr, locVertexPrimaryChargedCombo, (
const DKinematicData*)
nullptr, locIsChargedCombo2ndVertex);
193 auto locVertex =
Get_Vertex_NoBeam(locIsProductionVertexFlag, locVertexPrimaryChargedCombo, locIsChargedCombo2ndVertex);
210 auto locNumConstrainingParticles = locChargedSourceParticles.size() + locDecayingParticles.size();
213 bool locVertexDeterminableFlag = locIsProductionVertexFlag ? (locNumConstrainingParticles > 0) : (locNumConstrainingParticles > 1);
215 if(!locVertexDeterminableFlag)
218 else if(!locDeterminableIterator->second)
220 if(locEverythingFoundFlag)
227 vector<const DKinematicData*> locVertexParticles;
228 locVertex =
Calc_Vertex(locIsProductionVertexFlag, locChargedSourceParticles, locDecayingParticles, locVertexParticles);
236 if(locEverythingFoundFlag)
240 Calc_TimeOffsets(locReactionVertexInfo, locReactionChargedCombo, locReactionFullCombo);
246 cout <<
"DSourceComboVertexer::Calc_VertexTimeOffsets_WithBeam()" << endl;
252 cout <<
"primary vertex unknown, nothing we can do." << endl;
256 auto locPrimaryVertexZ =
Get_PrimaryVertex(locReactionVertexInfo, locReactionFullCombo, locBeamParticle).Z();
259 cout <<
"primary vertex-z, rf bunch: " << locPrimaryVertexZ <<
", " << locRFBunch << endl;
263 map<pair<int, int>,
const DKinematicData*> locReconDecayParticleMap;
267 cout <<
"Step: " << locStepVertexInfo->Get_StepIndices().front() <<
", dangling-flag = " << locStepVertexInfo->Get_DanglingVertexFlag() << endl;
268 if(locStepVertexInfo->Get_DanglingVertexFlag())
271 auto locIsProductionVertexFlag = locStepVertexInfo->Get_ProductionVertexFlag();
275 cout <<
"Vertex primary combo:" << endl;
280 auto locFullComboProductionTuple = std::make_tuple(
true, locReactionFullCombo, locVertexPrimaryFullCombo, locBeamParticle,
false);
286 cout <<
"vertex already found" << endl;
289 auto locVertex =
Get_Vertex(locIsProductionVertexFlag, locReactionFullCombo, locVertexPrimaryFullCombo, locBeamParticle,
false);
291 if(locIsProductionVertexFlag)
294 Construct_DecayingParticle_MissingMass(locStepVertexInfo, locReactionFullComboUse, locReactionFullCombo, locVertexPrimaryFullCombo, locBeamParticle, locVertex, locRFBunch, locRFVertexTime, locReconDecayParticleMap);
300 cout <<
"vertex not found yet" << endl;
306 cout <<
"# charged/decaying particles at vertex = " << locChargedSourceParticles.size() <<
", " << locDecayingParticles.size() << endl;
309 vector<const DKinematicData*> locVertexParticles;
310 auto locVertex =
Calc_Vertex(locIsProductionVertexFlag, locChargedSourceParticles, locDecayingParticles, locVertexParticles);
314 auto locFullReactionTuple_TimeOffset = std::make_tuple(
true, locReactionFullCombo, locBeamParticle);
317 auto locParentVertexInfo = locStepVertexInfo->Get_ParentVertexInfo();
319 auto locParentTimeOffset =
dTimeOffsets[locFullReactionTuple_TimeOffset][locParentVertexFullCombo];
322 auto locParentProductionVertex =
Get_Vertex(locParentVertexInfo->Get_ProductionVertexFlag(), locReactionFullCombo, locParentVertexFullCombo, locBeamParticle,
false);
323 auto locPathLength = (locVertex - locParentProductionVertex).Mag();
326 auto locP4 = locDecayingParticles.back()->lorentzMomentum();
327 auto locTimeOffset = locPathLength/(locP4.Beta()*
SPEED_OF_LIGHT) + locParentTimeOffset;
328 dTimeOffsets[locFullReactionTuple_TimeOffset].emplace(locVertexPrimaryFullCombo, locTimeOffset);
333 cout <<
"parent time offset, beta, path length, time offset, prop rf time: " << locParentTimeOffset <<
", " << locP4.Beta() <<
", " << locPathLength <<
", " << locTimeOffset <<
", " << locRFVertexTime << endl;
334 Construct_DecayingParticle_MissingMass(locStepVertexInfo, locReactionFullComboUse, locReactionFullCombo, locVertexPrimaryFullCombo, locBeamParticle, locVertex, locRFBunch, locRFVertexTime, locReconDecayParticleMap);
338 DVector3 DSourceComboVertexer::Calc_Vertex(
bool locIsProductionVertexFlag,
const vector<pair<Particle_t, const JObject*>>& locChargedSourceParticles,
const vector<const DKinematicData*>& locDecayingParticles, vector<const DKinematicData*>& locVertexParticles)
341 cout <<
"DSourceComboVertexer::Calc_Vertex()" << endl;
367 locVertexParticles.clear();
368 locVertexParticles.reserve(locChargedSourceParticles.size());
370 {
return static_cast<const DChargedTrack*
>(locPair.second)->Get_Hypothesis(locPair.first);};
371 std::transform(locChargedSourceParticles.begin(), locChargedSourceParticles.end(), std::back_inserter(locVertexParticles), Get_Hypothesis);
372 locVertexParticles.insert(locVertexParticles.end(), locDecayingParticles.begin(), locDecayingParticles.end());
375 cout <<
"locIsProductionVertexFlag = " << locIsProductionVertexFlag << endl;
376 if(locIsProductionVertexFlag)
380 double locThetaNearest90 = (locThetaNearest90Iterator != locVertexParticles.end()) ? (*locThetaNearest90Iterator)->momentum().Theta()*180.0/TMath::Pi() : 0.0;
385 double locLargestTheta_Decaying = (locThetaNearest90Iterator_Decaying != locDecayingParticles.end()) ? (*locThetaNearest90Iterator_Decaying)->momentum().Theta()*180.0/TMath::Pi() : 0.0;
386 if(locLargestTheta_Decaying > locThetaNearest90)
387 locThetaNearest90Iterator = locThetaNearest90Iterator_Decaying;
389 locVertexParticles = {*locThetaNearest90Iterator};
390 auto locPOCAToBeamline = locVertexParticles[0]->position();
393 if(std::find(locDecayingParticles.begin(), locDecayingParticles.end(), locVertexParticles[0]) != locDecayingParticles.end())
396 DVector3 locInterDOCA1, locInterDOCA2;
398 locPOCAToBeamline = locInterDOCA1;
402 auto locTrackPosition = locVertexParticles[0]->position();
403 auto locVertex =
DVector3(0.5*locTrackPosition.X(), 0.5*locTrackPosition.Y(), locTrackPosition.Z());
406 dVertexMap.emplace(std::make_pair(locIsProductionVertexFlag, locVertexParticles), locVertex);
408 cout <<
"pointer, particle PID, theta, production vertex = " << locVertexParticles[0] <<
", " << locVertexParticles[0]->PID() <<
", " << locVertexParticles[0]->momentum().Theta()*180.0/TMath::Pi() <<
", " << locVertex.X() <<
", " << locVertex.Y() <<
", " << locVertex.Z() << endl;
413 if(locVertexParticles.size() < 2)
414 locVertexParticles.insert(locVertexParticles.end(), locDecayingParticles.begin(), locDecayingParticles.end());
415 std::sort(locVertexParticles.begin(), locVertexParticles.end());
418 auto locVertexIterator =
dVertexMap.find(std::make_pair(locIsProductionVertexFlag, locVertexParticles));
423 cout <<
"crude vertex = " << locVertex.X() <<
", " << locVertex.Y() <<
", " << locVertex.Z() << endl;
424 dVertexMap.emplace(std::make_pair(locIsProductionVertexFlag, locVertexParticles), locVertex);
428 cout <<
"crude vertex saved previously = " << locVertexIterator->second.X() <<
", " << locVertexIterator->second.Y() <<
", " << locVertexIterator->second.Z() << endl;
430 return locVertexIterator->second;
436 vector<const DKinematicData*> locDecayingParticles;
437 pair<int, int> locDecayMissingMassReconPair(-99, -99);
438 for(
const auto& locDecayPair : locConstrainingDecayingParticles)
443 pair<int, int> locParticlePair(-99, -99);
444 if(locDecayPair.first.second >= 0)
455 auto locReconIterator = locReconDecayParticleMap.find(locParticlePair);
456 if(locReconIterator != locReconDecayParticleMap.end())
457 locDecayingParticles.push_back(locReconIterator->second);
461 auto locReconIterator = locReconDecayParticleMap.find(locDecayMissingMassReconPair);
462 if(locReconIterator != locReconDecayParticleMap.end())
463 locDecayingParticles.push_back(locReconIterator->second);
465 return locDecayingParticles;
471 cout <<
"DSourceComboVertexer::Construct_DecayingParticle_InvariantMass()" << endl;
483 cout <<
"locIsProductionVertexFlag = " << locIsProductionVertexFlag << endl;
487 for(
const auto& locNoConstrainPair : locNoConstrainDecayingParticles)
491 const auto& locParticlePair = locNoConstrainPair.first;
492 if(locParticlePair.second >= 0)
496 auto locDecayPID = std::get<0>(locSourceComboUse);
501 cout <<
"detached decaying pid = " << locDecayPID << endl;
504 auto locDecayParticleTuple = std::make_tuple(locDecayPID, locIsProductionVertexFlag, locVertexCombo, (
const DKinematicData*)
nullptr);
508 locReconDecayParticleMap.emplace(locParticlePair, locIterator->second);
513 auto locP4 =
dSourceComboP4Handler->
Calc_P4_NoMassiveNeutrals(
nullptr, locVertexCombo, locVertex, std::get<1>(locSourceComboUse),
nullptr,
DSourceComboUse(
Unknown, 0,
nullptr,
false,
Unknown), 1,
false);
515 locKinematicData->
Reset();
516 locKinematicData->Set_Members(locDecayPID, locP4.Vect(), locVertex, 0.0);
519 cout <<
"decaying particle created, pxyzE = " << locP4.X() <<
", " << locP4.Y() <<
", " << locP4.Z() <<
", " << locP4.E() << endl;
522 locReconDecayParticleMap.emplace(locParticlePair, locKinematicData);
527 void DSourceComboVertexer::Construct_DecayingParticle_MissingMass(
const DReactionStepVertexInfo* locStepVertexInfo,
const DSourceComboUse& locReactionFullComboUse,
const DSourceCombo* locReactionFullCombo,
const DSourceCombo* locFullVertexCombo,
const DKinematicData* locBeamParticle,
DVector3 locVertex,
int locRFBunch,
double locRFVertexTime, map<pair<int, int>,
const DKinematicData*>& locReconDecayParticleMap)
530 cout <<
"DSourceComboVertexer::Construct_DecayingParticle_MissingMass()" << endl;
545 pair<int, int> locToReconParticleIndices(-99, -99);
546 for(
const auto& locNoConstrainPair : locNoConstrainDecayingParticles)
550 const auto& locParticlePair = locNoConstrainPair.first;
551 if(locParticlePair.second < 0)
555 auto locReactionStep = locReaction->Get_ReactionStep(locParticlePair.first);
556 auto locDecayPID = locReactionStep->Get_PID(locParticlePair.second);
560 if(locToReconParticleIndices.first >= 0)
562 locToReconParticleIndices = locParticlePair;
566 cout <<
"to-recon decay particle indices: " << locToReconParticleIndices.first <<
", " << locToReconParticleIndices.second << endl;
567 if(locToReconParticleIndices.first < 0)
570 auto locDecayStepIndex =
Get_DecayStepIndex(locReaction, locToReconParticleIndices.first, locToReconParticleIndices.second);
573 auto locReactionStep = locReaction->Get_ReactionStep(locToReconParticleIndices.first);
574 auto locDecayPID = locReactionStep->Get_PID(locToReconParticleIndices.second);
577 auto locDecayParticleTuple = std::make_tuple(locDecayPID, locReactionFullCombo, locIsProductionVertexFlag, locFullVertexCombo, locBeamParticle);
581 locReconDecayParticleMap.emplace(locToReconParticleIndices, locIterator->second);
588 if(
int(locStepIndex) == locDecayStepIndex)
599 cout <<
"Calc final-state p4, decay use to exclude: " << endl;
603 auto locTimeOffset =
Get_TimeOffset(
true, locReactionFullCombo, locFullVertexCombo, locBeamParticle);
604 if(!
dSourceComboP4Handler->
Calc_P4_HasMassiveNeutrals(locIsProductionVertexFlag,
true, locReactionFullCombo, locFullVertexCombo, locVertex, locTimeOffset, locRFBunch, locRFVertexTime, locDecayUsePair.first, locDecayUsePair.second, locFinalStateP4, locBeamParticle,
true))
609 if(locIsProductionVertexFlag)
611 Particle_t locPID = locReaction->Get_ReactionStep(0)->Get_TargetPID();
619 auto locPreviousDecayPID = std::get<0>(locSourceComboUse);
620 auto locPreviousDecayParticleTuple = std::make_tuple(locPreviousDecayPID, locReactionFullCombo, locPreviousIsProdVertexFlag, locPreviousFullVertexCombo, locBeamParticle);
627 cout <<
"retrieved decaying pid, p4: " << locPreviousDecayPID <<
", " << locInitialStateP4.Px() <<
", " << locInitialStateP4.Py() <<
", " << locInitialStateP4.Pz() <<
", " << locInitialStateP4.E() << endl;
630 auto locP4 = locInitialStateP4 - locFinalStateP4;
632 cout <<
"pid, missing p4: " << locDecayPID <<
", " << locP4.Px() <<
", " << locP4.Py() <<
", " << locP4.Pz() <<
", " << locP4.E() << endl;
634 locKinematicData->
Reset();
635 locKinematicData->Set_Members(locDecayPID, locP4.Vect(), locVertex, 0.0);
638 locReconDecayParticleMap.emplace(locToReconParticleIndices, locKinematicData);
645 cout <<
"DSourceComboVertexer::Calc_TimeOffsets()" << endl;
649 auto locActiveReactionCombo = (locFullReactionCombo !=
nullptr) ? locFullReactionCombo : locChargedReactionCombo;
651 auto locChargedReactionTuple = std::make_tuple(locIsPrimaryProductionVertex, locChargedReactionCombo, (
const DKinematicData*)
nullptr);
652 auto locNeutralReactionTuple = std::make_tuple(locIsPrimaryProductionVertex, locFullReactionCombo, (
const DKinematicData*)
nullptr);
654 auto& locChargedTimeOffsetMap =
dTimeOffsets[locChargedReactionTuple];
655 auto& locFullTimeOffsetMap =
dTimeOffsets[locNeutralReactionTuple];
656 auto& locActiveTimeOffsetMap = (locFullReactionCombo !=
nullptr) ? locFullTimeOffsetMap : locChargedTimeOffsetMap;
663 cout <<
"Step: " << locStepVertexInfo->Get_StepIndices().front() << endl;
664 if(locStepVertexInfo->Get_DanglingVertexFlag())
669 auto locActiveVertexCombo = (locFullReactionCombo !=
nullptr) ? locFullVertexCombo : locChargedVertexCombo;
672 auto locActiveIterator = locActiveTimeOffsetMap.find(locFullVertexCombo);
673 if(locActiveIterator != locActiveTimeOffsetMap.end())
677 if(locFullReactionCombo !=
nullptr)
679 auto locChargedIterator = locChargedTimeOffsetMap.find(locChargedVertexCombo);
680 if(locChargedIterator != locChargedTimeOffsetMap.end())
683 locFullTimeOffsetMap.emplace(locFullVertexCombo, locChargedIterator->second);
688 auto locParentVertexInfo = locStepVertexInfo->Get_ParentVertexInfo();
689 if(locStepVertexInfo->Get_ProductionVertexFlag() || (locParentVertexInfo ==
nullptr))
692 cout <<
"Primary vertex: time offset = 0" << endl;
693 locChargedTimeOffsetMap.emplace(locChargedReactionCombo, 0.0);
707 if(std::get<3>(locVertexComboUse) || ((locFullReactionCombo ==
nullptr) && (
Get_ChargeContent(std::get<2>(locVertexComboUse)) !=
d_Charged)))
712 auto locParentOffsetIterator = locActiveTimeOffsetMap.find(locParentCombo);
713 if(locParentOffsetIterator == locActiveTimeOffsetMap.end())
715 auto locParentTimeOffset = locParentOffsetIterator->second;
718 cout <<
"Parent time offset = " << locParentTimeOffset << endl;
722 auto locParentProductionVertex =
Get_Vertex_NoBeam(locParentVertexInfo->Get_ProductionVertexFlag(), locParentCombo,
false);
723 auto locPathLength = (locVertex - locParentProductionVertex).Mag();
725 cout <<
"Vertex, parent vertex, path length: " << locVertex.X() <<
", " << locVertex.Y() <<
", " << locVertex.Z() <<
", " << locParentProductionVertex.X() <<
", " << locParentProductionVertex.Y() <<
", " << locParentProductionVertex.Z() <<
", " << locPathLength << endl;
729 auto locP4 =
dSourceComboP4Handler->
Calc_P4_NoMassiveNeutrals(
nullptr, locActiveVertexCombo, locVertex, locVertexZBin,
nullptr,
DSourceComboUse(
Unknown, 0,
nullptr,
false,
Unknown), 1,
false);
730 auto locTimeOffset = locPathLength/(locP4.Beta()*
SPEED_OF_LIGHT) + locParentTimeOffset;
733 cout <<
"Time offset = " << locTimeOffset << endl;
735 locActiveTimeOffsetMap.emplace(locActiveVertexCombo, locTimeOffset);
vector< pair< int, int > > Get_FullConstrainParticles(bool locFitFlag, DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges, bool locIncludeDecayingFlag=true) const
pair< DSourceComboUse, size_t > Get_StepSourceComboUse(const DReaction *locReaction, size_t locDesiredStepIndex, DSourceComboUse locVertexPrimaryComboUse, size_t locVertexPrimaryStepIndex) const
bool Get_VertexDeterminableWithPhotons(const DReactionStepVertexInfo *locStepVertexInfo) const
signed char Get_VertexZBin_NoBeam(bool locIsProductionVertex, const DSourceCombo *locPrimaryVertexCombo, bool locIsCombo2ndVertex) const
double Get_TimeOffset(bool locIsPrimaryProductionVertex, const DSourceCombo *locReactionCombo, const DSourceCombo *locVertexCombo, const DKinematicData *locBeamParticle) const
static constexpr int Get_ParticleIndex_Initial(void)
pair< int, int > Get_InitialParticleDecayFromIndices(const DReaction *locReaction, int locStepIndex)
DSourceComboUse Get_SourceComboUse(const DReactionStepVertexInfo *locStepVertexInfo) const
unordered_map< const DReactionStepVertexInfo *, bool > dVertexDeterminableWithPhotonsMap
void Calc_TimeOffsets(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locChargedReactionCombo, const DSourceCombo *locFullReactionCombo=nullptr)
bool Get_DanglingVertexFlag(void) const
double dMinThetaForVertex
const DReactionStepVertexInfo * Get_StepVertexInfo(size_t locStepIndex) const
map< tuple< bool, const DSourceCombo *, const DSourceCombo *, const DKinematicData *, bool >, vector< const DKinematicData * > > dConstrainingParticlesByCombo
DVector3 Calc_Vertex(bool locIsProductionVertexFlag, const vector< pair< Particle_t, const JObject * >> &locChargedSourceParticles, const vector< const DKinematicData * > &locDecayingParticles, vector< const DKinematicData * > &locVertexParticles)
bool Get_VertexDeterminableWithCharged(const DReactionStepVertexInfo *locStepVertexInfo) const
map< pair< int, int >, const DReactionStepVertexInfo * > Get_DecayingParticles_FullConstrain(bool locFitFlag) const
vector< const DKinematicData * > Get_FullConstrainDecayingParticles(const DReactionStepVertexInfo *locStepVertexInfo, const map< pair< int, int >, const DKinematicData * > &locReconDecayParticleMap)
static unsigned short int IsDetachedVertex(Particle_t p)
bool Get_ProductionVertexFlag(void) const
DVector3 Get_Vertex(bool locIsProductionVertex, const DSourceCombo *locReactionCombo, const DSourceCombo *locVertexCombo, const DKinematicData *locBeamParticle, bool locIsCombo2ndVertex) const
vector< const DReactionStepVertexInfo * > Get_StepVertexInfos_OrderByStep(const DReactionVertexInfo *locReactionVertexInfo)
int Calc_RFBunchShift(double locTimeToStepTo) const
vector< pair< int, int > > Get_MissingParticles(DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges) const
static signed char Get_VertexZIndex_Unknown(void)
TLorentzVector DLorentzVector
DVector3 Get_PrimaryVertex(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locReactionCombo, const DKinematicData *locBeamParticle) const
const DSourceComboTimeHandler * dSourceComboTimeHandler
double Calc_DOCA(const DVector3 &locUnitDir1, const DVector3 &locUnitDir2, const DVector3 &locVertex1, const DVector3 &locVertex2) const
bool Get_HasMissingParticle_FinalState(const DReactionStep *locStep)
tuple< Particle_t, signed char, const DSourceComboInfo *, bool, Particle_t > DSourceComboUse
bool Calc_P4_HasMassiveNeutrals(bool locIsProductionVertex, bool locIsPrimaryProductionVertex, const DSourceCombo *locReactionFullCombo, const DSourceCombo *locCurrentCombo, DVector3 locVertex, double locTimeOffset, int locRFBunch, double locRFVertexTime, const DSourceComboUse &locToExcludeUse, size_t locInstanceToExclude, DLorentzVector &locTotalP4, const DKinematicData *locBeamParticle, bool locAccuratePhotonsFlag)
const DReactionStepVertexInfo * Get_ParentVertexInfo(void) const
DType * Get_Resource(void)
const DReaction * Get_Reaction(void) const
Charge_t Get_ChargeContent(const DSourceComboInfo *locSourceComboInfo)
map< pair< bool, vector< const DKinematicData * > >, DVector3 > dVertexMap
const DAnalysisUtilities * dAnalysisUtilities
map< tuple< Particle_t, const DSourceCombo *, bool, const DSourceCombo *, const DKinematicData * >, const DKinematicData * > dReconDecayParticles_FromMissing
signed char Get_PhotonVertexZBin(double locVertexZ) const
DVector3 Calc_CrudeVertex(const vector< const DKinematicData * > &locParticles) const
signed char Get_VertexZBin(bool locIsProductionVertex, const DSourceCombo *locReactionCombo, const DSourceCombo *locPrimaryVertexCombo, const DKinematicData *locBeamParticle, bool locIsCombo2ndVertex) const
unordered_map< const DReactionStepVertexInfo *, bool > dVertexDeterminableWithChargedMap
DGeometry * GetDGeometry(unsigned int run_number)
void Calc_VertexTimeOffsets_WithBeam(const DReactionVertexInfo *locReactionVertexInfo, const DSourceComboUse &locReactionFullComboUse, const DSourceCombo *locReactionFullCombo, const DKinematicData *locBeamParticle)
vector< signed char > Get_VertexZBins(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locReactionCombo, const DKinematicData *locBeamParticle, bool locComboIsFullyCharged) const
DLorentzVector dSpacetimeVertex
map< tuple< Particle_t, bool, const DSourceCombo *, const DKinematicData * >, const DKinematicData * > dReconDecayParticles_FromProducts
void Construct_DecayingParticle_MissingMass(const DReactionStepVertexInfo *locReactionStepVertexInfo, const DSourceComboUse &locReactionFullComboUse, const DSourceCombo *locReactionFullCombo, const DSourceCombo *locFullVertexCombo, const DKinematicData *locBeamParticle, DVector3 locVertex, int locRFBunch, double locRFVertexTime, map< pair< int, int >, const DKinematicData * > &locReconDecayParticleMap)
DLorentzVector lorentzMomentum(void) const
static double ParticleMass(Particle_t p)
vector< const DReactionStepVertexInfo * > Get_StepVertexInfos(void) const
const DSourceCombo * Get_VertexPrimaryCombo(const DSourceCombo *locReactionCombo, const DReactionStepVertexInfo *locStepVertexInfo) const
void Print_SourceComboUse(const DSourceComboUse &locComboUse, unsigned char locNumTabs=0, bool locIgnoreTabs=false)
DSourceComboer * dSourceComboer
size_t Get_VertexZBin_TargetCenter(void) const
DSourceComboVertexer(void)=delete
vector< const DKinematicData * > Get_ConstrainingParticles(bool locIsProductionVertex, const DSourceCombo *locReactionCombo, const DSourceCombo *locVertexCombo, const DKinematicData *locBeamParticle, bool locIsCombo2ndVertex) const
DSourceComboP4Handler * dSourceComboP4Handler
void Construct_DecayingParticle_InvariantMass(const DReactionStepVertexInfo *locReactionStepVertexInfo, const DSourceCombo *locVertexCombo, DVector3 locVertex, map< pair< int, int >, const DKinematicData * > &locReconDecayParticleMap)
vector< const DSourceCombo * > Get_SourceCombos_ThisVertex(const DSourceCombo *locSourceCombo)
vector< pair< Particle_t, const JObject * > > Get_SourceParticles_ThisVertex(const DSourceCombo *locSourceCombo, Charge_t locCharge=d_AllCharges)
int Get_DecayStepIndex(const DReaction *locReaction, size_t locStepIndex, size_t locParticleIndex)
DVector3 Get_Vertex_NoBeam(bool locIsProductionVertex, const DSourceCombo *locVertexCombo, bool locIsCombo2ndVertex) const
bool Get_IsVertexKnown_NoBeam(bool locIsProductionVertex, const DSourceCombo *locVertexCombo, bool locIsCombo2ndVertex) const
bool Get_IsInclusiveVertexFlag(void) const
map< tuple< bool, const DSourceCombo *, const DKinematicData * >, unordered_map< const DSourceCombo *, double > > dTimeOffsets
map< pair< int, int >, const DReactionStepVertexInfo * > Get_DecayingParticles_NoConstrain(bool locFitFlag) const
void Calc_VertexTimeOffsets_WithCharged(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locReactionChargedCombo)
vector< size_t > Get_StepIndices(void) const
void Calc_VertexTimeOffsets_WithPhotons(const DReactionVertexInfo *locReactionVertexInfo, const DSourceCombo *locReactionChargedCombo, const DSourceCombo *locReactionFullCombo)
bool GetTargetZ(double &z_target) const
z-location of center of target
double Calc_PropagatedRFTime(double locPrimaryVertexZ, int locNumRFBunchShifts, double locDetachedVertexTimeOffset) const
bool Get_HasMassiveNeutrals(const DSourceComboInfo *locSourceComboInfo) const
DResourcePool< DKinematicData > dResourcePool_KinematicData
DLorentzVector Calc_P4_NoMassiveNeutrals(const DSourceCombo *locReactionCombo, const DSourceCombo *locVertexCombo, const DVector3 &locVertex, signed char locVertexZBin, const DKinematicData *locBeamParticle, const DSourceComboUse &locToExcludeUse, size_t locInstanceToExclude, bool locAccuratePhotonsFlag)
vector< const DKinematicData * >::const_iterator Get_ThetaNearest90Iterator(const vector< const DKinematicData * > &locParticles)
void Print_SourceCombo(const DSourceCombo *locCombo, unsigned char locNumTabs=0)