Modifications needed by the HBT analysis (P.Skowronski)
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV0.h
1 #ifndef ALIMUONSEGMENTATIONV0_H
2 #define ALIMUONSEGMENTATIONV0_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include "AliSegmentation.h"
9
10 class AliMUONChamber;
11 class TF1;
12
13 //----------------------------------------------
14 //
15 // Chamber segmentation for homogeneously segmented circular chamber
16 //
17 class AliMUONSegmentationV0 :
18 public AliSegmentation {
19  public:
20     AliMUONSegmentationV0(){fCorr=0;fChamber=0;}
21     AliMUONSegmentationV0(const AliMUONSegmentationV0 & segmentation);
22     
23     virtual ~AliMUONSegmentationV0(){}
24     // Set Chamber Segmentation Parameters
25     //
26     // Pad size Dx*Dy 
27     virtual  void    SetPadSize(Float_t p1, Float_t p2);
28     // Anod Pitch
29     virtual  void    SetDAnod(Float_t D) {fWireD = D;};
30     // Transform from pad (wire) to real coordinates and vice versa
31     //
32     // Anod wire coordinate closest to xhit
33     virtual Float_t GetAnod(Float_t xhit) const;
34     // Transform from pad to real coordinates
35     virtual void    GetPadI(Float_t x, Float_t y , Int_t &ix, Int_t &iy) ;
36     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy) ;
37     // Transform from real to pad coordinates
38     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y) ;
39     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z) 
40         {z=fZ; GetPadC(ix, iy, x , y);}
41     //
42     // Initialisation
43     virtual void Init(Int_t chamber);
44     //
45     // Get member data
46     //
47     // Pad size in x
48     virtual Float_t Dpx() const {return fDpx;}
49     // Pad size in y
50     virtual Float_t Dpy() const {return fDpy;}
51     // Pad size in x by Sector
52     virtual Float_t Dpx(Int_t) const {return fDpx;}
53     // Pad size in y by Secto
54     virtual Float_t Dpy(Int_t) const {return fDpy;}
55     // Maximum number of Pads in x
56     virtual Int_t   Npx() const {return fNpx;}
57     // Maximum number of Pads in y
58     virtual Int_t   Npy() const {return fNpy;}
59     // Set pad position
60     virtual void     SetPad(Int_t ix, Int_t iy);
61     // Set hit position
62     virtual void     SetHit(Float_t xhit, Float_t yhit);
63     virtual void     SetHit(Float_t xhit, Float_t yhit, Float_t zhit);
64     // Iterate over pads
65     // Initialiser
66     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
67     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy);
68     // Stepper
69     virtual void  NextPad();
70     // Condition
71     virtual Int_t MorePads();
72     //
73     // Distance between 1 pad and a position
74     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *
75 dummy);
76     // Number of pads read in parallel and offset to add to x 
77     // (specific to LYON, but mandatory for display)
78     virtual void GetNParallelAndOffset(Int_t iX, Int_t iY, Int_t *Nparallel, Int_t *Offset);
79     // Get next neighbours 
80     virtual void Neighbours
81         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]) ;
82     //
83     // Current Pad during Integration
84     // x-coordinaten
85     virtual Int_t  Ix() {return fIx;}
86     // y-coordinate
87     virtual Int_t  Iy() {return fIy;}
88     // current sector
89     virtual Int_t  ISector() {return 1;}
90     // calculate sector from pad coordinates
91     virtual Int_t  Sector(Int_t ix, Int_t iy);
92     virtual Int_t  Sector(Float_t x, Float_t y);
93     //
94     // Signal Generation Condition during Stepping
95     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) ;
96     // Initialise signal gneration at coord (x,y,z)
97     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
98     // Current integration limits
99     virtual void IntegrationLimits
100         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
101     // Test points for auto calibration
102     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
103     // Draw segmentation zones
104     virtual void Draw(const char *opt="") const;
105     // Function for systematic corrections
106     // Set the correction function
107     virtual void SetCorrFunc(Int_t dum, TF1* func);
108     // Get the correction Function
109     virtual TF1* CorrFunc(Int_t) const {return fCorr;}
110     // assignment operator
111     AliMUONSegmentationV0& operator=(const AliMUONSegmentationV0& rhs);
112     
113     ClassDef(AliMUONSegmentationV0,1) //Class for homogeneous segmentation
114         protected:
115     //
116     // Implementation of the segmentation class:
117     // Version 0 models rectangular pads with the same dimensions all
118     // over the cathode plane. Chamber has circular geometry.
119     // 
120     //  Geometry parameters
121     //
122     Float_t    fDpx;           // x pad width per sector  
123     Float_t    fDpy;           // y pad base width
124     Int_t      fNpx;           // Number of pads in x
125     Int_t      fNpy;           // Number of pads in y
126     Float_t    fWireD;         // wire pitch
127     Float_t    fRmin;          // inner radius
128     Float_t    fRmax;          // outer radius
129     
130     
131     // Chamber region consideres during disintegration   
132     Int_t fIxmin; // ! lower left  x
133     Int_t fIxmax; // ! lower left  y
134     Int_t fIymin; // ! upper right x
135     Int_t fIymax; // ! upper right y 
136     //
137     // Current pad during integration (cursor for disintegration)
138     Int_t fIx;  // ! pad coord.  x 
139     Int_t fIy;  // ! pad coord.  y 
140     Float_t fX; // ! real coord. x
141     Float_t fY; // ! real ccord. y
142     //
143     // Current pad and wire during tracking (cursor at hit centre)
144     //
145     //
146     Float_t fXhit;  // ! x-position of hit
147     Float_t fYhit;  // ! y-position of hit
148     // Reference point to define signal generation condition
149     Int_t fIxt;     // ! pad coord. x
150     Int_t fIyt;     // ! pad coord. y
151     Int_t fIwt;     // ! wire number
152     Float_t fXt;    // ! x
153     Float_t fYt;    // ! y
154     TF1*    fCorr;  // ! correction function
155     //
156     AliMUONChamber* fChamber; // ! Reference to mother chamber
157     Int_t fId;                // Identifier
158     Float_t fZ;               // z-position of chamber
159 };
160 #endif
161
162
163
164
165
166
167
168
169
170
171