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