]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSv11GeometrySPD.cxx
DIPO added
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySPD.cxx
CommitLineData
db486a6e 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// This class Defines the Geometry for the ITS services and support cones
17// outside of the ceneteral volume (except for the Ceneteral support
18// cylinders. Other classes define the rest of the ITS. Specificaly the ITS
19// The SSD support cone,SSD Support centeral cylinder, SDD support cone,
20// The SDD cupport centeral cylinder, the SPD Thermal Sheald, The supports
21// and cable trays on both the RB26 (muon dump) and RB24 sides, and all of
22// the cabling from the ladders/stave ends out past the TPC.
23
db486a6e 24// General Root includes
25#include <Riostream.h>
26#include <TMath.h>
27#include <TLatex.h>
28#include <TCanvas.h>
29#include <TPolyLine.h>
30// Root Geometry includes
db486a6e 31#include <TGeoVolume.h>
32#include <TGeoPcon.h>
33#include <TGeoCone.h>
34#include <TGeoTube.h> // contaings TGeoTubeSeg
35#include <TGeoArb8.h>
36#include <TGeoEltu.h>
37#include <TGeoXtru.h>
38#include <TGeoCompositeShape.h>
39#include <TGeoMatrix.h>
a53658c6 40#include <TGeoMaterial.h>
41#include <TGeoMedium.h>
42#include "AliMagF.h"
43#include "AliRun.h"
bf86817c 44//#include <TGeoRotation.h>
45//#include <TGeoCombiTrans.h>
46//#include <TGeoTranslation.h>
db486a6e 47#include "AliITSv11GeometrySPD.h"
48
49ClassImp(AliITSv11GeometrySPD)
50
51#define SQ(A) (A)*(A)
52
53//______________________________________________________________________
a53658c6 54Int_t AliITSv11GeometrySPD::CreateSPDCenteralMaterials(Int_t &medOffset,
55 Int_t &matOffset){
56 // Define the specific materials used for the ITS SPD centeral
57 // detectors. Note, These are the same old names. By the ALICE
58 // naming convension, these should start out at ITS SPD ....
59 // This data has been taken from AliITSvPPRasymmFMD::CreateMaterials().
60 // Intputs:
61 // Int_t &medOffset The starting number of the list of media
62 // Int_t &matOffset The starting number of the list of Materials
63 // Outputs:
64 // Int_t &medOffset The ending number of the list of media
65 // Int_t &matOffset The ending number of the list of Materials
66 // Return:
67 // the last material number used +1 (the next avaiable material number).
68 //Begin_Html
69 /*
70 <img src="http://alice.pd.infn.it/latestdr/all-sections-module.ps"
71 title="SPD Sector drawing with all cross sections defined">
72 <p>The SPD Sector definition.
73 <img src="http://alice.pd.infn.it/latestdr/assembly-10-modules.ps"
74 titile="SPD All Sectors end view with thermal sheald">
75 <p>The SPD all sector end view with thermal sheald.
76 <img src="http://alice.pd.infn.it/latestdr/assembly.ps"
77 title="SPD side view cross section">
78 <p>SPD side view cross section with condes and thermal shealds.
79 <img src="http://alice.pd.infn.it/latestdr/SECTION-A_A.jpg"
80 title="Cross setion A-A"><p>Cross section A-A
81 <img src="http://alice.pd.infn.it/latestdr/SECTION-B_B.jpg"
82 title="Cross section B-B"><p>Cross section B-B
83 <img src="http://alice.pd.infn.it/latestdr/SECTION-C_C.jpg"
84 title-"Cross section C-C"><p>Cross section C-C
85 <img src="http://alice.pd.infn.it/latestdr/SECTION-D_D.jpg"
86 title="Cross section D-D"><p>Cross section D-D
87 <img src="http://alice.pd.infn.it/latestdr/SECTION-F_F.jpg"
88 title="Cross section F-F"><p>Cross section F-F
89 <img src="http://alice.pd.infn.it/latestdr/SECTION-G_G.jpg"
90 title="Cross section G-G"><p>Cross section G-G
91 */
92 //End_Html
93 const Double_t ktmaxfd = 0.1*fgkDegree; // Degree
94 const Double_t kstemax = 1.0*fgkcm; // cm
95 const Double_t kdeemax = 0.1; // Fraction of particle's energy 0<deemax<=1
96 const Double_t kepsil = 1.0E-4; //
97 const Double_t kstmin = 0.0*fgkcm; // cm "Default value used"
98 const Double_t ktmaxfdAir = 0.1*fgkDegree; // Degree
99 const Double_t kstemaxAir = 1.0000E+00*fgkcm; // cm
100 const Double_t kdeemaxAir = 0.1; // Fraction of particle's energy 0<deemax<=1
101 const Double_t kepsilAir = 1.0E-4;//
102 const Double_t kstminAir = 0.0*fgkcm; // cm "Default value used"
103 const Double_t ktmaxfdSi = 0.1*fgkDegree; // .10000E+01; // Degree
104 const Double_t kstemaxSi = 0.0075*fgkcm; // .10000E+01; // cm
105 const Double_t kdeemaxSi = 0.1; // Fraction of particle's energy 0<deemax<=1
106 const Double_t kepsilSi = 1.0E-4;//
107 const Double_t kstminSi = 0.0*fgkcm; // cm "Default value used"
108 //
109 Int_t matindex=matOffset;
110 Int_t medindex=medOffset;
111 Double_t params[8]={8*0.0};
112 TGeoMaterial *mat;
113 TGeoMixture *mix;
114 TGeoMedium *med;
115 //
116 Int_t ifield = (gAlice->Field()->Integ());
117 Double_t fieldm = (gAlice->Field()->Max());
118 params[1] = (Double_t) ifield;
119 params[2] = fieldm;
120 params[3] = ktmaxfdSi;
121 params[4] = kstemaxSi;
122 params[5] = kdeemaxSi;
123 params[6] = kepsilSi;
124 params[7] = kstminSi;
125
126 mat = new TGeoMaterial("SI",28.086,14.0,2.33*fgkgcm3,
127 TGeoMaterial::kMatStateSolid,25.0*fgkCelsius,
128 0.0*fgkPascal);
129 mat->SetIndex(matindex);
130 med = new TGeoMedium("SI",medindex++,mat,params);
131 //med = new TGeoMedium("SI",medindex++,matindex++,0,ifield,
132 // fieldm,ktmaxfdSi,kstemaxSi,kdeemaxSi,kepsilSi,kstminSi);
133 //
134 mat = new TGeoMaterial("SPD SI CHIP",28.086,14.0,2.33*fgkgcm3,
135 TGeoMaterial::kMatStateSolid,25.0*fgkCelsius,
136 0.0*fgkPascal);
137 mat->SetIndex(matindex);
138 med = new TGeoMedium("SPD SI CHIP",medindex++,mat,params);
139 //med = new TGeoMedium("SPD SI CHIP",medindex++,matindex++,0,ifield,
140 // fieldm,ktmaxfdSi,kstemaxSi,kdeemaxSi,kepsilSi,kstminSi);
141 //
142 mat = new TGeoMaterial("SPD SI BUS",28.086,14.0,2.33*fgkgcm3,
143 TGeoMaterial::kMatStateSolid,25.0*fgkCelsius,
144 0.0*fgkPascal);
145 mat->SetIndex(matindex);
146 med = new TGeoMedium("SPD SI BUS",medindex++,mat,params);
147 //med = new TGeoMedium("SPD SI BUS",medindex++,matindex++,0,ifield,
148 // fieldm,ktmaxfdSi,kstemaxSi,kdeemaxSi,kepsilSi,kstminSi);
149 //
150 mix = new TGeoMixture("C (M55J)",4,1.9866*fgkgcm3);// Carbon fiber by fractional weight "C (M55J)"
151 mix->SetIndex(matindex);
152 mix->DefineElement(0,12.0107,6.0,0.908508078); // Carbon by fractional weight
153 mix->DefineElement(1,14.0067,7.0,0.010387573); // Nitrogen by fractional weight
154 mix->DefineElement(2,15.9994,8.0,0.055957585); // Oxigen by fractional weight
155 mix->DefineElement(3,1.00794,1.0,0.025146765); // Hydrogen by fractional weight
156 mix->SetPressure(0.0*fgkPascal);
157 mix->SetTemperature(25.0*fgkCelsius);
158 mix->SetState(TGeoMaterial::kMatStateSolid);
159 params[3] = ktmaxfd;
160 params[4] = kstemax;
161 params[5] = kdeemax;
162 params[6] = kepsil;
163 params[7] = kstmin;
164 med = new TGeoMedium("ITSspdCarbonFiber",medindex++,mix,params);
165 //med = new TGeoMedium("ITSspdCarbonFiber",medindex++,matindex++,0,ifield,
166 // fieldm,ktmaxfd,kstemax,kdeemax,kepsil,kstmin);
167 //
168 mix = new TGeoMixture("Air",4,1.20479E-3*fgkgcm3);// Carbon fiber by fractional weight
169 mix->SetIndex(matindex);
170 mix->DefineElement(0,12.0107,6.0,0.000124); // Carbon by fractional weight
171 mix->DefineElement(1,14.0067,7.0,0.755267); // Nitrogen by fractional weight
172 mix->DefineElement(2,15.9994,8.0,0.231781); // Oxigen by fractional weight
173 mix->DefineElement(3,39.948,18.0,0.012827); // Argon by fractional weight
174 mix->SetPressure(101325.0*fgkPascal); // 1 atmosphere
175 mix->SetTemperature(25.0*fgkCelsius);
176 mix->SetState(TGeoMaterial::kMatStateGas);
177 params[3] = ktmaxfdAir;
178 params[4] = kstemaxAir;
179 params[5] = kdeemaxAir;
180 params[6] = kepsilAir;
181 params[7] = kstminAir;
182 med = new TGeoMedium("ITSspdAir",medindex++,mix,params);
183 //med = new TGeoMedium("ITSspdAir",medindex++,matindex++,0,ifield,
184 // fieldm,ktmaxfdAir,kstemaxAir,kdeemaxAir,kepsilAir,kstminAir);
185 //
186 mix = new TGeoMixture("INOX",9,8.03*fgkgcm3);// Carbon fiber by fractional weight
187 mix->SetIndex(matindex);
188 mix->DefineElement(0,12.0107, 6.0,0.0003); // Carbon by fractional weight
189 mix->DefineElement(1,54.9380,25.0,0.02); // Iron by fractional weight
190 mix->DefineElement(2,28.0855,14.0,0.01); // Sodium by fractional weight
191 mix->DefineElement(3,30.9738,15.0,0.00045); // by fractional weight
192 mix->DefineElement(4,32.066 ,16.0,0.0003); // by fractional weight
193 mix->DefineElement(5,58.6928,28.0,0.12); // Nickel by fractional weight
194 mix->DefineElement(6,55.9961,24.0,0.17); // by fractional weight
195 mix->DefineElement(7,95.84 ,42.0,0.025); // by fractional weight
196 mix->DefineElement(8,55.845 ,26.0,0.654); // by fractional weight
197 mix->SetPressure(0.0*fgkPascal); //
198 mix->SetTemperature(25.0*fgkCelsius);
199 mix->SetState(TGeoMaterial::kMatStateSolid);
200 params[3] = ktmaxfdAir;
201 params[4] = kstemaxAir;
202 params[5] = kdeemaxAir;
203 params[6] = kepsilAir;
204 params[7] = kstminAir;
205 med = new TGeoMedium("ITSspdStainlessSteel",medindex++,mix,params);
206 //med = new TGeoMedium("ITSspdStainlessSteel",medindex++,matindex++,0,ifield,
207 // fieldm,ktmaxfdAir,kstemaxAir,kdeemaxAir,kepsilAir,kstminAir);
208 //
209 mix = new TGeoMixture("Freon",2,1.63*fgkgcm3);// Carbon fiber by fractional weight
210 mix->SetIndex(matindex);
211 mix->DefineElement(0,12.0107,6.0,4); // Carbon by fractional weight
212 mix->DefineElement(1,18.9984032,9.0,10); // Florine by fractional weight
213 mix->SetPressure(101325.0*fgkPascal); // 1 atmosphere
214 mix->SetTemperature(25.0*fgkCelsius);
215 mix->SetState(TGeoMaterial::kMatStateLiquid);
216 params[3] = ktmaxfdAir;
217 params[4] = kstemaxAir;
218 params[5] = kdeemaxAir;
219 params[6] = kepsilAir;
220 params[7] = kstminAir;
221 med = new TGeoMedium("ITSspdCoolingFluid",medindex++,mix,params);
222 //med = new TGeoMedium("ITSspdCoolingFluid",medindex++,matindex++,0,ifield,
223 // fieldm,ktmaxfdAir,kstemaxAir,kdeemaxAir,kepsilAir,kstminAir);
224 //
225 medOffset = medindex;
226 matOffset = matindex;
227 return matOffset;
228}
229//______________________________________________________________________
230void AliITSv11GeometrySPD::InitSPDCenteral(Int_t offset,TVirtualMC *vmc){
231 // Do any SPD Centeral detector related initilizations, setting
232 // transport cuts for example.
233 // Some GEANT3 Physics switches
234 // "MULTS"
235 // Multiple scattering. The variable IMULS controls this process. For
236 // more information see [PHYS320 or 325 or 328].
237 // 0 - No multiple scattering.
238