1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.27 2001/10/18 12:26:38 barbera
19 Six cylinders definition in BuildGeometry() improved by comparison with CreateGeometry()
21 Revision 1.26 2001/05/25 15:59:59 morsch
22 Overlaps corrected. (R. Barbera)
24 Revision 1.25 2001/05/03 08:40:15 barbera
25 Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts. The last commit did not complete successfully.
27 Revision 1.23 2001/04/04 07:02:16 barbera
28 Position of the cylinders holding rails corrected
30 Revision 1.22 2001/03/29 22:01:53 barbera
31 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
33 Revision 1.21 2001/03/29 05:28:56 barbera
34 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
36 Revision 1.20 2001/03/28 06:40:21 barbera
37 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
39 Revision 1.19 2001/03/13 18:13:30 barbera
40 Some mother volumes sligthly modified to eliminate an overlap with the absorber
42 Revision 1.18 2001/02/19 09:44:16 barbera
43 Copy no.2 of volume ICO2 re-inserted
45 Revision 1.17 2001/02/09 00:05:31 nilsen
46 Added fMajor/MinorVersion variables and made other changes to better make
47 use of the new code changes in AliITSgeom related classes.
49 Revision 1.16 2001/01/30 09:23:13 hristov
50 Streamers removed (R.Brun)
52 Revision 1.15 2001/01/17 07:41:29 barbera
53 Some media parameters modified
55 Revision 1.14 2001/01/15 13:13:53 barbera
58 Revision 1.13 2000/12/10 16:00:45 barbera
59 Added last definition of special media like end-ladder boxes and cones
61 Revision 1.12 2000/11/02 15:44:23 barbera
62 Services on the opposite side w.r.t the absorber modified to make room for rails
64 Revision 1.10 2000/10/27 17:19:50 barbera
65 Position of rails w.r.t. the interaction point corrected.
67 Revision 1.9 2000/10/27 13:31:29 barbera
68 Rails between ITS and TPC added.
70 Revision 1.8 2000/10/27 13:03:08 barbera
71 Small changes in the SPD volumes and materials
73 Revision 1.6 2000/10/16 14:45:37 barbera
74 Mother volume ITSD modified to avoid some overlaps
76 Revision 1.5 2000/10/16 13:49:15 barbera
77 Services volumes slightly modified and material added following Pierluigi Barberis' information
79 Revision 1.4 2000/10/07 15:33:07 barbera
80 Small corrections to the ITSV mother volume
82 Revision 1.3 2000/10/07 13:06:50 barbera
83 Some new materials and media defined
85 Revision 1.2 2000/10/07 10:58:15 barbera
86 Mother volume ITSV corrected
88 Revision 1.1 2000/10/06 23:09:24 barbera
89 New coarse geometry (asymmetric services
91 Revision 1.20 2000/10/02 21:28:08 fca
92 Removal of useless dependecies via forward declarations
94 Revision 1.19 2000/07/10 16:07:19 fca
95 Release version of ITS code
97 Revision 1.14.2.2 2000/05/19 10:09:21 nilsen
98 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
100 Revision 1.14.2.1 2000/03/04 23:45:19 nilsen
101 Fixed up the comments/documentation.
103 Revision 1.14 1999/11/25 06:52:56 fca
104 Correct value of drca
106 Revision 1.13.2.1 1999/11/25 06:52:21 fca
107 Correct value of drca
109 Revision 1.13 1999/10/27 11:16:26 fca
110 Correction of problem in geometry
112 Revision 1.12 1999/10/22 08:25:25 fca
113 remove double definition of destructors
115 Revision 1.11 1999/10/22 08:16:49 fca
116 Correct destructors, thanks to I.Hrivnacova
118 Revision 1.10 1999/10/06 19:56:50 fca
121 Revision 1.9 1999/10/05 08:05:09 fca
122 Minor corrections for uninitialised variables.
124 Revision 1.8 1999/09/29 09:24:20 fca
125 Introduction of the Copyright and cvs Log
129 ///////////////////////////////////////////////////////////////////////////////
131 // Inner Traking System version PPR coarse asymmetric //
132 // This class contains the base procedures for the Inner Tracking System //
134 // Authors: R. Barbera
138 // NOTE: THIS IS THE COARSE ASYMMETRIC PPR geometry of the ITS.
139 // THIS WILL NOT WORK
140 // with the geometry or module classes or any analysis classes. You are
141 // strongly encouraged to uses AliITSv5.
143 ///////////////////////////////////////////////////////////////////////////////
144 #include <Riostream.h>
148 #include <TGeometry.h>
151 #include <TFile.h> // only required for Tracking function?
153 #include <TObjArray.h>
154 #include <TClonesArray.h>
159 #include "AliConst.h"
161 #include "AliITShit.h"
162 #include "AliITSvPPRcoarseasymm.h"
166 ClassImp(AliITSvPPRcoarseasymm)
168 //_____________________________________________________________________________
169 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
170 ////////////////////////////////////////////////////////////////////////
171 // Standard default constructor for the ITS version 6.
172 ////////////////////////////////////////////////////////////////////////
180 //_____________________________________________________________________________
181 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
182 ////////////////////////////////////////////////////////////////////////
183 // Standard constructor for the ITS version 6.
184 ////////////////////////////////////////////////////////////////////////
187 fIdName = new TString[fIdN];
194 fIdSens = new Int_t[fIdN];
195 for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
199 //____________________________________________________________________________
200 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
201 ////////////////////////////////////////////////////////////////////////
202 // Copy Constructor for ITS version 6.
203 ////////////////////////////////////////////////////////////////////////
204 if(&source == this) return;
205 Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
208 //_____________________________________________________________________________
209 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
210 ////////////////////////////////////////////////////////////////////////
211 // Assignment operator for the ITS version 6.
212 ////////////////////////////////////////////////////////////////////////
213 if(&source == this) return *this;
214 Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
217 //_____________________________________________________________________________
218 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
219 ////////////////////////////////////////////////////////////////////////
220 // Standard destructor for the ITS version 6.
221 ////////////////////////////////////////////////////////////////////////
224 //__________________________________________________________________________
225 void AliITSvPPRcoarseasymm::BuildGeometry(){
226 ////////////////////////////////////////////////////////////////////////
227 // Geometry builder for the ITS version 6.
228 ////////////////////////////////////////////////////////////////////////
230 const Int_t kColorITS=kYellow;
232 top = gAlice->GetGeometry()->GetNode("alice");
234 new TTUBE("S_layer1","Layer1 of ITS","void",3.8095,3.8095+1.03*9.36/100.,14.35);
236 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
237 node->SetLineColor(kColorITS);
240 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35);
242 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
243 node->SetLineColor(kColorITS);
246 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1);
248 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
249 node->SetLineColor(kColorITS);
252 new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1);
254 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
255 node->SetLineColor(kColorITS);
258 new TTUBE("S_layer5","Layer5 of ITS","void",38.5,38.5+0.91*9.36/100.,49.405);
260 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
261 node->SetLineColor(kColorITS);
264 new TTUBE("S_layer6","Layer6 of ITS","void",43.5765,43.5765+0.87*9.36/100.,55.27);
266 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
267 node->SetLineColor(kColorITS);
270 //_____________________________________________________________________________
271 void AliITSvPPRcoarseasymm::CreateGeometry(){
272 ////////////////////////////////////////////////////////////////////////
273 // This routine defines and Creates the geometry for version 6 of the ITS.
274 ////////////////////////////////////////////////////////////////////////
276 //INNER RADII OF THE SILICON LAYERS
277 Float_t rl[6] = { 3.8095,7.,15.,24.,38.5,43.5765 };
278 //THICKNESSES OF LAYERS (in % radiation length)
279 Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 };
280 //HALF LENGTHS OF LAYERS
281 Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 };
282 //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
283 Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 };
284 //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
285 Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. };
288 Float_t dits[3], rlim, zmax;
290 Float_t pcits[100], ztpc;
291 Int_t idrotm[1999], i;
294 Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out)
295 Int_t suppmat = 0; // flag to change the material of the services
296 // supports (=0 copper, =1 aluminum, =2 carbon)
299 if(rails != 0 && rails != 1) {
300 cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)."
301 " The default value of 1 (rails in) will be used." << endl;
305 cout << "ITS: Rails are out." << endl;
307 cout << "ITS: Rails are in." << endl;
310 suppmat = GetSupportMaterial();
312 if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
313 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)."
314 " The default value of 0 (copper) will be used." << endl;
318 cout << "ITS: The material of the services supports is copper." << endl;
319 } else if (suppmat == 1){
320 cout << "ITS: The material of the services supports is aluminum." << endl;
322 cout << "ITS: The material of the services supports is carbon." << endl;
326 Int_t *idtmed = fIdtmed->GetArray()-199;
328 // CONVERT INTO CM (RL(SI)=9.36 CM)
329 for (i = 0; i < 6; ++i) {
330 drl[i] = drl[i] / 100. * 9.36;
333 // FIELD CAGE HALF LENGTH
339 // --- Define ghost volume containing the whole ITS (including services)
340 // and fill it with air
345 dgh[3] = -ztpc-5.-0.1;
390 dgh[48] = ztpc+4.+0.1;
393 gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
395 // --- Place the ghost volume in its mother volume (ALIC) and make it
398 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
399 //gMC->Gsatt("ITSV", "SEEN", 0);
402 // --- Define ghost volume containing the six layers and fill it with air
431 gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
433 // --- Place the ghost volume in its mother volume (ITSV) and make it
436 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
437 //gMC->Gsatt("ITSD", "SEEN", 0);
440 // ITS LAYERS (SILICON)
443 dits[1] = rl[0] + drl[0];
445 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
446 gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
449 dits[1] = rl[1] + drl[1];
451 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
452 gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
455 dits[1] = rl[2] + drl[2];
457 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
458 gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
461 dits[1] = rl[3] + drl[3];
463 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
464 gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
467 dits[1] = rl[4] + drl[4];
469 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
470 gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
473 dits[1] = rl[5] + drl[5];
475 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
476 gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
478 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
480 gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0);
481 for (i = 0; i < 2; i++) {
483 dits[1] = dits[0] + drb[i];
484 dits[2] = dzb[i] / 2.;
485 zpos = dzl[i] + dits[2];
486 gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
487 gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
490 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
492 gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0);
493 for (i = 2; i < 3; i++) {
495 dits[1] = dits[0] + drb[i];
496 dits[2] = dzb[i] / 2.;
497 zpos = dzl[i] + dits[2];
498 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
499 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
501 for (i = 3; i < 4; i++) {
503 dits[1] = dits[0] + drb[i];
504 dits[2] = dzb[i] / 2.;
505 zpos = dzl[i] + dits[2];
506 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
507 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
510 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
512 gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0);
513 for (i = 4; i < 5; i++) {
515 dits[1] = dits[0] + drb[i];
516 dits[2] = dzb[i] / 2.;
517 zpos = dzl[i] + dits[2];
518 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
519 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
521 for (i = 5; i < 6; i++) {
522 dits[0] = rl[i]+0.4235;
523 dits[1] = dits[0] + drb[i];
524 dits[2] = dzb[i] / 2.;
525 zpos = dzl[i] + dits[2];
526 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
527 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
530 // DEFINE THERMAL SCREEN FOR SPD
535 gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);
536 gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
538 // DEFINE END CONES FOR SDD
540 pcits[0] = (59.-42.5)/2.;
545 gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);
546 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
547 gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
548 gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");
550 // DEFINE CYLINDER BETWEEN SDD AND SSD
552 pcits[0] = (59.5-0.13/2.)/2.;
553 pcits[1] = (59.5+0.13/2.)/2.;
555 gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);
556 gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
558 // DEFINE END CONES FOR SSD
560 pcits[0] = (74.-59.)/2.;
565 gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);
566 gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
567 gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
570 // **************************** SERVICES *********************************
574 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
584 gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5); // copper
585 } else if (suppmat == 1) {
586 gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5); // aluminum
588 gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5); // carbon
590 gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
591 gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
593 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
603 gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5); // copper
604 } else if (suppmat == 1) {
605 gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5); // aluminum
607 gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5); // carbon
609 gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
610 gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
613 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
617 dgh[1] = 46.+1.0+1.5;
622 gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);
623 gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
624 gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
626 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
630 dgh[1] = 46.+1.0+1.5;
635 gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);
636 gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
637 gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
639 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
648 gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);
649 gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
650 gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
653 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
662 gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);
663 gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
664 gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
667 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
670 dgh[0] = (ztpc-97.5)/2.;
678 gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7); // copper
679 } else if (suppmat == 1) {
680 gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7); // aluminum
682 gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7); // carbon
684 gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
686 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
689 dgh[0] = (ztpc-97.5)/2.;
697 gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7); // copper
698 } else if (suppmat == 1) {
699 gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7); // aluminum
701 gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7); // carbon
703 gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
706 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
709 dgh[0] = (ztpc-97.5)/2.;
711 dgh[2] = 46.2+1.0+1.5;
713 dgh[4] = 62.3+1.0+1.5;
716 gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);
717 gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
719 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
722 dgh[0] = (ztpc-97.5)/2.;
724 dgh[2] = 46.2+1.0+1.5;
726 dgh[4] = 62.3+1.0+1.5;
729 gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);
730 gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
732 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
741 gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5); // copper
742 } else if (suppmat == 1) {
743 gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5); // aluminum
745 gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5); // carbon
747 gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
749 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
758 gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5); // copper
759 } else if (suppmat == 1) {
760 gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5); // aluminum
762 gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5); // carbon
764 gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
766 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
774 gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);
775 gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
777 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
785 gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);
786 gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
788 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
789 // THE ABSORBER - COPPER PART - UPPER PART
793 dgh[2] = (ztpc-97.5+1.5)/2.;
797 gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5); // copper
798 } else if (suppmat == 1) {
799 gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5); // aluminum
801 gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5); // carbon
803 gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
805 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
806 // THE ABSORBER - COPPER PART - LOWER PART
810 dgh[2] = (ztpc-97.5+1.5)/2.;
814 gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5); // copper
815 } else if (suppmat == 1) {
816 gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5); // aluminum
818 gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5); // carbon
820 gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
822 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
823 // THE ABSORBER - CARBON PART - UPPER PART
826 dgh[1] = 46.+1.0+1.5;
827 dgh[2] = (ztpc-97.5)/2.;
830 gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);
831 gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
833 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
834 // THE ABSORBER - CARBON PART - LOWER PART
837 dgh[1] = 46.+1.0+1.5;
838 dgh[2] = (ztpc-97.5)/2.;
841 gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);
842 gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
844 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
845 // COPPER PART - UPPER PART
853 gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5); // copper
854 } else if (suppmat == 1) {
855 gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5); // aluminum
857 gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5); // carbon
859 gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
861 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
862 // COPPER PART - LOWER PART
870 gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5); // copper
871 } else if (suppmat == 1) {
872 gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5); // aluminum
874 gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5); // carbon
876 gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
878 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
879 // CARBON PART - UPPER PART
886 gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);
887 gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
889 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
890 // CARBON PART - LOWER PART
897 gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);
898 gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
900 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
907 gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);
908 gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
910 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
917 gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);
918 gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
920 // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
927 gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
928 gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");
929 gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);
930 gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");
932 dgh[0] = 2.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
933 dgh[1] = 8.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
935 gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);
936 gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");
937 gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);
938 gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");
942 // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
947 gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);
948 gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");
949 gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");
951 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
955 dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3
956 gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);
957 gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY");
958 gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY");
959 gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY");
960 gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY");
961 gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY");
962 gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY");
963 gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY");
964 gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY");
966 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
971 gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);
972 gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
973 gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);
974 gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");
979 gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);
980 gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");
981 gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);
982 gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
984 // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
989 gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);
990 gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY");
991 gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY");
992 gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");
995 // --- Outputs the geometry tree in the EUCLID/CAD format
998 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
1001 //_____________________________________________________________________________
1002 void AliITSvPPRcoarseasymm::CreateMaterials(){
1003 ////////////////////////////////////////////////////////////////////////
1005 // Create ITS materials
1006 // This function defines the default materials used in the Geant
1007 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1008 // AliITSvPPRcoarseasymm.
1009 // In general it is automatically replaced by
1010 // the CreatMaterials routine defined in AliITSv?. Should the function
1011 // CreateMaterials not exist for the geometry version you are using this
1012 // one is used. See the definition found in AliITSv5 or the other routine
1013 // for a complete definition.
1016 Float_t awat[2] = { 1.00794,15.9994 };
1017 Float_t zwat[2] = { 1.,8. };
1018 Float_t wwat[2] = { 2.,1. };
1019 Float_t denswat = 1.;
1021 Float_t afre[2] = { 12.011,18.9984032 };
1022 Float_t zfre[2] = { 6.,9. };
1023 Float_t wfre[2] = { 5.,12. };
1024 Float_t densfre = 1.5;
1026 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1027 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1028 Float_t zcer[5] = { 13.,8.,14.,25., 24. };
1029 Float_t wcer[5] = { .49976,1.01233,.01307, .01782,.00342 };
1030 Float_t denscer = 3.6;
1032 // 60% SiO2 , 40% G10FR4
1034 Float_t apcb[3] = { 28.0855,15.9994,17.749 };
1035 Float_t zpcb[3] = { 14.,8.,8.875 };
1036 Float_t wpcb[3] = { .28,.32,.4 };
1037 Float_t denspcb = 1.8;
1039 Float_t apoly[2] = { 12.01,1. };
1040 Float_t zpoly[2] = { 6.,1. };
1041 Float_t wpoly[2] = { .33,.67 };
1043 Float_t zserv[4] = { 1.,6.,26.,29. };
1044 Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1045 Float_t wserv[4] = { .014,.086,.42,.48 };
1047 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1048 Float_t zsteel[4] = { 26.,24.,28.,14. };
1049 Float_t wsteel[4] = { .715,.18,.1,.005 };
1052 Int_t isxfld = gAlice->Field()->Integ();
1053 Float_t sxmgmx = gAlice->Field()->Max();
1056 // --- Define the various materials for GEANT ---
1058 // 200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1060 AliMaterial(0, "SPD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1061 AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1062 AliMaterial(2, "SPD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1063 AliMaterial(3, "SPD C$", 12.011, 6., 2.265,18.8, 999.);
1065 AliMaterial(4, "SPD Air$", 14.61, 7.3, .001205, 30423., 999.);
1066 AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1067 AliMaterial(6, "SPD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1068 AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1069 AliMixture( 8, "SPD Freon$", afre, zfre, densfre, -2, wfre);
1070 AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.);
1071 //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);
1072 AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.); // check !!!!
1074 AliMedium(0, "SPD Si$", 0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075 AliMedium(1, "SPD Si chip$", 1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1076 AliMedium(2, "SPD Si bus$", 2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1077 AliMedium(3, "SPD C$", 3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1078 AliMedium(4, "SPD Air$", 4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1079 AliMedium(5, "SPD Vacuum$", 5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1080 AliMedium(6, "SPD Al$", 6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1081 AliMedium(7, "SPD Water $", 7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1082 AliMedium(8, "SPD Freon$", 8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1083 AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1084 AliMedium(10, "SPD cone$", 10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1086 // 225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1088 AliMaterial(25, "SDD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1089 AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1090 AliMaterial(27, "SDD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1091 AliMaterial(28, "SDD C$", 12.011, 6., 2.265,18.8, 999.);
1093 AliMaterial(29, "SDD Air$", 14.61, 7.3, .001205, 30423., 999.);
1094 AliMaterial(30, "SDD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1095 AliMaterial(31, "SDD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1096 // After a call with ratios by number (negative number of elements),
1097 // the ratio array is changed to the ratio by weight, so all successive
1098 // calls with the same array must specify the number of elements as
1100 AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
1101 // After a call with ratios by number (negative number of elements),
1102 // the ratio array is changed to the ratio by weight, so all successive
1103 // calls with the same array must specify the number of elements as
1105 AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1106 AliMixture( 34, "SDD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1107 AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1108 AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1109 AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1110 AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999.);
1111 AliMaterial(39, "SDD cone$",63.546, 29., 1.15, 1.265, 999.);
1112 AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);
1113 //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.);
1114 //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);
1118 AliMedium(25, "SDD Si$", 25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1119 AliMedium(26, "SDD Si chip$", 26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1120 AliMedium(27, "SDD Si bus$", 27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1121 AliMedium(28, "SDD C$", 28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122 AliMedium(29, "SDD Air$", 29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123 AliMedium(30, "SDD Vacuum$", 30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1124 AliMedium(31, "SDD Al$", 31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1125 AliMedium(32, "SDD Water $", 32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1126 AliMedium(33, "SDD Freon$", 33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1127 AliMedium(34, "SDD PCB$", 34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1128 AliMedium(35, "SDD Copper$", 35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1129 AliMedium(36, "SDD Ceramics$", 36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1130 AliMedium(37, "SDD Kapton$", 37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1131 AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1132 AliMedium(39, "SDD cone$", 39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1133 AliMedium(40, "SDD M55J$", 40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1134 // 250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1136 AliMaterial(50, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1137 AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1138 AliMaterial(52, "SSD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1139 AliMaterial(53, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
1141 AliMaterial(54, "SSD Air$", 14.61, 7.3, .001205, 30423., 999.);
1142 AliMaterial(55, "SSD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1143 AliMaterial(56, "SSD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1144 // After a call with ratios by number (negative number of elements),
1145 // the ratio array is changed to the ratio by weight, so all successive
1146 // calls with the same array must specify the number of elements as
1148 AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1149 // After a call with ratios by number (negative number of elements),
1150 // the ratio array is changed to the ratio by weight, so all successive
1151 // calls with the same array must specify the number of elements as
1153 AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1154 AliMixture(59, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1155 AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1156 // After a call with ratios by number (negative number of elements),
1157 // the ratio array is changed to the ratio by weight, so all successive
1158 // calls with the same array must specify the number of elements as
1160 AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1161 AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1163 AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1164 AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.);
1165 AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);
1166 //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.);
1167 //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);
1169 AliMedium(50, "SSD Si$", 50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1170 AliMedium(51, "SSD Si chip$", 51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1171 AliMedium(52, "SSD Si bus$", 52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1172 AliMedium(53, "SSD C$", 53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173 AliMedium(54, "SSD Air$", 54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174 AliMedium(55, "SSD Vacuum$", 55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1175 AliMedium(56, "SSD Al$", 56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1176 AliMedium(57, "SSD Water $", 57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1177 AliMedium(58, "SSD Freon$", 58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1178 AliMedium(59, "SSD PCB$", 59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1179 AliMedium(60, "SSD Copper$", 60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1180 AliMedium(61, "SSD Ceramics$", 61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1181 AliMedium(62, "SSD Kapton$", 62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1182 AliMedium(63, "SSD G10FR4$", 63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1183 AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1184 AliMedium(65, "SSD cone$", 65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1186 // 275-299 --> General (end-caps, frames, cooling, cables, etc.)
1188 AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1190 AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1191 AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1192 AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1193 AliMixture( 79, "GEN SERVICES$", aserv, zserv, 4.68, 4, wserv);
1194 AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1195 // After a call with ratios by number (negative number of elements),
1196 // the ratio array is changed to the ratio by weight, so all successive
1197 // calls with the same array must specify the number of elements as
1199 AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1200 // AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1201 // AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1202 // AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1203 AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1204 AliMaterial(86, "GEN Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1205 AliMaterial(87,"inox/alum$", 32.1502,15.3383,3.0705,6.9197,999.);
1207 AliMedium(75,"GEN C$", 75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1208 AliMedium(76,"GEN Air$", 76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1209 AliMedium(77,"GEN Vacuum$", 77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1210 AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1211 AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1212 AliMedium(80,"GEN Copper$", 80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1213 AliMedium(81,"GEN Water $", 81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1214 // AliMedium(82,"GEN Cables$", 82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1215 // AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1216 // AliMedium(84,"GEN serv$", 84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1217 AliMedium(85,"GEN Inox$", 85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1218 AliMedium(86, "GEN Al$", 86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1219 AliMedium(87,"inox/alum$", 87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1222 //_____________________________________________________________________________
1223 void AliITSvPPRcoarseasymm::Init(){
1224 ////////////////////////////////////////////////////////////////////////
1225 // Initialise the ITS after it has been created.
1226 ////////////////////////////////////////////////////////////////////////
1230 for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1231 for(i=0;i<25;i++) cout << "*";cout << endl;
1235 for(i=0;i<72;i++) cout << "*";
1239 //_____________________________________________________________________________
1240 void AliITSvPPRcoarseasymm::DrawModule(){
1241 ////////////////////////////////////////////////////////////////////////
1242 // Draw a shaded view of the FMD version 6.
1243 ////////////////////////////////////////////////////////////////////////
1245 // Set everything unseen
1246 gMC->Gsatt("*", "seen", -1);
1248 // Set ALIC mother visible
1249 gMC->Gsatt("ALIC","SEEN",0);
1251 // Set the volumes visible
1252 gMC->Gsatt("ITSD","SEEN",0);
1253 gMC->Gsatt("ITS1","SEEN",1);
1254 gMC->Gsatt("ITS2","SEEN",1);
1255 gMC->Gsatt("ITS3","SEEN",1);
1256 gMC->Gsatt("ITS4","SEEN",1);
1257 gMC->Gsatt("ITS5","SEEN",1);
1258 gMC->Gsatt("ITS6","SEEN",1);
1260 gMC->Gsatt("IPCB","SEEN",1);
1261 gMC->Gsatt("ICO2","SEEN",1);
1262 gMC->Gsatt("ICER","SEEN",0);
1263 gMC->Gsatt("ISI2","SEEN",0);
1264 gMC->Gsatt("IPLA","SEEN",0);
1265 gMC->Gsatt("ICO3","SEEN",0);
1266 gMC->Gsatt("IEPX","SEEN",0);
1267 gMC->Gsatt("ISI3","SEEN",1);
1268 gMC->Gsatt("ISUP","SEEN",0);
1269 gMC->Gsatt("ICHO","SEEN",0);
1270 gMC->Gsatt("ICMO","SEEN",0);
1271 gMC->Gsatt("ICMD","SEEN",0);
1272 gMC->Gsatt("ICCO","SEEN",1);
1273 gMC->Gsatt("ICCM","SEEN",0);
1274 gMC->Gsatt("ITMD","SEEN",0);
1275 gMC->Gsatt("ITTT","SEEN",1);
1278 gMC->Gdopt("hide", "on");
1279 gMC->Gdopt("shad", "on");
1280 gMC->Gsatt("*", "fill", 7);
1281 gMC->SetClipBox(".");
1282 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1283 gMC->DefaultRange();
1284 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1285 gMC->Gdhead(1111, "Inner Tracking System Version 1");
1286 gMC->Gdman(17, 6, "MAN");
1288 //_____________________________________________________________________________
1289 void AliITSvPPRcoarseasymm::StepManager(){
1290 ////////////////////////////////////////////////////////////////////////
1291 // Called for every step in the ITS, then calls the AliITShit class
1292 // creator with the information to be recoreded about that hit.
1293 ////////////////////////////////////////////////////////////////////////
1299 TLorentzVector position, momentum;
1300 // TClonesArray &lhits = *fHits;
1302 // no hits for this coarse asymmetric version.
1308 if(gMC->IsTrackInside()) vol[3] += 1;
1309 if(gMC->IsTrackEntering()) vol[3] += 2;
1310 if(gMC->IsTrackExiting()) vol[3] += 4;
1311 if(gMC->IsTrackOut()) vol[3] += 8;
1312 if(gMC->IsTrackDisappeared()) vol[3] += 16;
1313 if(gMC->IsTrackStop()) vol[3] += 32;
1314 if(gMC->IsTrackAlive()) vol[3] += 64;
1316 // Fill hit structure.
1317 if( !(gMC->TrackCharge()) ) return;
1319 // Only entering charged tracks
1320 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
1322 id=gMC->CurrentVolOffID(1,copy);
1324 id=gMC->CurrentVolOffID(2,copy);
1326 } else if(id==fIdSens[1]) {
1328 id=gMC->CurrentVolOffID(1,copy);
1330 id=gMC->CurrentVolOffID(2,copy);
1332 } else if(id==fIdSens[2]) {
1335 id=gMC->CurrentVolOffID(1,copy);
1337 } else if(id==fIdSens[3]) {
1340 id=gMC->CurrentVolOffID(1,copy);
1342 } else if(id==fIdSens[4]) {
1345 id=gMC->CurrentVolOffID(1,copy);
1347 } else if(id==fIdSens[5]) {
1350 id=gMC->CurrentVolOffID(1,copy);
1353 gMC->TrackPosition(position);
1354 gMC->TrackMomentum(momentum);
1355 hits[0]=position[0];
1356 hits[1]=position[1];
1357 hits[2]=position[2];
1358 hits[3]=momentum[0];
1359 hits[4]=momentum[1];
1360 hits[5]=momentum[2];
1361 hits[6]=gMC->Edep();
1362 hits[7]=gMC->TrackTime();
1363 // new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1365 // no hits for this coarse asymmetric version.