EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PndPidCandidate.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PndPidCandidate.h
1 #ifndef PNDPIDCANDIDATE_H
2 #define PNDPIDCANDIDATE_H
3 
4 // //
5 // PndPidCandidate //
6 // //
7 // Definition of the Panda pid candidate. //
8 // //
9 // Author: Klaus Goetzen, GSI, 12.06.08 //
10 // Copyright (C) 2008, GSI Darmstadt. //
11 // //
13 
14 #include <iostream>
15 
16 #include <assert.h>
17 
18 #include "FairRecoCandidate.h"
19 #include "TArrayI.h"
20 #include "TMatrixD.h"
21 #include "TVector3.h"
22 #include "TLorentzVector.h"
23 
24 #include "FairTrackParam.h"
25 
26 //class VAbsPidInfo;
27 
28 #include <PndTrack.h>
29 
30 // ========================================================================
31 // ===== PndPidCandidate - Class definig the AOD interface ====
32 // ========================================================================
33 
34 class PndPidCandidate : public FairRecoCandidate //FairMultiLinkedData
35 {
36 
37  public:
38 
40  PndPidCandidate(Int_t charge, TVector3 &pos, TLorentzVector &p4, TMatrixD &cov7 );
41  PndPidCandidate(Int_t charge, TVector3 &pos, TLorentzVector &p4);
42 
44 
45  // ************************
46  // ACCESSOR METHODS
47  // ************************
48 
49  // ************************
50  // basic properties:
51  // ************************
52 
53  Int_t GetCharge() const { return fCharge; }
54  TVector3 GetPosition() const { return TVector3(fXposition, fYposition, fZposition); }
55  TVector3 GetMomentum() const { return TVector3(fXmomentum, fYmomentum, fZmomentum); }
56  Double_t GetEnergy() const { return fEnergy; }
57  TLorentzVector GetLorentzVector() const{return TLorentzVector(fXmomentum,fYmomentum,fZmomentum,fEnergy);}
58 
59  TVector3 GetFirstHit() const{return TVector3(fFirstHitX,fFirstHitX,fFirstHitX);}
60  TVector3 GetLastHit() const{return TVector3(fLastHitX,fLastHitY,fLastHitZ);}
61 
62  const Float_t* GetErrorP7() const{return fErrP7;}
63  const Float_t* GetParams() const{return fParams;}
64  const Float_t* GetCov() const{return fCov;}
65  TMatrixD& Cov7() const;
66  TMatrixD& P4Cov() const ;
67  Int_t GetMcIndex() const{return fMcIndex;}
68  Int_t GetTrackIndex() const{return fTrackIndex;}
69  Int_t GetTrackBranch() const{return fTrackBranch;}
70 
71  // ************************
72  // detector specific stuff
73  // ************************
74 
75 #if _OLD_
76  // MVD
77  Float_t GetMvdDEDX() const { return fMvdDEDX; }
78  Int_t GetMvdHits() const { return fMvdHits; }
79  //const Int_t* GetMvdHitIndexArray() {return fMvdHitIndexArray.GetArray();}
80 
81  // STT
82  Float_t GetSttMeanDEDX() const { return fSttMeanDEDX; }
83  Int_t GetSttHits() const { return fSttHits; }
84  //const Int_t* GetSttHitIndexArray() {return fSttHitIndexArray.GetArray();}
85 
86  // GEM
87  Int_t GetGemHits() const { return fGemHits; }
88 
89  // TOF
90  Float_t GetTofStopTime() const { return fTofStopTime; }
91  Float_t GetTofM2() const { return fTofM2; }
92  Float_t GetTofTrackLength() const { return fTofTrackLength; }
93  Float_t GetTofQuality() const { return fTofQuality; }
94  Int_t GetTofIndex() const { return fTofIndex; }
95  Float_t GetTofBeta() const { return (fTofStopTime>0.&&fTofTrackLength>0.) ? fTofTrackLength/(30. * fTofStopTime) : -1.; }
96 
97  // Barrel DIRC
98  Float_t GetDrcThetaC() const { return fDrcThetaC;}
99  Float_t GetDrcThetaCErr() const { return fDrcThetaCErr;}
100  Float_t GetDrcQuality() const { return fDrcQuality;}
101  Int_t GetDrcNumberOfPhotons() const { return fDrcNumberOfPhotons;}
102  Int_t GetDrcIndex() const { return fDrcIndex; }
103 
104  // Disc DIRC
105  Float_t GetDiscThetaC() const { return fDiscThetaC;}
106  Float_t GetDiscThetaCErr() const { return fDiscThetaCErr;}
107  Float_t GetDiscQuality() const { return fDiscQuality;}
108  Int_t GetDiscNumberOfPhotons() const { return fDiscNumberOfPhotons;}
109  Int_t GetDiscIndex() const { return fDiscIndex; }
110 
111  // RICH
112  Float_t GetRichThetaC() const { return fRichThetaC;}
113  Float_t GetRichThetaCErr() const { return fRichThetaCErr;}
114  Float_t GetRichQuality() const { return fRichQuality;}
115  Int_t GetRichNumberOfPhotons() const { return fRichNumberOfPhotons;}
116  Int_t GetRichIndex() const { return fRichIndex; }
117 
118  // EMC
119  Float_t GetEmcRawEnergy() const{return fEmcRawEnergy;}
120  Float_t GetEmcCalEnergy() const{return fEmcCalEnergy;}
121  Float_t GetEmcQuality() const{return fEmcQuality;}
122  Int_t GetEmcNumberOfCrystals() const{return fEmcNumberOfCrystals;}
123  Int_t GetEmcNumberOfBumps() const{return fEmcNumberOfBumps;}
124  Int_t GetEmcModule() const { return fEmcModule; }
125  Int_t GetEmcIndex() const { return fEmcIndex; }
126  // EMC Cluster properties.
127  Double_t GetEmcClusterZ20() const { return fEmcZ20; }
128  Double_t GetEmcClusterZ53() const { return fEmcZ53; }
129  Double_t GetEmcClusterLat() const { return fEmcLat; }
130  Double_t GetEmcClusterE1() const { return fEmcE1; }
131  Double_t GetEmcClusterE9() const { return fEmcE9; }
132  Double_t GetEmcClusterE25() const { return fEmcE25; }
133 
134  // MUO
135  Int_t GetMuoNumberOfLayers()const {return fMuoNumberOfLayers;}
136  Float_t GetMuoProbability() const{return fMuoProbability;}
137  Float_t GetMuoQuality() const{return fMuoQuality;}
138  Float_t GetMuoIron() const{return fMuoIron;}
139  Float_t GetMuoMomentumIn()const{return fMuoMomentumIn;}
140  Int_t GetMuoModule() const { return fMuoModule; }
141  Int_t GetMuoHits() const { return fMuoHits; }
142  Int_t GetMuoIndex() const { return fMuoIndex; }
143 #endif
144 
145  // Tracking
146 
147  Int_t GetDegreesOfFreedom() const{return fDegreesOfFreedom;}
148  Int_t GetFitStatus() const{return fFitStatus;}
149  Float_t GetChiSquared() const{return fChiSquared;}
150 
151  //TODO: PID values workaround
152  Float_t GetElectronPidLH() const { return -1; }
153  Float_t GetMuonPidLH() const { return -1; }
154  Float_t GetPionPidLH() const { return -1; }
155  Float_t GetKaonPidLH() const { return -1; }
156  Float_t GetProtonPidLH() const { return -1; }
157 
158 
159 
160  // ************************
161  // MODIFIER METHODS
162  // ************************
163 
164  void Lock() {fLocked=true;}
165  void Unlock() {fLocked=false;}
166  bool IsLocked() {return fLocked;}
167 
168  // ************************
169  // basic properties:
170  // ************************
171 
172  void SetCharge(Int_t charge) { fCharge=charge;}
173  void SetPosition(TVector3 &pos) { fXposition=pos.X(); fYposition=pos.Y(); fZposition=pos.Z(); }
174  void SetMomentum(TVector3 &mom) { fXmomentum=mom.X(); fYmomentum=mom.Y(); fZmomentum=mom.Z(); }
175  void SetEnergy(Double_t en) { fEnergy=(Float_t) en;}
176  void SetLorentzVector(TLorentzVector &p4);
177 
178  void SetFirstHit(TVector3 &pos) { fFirstHitX=pos.X(); fFirstHitY=pos.Y(); fFirstHitZ=pos.Z(); }
179  void SetLastHit(TVector3 &pos) { fLastHitX =pos.X(); fLastHitY =pos.Y(); fLastHitZ=pos.Z(); }
180 
181  void SetCov7(const TMatrixD &cov7 );
182  void SetP4Cov(const TMatrixD &covP4 );
183  void SetMcIndex(int idx) {fMcIndex=idx; }
184  void SetTrackIndex(int idx) {fTrackIndex=idx; }
185  void SetTrackBranch(int idx) {fTrackBranch=idx; }
186 
187  void SetHelixParams(Double_t *par) {if (par!=0) for (int i=0; i<5;i++) fParams[i] = (Float_t)par[i];}
188  void SetHelixCov(Double_t* cov){if (cov!=0) for (int i=0; i<15;i++) fCov[i] = (Float_t)cov[i];}
189 
190 
191  // ************************
192  // detector specific stuff
193  // ************************
194 
195 #if _OLD_
196  // MVD
197  void SetMvdDEDX(Double_t val) { fMvdDEDX = (Float_t) val; }
198  void SetMvdHits(Int_t val) { fMvdHits = val; }
199  //void SetMvdHitIndexArray(Int_t n, Int_t* arr) { fMvdHits=n; fMvdHitIndexArray.Set(n,arr);}
200 
201  // STT
202  void SetSttMeanDEDX(Double_t val) { fSttMeanDEDX = (Float_t) val; }
203  void SetSttHits(Int_t val) { fSttHits = val; }
204  //void SetSttHitIndexArray(Int_t n, Int_t* arr) { fSttHits=n; fSttHitIndexArray.Set(n,arr);}
205 
206  void SetGemHits(Int_t val) {fGemHits = val;}
207  // TOF
208  void SetTofStopTime(Double_t val) { fTofStopTime = (Float_t) val;}
209  void SetTofM2(Double_t val) { fTofM2 = (Float_t) val;}
210  void SetTofTrackLength(Double_t val) { fTofTrackLength = val; }
211  void SetTofQuality(Double_t val) { fTofQuality = val; }
212  void SetTofIndex(Int_t val) { fTofIndex = val;}
213 
214  // Barrel DIRC
215  void SetDrcThetaC(Double_t val) { fDrcThetaC= (Float_t) val;}
216  void SetDrcThetaCErr(Double_t val) { fDrcThetaCErr=(Float_t) val;}
217  void SetDrcQuality(Double_t val) { fDrcQuality=(Float_t) val;}
218  void SetDrcNumberOfPhotons(Int_t val) { fDrcNumberOfPhotons = val;}
219  void SetDrcIndex(Int_t val) { fDrcIndex = val; }
220 
221  // Disc DIRC
222  void SetDiscThetaC(Double_t val) { fDiscThetaC=(Float_t) val;}
223  void SetDiscThetaCErr(Double_t val) { fDiscThetaCErr=(Float_t) val;}
224  void SetDiscQuality(Double_t val) { fDiscQuality=(Float_t) val;}
225  void SetDiscNumberOfPhotons(Int_t val) { fDiscNumberOfPhotons=val;}
226  void SetDiscIndex(Int_t val) { fDiscIndex = val; }
227 
228  // RICH
229  void SetRichThetaC(Double_t val) { fRichThetaC=(Float_t) val;}
230  void SetRichThetaCErr(Double_t val) { fRichThetaCErr=(Float_t) val;}
231  void SetRichQuality(Double_t val) { fRichQuality=(Float_t) val;}
232  void SetRichNumberOfPhotons(Int_t val) { fRichNumberOfPhotons= val;}
233  void SetRichIndex(Int_t val) { fRichIndex = val; }
234 
235  // EMC
236  void SetEmcRawEnergy(Double_t val) { fEmcRawEnergy=(Float_t) val;}
237  void SetEmcCalEnergy(Double_t val) { fEmcCalEnergy=(Float_t) val;}
238  void SetEmcQuality(Double_t val) { fEmcQuality=(Float_t) val;}
239  void SetEmcNumberOfCrystals(Int_t val) { fEmcNumberOfCrystals= val;}
240  void SetEmcNumberOfBumps(Int_t val) { fEmcNumberOfBumps= val;}
241  void SetEmcModule(Int_t val) { fEmcModule = val; }
242  void SetEmcIndex(Int_t val) { fEmcIndex = val; }
243 
244  void SetEmcClusterZ20(Double_t val) { fEmcZ20 = val; }
245  void SetEmcClusterZ53(Double_t val) { fEmcZ53 = val; }
246  void SetEmcClusterLat(Double_t val) { fEmcLat = val; }
247  void SetEmcClusterE1(Double_t val) { fEmcE1 = val; }
248  void SetEmcClusterE9(Double_t val) { fEmcE9 = val; }
249  void SetEmcClusterE25(Double_t val) { fEmcE25 = val; }
250 
251  // MUO
252  void SetMuoNumberOfLayers(Int_t val) { fMuoNumberOfLayers= val;}
253  void SetMuoProbability(Double_t val) { fMuoProbability=(Float_t) val;}
254  void SetMuoQuality(Double_t val) { fMuoQuality=(Float_t) val;}
255  void SetMuoIron(Double_t val) { fMuoIron=(Float_t) val;}
256  void SetMuoMomentumIn(Double_t val) { fMuoMomentumIn=(Float_t) val;}
257  void SetMuoModule(Int_t val) { fMuoModule = val; }
258  void SetMuoHits(Int_t val) { fMuoHits = val; }
259  void SetMuoIndex(Int_t val) { fMuoIndex = val; }
260 #endif
261 
262  // Tracking
263  void SetDegreesOfFreedom(Int_t val) { fDegreesOfFreedom=val;}
264  void SetFitStatus(Int_t val) { fFitStatus= val;}
265  void SetChiSquared(Double_t val) { fChiSquared=(Float_t) val;}
266 
267  //TODO: workaround
268  void SetElectronPidLH(Double_t val) { return; }
269  void SetMuonPidLH(Double_t val) { return; }
270  void SetPionPidLH(Double_t val) { return; }
271  void SetKaonPidLH(Double_t val) { return; }
272  void SetProtonPidLH(Double_t val) { return; }
273 
274  // FIXME: not the best style, agreed;
275  unsigned GetParameterizationCount( void ) const { return mParameterizations.size(); };
277  return (ih < mParameterizations.size() ? &mParameterizations[ih] : 0);
278  };
279  const NaiveTrackParameterization *GetNearestParameterization(const TVector3 &x0, const TVector3 &n0);
281  std::vector<NaiveTrackParameterization> mParameterizations;
282 
283  void SetDefault();
284  protected:
285  // Candidate lock
286  Bool_t fLocked;
287 
288  // the basic params
289  Char_t fCharge; // The electrical charge
290  Float_t fXposition, // The origin in x
291  fYposition, // The origin in y
292  fZposition; // The origin in z
293  Double_t
294  fXmomentum, // The momentum in x
295  fYmomentum, // The momentum in y
296  fZmomentum, // The momentum in z
297  fEnergy; // The total energy
298 
299  Float_t fFirstHitX,
300  fFirstHitY,
301  fFirstHitZ;
302 
303  Float_t fLastHitX,
304  fLastHitY,
305  fLastHitZ;
306 
307  Int_t fMcIndex; // MC truth index
308  Int_t fTrackIndex; // PndTrack index
309  Int_t fTrackBranch;// index of PndTrack TClonesArray
310  Float_t fErrP7[28]; // The symmetric 7*7 error matrix
311  Float_t fParams[5]; // The helix fit parameters
312  Float_t fCov[15]; // The helix error matrix
313 
314 #if _OLD_
315  // detector quantities
316  // MVD
317  Float_t fMvdDEDX;
318  Int_t fMvdHits;
319  //TArrayI fMvdHitIndexArray;
320 
321  // STT
322  Float_t fSttMeanDEDX;
323  Int_t fSttHits;
324  //TArrayI fSttHitIndexArray;
325 
326  //GEM
327  Int_t fGemHits;
328 
329  // TOF
330  Float_t fTofStopTime;
331  Float_t fTofM2;
332  Float_t fTofTrackLength;
333  Float_t fTofQuality;
334  Int_t fTofIndex;
335 
336  // Barrel DIRC
337  Float_t fDrcThetaC;
338  Float_t fDrcThetaCErr;
339  Float_t fDrcQuality;
340  Int_t fDrcNumberOfPhotons;
341  Int_t fDrcIndex;
342 
343  // Disc DIRC
344  Float_t fDiscThetaC;
345  Float_t fDiscThetaCErr;
346  Float_t fDiscQuality;
347  Int_t fDiscNumberOfPhotons;
348  Int_t fDiscIndex;
349 
350  // RICH
351  Float_t fRichThetaC;
352  Float_t fRichThetaCErr;
353  Float_t fRichQuality;
354  Int_t fRichNumberOfPhotons;
355  Int_t fRichIndex;
356 
357  // EMC
358  Float_t fEmcRawEnergy;
359  Float_t fEmcCalEnergy;
360  Float_t fEmcQuality;
361  Int_t fEmcNumberOfCrystals;
362  Int_t fEmcNumberOfBumps;
363  Int_t fEmcModule;
364  Int_t fEmcIndex;
365 
366  Double_t fEmcZ20;
367  Double_t fEmcZ53;
368  Double_t fEmcLat;
369  Double_t fEmcE1;
370  Double_t fEmcE9;
371  Double_t fEmcE25;
372 
373  // MUO
374  Int_t fMuoNumberOfLayers;
375  Float_t fMuoProbability;
376  Float_t fMuoQuality;
377  Float_t fMuoIron;
378  Float_t fMuoMomentumIn;
379  Int_t fMuoModule;
380  Int_t fMuoHits;
381  Int_t fMuoIndex;
382 #endif
383 
384  // Tracking
386  Int_t fFitStatus;
387  Float_t fChiSquared;
388 
389 
390  ClassDef(PndPidCandidate,8) // Abstract base class for MicroDST candidates
391  };
392 
393 //std::ostream& operator << (std::ostream& o, const VAbsMicroCandidate&);
394 
395 #endif
396