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.25 2001/05/03 08:40:15 barbera
19 Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts. The last commit did not complete successfully.
21 Revision 1.23 2001/04/04 07:02:16 barbera
22 Position of the cylinders holding rails corrected
24 Revision 1.22 2001/03/29 22:01:53 barbera
25 New flag added to change the material for some service supports as asked by the PMD people. Some changes to the services due to the new drawings from the engineers
27 Revision 1.21 2001/03/29 05:28:56 barbera
28 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
30 Revision 1.20 2001/03/28 06:40:21 barbera
31 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
33 Revision 1.19 2001/03/13 18:13:30 barbera
34 Some mother volumes sligthly modified to eliminate an overlap with the absorber
36 Revision 1.18 2001/02/19 09:44:16 barbera
37 Copy no.2 of volume ICO2 re-inserted
39 Revision 1.17 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.
43 Revision 1.16 2001/01/30 09:23:13 hristov
44 Streamers removed (R.Brun)
46 Revision 1.15 2001/01/17 07:41:29 barbera
47 Some media parameters modified
49 Revision 1.14 2001/01/15 13:13:53 barbera
52 Revision 1.13 2000/12/10 16:00:45 barbera
53 Added last definition of special media like end-ladder boxes and cones
55 Revision 1.12 2000/11/02 15:44:23 barbera
56 Services on the opposite side w.r.t the absorber modified to make room for rails
58 Revision 1.10 2000/10/27 17:19:50 barbera
59 Position of rails w.r.t. the interaction point corrected.
61 Revision 1.9 2000/10/27 13:31:29 barbera
62 Rails between ITS and TPC added.
64 Revision 1.8 2000/10/27 13:03:08 barbera
65 Small changes in the SPD volumes and materials
67 Revision 1.6 2000/10/16 14:45:37 barbera
68 Mother volume ITSD modified to avoid some overlaps
70 Revision 1.5 2000/10/16 13:49:15 barbera
71 Services volumes slightly modified and material added following Pierluigi Barberis' information
73 Revision 1.4 2000/10/07 15:33:07 barbera
74 Small corrections to the ITSV mother volume
76 Revision 1.3 2000/10/07 13:06:50 barbera
77 Some new materials and media defined
79 Revision 1.2 2000/10/07 10:58:15 barbera
80 Mother volume ITSV corrected
82 Revision 1.1 2000/10/06 23:09:24 barbera
83 New coarse geometry (asymmetric services
85 Revision 1.20 2000/10/02 21:28:08 fca
86 Removal of useless dependecies via forward declarations
88 Revision 1.19 2000/07/10 16:07:19 fca
89 Release version of ITS code
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
94 Revision 1.14.2.1 2000/03/04 23:45:19 nilsen
95 Fixed up the comments/documentation.
97 Revision 1.14 1999/11/25 06:52:56 fca
100 Revision 1.13.2.1 1999/11/25 06:52:21 fca
101 Correct value of drca
103 Revision 1.13 1999/10/27 11:16:26 fca
104 Correction of problem in geometry
106 Revision 1.12 1999/10/22 08:25:25 fca
107 remove double definition of destructors
109 Revision 1.11 1999/10/22 08:16:49 fca
110 Correct destructors, thanks to I.Hrivnacova
112 Revision 1.10 1999/10/06 19:56:50 fca
115 Revision 1.9 1999/10/05 08:05:09 fca
116 Minor corrections for uninitialised variables.
118 Revision 1.8 1999/09/29 09:24:20 fca
119 Introduction of the Copyright and cvs Log
123 ///////////////////////////////////////////////////////////////////////////////
125 // Inner Traking System version PPR coarse asymmetric //
126 // This class contains the base procedures for the Inner Tracking System //
128 // Authors: R. Barbera
132 // NOTE: THIS IS THE COARSE ASYMMETRIC 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.
137 ///////////////////////////////////////////////////////////////////////////////
138 #include <iostream.h>
142 #include <TGeometry.h>
145 #include <TFile.h> // only required for Tracking function?
147 #include <TObjArray.h>
148 #include <TClonesArray.h>
153 #include "AliConst.h"
155 #include "AliITShit.h"
156 #include "AliITSvPPRcoarseasymm.h"
160 ClassImp(AliITSvPPRcoarseasymm)
162 //_____________________________________________________________________________
163 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
164 ////////////////////////////////////////////////////////////////////////
165 // Standard default constructor for the ITS version 6.
166 ////////////////////////////////////////////////////////////////////////
174 //_____________________________________________________________________________
175 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
176 ////////////////////////////////////////////////////////////////////////
177 // Standard constructor for the ITS version 6.
178 ////////////////////////////////////////////////////////////////////////
181 fIdName = new TString[fIdN];
188 fIdSens = new Int_t[fIdN];
189 for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
193 //____________________________________________________________________________
194 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
195 ////////////////////////////////////////////////////////////////////////
196 // Copy Constructor for ITS version 6.
197 ////////////////////////////////////////////////////////////////////////
198 if(&source == this) return;
199 Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
202 //_____________________________________________________________________________
203 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
204 ////////////////////////////////////////////////////////////////////////
205 // Assignment operator for the ITS version 6.
206 ////////////////////////////////////////////////////////////////////////
207 if(&source == this) return *this;
208 Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
211 //_____________________________________________________________________________
212 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
213 ////////////////////////////////////////////////////////////////////////
214 // Standard destructor for the ITS version 6.
215 ////////////////////////////////////////////////////////////////////////
218 //__________________________________________________________________________
219 void AliITSvPPRcoarseasymm::BuildGeometry(){
220 ////////////////////////////////////////////////////////////////////////
221 // Geometry builder for the ITS version 6.
222 ////////////////////////////////////////////////////////////////////////
224 const int kColorITS=kYellow;
226 top = gAlice->GetGeometry()->GetNode("alice");
228 new TTUBE("S_layer1","Layer1 of ITS","void",3.95,3.95+0.05475,12.25);
230 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
231 node->SetLineColor(kColorITS);
234 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+0.05475,16.3);
236 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
237 node->SetLineColor(kColorITS);
240 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.05288,21.1);
242 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
243 node->SetLineColor(kColorITS);
246 new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
248 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
249 node->SetLineColor(kColorITS);
252 new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
254 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
255 node->SetLineColor(kColorITS);
258 new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
260 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
261 node->SetLineColor(kColorITS);
264 //_____________________________________________________________________________
265 void AliITSvPPRcoarseasymm::CreateGeometry(){
266 ////////////////////////////////////////////////////////////////////////
267 // This routine defines and Creates the geometry for version 6 of the ITS.
268 ////////////////////////////////////////////////////////////////////////
270 //INNER RADII OF THE SILICON LAYERS
271 Float_t rl[6] = { 3.8095,7.,15.,24.,38.1,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. };
282 Float_t dits[3], rlim, zmax;
284 Float_t pcits[100], ztpc;
285 Int_t idrotm[1999], i;
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)
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;
299 cout << "ITS: Rails are out." << endl;
301 cout << "ITS: Rails are in." << endl;
304 suppmat = GetSupportMaterial();
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;
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;
316 cout << "ITS: The material of the services supports is carbon." << endl;
320 Int_t *idtmed = fIdtmed->GetArray()-199;
322 // CONVERT INTO CM (RL(SI)=9.36 CM)
323 for (i = 0; i < 6; ++i) {
324 drl[i] = drl[i] / 100. * 9.36;
327 // FIELD CAGE HALF LENGTH
333 // --- Define ghost volume containing the whole ITS (including services)
334 // and fill it with air
339 dgh[3] = -ztpc-5.-0.1;
384 dgh[48] = ztpc+4.+0.1;
387 gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
389 // --- Place the ghost volume in its mother volume (ALIC) and make it
392 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
393 //gMC->Gsatt("ITSV", "SEEN", 0);
396 // --- Define ghost volume containing the six layers and fill it with air
425 gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
427 // --- Place the ghost volume in its mother volume (ITSV) and make it
430 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
431 //gMC->Gsatt("ITSD", "SEEN", 0);
434 // ITS LAYERS (SILICON)
437 dits[1] = rl[0] + drl[0];
439 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
440 gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
443 dits[1] = rl[1] + drl[1];
445 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
446 gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
449 dits[1] = rl[2] + drl[2];
451 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
452 gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
455 dits[1] = rl[3] + drl[3];
457 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
458 gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
461 dits[1] = rl[4] + drl[4];
463 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
464 gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
467 dits[1] = rl[5] + drl[5];
469 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
470 gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
472 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
474 gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0);
475 for (i = 0; i < 2; i++) {
477 dits[1] = dits[0] + drb[i];
478 dits[2] = dzb[i] / 2.;
479 zpos = dzl[i] + dits[2];
480 gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
481 gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
484 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
486 gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0);
487 for (i = 2; i < 3; i++) {
489 dits[1] = dits[0] + drb[i];
490 dits[2] = dzb[i] / 2.;
491 zpos = dzl[i] + dits[2];
492 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
493 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
495 for (i = 3; i < 4; i++) {
497 dits[1] = dits[0] + drb[i];
498 dits[2] = dzb[i] / 2.;
499 zpos = dzl[i] + dits[2];
500 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
501 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
504 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
506 gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0);
507 for (i = 4; i < 5; i++) {
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);
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);
524 // DEFINE THERMAL SCREEN FOR SPD
529 gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);
530 gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
532 // DEFINE END CONES FOR SDD
534 pcits[0] = (59.-42.5)/2.;
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");
544 // DEFINE CYLINDER BETWEEN SDD AND SSD
546 pcits[0] = (59.5-0.13/2.)/2.;
547 pcits[1] = (59.5+0.13/2.)/2.;
549 gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);
550 gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
552 // DEFINE END CONES FOR SSD
554 pcits[0] = (74.-59.)/2.;
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");
564 // **************************** SERVICES *********************************
568 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
578 gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5); // copper
579 } else if (suppmat == 1) {
580 gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5); // aluminum
582 gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5); // carbon
584 gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
585 gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
587 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
597 gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5); // copper
598 } else if (suppmat == 1) {
599 gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5); // aluminum
601 gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5); // carbon
603 gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
604 gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
607 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
611 dgh[1] = 46.+1.0+1.5;
616 gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);
617 gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
618 gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
620 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
624 dgh[1] = 46.+1.0+1.5;
629 gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);
630 gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
631 gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
633 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
642 gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);
643 gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
644 gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
647 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
656 gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);
657 gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
658 gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
661 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
664 dgh[0] = (ztpc-97.5)/2.;
672 gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7); // copper
673 } else if (suppmat == 1) {
674 gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7); // aluminum
676 gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7); // carbon
678 gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
680 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
683 dgh[0] = (ztpc-97.5)/2.;
691 gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7); // copper
692 } else if (suppmat == 1) {
693 gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7); // aluminum
695 gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7); // carbon
697 gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
700 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
703 dgh[0] = (ztpc-97.5)/2.;
705 dgh[2] = 46.2+1.0+1.5;
707 dgh[4] = 62.3+1.0+1.5;
710 gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);
711 gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
713 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
716 dgh[0] = (ztpc-97.5)/2.;
718 dgh[2] = 46.2+1.0+1.5;
720 dgh[4] = 62.3+1.0+1.5;
723 gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);
724 gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
726 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
735 gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5); // copper
736 } else if (suppmat == 1) {
737 gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5); // aluminum
739 gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5); // carbon
741 gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
743 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
752 gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5); // copper
753 } else if (suppmat == 1) {
754 gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5); // aluminum
756 gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5); // carbon
758 gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
760 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
768 gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);
769 gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
771 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
779 gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);
780 gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
782 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
783 // THE ABSORBER - COPPER PART - UPPER PART
787 dgh[2] = (ztpc-97.5+1.5)/2.;
791 gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5); // copper
792 } else if (suppmat == 1) {
793 gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5); // aluminum
795 gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5); // carbon
797 gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
799 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
800 // THE ABSORBER - COPPER PART - LOWER PART
804 dgh[2] = (ztpc-97.5+1.5)/2.;
808 gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5); // copper
809 } else if (suppmat == 1) {
810 gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5); // aluminum
812 gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5); // carbon
814 gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
816 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
817 // THE ABSORBER - CARBON PART - UPPER PART
820 dgh[1] = 46.+1.0+1.5;
821 dgh[2] = (ztpc-97.5)/2.;
824 gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);
825 gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
827 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
828 // THE ABSORBER - CARBON PART - LOWER PART
831 dgh[1] = 46.+1.0+1.5;
832 dgh[2] = (ztpc-97.5)/2.;
835 gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);
836 gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
838 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
839 // COPPER PART - UPPER PART
847 gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5); // copper
848 } else if (suppmat == 1) {
849 gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5); // aluminum
851 gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5); // carbon
853 gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
855 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
856 // COPPER PART - LOWER PART
864 gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5); // copper
865 } else if (suppmat == 1) {
866 gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5); // aluminum
868 gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5); // carbon
870 gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
872 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
873 // CARBON PART - UPPER PART
880 gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);
881 gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
883 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
884 // CARBON PART - LOWER PART
891 gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);
892 gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
894 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
901 gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);
902 gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
904 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
911 gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);
912 gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
914 // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
921 gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
922 gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");
923 gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);
924 gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");
926 dgh[0] = 2.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
927 dgh[1] = 8.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
929 gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);
930 gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");
931 gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);
932 gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");
936 // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
941 gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);
942 gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");
943 gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");
945 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
949 dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3
950 gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);
951 gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY");
952 gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY");
953 gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY");
954 gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY");
955 gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY");
956 gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY");
957 gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY");
958 gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY");
960 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
965 gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);
966 gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
967 gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);
968 gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");
973 gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);
974 gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");
975 gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);
976 gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
978 // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
983 gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);
984 gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY");
985 gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY");
986 gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");
989 // --- Outputs the geometry tree in the EUCLID/CAD format
992 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
995 //_____________________________________________________________________________
996 void AliITSvPPRcoarseasymm::CreateMaterials(){
997 ////////////////////////////////////////////////////////////////////////
999 // Create ITS materials
1000 // This function defines the default materials used in the Geant
1001 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1002 // AliITSvPPRcoarseasymm.
1003 // In general it is automatically replaced by
1004 // the CreatMaterials routine defined in AliITSv?. Should the function
1005 // CreateMaterials not exist for the geometry version you are using this
1006 // one is used. See the definition found in AliITSv5 or the other routine
1007 // for a complete definition.
1010 Float_t awat[2] = { 1.00794,15.9994 };
1011 Float_t zwat[2] = { 1.,8. };
1012 Float_t wwat[2] = { 2.,1. };
1013 Float_t denswat = 1.;
1015 Float_t afre[2] = { 12.011,18.9984032 };
1016 Float_t zfre[2] = { 6.,9. };
1017 Float_t wfre[2] = { 5.,12. };
1018 Float_t densfre = 1.5;
1020 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1021 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1022 Float_t zcer[5] = { 13.,8.,14.,25., 24. };
1023 Float_t wcer[5] = { .49976,1.01233,.01307, .01782,.00342 };
1024 Float_t denscer = 3.6;
1026 // 60% SiO2 , 40% G10FR4
1028 Float_t apcb[3] = { 28.0855,15.9994,17.749 };
1029 Float_t zpcb[3] = { 14.,8.,8.875 };
1030 Float_t wpcb[3] = { .28,.32,.4 };
1031 Float_t denspcb = 1.8;
1033 Float_t apoly[2] = { 12.01,1. };
1034 Float_t zpoly[2] = { 6.,1. };
1035 Float_t wpoly[2] = { .33,.67 };
1037 Float_t zserv[4] = { 1.,6.,26.,29. };
1038 Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1039 Float_t wserv[4] = { .014,.086,.42,.48 };
1041 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1042 Float_t zsteel[4] = { 26.,24.,28.,14. };
1043 Float_t wsteel[4] = { .715,.18,.1,.005 };
1046 Int_t isxfld = gAlice->Field()->Integ();
1047 Float_t sxmgmx = gAlice->Field()->Max();
1050 // --- Define the various materials for GEANT ---
1052 // 200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1054 AliMaterial(0, "SPD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1055 AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1056 AliMaterial(2, "SPD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1057 AliMaterial(3, "SPD C$", 12.011, 6., 2.265,18.8, 999.);
1059 AliMaterial(4, "SPD Air$", 14.61, 7.3, .001205, 30423., 999.);
1060 AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1061 AliMaterial(6, "SPD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1062 AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1063 AliMixture( 8, "SPD Freon$", afre, zfre, densfre, -2, wfre);
1064 AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.);
1065 //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);
1066 AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.); // check !!!!
1068 AliMedium(0, "SPD Si$", 0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1069 AliMedium(1, "SPD Si chip$", 1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1070 AliMedium(2, "SPD Si bus$", 2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1071 AliMedium(3, "SPD C$", 3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1072 AliMedium(4, "SPD Air$", 4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1073 AliMedium(5, "SPD Vacuum$", 5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1074 AliMedium(6, "SPD Al$", 6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075 AliMedium(7, "SPD Water $", 7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1076 AliMedium(8, "SPD Freon$", 8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1077 AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1078 AliMedium(10, "SPD cone$", 10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1080 // 225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1082 AliMaterial(25, "SDD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1083 AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1084 AliMaterial(27, "SDD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1085 AliMaterial(28, "SDD C$", 12.011, 6., 2.265,18.8, 999.);
1087 AliMaterial(29, "SDD Air$", 14.61, 7.3, .001205, 30423., 999.);
1088 AliMaterial(30, "SDD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1089 AliMaterial(31, "SDD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1090 // After a call with ratios by number (negative number of elements),
1091 // the ratio array is changed to the ratio by weight, so all successive
1092 // calls with the same array must specify the number of elements as
1094 AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
1095 // After a call with ratios by number (negative number of elements),
1096 // the ratio array is changed to the ratio by weight, so all successive
1097 // calls with the same array must specify the number of elements as
1099 AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1100 AliMixture( 34, "SDD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1101 AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1102 AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1103 AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 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.);
1106 AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);
1107 //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.);
1108 //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);
1112 AliMedium(25, "SDD Si$", 25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1113 AliMedium(26, "SDD Si chip$", 26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1114 AliMedium(27, "SDD Si bus$", 27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1115 AliMedium(28, "SDD C$", 28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1116 AliMedium(29, "SDD Air$", 29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1117 AliMedium(30, "SDD Vacuum$", 30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1118 AliMedium(31, "SDD Al$", 31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1119 AliMedium(32, "SDD Water $", 32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1120 AliMedium(33, "SDD Freon$", 33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1121 AliMedium(34, "SDD PCB$", 34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122 AliMedium(35, "SDD Copper$", 35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123 AliMedium(36, "SDD Ceramics$", 36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1124 AliMedium(37, "SDD Kapton$", 37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1125 AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1126 AliMedium(39, "SDD cone$", 39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1127 AliMedium(40, "SDD M55J$", 40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1128 // 250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1130 AliMaterial(50, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1131 AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1132 AliMaterial(52, "SSD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1133 AliMaterial(53, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
1135 AliMaterial(54, "SSD Air$", 14.61, 7.3, .001205, 30423., 999.);
1136 AliMaterial(55, "SSD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1137 AliMaterial(56, "SSD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1138 // After a call with ratios by number (negative number of elements),
1139 // the ratio array is changed to the ratio by weight, so all successive
1140 // calls with the same array must specify the number of elements as
1142 AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1143 // After a call with ratios by number (negative number of elements),
1144 // the ratio array is changed to the ratio by weight, so all successive
1145 // calls with the same array must specify the number of elements as
1147 AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1148 AliMixture(59, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1149 AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1150 // After a call with ratios by number (negative number of elements),
1151 // the ratio array is changed to the ratio by weight, so all successive
1152 // calls with the same array must specify the number of elements as
1154 AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1155 AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1157 AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1158 AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.);
1159 AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);
1160 //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.);
1161 //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);
1163 AliMedium(50, "SSD Si$", 50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1164 AliMedium(51, "SSD Si chip$", 51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1165 AliMedium(52, "SSD Si bus$", 52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1166 AliMedium(53, "SSD C$", 53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1167 AliMedium(54, "SSD Air$", 54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1168 AliMedium(55, "SSD Vacuum$", 55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1169 AliMedium(56, "SSD Al$", 56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1170 AliMedium(57, "SSD Water $", 57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1171 AliMedium(58, "SSD Freon$", 58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1172 AliMedium(59, "SSD PCB$", 59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173 AliMedium(60, "SSD Copper$", 60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174 AliMedium(61, "SSD Ceramics$", 61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1175 AliMedium(62, "SSD Kapton$", 62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1176 AliMedium(63, "SSD G10FR4$", 63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1177 AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1178 AliMedium(65, "SSD cone$", 65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1180 // 275-299 --> General (end-caps, frames, cooling, cables, etc.)
1182 AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1184 AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1185 AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1186 AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1187 AliMixture( 79, "GEN SERVICES$", aserv, zserv, 4.68, 4, wserv);
1188 AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1189 // After a call with ratios by number (negative number of elements),
1190 // the ratio array is changed to the ratio by weight, so all successive
1191 // calls with the same array must specify the number of elements as
1193 AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1194 // AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1195 // AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1196 // AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1197 AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1198 AliMaterial(86, "GEN Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1199 AliMaterial(87,"inox/alum$", 32.1502,15.3383,3.0705,6.9197,999.);
1201 AliMedium(75,"GEN C$", 75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1202 AliMedium(76,"GEN Air$", 76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1203 AliMedium(77,"GEN Vacuum$", 77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1204 AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1205 AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1206 AliMedium(80,"GEN Copper$", 80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1207 AliMedium(81,"GEN Water $", 81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1208 // AliMedium(82,"GEN Cables$", 82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1209 // AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1210 // AliMedium(84,"GEN serv$", 84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1211 AliMedium(85,"GEN Inox$", 85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1212 AliMedium(86, "GEN Al$", 86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1213 AliMedium(87,"inox/alum$", 87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1216 //_____________________________________________________________________________
1217 void AliITSvPPRcoarseasymm::Init(){
1218 ////////////////////////////////////////////////////////////////////////
1219 // Initialise the ITS after it has been created.
1220 ////////////////////////////////////////////////////////////////////////
1224 for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1225 for(i=0;i<25;i++) cout << "*";cout << endl;
1229 for(i=0;i<72;i++) cout << "*";
1233 //_____________________________________________________________________________
1234 void AliITSvPPRcoarseasymm::DrawModule(){
1235 ////////////////////////////////////////////////////////////////////////
1236 // Draw a shaded view of the FMD version 6.
1237 ////////////////////////////////////////////////////////////////////////
1239 // Set everything unseen
1240 gMC->Gsatt("*", "seen", -1);
1242 // Set ALIC mother visible
1243 gMC->Gsatt("ALIC","SEEN",0);
1245 // Set the volumes visible
1246 gMC->Gsatt("ITSD","SEEN",0);
1247 gMC->Gsatt("ITS1","SEEN",1);
1248 gMC->Gsatt("ITS2","SEEN",1);
1249 gMC->Gsatt("ITS3","SEEN",1);
1250 gMC->Gsatt("ITS4","SEEN",1);
1251 gMC->Gsatt("ITS5","SEEN",1);
1252 gMC->Gsatt("ITS6","SEEN",1);
1254 gMC->Gsatt("IPCB","SEEN",1);
1255 gMC->Gsatt("ICO2","SEEN",1);
1256 gMC->Gsatt("ICER","SEEN",0);
1257 gMC->Gsatt("ISI2","SEEN",0);
1258 gMC->Gsatt("IPLA","SEEN",0);
1259 gMC->Gsatt("ICO3","SEEN",0);
1260 gMC->Gsatt("IEPX","SEEN",0);
1261 gMC->Gsatt("ISI3","SEEN",1);
1262 gMC->Gsatt("ISUP","SEEN",0);
1263 gMC->Gsatt("ICHO","SEEN",0);
1264 gMC->Gsatt("ICMO","SEEN",0);
1265 gMC->Gsatt("ICMD","SEEN",0);
1266 gMC->Gsatt("ICCO","SEEN",1);
1267 gMC->Gsatt("ICCM","SEEN",0);
1268 gMC->Gsatt("ITMD","SEEN",0);
1269 gMC->Gsatt("ITTT","SEEN",1);
1272 gMC->Gdopt("hide", "on");
1273 gMC->Gdopt("shad", "on");
1274 gMC->Gsatt("*", "fill", 7);
1275 gMC->SetClipBox(".");
1276 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1277 gMC->DefaultRange();
1278 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1279 gMC->Gdhead(1111, "Inner Tracking System Version 1");
1280 gMC->Gdman(17, 6, "MAN");
1282 //_____________________________________________________________________________
1283 void AliITSvPPRcoarseasymm::StepManager(){
1284 ////////////////////////////////////////////////////////////////////////
1285 // Called for every step in the ITS, then calls the AliITShit class
1286 // creator with the information to be recoreded about that hit.
1287 ////////////////////////////////////////////////////////////////////////
1293 TLorentzVector position, momentum;
1294 // TClonesArray &lhits = *fHits;
1296 // no hits for this coarse asymmetric version.
1302 if(gMC->IsTrackInside()) vol[3] += 1;
1303 if(gMC->IsTrackEntering()) vol[3] += 2;
1304 if(gMC->IsTrackExiting()) vol[3] += 4;
1305 if(gMC->IsTrackOut()) vol[3] += 8;
1306 if(gMC->IsTrackDisappeared()) vol[3] += 16;
1307 if(gMC->IsTrackStop()) vol[3] += 32;
1308 if(gMC->IsTrackAlive()) vol[3] += 64;
1310 // Fill hit structure.
1311 if( !(gMC->TrackCharge()) ) return;
1313 // Only entering charged tracks
1314 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
1316 id=gMC->CurrentVolOffID(1,copy);
1318 id=gMC->CurrentVolOffID(2,copy);
1320 } else if(id==fIdSens[1]) {
1322 id=gMC->CurrentVolOffID(1,copy);
1324 id=gMC->CurrentVolOffID(2,copy);
1326 } else if(id==fIdSens[2]) {
1329 id=gMC->CurrentVolOffID(1,copy);
1331 } else if(id==fIdSens[3]) {
1334 id=gMC->CurrentVolOffID(1,copy);
1336 } else if(id==fIdSens[4]) {
1339 id=gMC->CurrentVolOffID(1,copy);
1341 } else if(id==fIdSens[5]) {
1344 id=gMC->CurrentVolOffID(1,copy);
1347 gMC->TrackPosition(position);
1348 gMC->TrackMomentum(momentum);
1349 hits[0]=position[0];
1350 hits[1]=position[1];
1351 hits[2]=position[2];
1352 hits[3]=momentum[0];
1353 hits[4]=momentum[1];
1354 hits[5]=momentum[2];
1355 hits[6]=gMC->Edep();
1356 hits[7]=gMC->TrackTime();
1357 // new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1359 // no hits for this coarse asymmetric version.