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