]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationV01.h
Only with TGeo now (A. Gheata)
[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 // Revision of includes 07/05/2004
9
10 /////////////////////////////////////////////////////
11 //  Segmentation and Response classes version 01   //
12 /////////////////////////////////////////////////////
13
14 #include <TArrayF.h>  // needed for CINT
15 #include <TArrayI.h>  // needed for CINT
16
17 #include "AliMUONSegmentationV0.h"
18
19 class TObjArray;
20
21 class AliMUON;
22
23 class AliMUONSegmentationV01 : public AliMUONSegmentationV0 
24 {
25  public:
26     AliMUONSegmentationV01();
27     AliMUONSegmentationV01(Int_t nsec);
28     virtual ~AliMUONSegmentationV01();
29     
30     //    
31     // Set Chamber Segmentation Parameters
32     // 
33     virtual  void    SetPadDivision(Int_t ndiv[4]);
34     // Radii
35     virtual  void    SetSegRadii(Float_t  r[4]);
36     virtual  void    SetOffsetY(Float_t off) {fOffsetY = off;}
37     //
38     // Transform from pad (wire) to real coordinates and vice versa
39     //
40     // Transform from pad to real coordinates
41     virtual void    GetPadI(Float_t x ,Float_t y ,Int_t   &ix,Int_t &iy);
42     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy);
43     // Transform from real to pad coordinates
44     virtual void    GetPadC(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );
45     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z);
46     //
47     // Initialisation
48     virtual void Init(Int_t chamber);
49     //
50     // Get member data
51     //
52     // Pad size in x by Sector
53     virtual Float_t Dpx(Int_t isec) const;
54     // Pad size in y by Sector
55     virtual Float_t Dpy(Int_t isec) const;
56     // Max number of Pads in x
57     virtual Int_t   Npx() const {return fNpxS[fNsec-1][1]+1;}
58     //
59     virtual void    SetPad(Int_t ix,Int_t iy);
60     //
61     // Iterate over pads
62     // Initialiser
63     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
64     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy);
65     // Stepper
66     virtual void  NextPad();
67     // Condition
68     virtual Int_t MorePads();
69     // Get next neighbours 
70     virtual void Neighbours
71         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
72     //
73     // Current Pad during Integration
74     // current sector
75     virtual Int_t ISector()  {return fSector;}
76     // calculate sector from pad coordinates
77     virtual Int_t Sector(Int_t ix, Int_t iy);
78     //
79     // Integration
80     // Current integration limits
81      virtual void IntegrationLimits
82         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
83     // Test points for auto calibration
84     void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
85     //
86     // Draw segmentation zones
87     virtual void Draw(const char *opt="") const;
88     // Function for systematic corrections
89     // Set the correction function
90     virtual void SetCorrFunc(Int_t dum, TF1* func);
91     // Get the correction function
92     virtual TF1* CorrFunc(Int_t iZone) const;
93     ClassDef(AliMUONSegmentationV01,1) // Segmentation approximating circular zones with different pad size
94
95   protected:
96     AliMUONSegmentationV01(const AliMUONSegmentationV01 & segmentation);
97     // assignment operator
98     AliMUONSegmentationV01& operator=(const AliMUONSegmentationV01& rhs);
99
100     //  Geometry
101     //
102     Int_t       fNsec;           // Number of sectors
103     TArrayF*    fRSec;           // Sector outer radia
104     TArrayI*    fNDiv;           // Pad size division
105     TArrayF*    fDpxD;           // y pad width per sector
106     Float_t     fOffsetY;        // Staggering offset in y
107     // Segmentation map
108     Int_t      fNpxS[10][1000];  //  Number of pads per sector in x
109     Float_t    fCx[10][1000];    //  pad-sector contour x vs y  
110     // Chamber region consideres during disintegration
111     // (lower left and upper right corner)
112     //
113     Float_t fXmin; // ! lower left  x
114     Float_t fXmax; // ! lower left  y
115     Float_t fYmin; // ! upper right x
116     Float_t fYmax; // ! upper right y 
117
118     //
119     // Current pad during integration (cursor for disintegration)
120     Int_t   fSector;   // ! Current sector
121     //
122     TObjArray *fCorrA; // ! Array of correction functions
123 };
124 #endif
125
126
127
128
129
130
131
132