(Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCROC.cxx
CommitLineData
7a0ff78e 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16
17///////////////////////////////////////////////////////////////////////////////
18// //
19// Geometry class for a single ROC //
20// //
21// //
22///////////////////////////////////////////////////////////////////////////////
23#include "AliTPCROC.h"
24#include "TMath.h"
25
26ClassImp(AliTPCROC)
27
28
29AliTPCROC* AliTPCROC::fgInstance = 0;
30
31
32
33
34//_ singleton implementation __________________________________________________
35AliTPCROC* AliTPCROC::Instance()
36{
37 //
38 // Singleton implementation
39 // Returns an instance of this class, it is created if neccessary
40 //
41 if (fgInstance == 0){
42 fgInstance = new AliTPCROC();
43 fgInstance->Init();
44 }
45 return fgInstance;
46}
47
48
49
50
51void AliTPCROC::Init(){
52 //
53 // initialize static variables
54 //
55 if (AliTPCROC::fNSectorsAll>0) return;
56 fNSectorsAll =72;
57 fNSectors[0] =36;
58 fNSectors[1] =36;
59 //
60 fNRows[0]= 63;
61 fNRows[1]= 96;
62 //
63 // number of pads in padrow
c5bbaa2c 64 fNPads[0] = new UInt_t[fNRows[0]];
65 fNPads[1] = new UInt_t[fNRows[1]];
7a0ff78e 66 //
67 // padrow index in array
68 //
c5bbaa2c 69 fRowPosIndex[0] = new UInt_t[fNRows[0]];
70 fRowPosIndex[1] = new UInt_t[fNRows[1]];
7a0ff78e 71 //
72 // inner sectors
73 //
c5bbaa2c 74 UInt_t index =0;
75 for (UInt_t irow=0; irow<fNRows[0];irow++){
76 UInt_t npads = (irow==0) ? 68 : 2 *Int_t(Double_t(irow)/3. +33.67);
7a0ff78e 77 fNPads[0][irow] = npads;
78 fRowPosIndex[0][irow] = index;
79 index+=npads;
80 }
81 fNChannels[0] = index;
82 //
83 index =0;
84 Double_t k1 = 10.*TMath::Tan(10*TMath::DegToRad())/6.;
85 Double_t k2 = 15.*TMath::Tan(10*TMath::DegToRad())/6.;
c5bbaa2c 86 for (UInt_t irow=0; irow<fNRows[1];irow++){
87 UInt_t npads = (irow<64) ?
7a0ff78e 88 2*Int_t(k1*Double_t(irow)+37.75):
89 2*Int_t(k2*Double_t(irow-64)+56.66);
90 fNPads[1][irow] = npads;
91 fRowPosIndex[1][irow] = index;
92 index+=npads;
93 }
94 fNChannels[1] = index;
95 SetGeometry();
96}
97
98
99
100
101void AliTPCROC::SetGeometry()
102{
103 //
104 //set ROC geometry parameters
105 //
106 const Float_t kInnerRadiusLow = 83.65;
107 const Float_t kInnerRadiusUp = 133.3;
108 const Float_t kOuterRadiusLow = 133.5;
109 const Float_t kOuterRadiusUp = 247.7;
110 const Float_t kInnerFrameSpace = 1.5;
111 const Float_t kOuterFrameSpace = 1.5;
112 const Float_t kInnerWireMount = 1.2;
113 const Float_t kOuterWireMount = 1.4;
114 const Float_t kZLength =250.;
c5bbaa2c 115 const UInt_t kNRowLow = 63;
116 const UInt_t kNRowUp1 = 64;
117 const UInt_t kNRowUp2 = 32;
118 const UInt_t kNRowUp = 96;
7a0ff78e 119 const Float_t kInnerAngle = 20; // 20 degrees
120 const Float_t kOuterAngle = 20; // 20 degrees
121 //
122 // pad parameters
123 //
124 const Float_t kInnerPadPitchLength = 0.75;
125 const Float_t kInnerPadPitchWidth = 0.40;
126 const Float_t kInnerPadLength = 0.75;
127 const Float_t kInnerPadWidth = 0.40;
128 const Float_t kOuter1PadPitchLength = 1.0;
129 const Float_t kOuterPadPitchWidth = 0.6;
130 const Float_t kOuter1PadLength = 1.0;
131 const Float_t kOuterPadWidth = 0.6;
132 const Float_t kOuter2PadPitchLength = 1.5;
133 const Float_t kOuter2PadLength = 1.5;
134
135 //
136 //wires default parameters
137 //
c5bbaa2c 138// const UInt_t kNInnerWiresPerPad = 3;
139// const UInt_t kInnerDummyWire = 2;
7a0ff78e 140// const Float_t kInnerWWPitch = 0.25;
141// const Float_t kRInnerFirstWire = 84.475;
142// const Float_t kRInnerLastWire = 132.475;
143// const Float_t kInnerOffWire = 0.5;
c5bbaa2c 144// const UInt_t kNOuter1WiresPerPad = 4;
145// const UInt_t kNOuter2WiresPerPad = 6;
7a0ff78e 146// const Float_t kOuterWWPitch = 0.25;
147// const Float_t kROuterFirstWire = 134.225;
148// const Float_t kROuterLastWire = 246.975;
c5bbaa2c 149// const UInt_t kOuterDummyWire = 2;
7a0ff78e 150// const Float_t kOuterOffWire = 0.5;
151 //
152 //set sector parameters
153 //
154 fInnerRadiusLow = kInnerRadiusLow;
155 fOuterRadiusLow = kOuterRadiusLow;
156 fInnerRadiusUp = kInnerRadiusUp;
157 fOuterRadiusUp = kOuterRadiusUp;
158 fInnerFrameSpace = kInnerFrameSpace;
159 fOuterFrameSpace = kOuterFrameSpace;
160 fInnerWireMount = kInnerWireMount;
161 fOuterWireMount = kOuterWireMount;
162 fZLength = kZLength;
163 fInnerAngle = TMath::DegToRad()*kInnerAngle;
164 fOuterAngle = TMath::DegToRad()*kOuterAngle;
165
166 fNRowLow = kNRowLow;
167 fNRowUp1 = kNRowUp1;
168 fNRowUp2 = kNRowUp2;
169 fNRowUp = kNRowUp;
170 //
171 //set pad parameter
172 //
173 fInnerPadPitchLength = kInnerPadPitchLength;
174 fInnerPadPitchWidth = kInnerPadPitchWidth;
175 fInnerPadLength = kInnerPadLength;
176 fInnerPadWidth = kInnerPadWidth;
177 fOuter1PadPitchLength = kOuter1PadPitchLength;
178 fOuter2PadPitchLength = kOuter2PadPitchLength;
179 fOuterPadPitchWidth = kOuterPadPitchWidth;
180 fOuter1PadLength = kOuter1PadLength;
181 fOuter2PadLength = kOuter2PadLength;
182 fOuterPadWidth = kOuterPadWidth;
183
184 //
185 //set wire parameters
186 //
187 // SetInnerNWires(kNInnerWiresPerPad);
188 // SetInnerDummyWire(kInnerDummyWire);
189 // SetInnerOffWire(kInnerOffWire);
190 // SetOuter1NWires(kNOuter1WiresPerPad);
191 // SetOuter2NWire(kNOuter2WiresPerPad);
192 // SetOuterDummyWire(kOuterDummyWire);
193 // SetOuterOffWire(kOuterOffWire);
194 // SetInnerWWPitch(kInnerWWPitch);
195 // SetRInnerFirstWire(kRInnerFirstWire);
196 // SetRInnerLastWire(kRInnerLastWire);
197 // SetOuterWWPitch(kOuterWWPitch);
198 // SetROuterFirstWire(kROuterFirstWire);
199 // SetROuterLastWire(kROuterLastWire);
200}
201
202
203
204
205//_____________________________________________________________________________
206AliTPCROC::AliTPCROC():TObject(), fNSectorsAll(0)
207{
208 //
209 // Default constructor
c5bbaa2c 210 for (UInt_t i=0;i<2;i++){
7a0ff78e 211 fNSectors[i] = 0;
212 fNRows[i] = 0;
213 fNChannels[i] = 0;
214 fNPads[i] = 0;
215 fRowPosIndex[i]= 0;
216 }
217}
218
219
220//_____________________________________________________________________________
221AliTPCROC::AliTPCROC(const AliTPCROC &roc):TObject(roc)
222{
223 //
224 // AliTPCROC copy constructor
225 //
226 fNSectorsAll = roc.fNSectorsAll;
227 fNSectors[0] = roc.fNSectors[0];
228 fNSectors[1] = roc.fNSectors[1];
229 fNRows[0] = roc.fNRows[0];
230 fNRows[1] = roc.fNRows[1];
231 fNChannels[0]= roc.fNChannels[0];
232 fNChannels[1]= roc.fNChannels[1];
233 //
234 // number of pads in padrow
c5bbaa2c 235 fNPads[0] = new UInt_t[fNRows[0]];
236 fNPads[1] = new UInt_t[fNRows[1]];
7a0ff78e 237 //
238 // padrow index in array
239 //
c5bbaa2c 240 fRowPosIndex[0] = new UInt_t[fNRows[0]];
241 fRowPosIndex[1] = new UInt_t[fNRows[1]];
7a0ff78e 242 //
c5bbaa2c 243 for (UInt_t irow =0; irow<fNRows[0];irow++){
7a0ff78e 244 fNPads[0][irow] = roc.fNPads[0][irow];
245 fRowPosIndex[0][irow] = roc.fRowPosIndex[0][irow];
246 }
c5bbaa2c 247 for (UInt_t irow =0; irow<fNRows[1];irow++){
7a0ff78e 248 fNPads[1][irow] = roc.fNPads[1][irow];
249 fRowPosIndex[1][irow] = roc.fRowPosIndex[1][irow];
250 }
251}
252
253//_____________________________________________________________________________
254AliTPCROC::~AliTPCROC()
255{
256 //
257 // AliTPCROC destructor
258 //
259 delete [] fNPads[0];
260 delete [] fNPads[1];
261 delete [] fRowPosIndex[0];
262 delete [] fRowPosIndex[1];
263
264}
265