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.23 2001/04/04 07:02:16 barbera
19 Position of the cylinders holding rails corrected
21 Revision 1.22 2001/03/29 22:01:53 barbera
22 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
24 Revision 1.21 2001/03/29 05:28:56 barbera
25 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
27 Revision 1.20 2001/03/28 06:40:21 barbera
28 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
30 Revision 1.19 2001/03/13 18:13:30 barbera
31 Some mother volumes sligthly modified to eliminate an overlap with the absorber
33 Revision 1.18 2001/02/19 09:44:16 barbera
34 Copy no.2 of volume ICO2 re-inserted
36 Revision 1.17 2001/02/09 00:05:31 nilsen
37 Added fMajor/MinorVersion variables and made other changes to better make
38 use of the new code changes in AliITSgeom related classes.
40 Revision 1.16 2001/01/30 09:23:13 hristov
41 Streamers removed (R.Brun)
43 Revision 1.15 2001/01/17 07:41:29 barbera
44 Some media parameters modified
46 Revision 1.14 2001/01/15 13:13:53 barbera
49 Revision 1.13 2000/12/10 16:00:45 barbera
50 Added last definition of special media like end-ladder boxes and cones
52 Revision 1.12 2000/11/02 15:44:23 barbera
53 Services on the opposite side w.r.t the absorber modified to make room for rails
55 Revision 1.10 2000/10/27 17:19:50 barbera
56 Position of rails w.r.t. the interaction point corrected.
58 Revision 1.9 2000/10/27 13:31:29 barbera
59 Rails between ITS and TPC added.
61 Revision 1.8 2000/10/27 13:03:08 barbera
62 Small changes in the SPD volumes and materials
64 Revision 1.6 2000/10/16 14:45:37 barbera
65 Mother volume ITSD modified to avoid some overlaps
67 Revision 1.5 2000/10/16 13:49:15 barbera
68 Services volumes slightly modified and material added following Pierluigi Barberis' information
70 Revision 1.4 2000/10/07 15:33:07 barbera
71 Small corrections to the ITSV mother volume
73 Revision 1.3 2000/10/07 13:06:50 barbera
74 Some new materials and media defined
76 Revision 1.2 2000/10/07 10:58:15 barbera
77 Mother volume ITSV corrected
79 Revision 1.1 2000/10/06 23:09:24 barbera
80 New coarse geometry (asymmetric services
82 Revision 1.20 2000/10/02 21:28:08 fca
83 Removal of useless dependecies via forward declarations
85 Revision 1.19 2000/07/10 16:07:19 fca
86 Release version of ITS code
88 Revision 1.14.2.2 2000/05/19 10:09:21 nilsen
89 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
91 Revision 1.14.2.1 2000/03/04 23:45:19 nilsen
92 Fixed up the comments/documentation.
94 Revision 1.14 1999/11/25 06:52:56 fca
97 Revision 1.13.2.1 1999/11/25 06:52:21 fca
100 Revision 1.13 1999/10/27 11:16:26 fca
101 Correction of problem in geometry
103 Revision 1.12 1999/10/22 08:25:25 fca
104 remove double definition of destructors
106 Revision 1.11 1999/10/22 08:16:49 fca
107 Correct destructors, thanks to I.Hrivnacova
109 Revision 1.10 1999/10/06 19:56:50 fca
112 Revision 1.9 1999/10/05 08:05:09 fca
113 Minor corrections for uninitialised variables.
115 Revision 1.8 1999/09/29 09:24:20 fca
116 Introduction of the Copyright and cvs Log
120 ///////////////////////////////////////////////////////////////////////////////
122 // Inner Traking System version PPR coarse asymmetric //
123 // This class contains the base procedures for the Inner Tracking System //
125 // Authors: R. Barbera
129 // NOTE: THIS IS THE COARSE ASYMMETRIC PPR geometry of the ITS.
130 // THIS WILL NOT WORK
131 // with the geometry or module classes or any analysis classes. You are
132 // strongly encouraged to uses AliITSv5.
134 ///////////////////////////////////////////////////////////////////////////////
135 #include <iostream.h>
139 #include <TGeometry.h>
142 #include <TFile.h> // only required for Tracking function?
144 #include <TObjArray.h>
145 #include <TClonesArray.h>
150 #include "AliConst.h"
152 #include "AliITShit.h"
153 #include "AliITSvPPRcoarseasymm.h"
157 ClassImp(AliITSvPPRcoarseasymm)
159 //_____________________________________________________________________________
160 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
161 ////////////////////////////////////////////////////////////////////////
162 // Standard default constructor for the ITS version 6.
163 ////////////////////////////////////////////////////////////////////////
171 //_____________________________________________________________________________
172 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
173 ////////////////////////////////////////////////////////////////////////
174 // Standard constructor for the ITS version 6.
175 ////////////////////////////////////////////////////////////////////////
178 fIdName = new TString[fIdN];
185 fIdSens = new Int_t[fIdN];
186 for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
190 //____________________________________________________________________________
191 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
192 ////////////////////////////////////////////////////////////////////////
193 // Copy Constructor for ITS version 6.
194 ////////////////////////////////////////////////////////////////////////
195 if(&source == this) return;
196 Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
199 //_____________________________________________________________________________
200 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
201 ////////////////////////////////////////////////////////////////////////
202 // Assignment operator for the ITS version 6.
203 ////////////////////////////////////////////////////////////////////////
204 if(&source == this) return *this;
205 Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
208 //_____________________________________________________________________________
209 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
210 ////////////////////////////////////////////////////////////////////////
211 // Standard destructor for the ITS version 6.
212 ////////////////////////////////////////////////////////////////////////
215 //__________________________________________________________________________
216 void AliITSvPPRcoarseasymm::BuildGeometry(){
217 ////////////////////////////////////////////////////////////////////////
218 // Geometry builder for the ITS version 6.
219 ////////////////////////////////////////////////////////////////////////
221 const int kColorITS=kYellow;
223 top = gAlice->GetGeometry()->GetNode("alice");
225 new TTUBE("S_layer1","Layer1 of ITS","void",3.95,3.95+0.05475,12.25);
227 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
228 node->SetLineColor(kColorITS);
231 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+0.05475,16.3);
233 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
234 node->SetLineColor(kColorITS);
237 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.05288,21.1);
239 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
240 node->SetLineColor(kColorITS);
243 new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
245 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
246 node->SetLineColor(kColorITS);
249 new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
251 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
252 node->SetLineColor(kColorITS);
255 new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
257 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
258 node->SetLineColor(kColorITS);
261 //_____________________________________________________________________________
262 void AliITSvPPRcoarseasymm::CreateGeometry(){
263 ////////////////////////////////////////////////////////////////////////
264 // This routine defines and Creates the geometry for version 6 of the ITS.
265 ////////////////////////////////////////////////////////////////////////
267 //INNER RADII OF THE SILICON LAYERS
268 Float_t rl[6] = { 3.8095,7.,15.,24.,38.1,43.5765 };
269 //THICKNESSES OF LAYERS (in % radiation length)
270 Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 };
271 //HALF LENGTHS OF LAYERS
272 Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 };
273 //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
274 Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 };
275 //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
276 Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. };
279 Float_t dits[3], rlim, zmax;
281 Float_t pcits[100], ztpc;
282 Int_t idrotm[1999], i;
285 Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out)
286 Int_t suppmat = 0; // flag to change the material of the services
287 // supports (=0 copper, =1 aluminum, =2 carbon)
290 if(rails != 0 && rails != 1) {
291 cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)."
292 " The default value of 1 (rails in) will be used." << endl;
296 cout << "ITS: Rails are out." << endl;
298 cout << "ITS: Rails are in." << endl;
301 suppmat = GetSupportMaterial();
303 if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
304 cout << "ITS - WARNING: the flag for the material of services supports is not set neither to 0 (copper) nor to 1 (aluminum) nor to 2 (carbon)."
305 " The default value of 0 (copper) will be used." << endl;
309 cout << "ITS: The material of the services supports is copper." << endl;
310 } else if (suppmat == 1){
311 cout << "ITS: The material of the services supports is aluminum." << endl;
313 cout << "ITS: The material of the services supports is carbon." << endl;
317 Int_t *idtmed = fIdtmed->GetArray()-199;
319 // CONVERT INTO CM (RL(SI)=9.36 CM)
320 for (i = 0; i < 6; ++i) {
321 drl[i] = drl[i] / 100. * 9.36;
324 // FIELD CAGE HALF LENGTH
330 // --- Define ghost volume containing the whole ITS (including services)
331 // and fill it with air
336 dgh[3] = -ztpc-5.-0.1;
381 dgh[48] = ztpc+4.+0.1;
384 gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
386 // --- Place the ghost volume in its mother volume (ALIC) and make it
389 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
390 //gMC->Gsatt("ITSV", "SEEN", 0);
393 // --- Define ghost volume containing the six layers and fill it with air
422 gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
424 // --- Place the ghost volume in its mother volume (ITSV) and make it
427 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
428 //gMC->Gsatt("ITSD", "SEEN", 0);
431 // ITS LAYERS (SILICON)
434 dits[1] = rl[0] + drl[0];
436 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
437 gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
440 dits[1] = rl[1] + drl[1];
442 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
443 gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
446 dits[1] = rl[2] + drl[2];
448 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
449 gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
452 dits[1] = rl[3] + drl[3];
454 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
455 gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
458 dits[1] = rl[4] + drl[4];
460 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
461 gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
464 dits[1] = rl[5] + drl[5];
466 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
467 gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
469 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
471 gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0);
472 for (i = 0; i < 2; i++) {
474 dits[1] = dits[0] + drb[i];
475 dits[2] = dzb[i] / 2.;
476 zpos = dzl[i] + dits[2];
477 gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
478 gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
481 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
483 gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0);
484 for (i = 2; i < 3; i++) {
486 dits[1] = dits[0] + drb[i];
487 dits[2] = dzb[i] / 2.;
488 zpos = dzl[i] + dits[2];
489 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
490 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
492 for (i = 3; i < 4; i++) {
494 dits[1] = dits[0] + drb[i];
495 dits[2] = dzb[i] / 2.;
496 zpos = dzl[i] + dits[2];
497 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
498 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
501 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
503 gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0);
504 for (i = 4; i < 5; i++) {
506 dits[1] = dits[0] + drb[i];
507 dits[2] = dzb[i] / 2.;
508 zpos = dzl[i] + dits[2];
509 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
510 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
512 for (i = 5; i < 6; i++) {
513 dits[0] = rl[i]+0.4235;
514 dits[1] = dits[0] + drb[i];
515 dits[2] = dzb[i] / 2.;
516 zpos = dzl[i] + dits[2];
517 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
518 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
521 // DEFINE THERMAL SCREEN FOR SPD
526 gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);
527 gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
529 // DEFINE END CONES FOR SDD
531 pcits[0] = (59.-42.5)/2.;
536 gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);
537 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
538 gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
539 gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");
541 // DEFINE CYLINDER BETWEEN SDD AND SSD
543 pcits[0] = (59.5-0.13/2.)/2.;
544 pcits[1] = (59.5+0.13/2.)/2.;
546 gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);
547 gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
549 // DEFINE END CONES FOR SSD
551 pcits[0] = (74.-59.)/2.;
556 gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);
557 gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
558 gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
561 // **************************** SERVICES *********************************
565 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
575 gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5); // copper
576 } else if (suppmat == 1) {
577 gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5); // aluminum
579 gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5); // carbon
581 gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
582 gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
584 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
594 gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5); // copper
595 } else if (suppmat == 1) {
596 gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5); // aluminum
598 gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5); // carbon
600 gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
601 gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
604 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
608 dgh[1] = 46.+1.0+1.5;
613 gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);
614 gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
615 gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
617 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
621 dgh[1] = 46.+1.0+1.5;
626 gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);
627 gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
628 gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
630 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
639 gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);
640 gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
641 gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
644 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
653 gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);
654 gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
655 gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
658 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
661 dgh[0] = (ztpc-97.5)/2.;
669 gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7); // copper
670 } else if (suppmat == 1) {
671 gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7); // aluminum
673 gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7); // carbon
675 gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
677 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
680 dgh[0] = (ztpc-97.5)/2.;
688 gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7); // copper
689 } else if (suppmat == 1) {
690 gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7); // aluminum
692 gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7); // carbon
694 gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
697 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
700 dgh[0] = (ztpc-97.5)/2.;
702 dgh[2] = 46.2+1.0+1.5;
704 dgh[4] = 62.3+1.0+1.5;
707 gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);
708 gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
710 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
713 dgh[0] = (ztpc-97.5)/2.;
715 dgh[2] = 46.2+1.0+1.5;
717 dgh[4] = 62.3+1.0+1.5;
720 gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);
721 gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
723 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
732 gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5); // copper
733 } else if (suppmat == 1) {
734 gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5); // aluminum
736 gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5); // carbon
738 gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
740 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
749 gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5); // copper
750 } else if (suppmat == 1) {
751 gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5); // aluminum
753 gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5); // carbon
755 gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
757 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
765 gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);
766 gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
768 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
776 gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);
777 gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
779 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
780 // THE ABSORBER - COPPER PART - UPPER PART
784 dgh[2] = (ztpc-97.5+1.5)/2.;
788 gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5); // copper
789 } else if (suppmat == 1) {
790 gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5); // aluminum
792 gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5); // carbon
794 gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
796 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
797 // THE ABSORBER - COPPER PART - LOWER PART
801 dgh[2] = (ztpc-97.5+1.5)/2.;
805 gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5); // copper
806 } else if (suppmat == 1) {
807 gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5); // aluminum
809 gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5); // carbon
811 gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
813 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
814 // THE ABSORBER - CARBON PART - UPPER PART
817 dgh[1] = 46.+1.0+1.5;
818 dgh[2] = (ztpc-97.5)/2.;
821 gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);
822 gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
824 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
825 // THE ABSORBER - CARBON PART - LOWER PART
828 dgh[1] = 46.+1.0+1.5;
829 dgh[2] = (ztpc-97.5)/2.;
832 gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);
833 gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
835 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
836 // COPPER PART - UPPER PART
844 gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5); // copper
845 } else if (suppmat == 1) {
846 gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5); // aluminum
848 gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5); // carbon
850 gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
852 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
853 // COPPER PART - LOWER PART
861 gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5); // copper
862 } else if (suppmat == 1) {
863 gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5); // aluminum
865 gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5); // carbon
867 gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
869 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
870 // CARBON PART - UPPER PART
877 gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);
878 gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
880 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
881 // CARBON PART - LOWER PART
888 gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);
889 gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
891 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
898 gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);
899 gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
901 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
908 gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);
909 gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
911 // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
918 gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
919 gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");
920 gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);
921 gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");
923 dgh[0] = 2.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
924 dgh[1] = 8.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
926 gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);
927 gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");
928 gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);
929 gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");
933 // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
938 gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);
939 gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");
940 gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");
942 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
946 dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3
947 gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);
948 gMC->Gspos("ISR1", 1, "ALIC", 54.9, 11., 79.5, 0, "ONLY");
949 gMC->Gspos("ISR1", 2, "ALIC", 54.9, -11., 79.5, 0, "ONLY");
950 gMC->Gspos("ISR1", 3, "ALIC", -54.9, 11., 79.5, 0, "ONLY");
951 gMC->Gspos("ISR1", 4, "ALIC", -54.9, -11., 79.5, 0, "ONLY");
952 gMC->Gspos("ISR1", 5, "ALIC", 54.9, 11., -79.5, 0, "ONLY");
953 gMC->Gspos("ISR1", 6, "ALIC", 54.9, -11., -79.5, 0, "ONLY");
954 gMC->Gspos("ISR1", 7, "ALIC", -54.9, 11., -79.5, 0, "ONLY");
955 gMC->Gspos("ISR1", 8, "ALIC", -54.9, -11., -79.5, 0, "ONLY");
957 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
962 gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);
963 gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
964 gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);
965 gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");
970 gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);
971 gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");
972 gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);
973 gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
975 // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
980 gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);
981 gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY");
982 gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY");
983 gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");
986 // --- Outputs the geometry tree in the EUCLID/CAD format
989 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
992 //_____________________________________________________________________________
993 void AliITSvPPRcoarseasymm::CreateMaterials(){
994 ////////////////////////////////////////////////////////////////////////
996 // Create ITS materials
997 // This function defines the default materials used in the Geant
998 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
999 // AliITSvPPRcoarseasymm.
1000 // In general it is automatically replaced by
1001 // the CreatMaterials routine defined in AliITSv?. Should the function
1002 // CreateMaterials not exist for the geometry version you are using this
1003 // one is used. See the definition found in AliITSv5 or the other routine
1004 // for a complete definition.
1007 Float_t awat[2] = { 1.00794,15.9994 };
1008 Float_t zwat[2] = { 1.,8. };
1009 Float_t wwat[2] = { 2.,1. };
1010 Float_t denswat = 1.;
1012 Float_t afre[2] = { 12.011,18.9984032 };
1013 Float_t zfre[2] = { 6.,9. };
1014 Float_t wfre[2] = { 5.,12. };
1015 Float_t densfre = 1.5;
1017 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1018 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1019 Float_t zcer[5] = { 13.,8.,14.,25., 24. };
1020 Float_t wcer[5] = { .49976,1.01233,.01307, .01782,.00342 };
1021 Float_t denscer = 3.6;
1023 // 60% SiO2 , 40% G10FR4
1025 Float_t apcb[3] = { 28.0855,15.9994,17.749 };
1026 Float_t zpcb[3] = { 14.,8.,8.875 };
1027 Float_t wpcb[3] = { .28,.32,.4 };
1028 Float_t denspcb = 1.8;
1030 Float_t apoly[2] = { 12.01,1. };
1031 Float_t zpoly[2] = { 6.,1. };
1032 Float_t wpoly[2] = { .33,.67 };
1034 Float_t zserv[4] = { 1.,6.,26.,29. };
1035 Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1036 Float_t wserv[4] = { .014,.086,.42,.48 };
1038 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1039 Float_t zsteel[4] = { 26.,24.,28.,14. };
1040 Float_t wsteel[4] = { .715,.18,.1,.005 };
1043 Int_t isxfld = gAlice->Field()->Integ();
1044 Float_t sxmgmx = gAlice->Field()->Max();
1047 // --- Define the various materials for GEANT ---
1049 // 200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1051 AliMaterial(0, "SPD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1052 AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1053 AliMaterial(2, "SPD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1054 AliMaterial(3, "SPD C$", 12.011, 6., 2.265,18.8, 999.);
1056 AliMaterial(4, "SPD Air$", 14.61, 7.3, .001205, 30423., 999.);
1057 AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1058 AliMaterial(6, "SPD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1059 AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1060 AliMixture( 8, "SPD Freon$", afre, zfre, densfre, -2, wfre);
1061 AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.);
1062 //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);
1063 AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.); // check !!!!
1065 AliMedium(0, "SPD Si$", 0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1066 AliMedium(1, "SPD Si chip$", 1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1067 AliMedium(2, "SPD Si bus$", 2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1068 AliMedium(3, "SPD C$", 3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1069 AliMedium(4, "SPD Air$", 4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1070 AliMedium(5, "SPD Vacuum$", 5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1071 AliMedium(6, "SPD Al$", 6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1072 AliMedium(7, "SPD Water $", 7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1073 AliMedium(8, "SPD Freon$", 8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1074 AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075 AliMedium(10, "SPD cone$", 10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1077 // 225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1079 AliMaterial(25, "SDD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1080 AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1081 AliMaterial(27, "SDD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1082 AliMaterial(28, "SDD C$", 12.011, 6., 2.265,18.8, 999.);
1084 AliMaterial(29, "SDD Air$", 14.61, 7.3, .001205, 30423., 999.);
1085 AliMaterial(30, "SDD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1086 AliMaterial(31, "SDD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1087 // After a call with ratios by number (negative number of elements),
1088 // the ratio array is changed to the ratio by weight, so all successive
1089 // calls with the same array must specify the number of elements as
1091 AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
1092 // After a call with ratios by number (negative number of elements),
1093 // the ratio array is changed to the ratio by weight, so all successive
1094 // calls with the same array must specify the number of elements as
1096 AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1097 AliMixture( 34, "SDD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1098 AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1099 AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1100 AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1101 AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999.);
1102 AliMaterial(39, "SDD cone$",63.546, 29., 1.15, 1.265, 999.);
1103 AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);
1104 //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.);
1105 //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);
1109 AliMedium(25, "SDD Si$", 25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1110 AliMedium(26, "SDD Si chip$", 26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1111 AliMedium(27, "SDD Si bus$", 27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1112 AliMedium(28, "SDD C$", 28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1113 AliMedium(29, "SDD Air$", 29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1114 AliMedium(30, "SDD Vacuum$", 30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1115 AliMedium(31, "SDD Al$", 31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1116 AliMedium(32, "SDD Water $", 32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1117 AliMedium(33, "SDD Freon$", 33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1118 AliMedium(34, "SDD PCB$", 34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1119 AliMedium(35, "SDD Copper$", 35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1120 AliMedium(36, "SDD Ceramics$", 36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1121 AliMedium(37, "SDD Kapton$", 37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122 AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123 AliMedium(39, "SDD cone$", 39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1124 AliMedium(40, "SDD M55J$", 40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1125 // 250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1127 AliMaterial(50, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1128 AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1129 AliMaterial(52, "SSD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1130 AliMaterial(53, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
1132 AliMaterial(54, "SSD Air$", 14.61, 7.3, .001205, 30423., 999.);
1133 AliMaterial(55, "SSD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1134 AliMaterial(56, "SSD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1135 // After a call with ratios by number (negative number of elements),
1136 // the ratio array is changed to the ratio by weight, so all successive
1137 // calls with the same array must specify the number of elements as
1139 AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1140 // After a call with ratios by number (negative number of elements),
1141 // the ratio array is changed to the ratio by weight, so all successive
1142 // calls with the same array must specify the number of elements as
1144 AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1145 AliMixture(59, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1146 AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1147 // After a call with ratios by number (negative number of elements),
1148 // the ratio array is changed to the ratio by weight, so all successive
1149 // calls with the same array must specify the number of elements as
1151 AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1152 AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1154 AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1155 AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.);
1156 AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);
1157 //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.);
1158 //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);
1160 AliMedium(50, "SSD Si$", 50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1161 AliMedium(51, "SSD Si chip$", 51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1162 AliMedium(52, "SSD Si bus$", 52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1163 AliMedium(53, "SSD C$", 53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1164 AliMedium(54, "SSD Air$", 54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1165 AliMedium(55, "SSD Vacuum$", 55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1166 AliMedium(56, "SSD Al$", 56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1167 AliMedium(57, "SSD Water $", 57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1168 AliMedium(58, "SSD Freon$", 58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1169 AliMedium(59, "SSD PCB$", 59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1170 AliMedium(60, "SSD Copper$", 60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1171 AliMedium(61, "SSD Ceramics$", 61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1172 AliMedium(62, "SSD Kapton$", 62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173 AliMedium(63, "SSD G10FR4$", 63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174 AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1175 AliMedium(65, "SSD cone$", 65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1177 // 275-299 --> General (end-caps, frames, cooling, cables, etc.)
1179 AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1181 AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1182 AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1183 AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1184 AliMixture( 79, "GEN SERVICES$", aserv, zserv, 4.68, 4, wserv);
1185 AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1186 // After a call with ratios by number (negative number of elements),
1187 // the ratio array is changed to the ratio by weight, so all successive
1188 // calls with the same array must specify the number of elements as
1190 AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1191 // AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1192 // AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1193 // AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1194 AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1195 AliMaterial(86, "GEN Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1196 AliMaterial(87,"inox/alum$", 32.1502,15.3383,3.0705,6.9197,999.);
1198 AliMedium(75,"GEN C$", 75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1199 AliMedium(76,"GEN Air$", 76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1200 AliMedium(77,"GEN Vacuum$", 77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1201 AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1202 AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1203 AliMedium(80,"GEN Copper$", 80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1204 AliMedium(81,"GEN Water $", 81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1205 // AliMedium(82,"GEN Cables$", 82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1206 // AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1207 // AliMedium(84,"GEN serv$", 84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1208 AliMedium(85,"GEN Inox$", 85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1209 AliMedium(86, "GEN Al$", 86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1210 AliMedium(87,"inox/alum$", 87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1213 //_____________________________________________________________________________
1214 void AliITSvPPRcoarseasymm::Init(){
1215 ////////////////////////////////////////////////////////////////////////
1216 // Initialise the ITS after it has been created.
1217 ////////////////////////////////////////////////////////////////////////
1221 for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1222 for(i=0;i<25;i++) cout << "*";cout << endl;
1226 for(i=0;i<72;i++) cout << "*";
1230 //_____________________________________________________________________________
1231 void AliITSvPPRcoarseasymm::DrawModule(){
1232 ////////////////////////////////////////////////////////////////////////
1233 // Draw a shaded view of the FMD version 6.
1234 ////////////////////////////////////////////////////////////////////////
1236 // Set everything unseen
1237 gMC->Gsatt("*", "seen", -1);
1239 // Set ALIC mother visible
1240 gMC->Gsatt("ALIC","SEEN",0);
1242 // Set the volumes visible
1243 gMC->Gsatt("ITSD","SEEN",0);
1244 gMC->Gsatt("ITS1","SEEN",1);
1245 gMC->Gsatt("ITS2","SEEN",1);
1246 gMC->Gsatt("ITS3","SEEN",1);
1247 gMC->Gsatt("ITS4","SEEN",1);
1248 gMC->Gsatt("ITS5","SEEN",1);
1249 gMC->Gsatt("ITS6","SEEN",1);
1251 gMC->Gsatt("IPCB","SEEN",1);
1252 gMC->Gsatt("ICO2","SEEN",1);
1253 gMC->Gsatt("ICER","SEEN",0);
1254 gMC->Gsatt("ISI2","SEEN",0);
1255 gMC->Gsatt("IPLA","SEEN",0);
1256 gMC->Gsatt("ICO3","SEEN",0);
1257 gMC->Gsatt("IEPX","SEEN",0);
1258 gMC->Gsatt("ISI3","SEEN",1);
1259 gMC->Gsatt("ISUP","SEEN",0);
1260 gMC->Gsatt("ICHO","SEEN",0);
1261 gMC->Gsatt("ICMO","SEEN",0);
1262 gMC->Gsatt("ICMD","SEEN",0);
1263 gMC->Gsatt("ICCO","SEEN",1);
1264 gMC->Gsatt("ICCM","SEEN",0);
1265 gMC->Gsatt("ITMD","SEEN",0);
1266 gMC->Gsatt("ITTT","SEEN",1);
1269 gMC->Gdopt("hide", "on");
1270 gMC->Gdopt("shad", "on");
1271 gMC->Gsatt("*", "fill", 7);
1272 gMC->SetClipBox(".");
1273 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1274 gMC->DefaultRange();
1275 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1276 gMC->Gdhead(1111, "Inner Tracking System Version 1");
1277 gMC->Gdman(17, 6, "MAN");
1279 //_____________________________________________________________________________
1280 void AliITSvPPRcoarseasymm::StepManager(){
1281 ////////////////////////////////////////////////////////////////////////
1282 // Called for every step in the ITS, then calls the AliITShit class
1283 // creator with the information to be recoreded about that hit.
1284 ////////////////////////////////////////////////////////////////////////
1290 TLorentzVector position, momentum;
1291 // TClonesArray &lhits = *fHits;
1293 // no hits for this coarse asymmetric version.
1299 if(gMC->IsTrackInside()) vol[3] += 1;
1300 if(gMC->IsTrackEntering()) vol[3] += 2;
1301 if(gMC->IsTrackExiting()) vol[3] += 4;
1302 if(gMC->IsTrackOut()) vol[3] += 8;
1303 if(gMC->IsTrackDisappeared()) vol[3] += 16;
1304 if(gMC->IsTrackStop()) vol[3] += 32;
1305 if(gMC->IsTrackAlive()) vol[3] += 64;
1307 // Fill hit structure.
1308 if( !(gMC->TrackCharge()) ) return;
1310 // Only entering charged tracks
1311 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
1313 id=gMC->CurrentVolOffID(1,copy);
1315 id=gMC->CurrentVolOffID(2,copy);
1317 } else if(id==fIdSens[1]) {
1319 id=gMC->CurrentVolOffID(1,copy);
1321 id=gMC->CurrentVolOffID(2,copy);
1323 } else if(id==fIdSens[2]) {
1326 id=gMC->CurrentVolOffID(1,copy);
1328 } else if(id==fIdSens[3]) {
1331 id=gMC->CurrentVolOffID(1,copy);
1333 } else if(id==fIdSens[4]) {
1336 id=gMC->CurrentVolOffID(1,copy);
1338 } else if(id==fIdSens[5]) {
1341 id=gMC->CurrentVolOffID(1,copy);
1344 gMC->TrackPosition(position);
1345 gMC->TrackMomentum(momentum);
1346 hits[0]=position[0];
1347 hits[1]=position[1];
1348 hits[2]=position[2];
1349 hits[3]=momentum[0];
1350 hits[4]=momentum[1];
1351 hits[5]=momentum[2];
1352 hits[6]=gMC->Edep();
1353 hits[7]=gMC->TrackTime();
1354 // new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1356 // no hits for this coarse asymmetric version.