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