]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSvPPRcoarsesymm.cxx
Checking in the seeds of new cluster fitting code.
[u/mrichter/AliRoot.git] / ITS / AliITSvPPRcoarsesymm.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.25  2001/10/18 12:26:38  barbera
19 Six cylinders definition in BuildGeometry() improved by comparison with CreateGeometry()
20
21 Revision 1.24  2001/05/25 15:59:59  morsch
22 Overlaps corrected. (R. Barbera)
23
24 Revision 1.23  2001/05/03 08:40:15  barbera
25 Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts. The last commit did not complete successfully.
26
27 Revision 1.21  2001/04/04 07:02:16  barbera
28 Position of the cylinders holding rails corrected
29
30 Revision 1.20  2001/03/29 22:01:53  barbera
31 New flag added to change the material for some service supports as asked by the PMD people. Some changes to the services due to the new drawings from the engineers
32
33 Revision 1.19  2001/03/29 05:28:56  barbera
34 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
35
36 Revision 1.18  2001/03/28 06:40:21  barbera
37 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
38
39 Revision 1.17  2001/03/13 18:13:30  barbera
40 Some mother volumes sligthly modified to eliminate an overlap with the absorber
41
42 Revision 1.16  2001/02/09 00:05:31  nilsen
43 Added fMajor/MinorVersion variables and made other changes to better make
44 use of the new code changes in AliITSgeom related classes.
45
46 Revision 1.15  2001/01/30 09:23:13  hristov
47 Streamers removed (R.Brun)
48
49 Revision 1.14  2001/01/17 07:41:29  barbera
50 Some media parameters modified
51
52 Revision 1.13  2001/01/15 13:13:52  barbera
53 Some comments added
54
55 Revision 1.12  2000/12/10 16:00:44  barbera
56 Added last definition of special media like end-ladder boxes and cones
57
58 Revision 1.11  2000/10/30 08:02:25  barbera
59 PCON's changed into simpler CONS and TUBS. Services now allow for the rails to go through them.
60
61 Revision 1.3.2.7  2000/10/27 17:20:00  barbera
62 Position of rails w.r.t. the interaction point corrected.
63
64 Revision 1.9  2000/10/27 13:31:29  barbera
65 Rails between ITS and TPC added.
66
67 Revision 1.8  2000/10/27 13:03:08  barbera
68 Small changes in the SPD volumes and materials
69
70 Revision 1.6  2000/10/16 14:45:37  barbera
71 Mother volume ITSD modified to avoid some overlaps
72
73 Revision 1.5  2000/10/16 13:49:15  barbera
74 Services volumes slightly modified and material added following Pierluigi Barberis' information
75
76 Revision 1.4  2000/10/07 15:33:07  barbera
77 Small corrections to the ITSV mother volume
78
79 Revision 1.3  2000/10/07 13:06:50  barbera
80 Some new materials and media defined
81
82 Revision 1.2  2000/10/07 10:42:43  barbera
83 Mother volume ITSV corrected
84
85 Revision 1.1  2000/10/06 23:09:12  barbera
86 New coarse geometry (symmetric services
87
88 Revision 1.20  2000/10/02 21:28:08  fca
89 Removal of useless dependecies via forward declarations
90
91 Revision 1.19  2000/07/10 16:07:19  fca
92 Release version of ITS code
93
94 Revision 1.14.2.2  2000/05/19 10:09:21  nilsen
95 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
96
97 Revision 1.14.2.1  2000/03/04 23:45:19  nilsen
98 Fixed up the comments/documentation.
99
100 Revision 1.14  1999/11/25 06:52:56  fca
101 Correct value of drca
102
103 Revision 1.13.2.1  1999/11/25 06:52:21  fca
104 Correct value of drca
105
106 Revision 1.13  1999/10/27 11:16:26  fca
107 Correction of problem in geometry
108
109 Revision 1.12  1999/10/22 08:25:25  fca
110 remove double definition of destructors
111
112 Revision 1.11  1999/10/22 08:16:49  fca
113 Correct destructors, thanks to I.Hrivnacova
114
115 Revision 1.10  1999/10/06 19:56:50  fca
116 Add destructor
117
118 Revision 1.9  1999/10/05 08:05:09  fca
119 Minor corrections for uninitialised variables.
120
121 Revision 1.8  1999/09/29 09:24:20  fca
122 Introduction of the Copyright and cvs Log
123
124 */
125
126 ///////////////////////////////////////////////////////////////////////////////
127 //                                                                           //
128 //  Inner Traking System version PPR coarse symmetric                                         //
129 //  This class contains the base procedures for the Inner Tracking System    //
130 //                                                                           //
131 // Authors: R. Barbera
132 // version 6.
133 // Created  2000.
134 //
135 //  NOTE: THIS IS THE COARSE SYMMETRIC PPR geometry of the ITS. 
136 // THIS WILL NOT WORK
137 // with the geometry or module classes or any analysis classes. You are 
138 // strongly encouraged to uses AliITSv5.
139 //                                                                           //
140 ///////////////////////////////////////////////////////////////////////////////
141 #include <Riostream.h> 
142 #include <TMath.h>
143 #include <TRandom.h>
144 #include <TVector.h>
145 #include <TGeometry.h>
146 #include <TNode.h>
147 #include <TTUBE.h>
148 #include <TFile.h>    // only required for Tracking function?
149 #include <TCanvas.h>
150 #include <TObjArray.h>
151 #include <TClonesArray.h>
152
153
154 #include "AliMC.h"
155 #include "AliMagF.h"
156 #include "AliConst.h"
157
158 #include "AliITShit.h"
159 #include "AliITSvPPRcoarsesymm.h"
160 #include "AliRun.h"
161
162
163 ClassImp(AliITSvPPRcoarsesymm)
164  
165 //_____________________________________________________________________________
166 AliITSvPPRcoarsesymm::AliITSvPPRcoarsesymm() {
167 ////////////////////////////////////////////////////////////////////////
168 //    Standard default constructor for the ITS version 7.
169 ////////////////////////////////////////////////////////////////////////
170
171     fIdN = 0;
172     fIdName = 0;
173     fIdSens    = 0;
174     fMajorVersion = 8;
175     fMinorVersion = 0;
176 }
177 //_____________________________________________________________________________
178 AliITSvPPRcoarsesymm::AliITSvPPRcoarsesymm(const char *name, const char *title) : AliITS(name, title){
179 ////////////////////////////////////////////////////////////////////////
180 //    Standard constructor for the ITS version 7.
181 ////////////////////////////////////////////////////////////////////////
182
183     fIdN = 6;
184     fIdName = new TString[fIdN];
185     fIdName[0] = "ITS1";
186     fIdName[1] = "ITS2";
187     fIdName[2] = "ITS3";
188     fIdName[3] = "ITS4";
189     fIdName[4] = "ITS5";
190     fIdName[5] = "ITS6";
191     fIdSens    = new Int_t[fIdN];
192     for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
193     fMajorVersion = 9;
194     fMinorVersion = 0;
195 }
196 //____________________________________________________________________________
197 AliITSvPPRcoarsesymm::AliITSvPPRcoarsesymm(const AliITSvPPRcoarsesymm &source){
198 ////////////////////////////////////////////////////////////////////////
199 //     Copy Constructor for ITS version 7.
200 ////////////////////////////////////////////////////////////////////////
201     if(&source == this) return;
202     Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarsesymm");
203     return;
204 }
205 //_____________________________________________________________________________
206 AliITSvPPRcoarsesymm& AliITSvPPRcoarsesymm::operator=(const AliITSvPPRcoarsesymm &source){
207 ////////////////////////////////////////////////////////////////////////
208 //    Assignment operator for the ITS version 7.
209 ////////////////////////////////////////////////////////////////////////
210   if(&source == this) return *this;
211     Warning("= operator","Not allowed to copy AliITSvPPRcoarsesymm");
212   return *this;
213 }
214 //_____________________________________________________________________________
215 AliITSvPPRcoarsesymm::~AliITSvPPRcoarsesymm() {
216 ////////////////////////////////////////////////////////////////////////
217 //    Standard destructor for the ITS version 7.
218 ////////////////////////////////////////////////////////////////////////
219 }
220
221 //__________________________________________________________________________
222 void AliITSvPPRcoarsesymm::BuildGeometry(){
223 ////////////////////////////////////////////////////////////////////////
224 //    Geometry builder for the ITS version 7.
225 ////////////////////////////////////////////////////////////////////////
226     TNode *node, *top;
227     const Int_t kColorITS=kYellow;
228     //
229     top = gAlice->GetGeometry()->GetNode("alice");
230     new TTUBE("S_layer1","Layer1 of ITS","void",3.8095,3.8095+1.03*9.36/100.,14.35);
231     top->cd();
232     node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
233     node->SetLineColor(kColorITS);
234     fNodes->Add(node);
235
236     new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35);
237     top->cd();
238     node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
239     node->SetLineColor(kColorITS);
240     fNodes->Add(node);
241
242     new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1);
243     top->cd();
244     node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
245     node->SetLineColor(kColorITS);
246     fNodes->Add(node);
247
248     new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1);
249     top->cd();
250     node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
251     node->SetLineColor(kColorITS);
252     fNodes->Add(node);
253
254     new TTUBE("S_layer5","Layer5 of ITS","void",38.5,38.5+0.91*9.36/100.,49.405);
255     top->cd();
256     node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
257     node->SetLineColor(kColorITS);
258     fNodes->Add(node);
259
260     new TTUBE("S_layer6","Layer6 of ITS","void",43.5765,43.5765+0.87*9.36/100.,55.27);
261     top->cd();
262     node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
263     node->SetLineColor(kColorITS);
264     fNodes->Add(node);
265
266 }
267 //_____________________________________________________________________________
268 void AliITSvPPRcoarsesymm::CreateGeometry(){
269 ////////////////////////////////////////////////////////////////////////
270 //    This routine defines and Creates the geometry for version 7 of the ITS.
271 ////////////////////////////////////////////////////////////////////////
272   
273   //INNER RADII OF THE SILICON LAYERS 
274   Float_t rl[6]    = { 3.8095,7.,15.,24.,38.5,43.5765 };   
275   //THICKNESSES OF LAYERS (in % radiation length)
276   Float_t drl[6]   = { 1.03,1.03,0.94,0.95,0.91,0.87 };   
277   //HALF LENGTHS OF LAYERS  
278   Float_t dzl[6]   = { 14.35,14.35,25.1,32.1,49.405,55.27 };
279   //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
280   Float_t dzb[6]   = { 12.4,12.4,13.5,15.,7.5,7.5 };    
281   //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
282   Float_t drb[6]   = { rl[1]-rl[0],0.2,5.,5.,4.,4. };         
283
284  
285   Float_t dits[3], rlim, zmax;
286   Float_t zpos;
287   Float_t pcits[100], ztpc;
288   Int_t idrotm[1999], i;
289   Float_t dgh[100];
290   
291   Int_t rails = 1;       // flag for rails (1 --> rails in; 0 --> rails out)
292   Int_t suppmat = 0;     // flag to change the material of the services
293                          // supports (=0 copper, =1 aluminum, =2 carbon)  
294   rails = GetRails();
295   
296   if(rails != 0 && rails != 1) {
297      cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)." 
298      " The default value of 1 (rails in) will be used." << endl;
299   }  
300   
301   if (rails == 0 ) {
302      cout << "ITS: Rails are out." << endl; 
303   } else {
304      cout << "ITS: Rails are in." << endl;
305   }      
306   
307   suppmat = GetSupportMaterial();   
308   
309   if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
310      cout << "ITS - WARNING: the flag for the material of services supports is not set neither to 0 (copper) nor to 1 (aluminum) nor to 2 (carbon)." 
311      " The default value of 0 (copper) will be used." << endl;
312   }  
313   
314   if (suppmat == 0) {
315      cout << "ITS: The material of the services supports is copper." << endl; 
316   } else if (suppmat == 1){
317      cout << "ITS: The material of the services supports is aluminum." << endl;
318   } else {
319      cout << "ITS: The material of the services supports is carbon." << endl;
320   }      
321   
322
323   Int_t *idtmed = fIdtmed->GetArray()-199;
324   
325   //     CONVERT INTO CM (RL(SI)=9.36 CM) 
326   for (i = 0; i < 6; ++i) {
327     drl[i] = drl[i] / 100. * 9.36;
328   }
329     
330   //     FIELD CAGE HALF LENGTH 
331   
332   rlim  = 50.;
333   zmax  = 74.;
334   ztpc = 284.;
335     
336   // --- Define ghost volume containing the whole ITS (including services) 
337   //     and fill it with air 
338   
339   dgh[0] = 0.;
340   dgh[1] = 360.;
341   dgh[2] = 16.;
342   dgh[3] = -ztpc-5.-0.1;
343   dgh[4] = 62.4;
344   dgh[5] = 85.;
345   dgh[6] = -ztpc;
346   dgh[7] = 62;
347   dgh[8] = 85.;
348   dgh[9] = -ztpc;
349   dgh[10] = 62;
350   dgh[11] = 62+4.;
351   dgh[12] = -97.5;
352   dgh[13] = 46;
353   dgh[14] = rlim+6;
354   dgh[15] = -zmax;
355   dgh[16] = 46;
356   dgh[17] = rlim+6;
357   dgh[18] = -48;
358   dgh[19] = 6;
359   dgh[20] = rlim+6; 
360   dgh[21] = -28.6;
361   dgh[22] = 6;
362   dgh[23] = rlim+6;
363   dgh[24] = -27.6;
364   dgh[25] = 3.295;
365   dgh[26] = rlim+6;
366   dgh[27] = 27.6;
367   dgh[28] = 3.295;
368   dgh[29] = rlim+6;
369   dgh[30] = 28.6;
370   dgh[31] = 6;
371   dgh[32] = rlim+6;
372   dgh[33] = 48;
373   dgh[34] = 6;
374   dgh[35] = rlim+6;
375   dgh[36] = zmax;
376   dgh[37] = 46;
377   dgh[38] = rlim+6;
378   dgh[39] = 97.5;
379   dgh[40] = 46;
380   dgh[41] = rlim+6;
381   dgh[42] = ztpc;
382   dgh[43] = 62;
383   dgh[44] = 62+4.;
384   dgh[45] = ztpc;
385   dgh[46] = 62;
386   dgh[47] = 85.;
387   dgh[48] = ztpc+4.+0.1;
388   dgh[49] = 62.4;
389   dgh[50] = 85.;
390   gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
391   
392   // --- Place the ghost volume in its mother volume (ALIC) and make it 
393   //     invisible 
394   
395   gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
396   //gMC->Gsatt("ITSV", "SEEN", 0); 
397  
398   
399   // --- Define ghost volume containing the six layers and fill it with air 
400
401   dgh[0] = 0.;
402   dgh[1] = 360.;
403   dgh[2] = 8.;
404   dgh[3] = -zmax;  
405   dgh[4] = 46.;
406   dgh[5] = rlim;
407   dgh[6] = -47.5;    
408   dgh[7] = 6.005;
409   dgh[8] = rlim;
410   dgh[9] = -28.5;    
411   dgh[10] = 6.005;
412   dgh[11] = rlim;  
413   dgh[12] = -27.5;   
414   dgh[13] = 3.3;
415   dgh[14] = rlim;
416   dgh[15] = 27.5;    
417   dgh[16] = 3.3;
418   dgh[17] = rlim;
419   dgh[18] = 28.5;    
420   dgh[19] = 6.005;
421   dgh[20] = rlim;
422   dgh[21] = 47.5;    
423   dgh[22] = 6.005;
424   dgh[23] = rlim;
425   dgh[24] = zmax;    
426   dgh[25] = 46.;
427   dgh[26] = rlim;
428     gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
429   
430   // --- Place the ghost volume in its mother volume (ALIC) and make it 
431   //     invisible 
432   
433   gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
434   //gMC->Gsatt("ITSD", "SEEN", 0);
435   
436   //     ITS LAYERS (SILICON) 
437   
438   dits[0] = rl[0];
439   dits[1] = rl[0] + drl[0];
440   dits[2] = dzl[0];
441   gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
442   gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
443   
444   dits[0] = rl[1];
445   dits[1] = rl[1] + drl[1];
446   dits[2] = dzl[1];
447   gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
448   gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
449   
450   dits[0] = rl[2];
451   dits[1] = rl[2] + drl[2];
452   dits[2] = dzl[2];
453   gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
454   gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
455   
456   dits[0] = rl[3];
457   dits[1] = rl[3] + drl[3];
458   dits[2] = dzl[3];
459   gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
460   gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
461   
462   dits[0] = rl[4];
463   dits[1] = rl[4] + drl[4];
464   dits[2] = dzl[4];
465   gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
466   gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
467   
468   dits[0] = rl[5];
469   dits[1] = rl[5] + drl[5];
470   dits[2] = dzl[5];
471   gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
472   gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
473   
474   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
475   
476   gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0); 
477   for (i = 0; i < 2; i++) {
478     dits[0] = rl[i];
479     dits[1] = dits[0] + drb[i];
480     dits[2] = dzb[i] / 2.;
481     zpos = dzl[i] + dits[2];
482     gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
483     gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
484   }
485   
486   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
487   
488   gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0); 
489   for (i = 2; i < 3; i++) {
490     dits[0] = rl[i]-2.5;
491     dits[1] = dits[0] + drb[i];
492     dits[2] = dzb[i] / 2.;
493     zpos = dzl[i] + dits[2];
494     gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
495     gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
496   }
497   for (i = 3; i < 4; i++) {
498     dits[0] = rl[i]-1.4;
499     dits[1] = dits[0] + drb[i];
500     dits[2] = dzb[i] / 2.;
501     zpos = dzl[i] + dits[2];
502     gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
503     gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
504   }
505
506   
507   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
508   
509   gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0); 
510   for (i = 4; i < 5; i++) {
511     dits[0] = rl[i]+1.4;
512     dits[1] = dits[0] + drb[i];
513     dits[2] = dzb[i] / 2.;
514     zpos = dzl[i] + dits[2];
515     gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
516     gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
517   }    
518   for (i = 5; i < 6; i++) {
519     dits[0] = rl[i]+0.4235;
520     dits[1] = dits[0] + drb[i];
521     dits[2] = dzb[i] / 2.;
522     zpos = dzl[i] + dits[2];
523     gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
524     gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
525   }      
526     
527   //    DEFINE THERMAL SCREEN FOR SPD
528   
529   pcits[0] = 8.3;
530   pcits[1] = 8.5;
531   pcits[2] = 42.5;
532   gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);   
533   gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
534
535   //    DEFINE END CONES FOR SDD
536   
537   pcits[0] = (59.-42.5)/2.;
538   pcits[1] = 8.5;
539   pcits[2] = 8.5+0.1;
540   pcits[3] = 28.;
541   pcits[4] = 28.+0.1;  
542   gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);    
543   AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
544   gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
545   gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");  
546
547   //    DEFINE CYLINDER BETWEEN SDD AND SSD
548   
549   pcits[0] = (59.5-0.13/2.)/2.;
550   pcits[1] = (59.5+0.13/2.)/2.;
551   pcits[2] = 57.;
552   gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);   
553   gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY"); 
554
555   //    DEFINE END CONES FOR SSD
556   
557   pcits[0] = (74.-59.)/2.;
558   pcits[1] = 28.;
559   pcits[2] = 28.+0.1;
560   pcits[3] = 47.;
561   pcits[4] = 47.+0.1;
562   gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);    
563   gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
564   gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
565
566
567   // ****************************  SERVICES  *********************************
568
569
570   // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
571   //     UPPER PART
572   
573   dgh[0] = 46.;    
574   dgh[1] = 46.+1.0;  
575   dgh[2] = 9.5;
576   dgh[3] = 12.;
577   dgh[4] = 168.;
578   
579   if (suppmat == 0) {
580      gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5);    // copper
581   } else if (suppmat == 1) {
582      gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5);    // aluminum
583   } else {
584      gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5);    // carbon
585   }     
586   gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
587   gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
588   
589   // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
590   //     LOWER PART
591   
592   dgh[0] = 46.;    
593   dgh[1] = 46.+1.0;  
594   dgh[2] = 9.5;
595   dgh[3] = 192.;
596   dgh[4] = 348.;
597   
598   if (suppmat == 0) {
599      gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5);    // copper
600   } else if (suppmat == 1) {
601      gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5);    // aluminum
602   } else {
603      gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5);    // carbon
604   }     
605   gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
606   gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
607
608
609   // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
610   //     UPPER PART
611   
612   dgh[0] = 46.+1.0;  
613   dgh[1] = 46.+1.0+1.5;   
614   dgh[2] = 9.5;
615   dgh[3] = 12.;
616   dgh[4] = 168.;
617   
618   gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);  
619   gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
620   gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");  
621   
622   // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
623   //     LOWER PART
624   
625   dgh[0] = 46.+1.0;  
626   dgh[1] = 46.+1.0+1.5;   
627   dgh[2] = 9.5;
628   dgh[3] = 192.;
629   dgh[4] = 348.;
630   
631   gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);  
632   gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
633   gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");  
634
635   // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
636   //    UPPER PART
637     
638   dgh[0] = 46.;  
639   dgh[1] = 56.;
640   dgh[2] = 2.25;
641   dgh[3] = 12.;
642   dgh[4] = 168.;
643   
644   gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);  
645   gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");  
646   gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY"); 
647
648
649   // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
650   //     LOWER PART
651     
652   dgh[0] = 46.;  
653   dgh[1] = 56.;
654   dgh[2] = 2.25;
655   dgh[3] = 192.;
656   dgh[4] = 348.;
657   
658   gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);  
659   gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");  
660   gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY"); 
661
662   // --- DEFINE CABLES/COOLING BELOW THE TPC - COPPER PART - UPPER PART
663  
664   dgh[0] = (ztpc-97.5)/2.;
665   dgh[1] = 46.2;
666   dgh[2] = 46.2+1.0;
667   dgh[3] = 62.3;
668   dgh[4] = 62.3+1.0;
669   dgh[5] = 12.;    
670   dgh[6] = 168.;
671   gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7);    
672   gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
673   gMC->Gspos("ICU1", 2, "ITSV", 0., 0., -(97.5+dgh[0]), idrotm[200], "ONLY");   
674   
675   // --- DEFINE CABLES/COOLING BELOW THE TPC - COPPER PART - LOWER PART
676   
677   dgh[0] = (ztpc-97.5)/2.;
678   dgh[1] = 46.2;
679   dgh[2] = 46.2+1.0;
680   dgh[3] = 62.3;
681   dgh[4] = 62.3+1.0;
682   dgh[5] = 192.;    
683   dgh[6] = 348.;
684   gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7);    
685   gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
686   gMC->Gspos("ICU2", 2, "ITSV", 0., 0., -(97.5+dgh[0]), idrotm[200], "ONLY");     
687   
688   // --- DEFINE CABLES/COOLING BELOW THE TPC - CARBON PART - UPPER PART
689   
690   dgh[0] = (ztpc-97.5)/2.;
691   dgh[1] = 46.2+1.0;
692   dgh[2] = 46.2+1.0+1.5;
693   dgh[3] = 62.3+1.0;
694   dgh[4] = 62.3+1.0+1.5;
695   dgh[5] = 12.;    
696   dgh[6] = 168.;  
697   gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);    
698   gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
699   gMC->Gspos("ICC1", 2, "ITSV", 0., 0., -(97.5+dgh[0]), idrotm[200], "ONLY");   
700   
701   // --- DEFINE CABLES/COOLING BELOW THE TPC - CARBON PART - LOWER PART
702   
703   dgh[0] = (ztpc-97.5)/2.;
704   dgh[1] = 46.2+1.0;
705   dgh[2] = 46.2+1.0+1.5;
706   dgh[3] = 62.3+1.0;
707   dgh[4] = 62.3+1.0+1.5;
708   dgh[5] = 192.;    
709   dgh[6] = 348.;  
710   gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);    
711   gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
712   gMC->Gspos("ICC2", 2, "ITSV", 0., 0., -(97.5+dgh[0]), idrotm[200], "ONLY");     
713     
714   // --- DEFINE CABLES/COOLING BEHIND THE TPC - COPPER PART - UPPER PART
715     
716   dgh[0] = 62.1;
717   dgh[1] = 74.5;
718   dgh[2] = 0.5;
719   dgh[3] = 12.;
720   dgh[4] = 168.;
721   gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5);    
722   gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");  
723   gMC->Gspos("ICU3", 2, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), idrotm[200], "ONLY");      
724   
725   // --- DEFINE CABLES/COOLING BEHIND THE TPC - COPPER PART - LOWER PART
726   
727   dgh[0] = 62.1;
728   dgh[1] = 74.5;
729   dgh[2] = 0.5;
730   dgh[3] = 192.;
731   dgh[4] = 348.;
732   gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5);    
733   gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");  
734   gMC->Gspos("ICU4", 2, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), idrotm[200], "ONLY");      
735      
736   // --- DEFINE CABLES/COOLING BEHIND THE TPC - CARBON PART - UPPER PART
737
738   dgh[0] = 62.1;
739   dgh[1] = 74.5;
740   dgh[2] = 0.75;
741   dgh[3] = 12.;
742   dgh[4] = 168.;
743   gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);    
744   gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");  
745   gMC->Gspos("ICC3", 2, "ITSV", 0., 0., -(ztpc+dgh[2]), idrotm[200], "ONLY"); 
746     
747   // --- DEFINE CABLES/COOLING BEHIND THE TPC - CARBON PART - LOWER PART
748
749   dgh[0] = 62.1;
750   dgh[1] = 74.5;
751   dgh[2] = 0.75;
752   dgh[3] = 192.;
753   dgh[4] = 348.;
754   gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);    
755   gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");  
756   gMC->Gspos("ICC4", 2, "ITSV", 0., 0., -(ztpc+dgh[2]), idrotm[200], "ONLY"); 
757
758   // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
759   
760   dgh[0] = 74.5;
761   dgh[1] = 79.5;
762   dgh[2] = 2.5;
763   dgh[3] = 12.;
764   dgh[4] = 168.;
765   gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);   
766   gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");      
767   
768   // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
769   
770   dgh[0] = 74.5;
771   dgh[1] = 79.5;
772   dgh[2] = 2.5;
773   dgh[3] = 192.;
774   dgh[4] = 348.;
775   gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);   
776   gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");        
777   
778   // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
779   
780   if (rails == 1) {
781   
782      dgh[0] = 2.;          
783      dgh[1] = 8.;           
784      dgh[2] = 190.;         
785      gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
786      gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");   
787      gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);    
788      gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");    
789
790      dgh[0] = 2.-0.5;    // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2      
791      dgh[1] = 8.-0.5;    // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2       
792      dgh[2] = 190.;         
793      gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);   
794      gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");   
795      gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);     
796      gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");    
797
798   }
799   
800   // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
801   
802   dgh[0] = 56.9;    
803   dgh[1] = 59.;
804   dgh[2] = 0.6;    
805   gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);   
806   gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");       
807   gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");  
808
809   // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
810
811   dgh[0] = 0.;        
812   dgh[1] = 3.;         
813   dgh[2] = 5.;  // 5. comes from the fact that the volume has to be 567.6/2 cm^3       
814   gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);   
815   gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY");    
816   gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY");   
817   gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY"); 
818   gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY");  
819   gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY");   
820   gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY");   
821   gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY"); 
822   gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY");          
823   
824   // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
825
826   dgh[0] = 5.;        
827   dgh[1] = 12.;         
828   dgh[2] = 5.;         
829   gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);   
830   gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
831   gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);   
832   gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");  
833   
834   dgh[0] = 5.-2.;        
835   dgh[1] = 12.-2.;         
836   dgh[2] = 5.;         
837   gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);   
838   gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");     
839   gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);   
840   gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
841   
842   // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
843   
844   dgh[0] = 0.;        
845   dgh[1] = 5.;         
846   dgh[2] = 2.;         
847   gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);   
848   gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY"); 
849   gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY"); 
850   gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");       
851     
852   // --- Outputs the geometry tree in the EUCLID/CAD format 
853   
854   if (fEuclidOut) {
855     gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
856   }
857 }
858 //_____________________________________________________________________________
859 void AliITSvPPRcoarsesymm::CreateMaterials(){
860 ////////////////////////////////////////////////////////////////////////
861   //
862   // Create ITS materials
863   //     This function defines the default materials used in the Geant
864   // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
865   // AliITSvPPRcoarseasymm.
866   // In general it is automatically replaced by
867   // the CreatMaterials routine defined in AliITSv?. Should the function
868   // CreateMaterials not exist for the geometry version you are using this
869   // one is used. See the definition found in AliITSv5 or the other routine
870   // for a complete definition.
871   //
872   // Water H2O
873   Float_t awat[2]  = { 1.00794,15.9994 };
874   Float_t zwat[2]  = { 1.,8. };
875   Float_t wwat[2]  = { 2.,1. };
876   Float_t denswat  = 1.;
877   // Freon
878   Float_t afre[2]  = { 12.011,18.9984032 };
879   Float_t zfre[2]  = { 6.,9. };
880   Float_t wfre[2]  = { 5.,12. };
881   Float_t densfre  = 1.5;
882   // Ceramics
883   //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
884   Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
885   Float_t zcer[5]  = { 13.,8.,14.,25.,      24. };
886   Float_t wcer[5]  = { .49976,1.01233,.01307,       .01782,.00342 };
887   Float_t denscer  = 3.6;
888   //
889   //     60% SiO2 , 40% G10FR4 
890   // PC board
891   Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
892   Float_t zpcb[3]  = { 14.,8.,8.875 };
893   Float_t wpcb[3]  = { .28,.32,.4 };
894   Float_t denspcb  = 1.8;
895   // POLYETHYL
896   Float_t apoly[2] = { 12.01,1. };
897   Float_t zpoly[2] = { 6.,1. };
898   Float_t wpoly[2] = { .33,.67 };
899   // old SERVICES
900   Float_t zserv[4] = { 1.,6.,26.,29. };
901   Float_t aserv[4] = { 1.,12.,55.8,63.5 };
902   Float_t wserv[4] = { .014,.086,.42,.48 };
903   // Stainless steel
904   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
905   Float_t zsteel[4] = { 26.,24.,28.,14. };
906   Float_t wsteel[4] = { .715,.18,.1,.005 };
907   
908   
909   Int_t  isxfld  = gAlice->Field()->Integ();
910   Float_t sxmgmx = gAlice->Field()->Max();
911   
912   
913   // --- Define the various materials for GEANT --- 
914   
915   //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
916   
917   AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999.);
918   AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
919   AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
920   AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999.);
921   // v. dens 
922   AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999.);
923   AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
924   AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999.);
925   AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
926   AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
927   AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.); 
928   //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);   
929   AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.);       // check !!!!
930   // ** 
931   AliMedium(0, "SPD Si$",        0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
932   AliMedium(1, "SPD Si chip$",   1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
933   AliMedium(2, "SPD Si bus$",    2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
934   AliMedium(3, "SPD C$",         3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
935   AliMedium(4, "SPD Air$",       4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
936   AliMedium(5, "SPD Vacuum$",    5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
937   AliMedium(6, "SPD Al$",        6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
938   AliMedium(7, "SPD Water $",    7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
939   AliMedium(8, "SPD Freon$",     8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
940   AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
941   AliMedium(10, "SPD cone$",    10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);   
942   
943   //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
944   
945   AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999.);
946   AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999.);
947   AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999.);
948   AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999.);
949   // v. dens 
950   AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999.);
951   AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
952   AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999.);
953   // After a call with ratios by number (negative number of elements), 
954   // the ratio array is changed to the ratio by weight, so all successive 
955   // calls with the same array must specify the number of elements as 
956   // positive 
957   AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
958   // After a call with ratios by number (negative number of elements), 
959   // the ratio array is changed to the ratio by weight, so all successive 
960   // calls with the same array must specify the number of elements as 
961   // positive 
962   AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
963   AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
964   AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
965   AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
966   AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
967   AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999.); 
968   AliMaterial(39, "SDD cone$",63.546, 29., 1.15, 1.265, 999.);       
969   AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);  
970   //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.); 
971   //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);       
972
973   // ** 
974   // check A and Z 
975   AliMedium(25, "SDD Si$",        25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
976   AliMedium(26, "SDD Si chip$",   26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
977   AliMedium(27, "SDD Si bus$",    27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
978   AliMedium(28, "SDD C$",         28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
979   AliMedium(29, "SDD Air$",       29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
980   AliMedium(30, "SDD Vacuum$",    30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
981   AliMedium(31, "SDD Al$",        31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
982   AliMedium(32, "SDD Water $",    32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
983   AliMedium(33, "SDD Freon$",     33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
984   AliMedium(34, "SDD PCB$",       34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
985   AliMedium(35, "SDD Copper$",    35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
986   AliMedium(36, "SDD Ceramics$",  36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
987   AliMedium(37, "SDD Kapton$",    37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
988   AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
989   AliMedium(39, "SDD cone$",      39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
990   AliMedium(40, "SDD M55J$",      40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);     
991   //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
992   
993   AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
994   AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
995   AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
996   AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
997   // v. dens 
998   AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999.);
999   AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
1000   AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999.);
1001   // After a call with ratios by number (negative number of elements), 
1002   // the ratio array is changed to the ratio by weight, so all successive 
1003   // calls with the same array must specify the number of elements as 
1004   // positive 
1005   AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1006   // After a call with ratios by number (negative number of elements), 
1007   // the ratio array is changed to the ratio by weight, so all successive 
1008   // calls with the same array must specify the number of elements as 
1009   // positive 
1010   AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1011   AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
1012   AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1013   // After a call with ratios by number (negative number of elements), 
1014   // the ratio array is changed to the ratio by weight, so all successive 
1015   // calls with the same array must specify the number of elements as 
1016   // positive 
1017   AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1018   AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1019   // check A and Z 
1020   AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1021   AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.); 
1022   AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);  
1023   //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.); 
1024   //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);    
1025   // ** 
1026   AliMedium(50, "SSD Si$",        50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1027   AliMedium(51, "SSD Si chip$",   51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1028   AliMedium(52, "SSD Si bus$",    52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1029   AliMedium(53, "SSD C$",         53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1030   AliMedium(54, "SSD Air$",       54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1031   AliMedium(55, "SSD Vacuum$",    55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1032   AliMedium(56, "SSD Al$",        56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1033   AliMedium(57, "SSD Water $",    57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1034   AliMedium(58, "SSD Freon$",     58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1035   AliMedium(59, "SSD PCB$",       59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1036   AliMedium(60, "SSD Copper$",    60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1037   AliMedium(61, "SSD Ceramics$",  61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1038   AliMedium(62, "SSD Kapton$",    62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1039   AliMedium(63, "SSD G10FR4$",    63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1040   AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1041   AliMedium(65, "SSD cone$",      65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1042
1043   //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
1044   
1045   AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1046   // verify density 
1047   AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1048   AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1049   AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1050   AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
1051   AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1052   // After a call with ratios by number (negative number of elements), 
1053   // the ratio array is changed to the ratio by weight, so all successive 
1054   // calls with the same array must specify the number of elements as 
1055   // positive 
1056   AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1057 //  AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!
1058 //  AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!  
1059 //  AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!  
1060   AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1061   AliMaterial(86, "GEN Al$",      26.981539, 13., 2.6989, 8.9, 999.);
1062   AliMaterial(87,"inox/alum$",    32.1502,15.3383,3.0705,6.9197,999.);
1063   // ** 
1064   AliMedium(75,"GEN C$",        75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1065   AliMedium(76,"GEN Air$",      76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1066   AliMedium(77,"GEN Vacuum$",   77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1067   AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1068   AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1069   AliMedium(80,"GEN Copper$",   80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1070   AliMedium(81,"GEN Water $",   81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1071 //  AliMedium(82,"GEN Cables$",   82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1072 //  AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);  
1073 //  AliMedium(84,"GEN serv$",     84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1074   AliMedium(85,"GEN Inox$",     85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075   AliMedium(86, "GEN Al$",      86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1076   AliMedium(87,"inox/alum$",    87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1077
1078 }
1079 //_____________________________________________________________________________
1080 void AliITSvPPRcoarsesymm::Init(){
1081 ////////////////////////////////////////////////////////////////////////
1082 //     Initialise the ITS after it has been created.
1083 ////////////////////////////////////////////////////////////////////////
1084     Int_t i;
1085
1086     cout << endl;
1087     for(i=0;i<25;i++) cout << "*";cout << " ITSvPPRcoarsesymm_Init ";
1088     for(i=0;i<25;i++) cout << "*";cout << endl;
1089 //
1090     AliITS::Init();
1091 //
1092     for(i=0;i<72;i++) cout << "*";
1093     cout << endl;
1094
1095 }  
1096  
1097 //_____________________________________________________________________________
1098 void AliITSvPPRcoarsesymm::DrawModule(){
1099 ////////////////////////////////////////////////////////////////////////
1100 //     Draw a shaded view of the FMD version 6.
1101 ////////////////////////////////////////////////////////////////////////
1102   
1103   // Set everything unseen
1104   gMC->Gsatt("*", "seen", -1);
1105   // 
1106   // Set ALIC mother visible
1107   gMC->Gsatt("ALIC","SEEN",0);
1108   //
1109   // Set the volumes visible
1110   gMC->Gsatt("ITSD","SEEN",0);
1111   gMC->Gsatt("ITS1","SEEN",1);
1112   gMC->Gsatt("ITS2","SEEN",1);
1113   gMC->Gsatt("ITS3","SEEN",1);
1114   gMC->Gsatt("ITS4","SEEN",1);
1115   gMC->Gsatt("ITS5","SEEN",1);
1116   gMC->Gsatt("ITS6","SEEN",1);
1117
1118   gMC->Gsatt("IPCB","SEEN",1);
1119   gMC->Gsatt("ICO2","SEEN",1);
1120   gMC->Gsatt("ICER","SEEN",0);
1121   gMC->Gsatt("ISI2","SEEN",0);
1122   gMC->Gsatt("IPLA","SEEN",0);
1123   gMC->Gsatt("ICO3","SEEN",0);
1124   gMC->Gsatt("IEPX","SEEN",0);
1125   gMC->Gsatt("ISI3","SEEN",1);
1126   gMC->Gsatt("ISUP","SEEN",0);
1127   gMC->Gsatt("ICHO","SEEN",0);
1128   gMC->Gsatt("ICMO","SEEN",0);
1129   gMC->Gsatt("ICMD","SEEN",0);
1130   gMC->Gsatt("ICCO","SEEN",1);
1131   gMC->Gsatt("ICCM","SEEN",0);
1132   gMC->Gsatt("ITMD","SEEN",0);
1133   gMC->Gsatt("ITTT","SEEN",1);
1134
1135   //
1136   gMC->Gdopt("hide", "on");
1137   gMC->Gdopt("shad", "on");
1138   gMC->Gsatt("*", "fill", 7);
1139   gMC->SetClipBox(".");
1140   gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1141   gMC->DefaultRange();
1142   gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1143   gMC->Gdhead(1111, "Inner Tracking System Version 1");
1144   gMC->Gdman(17, 6, "MAN");
1145 }
1146 //_____________________________________________________________________________
1147 void AliITSvPPRcoarsesymm::StepManager(){
1148 ////////////////////////////////////////////////////////////////////////
1149 //    Called for every step in the ITS, then calls the AliITShit class
1150 // creator with the information to be recoreded about that hit.
1151 ////////////////////////////////////////////////////////////////////////
1152
1153 /*
1154   Int_t         copy, id;
1155   Float_t       hits[8];
1156   Int_t         vol[4];
1157   TLorentzVector position, momentum;
1158 //  TClonesArray &lhits = *fHits;
1159 //
1160 // no hits for this coarse symmetric version.
1161 //
1162
1163   //
1164   // Track status
1165   vol[3] = 0;
1166   if(gMC->IsTrackInside())      vol[3] +=  1;
1167   if(gMC->IsTrackEntering())    vol[3] +=  2;
1168   if(gMC->IsTrackExiting())     vol[3] +=  4;
1169   if(gMC->IsTrackOut())         vol[3] +=  8;
1170   if(gMC->IsTrackDisappeared()) vol[3] += 16;
1171   if(gMC->IsTrackStop())        vol[3] += 32;
1172   if(gMC->IsTrackAlive())       vol[3] += 64;
1173   //
1174   // Fill hit structure.
1175   if( !(gMC->TrackCharge()) ) return;
1176     //
1177     // Only entering charged tracks
1178     if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {  
1179       vol[0]=1;
1180       id=gMC->CurrentVolOffID(1,copy);      
1181       vol[1]=copy;
1182       id=gMC->CurrentVolOffID(2,copy);
1183       vol[2]=copy;                       
1184     } else if(id==fIdSens[1]) {
1185       vol[0]=2;
1186       id=gMC->CurrentVolOffID(1,copy);       
1187       vol[1]=copy;
1188       id=gMC->CurrentVolOffID(2,copy);
1189       vol[2]=copy;                    
1190     } else if(id==fIdSens[2]) {
1191       vol[0]=3;
1192       vol[1]=copy;
1193       id=gMC->CurrentVolOffID(1,copy);
1194       vol[2]=copy;             
1195     } else if(id==fIdSens[3]) {
1196       vol[0]=4;
1197       vol[1]=copy;
1198       id=gMC->CurrentVolOffID(1,copy);
1199       vol[2]=copy;                  
1200     } else if(id==fIdSens[4]) {
1201       vol[0]=5;
1202       vol[1]=copy;
1203       id=gMC->CurrentVolOffID(1,copy);
1204       vol[2]=copy;               
1205     } else if(id==fIdSens[5]) {
1206       vol[0]=6;
1207       vol[1]=copy;
1208       id=gMC->CurrentVolOffID(1,copy);
1209       vol[2]=copy;                      
1210     } else return;
1211     gMC->TrackPosition(position);
1212     gMC->TrackMomentum(momentum);
1213     hits[0]=position[0];
1214     hits[1]=position[1];
1215     hits[2]=position[2];          
1216     hits[3]=momentum[0];
1217     hits[4]=momentum[1];
1218     hits[5]=momentum[2];
1219     hits[6]=gMC->Edep();
1220     hits[7]=gMC->TrackTime();
1221 //    new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1222 //
1223 // no hits for this coarse symmetric version.
1224 //
1225 */
1226 }