]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveMUONChamberData.cxx
Using std::vector instead of simply vector
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveMUONChamberData.cxx
CommitLineData
d810d0de 1// $Id$
fafff680 2// Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 2006, 2007
d810d0de 3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
cb4245bb 9
d810d0de 10#include "AliEveMUONChamberData.h"
3626c858 11
3626c858 12#include <AliMUONGeometryTransformer.h>
3626c858 13#include <mapping/AliMpDEIterator.h>
14#include <mapping/AliMpSectorSegmentation.h>
15#include <mapping/AliMpSector.h>
16#include <mapping/AliMpPad.h>
3626c858 17#include <mapping/AliMpSegmentation.h>
18
3626c858 19#include <TVector2.h>
20
707b281a 21#include <EveBase/AliEveEventManager.h>
2674c15a 22
3626c858 23///////////////////////////////////////////////////////////////////////////////
24///
d810d0de 25/// AliEveMUONChamberData: geometry and digits
3626c858 26///
27///////////////////////////////////////////////////////////////////////////////
3626c858 28
3626c858 29
d810d0de 30ClassImp(AliEveMUONChamberData)
31
32AliMUONGeometryTransformer* AliEveMUONChamberData::fgTransformer = 0;
3626c858 33
57ffa5fb 34//______________________________________________________________________________
fd31e9de 35AliEveMUONChamberData::AliEveMUONChamberData(Int_t chamber) :
36 TObject(),
c76ea574 37 fChamberID(0),
38 fNDetElem(0),
39 fNDigits(0),
40 fNClusters(0),
fd31e9de 41 fNHits(0)
3626c858 42{
43 //
44 // constructor
45 //
46
47 fChamberID = chamber;
48 fNDetElem = 0;
49 fNDigits = 0;
eadce74d 50 fNClusters = 0;
51 fNHits = 0;
52
3626c858 53 for (Int_t i = 0; i < 26; i++) {
54 for (Int_t j = 0; j < 4; j++) {
55 fFrameCoord[i][j] = 0.0;
56 }
57 }
58 for (Int_t i = 0; i < 7*4096; i++) {
59 fDigitBuffer[i] = 0.0;
60 }
cef26510 61 for (Int_t i = 0; i < 5*256; i++) {
eadce74d 62 fClusterBuffer[i] = 0.0;
63 }
cef26510 64 for (Int_t i = 0; i < 3*256; i++) {
eadce74d 65 fHitBuffer[i] = 0.0;
66 }
3626c858 67
68 for (Int_t i = 0; i < 3; i++) {
69 fChamberBox[i*2 ] = +9999;
70 fChamberBox[i*2+1] = -9999;
71 }
72
8d33d1c2 73 if (fgTransformer == 0) {
b642f9a5 74 AliEveEventManager::AssertGeometry();
66e5f12c 75 fgTransformer = new AliMUONGeometryTransformer();
b642f9a5 76 fgTransformer->LoadGeometryData();
3626c858 77 }
78
79 Init(chamber);
3626c858 80}
81
57ffa5fb 82//______________________________________________________________________________
d810d0de 83AliEveMUONChamberData::~AliEveMUONChamberData()
3626c858 84{
85 //
86 // destructor
87 //
88
89}
90
57ffa5fb 91//______________________________________________________________________________
d810d0de 92void AliEveMUONChamberData::DropData()
3626c858 93{
94 //
95 // release the chamber data
96 //
97
eadce74d 98 fNDigits = 0;
99 fNClusters = 0;
100 fNHits = 0;
101
3626c858 102 return;
103
104}
105
57ffa5fb 106//______________________________________________________________________________
d810d0de 107void AliEveMUONChamberData::Init(Int_t chamber)
3626c858 108{
109 //
110 // initialize the drawing coordinates of the chamber
111 //
112
113 Float_t locP[3], gloP[3], locD[3], gloD[3];
114 Float_t deltax, deltay;
115 AliMpDEIterator it;
116 const AliMpVSegmentation *vseg;
117 const AliMpSectorSegmentation *sseg;
118 const AliMpSector *sector;
119 TVector2 position;
120 TVector2 dimension;
121
122 for ( it.First(chamber); ! it.IsDone(); it.Next() ) {
123
361fa326 124 Int_t detElemId = it.CurrentDEId();
3626c858 125
126 if (chamber < 4) {
127
361fa326 128 sseg = (AliMpSectorSegmentation*)
129 AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::kCath0);
3626c858 130 sector = sseg->GetSector();
51346b82 131
132 position = sector->Position();
3626c858 133 dimension = sector->Dimensions(); // half length
51346b82 134
3626c858 135 locP[0] = position.Px();
136 locP[1] = position.Py();
137 locD[0] = dimension.Px() * 2.;
138 locD[1] = dimension.Py() * 2.;
51346b82 139
3626c858 140 locP[2] = 0.0;
141 locD[2] = 0.0;
142
51346b82 143 fgTransformer->Local2Global(detElemId,
144 locP[0], locP[1], locP[2],
3626c858 145 gloP[0], gloP[1], gloP[2]);
51346b82 146
3626c858 147 fgTransformer->Local2Global(detElemId,
51346b82 148 locD[0], locD[1], locD[2],
3626c858 149 gloD[0], gloD[1], gloD[2]);
51346b82 150
151 fFrameCoord[fNDetElem][0] = gloP[0];
152 fFrameCoord[fNDetElem][1] = gloP[1];
153 fFrameCoord[fNDetElem][2] = gloD[0];
154 fFrameCoord[fNDetElem][3] = gloD[1];
3626c858 155 fFrameCoord[fNDetElem][4] = gloP[2]; // Z position
156
157 fChamberBox[0] = TMath::Min(fChamberBox[0],gloP[0]-gloD[0]);
158 fChamberBox[1] = TMath::Max(fChamberBox[1],gloP[0]+gloD[0]);
159 fChamberBox[2] = TMath::Min(fChamberBox[2],gloP[1]-gloD[1]);
160 fChamberBox[3] = TMath::Max(fChamberBox[3],gloP[1]+gloD[1]);
161 fChamberBox[4] = TMath::Min(fChamberBox[4],gloP[2]);
162 fChamberBox[5] = TMath::Max(fChamberBox[5],gloP[2]);
51346b82 163
3626c858 164 } else {
165
8d33d1c2 166// if (!fgSegmentation->HasDE(detElemId)) {
167// printf("Segmentation has no %d detElemId! \n",detElemId);
168// continue;
169// }
3626c858 170
361fa326 171 vseg = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::kCath0);
3626c858 172
173 if (vseg == 0) {
174 printf("No MpVSegmentation for %d detElemId! \n",detElemId);
175 continue;
176 }
177
178 deltax = vseg->Dimensions().X();
179 deltay = vseg->Dimensions().Y();
180 locP[0] = -deltax;
181 locP[1] = -deltay;
182 locD[0] = +deltax;
183 locD[1] = +deltay;
184
185 locP[2] = 0.0;
186 locD[2] = 0.0;
187
51346b82 188 fgTransformer->Local2Global(detElemId,
189 locP[0], locP[1], locP[2],
3626c858 190 gloP[0], gloP[1], gloP[2]);
51346b82 191
3626c858 192 fgTransformer->Local2Global(detElemId,
51346b82 193 locD[0], locD[1], locD[2],
3626c858 194 gloD[0], gloD[1], gloD[2]);
51346b82 195
196 fFrameCoord[fNDetElem][0] = gloP[0];
197 fFrameCoord[fNDetElem][1] = gloP[1];
198 fFrameCoord[fNDetElem][2] = gloD[0];
199 fFrameCoord[fNDetElem][3] = gloD[1];
3626c858 200 fFrameCoord[fNDetElem][4] = gloP[2]; // Z position
201
202 fChamberBox[0] = TMath::Min(fChamberBox[0],gloP[0]);
203 fChamberBox[0] = TMath::Min(fChamberBox[0],gloD[0]);
204 fChamberBox[1] = TMath::Max(fChamberBox[1],gloP[0]);
205 fChamberBox[1] = TMath::Max(fChamberBox[1],gloD[0]);
206 fChamberBox[2] = TMath::Min(fChamberBox[0],gloP[1]);
207 fChamberBox[2] = TMath::Min(fChamberBox[0],gloD[1]);
208 fChamberBox[3] = TMath::Max(fChamberBox[1],gloP[1]);
209 fChamberBox[3] = TMath::Max(fChamberBox[1],gloD[1]);
210 fChamberBox[4] = TMath::Min(fChamberBox[4],gloP[2]);
211 fChamberBox[5] = TMath::Max(fChamberBox[5],gloP[2]);
51346b82 212
3626c858 213 }
214
215 fNDetElem++;
216
217 } // end detElemId loop
218
3626c858 219}
220
57ffa5fb 221//______________________________________________________________________________
d810d0de 222void AliEveMUONChamberData::RegisterDigit(Int_t detElemId, Int_t cathode, Int_t ix, Int_t iy, Int_t charge)
3626c858 223{
224 //
225 // add a digit to this chamber
226 //
227
cef26510 228 if ((fNDigits/7) == (4096-1)) return;
229
3626c858 230 Float_t locP[3], gloP[3], locD[3], gloD[3];
231
361fa326 232 const AliMpVSegmentation* vseg = AliMpSegmentation::Instance()
233 ->GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode));
3626c858 234
235 AliMpPad pad = vseg->PadByIndices(AliMpIntPair(ix,iy),kTRUE);
51346b82 236
3626c858 237 locP[0] = pad.Position().X();
238 locP[1] = pad.Position().Y();
239 locD[0] = pad.Dimensions().X();
240 locD[1] = pad.Dimensions().Y();
51346b82 241
3626c858 242 locP[2] = 0.0;
243 locD[2] = 0.0;
244
51346b82 245 fgTransformer->Local2Global(detElemId,
246 locP[0], locP[1], locP[2],
3626c858 247 gloP[0], gloP[1], gloP[2]);
51346b82 248
3626c858 249 gloD[0] = locD[0];
250 gloD[1] = locD[1];
251 gloD[2] = gloP[2];
252
3626c858 253 if (cathode == 0) gloP[2] += 0.1;
254 if (cathode == 1) gloP[2] -= 0.1;
255
256 fDigitBuffer[fNDigits ] = gloP[0];
257 fDigitBuffer[fNDigits+1] = gloP[1];
258 fDigitBuffer[fNDigits+2] = gloD[0];
259 fDigitBuffer[fNDigits+3] = gloD[1];
260 fDigitBuffer[fNDigits+4] = gloP[2];
261 fDigitBuffer[fNDigits+5] = charge;
262 fDigitBuffer[fNDigits+6] = cathode;
263
264 fNDigits += 7;
cef26510 265
eadce74d 266}
267
57ffa5fb 268//______________________________________________________________________________
d810d0de 269void AliEveMUONChamberData::RegisterCluster(Int_t /*detElemId*/, Int_t cathode, Float_t clsX, Float_t clsY, Float_t clsZ, Float_t charge)
eadce74d 270{
271 //
272 // add a reconstructed point (cluster) to this chamber
273 //
274 // identical clusters are registered for both cathode planes ...
275 //
276
cef26510 277 if ((fNClusters/5) == (256-1)) return;
278
eadce74d 279 fClusterBuffer[fNClusters ] = clsX;
280 fClusterBuffer[fNClusters+1] = clsY;
281 fClusterBuffer[fNClusters+2] = clsZ;
282 fClusterBuffer[fNClusters+3] = charge;
283 fClusterBuffer[fNClusters+4] = cathode;
284
285 fNClusters += 5;
286
eadce74d 287}
288
57ffa5fb 289//______________________________________________________________________________
d810d0de 290void AliEveMUONChamberData::RegisterHit(Int_t /*detElemId*/, Float_t hitX, Float_t hitY, Float_t hitZ)
eadce74d 291{
292 //
293 // add a simulation hit to this chamber
294 //
295
cef26510 296 if ((fNHits/3) == (256-1)) return;
297
eadce74d 298 fHitBuffer[fNHits ] = hitX;
299 fHitBuffer[fNHits+1] = hitY;
300 fHitBuffer[fNHits+2] = hitZ;
301
eadce74d 302 fNHits += 3;
3626c858 303
304}