fe4da5cc |
1 | #ifndef RICH_H |
2 | #define RICH_H |
3da30618 |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
6 | /* $Id$ */ |
7 | |
fe4da5cc |
8 | //////////////////////////////////////////////// |
9 | // Manager and hits classes for set:RICH // |
10 | //////////////////////////////////////////////// |
fe4da5cc |
11 | #include "AliDetector.h" |
12 | #include "AliHit.h" |
ddae0931 |
13 | #include "AliRICHConst.h" |
14 | #include "AliDigit.h" |
15 | #include <TVector.h> |
16 | #include <TObjArray.h> |
17 | #include <TFile.h> |
18 | #include <TTree.h> |
19 | #include <TRotMatrix.h> |
fe4da5cc |
20 | |
ddae0931 |
21 | static const int NCH=7; |
22 | typedef enum {mip, cerenkov} Response_t; |
fe4da5cc |
23 | |
ddae0931 |
24 | class AliRICHcluster; |
25 | class AliRICHchamber; |
26 | class AliRICHRecCluster; |
27 | class AliRICHCerenkov; |
fe4da5cc |
28 | |
ddae0931 |
29 | //---------------------------------------------- |
30 | //---------------------------------------------- |
31 | // |
32 | // Chamber segmentation virtual base class |
33 | // |
34 | class AliRICHsegmentation : |
35 | public TObject { |
36 | |
37 | public: |
38 | |
39 | // Set Chamber Segmentation Parameters |
40 | virtual void SetPADSIZ(Float_t p1, Float_t p2) =0; |
41 | virtual void SetDAnod(Float_t D) =0; |
42 | // Transform from pad (wire) to real coordinates and vice versa |
43 | virtual Float_t GetAnod(Float_t xhit) =0; |
44 | virtual void GetPadIxy(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy)=0; |
45 | virtual void GetPadCxy(Int_t ix,Int_t iy,Float_t &x ,Float_t &y )=0; |
46 | // |
47 | // Initialisation |
48 | virtual void Init(AliRICHchamber*) =0; |
49 | // |
50 | // Get member data |
51 | virtual Float_t Dpx() =0; |
52 | virtual Float_t Dpy() =0; |
53 | virtual Int_t Npx() =0; |
54 | virtual Int_t Npy() =0; |
55 | // |
56 | // Iterate over pads |
57 | virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy) =0; |
58 | virtual void NextPad()=0; |
59 | virtual Int_t MorePads() =0; |
60 | // Get next neighbours |
61 | virtual void Neighbours |
62 | (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]) =0; |
63 | // Provisory RecCluster coordinates reconstructor |
64 | virtual void FitXY(AliRICHRecCluster* Cluster,TClonesArray* RICHdigits) =0; |
65 | // |
66 | // Current pad cursor during disintegration |
67 | virtual Int_t Ix() =0; |
68 | virtual Int_t Iy() =0; |
69 | virtual Int_t ISector() =0; |
70 | // |
71 | // Signal Generation Condition during Stepping |
72 | virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) = 0; |
73 | virtual void SigGenInit(Float_t x, Float_t y, Float_t z) = 0; |
74 | virtual void IntegrationLimits |
75 | (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2) = 0; |
76 | // |
77 | // Identification |
78 | virtual char* YourName() =0; |
79 | ClassDef(AliRICHsegmentation,1) |
80 | }; |
81 | //---------------------------------------------- |
82 | // |
83 | // Chamber response virtual base class |
84 | // |
85 | class AliRICHresponse : |
86 | public TObject { |
87 | public: |
88 | // |
89 | // Configuration methods |
90 | virtual void SetRSIGM(Float_t p1) =0; |
91 | virtual void SetMUCHSP(Float_t p1) =0; |
92 | virtual void SetMUSIGM(Float_t p1, Float_t p2) =0; |
93 | virtual void SetMAXADC(Float_t p1) =0; |
94 | // |
95 | // Get member data |
96 | virtual Float_t Chslope() =0; |
97 | virtual Float_t ChwX() =0; |
98 | virtual Float_t ChwY() =0; |
99 | virtual Float_t Nsigma() =0; |
100 | virtual Float_t adc_satm() =0; |
101 | // |
102 | // Chamber response methods |
103 | // Pulse height from scored quantity (eloss) |
f91473f6 |
104 | virtual Float_t IntPH(Float_t eloss=0) =0; |
105 | // virtual Float_t IntPH() =0; |
ddae0931 |
106 | virtual Int_t FeedBackPhotons(Float_t *source, Float_t qtot) =0; |
107 | // Charge disintegration |
108 | virtual Float_t IntXY(AliRICHsegmentation *) =0; |
109 | // |
110 | // Identification |
111 | virtual char* YourName() =0; |
112 | // Mathieson parameters |
113 | virtual void SetSqrtKx3(Float_t p1) =0; |
114 | virtual void SetKx2(Float_t p1) =0; |
115 | virtual void SetKx4(Float_t p1) =0; |
116 | virtual void SetSqrtKy3(Float_t p1) =0; |
117 | virtual void SetKy2(Float_t p1) =0; |
118 | virtual void SetKy4(Float_t p1) =0; |
119 | virtual void SetPitch(Float_t p1) =0; |
120 | ClassDef(AliRICHresponse,1) |
121 | }; |
122 | |
123 | //---------------------------------------------- |
124 | class AliRICHchamber : |
125 | public TObject |
126 | { |
127 | |
128 | public: |
129 | |
130 | //Rotation matrices for each chamber |
131 | |
132 | TRotMatrix *fChamberMatrix; |
133 | Float_t fChamberTrans[3]; |
134 | |
135 | public: |
136 | AliRICHchamber(); |
137 | ~AliRICHchamber(){} |
138 | // |
139 | // Set and get GEANT id |
140 | Int_t GetGid() {return fGid;} |
141 | void SetGid(Int_t id) {fGid=id;} |
142 | // |
143 | // Initialisation and z-Position |
144 | void Init(); |
145 | void SetZPOS(Float_t p1) {fzPos=p1;} |
146 | Float_t ZPosition() {return fzPos;} |
147 | // |
148 | |
149 | // Set inner radius of sensitive volume |
150 | void SetRInner(Float_t rmin) {frMin=rmin;} |
151 | // Set outer radius of sensitive volum |
152 | void SetROuter(Float_t rmax) {frMax=rmax;} |
153 | |
154 | // Return inner radius of sensitive volume |
155 | Float_t RInner() {return frMin;} |
156 | // Return outer radius of sensitive volum |
157 | Float_t ROuter() {return frMax;} |
158 | |
159 | //Transformation from Global to local coordinates, chamber-dependant |
160 | void LocaltoGlobal(Float_t pos[3],Float_t Localpos[3]); |
161 | |
162 | //Setting chamber specific rotation matrices |
163 | |
164 | void SetChamberTransform(Float_t Trans1,Float_t Trans2,Float_t Trans3,TRotMatrix *Matrix) |
165 | |
166 | { |
167 | fChamberMatrix=Matrix; |
168 | fChamberTrans[0]=Trans1; |
169 | fChamberTrans[1]=Trans2; |
170 | fChamberTrans[2]=Trans3; |
171 | } |
172 | |
173 | // Configure response model |
174 | void ResponseModel(Response_t res, AliRICHresponse* thisResponse); |
175 | |
176 | // |
177 | // Configure segmentation model |
178 | void SegmentationModel(Int_t i, AliRICHsegmentation* thisSegmentation) { |
179 | (*fSegmentation)[i-1] = thisSegmentation; |
180 | } |
181 | // |
182 | // Get reference to response model |
183 | AliRICHresponse* GetResponseModel(Response_t res); |
184 | // |
185 | // Get reference to segmentation model |
186 | AliRICHsegmentation* GetSegmentationModel(Int_t isec) { |
187 | return (AliRICHsegmentation *) (*fSegmentation)[isec-1]; |
188 | } |
189 | Int_t Nsec() {return fnsec;} |
190 | void SetNsec(Int_t nsec) {fnsec=nsec;} |
191 | // |
192 | // Member function forwarding to the segmentation and response models |
193 | // |
194 | // Calculate pulse height from energy loss |
195 | Float_t IntPH(Float_t eloss) {return ((AliRICHresponse*) (*fResponse)[0])->IntPH(eloss);} |
196 | Float_t IntPH() {return ((AliRICHresponse*) (*fResponse)[1])->IntPH(); } |
197 | // |
198 | // Ask segmentation if signal should be generated |
199 | Int_t SigGenCond(Float_t x, Float_t y, Float_t z) |
200 | { |
201 | if (fnsec==1) { |
202 | return ((AliRICHsegmentation*) (*fSegmentation)[0]) |
203 | ->SigGenCond(x, y, z) ; |
204 | } else { |
205 | return (((AliRICHsegmentation*) (*fSegmentation)[0]) |
206 | ->SigGenCond(x, y, z)) || |
207 | (((AliRICHsegmentation*) (*fSegmentation)[1]) |
208 | ->SigGenCond(x, y, z)) ; |
209 | } |
210 | } |
211 | // |
212 | // Initialisation of segmentation for hit |
213 | void SigGenInit(Float_t x, Float_t y, Float_t z) |
214 | { |
215 | |
216 | if (fnsec==1) { |
217 | ((AliRICHsegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ; |
218 | } else { |
219 | ((AliRICHsegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ; |
220 | ((AliRICHsegmentation*) (*fSegmentation)[1])->SigGenInit(x, y, z) ; |
221 | } |
222 | } |
223 | |
224 | // Configuration forwarding |
225 | // |
226 | void SetRSIGM(Float_t p) |
227 | { |
228 | ((AliRICHresponse*) (*fResponse)[0])->SetRSIGM(p); |
229 | ((AliRICHresponse*) (*fResponse)[1])->SetRSIGM(p); |
230 | } |
231 | void SetMUCHSP(Float_t p) |
232 | { |
233 | ((AliRICHresponse*) (*fResponse)[0])->SetMUCHSP(p); |
234 | ((AliRICHresponse*) (*fResponse)[1])->SetMUCHSP(p); |
235 | } |
236 | void SetMUSIGM(Float_t p1, Float_t p2) |
237 | { |
238 | ((AliRICHresponse*) (*fResponse)[0])->SetMUSIGM(p1,p2); |
239 | ((AliRICHresponse*) (*fResponse)[1])->SetMUSIGM(p1,p2); |
240 | } |
241 | void SetMAXADC(Float_t p) |
242 | { |
243 | ((AliRICHresponse*) (*fResponse)[0])->SetMAXADC(p); |
244 | ((AliRICHresponse*) (*fResponse)[1])->SetMAXADC(p); |
245 | } |
246 | void SetSqrtKx3(Float_t p) |
247 | { |
248 | ((AliRICHresponse*) (*fResponse)[0])->SetSqrtKx3(p); |
249 | ((AliRICHresponse*) (*fResponse)[1])->SetSqrtKx3(p); |
250 | } |
251 | void SetKx2(Float_t p) |
252 | { |
253 | ((AliRICHresponse*) (*fResponse)[0])->SetKx2(p); |
254 | ((AliRICHresponse*) (*fResponse)[1])->SetKx2(p); |
255 | } |
256 | void SetKx4(Float_t p) |
257 | { |
258 | ((AliRICHresponse*) (*fResponse)[0])->SetKx4(p); |
259 | ((AliRICHresponse*) (*fResponse)[1])->SetKx4(p); |
260 | } |
261 | void SetSqrtKy3(Float_t p) |
262 | { |
263 | ((AliRICHresponse*) (*fResponse)[0])->SetSqrtKy3(p); |
264 | ((AliRICHresponse*) (*fResponse)[1])->SetSqrtKy3(p); |
265 | } |
266 | void SetKy2(Float_t p) |
267 | { |
268 | ((AliRICHresponse*) (*fResponse)[0])->SetKy2(p); |
269 | ((AliRICHresponse*) (*fResponse)[1])->SetKy2(p); |
270 | } |
271 | void SetKy4(Float_t p) |
272 | { |
273 | ((AliRICHresponse*) (*fResponse)[0])->SetKy4(p); |
274 | ((AliRICHresponse*) (*fResponse)[1])->SetKy4(p); |
275 | } |
276 | |
277 | void SetPitch(Float_t p) |
278 | { |
279 | ((AliRICHresponse*) (*fResponse)[0])->SetPitch(p); |
280 | ((AliRICHresponse*) (*fResponse)[1])->SetPitch(p); |
281 | } |
282 | |
283 | void SetPADSIZ(Int_t isec, Float_t p1, Float_t p2) { |
284 | ((AliRICHsegmentation*) (*fSegmentation)[isec-1])->SetPADSIZ(p1,p2); |
285 | } |
286 | // |
287 | // Cluster formation method |
288 | void DisIntegration(Float_t, Float_t, Float_t, Int_t&x, Float_t newclust[6][500], Response_t res); |
289 | ClassDef(AliRICHchamber,1) |
290 | |
291 | private: |
292 | |
293 | // Maximum and Minimum Chamber size |
294 | Float_t frMin; |
295 | Float_t frMax; |
296 | // GEANT volume if for sensitive volume of this chamber |
297 | Int_t fGid; |
298 | // z-position of this chamber |
299 | Float_t fzPos; |
300 | // The segmentation models for the cathode planes |
301 | // fnsec=1: one plane segmented, fnsec=2: both planes are segmented. |
302 | Int_t fnsec; |
303 | TObjArray *fSegmentation; |
304 | TObjArray *fResponse; |
305 | |
fe4da5cc |
306 | }; |
307 | |
fe4da5cc |
308 | |
ddae0931 |
309 | |
310 | class AliRICHcluster : public TObject { |
fe4da5cc |
311 | public: |
ddae0931 |
312 | |
313 | Int_t fHitNumber; // Hit number |
314 | Int_t fCathode; // Cathode number |
315 | Int_t fQ ; // Total charge |
316 | Int_t fPadX ; // Pad number along X |
317 | Int_t fPadY ; // Pad number along Y |
318 | Int_t fQpad ; // Charge per pad |
319 | Int_t fRSec ; // R -sector of pad |
320 | |
fe4da5cc |
321 | public: |
ddae0931 |
322 | AliRICHcluster() { |
323 | fHitNumber=fQ=fPadX=fPadY=fQpad=fRSec=0; |
324 | } |
325 | AliRICHcluster(Int_t *clhits); |
326 | virtual ~AliRICHcluster() {;} |
327 | |
328 | ClassDef(AliRICHcluster,1) //Cluster object for set:RICH |
329 | }; |
330 | |
331 | |
332 | class AliRICHreccluster : public TObject { |
fe4da5cc |
333 | public: |
ddae0931 |
334 | |
335 | Int_t fTracks[3]; //labels of overlapped tracks |
336 | |
337 | Int_t fQ ; // Q of cluster (in ADC counts) |
338 | Float_t fX ; // X of cluster |
339 | Float_t fY ; // Y of cluster |
340 | |
341 | public: |
342 | AliRICHreccluster() { |
343 | fTracks[0]=fTracks[1]=fTracks[2]=0; |
344 | fQ=0; fX=fY=0; |
345 | } |
346 | virtual ~AliRICHreccluster() {;} |
347 | |
348 | ClassDef(AliRICHreccluster,1) //Cluster object for set:RICH |
349 | }; |
350 | |
351 | //_____________________________________________________________________________ |
fe4da5cc |
352 | |
ddae0931 |
353 | class AliRICHdigit : public TObject { |
354 | public: |
355 | Int_t fPadX; // Pad number along x |
356 | Int_t fPadY ; // Pad number along y |
357 | Int_t fSignal; // Signal amplitude |
358 | |
359 | |
360 | Int_t fTcharges[10]; // charge per track making this digit (up to 10) |
361 | Int_t fTracks[10]; // tracks making this digit (up to 10) |
362 | |
363 | |
364 | |
365 | public: |
366 | AliRICHdigit() {} |
367 | AliRICHdigit(Int_t *digits); |
368 | AliRICHdigit(Int_t *tracks, Int_t *charges, Int_t *digits); |
369 | virtual ~AliRICHdigit() {} |
370 | |
371 | |
372 | ClassDef(AliRICHdigit,1) //Digits for set:RICH |
373 | }; |
fe4da5cc |
374 | //_____________________________________________________________________________ |
fe4da5cc |
375 | |
ddae0931 |
376 | class AliRICHlist : public AliRICHdigit { |
377 | public: |
378 | |
379 | Int_t fRpad; // r_pos of pad |
380 | Int_t fChamber; // chamber number of pad |
381 | TObjArray *fTrackList; |
382 | |
383 | |
384 | public: |
385 | AliRICHlist() {fTrackList=0;} |
386 | AliRICHlist(Int_t ich, Int_t *digits); |
387 | virtual ~AliRICHlist() {} |
388 | |
389 | TObjArray *TrackList() {return fTrackList;} |
390 | |
391 | ClassDef(AliRICHlist,1) //Digits for set:RICH |
392 | }; |
393 | //___________________________________________ |
394 | |
395 | |
396 | //___________________________________________ |
397 | |
398 | class AliRICHhit : public AliHit { |
399 | public: |
400 | Int_t fChamber; // Chamber number |
401 | Float_t fParticle; // Geant3 particle type |
402 | Float_t fTheta ; // Incident theta angle in degrees |
403 | Float_t fPhi ; // Incident phi angle in degrees |
404 | Float_t fTlength; // Track length inside the chamber |
405 | Float_t fEloss; // ionisation energy loss in gas |
406 | Int_t fPHfirst; // first padhit |
407 | Int_t fPHlast; // last padhit |
408 | public: |
409 | AliRICHhit() {} |
410 | AliRICHhit(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *hits); |
411 | virtual ~AliRICHhit() {} |
412 | |
413 | ClassDef(AliRICHhit,1) //Hits object for set:RICH |
414 | }; |
415 | |
416 | //------------------------------------------------ |
417 | // Cerenkov photon object |
418 | //------------------------------------------------ |
fe4da5cc |
419 | |
ddae0931 |
420 | class AliRICHCerenkov: public AliHit { |
421 | public: |
422 | Int_t fChamber; // Chamber number |
423 | Float_t fTheta ; // Incident theta angle in degrees |
424 | Float_t fPhi ; // Incident phi angle in degrees |
425 | Float_t fTlength; // Track length inside the chamber |
426 | Int_t fPHfirst; // first padhit |
427 | Int_t fPHlast; // last padhit |
428 | public: |
429 | AliRICHCerenkov() {} |
430 | AliRICHCerenkov(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *Cerenkovs); |
431 | virtual ~AliRICHCerenkov() {} |
432 | |
433 | ClassDef(AliRICHCerenkov,1) //Cerenkovs object for set:RICH |
434 | }; |
435 | |
436 | //-------------------------------------------------- |
437 | |
438 | class AliRICH : public AliDetector { |
439 | public: |
440 | AliRICH(); |
441 | AliRICH(const char *name, const char *title); |
442 | virtual ~AliRICH(); |
443 | virtual void AddHit(Int_t, Int_t*, Float_t*); |
444 | virtual void AddCerenkov(Int_t, Int_t*, Float_t*); |
445 | virtual void AddCluster(Int_t*); |
446 | virtual void AddDigits(Int_t, Int_t*, Int_t*, Int_t*); |
447 | virtual void AddRecCluster(Int_t iCh, Int_t iCat, |
448 | AliRICHRecCluster* Cluster); |
449 | virtual void BuildGeometry(); |
450 | virtual void CreateGeometry() {} |
451 | virtual void CreateMaterials() {} |
452 | virtual void StepManager(); |
453 | Int_t DistancetoPrimitive(Int_t px, Int_t py); |
454 | virtual Int_t IsVersion() const =0; |
455 | // |
456 | TClonesArray *Clusters() {return fClusters;} |
457 | TClonesArray *Cerenkovs() {return fCerenkovs;} |
458 | virtual void MakeBranch(Option_t *opt=" "); |
459 | void SetTreeAddress(); |
460 | virtual void ResetHits(); |
461 | virtual void ResetDigits(); |
462 | virtual void ResetRecClusters(); |
463 | virtual void ReconstructClusters(); |
464 | virtual void Digitise(Int_t,Option_t *opt=" ",Text_t *name=" "); |
465 | // |
466 | // Configuration Methods (per station id) |
467 | // |
468 | // Set Chamber Segmentation Parameters |
469 | // id refers to the station and isec to the cathode plane |
470 | virtual void SetPADSIZ(Int_t id, Int_t isec, Float_t p1, Float_t p2); |
471 | |
472 | // Set Signal Generation Parameters |
473 | virtual void SetRSIGM(Int_t id, Float_t p1); |
474 | virtual void SetMUCHSP(Int_t id, Float_t p1); |
475 | virtual void SetMUSIGM(Int_t id, Float_t p1, Float_t p2); |
476 | virtual void SetMAXADC(Int_t id, Float_t p1); |
477 | // Set Segmentation and Response Model |
478 | virtual void SetSegmentationModel(Int_t id, Int_t isec, AliRICHsegmentation *segmentation); |
479 | virtual void SetResponseModel(Int_t id, Response_t res, AliRICHresponse *response); |
480 | virtual void SetNsec(Int_t id, Int_t nsec); |
481 | // Set Stepping Parameters |
482 | virtual void SetSMAXAR(Float_t p1); |
483 | virtual void SetSMAXAL(Float_t p1); |
484 | virtual void SetDMAXAR(Float_t p1); |
485 | virtual void SetDMAXAL(Float_t p1); |
486 | virtual void SetRICHACC(Bool_t acc=0, Float_t angmin=2, Float_t angmax=9); |
487 | // Response Simulation |
488 | virtual void MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id,Response_t res); |
489 | // Return reference to Chamber #id |
490 | virtual AliRICHchamber& Chamber(Int_t id) {return *((AliRICHchamber *) (*fChambers)[id]);} |
491 | // Retrieve pad hits for a given Hit |
492 | virtual AliRICHcluster* FirstPad(AliRICHhit *, TClonesArray *); |
493 | virtual AliRICHcluster* NextPad(TClonesArray *); |
494 | // Return pointers to digits |
495 | TObjArray *Dchambers() {return fDchambers;} |
496 | Int_t *Ndch() {return fNdch;} |
497 | virtual TClonesArray *DigitsAddress(Int_t id) {return ((TClonesArray *) (*fDchambers)[id]);} |
498 | // Return pointers to reconstructed clusters |
499 | virtual TObjArray *RecClusters(Int_t iCh, Int_t iCat) |
500 | {return ( (TObjArray*) (*fRecClusters)[iCh+iCat*10]);} |
501 | |
502 | |
503 | protected: |
504 | TObjArray *fChambers; // List of Tracking Chambers |
505 | Int_t fNclusters; // Number of clusters |
506 | Int_t fNcerenkovs; // Number of cerenkovs |
507 | TClonesArray *fClusters; // List of clusters |
508 | TObjArray *fDchambers; // List of digits |
509 | TObjArray *fRecClusters; // List of clusters |
510 | TClonesArray *fCerenkovs; // List of cerenkovs |
511 | Int_t *fNdch; // Number of digits |
512 | Text_t *fFileName; // Filename for event mixing |
513 | |
514 | |
515 | TObjArray *fRawClusters; // List of raw clusters |
516 | Int_t *fNrawch; // Number of raw clusters |
517 | TObjArray *fCathCorrel; // List of correlated clusters |
518 | Int_t *fNcorch; // Number of correl clusters |
519 | TTree *fTreeC; // Cathode correl index tree |
520 | |
521 | // |
522 | Bool_t fAccCut; //Transport acceptance cut |
523 | Float_t fAccMin; //Minimum acceptance cut used during transport |
524 | Float_t fAccMax; //Minimum acceptance cut used during transport |
525 | // |
526 | |
527 | // Stepping Parameters |
528 | Float_t fMaxStepGas; // Maximum step size inside the chamber gas |
529 | Float_t fMaxStepAlu; // Maximum step size inside the chamber aluminum |
530 | Float_t fMaxDestepGas; // Maximum relative energy loss in gas |
531 | Float_t fMaxDestepAlu; // Maximum relative energy loss in aluminum |
532 | |
533 | protected: |
534 | |
535 | ClassDef(AliRICH,1) //Hits manager for set:RICH |
536 | }; |
537 | //___________________________________________ |
538 | class AliRICHRecCluster : public TObject { |
539 | public: |
540 | AliRICHRecCluster() ; |
541 | AliRICHRecCluster(Int_t FirstDigit,Int_t Ichamber, Int_t Icathod) ; |
542 | virtual ~AliRICHRecCluster(); |
543 | virtual void AddDigit(Int_t Digit); |
544 | virtual Int_t FirstDigitIndex(); |
545 | virtual Int_t NextDigitIndex(); |
546 | virtual Int_t InvalidDigitIndex() {return -1;} |
547 | |
548 | virtual Int_t NDigits(); |
549 | virtual void Finish(); // Nothing yet ... |
550 | virtual Int_t GetCathod() {return fCathod;} |
551 | virtual Int_t GetChamber() {return fChamber;} |
552 | |
553 | public: |
554 | Float_t fX; // reconstructed x |
555 | Float_t fY; // reconstructed y |
556 | |
557 | protected: |
558 | TArrayI *fDigits; // List of digits indexes for that cluster |
559 | Int_t fNdigit; // Number of digits indexes stored; |
560 | Int_t fCathod; // Number of the cathod to be used; |
561 | Int_t fChamber; // Number of the chamber to be used; |
562 | Int_t fCurrentDigit; // Current Digit inside an iteration |
563 | |
564 | ClassDef(AliRICHRecCluster,1) //Cluster object for set:RICH |
565 | }; |
566 | //___________________________________________ |
fe4da5cc |
567 | #endif |
568 | |
569 | |
570 | |
ddae0931 |
571 | |
572 | |
573 | |
574 | |
575 | |
576 | |
577 | |
578 | |
579 | |
580 | |
581 | |
582 | |