Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DParticleComboCreator.h
Go to the documentation of this file.
1 #ifndef DParticleComboCreator_h
2 #define DParticleComboCreator_h
3 
4 #include <unordered_map>
5 #include <map>
6 
7 #include "JANA/JEventLoop.h"
8 #include "PID/DEventRFBunch.h"
12 #include "PID/DParticleID.h"
13 
19 
20 using namespace std;
21 using namespace jana;
22 
23 class DAnalysisUtilities;
24 
25 namespace DAnalysis
26 {
27 
28 class DSourceComboer;
29 
31 {
32  public:
33  DParticleComboCreator(JEventLoop* locEventLoop, const DSourceComboer* locSourceComboer, DSourceComboTimeHandler* locSourceComboTimeHandler, const DSourceComboVertexer* locSourceComboVertexer);
34 
35  const DParticleCombo* Build_ParticleCombo(const DReactionVertexInfo* locReactionVertexInfo, const DSourceCombo* locFullCombo, const DKinematicData* locBeamParticle, int locRFBunchShift, DKinFitType locKinFitType);
36  const DParticleCombo* Create_KinFitCombo_NewCombo(const DParticleCombo* locOrigCombo, const DReaction* locReaction, const DKinFitResults* locKinFitResults, const shared_ptr<const DKinFitChain>& locKinFitChain);
37 
38  const DParticleCombo* Build_ThrownCombo(JEventLoop* locEventLoop);
39  const DParticleCombo* Build_ThrownCombo(JEventLoop* locEventLoop, const DReaction* locThrownReaction, deque<pair<const DMCThrown*, deque<const DMCThrown*> > >& locThrownSteps);
40 
41  void Reset(void);
42  void Set_DebugLevel(int locDebugLevel){dDebugLevel = locDebugLevel;}
43 
44  private:
45 
46  int dDebugLevel = 0;
47 
48  bool Get_CreateNeutralErrorMatrixFlag_Combo(const DReactionVertexInfo* locReactionVertexInfo, DKinFitType locKinFitType);
49 
50  //DECAYING PARTICLES, POST-KINFIT
51  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);
52  shared_ptr<DKinFitParticle> Get_DecayingParticle(const DReaction* locReaction, const DParticleCombo* locOldParticleCombo, size_t locComboStepIndex, const shared_ptr<const DKinFitChain>& locKinFitChain, const DKinFitResults* locKinFitResults) const;
53  bool Search_ForParticleInDecay(const shared_ptr<const DKinFitChain>& locKinFitChain, size_t locStepToSearch, const shared_ptr<DKinFitParticle>& locParticleToFind) const;
54 
55  //SPACETIME VERTEX, POST-KINFIT
56  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;
57 
58  //CREATE PARTICLES
59  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);
60  const DBeamPhoton* Create_BeamPhoton_KinFit(const DBeamPhoton* locBeamPhoton, const DKinFitParticle* locKinFitParticle, const DLorentzVector& locSpacetimeVertex);
61  const DChargedTrackHypothesis* Create_ChargedHypo_KinFit(const DChargedTrack* locChargedTrack, Particle_t locPID, const DKinFitParticle* locKinFitParticle, double locPropagatedRFTime);
62  const DNeutralParticleHypothesis* Create_NeutralHypo_KinFit(const DNeutralParticleHypothesis* locOrigHypo, DKinFitParticle* locKinFitParticle, double locPropagatedRFTime);
63  DKinematicData* Build_KinematicData(const DKinFitResults* locKinFitResults, DKinFitParticle* locKinFitParticle, DLorentzVector locSpacetimeVertex, bool locProductionVertexFlag);
64 
66  TMatrixFSym dVertexCovMatrix;
67  unordered_map<const DReactionVertexInfo*, bool> dDanglingNeutralsFlagMap;
68 
69  //UTILITIES
70  const DSourceComboer* dSourceComboer = nullptr;
71  DSourceComboTimeHandler* dSourceComboTimeHandler = nullptr;
72  const DSourceComboVertexer* dSourceComboVertexer = nullptr;
73  const DParticleID* dParticleID = nullptr;
74  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
75  DKinFitUtils_GlueX* dKinFitUtils = nullptr;
76 
77  //FACTORIES
81 
82  //CREATED OBJECT MAPS
83  map<tuple<DReactionStep, const DSourceCombo*, bool, bool, const DSourceCombo*, const DKinematicData*>, const DParticleComboStep*> dComboStepMap; //kindata is beam (null if not in step): for vertex
84  unordered_map<int, const DEventRFBunch*> dRFBunchMap;
85  map<tuple<const DChargedTrack*, Particle_t, int, bool, const DSourceCombo*, const DSourceCombo*, const DKinematicData*>, const DChargedTrackHypothesis*> dChargedHypoMap;
86  map<tuple<const DNeutralShower*, Particle_t, int, bool, bool, const DSourceCombo*, const DSourceCombo*, const DKinematicData*>, const DNeutralParticleHypothesis*> dNeutralHypoMap;
87  map<tuple<const DReactionVertexInfo*, const DSourceCombo*, const DKinematicData*, int, bool>, DParticleCombo*> dComboMap;
88  unordered_map<const DKinFitParticle*, DChargedTrackHypothesis*> dKinFitChargedHypoMap;
89  unordered_map<const DKinFitParticle*, DNeutralParticleHypothesis*> dKinFitNeutralHypoMap;
90  unordered_map<const DKinFitParticle*, DBeamPhoton*> dKinFitBeamPhotonMap;
91 
92  //RESOURCE POOLS
97  vector<DKinematicData*> dCreated_KinematicData;
98  vector<DParticleCombo*> dCreated_ParticleCombo;
99  vector<DParticleComboStep*> dCreated_ParticleComboStep;
100  vector<DChargedTrackHypothesis*> dCreated_ChargedHypo;
101  vector<DNeutralParticleHypothesis*> dCreated_NeutralHypo;
102  vector<DBeamPhoton*> dCreated_BeamPhoton;
103 
105  {
106  auto locResource = dResourcePool_ParticleCombo.Get_Resource();
107  dCreated_ParticleCombo.push_back(locResource);
108  return locResource;
109  }
110 
112  {
113  auto locResource = dResourcePool_ParticleComboStep.Get_Resource();
114  dCreated_ParticleComboStep.push_back(locResource);
115  return locResource;
116  }
117 };
118 
119 }
120 
121 #endif // DParticleComboCreator_h
DResourcePool< DKinematicData > dResourcePool_KinematicData
DResourcePool< DParticleComboStep > dResourcePool_ParticleComboStep
unordered_map< const DKinFitParticle *, DNeutralParticleHypothesis * > dKinFitNeutralHypoMap
TVector3 DVector3
Definition: DVector3.h:14
map< tuple< DReactionStep, const DSourceCombo *, bool, bool, const DSourceCombo *, const DKinematicData * >, const DParticleComboStep * > dComboStepMap
DChargedTrackHypothesis_factory * dChargedTrackHypothesisFactory
map< tuple< const DChargedTrack *, Particle_t, int, bool, const DSourceCombo *, const DSourceCombo *, const DKinematicData * >, const DChargedTrackHypothesis * > dChargedHypoMap
TLorentzVector DLorentzVector
DParticleComboStep * Get_ParticleComboStepResource(void)
map< tuple< const DReactionVertexInfo *, const DSourceCombo *, const DKinematicData *, int, bool >, DParticleCombo * > dComboMap
DNeutralParticleHypothesis_factory * dNeutralParticleHypothesisFactory
vector< DParticleComboStep * > dCreated_ParticleComboStep
vector< DParticleCombo * > dCreated_ParticleCombo
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
unordered_map< const DReactionVertexInfo *, bool > dDanglingNeutralsFlagMap
vector< DBeamPhoton * > dCreated_BeamPhoton
DResourcePool< DParticleCombo > dResourcePool_ParticleCombo
vector< DNeutralParticleHypothesis * > dCreated_NeutralHypo
unordered_map< const DKinFitParticle *, DBeamPhoton * > dKinFitBeamPhotonMap
unordered_map< const DKinFitParticle *, DChargedTrackHypothesis * > dKinFitChargedHypoMap
vector< DKinematicData * > dCreated_KinematicData
void Set_DebugLevel(int locDebugLevel)
DBeamPhoton_factory * dBeamPhotonfactory
DResourcePool< DEventRFBunch > dResourcePool_EventRFBunch
Particle_t
Definition: particleType.h:12
DParticleCombo * Get_ParticleComboResource(void)