77 |
|
#ifndef MITANA_DATATREE_TRACK_H |
78 |
|
#define MITANA_DATATREE_TRACK_H |
79 |
|
|
80 |
+ |
#include "MitAna/DataCont/interface/BitMask.h" |
81 |
+ |
#include "MitAna/DataTree/interface/BaseVertex.h" |
82 |
|
#include "MitAna/DataTree/interface/DataObject.h" |
81 |
– |
#include "MitAna/DataTree/interface/SuperCluster.h" |
83 |
|
#include "MitAna/DataTree/interface/MCParticle.h" |
84 |
< |
#include "MitAna/DataTree/interface/BitMask.h" |
84 |
< |
#include "MitAna/DataTree/interface/BaseVertex.h" |
85 |
< |
#include "MitAna/DataTree/interface/Types.h" |
84 |
> |
#include "MitAna/DataTree/interface/SuperCluster.h" |
85 |
|
|
86 |
|
namespace mithep |
87 |
|
{ |
145 |
|
|
146 |
|
Int_t Charge() const { return (fQOverP>0) ? 1 : -1; } |
147 |
|
Double_t Chi2() const { return fChi2; } |
149 |
– |
Double_t RChi2() const { return fChi2/(Double_t)fNdof; } |
148 |
|
void ClearHit(EHitLayer l) { fHits.ClearBit(l); } |
149 |
|
Double_t D0() const { return -fDxy; } |
150 |
|
Double_t D0Corrected(const BaseVertex &iVertex) const; |
163 |
|
Double_t LambdaErr() const { return fLambdaErr; } |
164 |
|
const MCParticle *MCPart() const { return fMCParticleRef.Obj(); } |
165 |
|
const ThreeVectorC &Mom() const; |
166 |
< |
FourVectorM Mom4(Double_t m) const { return FourVectorM(Pt(),Eta(),Phi(),E(m)); } |
167 |
< |
UInt_t Ndof() const { return fNdof; } |
166 |
> |
FourVectorM Mom4(Double_t m) const { return FourVectorM(Pt(),Eta(),Phi(),m); } |
167 |
> |
UShort_t Ndof() const { return fNdof; } |
168 |
|
UInt_t NHits() const { return fHits.NBitsSet(); } |
169 |
|
UInt_t NStereoHits() const { return StereoHits().NBitsSet(); } |
170 |
|
EObjType ObjType() const { return kTrack; } |
181 |
|
Double_t Pz() const { return Mom().Z(); } |
182 |
|
Double_t QOverP() const { return fQOverP; } |
183 |
|
Double_t QOverPErr() const { return fQOverPErr; } |
184 |
+ |
Double_t RChi2() const { return fChi2/(Double_t)fNdof; } |
185 |
|
Double_t Theta() const { return (TMath::PiOver2() - fLambda); } |
187 |
– |
Double_t Z0() const { return fDsz/TMath::Cos(fLambda); } |
186 |
|
const SuperCluster *SCluster() const { return fSuperClusterRef.Obj(); } |
187 |
|
const BitMask48 StereoHits() const { return (fHits & StereoLayers()); } |
188 |
|
void SetChi2(Double_t chi2) { fChi2 = chi2; } |
193 |
|
Double_t dXy, Double_t dSz); |
194 |
|
void SetHit(EHitLayer l) { fHits.SetBit(l); } |
195 |
|
void SetHits(const BitMask48 &hits) { fHits = hits; } |
196 |
< |
void SetNdof(UInt_t dof) { fNdof = dof; } |
196 |
> |
void SetNdof(UShort_t dof) { fNdof = dof; } |
197 |
|
void SetMCPart(const MCParticle *p) { fMCParticleRef = p; } |
198 |
|
void SetPhiEcal(Double_t phi) { fPhiEcal = phi; } |
199 |
|
void SetSCluster(const SuperCluster* sc) { fSuperClusterRef = sc; } |
200 |
+ |
Double_t Z0() const { return fDsz/TMath::Cos(fLambda); } |
201 |
|
|
202 |
|
static |
203 |
|
const BitMask48 StereoLayers(); |
207 |
|
void GetMom() const; |
208 |
|
|
209 |
|
BitMask48 fHits; //storage for mostly hit information |
210 |
< |
Double32_t fQOverP; //signed inverse of momentum [1/GeV] |
211 |
< |
Double32_t fQOverPErr; //error of q/p |
212 |
< |
Double32_t fLambda; //pi/2 - polar angle at the reference point |
213 |
< |
Double32_t fLambdaErr; //error of lambda |
214 |
< |
Double32_t fPhi0; //azimuth angle at the given point |
215 |
< |
Double32_t fPhi0Err; //error of azimuthal angle |
216 |
< |
Double32_t fDxy; //transverse distance to reference point [cm] |
217 |
< |
Double32_t fDxyErr; //error of transverse distance |
218 |
< |
Double32_t fDsz; //longitudinal distance to reference point [cm] |
219 |
< |
Double32_t fDszErr; //error of longitudinal distance |
220 |
< |
Double32_t fChi2; //chi squared of track fit |
221 |
< |
UInt_t fNdof; //degree-of-freedom of track fit |
222 |
< |
Double32_t fEtaEcal; //eta of track at Ecal front face |
223 |
< |
Double32_t fPhiEcal; //phi of track at Ecal front face |
210 |
> |
Double32_t fQOverP; //[0,0,14]signed inverse of momentum [1/GeV] |
211 |
> |
Double32_t fQOverPErr; //[0,0,14]error of q/p |
212 |
> |
Double32_t fLambda; //[0,0,14]pi/2 - polar angle at the reference point |
213 |
> |
Double32_t fLambdaErr; //[0,0,14]error of lambda |
214 |
> |
Double32_t fPhi0; //[0,0,14]azimuth angle at the given point |
215 |
> |
Double32_t fPhi0Err; //[0,0,14]error of azimuthal angle |
216 |
> |
Double32_t fDxy; //[0,0,14]trans. distance to reference point [cm] |
217 |
> |
Double32_t fDxyErr; //[0,0,14]error of transverse distance |
218 |
> |
Double32_t fDsz; //[0,0,14]long. distance to reference point [cm] |
219 |
> |
Double32_t fDszErr; //[0,0,14]error of longitudinal distance |
220 |
> |
Double32_t fChi2; //[0,0,12]chi squared of track fit |
221 |
> |
UShort_t fNdof; //degree-of-freedom of track fit |
222 |
> |
Double32_t fEtaEcal; //[0,0,12]eta of track at Ecal front face |
223 |
> |
Double32_t fPhiEcal; //[0,0,12]phi of track at Ecal front face |
224 |
|
Ref<SuperCluster> fSuperClusterRef; //superCluster crossed by track |
225 |
|
Ref<MCParticle> fMCParticleRef; //reference to sim particle (for monte carlo) |
226 |
|
mutable CacheFlag fCacheMomFlag; //||cache validity flag for momentum |
269 |
|
//-------------------------------------------------------------------------------------------------- |
270 |
|
inline |
271 |
|
void mithep::Track::SetHelix(Double_t qOverP, Double_t lambda, Double_t phi0, |
272 |
< |
Double_t dxy, Double_t dsz) |
272 |
> |
Double_t dxy, Double_t dsz) |
273 |
|
{ |
274 |
|
// Set helix parameters. |
275 |
|
|
284 |
|
//-------------------------------------------------------------------------------------------------- |
285 |
|
inline |
286 |
|
void mithep::Track::SetErrors(Double_t qOverPErr, Double_t lambdaErr, Double_t phi0Err, |
287 |
< |
Double_t dxyErr, Double_t dszErr) |
287 |
> |
Double_t dxyErr, Double_t dszErr) |
288 |
|
{ |
289 |
|
// Set helix errors. |
290 |
|
|
299 |
|
inline |
300 |
|
const mithep::BitMask48 mithep::Track::StereoLayers() |
301 |
|
{ |
302 |
< |
// Build and return BitMask of stereo layers |
302 |
> |
// Build and return BitMask of stereo layers. |
303 |
|
|
304 |
|
mithep::BitMask48 stereoLayers; |
305 |
|
stereoLayers.SetBit(mithep::Track::TIB1S); |