LCOV - code coverage report
Current view: top level - STRUCT - AliPIPEv0.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 410 0.2 %
Date: 2016-06-14 17:26:59 Functions: 1 7 14.3 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       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             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : //-------------------------------------------------------------------------
      19             : //  Beam pipe class
      20             : //  Default version
      21             : //  Author: A.Morsch
      22             : //-------------------------------------------------------------------------
      23             : 
      24             : #include <Riostream.h>
      25             : 
      26             : #include <TGeoManager.h>
      27             : #include <TGeoGlobalMagField.h>
      28             : #include <TSystem.h>
      29             : #include <TVirtualMC.h>
      30             : #include <TArrayI.h>
      31             : 
      32             : #include "AliConst.h"
      33             : #include "AliMagF.h"
      34             : #include "AliPIPEv0.h"
      35             : #include "AliRun.h"
      36             : #include "AliLog.h"
      37             :  
      38          12 : ClassImp(AliPIPEv0)
      39             : 
      40             :  
      41             : //_____________________________________________________________________________
      42           0 : AliPIPEv0::AliPIPEv0():
      43           0 :     fPipeMaterial(kBe)   
      44           0 : {
      45             : // Constructor
      46           0 : }
      47             : 
      48             : //_____________________________________________________________________________
      49             : AliPIPEv0::AliPIPEv0(const char *name, const char *title)
      50           0 :     : AliPIPE(name,title),
      51           0 :       fPipeMaterial(kBe)   
      52           0 : {
      53             : // Constructor
      54           0 : }
      55             : 
      56             :  
      57             : //___________________________________________
      58             : void AliPIPEv0::CreateGeometry()
      59             : {
      60             : //Begin_Html
      61             : /*
      62             : <img src="picts/pipe.gif">
      63             : */
      64             : //End_Html
      65             : 
      66             : 
      67             : //Begin_Html
      68             : /*
      69             : <img src="picts/tree_pipe.gif">
      70             : */
      71             : //End_Html
      72             : 
      73           0 :     AliDebugClass(1,"Create PIPEv0 geometry");
      74             :   
      75             : 
      76           0 :     Int_t *idtmed = fIdtmed->GetArray();
      77           0 :     Float_t ppcon[90], ptube[3], pbox[3];
      78             :     Int_t i=0;
      79             :     
      80             :     
      81           0 :     Int_t   idrotm[2099];  
      82           0 :     AliMatrix(idrotm[2001],90.,240.,  0.,  0., 90.,150.);
      83           0 :     AliMatrix(idrotm[2002],90.,  0.,  0.,  0., 90.,270.);
      84           0 :     AliMatrix(idrotm[2003],90.,120.,  0.,  0., 90., 30.);
      85           0 :     AliMatrix(idrotm[2004],90.,315., 90., 45.,  0.,  0.);
      86           0 :     AliMatrix(idrotm[2005],90.,270., 90.,  0.,  0.,  0.);
      87           0 :     AliMatrix(idrotm[2006],90.,225., 90.,315.,  0.,  0.);
      88           0 :     AliMatrix(idrotm[2007],90.,180., 90.,270.,  0.,  0.);
      89           0 :     AliMatrix(idrotm[2008],90.,135., 90.,225.,  0.,  0.);
      90           0 :     AliMatrix(idrotm[2009],90., 90., 90.,180.,  0.,  0.);
      91           0 :     AliMatrix(idrotm[2010],90., 45., 90.,135.,  0.,  0.);
      92           0 :     idrotm[2011] = 0;
      93           0 :     AliMatrix(idrotm[2012],90.,180., 90., 90.,180.,  0.);
      94           0 :     AliMatrix(idrotm[2013],90.,  0., 90., 90.,180.,  0.);
      95             : //
      96             : //  Bellow
      97             : //
      98             : //  distance between bellows
      99             : //  total size of bellow section
     100             :     const Float_t kdzb  = 14.6;
     101             : //  size of undulated region 
     102             : //  
     103             : //  Absorber side
     104             : //   
     105             : //  distance between bellows
     106             :     const Float_t kdzbbA =  4.6;
     107             : //  total size of bellow section
     108             :     const Float_t kdzbA  = 14.6;
     109             : //  size of undulated region 
     110             :     const Float_t kdzubA =  3.75;
     111             : 
     112             : // half-lengths of various beam pipe sections
     113             : // central Be-Pipe
     114             :     Float_t hlenQbbe1 = 40.;
     115             :     Float_t hlenQbbe2 = 36.5;
     116           0 :     Float_t hlenQbbe  = (hlenQbbe1+hlenQbbe2)/2.;
     117             : //
     118             : //
     119             : //    Float_t hlenQbt1 = 5.5/2.;
     120             : //
     121             : //  Pipe outside central region (non-absorber side)
     122             :     Float_t hlenQbab = 157.5 + 23./2.;
     123             : //
     124             : //  Flange non-absorber side
     125             :     Float_t hlenQb29 = 11.5/2.+1.75 + 5.0;
     126             : //
     127             : //  Bellow element 
     128             :     Float_t hlenQbe0 = kdzbA;
     129             : //
     130             : //  Inox pipe between Be and Bellow (absorber side)
     131             :     Float_t hlenQb24[3] = {11.3/2., 1.8, 3.3};
     132             : //
     133             : //
     134           0 :     Float_t hlenQb28 = (800.-hlenQbbe1-2.*hlenQbab-4.*hlenQb29-2.*hlenQbe0)/2.;
     135             : //
     136             : //  Position of the pump
     137             :     Float_t zPump = hlenQbbe1+2.*hlenQbab+2.*hlenQb29+kdzb;
     138             : //
     139             : //  Inner beam pipe radius
     140             : //  Be
     141             :     const Float_t kRinBe = 2.9;
     142             : //  Steel
     143             :     const Float_t kRinSt = 2.9;
     144             : //  Bellow
     145             :     const Float_t kRinSB = 2.92;
     146             : //
     147             : //  Outer beam pipe radius
     148             : //  Be
     149             :     const Float_t kRoutBe = 2.98;
     150             : //  Steel
     151             :     const Float_t kRoutSt = 2.98;
     152             : //  Bellow
     153             :     const Float_t kRoutSB = 3.00;
     154             : 
     155             : //
     156             :     Float_t dz;
     157             :     
     158             : //
     159             : // The peam pipe up to the Front Absorber
     160             : //
     161             : // Mother Volume QBPM
     162           0 :     ppcon[0]  =   0;
     163           0 :     ppcon[1]  = 360;
     164           0 :     ppcon[2]  =  20;
     165             : //  1 
     166           0 :     ppcon[3]  = -90.;
     167           0 :     ppcon[4]  =   0.;
     168           0 :     ppcon[5]  =   3.1;
     169             : //  2
     170           0 :     ppcon[6]  = -84.;
     171           0 :     ppcon[7]  =   0.;
     172           0 :     ppcon[8]  =   3.1;
     173             : //  3
     174           0 :     ppcon[9]  = -84.;
     175           0 :     ppcon[10] =   0.;
     176           0 :     ppcon[11] =   4.4;
     177             : //  4
     178           0 :     ppcon[12] = -90+2.*hlenQb24[2]+2.8+2.*hlenQb24[1];
     179           0 :     ppcon[13] =   0.;
     180           0 :     ppcon[14] =   4.4;
     181             : //  5
     182           0 :     ppcon[15]  = ppcon[12];
     183           0 :     ppcon[16] =   0.;
     184           0 :     ppcon[17] =   4.1;
     185             : //  6 
     186           0 :     ppcon[18] = ppcon[15] + 2.5 + 2.*kdzubA+0.2; 
     187           0 :     ppcon[19] =   0.;
     188           0 :     ppcon[20] =   4.1;
     189             : //  7 
     190           0 :     ppcon[21] = ppcon[18];
     191           0 :     ppcon[22] =   0.;
     192           0 :     ppcon[23] =   3.2;
     193             : //  8 
     194           0 :     ppcon[24] = ppcon[21] + 2.* kdzbbA-0.4; 
     195           0 :     ppcon[25] =   0.;
     196           0 :     ppcon[26] =   3.2;
     197             : //  9
     198           0 :     ppcon[27] = ppcon[24]; 
     199           0 :     ppcon[28] =   0.;
     200           0 :     ppcon[29] =   4.1;
     201             : //  10
     202           0 :     ppcon[30] = -44.;
     203           0 :     ppcon[31] =   0.;
     204           0 :     ppcon[32] =   4.1;
     205             : //  11
     206           0 :     ppcon[33] = -44.;
     207           0 :     ppcon[34] =    0;
     208           0 :     ppcon[35] =    3.06;
     209             : //  12
     210           0 :     ppcon[36] =  38.;
     211           0 :     ppcon[37] =    0;
     212           0 :     ppcon[38] =    3.06;
     213             : //  13
     214           0 :     ppcon[39] =  38.;
     215           0 :     ppcon[40] =    0;
     216           0 :     ppcon[41] =    4.1;
     217             : //  14
     218           0 :     ppcon[42] = hlenQbbe1+2.*hlenQbab-0.1;
     219           0 :     ppcon[43] =    0.;
     220           0 :     ppcon[44] =    4.1;
     221             : //  15
     222           0 :     ppcon[45] = ppcon[42];
     223           0 :     ppcon[46] =    0.;
     224           0 :     ppcon[47] =    4.1;
     225             : //  16
     226           0 :     ppcon[48] = ppcon[45]+2.*hlenQb29-5.;
     227           0 :     ppcon[49] =    0.;
     228           0 :     ppcon[50] =    4.1;
     229             : //  17
     230           0 :     ppcon[51] = ppcon[48];
     231           0 :     ppcon[52] =    0.;
     232           0 :     ppcon[53] =   56.;
     233             : //  18
     234           0 :     ppcon[54] = ppcon[51]+2.*kdzb+10.;
     235           0 :     ppcon[55] =    0.;
     236           0 :     ppcon[56] =   56.;
     237             : //  19
     238           0 :     ppcon[57] =   ppcon[54];
     239           0 :     ppcon[58] =    0.;
     240           0 :     ppcon[59] =    4.1;
     241             : //  20
     242           0 :     ppcon[60] =  800.;
     243           0 :     ppcon[61] =    0.;
     244           0 :     ppcon[62] =    4.1;
     245             :     
     246           0 :     TVirtualMC::GetMC()->Gsvolu("QBPM", "PCON", idtmed[kAir], ppcon,63);
     247             : 
     248             : 
     249             : //
     250             : // volume definitions of various sections
     251             : //
     252             : 
     253             : //
     254             : // The Vacuum 
     255           0 :     TVirtualMC::GetMC()->Gsvolu("QBVA","TUBE", idtmed[kVac], ptube, 0);
     256           0 :     ptube[0] =   0.0;
     257           0 :     ptube[1] =   kRinSt;
     258           0 :     ptube[2] =   (90.-hlenQbbe2)/2.;
     259           0 :     dz = -90. + ptube[2];
     260           0 :     TVirtualMC::GetMC()->Gsposp ("QBVA", 1, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
     261           0 :     dz = dz + ptube[2];
     262             : 
     263           0 :     ptube[1] =   kRinBe;
     264           0 :     ptube[2] =   hlenQbbe+hlenQbab;
     265           0 :     dz = dz + ptube[2];
     266           0 :     TVirtualMC::GetMC()->Gsposp ("QBVA", 2, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
     267           0 :     dz = dz + ptube[2];
     268             : 
     269           0 :     ptube[1] =   kRinSt;
     270           0 :     ptube[2] =   (800.-hlenQbbe1-2.*hlenQbab)/2.;
     271           0 :     dz = dz + ptube[2];
     272           0 :     TVirtualMC::GetMC()->Gsposp ("QBVA", 3, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
     273             : 
     274             : //
     275             : // Be Pipe in central Alice 
     276           0 :     ptube[0] = kRinBe;
     277           0 :     ptube[1] = kRoutBe;
     278           0 :     ptube[2] = hlenQbbe;
     279             :     
     280           0 :     TVirtualMC::GetMC()->Gsvolu("QBBE","TUBE", idtmed[kBe], ptube, 3);
     281             :     
     282             : //
     283             : //  Support Ring
     284             : //
     285             :     //  Mother
     286           0 :     ptube[0] = kRoutSB;
     287           0 :     ptube[1] = 4.0;
     288           0 :     ptube[2] = 0.6;
     289           0 :     TVirtualMC::GetMC()->Gsvolu("QBSR", "TUBE", idtmed[kAlu], ptube,3);
     290             :     // Inner support
     291           0 :     ptube[0] = kRoutSB;
     292           0 :     ptube[1] = 3.5;
     293           0 :     TVirtualMC::GetMC()->Gsvolu("QBSS", "TUBE", idtmed[kPA], ptube,3);
     294           0 :     TVirtualMC::GetMC()->Gspos("QBSS", 1, "QBSR", 0.0, 0.0,  0.0, 0, "ONLY");
     295             : 
     296           0 :     TVirtualMC::GetMC()->Gspos("QBSR", 1, "QBPM", 0.0, 0.0,  40., 0, "ONLY");
     297           0 :     TVirtualMC::GetMC()->Gspos("QBSR", 2, "QBPM", 0.0, 0.0, 150., 0, "ONLY");
     298           0 :     TVirtualMC::GetMC()->Gspos("QBSR", 3, "QBPM", 0.0, 0.0, 260., 0, "ONLY");
     299           0 :     TVirtualMC::GetMC()->Gspos("QBSR", 4, "QBPM", 0.0, 0.0,- 46., 0, "ONLY");
     300             : //
     301             : // Flange and Fixed Point: non absorber side
     302             : //
     303             : // ---------->
     304             : //
     305             : //  Mother
     306           0 :     ppcon[0]  =   0;
     307           0 :     ppcon[1]  = 360;
     308           0 :     ppcon[2]  =   4;
     309             : //  1: 
     310           0 :     ppcon[3]  = -hlenQb29;
     311           0 :     ppcon[4]  = kRinSt;
     312           0 :     ppcon[5]  = 5.8;
     313             : //  2
     314           0 :     ppcon[6]  = ppcon[3]+3.6;
     315           0 :     ppcon[7]  = kRinSt;
     316           0 :     ppcon[8]  = 5.8;
     317             : //  3
     318           0 :     ppcon[9]  = ppcon[6];
     319           0 :     ppcon[10] = kRinSt;
     320           0 :     ppcon[11] = 3.6;
     321             : //  4 
     322           0 :     ppcon[12] = hlenQb29;
     323           0 :     ppcon[13] = kRinSt;
     324           0 :     ppcon[14] = 3.6;
     325             :     
     326           0 :     TVirtualMC::GetMC()->Gsvolu("QB29", "PCON", idtmed[kAir], ppcon,15);
     327             :     
     328             : 
     329             : //    Flange
     330           0 :     ptube[0] = kRinSt;
     331           0 :     ptube[1] = 5.7;
     332           0 :     ptube[2] = 1.75;
     333           0 :     TVirtualMC::GetMC()->Gsvolu("QF29","TUBE", idtmed[kInox], ptube, 3);
     334           0 :     TVirtualMC::GetMC()->Gspos("QF29", 1, "QB29", 0.0, 0.0, -hlenQb29+1.75, 0, "ONLY");
     335             : //    Pipe
     336           0 :     ptube[0] = kRinSt;
     337           0 :     ptube[1] = 3.06;
     338           0 :     ptube[2] = hlenQb29;
     339           0 :     TVirtualMC::GetMC()->Gsvolu("QS29","TUBE", idtmed[kInox], ptube, 3);
     340           0 :     TVirtualMC::GetMC()->Gspos("QS29", 1, "QB29", 0.0, 0.0, 0., 0, "ONLY");
     341             : //    Fixed point
     342           0 :     ptube[0] = kRinSt;
     343           0 :     ptube[1] = 3.5;
     344           0 :     ptube[2] = 0.3;
     345           0 :     TVirtualMC::GetMC()->Gsvolu("QP29","TUBE", idtmed[kInox], ptube, 3);
     346           0 :     TVirtualMC::GetMC()->Gspos("QP29", 1, "QB29", 0.0, 0.0, -hlenQb29+9.75+3., 0, "ONLY");
     347             :     
     348             : //
     349             : //
     350             : // Inox beam pipe: final section on non-absorber side
     351             : 
     352           0 :     ptube[0] =   kRinSt;
     353           0 :     ptube[1] =   kRoutSt;
     354           0 :     ptube[2] =   hlenQb28;    
     355             : 
     356           0 :     TVirtualMC::GetMC()->Gsvolu("QB28","TUBE", idtmed[kInox], ptube, 3);
     357             : //
     358             : //
     359             : // Air with high transport cuts outside QB28
     360           0 :     ptube[0] =   25.;
     361           0 :     ptube[1] =   100.;
     362           0 :     ptube[2] =   hlenQb28;    
     363             : 
     364           0 :     TVirtualMC::GetMC()->Gsvolu("QA28","TUBE", idtmed[kAirHigh], ptube, 3);
     365           0 :     gGeoManager->SetVolumeAttribute("QA28", "SEEN", 0);
     366             : //  Al-Be (40-60 wgt%, rho=2.7 g/cm**3) beam pipe
     367             : //
     368             : //  This section is under study (A.M. 1/2/2002)
     369             : //
     370             : 
     371           0 :     ptube[0] = kRinBe;
     372           0 :     if (fPipeMaterial == kAlu) {
     373           0 :         ptube[1] = 3.06;
     374           0 :     } else if (fPipeMaterial == kBe) {
     375           0 :         ptube[1] = kRoutBe;
     376           0 :     } else if (fPipeMaterial == kInox){
     377           0 :         ptube[1] = kRoutSt;
     378           0 :     }
     379           0 :     ptube[2] =   hlenQbab;    
     380             : 
     381           0 :     TVirtualMC::GetMC()->Gsvolu("QBAB","TUBE", idtmed[fPipeMaterial], ptube, 3);
     382             : 
     383             : // 2.5 mm thick SS tube for hanging pump
     384             : /*
     385             :     ptube[0] = Rin;
     386             :     ptube[1] = 3.15;
     387             :     ptube[2] = hlenQb26;
     388             :     
     389             :     TVirtualMC::GetMC()->Gsvolu("QB26","TUBE", idtmed[kInox], ptube, 3);
     390             : */
     391             : //
     392             : // Bellows
     393             : //
     394             : //
     395             : // Mother Volume
     396           0 :     Float_t pconQBE0[33];
     397           0 :     pconQBE0[ 0]= 0;
     398           0 :     pconQBE0[ 1]= 360;
     399           0 :     pconQBE0[ 2]=  10;
     400             : //  1
     401           0 :     pconQBE0[ 3] = -kdzbA;
     402           0 :     pconQBE0[ 4] = kRinSB;
     403           0 :     pconQBE0[ 5] = kRoutSB;
     404             : //
     405           0 :     pconQBE0[ 6] = -kdzbA+2.5;
     406           0 :     pconQBE0[ 7] = kRinSB;
     407           0 :     pconQBE0[ 8] = kRoutSB;
     408             : //  2
     409           0 :     pconQBE0[ 9] = -kdzbA+2.5;
     410           0 :     pconQBE0[10] = kRinSB;
     411           0 :     pconQBE0[11] = 3.60;
     412             : //  3
     413           0 :     pconQBE0[12] = -kdzbA+2.5+2.*kdzubA;
     414           0 :     pconQBE0[13] = kRinSB;
     415           0 :     pconQBE0[14] = 3.60;
     416             : //  4
     417           0 :     pconQBE0[15] = -kdzbA+2.5+2.*kdzubA;
     418           0 :     pconQBE0[16] = kRinSB;
     419           0 :     pconQBE0[17] = kRoutSB;
     420             : //  5    
     421           0 :     pconQBE0[18] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
     422           0 :     pconQBE0[19] = kRinSB;
     423           0 :     pconQBE0[20] = kRoutSB;
     424             : //  6    
     425           0 :     pconQBE0[21] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
     426           0 :     pconQBE0[22] = kRinSB;
     427           0 :     pconQBE0[23] = 3.60;
     428             : //  7
     429           0 :     pconQBE0[24] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
     430           0 :     pconQBE0[25] = kRinSB;
     431           0 :     pconQBE0[26] = 3.60;
     432             : //  8
     433           0 :     pconQBE0[27] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
     434           0 :     pconQBE0[28] = kRinSB;
     435           0 :     pconQBE0[29] = kRoutSB;
     436             : // 9
     437           0 :     pconQBE0[30] = -kdzbA+5.0+4.*kdzubA+2.*kdzbbA;
     438           0 :     pconQBE0[31] = kRinSB;
     439           0 :     pconQBE0[32] = kRoutSB;
     440             : 
     441           0 :     TVirtualMC::GetMC()->Gsvolu("QBE0", "PCON", idtmed[kAir], pconQBE0, 33);
     442             : //
     443             : //  Undulated piece mother
     444           0 :     ptube[0] =  kRinSB;
     445           0 :     ptube[1] =  3.60;
     446           0 :     ptube[2] =  kdzubA;
     447           0 :     TVirtualMC::GetMC()->Gsvolu("QBEM","TUBE", idtmed[kAir], ptube, 3);
     448             :     dz = -kdzbA+kdzubA+2.5;
     449           0 :     TVirtualMC::GetMC()->Gspos("QBEM", 2 ,"QBE0", 0.0, 0.0,   dz, 0 , "ONLY");
     450           0 :     TVirtualMC::GetMC()->Gspos("QBEM", 1 ,"QBE0", 0.0, 0.0,  -dz, idrotm[2012], "ONLY");
     451             : //  
     452           0 :     Float_t pund[30];
     453             :     Float_t uw = 0.02;
     454             :     Float_t ur = 2.*kdzubA-36.*uw;
     455           0 :     Float_t uz = ur/37.;
     456           0 :     Float_t ut = uz+uw;
     457             :     
     458           0 :     pund[ 0] = 0;
     459           0 :     pund[ 1] = 360;
     460           0 :     pund[ 2] =  8;
     461             : 
     462           0 :     pund[ 3] = -ut;
     463           0 :     pund[ 4] = kRinSB;
     464           0 :     pund[ 5] = kRinSB+uw;
     465             :     
     466           0 :     pund[ 6] = -ut+uz;
     467           0 :     pund[ 7] = pund[4];
     468           0 :     pund[ 8] = pund[5];
     469             :     
     470           0 :     pund[ 9] = pund[6];
     471           0 :     pund[10] = pund[4];
     472           0 :     pund[11] = 3.6;
     473             :     
     474           0 :     pund[12] = pund[9]+uw;
     475           0 :     pund[13] = pund[10];
     476           0 :     pund[14] = pund[11];
     477             :     
     478           0 :     pund[15] = pund[12];
     479           0 :     pund[16] = 3.6-uw;
     480           0 :     pund[17] = pund[14];
     481             :     
     482           0 :     pund[18] = pund[12]+uz;
     483           0 :     pund[19] = pund[16];
     484           0 :     pund[20] = pund[17];
     485             :     
     486           0 :     pund[21] = pund[18];
     487           0 :     pund[22] = kRinSB;
     488           0 :     pund[23] = pund[20];
     489             :     
     490           0 :     pund[24] = pund[21]+uw;
     491           0 :     pund[25] = pund[22];
     492           0 :     pund[26] = pund[23];
     493             : 
     494           0 :     TVirtualMC::GetMC()->Gsvolu("QBEU", "PCON", idtmed[kInox], pund, 27);
     495             : 
     496           0 :     for (i = 0; i < 18; i++)
     497             :     {
     498           0 :         dz = -kdzubA+(1+2*i)*ut;
     499           0 :         TVirtualMC::GetMC()->Gspos("QBEU", i+1 ,"QBEM", 0.0, 0.0,   dz, 0 , "ONLY");
     500             :     }
     501           0 :     ptube[0] =  kRinSB;
     502           0 :     ptube[1] =  kRinSB+uw;
     503           0 :     ptube[2] =  uz;
     504           0 :     TVirtualMC::GetMC()->Gsvolu("QBEW","TUBE", idtmed[kInox], ptube, 3);
     505           0 :     TVirtualMC::GetMC()->Gspos("QBEW", 1 ,"QBEM", 0.0, 0.0,   kdzubA-uz, 0 , "ONLY");
     506             : 
     507             : //
     508             : //  BeamPipe
     509           0 :     TVirtualMC::GetMC()->Gsvolu("QBEP","TUBE", idtmed[kInox], ptube, 0);
     510           0 :     ptube[0] =  kRinSB;
     511           0 :     ptube[1] =  kRoutSB;
     512           0 :     ptube[2] =  1.25;
     513           0 :     TVirtualMC::GetMC()->Gsposp("QBEP", 1 ,"QBE0", 0.0, 0.0, -kdzbA+1.25, 0 , "ONLY", ptube, 3);
     514           0 :     TVirtualMC::GetMC()->Gsposp("QBEP", 2 ,"QBE0", 0.0, 0.0,  kdzbA-1.25, 0 , "ONLY", ptube, 3);    
     515           0 :     ptube[2] = kdzbbA;
     516           0 :     TVirtualMC::GetMC()->Gsposp("QBEP", 3 ,"QBE0", 0.0, 0.0,  0., 0 , "ONLY", ptube, 3);    
     517             : //  
     518             : //
     519             : //  ----> End Bellow
     520             : //
     521             : // **** Placement of various sections on non-absorber side ****
     522             : //
     523             :     //
     524             :     // first the beryllium section
     525           0 :     Float_t zpos = -(hlenQbbe2-hlenQbbe1)/2;
     526           0 :     TVirtualMC::GetMC()->Gspos("QBBE", 1, "QBPM", 0., 0., zpos, 0, "ONLY");
     527             : 
     528             :     // next meta-metal transition QBT1 on on-absorber side
     529             : //    zpos = zpos + hlenQbbe + hlenQbt1;
     530             : //    TVirtualMC::GetMC()->Gspos("QBT1", 1, "QBPM", 0., 0.,  zpos, 0, "ONLY");
     531             :     
     532             :     // Aluminium OR Al-be alloy section
     533             :     zpos = hlenQbbe1+hlenQbab;
     534           0 :     TVirtualMC::GetMC()->Gspos("QBAB", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
     535             :     //
     536             :     // inox flange at the start of bellow
     537             :     zpos = zpos + hlenQbab + hlenQb29;
     538           0 :     TVirtualMC::GetMC()->Gspos("QB29", 1, "QBPM", 0.0, 0.0, zpos, idrotm[2012], "ONLY");
     539             :     //
     540             :     // bellow section
     541             :     zpos = zpos + hlenQb29 + hlenQbe0;
     542           0 :     TVirtualMC::GetMC()->Gspos("QBE0", 2 ,"QBPM", 0.0, 0.0, zpos, 0, "ONLY");
     543             :     // 
     544             :     // inox flange at the end of bellow and start of thick inox for pump
     545             :     zpos = zpos + hlenQbe0 + hlenQb29;
     546           0 :     TVirtualMC::GetMC()->Gspos("QB29", 2, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
     547             :     //   
     548             :     //last inox section till 800 cm
     549           0 :     zpos = zpos + hlenQb29 + hlenQb28;
     550           0 :     TVirtualMC::GetMC()->Gspos("QB28", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY"); 
     551           0 :     TVirtualMC::GetMC()->Gspos("QA28", 1, "ALIC", 0.0, 0.0, zpos, 0, "ONLY"); 
     552             :     
     553             : //******** end of placement on non-absorber side *********
     554             :     //
     555             :     // **** Absorber side *****   
     556             :     //
     557             :     //
     558             : //
     559             : // Beam pipes between elements
     560             : //    
     561           0 :     TVirtualMC::GetMC()->Gsvolu("QB24","TUBE", idtmed[kInox], ptube, 0);
     562           0 :     ptube[0] = kRinSt;
     563           0 :     ptube[1] = kRoutSt;
     564           0 :     ptube[2] = hlenQb24[0];
     565           0 :     Float_t bpbe[33];
     566           0 :     bpbe[ 0] =   0.;
     567           0 :     bpbe[ 1] = 360.;
     568           0 :     bpbe[ 2] =  10.;
     569             :     // 1
     570           0 :     bpbe[ 3] = -hlenQb24[0];
     571           0 :     bpbe[ 4] = kRinSB;
     572           0 :     bpbe[ 5] = kRoutSB;
     573             :     // 2
     574           0 :     bpbe[ 6] = hlenQb24[0] - 5.8;
     575           0 :     bpbe[ 7] = kRinSB;
     576           0 :     bpbe[ 8] = kRoutSB;
     577             :     // 3
     578           0 :     bpbe[ 9] = hlenQb24[0] - 5.8;
     579           0 :     bpbe[10] = kRinSt;
     580           0 :     bpbe[11] = 3.05;
     581             :     // 4
     582           0 :     bpbe[12] = hlenQb24[0] - 4.5;
     583           0 :     bpbe[13] = kRinSt;
     584           0 :     bpbe[14] = 3.05;
     585             :     // 5
     586           0 :     bpbe[15] = hlenQb24[0] - 4.5;
     587           0 :     bpbe[16] = kRinSt;
     588           0 :     bpbe[17] = kRoutSt ;
     589             :     // 6
     590           0 :     bpbe[18] = hlenQb24[0] - 3.5;
     591           0 :     bpbe[19] = kRinSt;
     592           0 :     bpbe[20] = kRoutSt ;
     593             :     // 7
     594           0 :     bpbe[21] = hlenQb24[0] - 3.5;
     595           0 :     bpbe[22] = kRinSt;
     596           0 :     bpbe[23] = 3.05;
     597             :     // 8
     598           0 :     bpbe[24] = hlenQb24[0] - 3.0;
     599           0 :     bpbe[25] = kRinSt;
     600           0 :     bpbe[26] = 3.05;
     601             :     // 9
     602           0 :     bpbe[27] = hlenQb24[0] - 3.0;
     603           0 :     bpbe[28] = kRinSt;
     604           0 :     bpbe[29] = kRoutSt;
     605             :     // 10
     606           0 :     bpbe[30] = hlenQb24[0];
     607           0 :     bpbe[31] = kRinSt;
     608           0 :     bpbe[32] = kRoutSt;
     609             : 
     610           0 :     TVirtualMC::GetMC()->Gsvolu("QA24","PCON", idtmed[kInox], bpbe, 33);
     611             : 
     612             :     dz = hlenQbbe2 + hlenQb24[0];
     613             :     
     614           0 :     TVirtualMC::GetMC()->Gspos("QA24", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
     615             : //
     616             : // Bellow on absorber side
     617             : 
     618             :     dz = dz+hlenQb24[0] + kdzbA;
     619           0 :     TVirtualMC::GetMC()->Gspos("QBE0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
     620             : //
     621           0 :     ptube[2] = hlenQb24[1];
     622             :     dz = dz + kdzb + ptube[2];
     623           0 :     TVirtualMC::GetMC()->Gsposp("QB24", 2 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
     624           0 :     dz = dz + ptube[2];
     625             :     
     626             : //
     627             : // Flange
     628             : // 
     629             : //  Mother Volume
     630           0 :     ptube[0] = kRinSB;
     631           0 :     ptube[1] = 4.300;
     632           0 :     ptube[2] = 1.4;
     633             :     
     634           0 :     TVirtualMC::GetMC()->Gsvolu("QFA0","TUBE", idtmed[kInox], ptube, 3);
     635           0 :     dz = dz + ptube[2];
     636           0 :     TVirtualMC::GetMC()->Gspos("QFA0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
     637           0 :     dz = dz + ptube[2];
     638             : //
     639             : //
     640           0 :     ptube[0] = kRinSB;
     641           0 :     ptube[1] = kRoutSB;
     642           0 :     ptube[2] = hlenQb24[2];
     643           0 :     dz = dz + ptube[2];
     644           0 :     TVirtualMC::GetMC()->Gsposp("QB24", 3 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
     645             : 
     646             : // --- Place the PIPE ghost volume (QBPM) in its mother volume (ALIC)
     647             : //    by rotating it to 180 deg. and make it invisible
     648             : // 
     649           0 :     TVirtualMC::GetMC()->Gspos("QBPM",1,"ALIC", 0, 0, 0, 0, "ONLY");
     650           0 :     TVirtualMC::GetMC()->Gsbool("QBPM", "L3DX");
     651           0 :     TVirtualMC::GetMC()->Gsbool("QBPM", "L3O3");
     652           0 :     TVirtualMC::GetMC()->Gsbool("QBPM", "L3O4");
     653             : 
     654             : 
     655             : //
     656             : // ******** Ion Pump volume description starts here ******
     657             : // 
     658             :     //
     659             :     // Getters ->
     660           0 :     pbox[0] =  6.50;
     661           0 :     pbox[1] =  6.75;
     662           0 :     pbox[2] = 15.60;
     663           0 :     TVirtualMC::GetMC()->Gsvolu("QI32","BOX", idtmed[kInox], pbox, 3);
     664             :     
     665           0 :     pbox[0] =  5.90;
     666           0 :     pbox[1] =  6.15;
     667           0 :     pbox[2] = 15.00;
     668           0 :     TVirtualMC::GetMC()->Gsvolu("QI42","BOX", idtmed[kGetter], pbox, 3);
     669           0 :     TVirtualMC::GetMC()->Gspos("QI42", 1, "QI32", 0.0, 0.0, 0.0, 0, "ONLY");
     670             : // <-
     671             : 
     672           0 :     ptube[0] =  0.0;
     673           0 :     ptube[1] = 19.0;
     674           0 :     ptube[2] =  2.5;
     675           0 :     TVirtualMC::GetMC()->Gsvolu("QI33","TUBE", idtmed[kInox], ptube, 3);
     676             : 
     677             : 
     678           0 :     ptube[0] =  0.0;
     679           0 :     ptube[1] = 15.0;
     680           0 :     ptube[2] =  2.5;
     681           0 :     TVirtualMC::GetMC()->Gsvolu("QI43","TUBE", idtmed[kAir], ptube, 3);
     682           0 :     TVirtualMC::GetMC()->Gspos("QI43", 1, "QI33", 0.0, 0.0, 0.0, 0, "ONLY");
     683             : // 
     684             : // Connecting tube ->
     685           0 :     ptube[0] =  0.0;
     686           0 :     ptube[1] =  4.5;
     687           0 :     ptube[2] = 14.6;
     688           0 :     TVirtualMC::GetMC()->Gsvolu("QI34","TUBE", idtmed[kInox], ptube, 3);
     689             :     
     690           0 :     ptube[0] =  0.0;
     691           0 :     ptube[1] =  3.9;
     692           0 :     ptube[2] = 14.6;
     693           0 :     TVirtualMC::GetMC()->Gsvolu("QI44","TUBE", idtmed[kAir], ptube, 3);
     694           0 :     TVirtualMC::GetMC()->Gspos("QI44", 1, "QI34", 0.0, 0.0, 0.0, 0, "ONLY");
     695             : // <-
     696             : 
     697             :   //
     698             :   // Flange ->
     699           0 :     ptube[0] =  4.6;
     700           0 :     ptube[1] =  7.30;
     701           0 :     ptube[2] =  2.15;
     702           0 :     TVirtualMC::GetMC()->Gsvolu("QI35","TUBE", idtmed[kInox], ptube, 3);
     703             : // <-
     704           0 :     TVirtualMC::GetMC()->Gspos("QI32", 1, "QBPM", 0.0, -44.25, zPump, 0, "ONLY");
     705           0 :     TVirtualMC::GetMC()->Gspos("QI33", 1, "QBPM", 0.0, -35.00, zPump,idrotm[2002], "ONLY");
     706           0 :     TVirtualMC::GetMC()->Gspos("QI34", 1, "QBPM", 0.0, -17.90, zPump,idrotm[2002], "ONLY");
     707           0 :     TVirtualMC::GetMC()->Gspos("QI35", 1, "QBPM", 0.0, -24.35, zPump,idrotm[2002], "ONLY");
     708             : 
     709           0 :     gGeoManager->SetVolumeAttribute("QBPM", "SEEN", 1);
     710           0 :     gGeoManager->SetVolumeAttribute("QBEM", "SEEN", 1);
     711           0 : }
     712             : 
     713             : 
     714             : 
     715             : //___________________________________________
     716             : void AliPIPEv0::CreateMaterials()
     717             : {
     718             :   //
     719             :   // Define materials for beam pipe
     720             :   //
     721             : 
     722           0 :   AliDebugClass(1,"Create PIPEv0 materials");
     723           0 :   Int_t   isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
     724           0 :   Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
     725             :   // Steel (Inox)  
     726           0 :   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
     727           0 :   Float_t zsteel[4] = { 26.,24.,28.,14. };
     728           0 :   Float_t wsteel[4] = { .715,.18,.1,.005 };
     729             :   // AlBe - alloy 
     730           0 :   Float_t aAlBe[2] = { 26.98, 9.01};
     731           0 :   Float_t zAlBe[2] = { 13.00, 4.00};
     732           0 :   Float_t wAlBe[2] = { 0.4, 0.6};
     733             :   //
     734             :   // Polyamid
     735           0 :   Float_t aPA[4] = {16., 14., 12.,  1.};
     736           0 :   Float_t zPA[4] = { 8.,  7.,  6.,  1.};
     737           0 :   Float_t wPA[4] = { 1.,  1.,  6., 11.};
     738             :   //
     739             :   // Air 
     740             :   //
     741           0 :   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
     742           0 :   Float_t zAir[4]={6.,7.,8.,18.};
     743           0 :   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
     744             :   Float_t dAir = 1.20479E-3;
     745             :   Float_t dAir1 = 1.20479E-10;
     746             :   //
     747             :   // Kapton
     748             :   //
     749           0 :   Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
     750           0 :   Float_t zKapton[4]={1.,6.,7.,8.};
     751           0 :   Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
     752             :   Float_t dKapton = 1.42;
     753             :   //
     754             :   //     Berillium 
     755           0 :   AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
     756             :   //
     757             :   //     Carbon 
     758           0 :   AliMaterial(6,  "CARBON$   ", 12.01, 6., 2.265, 18.8, 49.9);
     759             :   //
     760             :   //     Aluminum 
     761           0 :   AliMaterial(9,  "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
     762             :   //
     763             :   //     Air 
     764           0 :   AliMixture(15, "AIR$",      aAir, zAir, dAir, 4, wAir);
     765           0 :   AliMixture(35, "AIR_HIGH$", aAir, zAir, dAir, 4, wAir);
     766             :   //
     767             :   //     Vacuum 
     768           0 :   AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
     769             :   //
     770             :   //     stainless Steel 
     771           0 :   AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
     772             :   //
     773             :   //     reduced density steel to approximate pump getter material
     774           0 :   AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
     775             :   //     Al-Be alloy
     776             :   //     
     777           0 :   AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
     778             :   //     Polyamid
     779             :   //   
     780           0 :   AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
     781             :   //
     782             :   //     Kapton
     783           0 :   AliMixture(23, "KAPTON", aKapton, zKapton, dKapton, 4, wKapton);
     784             :   //
     785             :   // **************** 
     786             :   //     Defines tracking media parameters. 
     787             :   //
     788             :   Float_t epsil  = .001;    // Tracking precision, 
     789             :   Float_t stemax = -0.01;   // Maximum displacement for multiple scat 
     790             :   Float_t tmaxfd = -20.;    // Maximum angle due to field deflection 
     791             :   Float_t deemax = -.3;     // Maximum fractional energy loss, DLS 
     792             :   Float_t stmin  = -.8;
     793             :   // *************** 
     794             :   //
     795             :   //    Beryllium 
     796             :   
     797           0 :   AliMedium(5, "BE",       5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     798             : 
     799             :   //    Carbon 
     800           0 :   AliMedium(6, "C",        6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     801             :   //
     802             :   //    Aluminum 
     803           0 :   AliMedium(9, "ALU",      9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     804             :   //
     805             :   //    Air 
     806           0 :   AliMedium(15, "AIR",     15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     807           0 :   AliMedium(35, "AIR_HIFG",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     808             :   //
     809             :   //    Vacuum 
     810           0 :   AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     811             :   //
     812             :   //    Steel 
     813           0 :   AliMedium(19, "INOX",   19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     814             :   //
     815             :   //    Getter 
     816           0 :   AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     817             :   //
     818             :   //   AlBe - Aloy 
     819           0 :   AliMedium(21, "AlBe"  , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     820             :   //
     821             :   //   Polyamid
     822           0 :   AliMedium(22, "PA"  ,   22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     823             :   //
     824             :   //   KAPTON
     825           0 :   AliMedium(23, "KAPTON", 23, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
     826             : 
     827           0 : }
     828             : 
     829             : 
     830             : 
     831             : 
     832             : 
     833             : 
     834             : 
     835             : 
     836             : 
     837             : 

Generated by: LCOV version 1.11