]>
Commit | Line | Data |
---|---|---|
2b680d9b | 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 | $Log$ | |
18 | $Id$ | |
19 | */ | |
20 | ||
21 | ////////////////////////////////////////////////////////////////////////////// | |
22 | // // | |
23 | // Inner Traking System version 11 // | |
24 | // This class contains the base procedures for the Inner Tracking System // | |
25 | // // | |
26 | // Authors: R. Barbera // | |
27 | // version 6. // | |
28 | // Created 2000. // | |
29 | // // | |
30 | // NOTE: THIS IS THE SYMMETRIC PPR geometry of the ITS. // | |
31 | // THIS WILL NOT WORK // | |
32 | // with the geometry or module classes or any analysis classes. You are // | |
33 | // strongly encouraged to uses AliITSv5. // | |
34 | // // | |
35 | ////////////////////////////////////////////////////////////////////////////// | |
36 | // See AliITSv11::StepManager(). | |
37 | #include <Riostream.h> | |
38 | #include <stdio.h> | |
39 | #include <stdlib.h> | |
40 | #include <TMath.h> | |
41 | #include <TGeometry.h> | |
42 | #include <TNode.h> | |
43 | #include <TTUBE.h> | |
44 | #include <TTUBS.h> | |
45 | #include <TPCON.h> | |
46 | #include <TFile.h> // only required for Tracking function? | |
47 | #include <TCanvas.h> | |
48 | #include <TObjArray.h> | |
49 | #include <TLorentzVector.h> | |
50 | #include <TObjString.h> | |
51 | #include <TClonesArray.h> | |
52 | #include <TBRIK.h> | |
53 | #include <TSystem.h> | |
54 | ||
55 | ||
56 | #include "AliRun.h" | |
57 | #include "AliMagF.h" | |
58 | #include "AliConst.h" | |
59 | #include "AliITSGeant3Geometry.h" | |
60 | #include "AliITShit.h" | |
61 | #include "AliITS.h" | |
62 | #include "AliITSv11.h" | |
63 | #include "AliITSgeom.h" | |
64 | #include "AliITSgeomSPD.h" | |
65 | #include "AliITSgeomSDD.h" | |
66 | #include "AliITSgeomSSD.h" | |
67 | #include "AliITSDetType.h" | |
68 | #include "AliITSresponseSPD.h" | |
69 | #include "AliITSresponseSDD.h" | |
70 | #include "AliITSresponseSSD.h" | |
71 | #include "AliITSsegmentationSPD.h" | |
72 | #include "AliITSsegmentationSDD.h" | |
73 | #include "AliITSsegmentationSSD.h" | |
74 | #include "AliITSsimulationSPD.h" | |
75 | #include "AliITSsimulationSDD.h" | |
76 | #include "AliITSsimulationSSD.h" | |
77 | #include "AliITSClusterFinderSPD.h" | |
78 | #include "AliITSClusterFinderSDD.h" | |
79 | #include "AliITSClusterFinderSSD.h" | |
80 | ||
81 | ||
82 | ClassImp(AliITSv11) | |
83 | ||
84 | //______________________________________________________________________ | |
85 | AliITSv11::AliITSv11() : AliITS() { | |
86 | //////////////////////////////////////////////////////////////////////// | |
87 | // Standard default constructor for the ITS version 11. | |
88 | //////////////////////////////////////////////////////////////////////// | |
89 | } | |
90 | //______________________________________________________________________ | |
91 | AliITSv11::AliITSv11(const char *title) : AliITS("ITS", title){ | |
92 | //////////////////////////////////////////////////////////////////////// | |
93 | // Standard constructor for the ITS version 11. | |
94 | //////////////////////////////////////////////////////////////////////// | |
95 | } | |
96 | //______________________________________________________________________ | |
97 | AliITSv11::~AliITSv11() { | |
98 | //////////////////////////////////////////////////////////////////////// | |
99 | // Standard destructor for the ITS version 11. | |
100 | //////////////////////////////////////////////////////////////////////// | |
101 | } | |
102 | //______________________________________________________________________ | |
103 | void AliITSv11::Box(const char gnam[3],const TString &dis, | |
104 | Double_t dx,Double_t dy,Double_t dz,Int_t med){ | |
105 | // Interface to TMC->Gsvolu() for ITS bos geometries. Box with faces | |
106 | // perpendicular to the axes. It has 3 paramters. See SetScale() for | |
107 | // units. Default units are geant 3 [cm]. | |
108 | // Inputs: | |
109 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
110 | // is appended to the front to indecate that this | |
111 | // is an ITS volume. | |
112 | // TString &dis String containging part discription. | |
113 | // Double_t dx half-length of box in x-axis | |
114 | // Double_t dy half-length of box in y-axis | |
115 | // Double_t dz half-length of box in z-axis | |
116 | // Int_t med media index number. | |
117 | // Output: | |
118 | // none. | |
119 | // Return. | |
120 | // none. | |
121 | char name[4]; | |
122 | Float_t param[3]; | |
123 | ||
124 | param[0] = fScale*dx; | |
125 | param[1] = fScale*dy; | |
126 | param[2] = fScale*dz; | |
127 | name[0] = 'I'; | |
128 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
129 | gMC->Gsvolu(name,"BOX ",fidmed[med],param,3); | |
130 | } | |
131 | //______________________________________________________________________ | |
132 | void AliITSv11::Trapezoid1(const char gnam[3],const TString &dis, | |
133 | Double_t dxn,Double_t dxp,Double_t dy,Double_t dz, | |
134 | Int_t med){ | |
135 | // Interface to TMC->Gsvolu() for ITS TRD1 geometries. Trapezoid with the | |
136 | // x dimension varing along z. It has 4 parameters. See SetScale() for | |
137 | // units. Default units are geant 3 [cm]. | |
138 | // Inputs: | |
139 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
140 | // is appended to the front to indecate that this | |
141 | // is an ITS volume. | |
142 | // TString &dis String containging part discription. | |
143 | // Double_t dxn half-length along x at the z surface positioned | |
144 | // at -DZ | |
145 | // Double_t dxp half-length along x at the z surface positioned | |
146 | // at +DZ | |
147 | // Double_t dy half-length along the y-axis | |
148 | // Double_t dz half-length along the z-axis | |
149 | // Int_t med media index number. | |
150 | // Output: | |
151 | // none. | |
152 | // Return. | |
153 | // none. | |
154 | char name[4]; | |
155 | Float_t param[4]; | |
156 | ||
157 | param[0] = fScale*dxn; | |
158 | param[1] = fScale*dxp; | |
159 | param[2] = fScale*dy; | |
160 | param[3] = fScale*dz; | |
161 | name[0] = 'I'; | |
162 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
163 | gMC->Gsvolu(name,"TRD1",fidmed[med],param,4); | |
164 | } | |
165 | //______________________________________________________________________ | |
166 | void AliITSv11::Trapezoid2(const char gnam[3],const TString &dis,Double_t dxn, | |
167 | Double_t dxp,Double_t dyn,Double_t dyp,Double_t dz, | |
168 | Int_t med){ | |
169 | // Interface to TMC->Gsvolu() for ITS TRD2 geometries. Trapezoid with the | |
170 | // x and y dimension varing along z. It has 5 parameters. See SetScale() | |
171 | // for units. Default units are geant 3 [cm]. | |
172 | // Inputs: | |
173 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
174 | // is appended to the front to indecate that this | |
175 | // is an ITS volume. | |
176 | // TString &dis String containging part discription. | |
177 | // Double_t dxn half-length along x at the z surface positioned | |
178 | // at -DZ | |
179 | // Double_t dxp half-length along x at the z surface positioned | |
180 | // at +DZ | |
181 | // Double_t dyn half-length along x at the z surface positioned | |
182 | // at -DZ | |
183 | // Double_t dyp half-length along x at the z surface positioned | |
184 | // at +DZ | |
185 | // Double_t dz half-length along the z-axis | |
186 | // Int_t med media index number. | |
187 | // Output: | |
188 | // none. | |
189 | // Return. | |
190 | // none. | |
191 | char name[4]; | |
192 | Float_t param[5]; | |
193 | ||
194 | param[0] = fScale*dxn; | |
195 | param[1] = fScale*dxp; | |
196 | param[2] = fScale*dyn; | |
197 | param[3] = fScale*dyp; | |
198 | param[4] = fScale*dz; | |
199 | name[0] = 'I'; | |
200 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
201 | gMC->Gsvolu(name,"TRD2",fidmed[med],param,5); | |
202 | } | |
203 | //______________________________________________________________________ | |
204 | void AliITSv11::Trapezoid(const char gnam[3],const TString &dis,Double_t dz, | |
205 | Double_t thet,Double_t phi,Double_t h1,Double_t bl1, | |
206 | Double_t tl1,Double_t alp1,Double_t h2,Double_t bl2, | |
207 | Double_t tl2,Double_t alp2,Int_t med){ | |
208 | // Interface to TMC->Gsvolu() for ITS TRAP geometries. General Trapezoid, | |
209 | // The faces perpendicular to z are trapezia and their centers are not | |
210 | // necessarily on a line parallel to the z axis. This shape has 11 | |
211 | // parameters, but only cosidering that the faces should be planar, only 9 | |
212 | // are really independent. A check is performed on the user parameters and | |
213 | // a message is printed in case of non-planar faces. Ignoring this warning | |
214 | // may cause unpredictable effects at tracking time. See SetScale() | |
215 | // for units. Default units are geant 3 [cm]. | |
216 | // Inputs: | |
217 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
218 | // is appended to the front to indecate that this | |
219 | // is an ITS volume. | |
220 | // TString &dis String containging part discription. | |
221 | // Double_t dz Half-length along the z-asix | |
222 | // Double_t thet Polar angle of the line joing the center of the | |
223 | // face at -dz to the center of the one at dz | |
224 | // [degree]. | |
225 | // Double_t phi aximuthal angle of the line joing the center of | |
226 | // the face at -dz to the center of the one at +dz | |
227 | // [degree]. | |
228 | // Double_t h1 half-length along y of the face at -dz. | |
229 | // Double_t bl1 half-length along x of the side at -h1 in y of | |
230 | // the face at -dz in z. | |
231 | // Double_t tl1 half-length along x of teh side at +h1 in y of | |
232 | // the face at -dz in z. | |
233 | // Double_t alp1 angle with respect to the y axis from the center | |
234 | // of the side at -h1 in y to the cetner of the | |
235 | // side at +h1 in y of the face at -dz in z | |
236 | // [degree]. | |
237 | // Double_t h2 half-length along y of the face at +dz | |
238 | // Double_t bl2 half-length along x of the side at -h2 in y of | |
239 | // the face at +dz in z. | |
240 | // Double_t tl2 half-length along x of the side at _h2 in y of | |
241 | // the face at +dz in z. | |
242 | // Double_t alp2 angle with respect to the y axis from the center | |
243 | // of the side at -h2 in y to the center of the | |
244 | // side at +h2 in y of the face at +dz in z | |
245 | // [degree]. | |
246 | // Int_t med media index number. | |
247 | // Output: | |
248 | // none. | |
249 | // Return. | |
250 | // none. | |
251 | char name[4]; | |
252 | Float_t param[11]; | |
253 | ||
254 | param[0] = fScale*dz; | |
255 | param[1] = thet; | |
256 | param[2] = phi; | |
257 | param[3] = fScale*h1; | |
258 | param[4] = fScale*bl1; | |
259 | param[5] = fScale*tl1; | |
260 | param[6] = alp1; | |
261 | param[7] = fScale*h2; | |
262 | param[8] = fScale*bl2; | |
263 | param[9] = fScale*tl2; | |
264 | param[10] = alp2; | |
265 | name[0] = 'I'; | |
266 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
267 | gMC->Gsvolu(name,"TRAP",fidmed[med],param,11); | |
268 | } | |
269 | //______________________________________________________________________ | |
270 | void AliITSv11::Tube(const char gnam[3],const TString &dis,Double_t rmin, | |
271 | Double_t rmax,Double_t dz,Int_t med){ | |
272 | // Interface to TMC->Gsvolu() for ITS TUBE geometries. Simple Tube. It has | |
273 | // 3 parameters. See SetScale() | |
274 | // for units. Default units are geant 3 [cm]. | |
275 | // Inputs: | |
276 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
277 | // is appended to the front to indecate that this | |
278 | // is an ITS volume. | |
279 | // TString &dis String containging part discription. | |
280 | // Double_t rmin Inside Radius. | |
281 | // Double_t rmax Outside Radius. | |
282 | // Double_t dz half-length along the z-axis | |
283 | // Int_t med media index number. | |
284 | // Output: | |
285 | // none. | |
286 | // Return. | |
287 | // none. | |
288 | char name[4]; | |
289 | Float_t param[3]; | |
290 | ||
291 | param[0] = fScale*rmin; | |
292 | param[1] = fScale*rmax; | |
293 | param[2] = fScale*dz; | |
294 | name[0] = 'I'; | |
295 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
296 | gMC->Gsvolu(name,"TUBE",fidmed[med],param,3); | |
297 | } | |
298 | //______________________________________________________________________ | |
299 | void AliITSv11::TubeSegment(const char gnam[3],const TString &dis, | |
300 | Double_t rmin,Double_t rmax,Double_t dz, | |
301 | Double_t phi1,Double_t phi2,Int_t med){ | |
302 | // Interface to TMC->Gsvolu() for ITS TUBE geometries. Phi segment of a | |
303 | // tube. It has 5 parameters. Phi1 should be smaller than phi2. If this is | |
304 | // not the case, the system adds 360 degrees to phi2. See SetScale() | |
305 | // for units. Default units are geant 3 [cm]. | |
306 | // Inputs: | |
307 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
308 | // is appended to the front to indecate that this | |
309 | // is an ITS volume. | |
310 | // TString &dis String containging part discription. | |
311 | // Double_t rmin Inside Radius. | |
312 | // Double_t rmax Outside Radius. | |
313 | // Double_t dz half-length along the z-axis | |
314 | // Double_t phi1 Starting angle of the segment [degree]. | |
315 | // Double_t phi2 Ending angle of the segment [degree]. | |
316 | // Int_t med media index number. | |
317 | // Output: | |
318 | // none. | |
319 | // Return. | |
320 | // none. | |
321 | char name[4]; | |
322 | Float_t param[5]; | |
323 | ||
324 | param[0] = fScale*rmin; | |
325 | param[1] = fScale*rmax; | |
326 | param[2] = fScale*dz; | |
327 | param[3] = phi1; | |
328 | param[4] = phi2; | |
329 | name[0] = 'I'; | |
330 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
331 | gMC->Gsvolu(name,"TUBS",fidmed[med],param,5); | |
332 | } | |
333 | //______________________________________________________________________ | |
334 | void AliITSv11::Cone(const char gnam[3],const TString &dis,Double_t dz, | |
335 | Double_t rmin1,Double_t rmax1,Double_t rmin2, | |
336 | Double_t rmax2,Int_t med){ | |
337 | // Interface to TMC->Gsvolu() for ITS Cone geometries. Conical tube. It | |
338 | // has 5 parameters. See SetScale() | |
339 | // for units. Default units are geant 3 [cm]. | |
340 | // Inputs: | |
341 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
342 | // is appended to the front to indecate that this | |
343 | // is an ITS volume. | |
344 | // TString &dis String containging part discription. | |
345 | // Double_t dz half-length along the z-axis | |
346 | // Double_t rmin1 Inside Radius at -dz. | |
347 | // Double_t rmax1 Outside Radius at -dz. | |
348 | // Double_t rmin2 inside radius at +dz. | |
349 | // Double_t rmax2 outside radius at +dz. | |
350 | // Int_t med media index number. | |
351 | // Output: | |
352 | // none. | |
353 | // Return. | |
354 | // none. | |
355 | char name[4]; | |
356 | Float_t param[5]; | |
357 | ||
358 | param[0] = fScale*dz; | |
359 | param[1] = fScale*rmin1; | |
360 | param[2] = fScale*rmax1; | |
361 | param[3] = fScale*rmin2; | |
362 | param[4] = fScale*rmax2; | |
363 | name[0] = 'I'; | |
364 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
365 | gMC->Gsvolu(name,"CONS",fidmed[med],param,5); | |
366 | } | |
367 | //______________________________________________________________________ | |
368 | void AliITSv11::ConeSegment(const char gnam[3],const TString &dis,Double_t dz, | |
369 | Double_t rmin1,Double_t rmax1,Double_t rmin2, | |
370 | Double_t rmax2,Double_t phi1,Double_t phi2, | |
371 | Int_t med){ | |
372 | // Interface to TMC->Gsvolu() for ITS ConS geometries. One segment of a | |
373 | // conical tube. It has 7 parameters. Phi1 should be smaller than phi2. If | |
374 | // this is not the case, the system adds 360 degrees to phi2. See | |
375 | // SetScale() for units. Default units are geant 3 [cm]. | |
376 | // Inputs: | |
377 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
378 | // is appended to the front to indecate that this | |
379 | // is an ITS volume. | |
380 | // TString &dis String containging part discription. | |
381 | // Double_t dz half-length along the z-axis | |
382 | // Double_t rmin1 Inside Radius at -dz. | |
383 | // Double_t rmax1 Outside Radius at -dz. | |
384 | // Double_t rmin2 inside radius at +dz. | |
385 | // Double_t rmax2 outside radius at +dz. | |
386 | // Double_t phi1 Starting angle of the segment [degree]. | |
387 | // Double_t phi2 Ending angle of the segment [degree]. | |
388 | // Int_t med media index number. | |
389 | // Output: | |
390 | // none. | |
391 | // Return. | |
392 | // none. | |
393 | char name[4]; | |
394 | Float_t param[7]; | |
395 | ||
396 | param[0] = fScale*dz; | |
397 | param[1] = fScale*rmin1; | |
398 | param[2] = fScale*rmax1; | |
399 | param[3] = fScale*rmin2; | |
400 | param[4] = fScale*rmax2; | |
401 | param[5] = phi1; | |
402 | param[6] = phi2; | |
403 | name[0] = 'I'; | |
404 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
405 | gMC->Gsvolu(name,"CONS",fidmed[med],param,7); | |
406 | } | |
407 | //______________________________________________________________________ | |
408 | void AliITSv11::Sphere(const char gnam[3],const TString &dis,Double_t rmin, | |
409 | Double_t rmax,Double_t the1,Double_t the2,Double_t phi1, | |
410 | Double_t phi2,Int_t med){ | |
411 | // Interface to TMC->Gsvolu() for ITS SPHE geometries. Segment of a | |
412 | // sphereical shell. It has 6 parameters. See SetScale() | |
413 | // for units. Default units are geant 3 [cm]. | |
414 | // Inputs: | |
415 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
416 | // is appended to the front to indecate that this | |
417 | // is an ITS volume. | |
418 | // TString &dis String containging part discription. | |
419 | // Double_t rmin Inside Radius. | |
420 | // Double_t rmax Outside Radius. | |
421 | // Double_t the1 staring polar angle of the shell [degree]. | |
422 | // Double_t the2 ending polar angle of the shell [degree]. | |
423 | // Double_t phui staring asimuthal angle of the shell [degree]. | |
424 | // Double_t phi2 ending asimuthal angle of the shell [degree]. | |
425 | // Int_t med media index number. | |
426 | // Output: | |
427 | // none. | |
428 | // Return. | |
429 | // none. | |
430 | char name[4]; | |
431 | Float_t param[6]; | |
432 | ||
433 | param[0] = fScale*rmin; | |
434 | param[1] = fScale*rmax; | |
435 | param[2] = the1; | |
436 | param[3] = the2; | |
437 | param[4] = phi1; | |
438 | param[5] = phi2; | |
439 | name[0] = 'I'; | |
440 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
441 | gMC->Gsvolu(name,"SPHE",fidmed[med],param,6); | |
442 | } | |
443 | //______________________________________________________________________ | |
444 | void AliITSv11::Parallelepiped(const char gnam[3],const TString &dis, | |
445 | Double_t dx,Double_t dy,Double_t dz, | |
446 | Double_t alph,Double_t thet,Double_t phi, | |
447 | Int_t med){ | |
448 | // Interface to TMC->Gsvolu() for ITS PARA geometries. Parallelepiped. It | |
449 | // has 6 parameters. See SetScale() for units. Default units are geant 3 | |
450 | // [cm]. | |
451 | // Inputs: | |
452 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
453 | // is appended to the front to indecate that this | |
454 | // is an ITS volume. | |
455 | // TString &dis String containging part discription. | |
456 | // Double_t dx half-length allong x-axis | |
457 | // Double_t dy half-length allong y-axis | |
458 | // Double_t dz half-length allong z-axis | |
459 | // Double_t alpha angle formed by the y axis and by the plane | |
460 | // joining the center of teh faces parallel to the | |
461 | // z-x plane at -dY and +dy [degree]. | |
462 | // Double_t thet polar angle of the line joining the centers of | |
463 | // the faces at -dz and +dz in z [degree]. | |
464 | // Double_t phi azimuthal angle of teh line joing the centers of | |
465 | // the faaces at -dz and +dz in z [degree]. | |
466 | // Int_t med media index number. | |
467 | // Output: | |
468 | // none. | |
469 | // Return. | |
470 | // none. | |
471 | char name[4]; | |
472 | Float_t param[6]; | |
473 | ||
474 | param[0] = fScale*dx; | |
475 | param[1] = fScale*dy; | |
476 | param[2] = fScale*dz; | |
477 | param[3] = alpha; | |
478 | param[4] = thet; | |
479 | param[5] = phi; | |
480 | name[0] = 'I'; | |
481 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
482 | gMC->Gsvolu(name,"PARA",fidmed[med],param,6); | |
483 | } | |
484 | //______________________________________________________________________ | |
485 | void AliITSv11::Polygon(const char gnam[3],const TString &dis,Double_t phi1, | |
486 | Double_t dphi,Int_t npdv,Int_t nz,Double_t *z, | |
487 | Double_t *rmin,Double_t *rmax,Double_t ,Int_t med){ | |
488 | // Interface to TMC->Gsvolu() for ITS PGON geometry. Polygon It has 10 | |
489 | // parameters or more. See SetScale() for units. Default units are geant 3 | |
490 | // [cm]. | |
491 | // Inputs: | |
492 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
493 | // is appended to the front to indecate that this | |
494 | // is an ITS volume. | |
495 | // TString &dis String containging part discription. | |
496 | // Double_t phi1 the azimuthal angle at which the volume begins | |
497 | // (angles are counted clouterclockwise) [degrees]. | |
498 | // Double_t dphi opening angle of the volume, which extends from | |
499 | // phi1 to phi1+dphi [degree]. | |
500 | // Int_t npdv the number of sides of teh cross section between | |
501 | // the given phi limits. | |
502 | // Int_t nz number of planes perpendicular to the z axis | |
503 | // where the dimension of the section is given - | |
504 | // this number should be at least 2 and NP triples | |
505 | // of number must follow. | |
506 | // Double_t *z array [nz] of z coordiates of the sections.. | |
507 | // Double_t *rmin array [nz] of radius of teh circle tangent to | |
508 | // the sides of the inner polygon in teh | |
509 | // cross-section. | |
510 | // Double_t *rmax array [nz] of radius of the circle tangent to | |
511 | // the sides of the outer polygon in the | |
512 | // cross-section. | |
513 | // Int_t med media index number. | |
514 | // Output: | |
515 | // none. | |
516 | // Return. | |
517 | // none. | |
518 | char name[4]; | |
519 | Float_t *param; | |
520 | Int_t n,i; | |
521 | ||
522 | n = 4+3*nz; | |
523 | param = new Float_t[n] | |
524 | param[0] = phi1; | |
525 | param[1] = dphi; | |
526 | param[2] = (Float_t)npdv; | |
527 | param[3] = (Float_t)nz; | |
528 | for(i=0;i<nz;i++){ | |
529 | param[4+3*i] = z[i]; | |
530 | param[5+3*i] = rmin[i]; | |
531 | param[6+3*i] = rmax[i]; | |
532 | } // end for i | |
533 | name[0] = 'I'; | |
534 | for(i=0;i<3;i++) name[i+1] = gnam[i]; | |
535 | gMC->Gsvolu(name,"PGON",fidmed[med],param,n); | |
536 | ||
537 | delete[] param; | |
538 | } | |
539 | //______________________________________________________________________ | |
540 | void AliITSv11::PolyCone(const char gnam[3],const TString &dis,Double_t phi1, | |
541 | Double_t dphi,Int_t nz,Double_t *z,Double_t *rmin, | |
542 | Double_t *rmax,Int_t med){ | |
543 | // Interface to TMC->Gsvolu() for ITS PCON geometry. Poly-cone It has 9 | |
544 | // parameters or more. See SetScale() for units. Default units are geant 3 | |
545 | // [cm]. | |
546 | // Inputs: | |
547 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
548 | // is appended to the front to indecate that this | |
549 | // is an ITS volume. | |
550 | // TString &dis String containging part discription. | |
551 | // Double_t phi1 the azimuthal angle at which the volume begins | |
552 | // (angles are counted clouterclockwise) [degrees]. | |
553 | // Double_t dphi opening angle of the volume, which extends from | |
554 | // phi1 to phi1+dphi [degree]. | |
555 | // Int_t nz number of planes perpendicular to the z axis | |
556 | // where the dimension of the section is given - | |
557 | // this number should be at least 2 and NP triples | |
558 | // of number must follow. | |
559 | // Double_t *z Array [nz] of z coordinate of the section. | |
560 | // Double_t *rmin Array [nz] of radius of teh inner circle in the | |
561 | // cross-section. | |
562 | // Double_t *rmax Array [nz] of radius of the outer circle in the | |
563 | // cross-section. | |
564 | // Int_t med media index number. | |
565 | // Output: | |
566 | // none. | |
567 | // Return. | |
568 | // none. | |
569 | char name[4]; | |
570 | Float_t *param; | |
571 | Int_t n,i; | |
572 | ||
573 | n = 3+3*nz; | |
574 | param = new Float_t[n]; | |
575 | param[0] = phi1; | |
576 | param[1] = dphi; | |
577 | param[2] = (Float_t) nz; | |
578 | for(i=0;i<nz;i++){ | |
579 | param[3+3*i] = z[i]; | |
580 | param[4+3*i] = rmin[i]; | |
581 | param[5+3*i] = rmax[i]; | |
582 | } // end for i | |
583 | name[0] = 'I'; | |
584 | for(i=0;i<3;i++) name[i+1] = gnam[i]; | |
585 | gMC->Gsvolu(name,"PCON",fidmed[med],param,n); | |
586 | ||
587 | delete[] param; | |
588 | } | |
589 | //______________________________________________________________________ | |
590 | void AliITSv11::TubeElliptical(const char gnam[3],const TString &dis, | |
591 | Double_t p1,Double_t p2,Double_t dz,Int_t med){ | |
592 | // Interface to TMC->Gsvolu() for ITS ELTU geometries. Elliptical | |
593 | // cross-section Tube. It has 3 parameters. See SetScale() | |
594 | // for units. Default units are geant 3 [cm]. The equation of the surface | |
595 | // is x^2 * p1^-2 + y^2 * p2^-2 = 1. | |
596 | // Inputs: | |
597 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
598 | // is appended to the front to indecate that this | |
599 | // is an ITS volume. | |
600 | // TString &dis String containging part discription. | |
601 | // Double_t p1 semi-axis of the elipse along x. | |
602 | // Double_t p2 semi-axis of the elipse along y. | |
603 | // Double_t dz half-length along the z-axis | |
604 | // Int_t med media index number. | |
605 | // Output: | |
606 | // none. | |
607 | // Return. | |
608 | // none. | |
609 | char name[4]; | |
610 | Float_t param[3]; | |
611 | ||
612 | param[0] = fScale*p1; | |
613 | param[1] = fScale*p2; | |
614 | param[2] = fScale*dz; | |
615 | name[0] = 'I'; | |
616 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
617 | gMC->Gsvolu(name,"ELTU",fidmed[med],param,3); | |
618 | } | |
619 | //______________________________________________________________________ | |
620 | void AliITSv11::HyperbolicTube(const char gnam[3],const TString &dis, | |
621 | Double_t rmin,Double_t rmax,Double_t dz, | |
622 | Double_t thet,Int_t med){ | |
623 | // Interface to TMC->Gsvolu() for ITS HYPE geometries. Hyperbolic tube. | |
624 | // Fore example the inner and outer surfaces are hyperboloids, as would be | |
625 | // foumed by a system of cylinderical wires which were then rotated | |
626 | // tangentially about their centers. It has 4 parameters. See SetScale() | |
627 | // for units. Default units are geant 3 [cm]. The hyperbolic surfaces are | |
628 | // given by r^2 = (ztan(thet)^2 + r(z=0)^2. | |
629 | // Inputs: | |
630 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
631 | // is appended to the front to indecate that this | |
632 | // is an ITS volume. | |
633 | // TString &dis String containging part discription. | |
634 | // Double_t rmin Inner radius at z=0 where tube is narrowest. | |
635 | // Double_t rmax Outer radius at z=0 where tube is narrowest. | |
636 | // Double_t dz half-length along the z-axis | |
637 | // Double_t thet stero angel of rotation of the two faces | |
638 | // [degrees]. | |
639 | // Int_t med media index number. | |
640 | // Output: | |
641 | // none. | |
642 | // Return. | |
643 | // none. | |
644 | char name[4]; | |
645 | Float_t param[4]; | |
646 | ||
647 | param[0] = fScale*rmin; | |
648 | param[1] = fScale*rmax; | |
649 | param[2] = fScale*dz; | |
650 | param[3] = thet; | |
651 | name[0] = 'I'; | |
652 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
653 | gMC->Gsvolu(name,"HYPE",fidmed[med],param,4); | |
654 | } | |
655 | //______________________________________________________________________ | |
656 | void AliITSv11::TwistedTrapezoid(const char gnam[3],const TString &dis, | |
657 | Double_t dz,Double_t thet,Double_t phi, | |
658 | Double_t twist,Double_t h1,Double_t bl1, | |
659 | Double_t tl1,Double_t apl1,Double_t h2, | |
660 | Double_t bl2,Double_t tl2,Double_t apl2, | |
661 | Int_t med){ | |
662 | // Interface to TMC->Gsvolu() for ITS GTRA geometries. General twisted | |
663 | // trapazoid. The faces perpendicular to z are trapazia and their centers | |
664 | // are not necessarily on a line parallel to the z axis as the TRAP. | |
665 | // Additionally, the faces may be twisted so that none of their edges are | |
666 | // parallel. It is a TRAP shape, exept that it is twisted in the x-y plane | |
667 | // as a function of z. The parallel sides perpendicular to the x axis are | |
668 | // rotated with respect to the x axis by an angle TWIST, which is one of | |
669 | // the parameters. The shape is defined by the eight corners and is assumed | |
670 | // to be constructed of straight lines joingin points on the boundry of the | |
671 | // trapezoidal face at Z=-dz to the coresponding points on the face at | |
672 | // z=+dz. Divisions are not allowed. It has 12 parameters. See SetScale() | |
673 | // for units. Default units are geant 3 [cm]. Note: This shape suffers from | |
674 | // the same limitations than the TRAP. The tracking routines assume that | |
675 | // the faces are planar, but htis constraint is not easily expressed in | |
676 | // terms of the 12 parameters. Additionally, no check on th efaces is | |
677 | // performed in this case. Users should avoid to use this shape as much as | |
678 | // possible, and if they have to do so, they should make sure that the | |
679 | // faces are really planes. If this is not the case, the result of the | |
680 | // trasport is unpredictable. To accelerat ethe computations necessary for | |
681 | // trasport, 18 additioanl parameters are calculated for this shape are | |
682 | // 1 DXODZ dx/dz of the line joing the centers of the faces at z=+_dz. | |
683 | // 2 DYODZ dy/dz of the line joing the centers of the faces at z=+_dz. | |
684 | // 3 XO1 x at z=0 for line joing the + on parallel side, perpendicular | |
685 | // corners at z=+_dz. | |
686 | // 4 YO1 y at z=0 for line joing the + on parallel side, + on | |
687 | // perpendicular corners at z=+-dz. | |
688 | // 5 DXDZ1 dx/dz for line joing the + on parallel side, + on | |
689 | // perpendicular corners at z=+-dz. | |
690 | // 6 DYDZ1 dy/dz for line joing the + on parallel side, + on | |
691 | // perpendicular corners at z=+-dz. | |
692 | // 7 X02 x at z=0 for line joing the - on parallel side, + on | |
693 | // perpendicular corners at z=+-dz. | |
694 | // 8 YO2 y at z=0 for line joing the - on parallel side, + on | |
695 | // perpendicular corners at z=+-dz. | |
696 | // 9 DXDZ2 dx/dz for line joing the - on parallel side, + on | |
697 | // perpendicular corners at z=+-dz. | |
698 | // 10 DYDZ2dy/dz for line joing the - on parallel side, + on | |
699 | // perpendicular corners at z=+-dz. | |
700 | // 11 XO3 x at z=0 for line joing the - on parallel side, - on | |
701 | // perpendicular corners at z=+-dz. | |
702 | // 12 YO3 y at z=0 for line joing the - on parallel side, - on | |
703 | // perpendicular corners at z=+-dz. | |
704 | // 13 DXDZ3 dx/dzfor line joing the - on parallel side, - on | |
705 | // perpendicular corners at z=+-dz. | |
706 | // 14 DYDZ3 dydz for line joing the - on parallel side, - on | |
707 | // perpendicular corners at z=+-dz. | |
708 | // 15 XO4 x at z=0 for line joing the + on parallel side, - on | |
709 | // perpendicular corners at z=+-dz. | |
710 | // 16 YO4 y at z=0 for line joing the + on parallel side, - on | |
711 | // perpendicular corners at z=+-dz. | |
712 | // 17 DXDZ4 dx/dz for line joing the + on parallel side, - on | |
713 | // perpendicular corners at z=+-dz. | |
714 | // 18 DYDZ4 dydz for line joing the + on parallel side, - on | |
715 | // perpendicular corners at z=+-dz. | |
716 | // Inputs: | |
717 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
718 | // is appended to the front to indecate that this | |
719 | // is an ITS volume. | |
720 | // TString &dis String containging part discription. | |
721 | // Double_t dz half-length along the z axis. | |
722 | // Double_t thet polar angle of the line joing the center of the | |
723 | // face at -dz to the center of the one at +dz | |
724 | // [degrees]. | |
725 | // Double_t phi Azymuthal angle of teh line joing the centre of | |
726 | // the face at -dz to the center of the one at +dz | |
727 | // [degrees]. | |
728 | // Double_t twist Twist angle of the faces parallel to the x-y | |
729 | // plane at z=+-dz around an axis parallel to z | |
730 | // passing through their centre [degrees]. | |
731 | // Double_t h1 Half-length along y of the face at -dz. | |
732 | // Double_t bl1 half-length along x of the side -h1 in y of the | |
733 | // face at -dz in z. | |
734 | // Double_t tl1 half-length along x of the side at +h1 in y of | |
735 | // the face at -dz in z. | |
736 | // Double_t apl1 Angle with respect to the y ais from the center | |
737 | // of the side at -h1 in y to the centere of the | |
738 | // side at +h1 in y of the face at -dz in z | |
739 | // [degrees]. | |
740 | // Double_t h2 half-length along the face at +dz. | |
741 | // Double_t bl2 half-length along x of the side at -h2 in y of | |
742 | // the face at -dz in z. | |
743 | // Double_t tl2 half-length along x of the side at +h2 in y of | |
744 | // the face at +dz in z. | |
745 | // Double_t apl2 angle with respect to the y axis from the center | |
746 | // of the side at -h2 in y to the center of the side | |
747 | // at +h2 in y of the face at +dz in z [degrees]. | |
748 | // Int_t med media index number. | |
749 | // Output: | |
750 | // none. | |
751 | // Return. | |
752 | // none. | |
753 | char name[4]; | |
754 | Float_t param[12]; | |
755 | ||
756 | param[0] = fScale*dz; | |
757 | param[1] = thet; | |
758 | param[2] = phi; | |
759 | param[3] = twist; | |
760 | param[4] = fScale*h1; | |
761 | param[5] = fScale*bl1; | |
762 | param[6] = fScale*tl1; | |
763 | param[7] = alp1; | |
764 | param[8] = fScale*h2; | |
765 | param[9] = fScale*bl2; | |
766 | param[10] = fScale*tl2; | |
767 | param[11] = alp2; | |
768 | name[0] = 'I'; | |
769 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
770 | gMC->Gsvolu(name,"GTRA",fidmed[med],param,12); | |
771 | } | |
772 | //______________________________________________________________________ | |
773 | void AliITSv11::CutTube(const char gnam[3],const TString &dis,Double_t rmin, | |
774 | Double_t rmax,Double_t dz,Double_t phi1,Double_t phi2, | |
775 | Double_t lx,Double_t ly,Double_t lz,Double_t hx, | |
776 | Double_t hy,Double_t hz,Int_t med){ | |
777 | // Interface to TMC->Gsvolu() for ITS CTUB geometries. Cut tube. A tube cut | |
778 | // at the extremities with planes not necessarily perpendicular tot he z | |
779 | // axis. It has 11 parameters. See SetScale() for units. Default units are | |
780 | // geant 3 [cm]. phi1 should be smaller than phi2. If this is not the case, | |
781 | // the system adds 360 degrees to phi2. | |
782 | // Inputs: | |
783 | // const char gnam[3] 3 character geant volume name. The letter "I" | |
784 | // is appended to the front to indecate that this | |
785 | // is an ITS volume. | |
786 | // TString &dis String containging part discription. | |
787 | // Double_t rmin Inner radius at z=0 where tube is narrowest. | |
788 | // Double_t rmax Outer radius at z=0 where tube is narrowest. | |
789 | // Double_t dz half-length along the z-axis | |
790 | // Double_t dz half-length along the z-axis | |
791 | // Double_t phi1 Starting angle of the segment [degree]. | |
792 | // Double_t phi2 Ending angle of the segment [degree]. | |
793 | // Double_t lx x component of a unit vector perpendicular to | |
794 | // the face at -dz. | |
795 | // Double_t ly y component of a unit vector perpendicular to | |
796 | // the face at -dz. | |
797 | // Double_t lz z component of a unit vector perpendicular to | |
798 | // the face at -dz. | |
799 | // Double_t hx x component of a unit vector perpendicular to | |
800 | // the face at +dz. | |
801 | // Double_t hy y component of a unit vector perpendicular to | |
802 | // the face at +dz. | |
803 | // Double_t hz z component of a unit vector perpendicular to | |
804 | // the face at +dz. | |
805 | // Int_t med media index number. | |
806 | // Output: | |
807 | // none. | |
808 | // Return. | |
809 | // none. | |
810 | char name[4]; | |
811 | Float_t param[11]; | |
812 | ||
813 | param[0] = fScale*rmin; | |
814 | param[1] = fScale*rmax; | |
815 | param[2] = fScale*dz; | |
816 | param[3] = phi1; | |
817 | param[4] = phi2; | |
818 | param[5] = lx; | |
819 | param[6] = ly; | |
820 | param[7] = lz; | |
821 | param[8] = hx; | |
822 | param[9] = hy; | |
823 | param[10] = hz; | |
824 | name[0] = 'I'; | |
825 | for(Int_t i=0;i<3;i++) name[i+1] = gnam[i]; | |
826 | gMC->Gsvolu(name,"CTUB",fidmed[med],param,11); | |
827 | } | |
828 | //______________________________________________________________________ | |
829 | void AliITSv11::Pos(const char vol[3],Int_t cn,const char moth[3],Double_t x, | |
830 | Double_t y,Double_t z,Int_t irot){ | |
831 | // Place a copy of a volume previously defined by a call to GSVOLU inside | |
832 | // its mother volulme moth. | |
833 | // Inputs: | |
834 | // const char vol[3] 3 character geant volume name. The letter "I" | |
835 | // is appended to the front to indecate that this | |
836 | // is an ITS volume. | |
837 | // const char moth[3] 3 character geant volume name of the mother volume | |
838 | // in which vol will be placed. The letter "I" is | |
839 | // appended to the front to indecate that this is an | |
840 | // ITS volume. | |
841 | // Double_t x The x positon of the volume in the mother's | |
842 | // reference system | |
843 | // Double_t y The y positon of the volume in the mother's | |
844 | // reference system | |
845 | // Double_t z The z positon of the volume in the mother's | |
846 | // reference system | |
847 | // Int_t irot the index for the rotation matrix to be used. | |
848 | // irot=-1 => unit rotation. | |
849 | // Outputs: | |
850 | // none. | |
851 | // Return: | |
852 | // none. | |
853 | char name[4],mother[4]; | |
854 | Float_t param[3]; | |
855 | Int_t r=0,i; | |
856 | ||
857 | param[0] = x; | |
858 | param[1] = y; | |
859 | param[2] = z; | |
860 | name[0] = 'I'; | |
861 | for(i=0;i<3;i++) name[i+1] = vol[i]; | |
862 | mother[0] = 'I'; | |
863 | for(i=0;i<3;i++) mother[i+1] = moth[i]; | |
864 | if(irot>=0) r=fidrot[irot]; | |
865 | fMC->Gspos(name,mother,param[0],param[1],param[2],r,"ONLY"); | |
866 | } | |
867 | //______________________________________________________________________ | |
868 | void AliITSv11::Matrix(Int_t irot,Double_t thet1,Double_t phi1, | |
869 | Double_t thet2,Double_t phi2, | |
870 | Double_t thet3,Double_t phi3){ | |
871 | // Defines a Geant rotation matrix. checks to see if it is the unit | |
872 | // matrix. If so, then no additonal matrix is defined. Stores rotation | |
873 | // matrix irot in the data structure JROTM. If the matrix is not | |
874 | // orthonormal, it will be corrected by setting y' perpendicular to x' | |
875 | // and z' = x' X y'. A warning message is printed in this case. | |
876 | // Inputs: | |
877 | // Int_t irot Intex specifing which rotation matrix. | |
878 | // Double_t thet1 Polar angle for axisw x [degrees]. | |
879 | // Double_t phi1 azimuthal angle for axis x [degrees]. | |
880 | // Double_t thet12Polar angle for axisw y [degrees]. | |
881 | // Double_t phi2 azimuthal angle for axis y [degrees]. | |
882 | // Double_t thet3 Polar angle for axisw z [degrees]. | |
883 | // Double_t phi3 azimuthal angle for axis z [degrees]. | |
884 | // Outputs: | |
885 | // none. | |
886 | // Return: | |
887 | // none. | |
888 | Float_t t1,p1,t2,p2,t3,p3; | |
889 | ||
890 | if(thet1==90.0&&phi1==0.0&&thet2==90.0&&phi2==90.0&&thet3==0.0&&phi3==0.0){ | |
891 | fidrot[irot] = 0; // Unit matrix | |
892 | }else{ | |
893 | t1 = thet1; | |
894 | p1 = phi1; | |
895 | t2 = thet2; | |
896 | p2 = phi2; | |
897 | t3 = thet3; | |
898 | p3 = phi3 | |
899 | AliMatrix(fidrot[irot],t1,p1,t2,p2,t3,p3); | |
900 | } // end if | |
901 | } | |
902 | //______________________________________________________________________ | |
903 | void AliITSv11::Matrix(Int_t irot,Double_t rot[3][3]){ | |
904 | // Defines a Geant rotation matrix. checks to see if it is the unit | |
905 | // matrix. If so, then no additonal matrix is defined. Stores rotation | |
906 | // matrix irot in the data structure JROTM. If the matrix is not | |
907 | // orthonormal, it will be corrected by setting y' perpendicular to x' | |
908 | // and z' = x' X y'. A warning message is printed in this case. | |
909 | // Inputs: | |
910 | // Int_t irot Intex specifing which rotation matrix. | |
911 | // Double_t rot[3][3] The 3 by 3 rotation matrix. | |
912 | // Outputs: | |
913 | // none. | |
914 | // Return: | |
915 | // none. | |
916 | ||
917 | if(rot[0][0]==1.0&&rot[1][1]==1.0&&rot[2][2]==1.0&& | |
918 | rot[0][1]==0.0&&rot[0][2]==0.0&&rot[1][0]==0.0&& | |
919 | rot[1][2]==0.0&&rot[2][0]==0.0&&rot[2][1]==0.0){ | |
920 | fidrot[irot] = 0; // Unit matrix | |
921 | }else{ | |
922 | Double_t si,c=180./TMath::Pi(); | |
923 | Double_t ang[6]; | |
924 | ||
925 | ang[1] = TMath::ATan2(rot[0][1],rot[0][0]); | |
926 | if(TMath::Cos(ang[1])!=0.0) si = rot[0][0]/TMath::Cos(ang[1]); | |
927 | else si = rot[0][1]/TMath::Sin(ang[1]); | |
928 | ang[0] = TMath::ATan2(si,rot[0][2]); | |
929 | ||
930 | ang[3] = TMath::ATan2(rot[1][1],rot[1][0]); | |
931 | if(TMath::Cos(ang[3])!=0.0) si = rot[1][0]/TMath::Cos(ang[3]); | |
932 | else si = rot[1][1]/TMath::Sin(ang[3]); | |
933 | ang[2] = TMath::ATan2(si,rot[1][2]); | |
934 | ||
935 | ang[5] = TMath::ATan2(rot[2][1],rot[2][0]); | |
936 | if(TMath::Cos(ang[5])!=0.0) si = rot[2][0]/TMath::Cos(ang[5]); | |
937 | else si = rot[2][1]/TMath::Sin(ang[5]); | |
938 | ang[4] = TMath::ATan2(si,rot[2][2]); | |
939 | ||
940 | for(Int_t i=0;i<6;i++) {ang[i] *= c; if(ang[i]<0.0) ang[i] += 360.;} | |
941 | AliMatrix(fidrot[irot],ang[0],ang[1],ang[2],ang[3],ang[4],ang[5]); | |
942 | } // end if | |
943 | } | |
944 | //______________________________________________________________________ | |
945 | void AliITSv11::Matrix(Int_t irot,Int_t axis,Double_t thet){ | |
946 | // Defines a Geant rotation matrix. checks to see if it is the unit | |
947 | // matrix. If so, then no additonal matrix is defined. Stores rotation | |
948 | // matrix irot in the data structure JROTM. If the matrix is not | |
949 | // orthonormal, it will be corrected by setting y' perpendicular to x' | |
950 | // and z' = x' X y'. A warning message is printed in this case. | |
951 | // Inputs: | |
952 | // Int_t irot Intex specifing which rotation matrix. | |
953 | // Int_t axis Axis about which rotation is to be done. | |
954 | // Double_t thet Angle to rotate by [degrees]. | |
955 | // Outputs: | |
956 | // none. | |
957 | // Return: | |
958 | // none. | |
959 | ||
960 | if(thet==0.0){ | |
961 | fidrot[irot] = 0; // Unit matrix | |
962 | }else{ | |
963 | switch (irot) { | |
964 | case 0: //Rotate about x-axis, x-axis does not change. | |
965 | AliMatrix(fidrot[irot],90.0,0.0,90.0+thet,90.0,thet,90.0); | |
966 | break; | |
967 | case 1: //Rotate about y-axis, y-axis does not change. | |
968 | AliMatrix(fidrot[irot],-90.0-thet,0.0,90.0,90.0,thet,90.0); | |
969 | break; | |
970 | case 2: //Rotate about z-axis, z-axis does not change. | |
971 | AliMatrix(fidrot[irot],90.0,thet,90.0,-thet-90.0,0.0,0.0); | |
972 | break; | |
973 | default: | |
974 | Error("Matrix","axis must be either 0, 1, or 2. for matrix=%d", | |
975 | irot); | |
976 | break; | |
977 | } // end if | |
978 | } | |
979 | //______________________________________________________________________ | |
980 | void AliITSv11::CreateGeometry(){ | |
981 | //////////////////////////////////////////////////////////////////////// | |
982 | // This routine defines and Creates the geometry for version 9 of the ITS. | |
983 | //////////////////////////////////////////////////////////////////////// | |
984 | } |