Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DKinFitResults.h
Go to the documentation of this file.
1 #ifndef _DKinFitResults_
2 #define _DKinFitResults_
3 
4 #include <string>
5 
6 #include "JANA/JObject.h"
7 #include "TMatrixDSym.h"
8 
9 #include "DResettable.h"
10 #include "PID/DKinematicData.h"
11 #include "ANALYSIS/DReaction.h" //for DKinFitType
14 
15 using namespace std;
16 using namespace jana;
17 
19 {
20  public:
21 
22  /************************************************************ SET FIT INFORMATION ***********************************************************/
23 
24  void Reset(void);
25  void Release(void);
26  void Set_KinFitType(DKinFitType locKinFitType){dKinFitType = locKinFitType;}
27 
28  void Set_NumConstraints(unsigned int locNumConstraints){dNumConstraints = locNumConstraints;}
29  void Set_NumUnknowns(unsigned int locNumUnknowns){dNumUnknowns = locNumUnknowns;}
30 
31  void Set_NDF(unsigned int locNDF){dNDF = locNDF;}
32  void Set_ChiSq(double locChiSq){dChiSq = locChiSq;}
33  void Set_ConfidenceLevel(double locConfidenceLevel){dConfidenceLevel = locConfidenceLevel;}
34 
35  void Set_VXi(const TMatrixDSym& locVXi){dVXi = locVXi;}
36  //void Set_VEta(const TMatrixDSym* locVEta){dVEta = locVEta;}
37  //void Set_VXi(const TMatrixDSym* locVXi){dVXi = locVXi;}
38  //void Set_V(const TMatrixDSym* locV){dV = locV;}
39 
40  void Set_Pulls(const map<const JObject*, map<DKinFitPullType, double> >& locPulls){dPulls = locPulls;}
41 
42  /************************************************************ GET FIT INFORMATION ***********************************************************/
43 
44  DKinFitType Get_KinFitType(void) const{return dKinFitType;}
45 
46  unsigned int Get_NumConstraints(void) const{return dNumConstraints;}
47  unsigned int Get_NumUnknowns(void) const{return dNumUnknowns;}
48 
49  unsigned int Get_NDF(void) const{return dNDF;}
50  double Get_ChiSq(void) const{return dChiSq;}
51  double Get_ConfidenceLevel(void) const{return dConfidenceLevel;}
52 
53  const TMatrixDSym& Get_VXi(void) const{return dVXi;}
54  //const TMatrixDSym* Get_VEta(void) const{return dVEta;}
55  //const TMatrixDSym* Get_VXi(void) const{return dVXi;}
56  //const TMatrixDSym* Get_V(void) const{return dV;}
57 
58  void Get_Pulls(map<const JObject*, map<DKinFitPullType, double> >& locPulls) const{locPulls = dPulls;}
59 
60  /************************************************** SET PARTICLES, COMBOS, AND CONSTRAINTS **************************************************/
61 
62  void Add_OutputKinFitParticles(const set<shared_ptr<DKinFitParticle>>& locOutputKinFitParticles);
63  void Add_KinFitConstraints(const set<shared_ptr<DKinFitConstraint>>& locKinFitConstraints);
64 
65  void Add_ParticleMapping_SourceToOutput(const JObject* locSourceJObject, const shared_ptr<DKinFitParticle>& locOutputKinFitParticle);
66 
67  /************************************************** GET PARTICLES, COMBOS, AND CONSTRAINTS **************************************************/
68 
69  set<shared_ptr<DKinFitParticle>> Get_OutputKinFitParticles(void) const;
70  set<shared_ptr<DKinFitParticle>> Get_OutputKinFitParticles(DKinFitParticleType locKinFitParticleType) const;
71  set<shared_ptr<const DKinFitConstraint>> Get_OutputKinFitConstraints(void) const{return dKinFitConstraints;}
72 
73  //Source: JObject from DParticleCombo
74  //Output: DKinFitParticle's containing the fit results (if not included in fit, is still the INPUT object)
75  shared_ptr<DKinFitParticle> Get_OutputKinFitParticle(const JObject* locSourceObject) const;
76 
77  private:
78 
79  DKinFitType dKinFitType = d_NoFit;
80 
81  unsigned int dNumConstraints = 0;
82  unsigned int dNumUnknowns = 0;
83 
84  double dConfidenceLevel = 0.0;
85  double dChiSq = 0.0;
86  unsigned int dNDF = 0;
87 
88  map<const JObject*, map<DKinFitPullType, double> > dPulls; //JObject is the MEASURED particle (or shower!)
89 
90  TMatrixDSym dVXi;
91  //const TMatrixDSym* dVXi; //covariance matrix of dXi, the unmeasured parameters in the fit
92  //const TMatrixDSym* dVEta; //covariance matrix of dEta, the measured parameters in the fit
93  //const TMatrixDSym* dV; //full covariance matrix: dVEta at top-left and dVXi at bottom-right (+ the eta, xi covariance)
94 
95  //OUTPUT PARTICLES AND CONSTRAINTS
96  map<DKinFitParticleType, set<shared_ptr<DKinFitParticle>> > dOutputKinFitParticles; //does not include particles not used in the constraints!
97  set<shared_ptr<const DKinFitConstraint>> dKinFitConstraints;
98 
99  //PARTICLE MAPS
100  //Source: JObject from DParticleCombo
101  //Output: DKinFitParticle's containing the fit results
102  map<const JObject*, shared_ptr<DKinFitParticle>> dParticleMap_SourceToOutput;
103 };
104 
105 inline void DKinFitResults::Reset(void)
106 {
107  dKinFitType = d_NoFit;
108  dNumConstraints = 0;
109  dNumUnknowns = 0;
110 
111  dConfidenceLevel = 0.0;
112  dChiSq = 0.0;
113  dNDF = 0;
114 
115  dPulls.clear();
116  dVXi.ResizeTo(0, 0);
117 
118  //OUTPUT PARTICLES AND CONSTRAINTS
119  dOutputKinFitParticles.clear();
120  dKinFitConstraints.clear();
121  dParticleMap_SourceToOutput.clear();
122 }
123 
124 inline void DKinFitResults::Release(void)
125 {
126  dVXi.ResizeTo(0, 0);
127  dPulls.clear();
128  dOutputKinFitParticles.clear();
129  dKinFitConstraints.clear();
130  dParticleMap_SourceToOutput.clear();
131 }
132 
133 /****************************************************** SET PARTICLES, COMBOS, AND CONSTRAINTS ******************************************************/
134 
135 inline void DKinFitResults::Add_OutputKinFitParticles(const set<shared_ptr<DKinFitParticle>>& locOutputKinFitParticles)
136 {
137  auto locIterator = locOutputKinFitParticles.begin();
138  for(; locIterator != locOutputKinFitParticles.end(); ++locIterator)
139  dOutputKinFitParticles[(*locIterator)->Get_KinFitParticleType()].insert(*locIterator);
140 }
141 
142 inline void DKinFitResults::Add_KinFitConstraints(const set<shared_ptr<DKinFitConstraint>>& locKinFitConstraints)
143 {
144  for(auto& locConstraint : locKinFitConstraints)
145  dKinFitConstraints.insert(std::const_pointer_cast<const DKinFitConstraint>(locConstraint));
146 }
147 
148 inline void DKinFitResults::Add_ParticleMapping_SourceToOutput(const JObject* locSourceJObject, const shared_ptr<DKinFitParticle>& locOutputKinFitParticle)
149 {
150  dParticleMap_SourceToOutput[locSourceJObject] = locOutputKinFitParticle;
151 }
152 
153 /****************************************************** GET PARTICLES, COMBOS, AND CONSTRAINTS ******************************************************/
154 
155 inline shared_ptr<DKinFitParticle> DKinFitResults::Get_OutputKinFitParticle(const JObject* locSourceObject) const
156 {
157  auto locIterator = dParticleMap_SourceToOutput.find(locSourceObject);
158  return ((locIterator != dParticleMap_SourceToOutput.end()) ? locIterator->second : NULL);
159 }
160 
161 inline set<shared_ptr<DKinFitParticle>> DKinFitResults::Get_OutputKinFitParticles(void) const
162 {
163  set<shared_ptr<DKinFitParticle>> locOutputKinFitParticles;
164  auto locIterator = dOutputKinFitParticles.begin();
165  for(; locIterator != dOutputKinFitParticles.end(); ++locIterator)
166  locOutputKinFitParticles.insert(locIterator->second.begin(), locIterator->second.end());
167  return locOutputKinFitParticles;
168 }
169 
170 inline set<shared_ptr<DKinFitParticle>> DKinFitResults::Get_OutputKinFitParticles(DKinFitParticleType locKinFitParticleType) const
171 {
172  auto locIterator = dOutputKinFitParticles.find(locKinFitParticleType);
173  return ((locIterator != dOutputKinFitParticles.end()) ? locIterator->second : set<shared_ptr<DKinFitParticle>>());
174 }
175 
176 #endif // _DKinFitResults_
177 
void Set_Pulls(const map< const JObject *, map< DKinFitPullType, double > > &locPulls)
DKinFitType Get_KinFitType(void) const
void Set_ChiSq(double locChiSq)
void Add_KinFitConstraints(const set< shared_ptr< DKinFitConstraint >> &locKinFitConstraints)
set< shared_ptr< const DKinFitConstraint > > Get_OutputKinFitConstraints(void) const
void Set_NDF(unsigned int locNDF)
TMatrixDSym dVXi
DKinFitParticleType
unsigned int Get_NumConstraints(void) const
unsigned int Get_NumUnknowns(void) const
void Add_ParticleMapping_SourceToOutput(const JObject *locSourceJObject, const shared_ptr< DKinFitParticle > &locOutputKinFitParticle)
void Set_NumUnknowns(unsigned int locNumUnknowns)
map< const JObject *, shared_ptr< DKinFitParticle > > dParticleMap_SourceToOutput
double Get_ChiSq(void) const
void Set_KinFitType(DKinFitType locKinFitType)
set< shared_ptr< const DKinFitConstraint > > dKinFitConstraints
void Add_OutputKinFitParticles(const set< shared_ptr< DKinFitParticle >> &locOutputKinFitParticles)
set< shared_ptr< DKinFitParticle > > Get_OutputKinFitParticles(void) const
map< DKinFitParticleType, set< shared_ptr< DKinFitParticle > > > dOutputKinFitParticles
void Set_NumConstraints(unsigned int locNumConstraints)
double Get_ConfidenceLevel(void) const
shared_ptr< DKinFitParticle > Get_OutputKinFitParticle(const JObject *locSourceObject) const
void Set_VXi(const TMatrixDSym &locVXi)
void Reset(void)
const TMatrixDSym & Get_VXi(void) const
map< const JObject *, map< DKinFitPullType, double > > dPulls
void Release(void)
unsigned int Get_NDF(void) const
void Set_ConfidenceLevel(double locConfidenceLevel)
void Get_Pulls(map< const JObject *, map< DKinFitPullType, double > > &locPulls) const