]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONv0.h
Out of bounds error corrected.
[u/mrichter/AliRoot.git] / MUON / AliMUONv0.h
1 #ifndef MUONv0_H
2 #define MUONv0_H
3 /////////////////////////////////////////////////////////
4 //  Manager and hits classes for set:MUON version 0    //
5 /////////////////////////////////////////////////////////
6  
7 #include "AliMUON.h"
8
9 class AliMUONv0 : public AliMUON {
10  
11 public:
12    AliMUONv0();
13    AliMUONv0(const char *name, const char *title);
14    virtual       ~AliMUONv0() {}
15    virtual void   CreateGeometry();
16    virtual void   CreateMaterials();
17    virtual void   Init();
18    virtual Int_t  IsVersion() const {return 0;}
19    virtual void   StepManager();
20    virtual void   Trigger(Float_t (*)[4], Float_t (*)[4], Int_t& iflag);
21 private:
22    ClassDef(AliMUONv0,1)  //Hits manager for set:MUON version 0
23
24 };
25 class AliMUONsegmentationV0 :
26 public AliMUONsegmentation {
27  public:
28     AliMUONsegmentationV0(){}
29     virtual ~AliMUONsegmentationV0(){}
30     //    
31     // Set Chamber Segmentation Parameters
32     virtual  void    SetPADSIZ(Float_t p1, Float_t p2);
33     virtual  void    SetDAnod(Float_t D) {fWireD = D;};
34     //
35     // Transform from pad (wire) to real coordinates and vice versa  
36     virtual Float_t GetAnod(Float_t xhit);
37     virtual void    GetPadIxy(Float_t x ,Float_t y ,Int_t   &ix,Int_t   &iy);
38     virtual void    GetPadCxy(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );
39     //
40     // Initialisation
41     virtual void Init(AliMUONchamber*);
42     //
43     // Get member data
44     virtual Float_t Dpx(){return fDpx;}
45     virtual Float_t Dpy(){return fDpy;}
46     virtual Int_t   Npx(){return fNpx;}
47     virtual Int_t   Npy(){return fNpy;}
48     //
49     // Iterate over pads
50     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
51     virtual void  NextPad();
52     virtual Int_t MorePads();
53     // Get next neighbours 
54     virtual void Neighbours
55         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
56     // Provisory RecCluster coordinates reconstructor
57     virtual void FitXY(AliMUONRecCluster* Cluster,TClonesArray* MUONdigits);
58     //
59     // Current Pad during Integration
60     virtual Int_t  Ix(){return fix;}
61     virtual Int_t  Iy(){return fiy;}    
62     virtual Int_t  ISector(){return 1;}
63     //
64     // Signal Generation Condition during Stepping
65     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
66     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
67     virtual void IntegrationLimits
68         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
69     //
70     // Identification
71     ClassDef(AliMUONsegmentationV0,1)
72          protected:
73     //
74     // Implementation of the segmentation data
75     // Version 0 models rectangular pads with the same dimensions all
76     // over the cathode plane
77     //
78     //  geometry
79     //
80     Float_t    fDpx;           // x pad width per sector  
81     Float_t    fDpy;           // y pad base width
82     Int_t      fNpx;
83     Int_t      fNpy;           // Number of pads in y
84     Float_t    fWireD;         // wire pitch
85     
86     // Chamber region consideres during disintegration (lower left and upper right corner)
87     //
88     Int_t fixmin;
89     Int_t fixmax;
90     Int_t fiymin;
91     Int_t fiymax;
92     //
93     // Current pad during integration (cursor for disintegration)
94     Int_t fix;
95     Int_t fiy;
96     Float_t fx;
97     Float_t fy;
98     //
99     // Current pad and wire during tracking (cursor at hit centre)
100     Int_t fixt;
101     Int_t fiyt;
102     Int_t fiwt;
103     Float_t fxt;
104     Float_t fyt;
105 };
106
107 class AliMUONresponseV0 : //Mathieson response
108 public AliMUONresponse {
109  public:
110     AliMUONresponseV0(){}
111     virtual ~AliMUONresponseV0(){}
112     //
113     // Configuration methods
114     // 
115     virtual void   SetRSIGM(Float_t p1) {fNsigma=p1;} 
116     virtual void   SetMUCHSP(Float_t p1) {fChslope=p1;}
117     virtual void   SetMUSIGM(Float_t p1, Float_t p2) {fChwX=p1; fChwY=p2;}
118     virtual void   SetMAXADC(Float_t p1) {fadc_satm=p1;}
119     // Mathieson parameters
120     virtual void   SetSqrtKx3(Float_t p1) {fSqrtKx3=p1;};
121     virtual void   SetKx2(Float_t p1) {fKx2=p1;};
122     virtual void   SetKx4(Float_t p1) {fKx4=p1;};
123     virtual void   SetSqrtKy3(Float_t p1) {fSqrtKy3=p1;};
124     virtual void   SetKy2(Float_t p1) {fKy2=p1;};
125     virtual void   SetKy4(Float_t p1) {fKy4=p1;};
126     virtual void   SetPitch(Float_t p1) {fPitch=p1;};
127     //
128     // Get member data
129     virtual Float_t Chslope() {return fChslope;}
130     virtual Float_t ChwX() {return fChwX;}    
131     virtual Float_t ChwY() {return fChwY;}        
132     virtual Float_t Nsigma() {return fNsigma;}    
133     virtual Float_t adc_satm() {return fadc_satm;}
134     //  
135     // Chamber response methods
136     // Pulse height from scored quantity (eloss)
137     virtual Float_t IntPH(Float_t eloss);
138     // Charge disintegration
139     virtual Float_t IntXY(AliMUONsegmentation * segmentation);
140     // Identification
141     //
142     ClassDef(AliMUONresponseV0,1)
143  protected:
144     Float_t fChslope;         // Slope of the charge distribution
145     Float_t fChwX;            // Width of the charge distribution in x
146     Float_t fChwY;            // Width of the charge distribution in y
147     Float_t fNsigma;          // Number of sigma's used for charge distribution
148     Float_t fadc_satm;        // Maximum ADC channel
149     Float_t fSqrtKx3;         // Mathieson parameters for x
150     Float_t fKx2;
151     Float_t fKx4;
152     Float_t fSqrtKy3;         // Mathieson parameters for y
153     Float_t fKy2;
154     Float_t fKy4;
155     Float_t fPitch;           //anode-cathode pitch
156 };
157
158 #endif
159
160
161
162
163
164
165