]>
Commit | Line | Data |
---|---|---|
ee84ac37 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
88cb7938 | 16 | /* $Id$ */ |
d9f43611 | 17 | |
00a7cc50 | 18 | /////////////////////////////////////////////////////////////////////////////// |
19 | // Reconstructed space point class for set:ITS | |
20 | // Reconstructed points are expressed simultaneously in two different | |
21 | // reference frames, both differing from the global system. | |
22 | // The first is referred to the sensor (see AliITSsegmentation for the | |
23 | // definition) and each point is represented by two coordinates: fXloc and | |
24 | // fZloc. This system in the code is referred to as "local" | |
25 | // The second is used for tracking (V2, SA and MI versions) and the X axis | |
26 | // represents the radial coordinate (this system is, in the bending plane, | |
27 | // a rotated system w.r.t. the global reference system). | |
28 | // Each reaconstructed point is represented by two coordinates: fY and fZ, | |
29 | // inherited from AliCluster. This system in the code is referred to as | |
30 | // "trackingV2". | |
31 | /////////////////////////////////////////////////////////////////////////////// | |
e8189707 | 32 | |
2499b21b | 33 | #include <TGeoMatrix.h> |
e8189707 | 34 | #include "AliITSRecPoint.h" |
75fb37cc | 35 | #include "AliAlignObj.h" |
36 | ||
e8189707 | 37 | ClassImp(AliITSRecPoint) |
9671cc24 | 38 | |
00a7cc50 | 39 | //_____________________________________________________________ |
e56160b8 | 40 | AliITSRecPoint::AliITSRecPoint(): AliCluster(), |
e56160b8 | 41 | fXloc(0), |
42 | fZloc(0), | |
43 | fdEdX(0), | |
44 | fIndex(0), | |
45 | fQ(0), | |
46 | fLayer(0), | |
47 | fNz(0), | |
48 | fNy(0), | |
49 | fChargeRatio(0), | |
50 | fType(0), | |
b2558977 | 51 | fDeltaProb(0), |
52 | fDriftTime(0.) | |
75fb37cc | 53 | { |
54 | // default constructor | |
00a7cc50 | 55 | } |
56 | ||
57 | //________________________________________________________________________ | |
75fb37cc | 58 | AliITSRecPoint::AliITSRecPoint(Int_t *lab,Float_t *hit, Int_t *info, Bool_t local): |
ae079791 | 59 | AliCluster(AliGeomManager::LayerToVolUID((info[2]+AliGeomManager::kSPD1),lab[3]&0x3FF),hit,0,0,lab), |
e56160b8 | 60 | fXloc(0), |
61 | fZloc(0), | |
62 | fdEdX(0), | |
63 | fIndex(lab[3]), | |
64 | fQ(hit[4]), | |
65 | fLayer(info[2]), | |
66 | fNz(info[1]), | |
67 | fNy(info[0]), | |
68 | fChargeRatio(0), | |
69 | fType(0), | |
b2558977 | 70 | fDeltaProb(0), |
71 | fDriftTime(0.) | |
e56160b8 | 72 | { |
00a7cc50 | 73 | //standard constructor used in AliITSClusterFinderV2 |
e56160b8 | 74 | |
75fb37cc | 75 | if (!local) { // Cluster V2 |
76 | Double_t txyz[3] = {GetX(), GetY(), GetZ()}; | |
77 | Double_t lxyz[3] = {0, 0, 0}; | |
78 | GetTracking2LocalMatrix()->LocalToMaster(txyz,lxyz); | |
79 | fXloc = lxyz[0]; fZloc = lxyz[2]; | |
465c1533 | 80 | if(fLayer==4) hit[5]=-hit[5]; |
0a56760a | 81 | if( (fLayer==4) || (fLayer==5) ) SetSigmaYZ(hit[5]); |
75fb37cc | 82 | } |
83 | else { | |
84 | switch (fLayer) { | |
85 | case 0: | |
86 | case 1: | |
87 | fdEdX = 0; | |
88 | break; | |
89 | case 2: | |
90 | case 3: | |
91 | fdEdX=fQ*1e-6; | |
92 | break; | |
93 | case 4: | |
d695268b | 94 | fdEdX=fQ*2.16; |
95 | SetSigmaYZ(hit[5]); | |
75fb37cc | 96 | case 5: |
97 | fdEdX=fQ*2.16; | |
d695268b | 98 | hit[5]=-hit[5]; |
99 | SetSigmaYZ(hit[5]); | |
75fb37cc | 100 | break; |
101 | default: | |
102 | AliError(Form("Wrong ITS layer %d (0 -> 5)",fLayer)); | |
103 | break; | |
104 | } | |
e8a76a26 | 105 | fXloc = hit[0]; |
106 | fZloc = hit[1]; | |
75fb37cc | 107 | Double_t lxyz[3] = {fXloc, 0, fZloc}; |
108 | Double_t txyz[3] = {0, 0, 0}; | |
109 | GetTracking2LocalMatrix()->MasterToLocal(lxyz,txyz); | |
110 | ||
111 | SetX(0.); SetY(txyz[1]); SetZ(txyz[2]); | |
e56160b8 | 112 | |
00a7cc50 | 113 | } |
75fb37cc | 114 | |
00a7cc50 | 115 | } |
75fb37cc | 116 | |
00a7cc50 | 117 | //_______________________________________________________________________ |
e56160b8 | 118 | AliITSRecPoint::AliITSRecPoint(const AliITSRecPoint& pt):AliCluster(pt), |
119 | fXloc(pt.fXloc), | |
120 | fZloc(pt.fZloc), | |
121 | fdEdX(pt.fdEdX), | |
122 | fIndex(pt.fIndex), | |
123 | fQ(pt.fQ), | |
124 | fLayer(pt.fLayer), | |
125 | fNz(pt.fNz), | |
126 | fNy(pt.fNy), | |
127 | fChargeRatio(pt.fChargeRatio), | |
128 | fType(pt.fType), | |
b2558977 | 129 | fDeltaProb(pt.fDeltaProb), |
130 | fDriftTime(pt.fDriftTime) | |
75fb37cc | 131 | { |
00a7cc50 | 132 | //Copy constructor |
00a7cc50 | 133 | |
134 | } | |
135 | ||
136 | //______________________________________________________________________ | |
e56160b8 | 137 | AliITSRecPoint& AliITSRecPoint::operator=(const AliITSRecPoint& source){ |
00a7cc50 | 138 | // Assignment operator |
e56160b8 | 139 | |
140 | this->~AliITSRecPoint(); | |
141 | new(this) AliITSRecPoint(source); | |
00a7cc50 | 142 | return *this; |
e56160b8 | 143 | |
00a7cc50 | 144 | } |
145 | ||
ee84ac37 | 146 | //---------------------------------------------------------------------- |
147 | void AliITSRecPoint::Print(ostream *os){ | |
148 | //////////////////////////////////////////////////////////////////////// | |
149 | // Standard output format for this class. | |
150 | //////////////////////////////////////////////////////////////////////// | |
151 | #if defined __GNUC__ | |
152 | #if __GNUC__ > 2 | |
153 | ios::fmtflags fmt; | |
154 | #else | |
155 | Int_t fmt; | |
156 | #endif | |
157 | #else | |
9f69211c | 158 | #if defined __ICC || defined __ECC || defined __xlC__ |
ee84ac37 | 159 | ios::fmtflags fmt; |
160 | #else | |
161 | Int_t fmt; | |
162 | #endif | |
163 | #endif | |
164 | ||
165 | fmt = os->setf(ios::fixed); // set fixed floating point output | |
75fb37cc | 166 | *os << GetLabel(0) << " " << GetLabel(1) << " " << GetLabel(2) << " "; |
ee84ac37 | 167 | fmt = os->setf(ios::scientific); // set scientific for dEdX. |
012f0f4c | 168 | *os << GetX() <<" " << GetY() << " " << GetZ() << " " ; |
169 | *os << GetSigmaY2() << " " << GetSigmaZ2() << " " << GetSigmaYZ() << " "; | |
170 | fmt = os->setf(ios::fixed); | |
171 | *os << GetVolumeId() << " "<< Misalign() /*fIsMisaligned*/ << " "; | |
172 | fmt = os->setf(ios::scientific); // set scientific for dEdX. | |
173 | *os << fXloc << " " << fZloc << " " << fdEdX << " "; | |
ee84ac37 | 174 | fmt = os->setf(ios::fixed); // every fixed |
012f0f4c | 175 | *os << fIndex <<" " << fQ << " "<<fLayer <<" "<<fNz<<" "<<fNy<<" "; |
b2558977 | 176 | *os << fChargeRatio<<" " << fType << " " << fDeltaProb << " " << fDriftTime; |
ee84ac37 | 177 | os->flags(fmt); // reset back to old formating. |
178 | return; | |
179 | } | |
98a86dff | 180 | |
181 | //---------------------------------------------------------------------- | |
182 | Int_t AliITSRecPoint::GetNpixels() const { | |
183 | // | |
184 | // returns the number of pixels used for the SPD clusters | |
185 | // | |
186 | ||
187 | if(fLayer > 1) return -1; | |
188 | else return fType; | |
189 | ||
190 | } | |
191 | ||
ee84ac37 | 192 | //---------------------------------------------------------------------- |
193 | void AliITSRecPoint::Read(istream *is){ | |
194 | //////////////////////////////////////////////////////////////////////// | |
195 | // Standard input format for this class. | |
196 | //////////////////////////////////////////////////////////////////////// | |
012f0f4c | 197 | Bool_t mis; |
198 | Int_t lab[4]; | |
199 | Float_t hit[6]; | |
200 | lab[3] = 0; // ?? | |
201 | *is >> lab[0] >> lab[1] >> lab[2]; | |
202 | SetLabel(lab[0],0); SetLabel(lab[1],1); SetLabel(lab[2],2); | |
203 | *is >> hit[0] >> hit[1] >> hit[2] >> hit[3] >> hit[4] >> hit[5]; | |
204 | SetX(hit[0]);SetY(hit[1]);SetZ(hit[2]);SetSigmaY2(hit[3]); | |
205 | SetSigmaZ2(hit[4]);//fSigmaYZ=hit[5]; | |
206 | *is >> lab[0] >> mis; | |
207 | SetVolumeId(lab[0]);// fIsMisalinged = mis; | |
208 | *is >> fXloc >> fZloc >> fdEdX; | |
209 | *is >> fIndex >> fQ >> fLayer >> fNz >> fNy >> fChargeRatio >> fType; | |
b2558977 | 210 | *is >> fDeltaProb >> fDriftTime; |
012f0f4c | 211 | |
212 | return; | |
ee84ac37 | 213 | } |
214 | //---------------------------------------------------------------------- | |
215 | ostream &operator<<(ostream &os,AliITSRecPoint &p){ | |
216 | //////////////////////////////////////////////////////////////////////// | |
217 | // Standard output streaming function. | |
218 | //////////////////////////////////////////////////////////////////////// | |
219 | ||
220 | p.Print(&os); | |
221 | return os; | |
222 | } | |
223 | //---------------------------------------------------------------------- | |
224 | istream &operator>>(istream &is,AliITSRecPoint &r){ | |
225 | //////////////////////////////////////////////////////////////////////// | |
226 | // Standard input streaming function. | |
227 | //////////////////////////////////////////////////////////////////////// | |
228 | ||
229 | r.Read(&is); | |
230 | return is; | |
231 | } | |
0a56760a | 232 | //---------------------------------------------------------------------- |