Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DNeutralParticleHypothesis.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DNeutralParticleHypothesis.h
4 // Created: Tue Aug 9 14:29:24 EST 2011
5 // Creator: pmatt (on Linux ifarml6 2.6.18-128.el5 x86_64)
6 //
7 
8 #ifndef _DNeutralParticleHypothesis_
9 #define _DNeutralParticleHypothesis_
10 
11 #include <vector>
12 #include <string>
13 #include <memory>
14 
15 #include "DResettable.h"
16 #include <JANA/JObject.h>
17 #include <PID/DKinematicData.h>
18 #include <PID/DNeutralShower.h>
19 
20 using namespace std;
21 
23 {
24  public:
25  JOBJECT_PUBLIC(DNeutralParticleHypothesis);
26 
27  //CONSTRUCTORS & OPERATORS
29  DNeutralParticleHypothesis(const DNeutralParticleHypothesis& locSourceData, bool locShareTimingFlag = false, bool locShareKinematicsFlag = false);
30  DNeutralParticleHypothesis& operator= (const DNeutralParticleHypothesis& locSourceData);
31 
32  //SHARE RESOURCES
33  void Share_FromInput(const DNeutralParticleHypothesis* locSourceData, bool locShareTimingFlag, bool locShareKinematicsFlag);
34 
35  void Reset(void);
36  void Release(void);
37 
38  //GETTERS
39  const DNeutralShower* Get_NeutralShower(void) const{return dNeutralShower;}
40 
41  //Timing
42  double t0(void) const{return dTimingInfo->dt0;}
43  double t0_err(void) const{return dTimingInfo->dt0_err;}
44  double t1(void) const{return dNeutralShower->dSpacetimeVertex.T();}
45  double t1_err(void) const{return (*(dNeutralShower->dCovarianceMatrix))(4, 4);}
46  DetectorSystem_t t0_detector(void) const{return dTimingInfo->dt0_detector;}
47  DetectorSystem_t t1_detector(void) const{return dNeutralShower->dDetectorSystem;}
48  double Get_PathLength(void) const{return (dNeutralShower->dSpacetimeVertex.Vect() - position()).Mag();}
49  double measuredBeta(void) const{return ((Get_PathLength()/(t1() - t0())))/29.9792458;}
50 
51  //totals for overall PID determination
52  unsigned int Get_NDF(void) const{return dTimingInfo->dNDF;}
53  double Get_ChiSq(void) const{return dTimingInfo->dChiSq;}
54  double Get_FOM(void) const{return dTimingInfo->dFOM;}
55 
56  //SETTERS
57  void Set_NeutralShower(const DNeutralShower* locNeutralShower){dNeutralShower = locNeutralShower;}
58 
59  //Timing
60  void Set_T0(double locT0, double locT0Error, DetectorSystem_t locT0Detector);
61  void Set_ChiSq_Overall(double locChiSq, unsigned int locNDF, double locFOM);
62 
63  void toStrings(vector<pair<string,string> > &items) const
64  {
66  AddString(items, "PID_ChiSq", "%f", Get_ChiSq());
67  AddString(items, "PID_FOM", "%f", Get_FOM());
68  }
69 
70  class DTimingInfo : public DResettable
71  {
72  public:
73  void Reset(void);
74  void Release(void){};
75 
76  double dt0 = 0.0;
77  double dt0_err = 0.0;
78  DetectorSystem_t dt0_detector = SYS_NULL;
79 
80  unsigned int dNDF = 0;
81  float dChiSq = 0.0;
82  float dFOM = 0.0;
83  };
84 
85  private:
86  shared_ptr<DTimingInfo> dTimingInfo = nullptr;
87  const DNeutralShower* dNeutralShower = nullptr;
88 
89  //RESOURCE POOL
90  static thread_local shared_ptr<DResourcePool<DTimingInfo>> dResourcePool_TimingInfo;
91 };
92 
93 
94 /************************************************************** CONSTRUCTORS & OPERATORS ***************************************************************/
95 
97 dTimingInfo(dResourcePool_TimingInfo->Get_SharedResource()), dNeutralShower(nullptr) {}
98 
100  bool locShareTimingFlag, bool locShareKinematicsFlag) :
101  DKinematicData(locSourceData, locShareKinematicsFlag), dNeutralShower(nullptr)
102 {
103  //Default is NOT to share: create a new, independent copy of the input data (tracked separately from input so it can be modified)
104  if(locShareTimingFlag)
105  dTimingInfo = locSourceData.dTimingInfo;
106  else
107  {
108  dTimingInfo = dResourcePool_TimingInfo->Get_SharedResource();
109  *dTimingInfo = *(locSourceData.dTimingInfo);
110  }
111 }
112 
114 {
115  //Replace current data with a new, independent copy of the input data: tracked separately from input so it can be modified
116  DKinematicData::operator=(locSourceData);
117  if(dTimingInfo == locSourceData.dTimingInfo)
118  return *this; //guard against self-assignment
119  dTimingInfo = dResourcePool_TimingInfo->Get_SharedResource();
120  *dTimingInfo = *(locSourceData.dTimingInfo);
121  dNeutralShower = locSourceData.dNeutralShower;
122  return *this;
123 }
124 
125 /********************************************************************** GETTERS ************************************************************************/
126 
127 inline void DNeutralParticleHypothesis::Share_FromInput(const DNeutralParticleHypothesis* locSourceData, bool locShareTimingFlag, bool locShareKinematicsFlag)
128 {
129  if(locShareTimingFlag)
130  dTimingInfo = const_cast<DNeutralParticleHypothesis*>(locSourceData)->dTimingInfo;
131  if(locShareKinematicsFlag)
132  Share_FromInput_Kinematics(static_cast<const DKinematicData*>(locSourceData));
133 }
134 
135 inline void DNeutralParticleHypothesis::Set_T0(double locT0, double locT0Error, DetectorSystem_t locT0Detector)
136 {
137  dTimingInfo->dt0 = locT0;
138  dTimingInfo->dt0_err = locT0Error;
139  dTimingInfo->dt0_detector = locT0Detector;
140 }
141 
142 inline void DNeutralParticleHypothesis::Set_ChiSq_Overall(double locChiSq, unsigned int locNDF, double locFOM)
143 {
144  dTimingInfo->dChiSq = locChiSq;
145  dTimingInfo->dNDF = locNDF;
146  dTimingInfo->dFOM = locFOM;
147 }
148 
150 {
152  dTimingInfo = dResourcePool_TimingInfo->Get_SharedResource(); //not safe to reset individually, since you don't know what it's shared with
153  dNeutralShower = nullptr;
154 }
155 
157 {
159  dTimingInfo = nullptr;
160  dNeutralShower = nullptr;
161 }
162 
164 {
165  dt0 = 0.0;
166  dt0_err = 0.0;
168  dNDF = 0;
169  dChiSq = 0.0;
170  dFOM = 0.0;
171 }
172 
173 #endif // _DNeutralParticleHypothesis_
DetectorSystem_t t1_detector(void) const
void Set_T0(double locT0, double locT0Error, DetectorSystem_t locT0Detector)
virtual void Release(void)
unsigned int Get_NDF(void) const
Definition: GlueX.h:16
void Set_ChiSq_Overall(double locChiSq, unsigned int locNDF, double locFOM)
DKinematicData & operator=(const DKinematicData &locSourceData)
DetectorSystem_t
Definition: GlueX.h:15
static thread_local shared_ptr< DResourcePool< DTimingInfo > > dResourcePool_TimingInfo
const DNeutralShower * Get_NeutralShower(void) const
TLatex * t1
void Share_FromInput_Kinematics(const DKinematicData *locSourceData)
void Set_NeutralShower(const DNeutralShower *locNeutralShower)
void Share_FromInput(const DNeutralParticleHypothesis *locSourceData, bool locShareTimingFlag, bool locShareKinematicsFlag)
const DNeutralShower * dNeutralShower
virtual void Reset(void)
DNeutralParticleHypothesis & operator=(const DNeutralParticleHypothesis &locSourceData)
void toStrings(vector< pair< string, string > > &items) const
DetectorSystem_t t0_detector(void) const
void toStrings(vector< pair< string, string > > &items) const
shared_ptr< DTimingInfo > dTimingInfo