eda232c35dd38c1aab5fdc80ea8e4befeb8ad3c2
[u/mrichter/AliRoot.git] / HLT / MUON / src / AliRoot / Track.cxx
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Author: Artur Szostak
4 // Email:  artur@alice.phy.uct.ac.za | artursz@iafrica.com
5 //
6 ////////////////////////////////////////////////////////////////////////////////
7
8 #include "AliRoot/Track.hpp"
9 #include <TMath.h>
10 #include "Utils.hpp"
11
12 ClassImp(AliHLTMUONTrack)
13
14
15 AliHLTMUONTrack::AliHLTMUONTrack() : TObject()
16 {
17         Init();
18 }
19
20
21 AliHLTMUONTrack::AliHLTMUONTrack(
22                 Int_t triggerid, Int_t sign, Float_t momentum, Float_t pt,
23                 const AliHLTMUONPoint hits[10], const AliHLTMUONRegion regions[10]
24         ) : TObject()
25 {
26         if (sign < -1 || +1 < sign)
27         {
28                 Init();
29                 Error("AliHLTMUONTrack", "The particle sign was not one of -1, 0 or +1. Got %d", sign);
30         }
31         else if (momentum < pt)
32         {
33                 Init();
34                 Error("AliHLTMUONTrack", "The momentum (%f) must be larger or equal to the pt (%f).",
35                         momentum, pt
36                 );
37         }
38         else if (pt < 0.0)
39         {
40                 Init();
41                 Error("AliHLTMUONTrack", "The pt must be a positive number. Got: %f", pt);
42         }
43         else
44         {
45                 fTriggerID = triggerid;
46                 fParticleSign = sign;
47                 fP = momentum;
48                 fPt = pt;
49                 for (Int_t i = 0; i < 10; i++)
50                 {
51                         fHit[i] = hits[i];
52                         fRegionOfInterest[i] = regions[i];
53                 }
54         }
55 }
56
57
58 void AliHLTMUONTrack::Init()
59 {
60         fTriggerID = -1;
61         fParticleSign = 0;
62         fP = fPt = 0.0;
63 }
64
65
66 void AliHLTMUONTrack::ParticleSign(Int_t value)
67 {
68         if (-1 <= value && value <= +1)
69                 fParticleSign = value;
70         else
71                 Error("ParticleSign",
72                         "The particle sign must be a value of -1, 0 or +1, but got %d",
73                         value
74                 );
75 }
76
77
78 void AliHLTMUONTrack::P(Float_t value)
79 {
80         if (value >= fPt)
81                 fP = value;
82         else
83                 Error("P",
84                         "Trying to assing momentum (%f) which is smaller than the pt value (%f).",
85                         value, fPt
86                 );
87 }
88
89 void AliHLTMUONTrack::Pt(Float_t value)
90 {
91         if (value >= 0.0)
92         {
93                 if (value <= fP)
94                         fPt = value;
95                 else
96                         Error("Pt",
97                                 "Trying to assign pt (%f) which is larger than the momentum value (%f).",
98                                 value, fP
99                         );
100         }
101         else
102                 Error("Pt", "Cannot have a negative value pt. Got: %f", value);
103 };
104
105
106 AliHLTMUONPoint& AliHLTMUONTrack::Hit(UInt_t chamber)
107 {
108         if (chamber < 10)
109                 return fHit[chamber];
110         else
111         {
112                 Error("Hit",
113                         "The chamber is out of range. Got: %d, but should be in [0..9].",
114                         chamber
115                 );
116                 return fHit[0];
117         }
118 }
119
120
121 const AliHLTMUONPoint& AliHLTMUONTrack::Hit(UInt_t chamber) const
122 {
123         if (chamber < 10)
124                 return fHit[chamber];
125         else
126         {
127                 Error("Hit",
128                         "The chamber is out of range. Got: %d, but should be in [0..9].",
129                         chamber
130                 );
131                 return fHit[0];
132         };
133 };
134
135
136 void AliHLTMUONTrack::Hit(UInt_t chamber, const AliHLTMUONPoint& value)
137 {
138         if (chamber < 10)
139                 fHit[chamber] = value;
140         else
141                 Error("Hit",
142                         "The chamber is out of range. Got: %d, but should be in [0..9].",
143                         chamber
144                 );
145 }
146
147
148 AliHLTMUONRegion& AliHLTMUONTrack::RegionOfInterest(UInt_t chamber)
149 {
150         if (chamber < 10)
151                 return fRegionOfInterest[chamber];
152         else
153         {
154                 Error("RegionOfInterest",
155                         "The chamber is out of range. Got: %d, but should be in [0..9].",
156                         chamber
157                 );
158                 return fRegionOfInterest[0];
159         }
160 }
161
162
163 const AliHLTMUONRegion& AliHLTMUONTrack::RegionOfInterest(UInt_t chamber) const
164 {
165         if (chamber < 10)
166                 return fRegionOfInterest[chamber];
167         else
168         {
169                 Error("RegionOfInterest",
170                         "The chamber is out of range. Got: %d, but should be in [0..9].",
171                         chamber
172                 );
173                 return fRegionOfInterest[0];
174         }
175 }
176
177
178 void AliHLTMUONTrack::RegionOfInterest(UInt_t chamber, const AliHLTMUONRegion& value)
179 {
180         if (chamber < 10)
181                 fRegionOfInterest[chamber] = value;
182         else
183                 Error("RegionOfInterest",
184                         "The chamber is out of range. Got: %d, but should be in [0..9].",
185                         chamber
186                 );
187 }
188
189
190 Bool_t AliHLTMUONTrack::HitsInRegions() const
191 {
192         for (Int_t i = 0; i < 10; i++)
193         {
194                 if ( ! fRegionOfInterest[i].Contains(fHit[i]) )
195                         return kFALSE;
196         }
197         return kTRUE;
198 }
199
200
201 ostream& operator << (ostream& os, const AliHLTMUONTrack& t)
202 {
203         os << "{trigid: " << t.fTriggerID << ", sign: " << t.fParticleSign
204            << ", p: " << t.fP << ", pt: " << t.fPt << "}";
205         return os;
206 }
207