]>
Commit | Line | Data |
---|---|---|
9aa7ebff | 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 | } |