b61f366fdc8a5903f0254307464cb3a2a9232980
[u/mrichter/AliRoot.git] / ITS / AliITSv11.cxx
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 Revision 1.3  2003/01/28 17:59:54  nilsen
19 Work continuing.
20
21 Revision 1.2  2003/01/26 14:35:15  nilsen
22 Some more geometry interface functions added and a start at the SSD support
23 cone geometry. Committed to allow easy updates of partical work between authors.
24
25 Revision 1.1  2003/01/20 23:32:49  nilsen
26 New ITS geometry. Only a Skeleton for now.
27
28 $Id$
29 */
30
31 //////////////////////////////////////////////////////////////////////////////
32 //                                                                          //
33 //  Inner Traking System version 11                                         //
34 //  This class contains the base procedures for the Inner Tracking System   //
35 //                                                                          //
36 // Authors: R. Barbera                                                      //
37 // version 6.                                                               //
38 // Created  2000.                                                           //
39 //                                                                          //
40 //  NOTE: THIS IS THE  SYMMETRIC PPR geometry of the ITS.                   //
41 // THIS WILL NOT WORK                                                       //
42 // with the geometry or module classes or any analysis classes. You are     //
43 // strongly encouraged to uses AliITSv5.                                    //
44 //                                                                          //
45 //////////////////////////////////////////////////////////////////////////////
46 // See AliITSv11::StepManager().
47 #include <Riostream.h>
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <TMath.h>
51 #include <TGeometry.h>
52 #include <TNode.h>
53 #include <TTUBE.h>
54 #include <TTUBS.h>
55 #include <TPCON.h>
56 #include <TFile.h>    // only required for Tracking function?
57 #include <TCanvas.h>
58 #include <TObjArray.h>
59 #include <TLorentzVector.h>
60 #include <TObjString.h>
61 #include <TClonesArray.h>
62 #include <TBRIK.h>
63 #include <TSystem.h>
64
65
66 #include "AliRun.h"
67 #include "AliMagF.h"
68 #include "AliConst.h"
69 #include "AliITSGeant3Geometry.h"
70 #include "AliITShit.h"
71 #include "AliITS.h"
72 #include "AliITSv11.h"
73 #include "AliITSgeom.h"
74 #include "AliITSgeomSPD.h"
75 #include "AliITSgeomSDD.h"
76 #include "AliITSgeomSSD.h"
77 #include "AliITSDetType.h"
78 #include "AliITSresponseSPD.h"
79 #include "AliITSresponseSDD.h"
80 #include "AliITSresponseSSD.h"
81 #include "AliITSsegmentationSPD.h"
82 #include "AliITSsegmentationSDD.h"
83 #include "AliITSsegmentationSSD.h"
84 #include "AliITSsimulationSPD.h"
85 #include "AliITSsimulationSDD.h"
86 #include "AliITSsimulationSSD.h"
87 #include "AliITSClusterFinderSPD.h"
88 #include "AliITSClusterFinderSDD.h"
89 #include "AliITSClusterFinderSSD.h"
90
91
92 ClassImp(AliITSv11)
93
94 //______________________________________________________________________
95 AliITSv11::AliITSv11() : AliITS() {
96     ////////////////////////////////////////////////////////////////////////
97     //    Standard default constructor for the ITS version 11.
98     ////////////////////////////////////////////////////////////////////////
99 }
100 //______________________________________________________________________
101 AliITSv11::AliITSv11(const char *title) : AliITS("ITS", title){
102     ////////////////////////////////////////////////////////////////////////
103     //    Standard constructor for the ITS version 11.
104     ////////////////////////////////////////////////////////////////////////
105 }
106 //______________________________________________________________________
107 AliITSv11::~AliITSv11() {
108     ////////////////////////////////////////////////////////////////////////
109     //    Standard destructor for the ITS version 11.
110     ////////////////////////////////////////////////////////////////////////
111 }
112 //______________________________________________________________________
113 void AliITSv11::Box(const char gnam[3],const TString &dis,
114                     Double_t dx,Double_t dy,Double_t dz,Int_t med){
115     // Interface to TMC->Gsvolu() for ITS bos geometries. Box with faces
116     // perpendicular to the axes. It has 3 paramters. See SetScale() for
117     // units. Default units are geant 3 [cm].
118     // Inputs:
119     //    const char gnam[3]  3 character geant volume name. The letter "I"
120     //                        is appended to the front to indecate that this
121     //                        is an ITS volume.
122     //    TString &dis        String containging part discription.
123     //    Double_t dx         half-length of box in x-axis
124     //    Double_t dy         half-length of box in y-axis
125     //    Double_t dz         half-length of box in z-axis
126     //    Int_t    med        media index number.
127     // Output:
128     //    none.
129     // Return.
130     //    none.
131     char name[4];
132     Float_t param[3];
133
134     param[0] = fScale*dx;
135     param[1] = fScale*dy;
136     param[2] = fScale*dz;
137     name[0] = 'I';
138     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
139     gMC->Gsvolu(name,"BOX ",fidmed[med],param,3);
140 }
141 //______________________________________________________________________
142 void AliITSv11::Trapezoid1(const char gnam[3],const TString &dis,
143                            Double_t dxn,Double_t dxp,Double_t dy,Double_t dz,
144                            Int_t med){
145     // Interface to TMC->Gsvolu() for ITS TRD1 geometries. Trapezoid with the 
146     // x dimension varing along z. It has 4 parameters. See SetScale() for
147     // units. Default units are geant 3 [cm].
148     // Inputs:
149     //    const char gnam[3]  3 character geant volume name. The letter "I"
150     //                        is appended to the front to indecate that this
151     //                        is an ITS volume.
152     //    TString &dis        String containging part discription.
153     //    Double_t dxn        half-length along x at the z surface positioned 
154     //                        at -DZ
155     //    Double_t dxp        half-length along x at the z surface positioned 
156     //                        at +DZ
157     //    Double_t dy         half-length along the y-axis
158     //    Double_t dz         half-length along the z-axis
159     //    Int_t    med        media index number.
160     // Output:
161     //    none.
162     // Return.
163     //    none.
164     char name[4];
165     Float_t param[4];
166
167     param[0] = fScale*dxn;
168     param[1] = fScale*dxp;
169     param[2] = fScale*dy;
170     param[3] = fScale*dz;
171     name[0] = 'I';
172     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
173     gMC->Gsvolu(name,"TRD1",fidmed[med],param,4);
174 }
175 //______________________________________________________________________
176 void AliITSv11::Trapezoid2(const char gnam[3],const TString &dis,Double_t dxn,
177                            Double_t dxp,Double_t dyn,Double_t dyp,Double_t dz,
178                            Int_t med){
179     // Interface to TMC->Gsvolu() for ITS TRD2 geometries. Trapezoid with the 
180     // x and y dimension varing along z. It has 5 parameters. See SetScale() 
181     // for units. Default units are geant 3 [cm].
182     // Inputs:
183     //    const char gnam[3]  3 character geant volume name. The letter "I"
184     //                        is appended to the front to indecate that this
185     //                        is an ITS volume.
186     //    TString &dis        String containging part discription.
187     //    Double_t dxn        half-length along x at the z surface positioned 
188     //                        at -DZ
189     //    Double_t dxp        half-length along x at the z surface positioned 
190     //                        at +DZ
191     //    Double_t dyn        half-length along x at the z surface positioned 
192     //                        at -DZ
193     //    Double_t dyp        half-length along x at the z surface positioned 
194     //                        at +DZ
195     //    Double_t dz         half-length along the z-axis
196     //    Int_t    med        media index number.
197     // Output:
198     //    none.
199     // Return.
200     //    none.
201     char name[4];
202     Float_t param[5];
203
204     param[0] = fScale*dxn;
205     param[1] = fScale*dxp;
206     param[2] = fScale*dyn;
207     param[3] = fScale*dyp;
208     param[4] = fScale*dz;
209     name[0] = 'I';
210     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
211     gMC->Gsvolu(name,"TRD2",fidmed[med],param,5);
212 }
213 //______________________________________________________________________
214 void AliITSv11::Trapezoid(const char gnam[3],const TString &dis,Double_t dz,
215                           Double_t thet,Double_t phi,Double_t h1,Double_t bl1,
216                           Double_t tl1,Double_t alp1,Double_t h2,Double_t bl2,
217                           Double_t tl2,Double_t alp2,Int_t med){
218     // Interface to TMC->Gsvolu() for ITS TRAP geometries. General Trapezoid, 
219     // The faces perpendicular to z are trapezia and their centers are not 
220     // necessarily on a line parallel to the z axis. This shape has 11 
221     // parameters, but only cosidering that the faces should be planar, only 9 
222     // are really independent. A check is performed on the user parameters and 
223     // a message is printed in case of non-planar faces. Ignoring this warning 
224     // may cause unpredictable effects at tracking time. See SetScale() 
225     // for units. Default units are geant 3 [cm].
226     // Inputs:
227     //    const char gnam[3]  3 character geant volume name. The letter "I"
228     //                        is appended to the front to indecate that this
229     //                        is an ITS volume.
230     //    TString &dis        String containging part discription.
231     //    Double_t dz         Half-length along the z-asix
232     //    Double_t thet       Polar angle of the line joing the center of the 
233     //                        face at -dz to the center of the one at dz 
234     //                        [degree].
235     //    Double_t phi        aximuthal angle of the line joing the center of 
236     //                        the face at -dz to the center of the one at +dz 
237     //                        [degree].
238     //    Double_t h1         half-length along y of the face at -dz.
239     //    Double_t bl1        half-length along x of the side at -h1 in y of 
240     //                        the face at -dz in z.
241     //    Double_t tl1        half-length along x of teh side at +h1 in y of 
242     //                        the face at -dz in z.
243     //    Double_t alp1       angle with respect to the y axis from the center 
244     //                        of the side at -h1 in y to the cetner of the 
245     //                        side at +h1 in y of the face at -dz in z 
246     //                        [degree].
247     //    Double_t h2         half-length along y of the face at +dz
248     //    Double_t bl2        half-length along x of the side at -h2 in y of
249     //                        the face at +dz in z.
250     //    Double_t tl2        half-length along x of the side at _h2 in y of 
251     //                        the face at +dz in z.
252     //    Double_t alp2       angle with respect to the y axis from the center 
253     //                        of the side at -h2 in y to the center of the 
254     //                        side at +h2 in y of the face at +dz in z 
255     //                        [degree].
256     //    Int_t    med        media index number.
257     // Output:
258     //    none.
259     // Return.
260     //    none.
261     char name[4];
262     Float_t param[11];
263
264     param[0] = fScale*dz;
265     param[1] = thet;
266     param[2] = phi;
267     param[3] = fScale*h1;
268     param[4] = fScale*bl1;
269     param[5] = fScale*tl1;
270     param[6] = alp1;
271     param[7] = fScale*h2;
272     param[8] = fScale*bl2;
273     param[9] = fScale*tl2;
274     param[10] = alp2;
275     name[0] = 'I';
276     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
277     gMC->Gsvolu(name,"TRAP",fidmed[med],param,11);
278 }
279 //______________________________________________________________________
280 void AliITSv11::Tube(const char gnam[3],const TString &dis,Double_t rmin,
281                      Double_t rmax,Double_t dz,Int_t med){
282     // Interface to TMC->Gsvolu() for ITS TUBE geometries. Simple Tube. It has
283     // 3 parameters. See SetScale() 
284     // for units. Default units are geant 3 [cm].
285     // Inputs:
286     //    const char gnam[3]  3 character geant volume name. The letter "I"
287     //                        is appended to the front to indecate that this
288     //                        is an ITS volume.
289     //    TString &dis        String containging part discription.
290     //    Double_t rmin       Inside Radius.
291     //    Double_t rmax       Outside Radius.
292     //    Double_t dz         half-length along the z-axis
293     //    Int_t    med        media index number.
294     // Output:
295     //    none.
296     // Return.
297     //    none.
298     char name[4];
299     Float_t param[3];
300
301     param[0] = fScale*rmin;
302     param[1] = fScale*rmax;
303     param[2] = fScale*dz;
304     name[0] = 'I';
305     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
306     gMC->Gsvolu(name,"TUBE",fidmed[med],param,3);
307 }
308 //______________________________________________________________________
309 void AliITSv11::TubeSegment(const char gnam[3],const TString &dis,
310                             Double_t rmin,Double_t rmax,Double_t dz,
311                             Double_t phi1,Double_t phi2,Int_t med){
312     // Interface to TMC->Gsvolu() for ITS TUBE geometries. Phi segment of a 
313     // tube. It has 5  parameters. Phi1 should be smaller than phi2. If this is
314     // not the case, the system adds 360 degrees to phi2. See SetScale() 
315     // for units. Default units are geant 3 [cm].
316     // Inputs:
317     //    const char gnam[3]  3 character geant volume name. The letter "I"
318     //                        is appended to the front to indecate that this
319     //                        is an ITS volume.
320     //    TString &dis        String containging part discription.
321     //    Double_t rmin       Inside Radius.
322     //    Double_t rmax       Outside Radius.
323     //    Double_t dz         half-length along the z-axis
324     //    Double_t phi1       Starting angle of the segment [degree].
325     //    Double_t phi2       Ending angle of the segment [degree].
326     //    Int_t    med        media index number.
327     // Output:
328     //    none.
329     // Return.
330     //    none.
331     char name[4];
332     Float_t param[5];
333
334     param[0] = fScale*rmin;
335     param[1] = fScale*rmax;
336     param[2] = fScale*dz;
337     param[3] = phi1;
338     param[4] = phi2;
339     name[0] = 'I';
340     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
341     gMC->Gsvolu(name,"TUBS",fidmed[med],param,5);
342 }
343 //______________________________________________________________________
344 void AliITSv11::Cone(const char gnam[3],const TString &dis,Double_t dz,
345                      Double_t rmin1,Double_t rmax1,Double_t rmin2,
346                      Double_t rmax2,Int_t med){
347     // Interface to TMC->Gsvolu() for ITS Cone geometries. Conical tube. It 
348     // has 5 parameters. See SetScale() 
349     // for units. Default units are geant 3 [cm].
350     // Inputs:
351     //    const char gnam[3]  3 character geant volume name. The letter "I"
352     //                        is appended to the front to indecate that this
353     //                        is an ITS volume.
354     //    TString &dis        String containging part discription.
355     //    Double_t dz         half-length along the z-axis
356     //    Double_t rmin1      Inside Radius at -dz.
357     //    Double_t rmax1      Outside Radius at -dz.
358     //    Double_t rmin2      inside radius at +dz.
359     //    Double_t rmax2      outside radius at +dz.
360     //    Int_t    med        media index number.
361     // Output:
362     //    none.
363     // Return.
364     //    none.
365     char name[4];
366     Float_t param[5];
367
368     param[0] = fScale*dz;
369     param[1] = fScale*rmin1;
370     param[2] = fScale*rmax1;
371     param[3] = fScale*rmin2;
372     param[4] = fScale*rmax2;
373     name[0] = 'I';
374     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
375     gMC->Gsvolu(name,"CONS",fidmed[med],param,5);
376 }
377 //______________________________________________________________________
378 void AliITSv11::ConeSegment(const char gnam[3],const TString &dis,Double_t dz,
379                             Double_t rmin1,Double_t rmax1,Double_t rmin2,
380                             Double_t rmax2,Double_t phi1,Double_t phi2,
381                             Int_t med){
382     // Interface to TMC->Gsvolu() for ITS ConS geometries. One segment of a 
383     // conical tube. It has 7 parameters. Phi1 should be smaller than phi2. If 
384     // this is not the case, the system adds 360 degrees to phi2. See 
385     // SetScale() for units. Default units are geant 3 [cm].
386     // Inputs:
387     //    const char gnam[3]  3 character geant volume name. The letter "I"
388     //                        is appended to the front to indecate that this
389     //                        is an ITS volume.
390     //    TString &dis        String containging part discription.
391     //    Double_t dz         half-length along the z-axis
392     //    Double_t rmin1      Inside Radius at -dz.
393     //    Double_t rmax1      Outside Radius at -dz.
394     //    Double_t rmin2      inside radius at +dz.
395     //    Double_t rmax2      outside radius at +dz.
396     //    Double_t phi1       Starting angle of the segment [degree].
397     //    Double_t phi2       Ending angle of the segment [degree].
398     //    Int_t    med        media index number.
399     // Output:
400     //    none.
401     // Return.
402     //    none.
403     char name[4];
404     Float_t param[7];
405
406     param[0] = fScale*dz;
407     param[1] = fScale*rmin1;
408     param[2] = fScale*rmax1;
409     param[3] = fScale*rmin2;
410     param[4] = fScale*rmax2;
411     param[5] = phi1;
412     param[6] = phi2;
413     name[0] = 'I';
414     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
415     gMC->Gsvolu(name,"CONS",fidmed[med],param,7);
416 }
417 //______________________________________________________________________
418 void AliITSv11::Sphere(const char gnam[3],const TString &dis,Double_t rmin,
419                        Double_t rmax,Double_t the1,Double_t the2,Double_t phi1,
420                        Double_t phi2,Int_t med){
421     // Interface to TMC->Gsvolu() for ITS SPHE geometries. Segment of a 
422     // sphereical shell. It has 6 parameters. See SetScale() 
423     // for units. Default units are geant 3 [cm].
424     // Inputs:
425     //    const char gnam[3]  3 character geant volume name. The letter "I"
426     //                        is appended to the front to indecate that this
427     //                        is an ITS volume.
428     //    TString &dis        String containging part discription.
429     //    Double_t rmin       Inside Radius.
430     //    Double_t rmax       Outside Radius.
431     //    Double_t the1       staring polar angle of the shell [degree].
432     //    Double_t the2       ending polar angle of the shell [degree].
433     //    Double_t phui       staring asimuthal angle of the shell [degree].
434     //    Double_t phi2       ending asimuthal angle of the shell [degree].
435     //    Int_t    med        media index number.
436     // Output:
437     //    none.
438     // Return.
439     //    none.
440     char name[4];
441     Float_t param[6];
442
443     param[0] = fScale*rmin;
444     param[1] = fScale*rmax;
445     param[2] = the1;
446     param[3] = the2;
447     param[4] = phi1;
448     param[5] = phi2;
449     name[0] = 'I';
450     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
451     gMC->Gsvolu(name,"SPHE",fidmed[med],param,6);
452 }
453 //______________________________________________________________________
454 void AliITSv11::Parallelepiped(const char gnam[3],const TString &dis,
455                                Double_t dx,Double_t dy,Double_t dz,
456                                Double_t alph,Double_t thet,Double_t phi,
457                                Int_t med){
458     // Interface to TMC->Gsvolu() for ITS PARA geometries. Parallelepiped. It 
459     // has 6 parameters. See SetScale() for units. Default units are geant 3 
460     // [cm].
461     // Inputs:
462     //    const char gnam[3]  3 character geant volume name. The letter "I"
463     //                        is appended to the front to indecate that this
464     //                        is an ITS volume.
465     //    TString &dis        String containging part discription.
466     //    Double_t dx         half-length allong x-axis
467     //    Double_t dy         half-length allong y-axis
468     //    Double_t dz         half-length allong z-axis
469     //    Double_t alpha      angle formed by the y axis and by the plane 
470     //                        joining the center of teh faces parallel to the 
471     //                        z-x plane at -dY and +dy [degree].
472     //    Double_t thet       polar angle of the line joining the centers of 
473     //                        the faces at -dz and +dz in z [degree].
474     //    Double_t phi        azimuthal angle of teh line joing the centers of 
475     //                        the faaces at -dz and +dz in z [degree].
476     //    Int_t    med        media index number.
477     // Output:
478     //    none.
479     // Return.
480     //    none.
481     char name[4];
482     Float_t param[6];
483
484     param[0] = fScale*dx;
485     param[1] = fScale*dy;
486     param[2] = fScale*dz;
487     param[3] = alpha;
488     param[4] = thet;
489     param[5] = phi;
490     name[0] = 'I';
491     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
492     gMC->Gsvolu(name,"PARA",fidmed[med],param,6);
493 }
494 //______________________________________________________________________
495 void AliITSv11::Polygon(const char gnam[3],const TString &dis,Double_t phi1,
496                         Double_t dphi,Int_t npdv,Int_t nz,Double_t *z,
497                         Double_t *rmin,Double_t *rmax,Double_t ,Int_t med){
498     // Interface to TMC->Gsvolu() for ITS PGON geometry. Polygon It has 10 
499     // parameters or more. See SetScale() for units. Default units are geant 3 
500     // [cm].
501     // Inputs:
502     //    const char gnam[3]  3 character geant volume name. The letter "I"
503     //                        is appended to the front to indecate that this
504     //                        is an ITS volume.
505     //    TString &dis        String containging part discription.
506     //    Double_t phi1       the azimuthal angle at which the volume begins 
507     //                        (angles are counted clouterclockwise) [degrees].
508     //    Double_t dphi       opening angle of the volume, which extends from 
509     //                        phi1 to phi1+dphi [degree].
510     //    Int_t npdv          the number of sides of teh cross section between 
511     //                        the given phi limits.
512     //    Int_t nz            number of planes perpendicular to the z axis 
513     //                        where the dimension of the section is given - 
514     //                        this number should be at least 2 and NP triples 
515     //                        of number must follow.
516     //    Double_t *z         array [nz] of z coordiates of the sections..
517     //    Double_t *rmin      array [nz] of radius of teh circle tangent to 
518     //                        the sides of the inner polygon in teh 
519     //                        cross-section.
520     //    Double_t *rmax      array [nz] of radius of the circle tangent to 
521     //                        the sides of the outer polygon in the 
522     //                       cross-section.
523     //    Int_t    med        media index number.
524     // Output:
525     //    none.
526     // Return.
527     //    none.
528     char name[4];
529     Float_t *param;
530     Int_t n,i;
531
532     n = 4+3*nz;
533     param = new Float_t[n]
534     param[0] = phi1;
535     param[1] = dphi;
536     param[2] = (Float_t)npdv;
537     param[3] = (Float_t)nz;
538     for(i=0;i<nz;i++){
539         param[4+3*i] = z[i];
540         param[5+3*i] = rmin[i];
541         param[6+3*i] = rmax[i];
542     } // end for i
543     name[0] = 'I';
544     for(i=0;i<3;i++) name[i+1] = gnam[i];
545     gMC->Gsvolu(name,"PGON",fidmed[med],param,n);
546
547     delete[] param;
548 }
549 //______________________________________________________________________
550 void AliITSv11::PolyCone(const char gnam[3],const TString &dis,Double_t phi1,
551                          Double_t dphi,Int_t nz,Double_t *z,Double_t *rmin,
552                          Double_t *rmax,Int_t med){
553     // Interface to TMC->Gsvolu() for ITS PCON geometry. Poly-cone It has 9 
554     // parameters or more. See SetScale() for units. Default units are geant 3 
555     // [cm].
556     // Inputs:
557     //    const char gnam[3]  3 character geant volume name. The letter "I"
558     //                        is appended to the front to indecate that this
559     //                        is an ITS volume.
560     //    TString &dis        String containging part discription.
561     //    Double_t phi1       the azimuthal angle at which the volume begins 
562     //                        (angles are counted clouterclockwise) [degrees].
563     //    Double_t dphi       opening angle of the volume, which extends from 
564     //                        phi1 to phi1+dphi [degree].
565     //    Int_t nz            number of planes perpendicular to the z axis 
566     //                        where the dimension of the section is given - 
567     //                        this number should be at least 2 and NP triples 
568     //                        of number must follow.
569     //    Double_t *z         Array [nz] of z coordinate of the section.
570     //    Double_t *rmin      Array [nz] of radius of teh inner circle in the 
571     //                        cross-section.
572     //    Double_t *rmax      Array [nz] of radius of the outer circle in the 
573     //                        cross-section.
574     //    Int_t    med        media index number.
575     // Output:
576     //    none.
577     // Return.
578     //    none.
579     char name[4];
580     Float_t *param;
581     Int_t n,i;
582
583     n = 3+3*nz;
584     param = new Float_t[n];
585     param[0] = phi1;
586     param[1] = dphi;
587     param[2] = (Float_t) nz;
588     for(i=0;i<nz;i++){
589         param[3+3*i] = z[i];
590         param[4+3*i] = rmin[i];
591         param[5+3*i] = rmax[i];
592     } // end for i
593     name[0] = 'I';
594     for(i=0;i<3;i++) name[i+1] = gnam[i];
595     gMC->Gsvolu(name,"PCON",fidmed[med],param,n);
596
597     delete[] param;
598 }
599 //______________________________________________________________________
600 void AliITSv11::TubeElliptical(const char gnam[3],const TString &dis,
601                                Double_t p1,Double_t p2,Double_t dz,Int_t med){
602     // Interface to TMC->Gsvolu() for ITS ELTU geometries. Elliptical 
603     // cross-section Tube. It has 3 parameters. See SetScale() 
604     // for units. Default units are geant 3 [cm]. The equation of the surface 
605     // is x^2 * p1^-2 + y^2 * p2^-2 = 1.
606     // Inputs:
607     //    const char gnam[3]  3 character geant volume name. The letter "I"
608     //                        is appended to the front to indecate that this
609     //                        is an ITS volume.
610     //    TString &dis        String containging part discription.
611     //    Double_t p1         semi-axis of the elipse along x.
612     //    Double_t p2         semi-axis of the elipse along y.
613     //    Double_t dz         half-length along the z-axis
614     //    Int_t    med        media index number.
615     // Output:
616     //    none.
617     // Return.
618     //    none.
619     char name[4];
620     Float_t param[3];
621
622     param[0] = fScale*p1;
623     param[1] = fScale*p2;
624     param[2] = fScale*dz;
625     name[0] = 'I';
626     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
627     gMC->Gsvolu(name,"ELTU",fidmed[med],param,3);
628 }
629 //______________________________________________________________________
630 void AliITSv11::HyperbolicTube(const char gnam[3],const TString &dis,
631                                Double_t rmin,Double_t rmax,Double_t dz,
632                                Double_t thet,Int_t med){
633     // Interface to TMC->Gsvolu() for ITS HYPE geometries. Hyperbolic tube. 
634     // Fore example the inner and outer surfaces are hyperboloids, as would be 
635     // foumed by a system of cylinderical wires which were then rotated 
636     // tangentially about their centers. It has 4 parameters. See SetScale() 
637     // for units. Default units are geant 3 [cm]. The hyperbolic surfaces are 
638     // given by r^2 = (ztan(thet)^2 + r(z=0)^2.
639     // Inputs:
640     //    const char gnam[3]  3 character geant volume name. The letter "I"
641     //                        is appended to the front to indecate that this
642     //                        is an ITS volume.
643     //    TString &dis        String containging part discription.
644     //    Double_t rmin       Inner radius at z=0 where tube is narrowest.
645     //    Double_t rmax       Outer radius at z=0 where tube is narrowest.
646     //    Double_t dz         half-length along the z-axis
647     //    Double_t thet       stero angel of rotation of the two faces 
648     //                       [degrees].
649     //    Int_t    med        media index number.
650     // Output:
651     //    none.
652     // Return.
653     //    none.
654     char name[4];
655     Float_t param[4];
656
657     param[0] = fScale*rmin;
658     param[1] = fScale*rmax;
659     param[2] = fScale*dz;
660     param[3] = thet;
661     name[0] = 'I';
662     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
663     gMC->Gsvolu(name,"HYPE",fidmed[med],param,4);
664 }
665 //______________________________________________________________________
666 void AliITSv11::TwistedTrapezoid(const char gnam[3],const TString &dis,
667                                  Double_t dz,Double_t thet,Double_t phi,
668                                  Double_t twist,Double_t h1,Double_t bl1,
669                                  Double_t tl1,Double_t apl1,Double_t h2,
670                                  Double_t bl2,Double_t tl2,Double_t apl2,
671                                  Int_t med){
672     // Interface to TMC->Gsvolu() for ITS GTRA geometries. General twisted 
673     // trapazoid. The faces perpendicular to z are trapazia and their centers 
674     // are not necessarily on a line parallel to the z axis as the TRAP. 
675     // Additionally, the faces may be twisted so that none of their edges are 
676     // parallel. It is a TRAP shape, exept that it is twisted in the x-y plane 
677     // as a function of z. The parallel sides perpendicular to the x axis are 
678     // rotated with respect to the x axis by an angle TWIST, which is one of 
679     // the parameters. The shape is defined by the eight corners and is assumed
680     // to be constructed of straight lines joingin points on the boundry of the
681     // trapezoidal face at Z=-dz to the coresponding points on the face at 
682     // z=+dz. Divisions are not allowed. It has 12 parameters. See SetScale() 
683     // for units. Default units are geant 3 [cm]. Note: This shape suffers from
684     // the same limitations than the TRAP. The tracking routines assume that 
685     // the faces are planar, but htis constraint is not easily expressed in 
686     // terms of the 12 parameters. Additionally, no check on th efaces is 
687     // performed in this case. Users should avoid to use this shape as much as 
688     // possible, and if they have to do so, they should make sure that the 
689     // faces are really planes. If this is not the case, the result of the 
690     // trasport is unpredictable. To accelerat ethe computations necessary for 
691     // trasport, 18 additioanl parameters are calculated for this shape are
692     // 1 DXODZ dx/dz of the line joing the centers of the faces at z=+_dz.
693     // 2 DYODZ dy/dz of the line joing the centers of the faces at z=+_dz.
694     // 3 XO1    x at z=0 for line joing the + on parallel side, perpendicular 
695     //          corners at z=+_dz.
696     // 4 YO1    y at z=0 for line joing the + on parallel side, + on 
697     //          perpendicular corners at z=+-dz.
698     // 5 DXDZ1  dx/dz for line joing the + on parallel side, + on 
699     //          perpendicular corners at z=+-dz.
700     // 6 DYDZ1  dy/dz for line joing the + on parallel side, + on 
701     //          perpendicular corners at z=+-dz.
702     // 7 X02    x at z=0 for line joing the - on parallel side, + on 
703     //          perpendicular corners at z=+-dz.
704     // 8 YO2    y at z=0 for line joing the - on parallel side, + on 
705     //          perpendicular corners at z=+-dz.
706     // 9 DXDZ2  dx/dz for line joing the - on parallel side, + on 
707     //          perpendicular corners at z=+-dz.
708     // 10 DYDZ2dy/dz for line joing the - on parallel side, + on 
709     //          perpendicular corners at z=+-dz.
710     // 11 XO3   x at z=0 for line joing the - on parallel side, - on 
711     //          perpendicular corners at z=+-dz.
712     // 12 YO3   y at z=0 for line joing the - on parallel side, - on 
713     //          perpendicular corners at z=+-dz.
714     // 13 DXDZ3 dx/dzfor line joing the - on parallel side, - on 
715     //          perpendicular corners at z=+-dz.
716     // 14 DYDZ3 dydz for line joing the - on parallel side, - on 
717     //          perpendicular corners at z=+-dz.
718     // 15 XO4   x at z=0 for line joing the + on parallel side, - on 
719     //          perpendicular corners at z=+-dz.
720     // 16 YO4   y at z=0 for line joing the + on parallel side, - on 
721     //          perpendicular corners at z=+-dz.
722     // 17 DXDZ4 dx/dz for line joing the + on parallel side, - on 
723     //          perpendicular corners at z=+-dz.
724     // 18 DYDZ4 dydz for line joing the + on parallel side, - on 
725     //          perpendicular corners at z=+-dz.
726     // Inputs:
727     //    const char gnam[3]  3 character geant volume name. The letter "I"
728     //                        is appended to the front to indecate that this
729     //                        is an ITS volume.
730     //    TString &dis        String containging part discription.
731     //    Double_t dz         half-length along the z axis.
732     //    Double_t thet       polar angle of the line joing the center of the 
733     //                        face at -dz to the center of the one at +dz 
734     //                        [degrees].
735     //    Double_t phi        Azymuthal angle of teh line joing the centre of 
736     //                        the face at -dz to the center of the one at +dz 
737     //                        [degrees].
738     //    Double_t twist      Twist angle of the faces parallel to the x-y 
739     //                        plane at z=+-dz around an axis parallel to z 
740     //                        passing through their centre [degrees].
741     //    Double_t h1         Half-length along y of the face at -dz.
742     //    Double_t bl1        half-length along x of the side -h1 in y of the 
743     //                        face at -dz in z.
744     //    Double_t tl1        half-length along x of the side at +h1 in y of 
745     //                        the face at -dz in z.
746     //    Double_t apl1       Angle with respect to the y ais from the center 
747     //                        of the side at -h1 in y to the centere of the 
748     //                        side at +h1 in y of the face at -dz in z 
749     //                        [degrees].
750     //    Double_t h2         half-length along the face at +dz.
751     //    Double_t bl2        half-length along x of the side at -h2 in y of 
752     //                        the face at -dz in z.
753     //    Double_t tl2        half-length along x of the side at +h2 in y of 
754     //                        the face at +dz in z.
755     //    Double_t apl2       angle with respect to the y axis from the center 
756     //                        of the side at -h2 in y to the center of the side
757     //                        at +h2 in y of the face at +dz in z [degrees].
758     //    Int_t    med        media index number.
759     // Output:
760     //    none.
761     // Return.
762     //    none.
763     char name[4];
764     Float_t param[12];
765
766     param[0] = fScale*dz;
767     param[1] = thet;
768     param[2] = phi;
769     param[3] = twist;
770     param[4] = fScale*h1;
771     param[5] = fScale*bl1;
772     param[6] = fScale*tl1;
773     param[7] = alp1;
774     param[8] = fScale*h2;
775     param[9] = fScale*bl2;
776     param[10] = fScale*tl2;
777     param[11] = alp2;
778     name[0] = 'I';
779     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
780     gMC->Gsvolu(name,"GTRA",fidmed[med],param,12);
781 }
782 //______________________________________________________________________
783 void AliITSv11::CutTube(const char gnam[3],const TString &dis,Double_t rmin,
784                         Double_t rmax,Double_t dz,Double_t phi1,Double_t phi2,
785                         Double_t lx,Double_t ly,Double_t lz,Double_t hx,
786                         Double_t hy,Double_t hz,Int_t med){
787     // Interface to TMC->Gsvolu() for ITS CTUB geometries. Cut tube. A tube cut
788     // at the extremities with planes not necessarily perpendicular tot he z 
789     // axis. It has 11 parameters. See SetScale() for units. Default units are 
790     // geant 3 [cm]. phi1 should be smaller than phi2. If this is not the case,
791     // the system adds 360 degrees to phi2.
792     // Inputs:
793     //    const char gnam[3]  3 character geant volume name. The letter "I"
794     //                        is appended to the front to indecate that this
795     //                        is an ITS volume.
796     //    TString &dis        String containging part discription.
797     //    Double_t rmin       Inner radius at z=0 where tube is narrowest.
798     //    Double_t rmax       Outer radius at z=0 where tube is narrowest.
799     //    Double_t dz         half-length along the z-axis
800     //    Double_t dz         half-length along the z-axis
801     //    Double_t phi1       Starting angle of the segment [degree].
802     //    Double_t phi2       Ending angle of the segment [degree].
803     //    Double_t lx         x component of a unit vector perpendicular to 
804     //                        the face at -dz.
805     //    Double_t ly         y component of a unit vector perpendicular to 
806     //                        the face at -dz.
807     //    Double_t lz         z component of a unit vector perpendicular to 
808     //                        the face at -dz.
809     //    Double_t hx         x component of a unit vector perpendicular to 
810     //                        the face at +dz.
811     //    Double_t hy         y component of a unit vector perpendicular to 
812     //                        the face at +dz.
813     //    Double_t hz         z component of a unit vector perpendicular to 
814     //                        the face at +dz.
815     //    Int_t    med        media index number.
816     // Output:
817     //    none.
818     // Return.
819     //    none.
820     char name[4];
821     Float_t param[11];
822
823     param[0] = fScale*rmin;
824     param[1] = fScale*rmax;
825     param[2] = fScale*dz;
826     param[3] = phi1;
827     param[4] = phi2;
828     param[5] = lx;
829     param[6] = ly;
830     param[7] = lz;
831     param[8] = hx;
832     param[9] = hy;
833     param[10] = hz;
834     name[0] = 'I';
835     for(Int_t i=0;i<3;i++) name[i+1] = gnam[i];
836     gMC->Gsvolu(name,"CTUB",fidmed[med],param,11);
837 }
838 //______________________________________________________________________
839 void AliITSv11::Pos(const char vol[3],Int_t cn,const char moth[3],Double_t x,
840                     Double_t y,Double_t z,Int_t irot){
841     // Place a copy of a volume previously defined by a call to GSVOLU inside 
842     // its mother volulme moth.
843     // Inputs:
844     //   const char vol[3]  3 character geant volume name. The letter "I"
845     //                      is appended to the front to indecate that this
846     //                      is an ITS volume.
847     //   const char moth[3] 3 character geant volume name of the mother volume 
848     //                      in which vol will be placed. The letter "I" is 
849     //                      appended to the front to indecate that this is an 
850     //                      ITS volume.
851     //   Double_t x         The x positon of the volume in the mother's 
852     //                      reference system
853     //   Double_t y         The y positon of the volume in the mother's 
854     //                      reference system
855     //   Double_t z         The z positon of the volume in the mother's 
856     //                      reference system
857     //   Int_t irot         the index for the rotation matrix to be used.
858     //                      irot=-1 => unit rotation.
859     // Outputs:
860     //    none.
861     // Return:
862     //    none.
863     char name[4],mother[4];
864     Float_t param[3];
865     Int_t r=0,i;
866
867     param[0] = x;
868     param[1] = y;
869     param[2] = z;
870     name[0] = 'I';
871     for(i=0;i<3;i++) name[i+1] = vol[i];
872     mother[0] = 'I';
873     for(i=0;i<3;i++) mother[i+1] = moth[i];
874     if(irot>=0) r=fidrot[irot];
875     fMC->Gspos(name,mother,param[0],param[1],param[2],r,"ONLY");
876 }
877 //______________________________________________________________________
878 void AliITSv11::Matrix(Int_t irot,Double_t thet1,Double_t phi1,
879                        Double_t thet2,Double_t phi2,
880                        Double_t thet3,Double_t phi3){
881     // Defines a Geant rotation matrix. checks to see if it is the unit
882     // matrix. If so, then no additonal matrix is defined. Stores rotation 
883     // matrix irot in the data structure JROTM. If the matrix is not 
884     // orthonormal, it will be corrected by setting y' perpendicular to x' 
885     // and z' = x' X y'. A warning message is printed in this case.
886     // Inputs:
887     //   Int_t irot     Intex specifing which rotation matrix.
888     //   Double_t thet1 Polar angle for axisw x [degrees].
889     //   Double_t phi1  azimuthal angle for axis x [degrees].
890     //   Double_t thet12Polar angle for axisw y [degrees].
891     //   Double_t phi2  azimuthal angle for axis y [degrees].
892     //   Double_t thet3 Polar angle for axisw z [degrees].
893     //   Double_t phi3  azimuthal angle for axis z [degrees].
894     // Outputs:
895     //    none.
896     // Return:
897     //    none.
898     Float_t t1,p1,t2,p2,t3,p3;
899
900     if(thet1==90.0&&phi1==0.0&&thet2==90.0&&phi2==90.0&&thet3==0.0&&phi3==0.0){
901         fidrot[irot] = 0; // Unit matrix
902     }else{
903         t1 = thet1;
904         p1 = phi1;
905         t2 = thet2;
906         p2 = phi2;
907         t3 = thet3;
908         p3 = phi3
909         AliMatrix(fidrot[irot],t1,p1,t2,p2,t3,p3);
910     } // end if
911 }
912 //______________________________________________________________________
913 void AliITSv11::Matrix(Int_t irot,Int_t axis,Double_t thet){
914     // Defines a Geant rotation matrix. checks to see if it is the unit
915     // matrix. If so, then no additonal matrix is defined. Stores rotation 
916     // matrix irot in the data structure JROTM. If the matrix is not 
917     // orthonormal, it will be corrected by setting y' perpendicular to x' 
918     // and z' = x' X y'. A warning message is printed in this case.
919     // Inputs:
920     //   Int_t irot         Intex specifing which rotation matrix.
921     //   Int_t axis         Axis about which rotation is to be done.
922     //   Double_t thet      Angle to rotate by [degrees].
923     // Outputs:
924     //    none.
925     // Return:
926     //    none.
927
928     if(thet==0.0){
929         fidrot[irot] = 0; // Unit matrix
930     }else{
931         switch (irot) {
932         case 0: //Rotate about x-axis, x-axis does not change.
933             AliMatrix(fidrot[irot],90.0,0.0,90.0+thet,90.0,thet,90.0);
934             break;
935         case 1: //Rotate about y-axis, y-axis does not change.
936             AliMatrix(fidrot[irot],-90.0-thet,0.0,90.0,90.0,thet,90.0);
937             break;
938         case 2: //Rotate about z-axis, z-axis does not change.
939             AliMatrix(fidrot[irot],90.0,thet,90.0,-thet-90.0,0.0,0.0);
940             break;
941         default:
942             Error("Matrix","axis must be either 0, 1, or 2. for matrix=%d",
943                   irot);
944             break;
945         } // end switch
946     } // end if
947 }
948 //______________________________________________________________________
949 void AliITSv11::Matrix(Int_t irot,Double_t rot[3][3]){
950     // Defines a Geant rotation matrix. checks to see if it is the unit
951     // matrix. If so, then no additonal matrix is defined. Stores rotation 
952     // matrix irot in the data structure JROTM. If the matrix is not 
953     // orthonormal, it will be corrected by setting y' perpendicular to x' 
954     // and z' = x' X y'. A warning message is printed in this case.
955     // Inputs:
956     //   Int_t irot         Intex specifing which rotation matrix.
957     //   Double_t rot[3][3] The 3 by 3 rotation matrix.
958     // Outputs:
959     //    none.
960     // Return:
961     //    none.
962
963     if(rot[0][0]==1.0&&rot[1][1]==1.0&&rot[2][2]==1.0&&
964        rot[0][1]==0.0&&rot[0][2]==0.0&&rot[1][0]==0.0&&
965        rot[1][2]==0.0&&rot[2][0]==0.0&&rot[2][1]==0.0){
966         fidrot[irot] = 0; // Unit matrix
967     }else{
968         Double_t si,c=180./TMath::Pi();
969         Double_t ang[6];
970
971         ang[1] = TMath::ATan2(rot[0][1],rot[0][0]);
972         if(TMath::Cos(ang[1])!=0.0) si = rot[0][0]/TMath::Cos(ang[1]);
973         else si = rot[0][1]/TMath::Sin(ang[1]);
974         ang[0] = TMath::ATan2(si,rot[0][2]);
975
976         ang[3] = TMath::ATan2(rot[1][1],rot[1][0]);
977         if(TMath::Cos(ang[3])!=0.0) si = rot[1][0]/TMath::Cos(ang[3]);
978         else si = rot[1][1]/TMath::Sin(ang[3]);
979         ang[2] = TMath::ATan2(si,rot[1][2]);
980
981         ang[5] = TMath::ATan2(rot[2][1],rot[2][0]);
982         if(TMath::Cos(ang[5])!=0.0) si = rot[2][0]/TMath::Cos(ang[5]);
983         else si = rot[2][1]/TMath::Sin(ang[5]);
984         ang[4] = TMath::ATan2(si,rot[2][2]);
985
986         for(Int_t i=0;i<6;i++) {ang[i] *= c; if(ang[i]<0.0) ang[i] += 360.;}
987         AliMatrix(fidrot[irot],ang[0],ang[1],ang[2],ang[3],ang[4],ang[5]);
988     } // end if
989 }
990 //______________________________________________________________________
991 Float_t AliITSv11::GetA(Int_t z){
992     // Returns the isotopicaly averaged atomic number.
993     // Inputs:
994     //    Int_t z  Elemental number
995     // Outputs:
996     //    none.
997     // Return:
998     //    The atomic mass number.
999     const Float_t A[]={ 1.00794 ,  4.0026902,  6.941   ,  9.012182 , 10.811   ,
1000                        12.01007 , 14.00674  , 15.9994  , 18.9984032, 20.1797  ,
1001                        22.98970 , 24.3050   , 26.981538, 28.0855   , 30.973761,
1002                        32.066   , 35.4527   , 39.948   , 39.0983   , 40.078   ,
1003                        44.95591 , 47.867    , 50.9415  , 51.9961   , 54.938049,
1004                        55.845   , 58.933200 , 58.6934  , 63.546    , 65.39    ,
1005                        69.723   , 72.61     , 74.92160 , 78.96     , 79.904   ,
1006                        83.80    , 85.4678   , 87.62    , 88.9085   , 91.224   ,
1007                        92.90638 , 95.94     , 97.907215, 101.07    ,102.90550 ,
1008                       106.42    ,107.8682   ,112.411   ,114.818    ,118.710   ,
1009                       121.760   ,127.60     ,126.90447 ,131.29     ,132.90545 ,
1010                       137.327   ,138.9055   ,140.116   ,140.90765  ,144.24    ,
1011                       144.912746,150.36     ,151.964   ,157.25     ,158.92534 ,
1012                       162.50     ,164.93032 ,167.26    ,168.93421  ,173.04    ,
1013                       174.967    ,178.49    ,180.9479 ,183.84      ,186.207   ,
1014                       190.23     ,192.217   ,195.078  ,196.96655   ,200.59    ,
1015                       204.3833   ,207.2     ,208.98038,208.982415  ,209.987131,
1016                       222.017570 ,223.019731,226.025402,227.027747 ,232.0381  ,
1017                       231.03588  238.0289};
1018
1019     if(z<1||z>92){
1020         Error("GetA","z must be 0<z<93. z=%d",z);
1021         return 0.0;
1022     } // end if
1023     return A[z-1];
1024 }
1025 //______________________________________________________________________
1026 Float_t AliITSv11::GetStandardMaxStepSize(Int_t istd){
1027     // Returns one of a set of standard Maximum Step Size values.
1028     // Inputs:
1029     //   Int_t istd  Index to indecate which standard.
1030     // Outputs:
1031     //    none.
1032     // Return:
1033     //    The appropreate standard Maximum Step Size value [cm].
1034     Float_t t[]={1.0, // default
1035                  0.0075, // Silicon detectors...
1036                  1.0, // Air in central detectors region
1037                  1.0  // Material in non-centeral region
1038     };
1039     return t[istd];
1040 }
1041 //______________________________________________________________________
1042 Float_t AliITSv11::GetStandardThetaMax(Int_t istd){
1043     // Returns one of a set of standard Theata Max values.
1044     // Inputs:
1045     //   Int_t istd  Index to indecate which standard.
1046     // Outputs:
1047     //    none.
1048     // Return:
1049     //    The appropreate standard Theta max value [degrees].
1050     Float_t t[]={0.1, // default
1051                  0.1, // Silicon detectors...
1052                  0.1, // Air in central detectors region
1053                  1.0  // Material in non-centeral region
1054     };
1055     return t[istd];
1056 }
1057 //______________________________________________________________________
1058 Float_t AliITSv11::GetStandardEfraction(Int_t istd){
1059     // Returns one of a set of standard E fraction values.
1060     // Inputs:
1061     //   Int_t istd  Index to indecate which standard.
1062     // Outputs:
1063     //    none.
1064     // Return:
1065     //    The appropreate standard E fraction value [#].
1066     Float_t t[]={0.1, // default
1067                  0.1, // Silicon detectors...
1068                  0.1, // Air in central detectors region
1069                  1.0  // Material in non-centeral region
1070     };
1071     return t[istd];
1072 }
1073 //______________________________________________________________________
1074 void AliITSv11::Element(Int_t imat,const char* name,Int_t z,Double_t dens,
1075                         Int_t istd){
1076     // Defines a Geant single element material and sets its Geant medium
1077     // proporties. The average atomic A is assumed to be given by their
1078     // natural abundances. Things like the radiation length are calculated
1079     // for you.
1080     // Inputs:
1081     //    Int_t imat       Material number.
1082     //    const char* name Material name. No need to add a $ at the end.
1083     //    Int_t z          The elemental number.
1084     //    Double_t dens    The density of the material [g/cm^3].
1085     //    Int_t istd       Defines which standard set of transport parameters
1086     //                     which should be used.
1087     // Output:
1088     //     none.
1089     // Return:
1090     //     none.
1091     Float_t rad,Z,A=GetA(z),tmax,stemax,deemax,epsilon;
1092     char *name2;
1093     Int_t len;
1094
1095     len = strlng(name)+1;
1096     name2 = new char[len];
1097     strncpy(name2,name,len-1);
1098     name2[len-1] = '\0';
1099     name2[len-2] = '$';
1100     Z = (Float_t)z;
1101     rad = GetRadLength(z)/dens;
1102     AliMaterial(imat,name2,A,Z,dens,rad,0.0,0,0);
1103     tmax    = GetStandardTheataMax(istd);    // degree
1104     stemax  = GetStandardMaxStepSize(istd);  // cm
1105     deemax  = GetStandardEfraction(istd);     // #
1106     epsilon = GetStandardEpsilon(istd);
1107     AliMedium(imat,name2,imat,0,gAlice->Field()->Integ(),
1108               gAlice->Field()->Max(),tmax,stemax,deemax,epsilon,0.0);
1109     delete[] name2;
1110 }
1111 //______________________________________________________________________
1112 void AliITSv11::MixtureByWeight(Int_t imat,const char* name,Int_t *z,
1113                                 Double_t *w,Double_t dens,Int_t n,Int_t istd){
1114     // Defines a Geant material by a set of elements and weights, and sets 
1115     // its Geant medium proporties. The average atomic A is assumed to be 
1116     // given by their natural abundances. Things like the radiation length 
1117     // are calculated for you.
1118     // Inputs:
1119     //    Int_t imat       Material number.
1120     //    const char* name Material name. No need to add a $ at the end.
1121     //    Int_t *z         Array of The elemental numbers.
1122     //    Double_t *w      Array of relative weights.
1123     //    Double_t dens    The density of the material [g/cm^3].
1124     //    Int_t n          the number of elements making up the mixture.
1125     //    Int_t istd       Defines which standard set of transport parameters
1126     //                     which should be used.   
1127     // Output:
1128     //     none.
1129     // Return:
1130     //     none.
1131     Float_t rad,*Z,*A,tmax,stemax,deemax,epsilon;
1132     char *name2;
1133     Int_t len,i;
1134     Z = new Float_t[n];
1135     A = new Float_t[n];
1136
1137     len = strlng(name)+1;
1138     name2 = new char[len];
1139     strncpy(name2,name,len-1);
1140     name2[len-1] = '\0';
1141     name2[len-2] = '$';
1142     for(i=0;i<n;i++){Z[i] = (Float_t)z[i];A[i] = (Float_t)GetA(z[i]);
1143                      W[i] = (Float_t)w[i]}
1144     rad = GetRadLength(z)/dens;
1145     AliMixture(imat,name2,A,Z,dens,n,W);
1146     tmax    = GetStandardTheataMax(istd);    // degree
1147     stemax  = GetStandardMaxStepSize(istd);  // cm
1148     deemax  = GetStandardEfraction(istd);     // #
1149     epsilon = GetStandardEpsilon(istd);
1150     AliMedium(imat,name2,imat,0,gAlice->Field()->Integ(),
1151               gAlice->Field()->Max(),tmax,stemax,deemax,epsilon,0.0);
1152     delete[] name2;
1153 }
1154 //______________________________________________________________________
1155 void AliITSv11::MixtureByNumber(Int_t imat,const char* name,Int_t *z,
1156                                 Int_t *w,Double_t dens,Int_t n,Int_t istd){
1157     // Defines a Geant material by a set of elements and number, and sets 
1158     // its Geant medium proporties. The average atomic A is assumed to be 
1159     // given by their natural abundances. Things like the radiation length 
1160     // are calculated for you.
1161     // Inputs:
1162     //    Int_t imat       Material number.
1163     //    const char* name Material name. No need to add a $ at the end.
1164     //    Int_t *z         Array of The elemental numbers.
1165     //    Int_t_t *w       Array of relative number.
1166     //    Double_t dens    The density of the material [g/cm^3].
1167     //    Int_t n          the number of elements making up the mixture.
1168     //    Int_t istd       Defines which standard set of transport parameters
1169     //                     which should be used.   
1170     // Output:
1171     //     none.
1172     // Return:
1173     //     none.
1174     Float_t rad,*Z,*A,tmax,stemax,deemax,epsilon;
1175     char *name2;
1176     Int_t len,i;
1177     Z = new Float_t[n];
1178     A = new Float_t[n];
1179
1180     len = strlng(name)+1;
1181     name2 = new char[len];
1182     strncpy(name2,name,len-1);
1183     name2[len-1] = '\0';
1184     name2[len-2] = '$';
1185     for(i=0;i<n;i++){Z[i] = (Float_t)z[i];A[i] = (Float_t)GetA(z[i]);
1186                      W[i] = (Float_t)w[i]}
1187     rad = GetRadLength(z)/dens;
1188     AliMixture(imat,name2,A,Z,dens,-n,W);
1189     tmax    = GetStandardTheataMax(istd);    // degree
1190     stemax  = GetStandardMaxStepSize(istd);  // cm
1191     deemax  = GetStandardEfraction(istd);     // #
1192     epsilon = GetStandardEpsilon(istd);
1193     AliMedium(imat,name2,imat,0,gAlice->Field()->Integ(),
1194               gAlice->Field()->Max(),tmax,stemax,deemax,epsilon,0.0);
1195     delete[] name2;
1196 //______________________________________________________________________
1197 void AliITSv11::SSDConeDetail(TVector3 &tran,const char moth[3],Int_t mat0){
1198     // Defines the volumes and materials for the ITS SSD Support cone.
1199     // Based on drawings ALR-0767 and ALR-0767/3. Units are in mm.
1200     // Inputs:
1201     //   Double_t zShift  The z shift to be applied to the final volume.
1202     // Outputs:
1203     //   none.
1204     // Return:
1205     //   none.
1206     Double_t th = 13.0; //mm, Thickness of Rohacell+carbon fiber
1207     Double_t ct=1.5; //mm, Carbon finber thickness
1208     Double_t r=15.0; // mm, Radius of curvature.
1209     Double_t tc=51.0; // angle of SSD cone [degrees].
1210     Double_t sintc=Sind(tc),costc=Cosd(tc),tantc=Tand(tc);
1211     Double_t z0=0.0,Routmax=0.5*985.,Routmin=0.5*945.,Rholemax=0.5*890.;
1212     Double_t Rholemin=0.5*740.,Rin=0.5*560.,RoutHole=0.5*965.;
1213     Int_t nspoaks=12,ninscrews=40,npost=4;
1214     Int_t SSDcf=man0+1; // SSD support cone Carbon Fiber materal number.
1215     Int_t SSDfs=mat0+2; // SSD support cone inserto stesalite 4411w.
1216     Int_t SSDfo=mat0+3; // SSD support cone foam, Rohacell 50A.
1217     Int_t SSDsw=mat0+4; // SSD support cone screw material,Stainless steal
1218     Double_t t; // some general angle [degrees].
1219     Double_t phi0=0.0,dphi=360.0,x,y,z;
1220     Int_t i,j,k,l,n,nz,nrad=0;
1221
1222     SetScalemm();
1223     // Lets start with the upper left outer carbon fiber surface.
1224     // Between za[2],rmaxa[2] and za[4],rmaxa[4] there is a curved section
1225     // given by rmaxa = rmaxa[2]-r*Sind(t) for 0<=t<=tc and 
1226     // za = za[2] + r*Cosd(t) for 0<=t<=tc. Simularly between za[1],rmina[1
1227     // and za[3],rmina[3] there is a curve section given by
1228     // rmina = rmina[1]-r*Sind(t) for 0<=t<=tc and za = za[1]+r&Sind(t)
1229     // for t<=0<=tc. These curves have been replaced by straight lines
1230     // between the equivelent points for simplicity.
1231     Double_t dza = th/sintc-(Routmax-Routmin)/tantc;
1232     if(dza<=0){ // The number or order of the points are in error for a proper
1233         // call to pcons!
1234         Error("SSDcone","The definition of the points for a call to PCONS is"
1235               " in error. abort.");
1236         return;
1237     } // end if
1238     nz = 7;
1239     Double_t *za    = new Double_t[nz];
1240     Double_t *rmina = new Double_t[nz];
1241     Double_t *rmaxa = new Double_t[nz];
1242     za[0]    = z0;
1243     rmina[0] = Routmin;
1244     rmaxa[0] = Routmax;
1245     za[1]    = za[0]+13.5-5.0 - dza; // za[2] - dza.
1246     rmina[1] = rmina[0];
1247     rmaxa[1] =rmaxa[0];
1248     za[2]    = za[0]+13.5-5.0; // From Drawing ALR-0767 and ALR-0767/3
1249     rmaxa[2] = rmaxa[0];
1250     za[3]    = za[1]+rc*sintc;
1251     rmina[3] = rmina[1]-rc*sintc;
1252     rmina[2] = rmina[1]+(rmina[3]-rmina[1])*(za[2]-za[1])/(za[3]-za[1]);
1253     za[4]    = za[2]+rc*sintc;
1254     rmaxa[4] = rmaxa[2]-rc*sintc;
1255     rmaxa[3] = rmaxa[2]+(rmaxa[4]-rmaxa[2])*(za[3]-za[2])/(za[4]-za[2]);
1256     rmina[5] = Rholemax;
1257     za[5]    = za[3]+(za[4]-za[3])*(rmina[5]-rmina[3])/(rmina[4]-rmina[3]);
1258     rmina[4] = rmina[3]+(rmina[5]-rmina[3])*(za[4]-za[3])/(za[5]-za[3]);
1259     za[6]    = th/sinth+za[5];
1260     rmina[6] = Rholemax;
1261     rmaxa[6] = rmina[6];
1262     rmaxa[5] = rmaxa[4]+(rmaxa[6]-rmaxa[4])*(za[5]-za[4])/(za[6]-za[4]);
1263     //
1264     PolyCone("SCA","SSD Suport cone Carbon Fiber Surface outer left",
1265              phi0,dphi,nz,*z,*rmin,*rmax,SSDcf);
1266     Pos("SCA",1,moth,trans.x(),trans.y(),trans.z(),0);
1267     XMatrix(1,180.0);
1268     Pos("SCA",2,moth,trans.x(),trans.y(),-trans.z(),1);
1269     Za[0] = 1.; Wa[0] = ; // Hydrogen Content
1270     Za[1] = 6.; Wa[1] = ; // Carbon Content
1271     MixtureByWeight(SSDcf,"Carbon Fiber for SSD support cone",Z,W,dens,2);
1272     //
1273     // Now lets define the Inserto Stesalite 4411w material volume.
1274     nz = 6;
1275     Double_t *zb    = new Double_t[nz];
1276     Double_t *rminb = new Double_t[nz];
1277     Double_t *rmaxb = new Double_t[nz];
1278     zb[0] = z0;
1279     rminb[0] = rmina[0]+ct;
1280     rmaxb[0] = rmaxa[0]-ct;
1281     zb[1] = za[1];
1282     rminb[1] = rminb[0];
1283     rmaxb[1] = rmaxb[0];
1284     zb[2] = za[2];
1285     rmaxb[2] = rmaxb[1];
1286     zb[3] = za[4] - ct/sintc;
1287     rmaxb[3] = rmaxb[2] - (rc-ct)*sintc;
1288     zb[4] = za[3]+ct/sintc;
1289     rminb[4] = rminb[1]-(rc-ct)*sintc;
1290     rminb[2] = rminb[1]+(rminb[4]-rminb[1])*(zb[2]-zb[1])/(zb[4]-zb[1]);
1291     rminb[3] = rminb[1]+(rminb[4]-rminb[1])*(zb[3]-zb[1])/(zb[4]-zb[1]);
1292     zb[5] = zb[4]+(ct-2.*ct)/sintc;
1293     rminb[5] = rminb[4]+(ct-2.*ct)*tantc;
1294     rmaxb[5] = rminb[5];
1295     rmaxb[4] = rmaxb[3]+(rmaxb[5]-rmaxb[3])*(zb[4]-zb[3])/(zb[5]-zb[3]);
1296     PolyCone("SCB","SSD Suport cone Inserto Stesalite left edge",
1297              phi0,dphi,nz,*zb,*rminb,*rmaxb,SSDfs);
1298     Pos("SCB",1,"SCA",0.0,.0,0.0,0);
1299     Za[0] = 1.; Wa[0] = ; // Hydrogen Content
1300     Za[1] = 6.; Wa[1] = ; // Carbon Content
1301     MixtureByWeight(SSDfs,"Inserto stealite 4411w for SSD support cone",
1302                     Z,W,dens,3);
1303     //
1304     // Now lets define the Rohacell foam material volume.
1305     nz = 4;
1306     Double_t *zc    = new Double_t[nz];
1307     Double_t *rminc = new Double_t[nz];
1308     Double_t *rmaxc = new Double_t[nz];
1309     zc[0] = zb[4];
1310     rminc[0] = rminb[4];
1311     rmaxc[0] = rmminc[0];
1312     zc[1] = zb[5];
1313     rmaxc[1] = rminb[5];
1314     zc[2] = za[5] + ct/sintc;
1315     rminc[2] = rmina[5]+ct; // leave space for carbon fiber covering hole.
1316     rminc[1] = rminc[0] +(rminc[2]-rminc[0])*(zc[1]-zc[0])/(zc[2]-zc[0]);
1317     zc[3] = za[6] - ct/sintc;
1318     rminc[3] = rmina[6]+ct;
1319     rmaxc[3] = rminc[3];
1320     rmaxc[2] = rmaxc[1]+(rmaxc[3]-rmaxc[1])*(zc[2]-zc[1])/(zc[3]-zc[1]);
1321     PolyCone("SCC","SSD Suport cone Rohacell foam left edge",
1322              phi0,dphi,nz,*zc,*rminc,*rmaxc,SSDfo);
1323     Pos("SCC",1,"SCA",0.0,.0,0.0,0);
1324     Za[0] = 1.; Wa[0] = ; // Hydrogen Content
1325     Za[1] = 6.; Wa[1] = ; // Carbon Content
1326     MixtureByWeight(SSDfo,"Foam core (Rohacell 50A) for SSD support cone",
1327                     Z,W,dens,3);
1328     //
1329     // In volume SCB, th Inserto Stesalite 4411w material volume, there
1330     // are a number of Stainless steel screw and pin studs which will be
1331     // filled with screws/studs.
1332     Double_t rmin=0.0,rmax=6.0,dz=0.5*10.0; // mm
1333     Tube("SCD","Screw+stud used to mount things to the SSD support cone",
1334          rmin,rmax,dz,SSDsw);
1335     rmin=0.0;rmax=6.0;dz=0.5*12.0; // mm
1336     Tube("SCE","pin used to mount things to the SSD support cone",
1337          rmin,rmax,dz,SSDsw);
1338     Za[0] =  6.; Wa[0] = ; // Carbon Content
1339     Za[1] = 25.; Wa[1] = ; // Iron Content
1340     MixtureByWeight(SSDsw,"Stainless steal screw, pin, and stud material",
1341                     Z,W,dens,3);
1342     k=l=0;
1343     for(i=0;i<2;i++){ // position for ITS-TPC mounting brackets
1344         for(j=0;j<2;j++){ // 2 screws per bracket
1345             k++;
1346             t = -5.0+10.0*((Double_t)j)+180.*((Double_t)i);
1347             x = RoutHole*Sind(t);
1348             y = RoutHole*Cosd(t);
1349             z = dz;
1350             Pos("SCD",k,"SCB",x,y,z,0);
1351         } // end for j
1352         for(j=0;j<3;j++){ // 3 pins per bracket
1353             l++;
1354             t = -3.0+3.0*((Double_t)j)+180.*((Double_t)i);
1355             x = RoutHole*Sind(t);
1356             y = RoutHole*Cosd(t);
1357             z = dz;
1358             Pos("SCE",l,"SCB",x,y,z,0);
1359         } // end for j
1360     } // end for i
1361     for(i=0;i<2;i++){ // position for ITS-rail mounting brackets
1362         for(j=0;j<4;j++){ // 4 screws per bracket
1363             Double_t a[4]={0.0,2.0,5.0,7.0}; // Relative angles.
1364             k++;
1365             t = 90.0-a[j]+187.*((Double_t)i);
1366             x = RoutHole*Sind(t);
1367             y = RoutHole*Cosd(t);
1368             z = dz;
1369             Pos("SCD",k,"SCB",x,y,z,0);
1370         } // end for j
1371         for(j=0;j<2;j++){ // 2 pins per bracket
1372             l++;
1373             t = 88+7.0*((Double_t)j)+184.*((Double_t)i);
1374             x = RoutHole*Sind(t);
1375             y = RoutHole*Cosd(t);
1376             z = dz;
1377             Pos("SCE",l,"SCB",x,y,z,0);
1378         } // end for j
1379     } // end for i
1380     //
1381     // There is no carbon fiber between this upper left section and the
1382     // SSD spoaks. We remove it by replacing it with Rohacell foam.
1383     nz = 4;
1384     Double_t *zf    = new Double_t[nz];
1385     Double_t *rminf = new Double_t[nz];
1386     Double_t *rmaxf = new Double_t[nz];
1387     zf[0] = zc[2];
1388     rminf[0] = rminc[3];
1389     rmaxf[0] = rminf[0];
1390     rminf[1] = rmina[5];
1391     rmaxf[1] = rminf[0];
1392     zf[1] = zc[0]+(zc[2]-zc[0])*(rminf[1]-rminc[0])/(rminc[2]-rminc[0]);
1393     zf[2] = zc[3];
1394     rminf[2] = rminf[1];
1395     rmaxf[2] = rmaxf[1];
1396     zf[3] = zc[1]+(zc[3]-zc[1])*(rmaxf[3]-rmaxc[1])/(rmaxc[3]-rmaxc[1]);
1397     rminf[3] = rmina[5];
1398     rmaxf[3] = rminf[3];
1399     PolyCone("SCF","SSD Suport cone Rohacell foam left edge",
1400              phi0,dphi,nz,*zc,*rminc,*rmaxc,SSDfo);
1401     Pos("SCF",1,"SCA",0.0,.0,0.0,0);
1402     //=================================================================
1403     // Now for the spoak part of the SSD cone.
1404     // It is not posible to inclue the radius of curvature between
1405     // the spoak part and the upper left part of the SSD cone or lowwer right
1406     // part. This would be discribed by the following curves.
1407     // R = Rmax - (5mm)*Sin(t) phi = phi0+(5mm*180/(Pi*RoutHole))*Sin(t) 
1408     // where 0<=t<=90 For the inner curve a simular equiation holds.
1409     phi0 = 12.5; // degrees see drawing ALR-0767.
1410     dphi = 5.0; // degrees
1411     nz = 4;
1412     Double_t *zg    = new Double_t[nz];
1413     Double_t *rming = new Double_t[nz];
1414     Double_t *rmaxg = new Double_t[nz];
1415     zg[0] = zb[5];
1416     rming[0] = rmina[5];
1417     rmaxg[0] = rming[0];
1418     zg[1] = za[6];
1419     rming[1] = -thatc*(zg[1]-za[3])+rmina[3];
1420     rmaxg[1] = rmaxg[0];
1421     rming[2] = Rholemin;
1422     zg[2] = za[3]-(rming[2]-rmina[3])/tantc;
1423     rmaxg[2] = -thatc*(zg[2]-za[4])+rmaxa[4];
1424     rming[3] = rming[2];
1425     rmaxg[3] = rming[3];
1426     zg[3] = za[4]-(rmaxg[3]-rmaxa[4])/tantc;
1427     PolyCone("SCG","SSD spoak carbon fiber surfaces",
1428              phi0,dphi,nz,*zc,*rminc,*rmaxc,SSDcf);
1429     Zmatrix(irot,360./((Double_t)nspoaks));
1430     Pos("SCG",i+1,"SCA",0.0,.0,0.0,0);
1431     for(i=1;i<nspoaks;i++){
1432         Zmatrix(irot+i,360./((Double_t)nspoaks));
1433         Pos("SCG",i+1,"SCA",0.0,.0,0.0,irot+i);
1434     } // end for i
1435     // For the foam core.
1436     t = ct/(0.5*(Rholemax+Rholemin));// It is not posible to get the
1437     // carbon fiber thickness uniform in this phi direction. We can only
1438     // make it a fixed angular thickness.
1439     t *= 180.0/TMath::Pi();
1440     dphi = 5.0 - 2.0*t; // degrees
1441     phi0 = 12.5+t; // degrees see drawing ALR-0767.
1442     nz = 4;
1443     Double_t *zh    = new Double_t[nz];
1444     Double_t *rminh = new Double_t[nz];
1445     Double_t *rmaxh = new Double_t[nz];
1446     zh[0] = zf[2];
1447     rminh[0] = rming[0];
1448     rmaxh[0] = rmaxg[0];
1449     zh[1] = zf[3];
1450     rminh[1] = rming[1]-(ct/sintc-(zg[1]-zh[1]))*tantc;
1451     rmaxh[1] = rmaxh[0];
1452     zh[2] = zg[2]+ct/tanth;
1453     rminh[2] = rming[2];
1454     rmaxh[2] = rmaxg[2]-(ct/sintc-(zg[2]-zh[2]))*tantc;
1455     zh[3] = zg[3]-ct/sintc;
1456     rminh[3] = rminh[2];
1457     rmaxh[3] = rminh[3];
1458     PolyCone("SCG","SSD spoak carbon fiber surfaces",
1459              phi0,dphi,nz,*zc,*rminc,*rmaxc,SSDcf);
1460     Pos("SCH",1,"SCG",0.0,.0,0.0,0);
1461     //
1462     //==================================================================
1463
1464     //
1465     //Now for the carbon fiber on the sides of the spoakes.
1466     //==============================================================
1467     delete[] za;delete[] rmina;delete[] rmaxa;
1468     delete[] zb;delete[] rminb;delete[] rmaxb;
1469     delete[] zc;delete[] rminc;delete[] rmaxc;
1470     delete[] zd;delete[] rmind;delete[] rmaxd;
1471     delete[] ze;delete[] rmine;delete[] rmaxe;
1472     delete[] zf;delete[] rminf;delete[] rmaxf;
1473     delete[] zg;delete[] rming;delete[] rmaxg;
1474     delete[] zh;delete[] rminh;delete[] rmaxh;
1475     delete[] zi;delete[] rmini;delete[] rmaxi;
1476     delete[] zj;delete[] rminj;delete[] rmaxj;
1477     // Set back to cm default scale before exiting.
1478     SetScalecm();
1479     return;
1480 }
1481 //______________________________________________________________________
1482 void AliITSv11::CreateGeometry(){
1483     ////////////////////////////////////////////////////////////////////////
1484     // This routine defines and Creates the geometry for version 11 of the ITS.
1485     ////////////////////////////////////////////////////////////////////////
1486 }
1487 //______________________________________________________________________
1488 void AliITSv11::CreateMaterials(){
1489 ////////////////////////////////////////////////////////////////////////
1490   //
1491   // Create ITS materials
1492   //     This function defines the default materials used in the Geant
1493   // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1494   // AliITSv11.
1495   // In general it is automatically replaced by
1496   // the CreatMaterials routine defined in AliITSv?. Should the function
1497   // CreateMaterials not exist for the geometry version you are using this
1498   // one is used. See the definition found in AliITSv5 or the other routine
1499   // for a complete definition.
1500   //
1501 }
1502 //______________________________________________________________________
1503 void AliITSv11::InitAliITSgeom(){
1504     //     Based on the geometry tree defined in Geant 3.21, this
1505     // routine initilizes the Class AliITSgeom from the Geant 3.21 ITS geometry
1506     // sturture.
1507 }
1508
1509 //______________________________________________________________________
1510 void AliITSv11::Init(){
1511     ////////////////////////////////////////////////////////////////////////
1512     //     Initialise the ITS after it has been created.
1513     ////////////////////////////////////////////////////////////////////////
1514 }
1515 //______________________________________________________________________
1516 void AliITSv11::SetDefaults(){
1517     // sets the default segmentation, response, digit and raw cluster classes
1518 }
1519 //______________________________________________________________________
1520 void AliITSv11::DrawModule(){
1521     ////////////////////////////////////////////////////////////////////////
1522     //     Draw a shaded view of the FMD version 11.
1523     ////////////////////////////////////////////////////////////////////////
1524 }
1525 //______________________________________________________________________
1526 void AliITSv11::StepManager(){
1527     ////////////////////////////////////////////////////////////////////////
1528     //    Called for every step in the ITS, then calles the AliITShit class
1529     // creator with the information to be recoreded about that hit.
1530     //     The value of the macro ALIITSPRINTGEOM if set to 1 will allow the
1531     // printing of information to a file which can be used to create a .det
1532     // file read in by the routine CreateGeometry(). If set to 0 or any other
1533     // value except 1, the default behavior, then no such file is created nor
1534     // it the extra variables and the like used in the printing allocated.
1535     ////////////////////////////////////////////////////////////////////////
1536 }
1537