Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReactionStepVertexInfo.cc
Go to the documentation of this file.
2 
3 namespace DAnalysis
4 {
5 
6 /************************************************************** MEMBER FUNCTIONS ***************************************************************/
7 
8 void DReactionStepVertexInfo::Register_DecayingParticleConstraints(bool locFitFlag, const vector<pair<int, int>>& locNoConstrainDecayingParticles,
9  const map<pair<int, int>, const DReactionStepVertexInfo*>& locFullConstrainDecayingParticles = {})
10 {
11  dDecayingParticles_FullConstrain[locFitFlag] = locFullConstrainDecayingParticles;
12  for(auto locMapPair : locFullConstrainDecayingParticles)
13  dFullConstrainParticles[locFitFlag].emplace_back(locMapPair.first);
14  for(auto locParticlePair : locNoConstrainDecayingParticles)
15  {
16  dDecayingParticles_NoConstrain[locFitFlag].emplace(locParticlePair, nullptr);
17  dNoConstrainParticles[locFitFlag].emplace_back(locParticlePair);
18  }
19  std::sort(dFullConstrainParticles[locFitFlag].begin(), dFullConstrainParticles[locFitFlag].end());
20  std::sort(dNoConstrainParticles[locFitFlag].begin(), dNoConstrainParticles[locFitFlag].end());
21 }
22 
23 void DReactionStepVertexInfo::Set_ParticleIndices(bool locFitFlag, const vector<pair<int, int>>& locFullConstrainParticles, const vector<pair<int, int>>& locDecayingParticles,
24  const vector<pair<int, int>>& locOnlyConstrainTimeParticles, const vector<pair<int, int>>& locNoConstrainParticles)
25 {
26  //store
27  dFullConstrainParticles[locFitFlag] = locFullConstrainParticles;
28  dDecayingParticles = locDecayingParticles;
29  dOnlyConstrainTimeParticles = locOnlyConstrainTimeParticles;
30  dNoConstrainParticles[locFitFlag] = locNoConstrainParticles;
31 
32  //sort
33  std::sort(dFullConstrainParticles[locFitFlag].begin(), dFullConstrainParticles[locFitFlag].end());
34  std::sort(dDecayingParticles.begin(), dDecayingParticles.end());
36  std::sort(dNoConstrainParticles[locFitFlag].begin(), dNoConstrainParticles[locFitFlag].end());
37 }
38 
39 //if you want beam, say initial state not target or decaying
40 vector<pair<int, int>> DReactionStepVertexInfo::Filter_Particles(vector<pair<int, int>> locParticles, DReactionState_t locState, Charge_t locCharge,
41  bool locIncludeDecayingFlag, bool locIncludeMissingFlag, bool locIncludeTargetFlag) const
42 {
43  if(locState != d_EitherState)
44  {
45  auto Check_State = [&locState](const pair<int, int>& locIndices) -> bool
46  {return ((locIndices.second >= 0) != (locState == d_FinalState));};
47  locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_State), locParticles.end());
48  }
49  if(locCharge != d_AllCharges)
50  {
51  auto Check_Charge = [this, &locCharge](const pair<int, int>& locIndices) -> bool
52  {
53  Particle_t locPID = dReaction->Get_ReactionStep(locIndices.first)->Get_PID(locIndices.second);
54  return !Is_CorrectCharge(locPID, locCharge);
55  };
56  locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_Charge), locParticles.end());
57  }
58  if(!locIncludeDecayingFlag)
59  {
60  auto Check_Decaying = [this](const pair<int, int>& locIndices) -> bool
61  {return std::binary_search(dDecayingParticles.begin(), dDecayingParticles.end(), locIndices);};
62  locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_Decaying), locParticles.end());
63  }
64  if(!locIncludeMissingFlag)
65  {
66  auto Check_Missing = [this](const pair<int, int>& locIndices) -> bool
67  {return (locIndices.second == dReaction->Get_ReactionStep(locIndices.first)->Get_MissingParticleIndex());};
68  locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_Missing), locParticles.end());
69  }
70  if(!locIncludeTargetFlag)
71  {
72  auto Check_Target = [this](const pair<int, int>& locIndices) -> bool
73  {return (locIndices.second == DReactionStep::Get_ParticleIndex_Target());};
74  locParticles.erase(std::remove_if(locParticles.begin(), locParticles.end(), Check_Target), locParticles.end());
75  }
76  return locParticles;
77 }
78 
80 {
81  cout << "reaction, steps: " << locStepInfo->Get_Reaction()->Get_ReactionName() << ", ";
82  for(auto& locStepIndex : locStepInfo->Get_StepIndices())
83  cout << locStepIndex << ", ";
84  cout << endl;
85 
86  cout << "flags: production, dangling, fittable: " << locStepInfo->Get_ProductionVertexFlag() << ", " << locStepInfo->Get_DanglingVertexFlag() << ", " << locStepInfo->Get_FittableVertexFlag() << endl;
87  cout << "parent vertex info: " << locStepInfo->Get_ParentVertexInfo() << endl;
88 
89  cout << "DecayingParticles: ";
90  for(auto& locParticlePair : locStepInfo->Get_DecayingParticles())
91  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
92  cout << endl;
93 
94  cout << "OnlyConstrainTimeParticles: ";
95  for(auto& locParticlePair : locStepInfo->Get_OnlyConstrainTimeParticles())
96  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
97  cout << endl;
98 
99  cout << "Reconstruction: FullConstrainParticles: ";
100  for(auto& locParticlePair : locStepInfo->Get_FullConstrainParticles(false))
101  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
102  cout << endl;
103 
104  cout << "Reconstruction: NoConstrainParticles: ";
105  for(auto& locParticlePair : locStepInfo->Get_NoConstrainParticles(false))
106  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
107  cout << endl;
108 
109  cout << "Fitting: FullConstrainParticles: ";
110  for(auto& locParticlePair : locStepInfo->Get_FullConstrainParticles(true))
111  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
112  cout << endl;
113 
114  cout << "Fitting: NoConstrainParticles: ";
115  for(auto& locParticlePair : locStepInfo->Get_NoConstrainParticles(true))
116  cout << "(" << locParticlePair.first << ", " << locParticlePair.second << "), ";
117  cout << endl;
118 }
119 
120 } //end namespace DAnalysis
vector< pair< int, int > > Get_FullConstrainParticles(bool locFitFlag, DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges, bool locIncludeDecayingFlag=true) const
map< bool, vector< pair< int, int > > > dFullConstrainParticles
void Print_ReactionStepVertexInfo(const DReactionStepVertexInfo *locStepInfo)
map< bool, vector< pair< int, int > > > dNoConstrainParticles
vector< pair< int, int > > dDecayingParticles
Charge_t
void Set_ParticleIndices(bool locFitFlag, const vector< pair< int, int >> &locFullConstrainParticles, const vector< pair< int, int >> &locDecayingParticles, const vector< pair< int, int >> &locOnlyConstrainTimeParticles, const vector< pair< int, int >> &locNoConstrainParticles)
const DReactionStepVertexInfo * Get_ParentVertexInfo(void) const
const DReaction * Get_Reaction(void) const
Particle_t Get_PID(int locParticlceIndex) const
string Get_ReactionName(void) const
Definition: DReaction.h:75
void Register_DecayingParticleConstraints(bool locFitFlag, const vector< pair< int, int >> &locNoConstrainDecayingParticles, const map< pair< int, int >, const DReactionStepVertexInfo * > &locFullConstrainDecayingParticles)
vector< pair< int, int > > Filter_Particles(vector< pair< int, int >> locParticles, DReactionState_t locState, Charge_t locCharge, bool locIncludeDecayingFlag=true, bool locIncludeMissingFlag=true, bool locIncludeTargetFlag=true) const
int Get_MissingParticleIndex(void) const
Definition: DReactionStep.h:93
static int Is_CorrectCharge(Particle_t locPID, Charge_t locCharge)
static constexpr int Get_ParticleIndex_Target(void)
vector< pair< int, int > > Get_NoConstrainParticles(bool locFitFlag, DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges, bool locIncludeDecayingFlag=true, bool locIncludeMissingFlag=true, bool locIncludeTargetFlag=true) const
vector< pair< int, int > > Get_DecayingParticles(DReactionState_t locState=d_EitherState, Charge_t locCharge=d_AllCharges) const
vector< pair< int, int > > Get_OnlyConstrainTimeParticles(void) const
const DReactionStep * Get_ReactionStep(size_t locStepIndex) const
Definition: DReaction.h:84
vector< size_t > Get_StepIndices(void) const
vector< pair< int, int > > dOnlyConstrainTimeParticles
Particle_t
Definition: particleType.h:12