]>
Commit | Line | Data |
---|---|---|
8c555625 | 1 | #ifndef TPCParam_H |
2 | #define TPCParam_H | |
3 | //////////////////////////////////////////////// | |
4 | // Manager class for TPC parameters // | |
5 | //////////////////////////////////////////////// | |
8c555625 | 6 | |
1283eee5 | 7 | #include "TObject.h" |
8 | ||
9 | // the last things from AliTPCSecGeo | |
10 | //const Float_t z_end = 250.; | |
11 | //const Float_t alpha_low=0.523598775; // 30 degrees | |
12 | //const Float_t alpha_up=0.261799387; // 15 degrees | |
13 | //const Float_t q_el = 1.602e-19; // elementary charge | |
14 | //const Float_t adc_sat = 1023; // dynamic range (10 bits) | |
15 | //const Float_t dyn_range = 2000.; // output dynamic range (mV) | |
16 | ||
17 | ||
8c555625 | 18 | |
19 | class AliTPCParam : public TObject { | |
20 | ////////////////////////////////////////////////////// | |
21 | ////////////////////////////////////////////////////// | |
22 | //ALITPCParam object to be possible change | |
23 | //geometry and some other parameters of TPC | |
24 | //used by AliTPC and AliTPCSector | |
25 | public: | |
26 | AliTPCParam(); | |
27 | virtual ~AliTPCParam() {;} //dummy destructor | |
28 | ||
29 | void XYZtoCRXYZ(Float_t *xyz, | |
30 | Int_t §or, Int_t &padrow, Int_t option=3); | |
31 | //transform global position to the position relative to the sector padrow | |
32 | //if option=0 X calculate absolute calculate sector | |
33 | //if option=1 X absolute use input sector | |
34 | //if option=2 X relative to pad row calculate sector | |
35 | //if option=3 X relative use input sector | |
36 | ||
37 | void CRXYZtoXYZ(Float_t *xyz, | |
38 | const Int_t §or, const Int_t & padrow, Int_t option=3) const; | |
39 | //transform relative position to the gloabal position | |
40 | ||
41 | void CRTimePadtoYZ(Float_t &y, Float_t &z, | |
42 | const Float_t &time, const Float_t &pad, | |
43 | Int_t sector, Int_t padrow ); | |
44 | //transform position in digit units (time slices and pads) to "normal" | |
45 | //units (cm) | |
46 | void CRYZtoTimePad(const Float_t &y, const Float_t &z, | |
47 | Float_t &time, Float_t &pad, | |
48 | Int_t sector, Int_t padrow); | |
49 | //transform position in cm to position in digit unit | |
50 | Double_t GetLowMaxY(Int_t irow) const {return irow*0.;} | |
51 | Double_t GetUpMaxY(Int_t irow) const {return irow*0;} | |
52 | //additional geometrical function | |
53 | Int_t GetPadRow(Int_t isec, Float_t &x); | |
54 | //return pad row for given sector and position x | |
55 | //if res=-1 it is out of sector | |
56 | ||
57 | Int_t GetWire(Float_t &x); | |
58 | Int_t GetIndex(Int_t sector, Int_t row); //give index of the given sector and pad row | |
59 | Bool_t AdjustSectorRow(Int_t index, Int_t & sector, Int_t &row); //return sector and padrow | |
60 | //for given index | |
61 | Int_t GetNRowsTotal(){return fNtRows;} //get total nuber of rows | |
62 | void SetDefault(); //set defaut TPCparam | |
63 | Bool_t Update(); //recalculate and check geometric parameters | |
64 | Bool_t GetStatus(); //get information about object consistency | |
65 | ||
66 | ||
67 | void AdjustAngles(Int_t isec, Float_t &cos, Float_t &sin) const; | |
68 | //set cosinus and sinus of rotation angles for sector isec | |
69 | Int_t GetNRowLow() const; //get the number of pad rows in low sector | |
70 | Int_t GetNRowUp() const; //get the number of pad rows in up sector | |
1283eee5 | 71 | Int_t GetNRow(Int_t isec) {return ((isec<fNInnerSector) ? fnRowLow:fnRowUp);} |
8c555625 | 72 | //get the nuber of pad row in given sector |
73 | Float_t GetPadRowRadiiLow(Int_t irow) const; //get the pad row (irow) radii | |
74 | Float_t GetPadRowRadiiUp(Int_t irow) const; //get the pad row (irow) radii | |
75 | Float_t GetPadRowRadii(Int_t isec,Int_t irow) const { | |
1283eee5 | 76 | return ( (isec < fNInnerSector) ?GetPadRowRadiiLow(irow):GetPadRowRadiiUp(irow));} |
8c555625 | 77 | //retrun raii of the pad row irow in sector i |
78 | Int_t GetNPadsLow(Int_t irow) const; //get the number of pads in row irow | |
79 | Int_t GetNPadsUp(Int_t irow) const; //get the number of pads in row irow | |
80 | Int_t GetNPads(Int_t isector,Int_t irow){ | |
1283eee5 | 81 | return ( (isector < fNInnerSector) ?GetNPadsLow(irow) : GetNPadsUp(irow));} |
8c555625 | 82 | //get the number of pads in given sector and row |
83 | // Int_t GetNPads(Int_t isector, Int_t irow) const; | |
84 | //get the number of pads in sector isector and row irow | |
85 | ||
86 | void SetInnerRadiusLow(Float_t InnerRadiusLow ) { fInnerRadiusLow=InnerRadiusLow;} | |
87 | void SetOuterRadiusLow(Float_t OuterRadiusLow ){ fOuterRadiusLow=OuterRadiusLow;} | |
88 | void SetInnerRadiusUp(Float_t InnerRadiusUp){ fInnerRadiusUp= InnerRadiusUp;} | |
89 | void SetOuterRadiusUp(Float_t OuterRadiusUp){ fOuterRadiusUp= OuterRadiusUp;} | |
1283eee5 | 90 | |
91 | void SetSectorAngles(Float_t innerangle, Float_t innershift, Float_t outerangle, | |
92 | Float_t outershift,Bool_t inDegree=kTRUE); | |
93 | ||
94 | void SetInSecLowEdge(Float_t isle){fInSecLowEdge=isle;} | |
95 | void SetInSecUpEdge(Float_t isue){fInSecUpEdge=isue;} | |
96 | void SetOuSecLowEdge(Float_t osle){fOuSecLowEdge=osle;} | |
97 | void SetOuSecUpEdge(Float_t osue){fOuSecUpEdge=osue;} | |
98 | ||
99 | void SetEdge(Float_t edge){fEdge = edge;} | |
100 | void SetDeadZone(Float_t zone){fDeadZone = zone;} | |
101 | ||
8c555625 | 102 | |
103 | void SetPadPitchLength(Float_t PadPitchLength){ fPadPitchLength=PadPitchLength;} | |
104 | void SetPadPitchWidth(Float_t PadPitchWidth){ fPadPitchWidth = PadPitchWidth;} | |
105 | void SetPadLength(Float_t PadLength){ fPadLength=PadLength;} | |
106 | void SetPadWidth(Float_t PadWidth) { fPadWidth=PadWidth;} | |
107 | void SetDiffT(Float_t DiffT){ fDiffT= DiffT;} | |
108 | void SetDiffL(Float_t DiffL){ fDiffL=DiffL;} | |
109 | void SetDriftV(Float_t DriftV){ fDriftV= DriftV;} | |
110 | void SetOmegaTau(Float_t OmegaTau){ fOmegaTau=OmegaTau;} | |
111 | void SetAttCoef(Float_t AttCoef){ fAttCoef=AttCoef;} | |
112 | void SetOxyCont(Float_t OxyCont){ fOxyCont=OxyCont;} | |
113 | ||
114 | void SetNoise(Float_t Noise ){ fNoise= Noise;} | |
115 | void SetChipGain(Float_t ChipGain){ fChipGain= ChipGain;} | |
116 | void SetGasGain(Float_t GasGain){ fGasGain=GasGain;} | |
117 | void SetTSample(Float_t TSample){ fTSample=TSample;} | |
118 | void SetTSigma(Float_t Sigma){ fTSigma=Sigma;} | |
119 | void SetPadCoupling(Float_t PadCoupling){ fPadCoupling=PadCoupling;} | |
120 | void SetNWires(Int_t nWires){ fnWires=nWires;} | |
121 | void SetWWPitch(Float_t WWPitch){ fWWPitch=WWPitch;} | |
122 | void SetZeroSup(Int_t ZeroSup){ fZeroSup=ZeroSup;} | |
123 | ||
124 | Float_t GetInnerRadiusLow(){return fInnerRadiusLow;} | |
125 | Float_t GetOuterRadiusLow(){return fOuterRadiusLow;} | |
126 | Float_t GetInnerRadiusUp(){return fInnerRadiusUp;} | |
127 | Float_t GetOuterRadiusUp(){return fOuterRadiusUp;} | |
128 | ||
1283eee5 | 129 | Float_t GetInnerAngle(){return fInnerAngle;} |
130 | Float_t GetInnerAngleShift(){return fInnerAngleShift;} | |
131 | Float_t GetOuterAngle(){return fOuterAngle;} | |
132 | Float_t GetOuterAngleShift(){return fOuterAngleShift;} | |
133 | Int_t GetNInnerSector(){return fNInnerSector;} | |
134 | Int_t GetNOuterSector(){return fNOuterSector;} | |
135 | Int_t GetNSector(){return fNSector;} | |
136 | ||
137 | Float_t GetInSecLowEdge(){return fInSecLowEdge;} | |
138 | Float_t GetInSecUpEdge(){return fInSecUpEdge;} | |
139 | Float_t GetOuSecLowEdge(){return fOuSecLowEdge;} | |
140 | Float_t GetOuSecUpEdge(){return fOuSecUpEdge;} | |
141 | ||
142 | Float_t GetEdge(){return fEdge;} | |
143 | Float_t GetDeadZone(){return fDeadZone;} | |
144 | ||
8c555625 | 145 | Float_t GetPadPitchLength(){return fPadPitchLength;} |
146 | Float_t GetPadPitchWidth(){return fPadPitchWidth;} | |
147 | Float_t GetPadLength(){return fPadLength;} | |
148 | Float_t GetPadWidth() {return fPadWidth;} | |
149 | Float_t GetDiffT(){return fDiffT;} | |
150 | Float_t GetDiffL(){return fDiffL;} | |
151 | Float_t GetDriftV(){return fDriftV;} | |
152 | Float_t GetOmegaTau(){return fOmegaTau;} | |
153 | Float_t GetAttCoef(){return fAttCoef;} | |
154 | Float_t GetOxyCont(){return fOxyCont;} | |
155 | ||
156 | Float_t GetNoise(){return fNoise;} | |
157 | Float_t GetChipGain(){return fChipGain;} | |
158 | Float_t GetGasGain(){return fGasGain;} | |
159 | Float_t GetTSample(){return fTSample;} | |
160 | Float_t GetTSigma(){return fTSigma;} | |
161 | Float_t GetZWidth(){return fZWidth;} | |
162 | Float_t GetZSigma(){return fTSigma*fDriftV;} | |
163 | Float_t GetPadCoupling(){return fPadCoupling;} | |
164 | Int_t GetNWires(){return fnWires;} | |
165 | Float_t GetWWPitch(){return fWWPitch;} | |
166 | Int_t GetZeroSup(){return fZeroSup;} | |
1283eee5 | 167 | Int_t GetMaxTBin(){return fMaxTBin;} |
8c555625 | 168 | |
169 | private : | |
170 | Bool_t fbStatus; //indicates consistency of the data | |
171 | //--------------------------------------------------------------------- | |
172 | // ALICE TPC sector geometry | |
173 | //-------------------------------------------------------------------- | |
174 | ||
175 | Float_t fInnerRadiusLow; // lower radius of inner sector | |
176 | Float_t fOuterRadiusLow; // lower radius of outer sector | |
177 | Float_t fInnerRadiusUp; // upper radius of inner sector | |
178 | Float_t fOuterRadiusUp; // upper radius of outer sector | |
179 | ||
1283eee5 | 180 | Float_t fInnerAngle; //opening angle of Inner sector |
181 | Float_t fInnerAngleShift; //shift of first inner sector center to the 0 | |
182 | Float_t fOuterAngle; //opening angle of outer sector | |
183 | Float_t fOuterAngleShift; //shift of first sector center to the 0 | |
184 | ||
185 | Int_t fNInnerSector; //!number of inner sectors | |
186 | Int_t fNOuterSector; //!number of outer sectors | |
187 | Int_t fNSector; //! total number of sectors | |
188 | ||
189 | Float_t fInSecLowEdge; // inner sector lower edge | |
190 | Float_t fInSecUpEdge; // inner sector upper edge | |
191 | Float_t fOuSecLowEdge; // outer sector lower edge | |
192 | Float_t fOuSecUpEdge; // outer sector upper edge | |
193 | ||
194 | Float_t fEdge; // thickness of the sector edge | |
195 | Float_t fDeadZone; // dead zone due to the sector mounting etc. | |
196 | ||
197 | //--------------------------------------------------------------------- | |
198 | // ALICE TPC pad parameters | |
199 | //-------------------------------------------------------------------- | |
8c555625 | 200 | Float_t fPadPitchLength; //pad pitch length |
201 | Float_t fPadPitchWidth; //pad pitch width | |
202 | Float_t fPadLength; //pad length | |
203 | Float_t fPadWidth; //pad width | |
204 | ||
205 | ||
206 | Int_t fnRowLow; // number of pad rows per low sector | |
207 | Int_t fnRowUp; // number of pad rows per sector up | |
208 | Float_t fPadRowLow[600]; // Lower sector, pad row radii | |
209 | Float_t fPadRowUp[600]; // Upper sector, pad row radii | |
210 | Int_t fnPadsLow[600]; // Lower sector, number of pads per row | |
211 | Int_t fnPadsUp[600]; // Upper sector, number of pads per row | |
212 | Float_t fRotAngle[200]; // sin and cos of rotation angles for | |
213 | // diferent sectors | |
214 | ||
215 | Int_t fnWires; // Number of wires per pad | |
216 | Float_t fWWPitch; // pitch between wires | |
217 | //--------------------------------------------------------------------- | |
218 | // ALICE TPC Gas Parameters | |
219 | //-------------------------------------------------------------------- | |
220 | Float_t fDiffT; //tangencial diffusion constant | |
221 | Float_t fDiffL; //longutudinal diffusion constant | |
222 | Float_t fGasGain; //gas gain constant | |
223 | Float_t fDriftV; //drift velocity constant | |
224 | Float_t fOmegaTau; //omega tau ExB coeficient | |
225 | Float_t fAttCoef; //attachment coefitients | |
226 | Float_t fOxyCont; //oxygen content | |
227 | //--------------------------------------------------------------------- | |
228 | // ALICE TPC Electronics Parameters | |
229 | //-------------------------------------------------------------------- | |
230 | Float_t fPadCoupling; //coupling factor ration of anode signal | |
231 | //and total pads signal | |
232 | Int_t fZeroSup; //zero suppresion constant | |
233 | Float_t fNoise; //noise sigma constant | |
234 | Float_t fChipGain; //preamp shaper constant | |
235 | Float_t fTSample; // sampling time | |
236 | Float_t fZWidth; //derived value calculated using TSample and driftw | |
237 | Float_t fTSigma; // width of the Preamp/Shaper function | |
1283eee5 | 238 | Int_t fMaxTBin; //maximum time bin number |
8c555625 | 239 | //-------------------------------------------------------- |
240 | // | |
241 | Int_t fNtRows; //total number of rows in TPC | |
242 | ClassDef(AliTPCParam,2) //parameter object for set:TPC | |
243 | }; | |
244 | ||
245 | ||
1283eee5 | 246 | ///////////////////////////////////////////////////////////////////////////// |
247 | // | |
248 | //--------------------------------------------------------------------- | |
249 | // ALICE TPC Cluster Parameters | |
250 | //-------------------------------------------------------------------- | |
251 | // | |
252 | // | |
253 | // Sigma rphi | |
254 | /*const Float_t a_rphi=0.41818e-2; | |
255 | const Float_t b_rphi=0.17460e-4; | |
256 | const Float_t c_rphi=0.30993e-2; | |
257 | const Float_t d_rphi=0.41061e-3; | |
258 | // Sigma z | |
259 | const Float_t a_z=0.39614e-2; | |
260 | const Float_t b_z=0.22443e-4; | |
261 | const Float_t c_z=0.51504e-1; | |
262 | // Cluster width in rphi | |
263 | const Float_t ac_rphi=0.18322; | |
264 | const Float_t bc_rphi=0.59551e-3; | |
265 | const Float_t cc_rphi=0.60952e-1; | |
266 | // Cluster width in z | |
267 | const Float_t ac_z=0.19081; | |
268 | const Float_t bc_z=0.55938e-3; | |
269 | const Float_t cc_z=0.30428; | |
270 | */ | |
8c555625 | 271 | |
272 | ||
273 | ||
274 | #endif |