]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AOD/AliAODTrdTrack.cxx
- AliAnalysisTaskESDfilter: increase class version
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODTrdTrack.cxx
1 #include "AliAODTrdTrack.h"
2
3 AliAODTrdTrack::AliAODTrdTrack() :
4   AliVTrdTrack(),
5   fGlobalStack(-1),
6   fPID(0),
7   fLayerMask(0),
8   fA(0),
9   fFlagsTiming(0),
10   fTracklets(),
11   fTrackMatch(0x0),
12   fLabel(-1)
13 {
14   // default constructor
15
16   fTracklets.SetClass("AliAODTrdTracklet", 6);
17 }
18
19 AliAODTrdTrack::AliAODTrdTrack(const AliVTrdTrack &rhs) :
20   AliVTrdTrack(rhs),
21   fGlobalStack(5*rhs.GetSector() + rhs.GetStack()),
22   fPID(rhs.GetPID()),
23   fLayerMask(rhs.GetLayerMask()),
24   fA(rhs.GetA()),
25   fFlagsTiming(rhs.GetFlagsTiming()),
26   fTracklets(),
27   fTrackMatch(rhs.GetTrackMatch()),
28   fLabel(rhs.GetLabel())
29 {
30   // constructor from abstract base class
31
32   // copy the contributing tracklets
33   for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
34     const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
35     if (trkl)
36       new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
37   }
38 }
39
40 AliAODTrdTrack::AliAODTrdTrack(const AliAODTrdTrack& rhs) :
41   AliVTrdTrack(rhs),
42   fGlobalStack(rhs.fGlobalStack),
43   fPID(rhs.fPID),
44   fLayerMask(rhs.fLayerMask),
45   fA(rhs.fA),
46   fFlagsTiming(rhs.fFlagsTiming),
47   fTracklets(),
48   fTrackMatch(rhs.fTrackMatch),
49   fLabel(rhs.fLabel)
50 {
51   // copy constructor
52
53   // copy the contributing tracklets
54   for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
55     const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
56     if (trkl)
57       new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
58   }
59 }
60
61 AliAODTrdTrack& AliAODTrdTrack::operator=(const AliAODTrdTrack& rhs)
62 {
63   // assignment operator
64
65   if (&rhs != this)
66     AliVTrdTrack::operator=(rhs);
67
68   fGlobalStack = rhs.fGlobalStack;
69   fPID         = rhs.fPID;
70   fLayerMask   = rhs.fLayerMask;
71   fA           = rhs.fA;
72   fFlagsTiming = rhs.fFlagsTiming;
73   fTrackMatch  = rhs.fTrackMatch;
74   fLabel       = rhs.fLabel;
75
76   // assign the contributing tracklets
77   for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
78     const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
79     if (trkl)
80       new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
81   }
82
83   return *this;
84 }
85
86 void AliAODTrdTrack::Copy(TObject &rhs) const
87 {
88   // copy
89
90   AliVTrdTrack::Copy(rhs);
91 }
92
93 Int_t AliAODTrdTrack::GetPt() const
94 {
95   // calculate pt from a as done in hardware
96
97   const Int_t maskIdLut[64] = {
98     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
99     -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
100     -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
101     -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
102   };
103
104   const Int_t c1Lut[32] = {
105     -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
106     -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
107     -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
108     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
109   };
110
111   if (this->GetA() != 0) {
112     Int_t layerMaskId = maskIdLut[this->GetLayerMask()];
113     Int_t c1 = c1Lut[layerMaskId];
114     Int_t c1Ext = c1 << 8;
115     Int_t ptRawStage4 = c1Ext / ((this->GetA() >> 2) != 0 ? (this->GetA() >> 2) : 1 );
116     Int_t ptRawComb4 = ptRawStage4;
117     Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
118
119     return -ptExtComb4/2;
120   }
121   else
122     return 0;
123 }