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