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.26 2001/05/25 15:59:59 morsch
19 Overlaps corrected. (R. Barbera)
21 Revision 1.25 2001/05/03 08:40:15 barbera
22 Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts. The last commit did not complete successfully.
24 Revision 1.23 2001/04/04 07:02:16 barbera
25 Position of the cylinders holding rails corrected
27 Revision 1.22 2001/03/29 22:01:53 barbera
28 New flag added to change the material for some service supports as asked by the PMD people. Some changes to the services due to the new drawings from the engineers
30 Revision 1.21 2001/03/29 05:28:56 barbera
31 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
33 Revision 1.20 2001/03/28 06:40:21 barbera
34 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
36 Revision 1.19 2001/03/13 18:13:30 barbera
37 Some mother volumes sligthly modified to eliminate an overlap with the absorber
39 Revision 1.18 2001/02/19 09:44:16 barbera
40 Copy no.2 of volume ICO2 re-inserted
42 Revision 1.17 2001/02/09 00:05:31 nilsen
43 Added fMajor/MinorVersion variables and made other changes to better make
44 use of the new code changes in AliITSgeom related classes.
46 Revision 1.16 2001/01/30 09:23:13 hristov
47 Streamers removed (R.Brun)
49 Revision 1.15 2001/01/17 07:41:29 barbera
50 Some media parameters modified
52 Revision 1.14 2001/01/15 13:13:53 barbera
55 Revision 1.13 2000/12/10 16:00:45 barbera
56 Added last definition of special media like end-ladder boxes and cones
58 Revision 1.12 2000/11/02 15:44:23 barbera
59 Services on the opposite side w.r.t the absorber modified to make room for rails
61 Revision 1.10 2000/10/27 17:19:50 barbera
62 Position of rails w.r.t. the interaction point corrected.
64 Revision 1.9 2000/10/27 13:31:29 barbera
65 Rails between ITS and TPC added.
67 Revision 1.8 2000/10/27 13:03:08 barbera
68 Small changes in the SPD volumes and materials
70 Revision 1.6 2000/10/16 14:45:37 barbera
71 Mother volume ITSD modified to avoid some overlaps
73 Revision 1.5 2000/10/16 13:49:15 barbera
74 Services volumes slightly modified and material added following Pierluigi Barberis' information
76 Revision 1.4 2000/10/07 15:33:07 barbera
77 Small corrections to the ITSV mother volume
79 Revision 1.3 2000/10/07 13:06:50 barbera
80 Some new materials and media defined
82 Revision 1.2 2000/10/07 10:58:15 barbera
83 Mother volume ITSV corrected
85 Revision 1.1 2000/10/06 23:09:24 barbera
86 New coarse geometry (asymmetric services
88 Revision 1.20 2000/10/02 21:28:08 fca
89 Removal of useless dependecies via forward declarations
91 Revision 1.19 2000/07/10 16:07:19 fca
92 Release version of ITS code
94 Revision 1.14.2.2 2000/05/19 10:09:21 nilsen
95 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
97 Revision 1.14.2.1 2000/03/04 23:45:19 nilsen
98 Fixed up the comments/documentation.
100 Revision 1.14 1999/11/25 06:52:56 fca
101 Correct value of drca
103 Revision 1.13.2.1 1999/11/25 06:52:21 fca
104 Correct value of drca
106 Revision 1.13 1999/10/27 11:16:26 fca
107 Correction of problem in geometry
109 Revision 1.12 1999/10/22 08:25:25 fca
110 remove double definition of destructors
112 Revision 1.11 1999/10/22 08:16:49 fca
113 Correct destructors, thanks to I.Hrivnacova
115 Revision 1.10 1999/10/06 19:56:50 fca
118 Revision 1.9 1999/10/05 08:05:09 fca
119 Minor corrections for uninitialised variables.
121 Revision 1.8 1999/09/29 09:24:20 fca
122 Introduction of the Copyright and cvs Log
126 ///////////////////////////////////////////////////////////////////////////////
128 // Inner Traking System version PPR coarse asymmetric //
129 // This class contains the base procedures for the Inner Tracking System //
131 // Authors: R. Barbera
135 // NOTE: THIS IS THE COARSE ASYMMETRIC PPR geometry of the ITS.
136 // THIS WILL NOT WORK
137 // with the geometry or module classes or any analysis classes. You are
138 // strongly encouraged to uses AliITSv5.
140 ///////////////////////////////////////////////////////////////////////////////
141 #include <iostream.h>
145 #include <TGeometry.h>
148 #include <TFile.h> // only required for Tracking function?
150 #include <TObjArray.h>
151 #include <TClonesArray.h>
156 #include "AliConst.h"
158 #include "AliITShit.h"
159 #include "AliITSvPPRcoarseasymm.h"
163 ClassImp(AliITSvPPRcoarseasymm)
165 //_____________________________________________________________________________
166 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
167 ////////////////////////////////////////////////////////////////////////
168 // Standard default constructor for the ITS version 6.
169 ////////////////////////////////////////////////////////////////////////
177 //_____________________________________________________________________________
178 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
179 ////////////////////////////////////////////////////////////////////////
180 // Standard constructor for the ITS version 6.
181 ////////////////////////////////////////////////////////////////////////
184 fIdName = new TString[fIdN];
191 fIdSens = new Int_t[fIdN];
192 for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
196 //____________________________________________________________________________
197 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
198 ////////////////////////////////////////////////////////////////////////
199 // Copy Constructor for ITS version 6.
200 ////////////////////////////////////////////////////////////////////////
201 if(&source == this) return;
202 Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
205 //_____________________________________________________________________________
206 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
207 ////////////////////////////////////////////////////////////////////////
208 // Assignment operator for the ITS version 6.
209 ////////////////////////////////////////////////////////////////////////
210 if(&source == this) return *this;
211 Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
214 //_____________________________________________________________________________
215 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
216 ////////////////////////////////////////////////////////////////////////
217 // Standard destructor for the ITS version 6.
218 ////////////////////////////////////////////////////////////////////////
221 //__________________________________________________________________________
222 void AliITSvPPRcoarseasymm::BuildGeometry(){
223 ////////////////////////////////////////////////////////////////////////
224 // Geometry builder for the ITS version 6.
225 ////////////////////////////////////////////////////////////////////////
227 const Int_t kColorITS=kYellow;
229 top = gAlice->GetGeometry()->GetNode("alice");
231 new TTUBE("S_layer1","Layer1 of ITS","void",3.8095,3.8095+1.03*9.36/100.,14.35);
233 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
234 node->SetLineColor(kColorITS);
237 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35);
239 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
240 node->SetLineColor(kColorITS);
243 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1);
245 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
246 node->SetLineColor(kColorITS);
249 new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1);
251 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
252 node->SetLineColor(kColorITS);
255 new TTUBE("S_layer5","Layer5 of ITS","void",38.5,38.5+0.91*9.36/100.,49.405);
257 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
258 node->SetLineColor(kColorITS);
261 new TTUBE("S_layer6","Layer6 of ITS","void",43.5765,43.5765+0.87*9.36/100.,55.27);
263 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
264 node->SetLineColor(kColorITS);
267 //_____________________________________________________________________________
268 void AliITSvPPRcoarseasymm::CreateGeometry(){
269 ////////////////////////////////////////////////////////////////////////
270 // This routine defines and Creates the geometry for version 6 of the ITS.
271 ////////////////////////////////////////////////////////////////////////
273 //INNER RADII OF THE SILICON LAYERS
274 Float_t rl[6] = { 3.8095,7.,15.,24.,38.5,43.5765 };
275 //THICKNESSES OF LAYERS (in % radiation length)
276 Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 };
277 //HALF LENGTHS OF LAYERS
278 Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 };
279 //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
280 Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 };
281 //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
282 Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. };
285 Float_t dits[3], rlim, zmax;
287 Float_t pcits[100], ztpc;
288 Int_t idrotm[1999], i;
291 Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out)
292 Int_t suppmat = 0; // flag to change the material of the services
293 // supports (=0 copper, =1 aluminum, =2 carbon)
296 if(rails != 0 && rails != 1) {
297 cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)."
298 " The default value of 1 (rails in) will be used." << endl;
302 cout << "ITS: Rails are out." << endl;
304 cout << "ITS: Rails are in." << endl;
307 suppmat = GetSupportMaterial();
309 if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
310 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)."
311 " The default value of 0 (copper) will be used." << endl;
315 cout << "ITS: The material of the services supports is copper." << endl;
316 } else if (suppmat == 1){
317 cout << "ITS: The material of the services supports is aluminum." << endl;
319 cout << "ITS: The material of the services supports is carbon." << endl;
323 Int_t *idtmed = fIdtmed->GetArray()-199;
325 // CONVERT INTO CM (RL(SI)=9.36 CM)
326 for (i = 0; i < 6; ++i) {
327 drl[i] = drl[i] / 100. * 9.36;
330 // FIELD CAGE HALF LENGTH
336 // --- Define ghost volume containing the whole ITS (including services)
337 // and fill it with air
342 dgh[3] = -ztpc-5.-0.1;
387 dgh[48] = ztpc+4.+0.1;
390 gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
392 // --- Place the ghost volume in its mother volume (ALIC) and make it
395 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
396 //gMC->Gsatt("ITSV", "SEEN", 0);
399 // --- Define ghost volume containing the six layers and fill it with air
428 gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
430 // --- Place the ghost volume in its mother volume (ITSV) and make it
433 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
434 //gMC->Gsatt("ITSD", "SEEN", 0);
437 // ITS LAYERS (SILICON)
440 dits[1] = rl[0] + drl[0];
442 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
443 gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
446 dits[1] = rl[1] + drl[1];
448 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
449 gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
452 dits[1] = rl[2] + drl[2];
454 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
455 gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
458 dits[1] = rl[3] + drl[3];
460 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
461 gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
464 dits[1] = rl[4] + drl[4];
466 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
467 gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
470 dits[1] = rl[5] + drl[5];
472 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
473 gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
475 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
477 gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0);
478 for (i = 0; i < 2; i++) {
480 dits[1] = dits[0] + drb[i];
481 dits[2] = dzb[i] / 2.;
482 zpos = dzl[i] + dits[2];
483 gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
484 gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
487 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
489 gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0);
490 for (i = 2; i < 3; i++) {
492 dits[1] = dits[0] + drb[i];
493 dits[2] = dzb[i] / 2.;
494 zpos = dzl[i] + dits[2];
495 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
496 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
498 for (i = 3; i < 4; i++) {
500 dits[1] = dits[0] + drb[i];
501 dits[2] = dzb[i] / 2.;
502 zpos = dzl[i] + dits[2];
503 gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
504 gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
507 // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
509 gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0);
510 for (i = 4; i < 5; i++) {
512 dits[1] = dits[0] + drb[i];
513 dits[2] = dzb[i] / 2.;
514 zpos = dzl[i] + dits[2];
515 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
516 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
518 for (i = 5; i < 6; i++) {
519 dits[0] = rl[i]+0.4235;
520 dits[1] = dits[0] + drb[i];
521 dits[2] = dzb[i] / 2.;
522 zpos = dzl[i] + dits[2];
523 gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
524 gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
527 // DEFINE THERMAL SCREEN FOR SPD
532 gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);
533 gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
535 // DEFINE END CONES FOR SDD
537 pcits[0] = (59.-42.5)/2.;
542 gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);
543 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
544 gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
545 gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");
547 // DEFINE CYLINDER BETWEEN SDD AND SSD
549 pcits[0] = (59.5-0.13/2.)/2.;
550 pcits[1] = (59.5+0.13/2.)/2.;
552 gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);
553 gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
555 // DEFINE END CONES FOR SSD
557 pcits[0] = (74.-59.)/2.;
562 gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);
563 gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
564 gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
567 // **************************** SERVICES *********************************
571 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
581 gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5); // copper
582 } else if (suppmat == 1) {
583 gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5); // aluminum
585 gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5); // carbon
587 gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
588 gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
590 // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
600 gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5); // copper
601 } else if (suppmat == 1) {
602 gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5); // aluminum
604 gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5); // carbon
606 gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
607 gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
610 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
614 dgh[1] = 46.+1.0+1.5;
619 gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);
620 gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
621 gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
623 // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
627 dgh[1] = 46.+1.0+1.5;
632 gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);
633 gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
634 gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
636 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
645 gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);
646 gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
647 gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
650 // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
659 gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);
660 gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");
661 gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY");
664 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
667 dgh[0] = (ztpc-97.5)/2.;
675 gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7); // copper
676 } else if (suppmat == 1) {
677 gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7); // aluminum
679 gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7); // carbon
681 gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
683 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
686 dgh[0] = (ztpc-97.5)/2.;
694 gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7); // copper
695 } else if (suppmat == 1) {
696 gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7); // aluminum
698 gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7); // carbon
700 gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
703 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
706 dgh[0] = (ztpc-97.5)/2.;
708 dgh[2] = 46.2+1.0+1.5;
710 dgh[4] = 62.3+1.0+1.5;
713 gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);
714 gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
716 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
719 dgh[0] = (ztpc-97.5)/2.;
721 dgh[2] = 46.2+1.0+1.5;
723 dgh[4] = 62.3+1.0+1.5;
726 gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);
727 gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");
729 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
738 gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5); // copper
739 } else if (suppmat == 1) {
740 gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5); // aluminum
742 gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5); // carbon
744 gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
746 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
755 gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5); // copper
756 } else if (suppmat == 1) {
757 gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5); // aluminum
759 gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5); // carbon
761 gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");
763 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
771 gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);
772 gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
774 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
782 gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);
783 gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");
785 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
786 // THE ABSORBER - COPPER PART - UPPER PART
790 dgh[2] = (ztpc-97.5+1.5)/2.;
794 gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5); // copper
795 } else if (suppmat == 1) {
796 gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5); // aluminum
798 gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5); // carbon
800 gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
802 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
803 // THE ABSORBER - COPPER PART - LOWER PART
807 dgh[2] = (ztpc-97.5+1.5)/2.;
811 gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5); // copper
812 } else if (suppmat == 1) {
813 gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5); // aluminum
815 gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5); // carbon
817 gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
819 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
820 // THE ABSORBER - CARBON PART - UPPER PART
823 dgh[1] = 46.+1.0+1.5;
824 dgh[2] = (ztpc-97.5)/2.;
827 gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);
828 gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
830 // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
831 // THE ABSORBER - CARBON PART - LOWER PART
834 dgh[1] = 46.+1.0+1.5;
835 dgh[2] = (ztpc-97.5)/2.;
838 gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);
839 gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");
841 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
842 // COPPER PART - UPPER PART
850 gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5); // copper
851 } else if (suppmat == 1) {
852 gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5); // aluminum
854 gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5); // carbon
856 gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
858 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
859 // COPPER PART - LOWER PART
867 gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5); // copper
868 } else if (suppmat == 1) {
869 gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5); // aluminum
871 gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5); // carbon
873 gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");
875 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
876 // CARBON PART - UPPER PART
883 gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);
884 gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
886 // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
887 // CARBON PART - LOWER PART
894 gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);
895 gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");
897 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
904 gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);
905 gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
907 // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
914 gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);
915 gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");
917 // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
924 gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
925 gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");
926 gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);
927 gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");
929 dgh[0] = 2.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
930 dgh[1] = 8.-0.5; // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2
932 gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);
933 gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");
934 gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);
935 gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");
939 // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
944 gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);
945 gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");
946 gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");
948 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
952 dgh[2] = 5.; // 5. comes from the fact that the volume has to be 567.6/2 cm^3
953 gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);
954 gMC->Gspos("ISR1", 1, "ITSV", 53.4292, 10.7053, 79.75, 0, "ONLY");
955 gMC->Gspos("ISR1", 2, "ITSV", 53.4292, -10.7053, 79.75, 0, "ONLY");
956 gMC->Gspos("ISR1", 3, "ITSV", -53.4292, 10.7053, 79.75, 0, "ONLY");
957 gMC->Gspos("ISR1", 4, "ITSV", -53.4292, -10.7053, 79.75, 0, "ONLY");
958 gMC->Gspos("ISR1", 5, "ITSV", 53.4292, 10.7053, -79.75, 0, "ONLY");
959 gMC->Gspos("ISR1", 6, "ITSV", 53.4292, -10.7053, -79.75, 0, "ONLY");
960 gMC->Gspos("ISR1", 7, "ITSV", -53.4292, 10.7053, -79.75, 0, "ONLY");
961 gMC->Gspos("ISR1", 8, "ITSV", -53.4292, -10.7053, -79.75, 0, "ONLY");
963 // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
968 gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);
969 gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
970 gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);
971 gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");
976 gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);
977 gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");
978 gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);
979 gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
981 // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
986 gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);
987 gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY");
988 gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY");
989 gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");
992 // --- Outputs the geometry tree in the EUCLID/CAD format
995 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
998 //_____________________________________________________________________________
999 void AliITSvPPRcoarseasymm::CreateMaterials(){
1000 ////////////////////////////////////////////////////////////////////////
1002 // Create ITS materials
1003 // This function defines the default materials used in the Geant
1004 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1005 // AliITSvPPRcoarseasymm.
1006 // In general it is automatically replaced by
1007 // the CreatMaterials routine defined in AliITSv?. Should the function
1008 // CreateMaterials not exist for the geometry version you are using this
1009 // one is used. See the definition found in AliITSv5 or the other routine
1010 // for a complete definition.
1013 Float_t awat[2] = { 1.00794,15.9994 };
1014 Float_t zwat[2] = { 1.,8. };
1015 Float_t wwat[2] = { 2.,1. };
1016 Float_t denswat = 1.;
1018 Float_t afre[2] = { 12.011,18.9984032 };
1019 Float_t zfre[2] = { 6.,9. };
1020 Float_t wfre[2] = { 5.,12. };
1021 Float_t densfre = 1.5;
1023 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1024 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1025 Float_t zcer[5] = { 13.,8.,14.,25., 24. };
1026 Float_t wcer[5] = { .49976,1.01233,.01307, .01782,.00342 };
1027 Float_t denscer = 3.6;
1029 // 60% SiO2 , 40% G10FR4
1031 Float_t apcb[3] = { 28.0855,15.9994,17.749 };
1032 Float_t zpcb[3] = { 14.,8.,8.875 };
1033 Float_t wpcb[3] = { .28,.32,.4 };
1034 Float_t denspcb = 1.8;
1036 Float_t apoly[2] = { 12.01,1. };
1037 Float_t zpoly[2] = { 6.,1. };
1038 Float_t wpoly[2] = { .33,.67 };
1040 Float_t zserv[4] = { 1.,6.,26.,29. };
1041 Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1042 Float_t wserv[4] = { .014,.086,.42,.48 };
1044 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1045 Float_t zsteel[4] = { 26.,24.,28.,14. };
1046 Float_t wsteel[4] = { .715,.18,.1,.005 };
1049 Int_t isxfld = gAlice->Field()->Integ();
1050 Float_t sxmgmx = gAlice->Field()->Max();
1053 // --- Define the various materials for GEANT ---
1055 // 200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1057 AliMaterial(0, "SPD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1058 AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1059 AliMaterial(2, "SPD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1060 AliMaterial(3, "SPD C$", 12.011, 6., 2.265,18.8, 999.);
1062 AliMaterial(4, "SPD Air$", 14.61, 7.3, .001205, 30423., 999.);
1063 AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1064 AliMaterial(6, "SPD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1065 AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1066 AliMixture( 8, "SPD Freon$", afre, zfre, densfre, -2, wfre);
1067 AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.);
1068 //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);
1069 AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.); // check !!!!
1071 AliMedium(0, "SPD Si$", 0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1072 AliMedium(1, "SPD Si chip$", 1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1073 AliMedium(2, "SPD Si bus$", 2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1074 AliMedium(3, "SPD C$", 3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075 AliMedium(4, "SPD Air$", 4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1076 AliMedium(5, "SPD Vacuum$", 5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1077 AliMedium(6, "SPD Al$", 6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1078 AliMedium(7, "SPD Water $", 7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1079 AliMedium(8, "SPD Freon$", 8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1080 AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1081 AliMedium(10, "SPD cone$", 10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1083 // 225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1085 AliMaterial(25, "SDD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1086 AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1087 AliMaterial(27, "SDD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1088 AliMaterial(28, "SDD C$", 12.011, 6., 2.265,18.8, 999.);
1090 AliMaterial(29, "SDD Air$", 14.61, 7.3, .001205, 30423., 999.);
1091 AliMaterial(30, "SDD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1092 AliMaterial(31, "SDD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1093 // After a call with ratios by number (negative number of elements),
1094 // the ratio array is changed to the ratio by weight, so all successive
1095 // calls with the same array must specify the number of elements as
1097 AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
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( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1103 AliMixture( 34, "SDD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1104 AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1105 AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1106 AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 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.);
1109 AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);
1110 //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.);
1111 //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);
1115 AliMedium(25, "SDD Si$", 25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1116 AliMedium(26, "SDD Si chip$", 26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1117 AliMedium(27, "SDD Si bus$", 27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1118 AliMedium(28, "SDD C$", 28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1119 AliMedium(29, "SDD Air$", 29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1120 AliMedium(30, "SDD Vacuum$", 30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1121 AliMedium(31, "SDD Al$", 31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122 AliMedium(32, "SDD Water $", 32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123 AliMedium(33, "SDD Freon$", 33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1124 AliMedium(34, "SDD PCB$", 34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1125 AliMedium(35, "SDD Copper$", 35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1126 AliMedium(36, "SDD Ceramics$", 36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1127 AliMedium(37, "SDD Kapton$", 37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1128 AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1129 AliMedium(39, "SDD cone$", 39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1130 AliMedium(40, "SDD M55J$", 40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1131 // 250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1133 AliMaterial(50, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
1134 AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1135 AliMaterial(52, "SSD Si bus$", 28.0855, 14., 2.33, 9.36, 999.);
1136 AliMaterial(53, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
1138 AliMaterial(54, "SSD Air$", 14.61, 7.3, .001205, 30423., 999.);
1139 AliMaterial(55, "SSD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1140 AliMaterial(56, "SSD Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1141 // After a call with ratios by number (negative number of elements),
1142 // the ratio array is changed to the ratio by weight, so all successive
1143 // calls with the same array must specify the number of elements as
1145 AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
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(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1151 AliMixture(59, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
1152 AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1153 // After a call with ratios by number (negative number of elements),
1154 // the ratio array is changed to the ratio by weight, so all successive
1155 // calls with the same array must specify the number of elements as
1157 AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1158 AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1160 AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1161 AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.);
1162 AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);
1163 //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.);
1164 //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);
1166 AliMedium(50, "SSD Si$", 50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1167 AliMedium(51, "SSD Si chip$", 51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1168 AliMedium(52, "SSD Si bus$", 52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1169 AliMedium(53, "SSD C$", 53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1170 AliMedium(54, "SSD Air$", 54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1171 AliMedium(55, "SSD Vacuum$", 55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1172 AliMedium(56, "SSD Al$", 56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173 AliMedium(57, "SSD Water $", 57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174 AliMedium(58, "SSD Freon$", 58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1175 AliMedium(59, "SSD PCB$", 59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1176 AliMedium(60, "SSD Copper$", 60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1177 AliMedium(61, "SSD Ceramics$", 61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1178 AliMedium(62, "SSD Kapton$", 62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1179 AliMedium(63, "SSD G10FR4$", 63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1180 AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1181 AliMedium(65, "SSD cone$", 65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1183 // 275-299 --> General (end-caps, frames, cooling, cables, etc.)
1185 AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1187 AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1188 AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1189 AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1190 AliMixture( 79, "GEN SERVICES$", aserv, zserv, 4.68, 4, wserv);
1191 AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1192 // After a call with ratios by number (negative number of elements),
1193 // the ratio array is changed to the ratio by weight, so all successive
1194 // calls with the same array must specify the number of elements as
1196 AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1197 // AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1198 // AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1199 // AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.); // check !!!
1200 AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1201 AliMaterial(86, "GEN Al$", 26.981539, 13., 2.6989, 8.9, 999.);
1202 AliMaterial(87,"inox/alum$", 32.1502,15.3383,3.0705,6.9197,999.);
1204 AliMedium(75,"GEN C$", 75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1205 AliMedium(76,"GEN Air$", 76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1206 AliMedium(77,"GEN Vacuum$", 77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1207 AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1208 AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1209 AliMedium(80,"GEN Copper$", 80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1210 AliMedium(81,"GEN Water $", 81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1211 // AliMedium(82,"GEN Cables$", 82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1212 // AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1213 // AliMedium(84,"GEN serv$", 84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1214 AliMedium(85,"GEN Inox$", 85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1215 AliMedium(86, "GEN Al$", 86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1216 AliMedium(87,"inox/alum$", 87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1219 //_____________________________________________________________________________
1220 void AliITSvPPRcoarseasymm::Init(){
1221 ////////////////////////////////////////////////////////////////////////
1222 // Initialise the ITS after it has been created.
1223 ////////////////////////////////////////////////////////////////////////
1227 for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1228 for(i=0;i<25;i++) cout << "*";cout << endl;
1232 for(i=0;i<72;i++) cout << "*";
1236 //_____________________________________________________________________________
1237 void AliITSvPPRcoarseasymm::DrawModule(){
1238 ////////////////////////////////////////////////////////////////////////
1239 // Draw a shaded view of the FMD version 6.
1240 ////////////////////////////////////////////////////////////////////////
1242 // Set everything unseen
1243 gMC->Gsatt("*", "seen", -1);
1245 // Set ALIC mother visible
1246 gMC->Gsatt("ALIC","SEEN",0);
1248 // Set the volumes visible
1249 gMC->Gsatt("ITSD","SEEN",0);
1250 gMC->Gsatt("ITS1","SEEN",1);
1251 gMC->Gsatt("ITS2","SEEN",1);
1252 gMC->Gsatt("ITS3","SEEN",1);
1253 gMC->Gsatt("ITS4","SEEN",1);
1254 gMC->Gsatt("ITS5","SEEN",1);
1255 gMC->Gsatt("ITS6","SEEN",1);
1257 gMC->Gsatt("IPCB","SEEN",1);
1258 gMC->Gsatt("ICO2","SEEN",1);
1259 gMC->Gsatt("ICER","SEEN",0);
1260 gMC->Gsatt("ISI2","SEEN",0);
1261 gMC->Gsatt("IPLA","SEEN",0);
1262 gMC->Gsatt("ICO3","SEEN",0);
1263 gMC->Gsatt("IEPX","SEEN",0);
1264 gMC->Gsatt("ISI3","SEEN",1);
1265 gMC->Gsatt("ISUP","SEEN",0);
1266 gMC->Gsatt("ICHO","SEEN",0);
1267 gMC->Gsatt("ICMO","SEEN",0);
1268 gMC->Gsatt("ICMD","SEEN",0);
1269 gMC->Gsatt("ICCO","SEEN",1);
1270 gMC->Gsatt("ICCM","SEEN",0);
1271 gMC->Gsatt("ITMD","SEEN",0);
1272 gMC->Gsatt("ITTT","SEEN",1);
1275 gMC->Gdopt("hide", "on");
1276 gMC->Gdopt("shad", "on");
1277 gMC->Gsatt("*", "fill", 7);
1278 gMC->SetClipBox(".");
1279 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1280 gMC->DefaultRange();
1281 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1282 gMC->Gdhead(1111, "Inner Tracking System Version 1");
1283 gMC->Gdman(17, 6, "MAN");
1285 //_____________________________________________________________________________
1286 void AliITSvPPRcoarseasymm::StepManager(){
1287 ////////////////////////////////////////////////////////////////////////
1288 // Called for every step in the ITS, then calls the AliITShit class
1289 // creator with the information to be recoreded about that hit.
1290 ////////////////////////////////////////////////////////////////////////
1296 TLorentzVector position, momentum;
1297 // TClonesArray &lhits = *fHits;
1299 // no hits for this coarse asymmetric version.
1305 if(gMC->IsTrackInside()) vol[3] += 1;
1306 if(gMC->IsTrackEntering()) vol[3] += 2;
1307 if(gMC->IsTrackExiting()) vol[3] += 4;
1308 if(gMC->IsTrackOut()) vol[3] += 8;
1309 if(gMC->IsTrackDisappeared()) vol[3] += 16;
1310 if(gMC->IsTrackStop()) vol[3] += 32;
1311 if(gMC->IsTrackAlive()) vol[3] += 64;
1313 // Fill hit structure.
1314 if( !(gMC->TrackCharge()) ) return;
1316 // Only entering charged tracks
1317 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
1319 id=gMC->CurrentVolOffID(1,copy);
1321 id=gMC->CurrentVolOffID(2,copy);
1323 } else if(id==fIdSens[1]) {
1325 id=gMC->CurrentVolOffID(1,copy);
1327 id=gMC->CurrentVolOffID(2,copy);
1329 } else if(id==fIdSens[2]) {
1332 id=gMC->CurrentVolOffID(1,copy);
1334 } else if(id==fIdSens[3]) {
1337 id=gMC->CurrentVolOffID(1,copy);
1339 } else if(id==fIdSens[4]) {
1342 id=gMC->CurrentVolOffID(1,copy);
1344 } else if(id==fIdSens[5]) {
1347 id=gMC->CurrentVolOffID(1,copy);
1350 gMC->TrackPosition(position);
1351 gMC->TrackMomentum(momentum);
1352 hits[0]=position[0];
1353 hits[1]=position[1];
1354 hits[2]=position[2];
1355 hits[3]=momentum[0];
1356 hits[4]=momentum[1];
1357 hits[5]=momentum[2];
1358 hits[6]=gMC->Edep();
1359 hits[7]=gMC->TrackTime();
1360 // new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1362 // no hits for this coarse asymmetric version.