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