1 #ifndef ALIMUONSEGMENTATIONV01_H
2 #define ALIMUONSEGMENTATIONV01_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
9 /////////////////////////////////////////////////////
10 // Segmentation and Response classes version 01 //
11 /////////////////////////////////////////////////////
15 #include "AliMUONSegmentationV0.h"
16 #include "TArrayI.h" // because the object, and not the pointer,
17 #include "TArrayF.h" // belongs to the class
20 class AliMUONSegmentationV01 :
21 public AliMUONSegmentationV0 {
23 AliMUONSegmentationV01();
24 AliMUONSegmentationV01(const AliMUONSegmentationV01 & segmentation);
26 virtual ~AliMUONSegmentationV01(){}
28 // Set Chamber Segmentation Parameters
30 virtual void SetPadDivision(Int_t ndiv[4]);
32 virtual void SetSegRadii(Float_t r[4]);
34 // Transform from pad (wire) to real coordinates and vice versa
36 // Transform from pad to real coordinates
37 virtual void GetPadI(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy);
38 virtual void GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy)
39 {GetPadI(x, y, ix, iy);}
40 // Transform from real to pad coordinates
41 virtual void GetPadC(Int_t ix,Int_t iy,Float_t &x ,Float_t &y );
42 virtual void GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z)
43 {z=fZ; GetPadC(ix, iy, x , y);}
46 virtual void Init(Int_t chamber);
50 // Pad size in x by Sector
51 virtual Float_t Dpx(Int_t isec) const;
52 // Pad size in y by Sector
53 virtual Float_t Dpy(Int_t isec) const;
54 // Max number of Pads in x
55 virtual Int_t Npx() const {return fNpxS[fNsec-1][1]+1;}
57 virtual void SetPad(Int_t ix,Int_t iy);
61 virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
62 virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy)
63 {FirstPad(xhit, yhit, dx, dy);}
65 virtual void NextPad();
67 virtual Int_t MorePads();
68 // Get next neighbours
69 virtual void Neighbours
70 (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
72 // Current Pad during Integration
74 virtual Int_t ISector() {return fSector;}
75 // calculate sector from pad coordinates
76 virtual Int_t Sector(Int_t ix, Int_t iy);
79 // Current integration limits
80 virtual void IntegrationLimits
81 (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
82 // Test points for auto calibration
83 void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
85 // Draw segmentation zones
86 virtual void Draw(const char *opt="") const;
87 // Function for systematic corrections
88 // Set the correction function
89 virtual void SetCorrFunc(Int_t dum, TF1* func);
90 // Get the correction function
91 virtual TF1* CorrFunc(Int_t iZone) const;
92 // assignment operator
93 AliMUONSegmentationV01& operator=(const AliMUONSegmentationV01& rhs);
94 ClassDef(AliMUONSegmentationV01,1) // Segmentation approximating circular zones with different pad size
98 Int_t fNsec; // Number of sectors
99 TArrayF* fRSec; // Sector outer radia
100 TArrayI* fNDiv; // Pad size division
101 TArrayF* fDpxD; // y pad width per sector
103 Int_t fNpxS[10][1000]; // Number of pads per sector in x
104 Float_t fCx[10][1000]; // pad-sector contour x vs y
105 // Chamber region consideres during disintegration
106 // (lower left and upper right corner)
108 Float_t fXmin; // lower left x
109 Float_t fXmax; // lower left y
110 Float_t fYmin; // upper right x
111 Float_t fYmax; // upper right y
114 // Current pad during integration (cursor for disintegration)
115 Int_t fSector; // Current sector
117 TObjArray *fCorr; // Correction functions