]>
Commit | Line | Data |
---|---|---|
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 | ||
49 | ClassImp(AliITSv11GeometrySPD) | |
50 | ||
51 | #define SQ(A) (A)*(A) | |
52 | ||
53 | //______________________________________________________________________ | |
a53658c6 | 54 | Int_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 | //______________________________________________________________________ | |
230 | void 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 |