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