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