All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
PIDVariables.hh
Go to the documentation of this file.
1 /*
2  * PIDVariables.hh
3  *
4  * PIDVariable
5  * Helper class that contains and manages a variable
6  * used by PIDTools processors.
7  *
8  * PIDVariables
9  * Helper class that creates and manages a map of PIDVariable
10  * objects, Update()s it from a reconstructed particle etc.
11  * This class takes care and standardises the calculation of
12  * variables used for PID.
13  *
14  * Created on: Dec 23, 2015
15  * Author: S. Lukic
16  */
17 
18 #ifndef PIDVARIABLES_H_
19 #define PIDVARIABLES_H_ 1
20 
21 #include "TVector3.h"
22 #include "TString.h"
23 #include <LCIOSTLTypes.h>
24 #include "EVENT/Cluster.h"
25 #include "EVENT/Track.h"
26 #include "EVENT/ReconstructedParticle.h"
27 
28 #include "PIDParticles.hh"
29 
30 class TRandom3;
31 
32 using EVENT::FloatVec;
33 
34 
35 /*****************************************************************
36  *
37  * Individual variables. Base class first, then specific
38  *
39  ****************************************************************/
40 
42 public:
43 
44  PIDVariable_base(const PIDVariable_base&) = delete;
46 
47  PIDVariable_base(const char*name, const char *description, const char *unit) :
48  _value(0.), _name(name), _description(description), _unit(unit)
49  {};
50  virtual ~PIDVariable_base() {};
51 
52  // Binary masks for interpreting the return code
53  // of the Update() function
54  static const short MASK_EmptyClusters = 1 ;
55  static const short MASK_EmptyTracks = 1 << 1;
56  static const short MASK_EmptyShapes = 1 << 2;
57  static const short MASK_ZerodEdx = 1 << 3;
58  static const short MASK_InvalidMomentum = 1 << 4;
59 
60 
61  float Value() const { return _value; };
62  const char *Name() const { return _name; };
63  const float *Address() const { return &_value; };
64 
65  const char *AxisTitle() const { if(_unit[0] == '\0') return _description;
66  else return Form("%s (%s)", _description, _unit); };
67  const char *Description() const { return _description; };
68  const char *Unit() const { return _unit; } ;
69 
70  virtual int Update(EVENT::ReconstructedParticle*);
71  virtual int Update(const EVENT::ClusterVec cluvec, const EVENT::TrackVec trax, const TVector3 p3) = 0;
72 
73  virtual void SetOutOfRange() = 0;
74 
75  static double BetheBloch(const PIDParticles::PIDParticle_base* hypothesis, const float p);
76  // Some PIDVariables have occasional discrete values in VALID events.
77  // MVA does not like this, so we will add tiny smearing in such cases
78  // If varRand is not created by the user, no smearing will be added
79  static TRandom3 *varRand;
80 
81 protected:
82  float _value;
83  const char *_name;
84  const char *_description;
85  const char *_unit;
86 };
87 
88 
89 
91 {
92 public:
93  PID_CaloTotal();
94  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
95  virtual void SetOutOfRange() { _value = -1.; }
96 
97  static const float pCut; // Minimum permissible tracker momentum
98 };
99 
101 {
102 public:
103  PID_CaloEFrac();
104  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
105  virtual void SetOutOfRange() { _value = -1.; }
106 
107  static const float caloCut;
108 };
109 
111 {
112 public:
113  PID_CaloMuSys();
114  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
115  virtual void SetOutOfRange() { _value = -1.; }
116  static const float muSysCut;
117 };
118 
120 {
121 public:
123  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
124  virtual void SetOutOfRange() { _value = -1.; }
125 };
126 
128 {
129 public:
131  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
132  virtual void SetOutOfRange() { _value = -FLT_MAX; }
133 };
134 
136 {
137 public:
139  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
140  virtual void SetOutOfRange() { _value = -1.; }
141 };
142 
144 {
145 public:
147  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
148  virtual void SetOutOfRange() { _value = -1.; }
149 };
150 
151 
153 {
154 public:
155 
156  PID_dEdxChi2& operator=(const PID_dEdxChi2&) = delete;
157  PID_dEdxChi2(const PID_dEdxChi2&);
158  PID_dEdxChi2(const PIDParticles::PIDParticle_base* hypothesis, const float dEdx_MIP=1.35e-7);
159  ~PID_dEdxChi2();
160  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
161  virtual void SetOutOfRange() { _value = -1.e5; }
162 
163 //private:
165  const double _dEdx_MIP;
166 };
167 
169 {
170 public:
171 
172  PID_dEdxLogChi2& operator=(const PID_dEdxLogChi2&) = delete;
174  PID_dEdxLogChi2(const PIDParticles::PIDParticle_base* hypothesis, const float dEdx_MIP=1.35e-7);
176  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3);
177  virtual void SetOutOfRange() { _value = -1.e3; }
178 
179 //private:
181  const double _dEdx_MIP;
182 };
183 
184 
185 
186 /*****************************************************************
187  *
188  * Sets of variables. Base class first, then variations
189  *
190  ****************************************************************/
191 
192 
194 
195 public:
197  PIDVariables_base(EVENT::ReconstructedParticle*);
198  virtual ~PIDVariables_base() = 0;
199 
200  typedef std::vector<PIDVariable_base*> VarVec;
202 
203  const VarVec* GetVariables() const { return &_varVec; };
204  float GetP() const { return _p; }
205 
206  virtual int Update(EVENT::ReconstructedParticle*);
207  virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p);
208  virtual void SetOutOfRange();
209 
210  virtual void ClearVars();
211 
212 protected:
214  float _p{};
215  virtual void Populate() = 0;
216 };
217 
218 
219 /*** PIDVariables for the LikelihoodPIDProcessor ***/
220 
222 {
223 public:
225  PIDVariables_LLPID(EVENT::ReconstructedParticle*);
226  virtual ~PIDVariables_LLPID();
227 
228 protected:
229  virtual void Populate();
230 };
231 
232 
233 /*** PIDVariables for the MvaPidProcessor ***/
234 
236 {
237 public:
239  PIDVariables_MvaPid(EVENT::ReconstructedParticle*);
240  virtual ~PIDVariables_MvaPid();
241 
242  virtual int Update(EVENT::ReconstructedParticle*);
243  virtual void SetOutOfRange();
244 
245  FloatVec* GetMvaVariables() { return &_mvaVars; }
246 
247 protected:
248  virtual void Populate();
249 
250  // Copy of all variables for the TMVA::Reader and TMVA::Factory
251  // As they do not accept const pointers
252  FloatVec _mvaVars{};
253  void RefreshMvaVars();
254 
255 };
256 
257 
258 
259 #endif // PIDVARIABLES_H_
virtual void Populate()=0
const PIDParticles::PIDParticle_base * _hypothesis
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
const VarVec * GetVariables() const
const PIDParticles::PIDParticle_base * _hypothesis
virtual void SetOutOfRange()
const char * Description() const
Definition: PIDVariables.hh:67
virtual int Update(EVENT::ReconstructedParticle *)
const char * AxisTitle() const
Definition: PIDVariables.hh:65
virtual void Populate()
PIDVariable_base(const char *name, const char *description, const char *unit)
Definition: PIDVariables.hh:47
static double BetheBloch(const PIDParticles::PIDParticle_base *hypothesis, const float p)
Definition: PIDVariables.cc:24
std::map< particleType, PIDParticle_base > ParticleMap
const char * Name() const
Definition: PIDVariables.hh:62
const char * _name
Definition: PIDVariables.hh:83
virtual void SetOutOfRange()
PID_dEdxLogChi2 & operator=(const PID_dEdxLogChi2 &)=delete
virtual void SetOutOfRange()
std::vector< PIDVariable_base * > VarVec
virtual void SetOutOfRange()
virtual ~PIDVariable_base()
Definition: PIDVariables.hh:50
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
FloatVec * GetMvaVariables()
static TRandom3 * varRand
Definition: PIDVariables.hh:79
const char * _description
Definition: PIDVariables.hh:84
const double _dEdx_MIP
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
const double _dEdx_MIP
virtual ~PIDVariables_LLPID()
static const short MASK_EmptyShapes
Definition: PIDVariables.hh:56
virtual void ClearVars()
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
Definition: PIDVariables.cc:80
virtual void SetOutOfRange()=0
static const float caloCut
virtual void Populate()
static const short MASK_ZerodEdx
Definition: PIDVariables.hh:57
virtual void SetOutOfRange()
virtual ~PIDVariables_MvaPid()
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
const float * Address() const
Definition: PIDVariables.hh:63
virtual void SetOutOfRange()
PIDVariable_base & operator=(const PIDVariable_base &)=delete
virtual int Update(EVENT::ReconstructedParticle *)
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
virtual void SetOutOfRange()
Definition: PIDVariables.hh:95
static const float e
static const short MASK_InvalidMomentum
Definition: PIDVariables.hh:58
PIDParticles::ParticleMap ParticleMap
virtual void SetOutOfRange()
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
virtual int Update(const EVENT::ClusterVec, const EVENT::TrackVec, const TVector3 p3)
Definition: PIDVariables.cc:46
virtual ~PIDVariables_base()=0
PID_dEdxLogChi2(const PID_dEdxLogChi2 &)
PIDVariable_base(const PIDVariable_base &)=delete
PID_dEdxChi2 & operator=(const PID_dEdxChi2 &)=delete
virtual int Update(EVENT::ReconstructedParticle *)
Definition: PIDVariables.cc:15
virtual void SetOutOfRange()
float Value() const
Definition: PIDVariables.hh:61
virtual void SetOutOfRange()
const char * Unit() const
Definition: PIDVariables.hh:68
const char * _unit
Definition: PIDVariables.hh:85
PID_dEdxChi2(const PID_dEdxChi2 &)
virtual void SetOutOfRange()
static const float pCut
Definition: PIDVariables.hh:97
float GetP() const
static const float muSysCut
static const short MASK_EmptyClusters
Definition: PIDVariables.hh:54
static const short MASK_EmptyTracks
Definition: PIDVariables.hh:55