]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONSegmentationV1.h
Obsolete member data deleted.
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV1.h
CommitLineData
a9e2aefa 1#ifndef ALIMUONSEGMENTATIONV1_H
2#define ALIMUONSEGMENTATIONV1_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 "AliMUONSegmentation.h"
9
10const Int_t kNzone = 3; // Specific for chamber with equal pads
11const Int_t kNzonem1 = 2; // kNzone - 1
12const Int_t kNzoneCUT = 30;
13
14class AliMUONSegmentationV1 :
15public AliMUONSegmentation {
16 public:
17 AliMUONSegmentationV1();
18 AliMUONSegmentationV1(const AliMUONSegmentationV1 & segmentation);
19 virtual ~AliMUONSegmentationV1(){}
20 //
21 // Set Chamber Segmentation Parameters
22 // Set Number of zones
23 void SetNzone(Int_t N) {fNzone = N;};
24 // Pad size Dx*Dy
25 virtual void SetPadSize(Float_t p1, Float_t p2);
26 // Set Sense wire offset
27 void SetSensOffset(Float_t Offset) {fSensOffset = Offset;};
28 // Anod Pitch
29 void SetDAnod(Float_t D) {fDAnod = D;};
30 // max x and y for the zone in number of pads units
31 //(WARNING : first pad is labelled 0 !!)
32 virtual void AddCut(Int_t Zone, Int_t nX, Int_t nY);
33 // Apply default cut
34 virtual void DefaultCut(void);
35 //
36 // Initialisation
37 virtual void Init(AliMUONChamber* chamber);
38 //
39 // Get member data
40 //
41 // Pad size in x
42 virtual Float_t Dpx(){return fDpx;}
43 // Pad size in y
44 virtual Float_t Dpy(){return fDpy;}
45 // Pad size in x by Sector
46 virtual Float_t Dpx(Int_t i){return fDpx;}
47 // Pad size in y by Sector
48 virtual Float_t Dpy(Int_t i){return fDpy;}
49 // Maximum number of Pads in x
50 virtual Int_t Npx(){return fNpx;}
51 // Maximum number of Pads in y
52 virtual Int_t Npy(){return fNpy;}
53 //
54 // Get the zone of segmentation
55 virtual Int_t GetZone(Float_t X, Float_t Y);
56 virtual Int_t GetZone(Int_t X, Int_t Y);
57 //
58 // Transform from pad (wire) to real coordinates and vice versa
59 virtual Int_t GetiAnod(Float_t xhit);
60 // Anod wire coordinate closest to xhit
61 virtual Float_t GetAnod(Float_t xhit);
62 // Transform from pad to real coordinates
63 virtual void GetPadIxy(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy);
64 // Transform from real to pad coordinates
65 virtual void GetPadCxy(Int_t ix,Int_t iy,Float_t &x ,Float_t &y );
66 // Set pad position
67 virtual void SetPad(Int_t ix, Int_t iy);
68 // Set hit position
69 virtual void SetHit(Float_t xhit, Float_t yhit);
70 //
71 // Iterate over pads
72 // Set Pad coordinates
73 virtual void SetPadCoord(Int_t iX, Int_t iY);
74 // Initialiser
75 virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
76 // Stepper
77 virtual void NextPad();
78 // Condition
79 virtual Int_t MorePads();
80 // Get next neighbours
81 virtual void Neighbours // implementation Neighbours function
82 (Int_t iX, Int_t iY, Int_t* Nlist, Int_t *Xlist, Int_t *Ylist);
83 virtual void NeighboursDiag // with diagonal elements
84 (Int_t iX, Int_t iY, Int_t* Nlist, Int_t *Xlist, Int_t *Ylist);
85 virtual void NeighboursNonDiag // without diagonal elements
86 (Int_t iX, Int_t iY, Int_t* Nlist, Int_t *Xlist, Int_t *Ylist);
87 void CleanNeighbours(Int_t* Nlist, Int_t *Xlist, Int_t *Ylist);
88 //
89 // Current pad cursor during disintegration
90 // x-coordinate
91 virtual Int_t Ix(Int_t trueX, Int_t trueY);
92 virtual Int_t Ix();
93 // y-coordinate
94 virtual Int_t Iy(){return fiy;}
95 // current sector
96 virtual Int_t ISector();
97 // calculate sector from pad coordinates
98 virtual Int_t Sector(Int_t ix, Int_t iy) {return 1;}
99 // Position of pad in perellel read-out
100 virtual Int_t IsParallel2(Int_t iX, Int_t iY);
101 virtual Int_t IsParallel3(Int_t iX, Int_t iY);
102 // Number of pads read in parallel
103 virtual Int_t NParallel2(Int_t iX, Int_t iY);
104 virtual Int_t NParallel3(Int_t iX, Int_t iY);
105 //
106 // Number of pads read in parallel and offset to add to x
107 virtual void GetNParallelAndOffset(Int_t iX, Int_t iY,
108 Int_t *Nparallel, Int_t *Offset);
109 // Minimum distance between 1 pad and a position
110 virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *Offset);
111 //
112 // Signal Generation Condition during Stepping
113 Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
114 // Initialise signal generation at coord (x,y,z)
115 void SigGenInit(Float_t x, Float_t y, Float_t z);
116 // Test points for auto calibration
117 void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y);
118 // Current integration limits
119 virtual void IntegrationLimits
120 (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
121 // Draw the segmentation zones
122 virtual void Draw(){;}
123 // Function for systematic corrections
124 // Set the correction function
125 virtual void SetCorrFunc(Int_t dum, TF1* func) {fCorr=func;}
126 // Get the correction function
127 virtual TF1* CorrFunc(Int_t) {return fCorr;}
128 //
129 AliMUONSegmentationV1& operator=(const AliMUONSegmentationV1& rhs);
130 ClassDef(AliMUONSegmentationV1,1) // Implementation of the Lyon type chamber segmentation with parallel read-out
131 protected:
132 //
133 // Implementation of the segmentation data
134 // Version This models rectangular pads with the same dimensions all
135 // over the cathode plane but let the possibilit for different design.
136 //
137 // geometry
138 Int_t fNzone; // Number of differents sensitive zones
139 Float_t fDpx; // X pad width
140 Float_t fDpy; // Y pad width
141 Int_t fNZoneCut[kNzonem1]; // Number of cuts for given zone
142 Int_t fZoneX[kNzonem1][kNzoneCUT]; // X descriptor of zone segmentations
143 Int_t fZoneY[kNzonem1][kNzoneCUT]; // Y descriptor of zone segmentations
144 Float_t frSensMax2; // square of maximum sensitive radius
145 Float_t frSensMin2; // square of minimum sensitive radius
146 Int_t fNpx; // Maximum number of pads along x
147 Int_t fNpy; // Maximum number of pads along y
148 Float_t fDAnod; // Anod gap
149 Float_t fSensOffset; // Offset of sensitive zone with respect to quadrant (positive)
150
151 // Chamber region consideres during disintegration (lower left and upper right corner)
152 //
153 Int_t fixmin; // lower left x
154 Int_t fixmax; // lower left y
155 Int_t fiymin; // upper right x
156 Int_t fiymax; // upper right y
157 //
158 // Current pad during integration (cursor for disintegration)
159 Int_t fix; // pad coord. x
160 Int_t fiy; // pad coord. y
161 Float_t fx; // real coord. x
162 Float_t fy; // real ccord. y
163 //
164 // Current pad and wire during tracking (cursor at hit centre)
165 Int_t fixt; // x-position of hit
166 Int_t fiyt; // y-position of hit
167 // Reference point to define signal generation condition
168 Int_t fiwt; // wire number
169 Float_t fxt; // x
170 Float_t fyt; // y
171 Float_t fxhit; // x-position of hit
172 Float_t fyhit; // y-position of hit
173
174 TF1* fCorr; // correction function
175};
176
177#endif
178
179