]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationV01.h
GetPadC adapted to the AliMUONSt1GeometryBuilderV2 geometry for station 1,
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV01.h
1 #ifndef ALIMUONSEGMENTATIONV01_H
2 #define ALIMUONSEGMENTATIONV01_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 /////////////////////////////////////////////////////
10 //  Segmentation and Response classes version 01   //
11 /////////////////////////////////////////////////////
12 class AliMUON;
13 class TObjArray;
14
15 #include "AliMUONSegmentationV0.h"
16 #include "TArrayI.h" // because the object, and not the pointer,
17 #include "TArrayF.h" // belongs to the class
18
19
20 class AliMUONSegmentationV01 :
21 public AliMUONSegmentationV0 {
22  public:
23     AliMUONSegmentationV01();
24     AliMUONSegmentationV01(Int_t nsec);
25     AliMUONSegmentationV01(const AliMUONSegmentationV01 & segmentation);
26     
27     virtual ~AliMUONSegmentationV01();
28     
29     //    
30     // Set Chamber Segmentation Parameters
31     // 
32     virtual  void    SetPadDivision(Int_t ndiv[4]);
33     // Radii
34     virtual  void    SetSegRadii(Float_t  r[4]);
35     virtual  void    SetOffsetY(Float_t off) {fOffsetY = off;}
36     //
37     // Transform from pad (wire) to real coordinates and vice versa
38     //
39     // Transform from pad to real coordinates
40     virtual void    GetPadI(Float_t x ,Float_t y ,Int_t   &ix,Int_t &iy);
41     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy);
42     // Transform from real to pad coordinates
43     virtual void    GetPadC(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );
44     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z);
45     //
46     // Initialisation
47     virtual void Init(Int_t chamber);
48     //
49     // Get member data
50     //
51     // Pad size in x by Sector
52     virtual Float_t Dpx(Int_t isec) const;
53     // Pad size in y by Sector
54     virtual Float_t Dpy(Int_t isec) const;
55     // Max number of Pads in x
56     virtual Int_t   Npx() const {return fNpxS[fNsec-1][1]+1;}
57     //
58     virtual void    SetPad(Int_t ix,Int_t iy);
59     //
60     // Iterate over pads
61     // Initialiser
62     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
63     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy);
64     // Stepper
65     virtual void  NextPad();
66     // Condition
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]);
71     //
72     // Current Pad during Integration
73     // current sector
74     virtual Int_t ISector()  {return fSector;}
75     // calculate sector from pad coordinates
76     virtual Int_t Sector(Int_t ix, Int_t iy);
77     //
78     // Integration
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;
84     //
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
95  protected:
96     //  Geometry
97     //
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
102     Float_t     fOffsetY;        // Staggering offset in y
103     // Segmentation map
104     Int_t      fNpxS[10][1000];  //  Number of pads per sector in x
105     Float_t    fCx[10][1000];    //  pad-sector contour x vs y  
106     // Chamber region consideres during disintegration
107     // (lower left and upper right corner)
108     //
109     Float_t fXmin; // ! lower left  x
110     Float_t fXmax; // ! lower left  y
111     Float_t fYmin; // ! upper right x
112     Float_t fYmax; // ! upper right y 
113
114     //
115     // Current pad during integration (cursor for disintegration)
116     Int_t   fSector;   // ! Current sector
117     //
118     TObjArray *fCorrA; // ! Array of correction functions
119 };
120 #endif
121
122
123
124
125
126
127
128