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.28 2002/10/22 14:46:00 alibrary
19 Introducing Riostream.h
21 Revision 1.27 2001/10/18 12:26:38 barbera
22 Six cylinders definition in BuildGeometry() improved by comparison with CreateGeometry()
24 Revision 1.26 2001/05/25 15:59:59 morsch
25 Overlaps corrected. (R. Barbera)
27 Revision 1.25 2001/05/03 08:40:15 barbera
28 Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts. The last commit did not complete successfully.
30 Revision 1.23 2001/04/04 07:02:16 barbera
31 Position of the cylinders holding rails corrected
33 Revision 1.22 2001/03/29 22:01:53 barbera
34 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
36 Revision 1.21 2001/03/29 05:28:56 barbera
37 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
39 Revision 1.20 2001/03/28 06:40:21 barbera
40 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
42 Revision 1.19 2001/03/13 18:13:30 barbera
43 Some mother volumes sligthly modified to eliminate an overlap with the absorber
45 Revision 1.18 2001/02/19 09:44:16 barbera
46 Copy no.2 of volume ICO2 re-inserted
48 Revision 1.17 2001/02/09 00:05:31 nilsen
49 Added fMajor/MinorVersion variables and made other changes to better make
50 use of the new code changes in AliITSgeom related classes.
52 Revision 1.16 2001/01/30 09:23:13 hristov
53 Streamers removed (R.Brun)
55 Revision 1.15 2001/01/17 07:41:29 barbera
56 Some media parameters modified
58 Revision 1.14 2001/01/15 13:13:53 barbera
61 Revision 1.13 2000/12/10 16:00:45 barbera
62 Added last definition of special media like end-ladder boxes and cones
64 Revision 1.12 2000/11/02 15:44:23 barbera
65 Services on the opposite side w.r.t the absorber modified to make room for rails
67 Revision 1.10 2000/10/27 17:19:50 barbera
68 Position of rails w.r.t. the interaction point corrected.
70 Revision 1.9 2000/10/27 13:31:29 barbera
71 Rails between ITS and TPC added.
73 Revision 1.8 2000/10/27 13:03:08 barbera
74 Small changes in the SPD volumes and materials
76 Revision 1.6 2000/10/16 14:45:37 barbera
77 Mother volume ITSD modified to avoid some overlaps
79 Revision 1.5 2000/10/16 13:49:15 barbera
80 Services volumes slightly modified and material added following Pierluigi Barberis' information
82 Revision 1.4 2000/10/07 15:33:07 barbera
83 Small corrections to the ITSV mother volume
85 Revision 1.3 2000/10/07 13:06:50 barbera
86 Some new materials and media defined
88 Revision 1.2 2000/10/07 10:58:15 barbera
89 Mother volume ITSV corrected
91 Revision 1.1 2000/10/06 23:09:24 barbera
92 New coarse geometry (asymmetric services
94 Revision 1.20 2000/10/02 21:28:08 fca
95 Removal of useless dependecies via forward declarations
97 Revision 1.19 2000/07/10 16:07:19 fca
98 Release version of ITS code
100 Revision 1.14.2.2 2000/05/19 10:09:21 nilsen
101 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
103 Revision 1.14.2.1 2000/03/04 23:45:19 nilsen
104 Fixed up the comments/documentation.
106 Revision 1.14 1999/11/25 06:52:56 fca
107 Correct value of drca
109 Revision 1.13.2.1 1999/11/25 06:52:21 fca
110 Correct value of drca
112 Revision 1.13 1999/10/27 11:16:26 fca
113 Correction of problem in geometry
115 Revision 1.12 1999/10/22 08:25:25 fca
116 remove double definition of destructors
118 Revision 1.11 1999/10/22 08:16:49 fca
119 Correct destructors, thanks to I.Hrivnacova
121 Revision 1.10 1999/10/06 19:56:50 fca
124 Revision 1.9 1999/10/05 08:05:09 fca
125 Minor corrections for uninitialised variables.
127 Revision 1.8 1999/09/29 09:24:20 fca
128 Introduction of the Copyright and cvs Log
132 ///////////////////////////////////////////////////////////////////////////////
134 // Inner Traking System version PPR coarse asymmetric //
135 // This class contains the base procedures for the Inner Tracking System //
137 // Authors: R. Barbera
141 // NOTE: THIS IS THE COARSE ASYMMETRIC PPR geometry of the ITS.
142 // THIS WILL NOT WORK
143 // with the geometry or module classes or any analysis classes. You are
144 // strongly encouraged to uses AliITSv5.
146 ///////////////////////////////////////////////////////////////////////////////
147 #include <Riostream.h>
151 #include <TGeometry.h>
154 #include <TFile.h> // only required for Tracking function?
156 #include <TObjArray.h>
157 #include <TClonesArray.h>
161 #include "AliConst.h"
163 #include "AliITShit.h"
164 #include "AliITSvPPRcoarseasymm.h"
168 ClassImp(AliITSvPPRcoarseasymm)
170 //_____________________________________________________________________________
171 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
172 ////////////////////////////////////////////////////////////////////////
173 // Standard default constructor for the ITS version 6.
174 ////////////////////////////////////////////////////////////////////////
182 //_____________________________________________________________________________
183 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
184 ////////////////////////////////////////////////////////////////////////
185 // Standard constructor for the ITS version 6.
186 ////////////////////////////////////////////////////////////////////////
189 fIdName = new TString[fIdN];
196 fIdSens = new Int_t[fIdN];
197 for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
201 //____________________________________________________________________________
202 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
203 ////////////////////////////////////////////////////////////////////////
204 // Copy Constructor for ITS version 6.
205 ////////////////////////////////////////////////////////////////////////
206 if(&source == this) return;
207 Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
210 //_____________________________________________________________________________
211 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
212 ////////////////////////////////////////////////////////////////////////
213 // Assignment operator for the ITS version 6.
214 ////////////////////////////////////////////////////////////////////////
215 if(&source == this) return *this;
216 Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
219 //_____________________________________________________________________________
220 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
221 ////////////////////////////////////////////////////////////////////////
222 // Standard destructor for the ITS version 6.
223 ////////////////////////////////////////////////////////////////////////
226 //__________________________________________________________________________
227 void AliITSvPPRcoarseasymm::BuildGeometry(){
228 ////////////////////////////////////////////////////////////////////////
229 // Geometry builder for the ITS version 6.
230 ////////////////////////////////////////////////////////////////////////
232 const Int_t kColorITS=kYellow;
234 top = gAlice->GetGeometry()->GetNode("alice");
236 new TTUBE("S_layer1","Layer1 of ITS","void",3.8095,3.8095+1.03*9.36/100.,14.35);
238 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
239 node->SetLineColor(kColorITS);
242 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35);
244 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
245 node->SetLineColor(kColorITS);
248 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1);
250 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
251 node->SetLineColor(kColorITS);
254 new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1);
256 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
257 node->SetLineColor(kColorITS);
260 new TTUBE("S_layer5","Layer5 of ITS","void",38.5,38.5+0.91*9.36/100.,49.405);
262 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
263 node->SetLineColor(kColorITS);
266 new TTUBE("S_layer6","Layer6 of ITS","void",43.5765,43.5765+0.87*9.36/100.,55.27);
268 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
269 node->SetLineColor(kColorITS);
272 //_____________________________________________________________________________
273 void AliITSvPPRcoarseasymm::CreateGeometry(){
274 ////////////////////////////////////////////////////////////////////////
275 // This routine defines and Creates the geometry for version 6 of the ITS.
276 ////////////////////////////////////////////////////////////////////////
278 //INNER RADII OF THE SILICON LAYERS
279 Float_t rl[6] = { 3.8095,7.,15.,24.,38.5,43.5765 };
280 //THICKNESSES OF LAYERS (in % radiation length)
281 Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 };
282 //HALF LENGTHS OF LAYERS
283 Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 };
284 //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
285 Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 };
286 //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
287 Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. };
290 Float_t dits[3], rlim, zmax;
292 Float_t pcits[100], ztpc;
293 Int_t idrotm[1999], i;
296 Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out)
297 Int_t suppmat = 0; // flag to change the material of the services
298 // supports (=0 copper, =1 aluminum, =2 carbon)
301 if(rails != 0 && rails != 1) {
302 cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)."
303 " The default value of 1 (rails in) will be used." << endl;
307 cout << "ITS: Rails are out." << endl;
309 cout << "ITS: Rails are in." << endl;
312 suppmat = GetSupportMaterial();
314 if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
315 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)."
316 " The default value of 0 (copper) will be used." << endl;
320 cout << "ITS: The material of the services supports is copper." << endl;
321 } else if (suppmat == 1){
322 cout << "ITS: The material of the services supports is aluminum." << endl;
324 cout << "ITS: The material of the services supports is carbon." << endl;
328 Int_t *idtmed = fIdtmed->GetArray()-199;
330 // CONVERT INTO CM (RL(SI)=9.36 CM)
331 for (i = 0; i < 6; ++i) {
332 drl[i] = drl[i] / 100. * 9.36;
335 // FIELD CAGE HALF LENGTH
341 // --- Define ghost volume containing the whole ITS (including services)
342 // and fill it with air
347 dgh[3] = -ztpc-5.-0.1;
392 dgh[48] = ztpc+4.+0.1;
395 gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
397 // --- Place the ghost volume in its mother volume (ALIC) and make it
400 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
401 //gMC->Gsatt("ITSV", "SEEN", 0);
404 // --- Define ghost volume containing the six layers and fill it with air
433 gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
435 // --- Place the ghost volume in its mother volume (ITSV) and make it
438 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
439 //gMC->Gsatt("ITSD", "SEEN", 0);
442 // ITS LAYERS (SILICON)
445 dits[1] = rl[0] + drl[0];
447 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
448 gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
451 dits[1] = rl[1] + drl[1];
453 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
454 gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
457 dits[1] = rl[2] + drl[2];
459 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
460 gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
463 dits[1] = rl[3] + drl[3];
465 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
466 gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
469 dits[1] = rl[4] + drl[4];
471 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
472 gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
475 dits[1] = rl[5] + drl[5];
477 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
478 gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
480 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
482 gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0);
483 for (i = 0; i < 2; i++) {
485 dits[1] = dits[0] + drb[i];
486 dits[2] = dzb[i] / 2.;
487 zpos = dzl[i] + dits[2];
488 gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
489 gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
492 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
494 gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0);
495 for (i = 2; i < 3; 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);
503 for (i = 3; i < 4; i++) {
505 dits[1] = dits[0] + drb[i];
506 dits[2] = dzb[i] / 2.;
507 zpos = dzl[i] + dits[2];
508 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
509 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
512 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
514 gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0);
515 for (i = 4; i < 5; i++) {
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);
523 for (i = 5; i < 6; i++) {
524 dits[0] = rl[i]+0.4235;
525 dits[1] = dits[0] + drb[i];
526 dits[2] = dzb[i] / 2.;
527 zpos = dzl[i] + dits[2];
528 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
529 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
532 // DEFINE THERMAL SCREEN FOR SPD
537 gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);
538 gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
540 // DEFINE END CONES FOR SDD
542 pcits[0] = (59.-42.5)/2.;
547 gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);
548 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
549 gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
550 gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");
552 // DEFINE CYLINDER BETWEEN SDD AND SSD
554 pcits[0] = (59.5-0.13/2.)/2.;
555 pcits[1] = (59.5+0.13/2.)/2.;
557 gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);
558 gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
560 // DEFINE END CONES FOR SSD
562 pcits[0] = (74.-59.)/2.;
567 gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);
568 gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
569 gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
572 // **************************** SERVICES *********************************
576 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
586 gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5); // copper
587 } else if (suppmat == 1) {
588 gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5); // aluminum
590 gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5); // carbon
592 gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
593 gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
595 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
605 gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5); // copper
606 } else if (suppmat == 1) {
607 gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5); // aluminum
609 gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5); // carbon
611 gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
612 gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
615 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
619 dgh[1] = 46.+1.0+1.5;
624 gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);
625 gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
626 gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
628 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
632 dgh[1] = 46.+1.0+1.5;
637 gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);
638 gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
639 gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
641 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
650 gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);
651 gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
652 gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
655 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
664 gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);
665 gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
666 gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
669 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
672 dgh[0] = (ztpc-97.5)/2.;
680 gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7); // copper
681 } else if (suppmat == 1) {
682 gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7); // aluminum
684 gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7); // carbon
686 gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
688 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
691 dgh[0] = (ztpc-97.5)/2.;
699 gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7); // copper
700 } else if (suppmat == 1) {
701 gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7); // aluminum
703 gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7); // carbon
705 gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
708 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
711 dgh[0] = (ztpc-97.5)/2.;
713 dgh[2] = 46.2+1.0+1.5;
715 dgh[4] = 62.3+1.0+1.5;
718 gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);
719 gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
721 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
724 dgh[0] = (ztpc-97.5)/2.;
726 dgh[2] = 46.2+1.0+1.5;
728 dgh[4] = 62.3+1.0+1.5;
731 gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);
732 gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
734 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
743 gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5); // copper
744 } else if (suppmat == 1) {
745 gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5); // aluminum
747 gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5); // carbon
749 gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
751 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
760 gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5); // copper
761 } else if (suppmat == 1) {
762 gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5); // aluminum
764 gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5); // carbon
766 gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
768 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
776 gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);
777 gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
779 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
787 gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);
788 gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
790 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
791 // THE ABSORBER - COPPER PART - UPPER PART
795 dgh[2] = (ztpc-97.5+1.5)/2.;
799 gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5); // copper
800 } else if (suppmat == 1) {
801 gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5); // aluminum
803 gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5); // carbon
805 gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
807 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
808 // THE ABSORBER - COPPER PART - LOWER PART
812 dgh[2] = (ztpc-97.5+1.5)/2.;
816 gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5); // copper
817 } else if (suppmat == 1) {
818 gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5); // aluminum
820 gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5); // carbon
822 gMC->Gspos("ICU6", 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 - UPPER PART
828 dgh[1] = 46.+1.0+1.5;
829 dgh[2] = (ztpc-97.5)/2.;
832 gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);
833 gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
835 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
836 // THE ABSORBER - CARBON PART - LOWER PART
839 dgh[1] = 46.+1.0+1.5;
840 dgh[2] = (ztpc-97.5)/2.;
843 gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);
844 gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
846 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
847 // COPPER PART - UPPER PART
855 gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5); // copper
856 } else if (suppmat == 1) {
857 gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5); // aluminum
859 gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5); // carbon
861 gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
863 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
864 // COPPER PART - LOWER PART
872 gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5); // copper
873 } else if (suppmat == 1) {
874 gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5); // aluminum
876 gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5); // carbon
878 gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
880 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
881 // CARBON PART - UPPER PART
888 gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);
889 gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
891 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
892 // CARBON PART - LOWER PART
899 gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);
900 gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
902 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
909 gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);
910 gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
912 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
919 gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);
920 gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
922 // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
929 gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
930 gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");
931 gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);
932 gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");
934 dgh[0] = 2.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
935 dgh[1] = 8.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
937 gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);
938 gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");
939 gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);
940 gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");
944 // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
949 gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);
950 gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");
951 gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");
953 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
957 dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3
958 gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);
959 gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY");
960 gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY");
961 gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY");
962 gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY");
963 gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY");
964 gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY");
965 gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY");
966 gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY");
968 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
973 gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);
974 gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
975 gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);
976 gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");
981 gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);
982 gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");
983 gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);
984 gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
986 // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
991 gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);
992 gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY");
993 gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY");
994 gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");
997 // --- Outputs the geometry tree in the EUCLID/CAD format
1000 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
1003 //_____________________________________________________________________________
1004 void AliITSvPPRcoarseasymm::CreateMaterials(){
1005 ////////////////////////////////////////////////////////////////////////
1007 // Create ITS materials
1008 // This function defines the default materials used in the Geant
1009 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1010 // AliITSvPPRcoarseasymm.
1011 // In general it is automatically replaced by
1012 // the CreatMaterials routine defined in AliITSv?. Should the function
1013 // CreateMaterials not exist for the geometry version you are using this
1014 // one is used. See the definition found in AliITSv5 or the other routine
1015 // for a complete definition.
1018 Float_t awat[2] = { 1.00794,15.9994 };
1019 Float_t zwat[2] = { 1.,8. };
1020 Float_t wwat[2] = { 2.,1. };
1021 Float_t denswat = 1.;
1023 Float_t afre[2] = { 12.011,18.9984032 };
1024 Float_t zfre[2] = { 6.,9. };
1025 Float_t wfre[2] = { 5.,12. };
1026 Float_t densfre = 1.5;
1028 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1029 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1030 Float_t zcer[5] = { 13.,8.,14.,25., 24. };
1031 Float_t wcer[5] = { .49976,1.01233,.01307, .01782,.00342 };
1032 Float_t denscer = 3.6;
1034 // 60% SiO2 , 40% G10FR4
1036 Float_t apcb[3] = { 28.0855,15.9994,17.749 };
1037 Float_t zpcb[3] = { 14.,8.,8.875 };
1038 Float_t wpcb[3] = { .28,.32,.4 };
1039 Float_t denspcb = 1.8;
1041 Float_t apoly[2] = { 12.01,1. };
1042 Float_t zpoly[2] = { 6.,1. };
1043 Float_t wpoly[2] = { .33,.67 };
1045 Float_t zserv[4] = { 1.,6.,26.,29. };
1046 Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1047 Float_t wserv[4] = { .014,.086,.42,.48 };
1049 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1050 Float_t zsteel[4] = { 26.,24.,28.,14. };
1051 Float_t wsteel[4] = { .715,.18,.1,.005 };
1054 Int_t isxfld = gAlice->Field()->Integ();
1055 Float_t sxmgmx = gAlice->Field()->Max();
1058 // --- Define the various materials for GEANT ---
1060 // 200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1062 AliMaterial(0, "SPD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1063 AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1064 AliMaterial(2, "SPD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1065 AliMaterial(3, "SPD C$", 12.011, 6., 2.265,18.8, 999.);
1067 AliMaterial(4, "SPD Air$", 14.61, 7.3, .001205, 30423., 999.);
1068 AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1069 AliMaterial(6, "SPD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1070 AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1071 AliMixture( 8, "SPD Freon$", afre, zfre, densfre, -2, wfre);
1072 AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.);
1073 //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);
1074 AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.); // check !!!!
1076 AliMedium(0, "SPD Si$", 0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1077 AliMedium(1, "SPD Si chip$", 1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1078 AliMedium(2, "SPD Si bus$", 2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1079 AliMedium(3, "SPD C$", 3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1080 AliMedium(4, "SPD Air$", 4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1081 AliMedium(5, "SPD Vacuum$", 5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1082 AliMedium(6, "SPD Al$", 6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1083 AliMedium(7, "SPD Water $", 7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1084 AliMedium(8, "SPD Freon$", 8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1085 AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1086 AliMedium(10, "SPD cone$", 10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1088 // 225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1090 AliMaterial(25, "SDD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1091 AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1092 AliMaterial(27, "SDD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1093 AliMaterial(28, "SDD C$", 12.011, 6., 2.265,18.8, 999.);
1095 AliMaterial(29, "SDD Air$", 14.61, 7.3, .001205, 30423., 999.);
1096 AliMaterial(30, "SDD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1097 AliMaterial(31, "SDD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1098 // After a call with ratios by number (negative number of elements),
1099 // the ratio array is changed to the ratio by weight, so all successive
1100 // calls with the same array must specify the number of elements as
1102 AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
1103 // After a call with ratios by number (negative number of elements),
1104 // the ratio array is changed to the ratio by weight, so all successive
1105 // calls with the same array must specify the number of elements as
1107 AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1108 AliMixture( 34, "SDD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1109 AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1110 AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1111 AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1112 AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999.);
1113 AliMaterial(39, "SDD cone$",63.546, 29., 1.15, 1.265, 999.);
1114 AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);
1115 //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.);
1116 //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);
1120 AliMedium(25, "SDD Si$", 25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1121 AliMedium(26, "SDD Si chip$", 26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122 AliMedium(27, "SDD Si bus$", 27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123 AliMedium(28, "SDD C$", 28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1124 AliMedium(29, "SDD Air$", 29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1125 AliMedium(30, "SDD Vacuum$", 30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1126 AliMedium(31, "SDD Al$", 31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1127 AliMedium(32, "SDD Water $", 32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1128 AliMedium(33, "SDD Freon$", 33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1129 AliMedium(34, "SDD PCB$", 34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1130 AliMedium(35, "SDD Copper$", 35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1131 AliMedium(36, "SDD Ceramics$", 36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1132 AliMedium(37, "SDD Kapton$", 37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1133 AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1134 AliMedium(39, "SDD cone$", 39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1135 AliMedium(40, "SDD M55J$", 40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1136 // 250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1138 AliMaterial(50, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1139 AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1140 AliMaterial(52, "SSD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1141 AliMaterial(53, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
1143 AliMaterial(54, "SSD Air$", 14.61, 7.3, .001205, 30423., 999.);
1144 AliMaterial(55, "SSD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1145 AliMaterial(56, "SSD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1146 // After a call with ratios by number (negative number of elements),
1147 // the ratio array is changed to the ratio by weight, so all successive
1148 // calls with the same array must specify the number of elements as
1150 AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1151 // After a call with ratios by number (negative number of elements),
1152 // the ratio array is changed to the ratio by weight, so all successive
1153 // calls with the same array must specify the number of elements as
1155 AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1156 AliMixture(59, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1157 AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1158 // After a call with ratios by number (negative number of elements),
1159 // the ratio array is changed to the ratio by weight, so all successive
1160 // calls with the same array must specify the number of elements as
1162 AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1163 AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1165 AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 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.);
1168 //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.);
1169 //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);
1171 AliMedium(50, "SSD Si$", 50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1172 AliMedium(51, "SSD Si chip$", 51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173 AliMedium(52, "SSD Si bus$", 52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174 AliMedium(53, "SSD C$", 53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1175 AliMedium(54, "SSD Air$", 54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1176 AliMedium(55, "SSD Vacuum$", 55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1177 AliMedium(56, "SSD Al$", 56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1178 AliMedium(57, "SSD Water $", 57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1179 AliMedium(58, "SSD Freon$", 58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1180 AliMedium(59, "SSD PCB$", 59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1181 AliMedium(60, "SSD Copper$", 60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1182 AliMedium(61, "SSD Ceramics$", 61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1183 AliMedium(62, "SSD Kapton$", 62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1184 AliMedium(63, "SSD G10FR4$", 63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1185 AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1186 AliMedium(65, "SSD cone$", 65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1188 // 275-299 --> General (end-caps, frames, cooling, cables, etc.)
1190 AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1192 AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1193 AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1194 AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1195 AliMixture( 79, "GEN SERVICES$", aserv, zserv, 4.68, 4, wserv);
1196 AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1197 // After a call with ratios by number (negative number of elements),
1198 // the ratio array is changed to the ratio by weight, so all successive
1199 // calls with the same array must specify the number of elements as
1201 AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1202 // AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1203 // AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1204 // AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1205 AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1206 AliMaterial(86, "GEN Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1207 AliMaterial(87,"inox/alum$", 32.1502,15.3383,3.0705,6.9197,999.);
1209 AliMedium(75,"GEN C$", 75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1210 AliMedium(76,"GEN Air$", 76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1211 AliMedium(77,"GEN Vacuum$", 77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1212 AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1213 AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1214 AliMedium(80,"GEN Copper$", 80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1215 AliMedium(81,"GEN Water $", 81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1216 // AliMedium(82,"GEN Cables$", 82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1217 // AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1218 // AliMedium(84,"GEN serv$", 84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1219 AliMedium(85,"GEN Inox$", 85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1220 AliMedium(86, "GEN Al$", 86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1221 AliMedium(87,"inox/alum$", 87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1224 //_____________________________________________________________________________
1225 void AliITSvPPRcoarseasymm::Init(){
1226 ////////////////////////////////////////////////////////////////////////
1227 // Initialise the ITS after it has been created.
1228 ////////////////////////////////////////////////////////////////////////
1232 for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1233 for(i=0;i<25;i++) cout << "*";cout << endl;
1237 for(i=0;i<72;i++) cout << "*";
1241 //_____________________________________________________________________________
1242 void AliITSvPPRcoarseasymm::DrawModule(){
1243 ////////////////////////////////////////////////////////////////////////
1244 // Draw a shaded view of the FMD version 6.
1245 ////////////////////////////////////////////////////////////////////////
1247 // Set everything unseen
1248 gMC->Gsatt("*", "seen", -1);
1250 // Set ALIC mother visible
1251 gMC->Gsatt("ALIC","SEEN",0);
1253 // Set the volumes visible
1254 gMC->Gsatt("ITSD","SEEN",0);
1255 gMC->Gsatt("ITS1","SEEN",1);
1256 gMC->Gsatt("ITS2","SEEN",1);
1257 gMC->Gsatt("ITS3","SEEN",1);
1258 gMC->Gsatt("ITS4","SEEN",1);
1259 gMC->Gsatt("ITS5","SEEN",1);
1260 gMC->Gsatt("ITS6","SEEN",1);
1262 gMC->Gsatt("IPCB","SEEN",1);
1263 gMC->Gsatt("ICO2","SEEN",1);
1264 gMC->Gsatt("ICER","SEEN",0);
1265 gMC->Gsatt("ISI2","SEEN",0);
1266 gMC->Gsatt("IPLA","SEEN",0);
1267 gMC->Gsatt("ICO3","SEEN",0);
1268 gMC->Gsatt("IEPX","SEEN",0);
1269 gMC->Gsatt("ISI3","SEEN",1);
1270 gMC->Gsatt("ISUP","SEEN",0);
1271 gMC->Gsatt("ICHO","SEEN",0);
1272 gMC->Gsatt("ICMO","SEEN",0);
1273 gMC->Gsatt("ICMD","SEEN",0);
1274 gMC->Gsatt("ICCO","SEEN",1);
1275 gMC->Gsatt("ICCM","SEEN",0);
1276 gMC->Gsatt("ITMD","SEEN",0);
1277 gMC->Gsatt("ITTT","SEEN",1);
1280 gMC->Gdopt("hide", "on");
1281 gMC->Gdopt("shad", "on");
1282 gMC->Gsatt("*", "fill", 7);
1283 gMC->SetClipBox(".");
1284 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1285 gMC->DefaultRange();
1286 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1287 gMC->Gdhead(1111, "Inner Tracking System Version 1");
1288 gMC->Gdman(17, 6, "MAN");
1290 //_____________________________________________________________________________
1291 void AliITSvPPRcoarseasymm::StepManager(){
1292 ////////////////////////////////////////////////////////////////////////
1293 // Called for every step in the ITS, then calls the AliITShit class
1294 // creator with the information to be recoreded about that hit.
1295 ////////////////////////////////////////////////////////////////////////
1301 TLorentzVector position, momentum;
1302 // TClonesArray &lhits = *fHits;
1304 // no hits for this coarse asymmetric version.
1310 if(gMC->IsTrackInside()) vol[3] += 1;
1311 if(gMC->IsTrackEntering()) vol[3] += 2;
1312 if(gMC->IsTrackExiting()) vol[3] += 4;
1313 if(gMC->IsTrackOut()) vol[3] += 8;
1314 if(gMC->IsTrackDisappeared()) vol[3] += 16;
1315 if(gMC->IsTrackStop()) vol[3] += 32;
1316 if(gMC->IsTrackAlive()) vol[3] += 64;
1318 // Fill hit structure.
1319 if( !(gMC->TrackCharge()) ) return;
1321 // Only entering charged tracks
1322 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
1324 id=gMC->CurrentVolOffID(1,copy);
1326 id=gMC->CurrentVolOffID(2,copy);
1328 } else if(id==fIdSens[1]) {
1330 id=gMC->CurrentVolOffID(1,copy);
1332 id=gMC->CurrentVolOffID(2,copy);
1334 } else if(id==fIdSens[2]) {
1337 id=gMC->CurrentVolOffID(1,copy);
1339 } else if(id==fIdSens[3]) {
1342 id=gMC->CurrentVolOffID(1,copy);
1344 } else if(id==fIdSens[4]) {
1347 id=gMC->CurrentVolOffID(1,copy);
1349 } else if(id==fIdSens[5]) {
1352 id=gMC->CurrentVolOffID(1,copy);
1355 gMC->TrackPosition(position);
1356 gMC->TrackMomentum(momentum);
1357 hits[0]=position[0];
1358 hits[1]=position[1];
1359 hits[2]=position[2];
1360 hits[3]=momentum[0];
1361 hits[4]=momentum[1];
1362 hits[5]=momentum[2];
1363 hits[6]=gMC->Edep();
1364 hits[7]=gMC->TrackTime();
1365 // new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1367 // no hits for this coarse asymmetric version.