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