ba030c0e |
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 | |
d1cd2474 |
16 | // $Id$ |
17 | // |
3d1463c8 |
18 | //----------------------------------------------------------------------------- |
d1cd2474 |
19 | // Class AliMUONSt1GeometryBuilderV2 |
20 | // --------------------------------- |
21 | // MUON Station1 detailed geometry construction class. |
5f1df83a |
22 | // (Originally defined in AliMUONv2.cxx - now removed.) |
23 | // Included in AliRoot 2004/01/23 |
3d1463c8 |
24 | // Authors: David Guez, Ivana Hrivnacova, Marion MacCormick; IPN Orsay |
25 | //----------------------------------------------------------------------------- |
d1cd2474 |
26 | |
adbabf6d |
27 | #include "AliMUONSt1GeometryBuilderV2.h" |
28 | #include "AliMUONSt1SpecialMotif.h" |
29 | #include "AliMUON.h" |
30 | #include "AliMUONConstants.h" |
31 | #include "AliMUONGeometryModule.h" |
32 | #include "AliMUONGeometryEnvelopeStore.h" |
ba030c0e |
33 | |
86488ea7 |
34 | #include "AliMpContainers.h" |
4d8c279c |
35 | #include "AliMpConstants.h" |
adbabf6d |
36 | #include "AliMpFiles.h" |
37 | #include "AliMpSectorReader.h" |
38 | #include "AliMpSector.h" |
39 | #include "AliMpRow.h" |
40 | #include "AliMpVRowSegment.h" |
41 | #include "AliMpMotifMap.h" |
42 | #include "AliMpMotifPosition.h" |
4d8c279c |
43 | #include "AliMpPlaneType.h" |
adbabf6d |
44 | |
45 | #include "AliRun.h" |
46 | #include "AliMagF.h" |
47 | #include "AliLog.h" |
ba030c0e |
48 | |
49 | #include <TVector2.h> |
d1cd2474 |
50 | #include <TVector3.h> |
51 | #include <TGeoMatrix.h> |
ba030c0e |
52 | #include <TClonesArray.h> |
5f91c9e8 |
53 | #include <Riostream.h> |
54 | #include <TSystem.h> |
5d12ce38 |
55 | #include <TVirtualMC.h> |
91111b9c |
56 | #include <TGeoManager.h> |
57 | #include <TGeoVolume.h> |
58 | #include <TGeoTube.h> |
59 | #include <TGeoCompositeShape.h> |
ba030c0e |
60 | |
86488ea7 |
61 | #ifdef WITH_STL |
adbabf6d |
62 | #include <vector> |
63 | #endif |
e118b27e |
64 | |
86488ea7 |
65 | #ifdef WITH_ROOT |
adbabf6d |
66 | #include "TArrayI.h" |
67 | #endif |
ba030c0e |
68 | |
5398f946 |
69 | /// \cond CLASSIMP |
70 | ClassImp(AliMUONSt1GeometryBuilderV2) |
71 | /// \endcond |
72 | |
5f91c9e8 |
73 | // Thickness Constants |
d1cd2474 |
74 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzPadPlane=0.0148/2.; //Pad plane |
1c4b9c4c |
75 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzFoam = 2.503/2.; //Foam of mechanicalplane |
76 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzFR4 = 0.062/2.; //FR4 of mechanical plane |
d1cd2474 |
77 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzSnPb = 0.0091/2.; //Pad/Kapton connection (66 pt) |
78 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzKapton = 0.0122/2.; //Kapton |
79 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzBergPlastic = 0.3062/2.;//Berg connector |
80 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzBergCopper = 0.1882/2.; //Berg connector |
81 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzDaughter = 0.0156/2.; //Daughter board |
b367fd8f |
82 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHzGas = 0.42/2.; //Gas thickness |
5f91c9e8 |
83 | |
84 | // Quadrant Mother volume - TUBS1 - Middle layer of model |
d1cd2474 |
85 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherIR1 = 18.3; |
86 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherOR1 = 105.673; |
87 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherThick1 = 6.5/2; |
88 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherPhiL1 = 0.; |
89 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherPhiU1 = 90.; |
5f91c9e8 |
90 | |
91 | // Quadrant Mother volume - TUBS2 - near and far layers of model |
d1cd2474 |
92 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherIR2 = 20.7; |
93 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherOR2 = 100.073; |
94 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherThick2 = 3.0/2; |
95 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherPhiL2 = 0.; |
96 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkMotherPhiU2 = 90.; |
5f91c9e8 |
97 | |
98 | // Sensitive copper pads, foam layer, PCB and electronics model parameters |
d1cd2474 |
99 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHxHole=1.5/2.; |
100 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHyHole=6./2.; |
101 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHxBergPlastic=0.74/2.; |
102 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHyBergPlastic=5.09/2.; |
103 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHxBergCopper=0.25/2.; |
104 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHyBergCopper=3.6/2.; |
105 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHxKapton=0.8/2.; |
106 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHyKapton=5.7/2.; |
107 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHxDaughter=2.3/2.; |
108 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkHyDaughter=6.3/2.; |
109 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkOffsetX=1.46; |
110 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkOffsetY=0.71; |
111 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkDeltaFilleEtamX=1.46; |
112 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkDeltaFilleEtamY=0.051; |
113 | |
114 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkDeltaQuadLHC=2.6; // LHC Origin wrt Quadrant Origin |
b367fd8f |
115 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkFrameOffset=5.2; |
116 | // Fix (1) of overlap SQN* layers with SQM* ones (was 5.0) |
117 | |
118 | // Pad planes offsets |
119 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkPadXOffsetBP = 0.50 - 0.63/2; // = 0.185 |
120 | const GReal_t AliMUONSt1GeometryBuilderV2::fgkPadYOffsetBP = -0.31 - 0.42/2; // =-0.52 |
d1cd2474 |
121 | |
62c708bf |
122 | const char* AliMUONSt1GeometryBuilderV2::fgkHoleName="SCHL"; |
123 | const char* AliMUONSt1GeometryBuilderV2::fgkDaughterName="SCDB"; |
b367fd8f |
124 | const char* AliMUONSt1GeometryBuilderV2::fgkQuadrantEnvelopeName="SE"; |
d1cd2474 |
125 | const char* AliMUONSt1GeometryBuilderV2::fgkQuadrantMLayerName="SQM"; |
126 | const char* AliMUONSt1GeometryBuilderV2::fgkQuadrantNLayerName="SQN"; |
127 | const char* AliMUONSt1GeometryBuilderV2::fgkQuadrantFLayerName="SQF"; |
62c708bf |
128 | const Int_t AliMUONSt1GeometryBuilderV2::fgkFoamBoxNameOffset=200; |
129 | const Int_t AliMUONSt1GeometryBuilderV2::fgkFR4BoxNameOffset=400; |
e8c253a0 |
130 | const Int_t AliMUONSt1GeometryBuilderV2::fgkDaughterCopyNoOffset=1000; |
5f91c9e8 |
131 | |
132 | //______________________________________________________________________________ |
d1cd2474 |
133 | AliMUONSt1GeometryBuilderV2::AliMUONSt1GeometryBuilderV2(AliMUON* muon) |
8cf07955 |
134 | : AliMUONVGeometryBuilder(0, 2), |
d1cd2474 |
135 | fMUON(muon) |
ba030c0e |
136 | { |
5398f946 |
137 | /// Standard constructor |
138 | |
5f91c9e8 |
139 | // set path to mapping data files |
140 | if (! gSystem->Getenv("MINSTALL")) { |
141 | TString dirPath = gSystem->Getenv("ALICE_ROOT"); |
142 | dirPath += "/MUON/mapping"; |
3d16af90 |
143 | AliMpFiles::SetTopPath(dirPath); |
5f91c9e8 |
144 | gSystem->Setenv("MINSTALL", dirPath.Data()); |
145 | //cout << "AliMpFiles top path set to " << dirPath << endl; |
146 | } |
147 | //else |
d1cd2474 |
148 | // cout << gSystem->Getenv("MINSTALL") << endl; |
ba030c0e |
149 | } |
150 | |
5f91c9e8 |
151 | //______________________________________________________________________________ |
d1cd2474 |
152 | AliMUONSt1GeometryBuilderV2::AliMUONSt1GeometryBuilderV2() |
153 | : AliMUONVGeometryBuilder(), |
154 | fMUON(0) |
ba030c0e |
155 | { |
5398f946 |
156 | /// Default Constructor |
ba030c0e |
157 | } |
ba030c0e |
158 | |
5f91c9e8 |
159 | //______________________________________________________________________________ |
d1cd2474 |
160 | AliMUONSt1GeometryBuilderV2::~AliMUONSt1GeometryBuilderV2() |
ba030c0e |
161 | { |
5398f946 |
162 | /// Destructor |
ba030c0e |
163 | } |
164 | |
d1cd2474 |
165 | |
5f91c9e8 |
166 | // |
167 | // Private methods |
168 | // |
169 | |
170 | //______________________________________________________________________________ |
b367fd8f |
171 | TString |
172 | AliMUONSt1GeometryBuilderV2::QuadrantEnvelopeName(Int_t chamber, Int_t quadrant) const |
173 | { |
5398f946 |
174 | /// Generate unique envelope name from chamber Id and quadrant number |
b367fd8f |
175 | |
176 | return Form("%s%d", Form("%s%d",fgkQuadrantEnvelopeName,chamber), quadrant); |
177 | } |
178 | |
179 | //______________________________________________________________________________ |
d1cd2474 |
180 | void AliMUONSt1GeometryBuilderV2::CreateHole() |
ba030c0e |
181 | { |
5398f946 |
182 | /// Create all the elements found inside a foam hole |
183 | |
d1cd2474 |
184 | Int_t* idtmed = fMUON->GetIdtmed()->GetArray()-1099; |
185 | Int_t idAir = idtmed[1100]; // medium 1 |
186 | //Int_t idCopper = idtmed[1109]; // medium 10 = copper |
187 | Int_t idCopper = idtmed[1121]; // medium 22 = copper |
ba030c0e |
188 | |
5f91c9e8 |
189 | GReal_t par[3]; |
190 | GReal_t posX,posY,posZ; |
191 | |
192 | par[0] = fgkHxHole; |
193 | par[1] = fgkHyHole; |
194 | par[2] = fgkHzFoam; |
195 | gMC->Gsvolu(fgkHoleName,"BOX",idAir,par,3); |
196 | |
197 | par[0] = fgkHxKapton; |
198 | par[1] = fgkHyKapton; |
199 | par[2] = fgkHzSnPb; |
200 | gMC->Gsvolu("SNPB", "BOX", idCopper, par, 3); |
201 | posX = 0.; |
202 | posY = 0.; |
203 | posZ = -fgkHzFoam+fgkHzSnPb; |
204 | gMC->Gspos("SNPB",1,fgkHoleName, posX, posY, posZ, 0,"ONLY"); |
ba030c0e |
205 | |
5f91c9e8 |
206 | par[0] = fgkHxHole; |
207 | par[1] = fgkHyBergPlastic; |
208 | par[2] = fgkHzKapton; |
62c708bf |
209 | gMC->Gsvolu("SKPT", "BOX", idCopper, par, 3); |
5f91c9e8 |
210 | posX = 0.; |
211 | posY = 0.; |
212 | posZ = 0.; |
62c708bf |
213 | gMC->Gspos("SKPT",1,fgkHoleName, posX, posY, posZ, 0,"ONLY"); |
5f91c9e8 |
214 | } |
ba030c0e |
215 | |
5f91c9e8 |
216 | //______________________________________________________________________________ |
d1cd2474 |
217 | void AliMUONSt1GeometryBuilderV2::CreateDaughterBoard() |
5f91c9e8 |
218 | { |
5398f946 |
219 | /// Create all the elements in a daughter board |
220 | |
d1cd2474 |
221 | Int_t* idtmed = fMUON->GetIdtmed()->GetArray()-1099; |
5f91c9e8 |
222 | Int_t idAir = idtmed[1100]; // medium 1 |
d1cd2474 |
223 | //Int_t idCopper = idtmed[1109]; // medium 10 = copper |
224 | //Int_t idPlastic =idtmed[1116]; // medium 17 = Plastic |
225 | Int_t idCopper = idtmed[1121]; // medium 22 = copper |
226 | Int_t idPlastic =idtmed[1127]; // medium 28 = Plastic |
ba030c0e |
227 | |
5f91c9e8 |
228 | GReal_t par[3]; |
229 | GReal_t posX,posY,posZ; |
ba030c0e |
230 | |
5f91c9e8 |
231 | par[0]=fgkHxDaughter; |
232 | par[1]=fgkHyDaughter; |
233 | par[2]=TotalHzDaughter(); |
234 | gMC->Gsvolu(fgkDaughterName,"BOX",idAir,par,3); |
ba030c0e |
235 | |
5f91c9e8 |
236 | par[0]=fgkHxBergPlastic; |
237 | par[1]=fgkHyBergPlastic; |
238 | par[2]=fgkHzBergPlastic; |
62c708bf |
239 | gMC->Gsvolu("SBGP","BOX",idPlastic,par,3); |
5f91c9e8 |
240 | posX=0.; |
241 | posY=0.; |
242 | posZ = -TotalHzDaughter() + fgkHzBergPlastic; |
62c708bf |
243 | gMC->Gspos("SBGP",1,fgkDaughterName,posX,posY,posZ,0,"ONLY"); |
5f91c9e8 |
244 | |
245 | par[0]=fgkHxBergCopper; |
246 | par[1]=fgkHyBergCopper; |
247 | par[2]=fgkHzBergCopper; |
62c708bf |
248 | gMC->Gsvolu("SBGC","BOX",idCopper,par,3); |
5f91c9e8 |
249 | posX=0.; |
250 | posY=0.; |
251 | posZ=0.; |
62c708bf |
252 | gMC->Gspos("SBGC",1,"SBGP",posX,posY,posZ,0,"ONLY"); |
5f91c9e8 |
253 | |
254 | par[0]=fgkHxDaughter; |
255 | par[1]=fgkHyDaughter; |
256 | par[2]=fgkHzDaughter; |
62c708bf |
257 | gMC->Gsvolu("SDGH","BOX",idCopper,par,3); |
5f91c9e8 |
258 | posX=0.; |
259 | posY=0.; |
260 | posZ = -TotalHzDaughter() + 2.*fgkHzBergPlastic + fgkHzDaughter; |
62c708bf |
261 | gMC->Gspos("SDGH",1,fgkDaughterName,posX,posY,posZ,0,"ONLY"); |
5f91c9e8 |
262 | } |
263 | |
264 | //______________________________________________________________________________ |
d1cd2474 |
265 | void AliMUONSt1GeometryBuilderV2::CreateInnerLayers() |
5f91c9e8 |
266 | { |
5398f946 |
267 | /// Create the layer of sensitive volumes with gas |
268 | /// and the copper layer. |
5f91c9e8 |
269 | |
270 | // Gas Medium |
d1cd2474 |
271 | Int_t* idtmed = fMUON->GetIdtmed()->GetArray()-1099; |
272 | //Int_t idArCO2 = idtmed[1108]; // medium 9 (ArCO2 80%) |
273 | //Int_t idCopper = idtmed[1109]; // medium 10 = copper |
274 | Int_t idArCO2 = idtmed[1124]; // medium 25 (ArCO2 80%) |
275 | Int_t idCopper = idtmed[1121]; // medium 22 = copper |
5f91c9e8 |
276 | |
277 | Float_t par[11]; |
278 | |
279 | //Make gas volume - composed of 11 trapezoids |
280 | // section 1 of 11 |
281 | par[0] = fgkHzGas; |
282 | par[1] = 0.; |
283 | par[2] = 0.; |
284 | par[3] = 71.33/2.; |
285 | par[4] = 9.76/2.; |
286 | par[5] = 48.77/2.; |
287 | par[6] = 15.3; |
288 | par[7] = 71.33/2.; |
289 | par[8] = 9.76/2.; |
290 | par[9] = 48.77/2.; |
291 | par[10] = 15.3; |
292 | |
293 | gMC->Gsvolu("SA1G", "TRAP", idArCO2, par, 11); |
294 | gMC->Gsvolu("SA2G", "TRAP", idArCO2, par, 11); |
ba030c0e |
295 | |
5f91c9e8 |
296 | par[0] = fgkHzPadPlane; |
297 | gMC->Gsvolu("SA1C", "TRAP", idCopper,par, 11); |
298 | |
299 | // section 2 of 11 |
300 | par[0] = fgkHzGas; |
301 | par[1] = 0.; |
302 | par[2] = 0.; |
303 | par[3] = 79.68/2.; |
304 | par[4] = 10.4/2.; |
305 | par[5] = 57.0/2.; |
306 | par[6] = 0.; |
307 | par[7] = 79.68/2.; |
308 | par[8] = 10.4/2.; |
309 | par[9] = 57.0/2.; |
310 | par[10] = 0.; |
311 | gMC->Gsvolu("SB1G", "TRAP", idArCO2, par, 11); |
312 | gMC->Gsvolu("SB2G", "TRAP", idArCO2, par, 11); |
313 | |
314 | par[0] = fgkHzPadPlane; |
315 | gMC->Gsvolu("SB1C", "TRAP", idCopper,par, 11); |
316 | |
317 | // section 3 of 11 |
318 | par[0] = fgkHzGas; |
319 | par[1] = 0.; |
320 | par[2] = 0.; |
321 | par[3] = 71.33/2.; |
322 | par[4] = 48.77/2.; |
323 | par[5] = 9.73/2.; |
324 | par[6] = -15.3; |
325 | par[7] = 71.33/2.; |
326 | par[8] = 48.77/2.; |
327 | par[9] = 9.73/2.; |
328 | par[10] = -15.3; |
329 | |
330 | gMC->Gsvolu("SC1G", "TRAP", idArCO2, par, 11); |
331 | gMC->Gsvolu("SC2G", "TRAP", idArCO2, par, 11); |
332 | |
333 | par[0] = fgkHzPadPlane; |
334 | gMC->Gsvolu("SC1C", "TRAP", idCopper,par, 11); |
335 | |
336 | // section 4 of 11 |
337 | par[0] = fgkHzGas; |
338 | par[1] = 0.; |
339 | par[2] = 0.; |
340 | par[3] = 6.00/2.; |
341 | par[4] = 0.; |
342 | par[5] = 1.56/2.; |
343 | par[6] = 7.41; |
344 | par[7] = 6.00/2.; |
345 | par[8] = 0.; |
346 | par[9] = 1.56/2.; |
347 | par[10] = 7.41; |
348 | gMC->Gsvolu("SD1G", "TRAP", idArCO2, par, 11); |
349 | gMC->Gsvolu("SD2G", "TRAP", idArCO2, par, 11); |
350 | |
351 | par[0] = fgkHzPadPlane; |
352 | gMC->Gsvolu("SD1C", "TRAP", idCopper,par, 11); |
353 | |
354 | // section 5 of 11 |
355 | par[0] = fgkHzGas; |
356 | par[1] = 0.; |
357 | par[2] = 0.; |
358 | par[3] = 1.516/2.; |
359 | par[4] = 0.; |
360 | par[5] = 0.829/2.; |
361 | par[6] = 15.3; |
362 | par[7] = 1.516/2.; |
363 | par[8] = 0.; |
364 | par[9] = 0.829/2.; |
365 | par[10] = 15.3; |
366 | gMC->Gsvolu("SE1G", "TRAP", idArCO2, par, 11); |
367 | gMC->Gsvolu("SE2G", "TRAP", idArCO2, par, 11); |
368 | |
369 | par[0] = fgkHzPadPlane; |
370 | gMC->Gsvolu("SE1C", "TRAP", idCopper,par, 11); |
371 | |
372 | // section 6 of 11 |
373 | par[0] = fgkHzGas; |
374 | par[1] = 0.; |
375 | par[2] = 0.; |
376 | par[3] = 3.92/2.; |
377 | par[4] = 0.; |
378 | par[5] = 0.562/2.; |
379 | par[6] = -4.1; |
380 | par[7] = 3.92/2.; |
381 | par[8] = 0.; |
382 | par[9] = 0.562/2.; |
383 | par[10] = -4.1; |
384 | gMC->Gsvolu("SF1G", "TRAP", idArCO2, par, 11); |
385 | gMC->Gsvolu("SF2G", "TRAP", idArCO2, par, 11); |
386 | |
387 | par[0] = fgkHzPadPlane; |
388 | gMC->Gsvolu("SF1C", "TRAP", idCopper,par, 11); |
389 | |
390 | // section 7 of 11 |
391 | par[0] = fgkHzGas; |
392 | par[1] = 0.; |
393 | par[2] = 0.; |
394 | par[3] = 0.941/2.; |
395 | par[4] = 0.562/2.; |
396 | par[5] = 0.; |
397 | par[6] = -16.6; |
398 | par[7] = 0.941/2.; |
399 | par[8] = 0.562/2.; |
400 | par[9] = 0.; |
401 | par[10] =-16.6; |
402 | gMC->Gsvolu("SG1G", "TRAP", idArCO2, par, 11); |
403 | gMC->Gsvolu("SG2G", "TRAP", idArCO2, par, 11); |
404 | |
405 | par[0] = fgkHzPadPlane; |
406 | gMC->Gsvolu("SG1C", "TRAP", idCopper,par, 11); |
407 | |
408 | // section 8 of 11 |
409 | par[0] = fgkHzGas; |
410 | par[1] = 0.; |
411 | par[2] = 0.; |
412 | par[3] = 3.94/2.; |
413 | par[4] = 0.57/2.; |
414 | par[5] = 0.; |
415 | par[6] = 4.14; |
416 | par[7] = 3.94/2.; |
417 | par[8] = 0.57/2.; |
418 | par[9] = 0.; |
419 | par[10] = 4.14; |
420 | gMC->Gsvolu("SH1G", "TRAP", idArCO2, par, 11); |
421 | gMC->Gsvolu("SH2G", "TRAP", idArCO2, par, 11); |
422 | |
423 | par[0] = fgkHzPadPlane; |
424 | gMC->Gsvolu("SH1C", "TRAP", idCopper,par, 11); |
425 | |
426 | // section 9 of 11 |
427 | par[0] = fgkHzGas; |
428 | par[1] = 0.; |
429 | par[2] = 0.; |
430 | par[3] = 0.95/2.; |
431 | par[4] = 0.; |
432 | par[5] = 0.57/2; |
433 | par[6] = 16.7; |
434 | par[7] = 0.95/2.; |
435 | par[8] = 0.; |
436 | par[9] = 0.57/2; |
437 | par[10] = 16.7; |
438 | gMC->Gsvolu("SI1G", "TRAP", idArCO2, par, 11); |
439 | gMC->Gsvolu("SI2G", "TRAP", idArCO2, par, 11); |
440 | |
441 | par[0] = fgkHzPadPlane; |
442 | gMC->Gsvolu("SI1C", "TRAP", idCopper,par, 11); |
443 | |
444 | // section 10 of 11 |
445 | par[0] = fgkHzGas; |
446 | par[1] = 0.; |
447 | par[2] = 0.; |
448 | par[3] = 1.49/2.; |
449 | par[4] = 0.; |
450 | par[5] = 0.817/2.; |
451 | par[6] = -15.4; |
452 | par[7] = 1.49/2.; |
453 | par[8] = 0.; |
454 | par[9] = 0.817/2.; |
455 | par[10] = -15.4; |
456 | gMC->Gsvolu("SJ1G", "TRAP", idArCO2, par, 11); |
457 | gMC->Gsvolu("SJ2G", "TRAP", idArCO2, par, 11); |
458 | |
459 | par[0] = fgkHzPadPlane; |
460 | gMC->Gsvolu("SJ1C", "TRAP", idCopper,par, 11); |
461 | |
462 | // section 11 of 11 |
463 | par[0] = fgkHzGas; |
464 | par[1] = 0.; |
465 | par[2] = 0.; |
466 | par[3] = 5.93/2.; |
467 | par[4] = 0.; |
468 | par[5] = 1.49/2.; |
469 | par[6] = -7.16; |
470 | par[7] = 5.93/2.; |
471 | par[8] = 0.; |
472 | par[9] = 1.49/2.; |
473 | par[10] = -7.16; |
474 | gMC->Gsvolu("SK1G", "TRAP", idArCO2, par, 11); |
475 | gMC->Gsvolu("SK2G", "TRAP", idArCO2, par, 11); |
476 | |
477 | par[0] = fgkHzPadPlane; |
478 | gMC->Gsvolu("SK1C", "TRAP", idCopper,par, 11); |
ba030c0e |
479 | } |
5f91c9e8 |
480 | |
481 | //______________________________________________________________________________ |
d1cd2474 |
482 | void AliMUONSt1GeometryBuilderV2::CreateQuadrant(Int_t chamber) |
ba030c0e |
483 | { |
5398f946 |
484 | /// Create the quadrant (bending and non-bending planes) |
485 | /// for the given chamber |
5f91c9e8 |
486 | |
ba030c0e |
487 | CreateFrame(chamber); |
488 | |
86488ea7 |
489 | #ifdef WITH_STL |
d1cd2474 |
490 | SpecialMap specialMap; |
e8c253a0 |
491 | specialMap[76] = AliMUONSt1SpecialMotif(TVector2( 0.1, 0.84), 90.); |
492 | specialMap[75] = AliMUONSt1SpecialMotif(TVector2( 0.5, 0.36)); |
493 | specialMap[47] = AliMUONSt1SpecialMotif(TVector2(1.01, 0.36)); |
d1cd2474 |
494 | #endif |
495 | |
86488ea7 |
496 | #ifdef WITH_ROOT |
d1cd2474 |
497 | SpecialMap specialMap; |
e8c253a0 |
498 | specialMap.Add(76, (Long_t) new AliMUONSt1SpecialMotif(TVector2( 0.1, 0.84), 90.)); |
499 | specialMap.Add(75, (Long_t) new AliMUONSt1SpecialMotif(TVector2( 0.5, 0.36))); |
500 | specialMap.Add(47, (Long_t) new AliMUONSt1SpecialMotif(TVector2(1.01, 0.36))); |
d1cd2474 |
501 | #endif |
502 | |
866c3232 |
503 | AliMpSectorReader reader1(AliMp::kStation1, AliMp::kBendingPlane); |
5f91c9e8 |
504 | AliMpSector* sector1 = reader1.BuildSector(); |
ba030c0e |
505 | |
b367fd8f |
506 | //Bool_t reflectZ = true; |
507 | Bool_t reflectZ = false; |
508 | //TVector3 where = TVector3(2.5+0.1+0.56+0.001, 2.5+0.1+0.001, 0.); |
509 | TVector3 where = TVector3(fgkDeltaQuadLHC + fgkPadXOffsetBP, |
510 | fgkDeltaQuadLHC + fgkPadYOffsetBP, 0.); |
5f91c9e8 |
511 | PlaceSector(sector1, specialMap, where, reflectZ, chamber); |
ba030c0e |
512 | |
86488ea7 |
513 | #ifdef WITH_STL |
ba030c0e |
514 | specialMap.clear(); |
e8c253a0 |
515 | specialMap[76] = AliMUONSt1SpecialMotif(TVector2(1.01,0.59),90.); |
516 | specialMap[75] = AliMUONSt1SpecialMotif(TVector2(1.96, 0.17)); |
b367fd8f |
517 | specialMap[47] = AliMUONSt1SpecialMotif(TVector2(2.18,-0.98)); |
e8c253a0 |
518 | specialMap[20] = AliMUONSt1SpecialMotif(TVector2(0.2 ,-0.08)); |
519 | specialMap[46] = AliMUONSt1SpecialMotif(TVector2(0.2 , 0.25)); |
520 | specialMap[74] = AliMUONSt1SpecialMotif(TVector2(0.28, 0.21)); |
b367fd8f |
521 | // Fix (7) - overlap of SQ42 with MCHL (after moving the whole sector |
522 | // in the true position) |
523 | // Was: specialMap[47] = AliMUONSt1SpecialMotif(TVector2(1.61,-1.18)); |
d1cd2474 |
524 | #endif |
525 | |
86488ea7 |
526 | #ifdef WITH_ROOT |
866c3232 |
527 | Int_t nb = AliMpConstants::ManuMask(AliMp::kNonBendingPlane); |
d1cd2474 |
528 | specialMap.Delete(); |
4d8c279c |
529 | specialMap.Add(76 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(1.01,0.59),90.)); |
530 | specialMap.Add(75 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(1.96, 0.17))); |
531 | specialMap.Add(47 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(2.18,-0.98))); |
532 | specialMap.Add(20 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(0.2 ,-0.08))); |
533 | specialMap.Add(46 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(0.2 , 0.25))); |
534 | specialMap.Add(74 | nb,(Long_t) new AliMUONSt1SpecialMotif(TVector2(0.28, 0.21))); |
b367fd8f |
535 | // Fix (7) - overlap of SQ42 with MCHL (after moving the whole sector |
536 | // in the true position) |
537 | // Was: specialMap.Add(47,(Long_t) new AliMUONSt1SpecialMotif(TVector2(1.61,-1.18))); |
d1cd2474 |
538 | #endif |
539 | |
866c3232 |
540 | AliMpSectorReader reader2(AliMp::kStation1, AliMp::kNonBendingPlane); |
5f91c9e8 |
541 | AliMpSector* sector2 = reader2.BuildSector(); |
b367fd8f |
542 | |
543 | //reflectZ = false; |
544 | reflectZ = true; |
ab126d0a |
545 | TVector2 offset = sector2->Position(); |
e77b6d6b |
546 | where = TVector3(where.X()+offset.X(), where.Y()+offset.Y(), 0.); |
b367fd8f |
547 | // Add the half-pad shift of the non-bending plane wrt bending plane |
548 | // (The shift is defined in the mapping as sector offset) |
549 | // Fix (4) - was TVector3(where.X()+0.63/2, ... - now it is -0.63/2 |
5f91c9e8 |
550 | PlaceSector(sector2, specialMap, where, reflectZ, chamber); |
d1cd2474 |
551 | |
86488ea7 |
552 | #ifdef WITH_ROOT |
d1cd2474 |
553 | specialMap.Delete(); |
554 | #endif |
ba030c0e |
555 | } |
556 | |
5f91c9e8 |
557 | //______________________________________________________________________________ |
62c708bf |
558 | void AliMUONSt1GeometryBuilderV2::CreateFoamBox( |
559 | Int_t segNumber, |
560 | const TVector2& dimensions) |
ba030c0e |
561 | { |
5398f946 |
562 | /// Create all the elements in the copper plane |
ba030c0e |
563 | |
d1cd2474 |
564 | Int_t* idtmed = fMUON->GetIdtmed()->GetArray()-1099; |
5f91c9e8 |
565 | Int_t idAir = idtmed[1100]; // medium 1 |
d1cd2474 |
566 | //Int_t idFoam = idtmed[1115]; // medium 16 = Foam |
567 | //Int_t idFR4 = idtmed[1114]; // medium 15 = FR4 |
568 | Int_t idFoam = idtmed[1125]; // medium 26 = Foam |
569 | Int_t idFR4 = idtmed[1122]; // medium 23 = FR4 |
ba030c0e |
570 | |
5f91c9e8 |
571 | // mother volume |
572 | GReal_t par[3]; |
573 | par[0] = dimensions.X(); |
574 | par[1] = dimensions.Y(); |
575 | par[2] = TotalHzPlane(); |
62c708bf |
576 | gMC->Gsvolu(PlaneSegmentName(segNumber).Data(),"BOX",idAir,par,3); |
5f91c9e8 |
577 | |
578 | // foam layer |
5f91c9e8 |
579 | par[0] = dimensions.X(); |
580 | par[1] = dimensions.Y(); |
581 | par[2] = fgkHzFoam; |
62c708bf |
582 | gMC->Gsvolu(FoamBoxName(segNumber).Data(),"BOX",idFoam,par,3); |
583 | GReal_t posX,posY,posZ; |
5f91c9e8 |
584 | posX=0.; |
585 | posY=0.; |
586 | posZ = -TotalHzPlane() + fgkHzFoam; |
62c708bf |
587 | gMC->Gspos(FoamBoxName(segNumber).Data(),1, |
588 | PlaneSegmentName(segNumber).Data(),posX,posY,posZ,0,"ONLY"); |
ba030c0e |
589 | |
5f91c9e8 |
590 | // mechanical plane FR4 layer |
5f91c9e8 |
591 | par[0] = dimensions.X(); |
592 | par[1] = dimensions.Y(); |
593 | par[2] = fgkHzFR4; |
62c708bf |
594 | gMC->Gsvolu(FR4BoxName(segNumber).Data(),"BOX",idFR4,par,3); |
5f91c9e8 |
595 | posX=0.; |
596 | posY=0.; |
597 | posZ = -TotalHzPlane()+ 2.*fgkHzFoam + fgkHzFR4; |
62c708bf |
598 | gMC->Gspos(FR4BoxName(segNumber).Data(),1, |
599 | PlaneSegmentName(segNumber).Data(),posX,posY,posZ,0,"ONLY"); |
5f91c9e8 |
600 | } |
ba030c0e |
601 | |
5f91c9e8 |
602 | //______________________________________________________________________________ |
62c708bf |
603 | void AliMUONSt1GeometryBuilderV2::CreatePlaneSegment(Int_t segNumber, |
604 | const TVector2& dimensions, |
605 | Int_t nofHoles) |
5f91c9e8 |
606 | { |
5398f946 |
607 | /// Create a segment of a plane (this includes a foam layer, |
608 | /// holes in the foam to feed the kaptons through, kapton connectors |
609 | /// and the mother board.) |
ba030c0e |
610 | |
62c708bf |
611 | CreateFoamBox(segNumber,dimensions); |
ba030c0e |
612 | |
5f91c9e8 |
613 | for (Int_t holeNum=0;holeNum<nofHoles;holeNum++) { |
614 | GReal_t posX = ((2.*holeNum+1.)/nofHoles-1.)*dimensions.X(); |
615 | GReal_t posY = 0.; |
616 | GReal_t posZ = 0.; |
ba030c0e |
617 | |
62c708bf |
618 | gMC->Gspos(fgkHoleName,holeNum+1, |
619 | FoamBoxName(segNumber).Data(),posX,posY,posZ,0,"ONLY"); |
5f91c9e8 |
620 | } |
ba030c0e |
621 | } |
622 | |
5f91c9e8 |
623 | //______________________________________________________________________________ |
d1cd2474 |
624 | void AliMUONSt1GeometryBuilderV2::CreateFrame(Int_t chamber) |
ba030c0e |
625 | { |
5398f946 |
626 | /// Create the non-sensitive elements of the frame for the \a chamber |
627 | /// |
628 | /// Model and notation: \n |
629 | /// \n |
630 | /// The Quadrant volume name starts with SQ \n |
631 | /// The volume segments are numbered 00 to XX \n |
632 | /// \n |
633 | /// OutTopFrame \n |
634 | /// (SQ02-16) \n |
635 | /// ------------ \n |
636 | /// OutEdgeFrame / | \n |
637 | /// (SQ17-24) / | InVFrame (SQ00-01) \n |
638 | /// / | \n |
639 | /// | | \n |
640 | /// OutVFrame | _- - \n |
641 | /// (SQ25-39) | | InArcFrame (SQ42-45) \n |
642 | /// | | \n |
643 | /// ------------- \n |
644 | /// InHFrame (SQ40-41) \n |
645 | /// \n |
646 | /// \n |
647 | /// 06 February 2003 - Overlapping volumes resolved. \n |
648 | /// One quarter chamber is comprised of three TUBS volumes: SQMx, SQNx, and SQFx, |
649 | /// where SQMx is the Quadrant Middle layer for chamber \a chamber ( posZ in [-3.25,3.25]), |
650 | /// SQNx is the Quadrant Near side layer for chamber \a chamber ( posZ in [-6.25,3-.25) ), and |
651 | /// SQFx is the Quadrant Far side layer for chamber \a chamber ( posZ in (3.25,6.25] ). |
ba030c0e |
652 | |
d1cd2474 |
653 | const Float_t kNearFarLHC=2.4; // Near and Far TUBS Origin wrt LHC Origin |
ba030c0e |
654 | |
ba030c0e |
655 | // tracking medias |
d1cd2474 |
656 | Int_t* idtmed = fMUON->GetIdtmed()->GetArray()-1099; |
5f91c9e8 |
657 | |
ba030c0e |
658 | Int_t idAir = idtmed[1100]; // medium 1 |
d1cd2474 |
659 | //Int_t idFrameEpoxy = idtmed[1115]; // medium 16 = Frame Epoxy ME730 |
660 | //Int_t idInox = idtmed[1116]; // medium 17 Stainless Steel (18%Cr,9%Ni,Fe) |
661 | //Int_t idFR4 = idtmed[1110]; // medium 11 FR4 |
662 | //Int_t idCopper = idtmed[1109]; // medium 10 Copper |
663 | //Int_t idAlu = idtmed[1103]; // medium 4 Aluminium |
664 | Int_t idFrameEpoxy = idtmed[1123]; // medium 24 = Frame Epoxy ME730 // was 20 not 16 |
665 | Int_t idInox = idtmed[1128]; // medium 29 Stainless Steel (18%Cr,9%Ni,Fe) // was 21 not 17 |
666 | Int_t idFR4 = idtmed[1122]; // medium 23 FR4 // was 15 not 11 |
667 | Int_t idCopper = idtmed[1121]; // medium 22 Copper |
668 | Int_t idAlu = idtmed[1120]; // medium 21 Aluminium |
5f91c9e8 |
669 | |
670 | |
671 | // Rotation Matrices |
672 | Int_t rot1, rot2, rot3; |
673 | |
674 | // Rotation matrices |
d1cd2474 |
675 | fMUON->AliMatrix(rot1, 90., 90., 90., 180., 0., 0.); // +90 deg in x-y plane |
676 | fMUON->AliMatrix(rot2, 90., 45., 90., 135., 0., 0.); // +45 deg in x-y plane |
677 | fMUON->AliMatrix(rot3, 90., 45., 90., 315.,180., 0.); // +45 deg in x-y + rotation 180° around y |
5f91c9e8 |
678 | |
679 | // Translation matrices ... NOT USED |
d1cd2474 |
680 | // fMUON->AliMatrix(trans1, 90., 0., 90., 90., 0., 0.); // X-> X; Y -> Y; Z -> Z |
681 | // fMUON->AliMatrix(trans2, 90., 180., 90., 90., 180., 0.); // X->-X; Y -> Y; Z ->-Z |
682 | // fMUON->AliMatrix(trans3, 90., 180., 90., 270., 0., 0.); // X->-X; Y ->-Y; Z -> Z |
683 | // fMUON->AliMatrix(trans4, 90., 0., 90., 270., 180., 0.); // X-> X; Y ->-Y; Z ->-Z |
ba030c0e |
684 | // |
5f91c9e8 |
685 | // ___________________Volume thicknesses________________________ |
ba030c0e |
686 | |
d1cd2474 |
687 | const Float_t kHzFrameThickness = 1.59/2.; //equivalent thickness |
688 | const Float_t kHzOuterFrameEpoxy = 1.19/2.; //equivalent thickness |
689 | const Float_t kHzOuterFrameInox = 0.1/2.; //equivalent thickness |
690 | const Float_t kHzFoam = 2.083/2.; //evaluated elsewhere |
691 | // CHECK with fgkHzFoam |
5f91c9e8 |
692 | |
693 | // Pertaining to the top outer area |
d1cd2474 |
694 | const Float_t kHzTopAnodeSteel1 = 0.185/2.; //equivalent thickness |
695 | const Float_t kHzTopAnodeSteel2 = 0.51/2.; //equivalent thickness |
696 | const Float_t kHzAnodeFR4 = 0.08/2.; //equivalent thickness |
697 | const Float_t kHzTopEarthFaceCu = 0.364/2.; //equivalent thickness |
698 | const Float_t kHzTopEarthProfileCu = 1.1/2.; //equivalent thickness |
699 | const Float_t kHzTopPositionerSteel = 1.45/2.; //should really be 2.125/2.; |
700 | const Float_t kHzTopGasSupportAl = 0.85/2.; //equivalent thickness |
5f91c9e8 |
701 | |
702 | // Pertaining to the vertical outer area |
d1cd2474 |
703 | const Float_t kHzVerticalCradleAl = 0.8/2.; //equivalent thickness |
704 | const Float_t kHzLateralSightAl = 0.975/2.; //equivalent thickness |
705 | const Float_t kHzLateralPosnInoxFace = 2.125/2.;//equivalent thickness |
706 | const Float_t kHzLatPosInoxProfM = 6.4/2.; //equivalent thickness |
707 | const Float_t kHzLatPosInoxProfNF = 1.45/2.; //equivalent thickness |
708 | const Float_t kHzLateralPosnAl = 0.5/2.; //equivalent thickness |
709 | const Float_t kHzVertEarthFaceCu = 0.367/2.; //equivalent thickness |
710 | const Float_t kHzVertBarSteel = 0.198/2.; //equivalent thickness |
711 | const Float_t kHzVertEarthProfCu = 1.1/2.; //equivalent thickness |
5f91c9e8 |
712 | |
713 | //_______________Parameter definitions in sequence _________ |
714 | |
715 | // InVFrame parameters |
d1cd2474 |
716 | const Float_t kHxInVFrame = 1.85/2.; |
717 | const Float_t kHyInVFrame = 73.95/2.; |
718 | const Float_t kHzInVFrame = kHzFrameThickness; |
ba030c0e |
719 | |
5f91c9e8 |
720 | //Flat 7.5mm vertical section |
d1cd2474 |
721 | const Float_t kHxV1mm = 0.75/2.; |
722 | const Float_t kHyV1mm = 1.85/2.; |
723 | const Float_t kHzV1mm = kHzFrameThickness; |
ba030c0e |
724 | |
5f91c9e8 |
725 | // OuterTopFrame Structure |
726 | // |
727 | // FRAME |
728 | // The frame is composed of a cuboid and two trapezoids |
729 | // (TopFrameAnode, TopFrameAnodeA, TopFrameAnodeB). |
730 | // Each shape is composed of two layers (Epoxy and Inox) and |
731 | // takes the frame's inner anode circuitry into account in the material budget. |
732 | // |
733 | // ANODE |
734 | // The overhanging anode part is composed froma cuboid and two trapezoids |
735 | // (TopAnode, TopAnode1, and TopAnode2). These surfaces neglect implanted |
736 | // resistors, but accounts for the major Cu, Pb/Sn, and FR4 material |
737 | // contributions. |
738 | // The stainless steel anode supports have been included. |
739 | // |
740 | // EARTHING (TopEarthFace, TopEarthProfile) |
741 | // Al GAS SUPPORT (TopGasSupport) |
742 | // |
743 | // ALIGNMENT (TopPositioner) - Alignment system, three sights per quarter |
744 | // chamber. This sight is forseen for the alignment of the horizontal level |
745 | // (parallel to the OY axis of LHC). Its position will be evaluated relative |
746 | // to a system of sights places on the cradles; |
747 | // |
748 | //--- |
ba030c0e |
749 | |
5f91c9e8 |
750 | //TopFrameAnode parameters - cuboid, 2 layers |
d1cd2474 |
751 | const Float_t kHxTFA = 34.1433/2.; |
752 | const Float_t kHyTFA = 7.75/2.; |
753 | const Float_t kHzTFAE = kHzOuterFrameEpoxy; // layer 1 thickness |
754 | const Float_t kHzTFAI = kHzOuterFrameInox; // layer 3 thickness |
ba030c0e |
755 | |
5f91c9e8 |
756 | // TopFrameAnodeA parameters - trapezoid, 2 layers |
d1cd2474 |
757 | const Float_t kHzFAAE = kHzOuterFrameEpoxy; // layer 1 thickness |
758 | const Float_t kHzFAAI = kHzOuterFrameInox; // layer 3 thickness |
759 | const Float_t kTetFAA = 0.; |
760 | const Float_t kPhiFAA = 0.; |
761 | const Float_t kH1FAA = 8.7/2.; |
762 | const Float_t kBl1FAA = 4.35/2.; |
763 | const Float_t kTl1FAA = 7.75/2.; |
764 | const Float_t kAlp1FAA = 11.06; |
765 | const Float_t kH2FAA = 8.7/2.; |
766 | const Float_t kBl2FAA = 4.35/2.; |
767 | const Float_t kTl2FAA = 7.75/2.; |
768 | const Float_t kAlp2FAA = 11.06; |
ba030c0e |
769 | |
5f91c9e8 |
770 | // TopFrameAnodeB parameters - trapezoid, 2 layers |
d1cd2474 |
771 | const Float_t kHzFABE = kHzOuterFrameEpoxy; // layer 1 thickness |
772 | const Float_t kHzFABI = kHzOuterFrameInox; // layer 3 thickness |
773 | const Float_t kTetFAB = 0.; |
774 | const Float_t kPhiFAB = 0.; |
775 | const Float_t kH1FAB = 8.70/2.; |
776 | const Float_t kBl1FAB = 0.; |
777 | const Float_t kTl1FAB = 4.35/2.; |
778 | const Float_t kAlp1FAB = 14.03; |
779 | const Float_t kH2FAB = 8.70/2.; |
780 | const Float_t kBl2FAB = 0.; |
781 | const Float_t kTl2FAB = 4.35/2.; |
782 | const Float_t kAlp2FAB = 14.03; |
ba030c0e |
783 | |
5f91c9e8 |
784 | // TopAnode parameters - cuboid (part 1 of 3 parts) |
d1cd2474 |
785 | const Float_t kHxTA1 = 16.2/2.; |
786 | const Float_t kHyTA1 = 3.5/2.; |
787 | const Float_t kHzTA11 = kHzTopAnodeSteel1; // layer 1 |
788 | const Float_t kHzTA12 = kHzAnodeFR4; // layer 2 |
5f91c9e8 |
789 | |
790 | // TopAnode parameters - trapezoid 1 (part 2 of 3 parts) |
d1cd2474 |
791 | const Float_t kHzTA21 = kHzTopAnodeSteel2; // layer 1 |
792 | const Float_t kHzTA22 = kHzAnodeFR4; // layer 2 |
793 | const Float_t kTetTA2 = 0.; |
794 | const Float_t kPhiTA2= 0.; |
795 | const Float_t kH1TA2 = 7.268/2.; |
796 | const Float_t kBl1TA2 = 2.03/2.; |
797 | const Float_t kTl1TA2 = 3.5/2.; |
798 | const Float_t kAlp1TA2 = 5.78; |
799 | const Float_t kH2TA2 = 7.268/2.; |
800 | const Float_t kBl2TA2 = 2.03/2.; |
801 | const Float_t kTl2TA2 = 3.5/2.; |
802 | const Float_t kAlp2TA2 = 5.78; |
5f91c9e8 |
803 | |
804 | // TopAnode parameters - trapezoid 2 (part 3 of 3 parts) |
d1cd2474 |
805 | const Float_t kHzTA3 = kHzAnodeFR4; // layer 1 |
806 | const Float_t kTetTA3 = 0.; |
807 | const Float_t kPhiTA3 = 0.; |
808 | const Float_t kH1TA3 = 7.268/2.; |
809 | const Float_t kBl1TA3 = 0.; |
810 | const Float_t kTl1TA3 = 2.03/2.; |
811 | const Float_t kAlp1TA3 = 7.95; |
812 | const Float_t kH2TA3 = 7.268/2.; |
813 | const Float_t kBl2TA3 = 0.; |
814 | const Float_t kTl2TA3 = 2.03/2.; |
815 | const Float_t kAlp2TA3 = 7.95; |
ba030c0e |
816 | |
5f91c9e8 |
817 | // TopEarthFace parameters - single trapezoid |
d1cd2474 |
818 | const Float_t kHzTEF = kHzTopEarthFaceCu; |
819 | const Float_t kTetTEF = 0.; |
820 | const Float_t kPhiTEF = 0.; |
821 | const Float_t kH1TEF = 1.200/2.; |
822 | const Float_t kBl1TEF = 21.323/2.; |
823 | const Float_t kTl1TEF = 17.963/2.; |
824 | const Float_t kAlp1TEF = -54.46; |
825 | const Float_t kH2TEF = 1.200/2.; |
826 | const Float_t kBl2TEF = 21.323/2.; |
827 | const Float_t kTl2TEF = 17.963/2.; |
828 | const Float_t kAlp2TEF = -54.46; |
5f91c9e8 |
829 | |
830 | // TopEarthProfile parameters - single trapezoid |
d1cd2474 |
831 | const Float_t kHzTEP = kHzTopEarthProfileCu; |
832 | const Float_t kTetTEP = 0.; |
833 | const Float_t kPhiTEP = 0.; |
834 | const Float_t kH1TEP = 0.40/2.; |
835 | const Float_t kBl1TEP = 31.766/2.; |
836 | const Float_t kTl1TEP = 30.535/2.; |
837 | const Float_t kAlp1TEP = -56.98; |
838 | const Float_t kH2TEP = 0.40/2.; |
839 | const Float_t kBl2TEP = 31.766/2.; |
840 | const Float_t kTl2TEP = 30.535/2.; |
841 | const Float_t kAlp2TEP = -56.98; |
5f91c9e8 |
842 | |
843 | // TopPositioner parameters - single Stainless Steel trapezoid |
d1cd2474 |
844 | const Float_t kHzTP = kHzTopPositionerSteel; |
845 | const Float_t kTetTP = 0.; |
846 | const Float_t kPhiTP = 0.; |
847 | const Float_t kH1TP = 3.00/2.; |
848 | const Float_t kBl1TP = 7.023/2.; |
849 | const Float_t kTl1TP = 7.314/2.; |
850 | const Float_t kAlp1TP = 2.78; |
851 | const Float_t kH2TP = 3.00/2.; |
852 | const Float_t kBl2TP = 7.023/2.; |
853 | const Float_t kTl2TP = 7.314/2.; |
854 | const Float_t kAlp2TP = 2.78; |
5f91c9e8 |
855 | |
856 | // TopGasSupport parameters - single cuboid |
d1cd2474 |
857 | const Float_t kHxTGS = 8.50/2.; |
858 | const Float_t kHyTGS = 3.00/2.; |
859 | const Float_t kHzTGS = kHzTopGasSupportAl; |
5f91c9e8 |
860 | |
861 | // OutEdgeFrame parameters - 4 trapezoidal sections, 2 layers of material |
862 | // |
863 | //--- |
864 | |
865 | // Trapezoid 1 |
d1cd2474 |
866 | const Float_t kHzOETFE = kHzOuterFrameEpoxy; // layer 1 |
867 | const Float_t kHzOETFI = kHzOuterFrameInox; // layer 3 |
ba030c0e |
868 | |
d1cd2474 |
869 | const Float_t kTetOETF = 0.; // common to all 4 trapezoids |
870 | const Float_t kPhiOETF = 0.; // common to all 4 trapezoids |
5f91c9e8 |
871 | |
d1cd2474 |
872 | const Float_t kH1OETF = 7.196/2.; // common to all 4 trapezoids |
873 | const Float_t kH2OETF = 7.196/2.; // common to all 4 trapezoids |
5f91c9e8 |
874 | |
d1cd2474 |
875 | const Float_t kBl1OETF1 = 3.75/2; |
876 | const Float_t kTl1OETF1 = 3.996/2.; |
877 | const Float_t kAlp1OETF1 = 0.98; |
5f91c9e8 |
878 | |
d1cd2474 |
879 | const Float_t kBl2OETF1 = 3.75/2; |
880 | const Float_t kTl2OETF1 = 3.996/2.; |
881 | const Float_t kAlp2OETF1 = 0.98; |
5f91c9e8 |
882 | |
883 | // Trapezoid 2 |
d1cd2474 |
884 | const Float_t kBl1OETF2 = 3.01/2.; |
885 | const Float_t kTl1OETF2 = 3.75/2; |
886 | const Float_t kAlp1OETF2 = 2.94; |
5f91c9e8 |
887 | |
d1cd2474 |
888 | const Float_t kBl2OETF2 = 3.01/2.; |
889 | const Float_t kTl2OETF2 = 3.75/2; |
890 | const Float_t kAlp2OETF2 = 2.94; |
5f91c9e8 |
891 | |
892 | // Trapezoid 3 |
b367fd8f |
893 | //const Float_t kBl1OETF3 = 1.767/2.; |
894 | //const Float_t kTl1OETF3 = 3.01/2.; |
895 | const Float_t kBl1OETF3 = 1.117/2.; |
896 | const Float_t kTl1OETF3 = 2.36/2.; |
d1cd2474 |
897 | const Float_t kAlp1OETF3 = 4.94; |
b367fd8f |
898 | // Fix (5) - overlap of SQ21 with 041M and 125M |
ba030c0e |
899 | |
b367fd8f |
900 | //const Float_t kBl2OETF3 = 1.767/2.; |
901 | //const Float_t kTl2OETF3 = 3.01/2.; |
902 | const Float_t kBl2OETF3 = 1.117/2.; |
903 | const Float_t kTl2OETF3 = 2.36/2.; |
d1cd2474 |
904 | const Float_t kAlp2OETF3 = 4.94; |
b367fd8f |
905 | // Fix (5) - overlap of SQ21 with 041M and 125M |
ba030c0e |
906 | |
5f91c9e8 |
907 | // Trapezoid 4 |
d1cd2474 |
908 | const Float_t kBl1OETF4 = 0.; |
909 | const Float_t kTl1OETF4 = 1.77/2.; |
910 | const Float_t kAlp1OETF4 = 7.01; |
ba030c0e |
911 | |
d1cd2474 |
912 | const Float_t kBl2OETF4 = 0.; |
913 | const Float_t kTl2OETF4 = 1.77/2.; |
914 | const Float_t kAlp2OETF4 = 7.01; |
5f91c9e8 |
915 | |
916 | // Frame Structure (OutVFrame): |
917 | // |
918 | // OutVFrame and corner (OutVFrame cuboid, OutVFrame trapezoid) |
919 | // EARTHING (VertEarthFaceCu,VertEarthSteel,VertEarthProfCu), |
920 | // DETECTOR POSITIONNING (SuppLateralPositionner, LateralPositionner), |
921 | // CRADLE (VertCradle), and |
922 | // ALIGNMENT (LateralSightSupport, LateralSight) |
923 | // |
924 | //--- |
925 | |
926 | // OutVFrame parameters - cuboid |
d1cd2474 |
927 | const Float_t kHxOutVFrame = 1.85/2.; |
928 | const Float_t kHyOutVFrame = 46.23/2.; |
929 | const Float_t kHzOutVFrame = kHzFrameThickness; |
5f91c9e8 |
930 | |
931 | // OutVFrame corner parameters - trapezoid |
d1cd2474 |
932 | const Float_t kHzOCTF = kHzFrameThickness; |
933 | const Float_t kTetOCTF = 0.; |
934 | const Float_t kPhiOCTF = 0.; |
935 | const Float_t kH1OCTF = 1.85/2.; |
936 | const Float_t kBl1OCTF = 0.; |
937 | const Float_t kTl1OCTF = 3.66/2.; |
938 | const Float_t kAlp1OCTF = 44.67; |
939 | const Float_t kH2OCTF = 1.85/2.; |
940 | const Float_t kBl2OCTF = 0.; |
941 | const Float_t kTl2OCTF = 3.66/2.; |
942 | const Float_t kAlp2OCTF = 44.67; |
5f91c9e8 |
943 | |
944 | // VertEarthFaceCu parameters - single trapezoid |
d1cd2474 |
945 | const Float_t kHzVFC = kHzVertEarthFaceCu; |
946 | const Float_t kTetVFC = 0.; |
947 | const Float_t kPhiVFC = 0.; |
948 | const Float_t kH1VFC = 1.200/2.; |
949 | const Float_t kBl1VFC = 46.11/2.; |
950 | const Float_t kTl1VFC = 48.236/2.; |
951 | const Float_t kAlp1VFC = 41.54; |
952 | const Float_t kH2VFC = 1.200/2.; |
953 | const Float_t kBl2VFC = 46.11/2.; |
954 | const Float_t kTl2VFC = 48.236/2.; |
955 | const Float_t kAlp2VFC = 41.54; |
5f91c9e8 |
956 | |
957 | // VertEarthSteel parameters - single trapezoid |
d1cd2474 |
958 | const Float_t kHzVES = kHzVertBarSteel; |
959 | const Float_t kTetVES = 0.; |
960 | const Float_t kPhiVES = 0.; |
961 | const Float_t kH1VES = 1.200/2.; |
962 | const Float_t kBl1VES = 30.486/2.; |
963 | const Float_t kTl1VES = 32.777/2.; |
964 | const Float_t kAlp1VES = 43.67; |
965 | const Float_t kH2VES = 1.200/2.; |
966 | const Float_t kBl2VES = 30.486/2.; |
967 | const Float_t kTl2VES = 32.777/2.; |
968 | const Float_t kAlp2VES = 43.67; |
5f91c9e8 |
969 | |
970 | // VertEarthProfCu parameters - single trapezoid |
d1cd2474 |
971 | const Float_t kHzVPC = kHzVertEarthProfCu; |
972 | const Float_t kTetVPC = 0.; |
973 | const Float_t kPhiVPC = 0.; |
974 | const Float_t kH1VPC = 0.400/2.; |
975 | const Float_t kBl1VPC = 29.287/2.; |
976 | const Float_t kTl1VPC = 30.091/2.; |
977 | const Float_t kAlp1VPC = 45.14; |
978 | const Float_t kH2VPC = 0.400/2.; |
979 | const Float_t kBl2VPC = 29.287/2.; |
980 | const Float_t kTl2VPC = 30.091/2.; |
981 | const Float_t kAlp2VPC = 45.14; |
5f91c9e8 |
982 | |
983 | // SuppLateralPositionner - single cuboid |
d1cd2474 |
984 | const Float_t kHxSLP = 2.80/2.; |
985 | const Float_t kHySLP = 5.00/2.; |
986 | const Float_t kHzSLP = kHzLateralPosnAl; |
5f91c9e8 |
987 | |
988 | // LateralPositionner - squared off U bend, face view |
d1cd2474 |
989 | const Float_t kHxLPF = 5.2/2.; |
990 | const Float_t kHyLPF = 3.0/2.; |
991 | const Float_t kHzLPF = kHzLateralPosnInoxFace; |
5f91c9e8 |
992 | |
993 | // LateralPositionner - squared off U bend, profile view |
d1cd2474 |
994 | const Float_t kHxLPP = 0.425/2.; |
995 | const Float_t kHyLPP = 3.0/2.; |
996 | const Float_t kHzLPP = kHzLatPosInoxProfM; // middle layer |
997 | const Float_t kHzLPNF = kHzLatPosInoxProfNF; // near and far layers |
5f91c9e8 |
998 | |
999 | // VertCradle, 3 layers (copies), each composed of 4 trapezoids |
1000 | // VertCradleA |
d1cd2474 |
1001 | const Float_t kHzVC1 = kHzVerticalCradleAl; |
1002 | const Float_t kTetVC1 = 0.; |
1003 | const Float_t kPhiVC1 = 0.; |
1004 | const Float_t kH1VC1 = 10.25/2.; |
1005 | const Float_t kBl1VC1 = 3.70/2.; |
1006 | const Float_t kTl1VC1 = 0.; |
1007 | const Float_t kAlp1VC1 = -10.23; |
1008 | const Float_t kH2VC1 = 10.25/2.; |
1009 | const Float_t kBl2VC1 = 3.70/2.; |
1010 | const Float_t kTl2VC1 = 0.; |
1011 | const Float_t kAlp2VC1 = -10.23; |
5f91c9e8 |
1012 | |
1013 | // VertCradleB |
d1cd2474 |
1014 | const Float_t kHzVC2 = kHzVerticalCradleAl; |
1015 | const Float_t kTetVC2 = 0.; |
1016 | const Float_t kPhiVC2 = 0.; |
1017 | const Float_t kH1VC2 = 10.25/2.; |
1018 | const Float_t kBl1VC2 = 6.266/2.; |
1019 | const Float_t kTl1VC2 = 3.70/2.; |
1020 | const Float_t kAlp1VC2 = -7.13; |
1021 | const Float_t kH2VC2 = 10.25/2.; |
1022 | const Float_t kBl2VC2 = 6.266/2.; |
1023 | const Float_t kTl2VC2 = 3.70/2.; |
1024 | const Float_t kAlp2VC2 = -7.13; |
5f91c9e8 |
1025 | |
1026 | // VertCradleC |
d1cd2474 |
1027 | const Float_t kHzVC3 = kHzVerticalCradleAl; |
1028 | const Float_t kTetVC3 = 0.; |
1029 | const Float_t kPhiVC3 = 0.; |
1030 | const Float_t kH1VC3 = 10.25/2.; |
1031 | const Float_t kBl1VC3 = 7.75/2.; |
1032 | const Float_t kTl1VC3 = 6.266/2.; |
1033 | const Float_t kAlp1VC3 = -4.14; |
1034 | const Float_t kH2VC3 = 10.25/2.; |
1035 | const Float_t kBl2VC3 = 7.75/2.; |
1036 | const Float_t kTl2VC3 = 6.266/2.; |
1037 | const Float_t kAlp2VC3 = -4.14; |
5f91c9e8 |
1038 | |
1039 | // VertCradleD |
d1cd2474 |
1040 | const Float_t kHzVC4 = kHzVerticalCradleAl; |
1041 | const Float_t kTetVC4 = 0.; |
1042 | const Float_t kPhiVC4 = 0.; |
1043 | const Float_t kH1VC4 = 10.27/2.; |
1044 | const Float_t kBl1VC4 = 8.273/2.; |
1045 | const Float_t kTl1VC4 = 7.75/2.; |
1046 | const Float_t kAlp1VC4 = -1.46; |
1047 | const Float_t kH2VC4 = 10.27/2.; |
1048 | const Float_t kBl2VC4 = 8.273/2.; |
1049 | const Float_t kTl2VC4 = 7.75/2.; |
1050 | const Float_t kAlp2VC4 = -1.46; |
5f91c9e8 |
1051 | |
1052 | // LateralSightSupport - single trapezoid |
d1cd2474 |
1053 | const Float_t kHzVSS = kHzLateralSightAl; |
1054 | const Float_t kTetVSS = 0.; |
1055 | const Float_t kPhiVSS = 0.; |
1056 | const Float_t kH1VSS = 5.00/2.; |
1057 | const Float_t kBl1VSS = 7.747/2; |
1058 | const Float_t kTl1VSS = 7.188/2.; |
1059 | const Float_t kAlp1VSS = -3.20; |
1060 | const Float_t kH2VSS = 5.00/2.; |
1061 | const Float_t kBl2VSS = 7.747/2.; |
1062 | const Float_t kTl2VSS = 7.188/2.; |
1063 | const Float_t kAlp2VSS = -3.20; |
5f91c9e8 |
1064 | |
1065 | // LateralSight (reference point) - 3 per quadrant, only 1 programmed for now |
d1cd2474 |
1066 | const Float_t kVSInRad = 0.6; |
1067 | const Float_t kVSOutRad = 1.3; |
1068 | const Float_t kVSLen = kHzFrameThickness; |
5f91c9e8 |
1069 | |
1070 | //--- |
ba030c0e |
1071 | |
5f91c9e8 |
1072 | // InHFrame parameters |
d1cd2474 |
1073 | const Float_t kHxInHFrame = 75.8/2.; |
1074 | const Float_t kHyInHFrame = 1.85/2.; |
1075 | const Float_t kHzInHFrame = kHzFrameThickness; |
5f91c9e8 |
1076 | |
1077 | //Flat 7.5mm horizontal section |
d1cd2474 |
1078 | const Float_t kHxH1mm = 1.85/2.; |
1079 | const Float_t kHyH1mm = 0.75/2.; |
1080 | const Float_t kHzH1mm = kHzFrameThickness; |
ba030c0e |
1081 | |
5f91c9e8 |
1082 | //--- |
ba030c0e |
1083 | |
5f91c9e8 |
1084 | // InArcFrame parameters |
d1cd2474 |
1085 | const Float_t kIAF = 15.70; |
1086 | const Float_t kOAF = 17.55; |
1087 | const Float_t kHzAF = kHzFrameThickness; |
1088 | const Float_t kAFphi1 = 0.0; |
1089 | const Float_t kAFphi2 = 90.0; |
ba030c0e |
1090 | |
5f91c9e8 |
1091 | //--- |
ba030c0e |
1092 | |
5f91c9e8 |
1093 | // ScrewsInFrame parameters HEAD |
d1cd2474 |
1094 | const Float_t kSCRUHMI = 0.; |
1095 | const Float_t kSCRUHMA = 0.690/2.; |
1096 | const Float_t kSCRUHLE = 0.4/2.; |
5f91c9e8 |
1097 | // ScrewsInFrame parameters MIDDLE |
d1cd2474 |
1098 | const Float_t kSCRUMMI = 0.; |
1099 | const Float_t kSCRUMMA = 0.39/2.; |
1100 | const Float_t kSCRUMLE = kHzFrameThickness; |
5f91c9e8 |
1101 | // ScrewsInFrame parameters NUT |
d1cd2474 |
1102 | const Float_t kSCRUNMI = 0.; |
1103 | const Float_t kSCRUNMA = 0.78/2.; |
1104 | const Float_t kSCRUNLE = 0.8/2.; |
5f91c9e8 |
1105 | |
1106 | // ___________________Make volumes________________________ |
ba030c0e |
1107 | |
5f91c9e8 |
1108 | Float_t par[11]; |
1109 | Float_t posX,posY,posZ; |
ba030c0e |
1110 | |
5f91c9e8 |
1111 | // Quadrant volume TUBS1, positioned at the end |
1112 | par[0] = fgkMotherIR1; |
1113 | par[1] = fgkMotherOR1; |
1114 | par[2] = fgkMotherThick1; |
1115 | par[3] = fgkMotherPhiL1; |
1116 | par[4] = fgkMotherPhiU1; |
1117 | gMC->Gsvolu(QuadrantMLayerName(chamber),"TUBS",idAir,par,5); |
ba030c0e |
1118 | |
91111b9c |
1119 | // Replace the volume shape with a composite shape |
1120 | // with substracted overlap with beam shield (YMOT) |
1121 | |
38baba3c |
1122 | if ( gMC->IsRootGeometrySupported() ) { |
91111b9c |
1123 | |
1124 | // Get shape |
1125 | TGeoVolume* mlayer |
1126 | = gGeoManager->FindVolumeFast(QuadrantMLayerName(chamber)); |
1127 | if ( !mlayer ) { |
1128 | AliErrorStream() |
1129 | << "Quadrant volume " << QuadrantMLayerName(chamber) << " not found" |
1130 | << endl; |
1131 | } |
1132 | else { |
1133 | TGeoShape* quadrant = mlayer->GetShape(); |
1134 | quadrant->SetName("quadrant"); |
1135 | |
1136 | // Beam shield recess |
1137 | par[0] = 0; |
1138 | par[1] = 15.4; |
1139 | par[2] = fgkMotherThick1; |
1140 | new TGeoTube("shield_tube", par[0], par[1], par[2]); |
1141 | |
1142 | // Displacement |
1143 | posX = 2.6; |
1144 | posY = 2.6; |
1145 | posZ = 0; |
1146 | TGeoTranslation* displacement |
1147 | = new TGeoTranslation("TR", posX, posY, posZ); |
1148 | displacement->RegisterYourself(); |
1149 | |
1150 | // Composite shape |
1151 | TGeoShape* composite |
1152 | = new TGeoCompositeShape("composite", "quadrant-shield_tube:TR"); |
1153 | |
1154 | // Reset shape to volume |
1155 | mlayer->SetShape(composite); |
1156 | } |
1157 | } |
1158 | |
5f91c9e8 |
1159 | // Quadrant volume TUBS2, positioned at the end |
1160 | par[0] = fgkMotherIR2; |
1161 | par[1] = fgkMotherOR2; |
1162 | par[2] = fgkMotherThick2; |
1163 | par[3] = fgkMotherPhiL2; |
1164 | par[4] = fgkMotherPhiU2; |
ba030c0e |
1165 | |
5f91c9e8 |
1166 | gMC->Gsvolu(QuadrantNLayerName(chamber),"TUBS",idAir,par,5); |
1167 | gMC->Gsvolu(QuadrantFLayerName(chamber),"TUBS",idAir,par,5); |
ba030c0e |
1168 | |
5f91c9e8 |
1169 | if (chamber==1) { |
1170 | // InVFrame |
d1cd2474 |
1171 | par[0] = kHxInVFrame; |
1172 | par[1] = kHyInVFrame; |
1173 | par[2] = kHzInVFrame; |
5f91c9e8 |
1174 | gMC->Gsvolu("SQ00","BOX",idFrameEpoxy,par,3); |
1175 | |
1176 | //Flat 1mm vertical section |
d1cd2474 |
1177 | par[0] = kHxV1mm; |
1178 | par[1] = kHyV1mm; |
1179 | par[2] = kHzV1mm; |
5f91c9e8 |
1180 | gMC->Gsvolu("SQ01","BOX",idFrameEpoxy,par,3); |
1181 | |
1182 | // OutTopFrame |
1183 | // |
1184 | // - 3 components (a cuboid and 2 trapezes) and 2 layers (Epoxy/Inox) |
1185 | // |
1186 | //--- |
ba030c0e |
1187 | |
5f91c9e8 |
1188 | // TopFrameAnode - layer 1 of 2 |
d1cd2474 |
1189 | par[0] = kHxTFA; |
1190 | par[1] = kHyTFA; |
1191 | par[2] = kHzTFAE; |
5f91c9e8 |
1192 | gMC->Gsvolu("SQ02","BOX",idFrameEpoxy,par,3); |
1193 | |
1194 | // TopFrameAnode - layer 2 of 2 |
d1cd2474 |
1195 | par[2] = kHzTFAI; |
5f91c9e8 |
1196 | gMC->Gsvolu("SQ03","BOX",idInox,par,3); |
1197 | |
1198 | // TopFrameAnodeA - layer 1 of 2 |
d1cd2474 |
1199 | par[0] = kHzFAAE; |
1200 | par[1] = kTetFAA; |
1201 | par[2] = kPhiFAA; |
1202 | par[3] = kH1FAA; |
1203 | par[4] = kBl1FAA; |
1204 | par[5] = kTl1FAA; |
1205 | par[6] = kAlp1FAA; |
1206 | par[7] = kH2FAA; |
1207 | par[8] = kBl2FAA; |
1208 | par[9] = kTl2FAA; |
1209 | par[10] = kAlp2FAA; |
5f91c9e8 |
1210 | gMC->Gsvolu("SQ04","TRAP",idFrameEpoxy,par,11); |
1211 | |
1212 | // TopFrameAnodeA - layer 2 of 2 |
d1cd2474 |
1213 | par[0] = kHzFAAI; |
5f91c9e8 |
1214 | gMC->Gsvolu("SQ05","TRAP",idInox,par,11); |
ba030c0e |
1215 | |
5f91c9e8 |
1216 | // TopFrameAnodeB - layer 1 of 2 |
d1cd2474 |
1217 | par[0] = kHzFABE; |
1218 | par[1] = kTetFAB; |
1219 | par[2] = kPhiFAB; |
1220 | par[3] = kH1FAB; |
1221 | par[4] = kBl1FAB; |
1222 | par[5] = kTl1FAB; |
1223 | par[6] = kAlp1FAB; |
1224 | par[7] = kH2FAB; |
1225 | par[8] = kBl2FAB; |
1226 | par[9] = kTl2FAB; |
1227 | par[10] = kAlp2FAB; |
5f91c9e8 |
1228 | gMC->Gsvolu("SQ06","TRAP",idFrameEpoxy,par,11); |
1229 | |
1230 | // OutTopTrapFrameB - layer 2 of 2 |
d1cd2474 |
1231 | par[0] = kHzFABI; |
5f91c9e8 |
1232 | gMC->Gsvolu("SQ07","TRAP",idInox,par,11); |
1233 | |
1234 | // TopAnode1 - layer 1 of 2 |
d1cd2474 |
1235 | par[0] = kHxTA1; |
1236 | par[1] = kHyTA1; |
1237 | par[2] = kHzTA11; |
5f91c9e8 |
1238 | gMC->Gsvolu("SQ08","BOX",idInox,par,3); |
1239 | |
1240 | // TopAnode1 - layer 2 of 2 |
d1cd2474 |
1241 | par[2] = kHzTA12; |
5f91c9e8 |
1242 | gMC->Gsvolu("SQ09","BOX",idFR4,par,11); |
1243 | |
1244 | // TopAnode2 - layer 1 of 2 |
d1cd2474 |
1245 | par[0] = kHzTA21; |
1246 | par[1] = kTetTA2; |
1247 | par[2] = kPhiTA2; |
1248 | par[3] = kH1TA2; |
1249 | par[4] = kBl1TA2; |
1250 | par[5] = kTl1TA2; |
1251 | par[6] = kAlp1TA2; |
1252 | par[7] = kH2TA2; |
1253 | par[8] = kBl2TA2; |
1254 | par[9] = kTl2TA2; |
1255 | par[10] = kAlp2TA2; |
5f91c9e8 |
1256 | gMC->Gsvolu("SQ10","TRAP",idInox,par,11); |
1257 | |
1258 | // TopAnode2 - layer 2 of 2 |
d1cd2474 |
1259 | par[0] = kHzTA22; |
5f91c9e8 |
1260 | gMC->Gsvolu("SQ11","TRAP",idFR4,par,11); |
1261 | |
1262 | // TopAnode3 - layer 1 of 1 |
d1cd2474 |
1263 | par[0] = kHzTA3; |
1264 | par[1] = kTetTA3; |
1265 | par[2] = kPhiTA3; |
1266 | par[3] = kH1TA3; |
1267 | par[4] = kBl1TA3; |
1268 | par[5] = kTl1TA3; |
1269 | par[6] = kAlp1TA3; |
1270 | par[7] = kH2TA3; |
1271 | par[8] = kBl2TA3; |
1272 | par[9] = kTl2TA3; |
1273 | par[10] = kAlp2TA3; |
5f91c9e8 |
1274 | gMC->Gsvolu("SQ12","TRAP",idFR4,par,11); |
1275 | |
1276 | // TopEarthFace |
d1cd2474 |
1277 | par[0] = kHzTEF; |
1278 | par[1] = kTetTEF; |
1279 | par[2] = kPhiTEF; |
1280 | par[3] = kH1TEF; |
1281 | par[4] = kBl1TEF; |
1282 | par[5] = kTl1TEF; |
1283 | par[6] = kAlp1TEF; |
1284 | par[7] = kH2TEF; |
1285 | par[8] = kBl2TEF; |
1286 | par[9] = kTl2TEF; |
1287 | par[10] = kAlp2TEF; |
5f91c9e8 |
1288 | gMC->Gsvolu("SQ13","TRAP",idCopper,par,11); |
1289 | |
1290 | // TopEarthProfile |
d1cd2474 |
1291 | par[0] = kHzTEP; |
1292 | par[1] = kTetTEP; |
1293 | par[2] = kPhiTEP; |
1294 | par[3] = kH1TEP; |
1295 | par[4] = kBl1TEP; |
1296 | par[5] = kTl1TEP; |
1297 | par[6] = kAlp1TEP; |
1298 | par[7] = kH2TEP; |
1299 | par[8] = kBl2TEP; |
1300 | par[9] = kTl2TEP; |
1301 | par[10] = kAlp2TEP; |
5f91c9e8 |
1302 | gMC->Gsvolu("SQ14","TRAP",idCopper,par,11); |
1303 | |
1304 | // TopGasSupport |
d1cd2474 |
1305 | par[0] = kHxTGS; |
1306 | par[1] = kHyTGS; |
1307 | par[2] = kHzTGS; |
5f91c9e8 |
1308 | gMC->Gsvolu("SQ15","BOX",idAlu,par,3); |
1309 | |
1310 | // TopPositioner parameters - single Stainless Steel trapezoid |
d1cd2474 |
1311 | par[0] = kHzTP; |
1312 | par[1] = kTetTP; |
1313 | par[2] = kPhiTP; |
1314 | par[3] = kH1TP; |
1315 | par[4] = kBl1TP; |
1316 | par[5] = kTl1TP; |
1317 | par[6] = kAlp1TP; |
1318 | par[7] = kH2TP; |
1319 | par[8] = kBl2TP; |
1320 | par[9] = kTl2TP; |
1321 | par[10] = kAlp2TP; |
5f91c9e8 |
1322 | gMC->Gsvolu("SQ16","TRAP",idInox,par,11); |
ba030c0e |
1323 | |
5f91c9e8 |
1324 | // |
1325 | // OutEdgeTrapFrame Epoxy = (4 trapezes)*2 copies*2 layers (Epoxy/Inox) |
1326 | // |
1327 | //--- |
1328 | // Trapezoid 1 - 2 layers |
d1cd2474 |
1329 | par[1] = kTetOETF; |
1330 | par[2] = kPhiOETF; |
1331 | par[3] = kH1OETF; |
1332 | par[4] = kBl1OETF1; |
1333 | par[5] = kTl1OETF1; |
1334 | par[6] = kAlp1OETF1; |
1335 | par[7] = kH2OETF; |
1336 | par[8] = kBl2OETF1; |
1337 | par[9] = kTl2OETF1; |
1338 | par[10] = kAlp2OETF1; |
5f91c9e8 |
1339 | |
d1cd2474 |
1340 | par[0] = kHzOETFE; |
5f91c9e8 |
1341 | gMC->Gsvolu("SQ17","TRAP",idFrameEpoxy,par,11); |
d1cd2474 |
1342 | par[0] = kHzOETFI; |
5f91c9e8 |
1343 | gMC->Gsvolu("SQ18","TRAP",idInox,par,11); |
1344 | |
1345 | // Trapezoid 2 - 2 layers |
d1cd2474 |
1346 | par[4] = kBl1OETF2; |
1347 | par[5] = kTl1OETF2; |
1348 | par[6] = kAlp1OETF2; |
5f91c9e8 |
1349 | |
d1cd2474 |
1350 | par[8] = kBl2OETF2; |
1351 | par[9] = kTl2OETF2; |
1352 | par[10] = kAlp2OETF2; |
5f91c9e8 |
1353 | |
d1cd2474 |
1354 | par[0] = kHzOETFE; |
5f91c9e8 |
1355 | gMC->Gsvolu("SQ19","TRAP",idFrameEpoxy,par,11); |
d1cd2474 |
1356 | par[0] = kHzOETFI; |
5f91c9e8 |
1357 | gMC->Gsvolu("SQ20","TRAP",idInox,par,11); |
1358 | |
1359 | // Trapezoid 3 - 2 layers |
d1cd2474 |
1360 | par[4] = kBl1OETF3; |
1361 | par[5] = kTl1OETF3; |
1362 | par[6] = kAlp1OETF3; |
5f91c9e8 |
1363 | |
d1cd2474 |
1364 | par[8] = kBl2OETF3; |
1365 | par[9] = kTl2OETF3; |
1366 | par[10] = kAlp2OETF3; |
5f91c9e8 |
1367 | |
d1cd2474 |
1368 | par[0] = kHzOETFE; |
5f91c9e8 |
1369 | gMC->Gsvolu("SQ21","TRAP",idFrameEpoxy,par,11); |
d1cd2474 |
1370 | par[0] = kHzOETFI; |
5f91c9e8 |
1371 | gMC->Gsvolu("SQ22","TRAP",idInox,par,11); |
1372 | |
1373 | // Trapezoid 4 - 2 layers |
ba030c0e |
1374 | |
d1cd2474 |
1375 | par[4] = kBl1OETF4; |
1376 | par[5] = kTl1OETF4; |
1377 | par[6] = kAlp1OETF4; |
ba030c0e |
1378 | |
d1cd2474 |
1379 | par[8] = kBl2OETF4; |
1380 | par[9] = kTl2OETF4; |
1381 | par[10] = kAlp2OETF4; |
5f91c9e8 |
1382 | |
d1cd2474 |
1383 | par[0] = kHzOETFE; |
5f91c9e8 |
1384 | gMC->Gsvolu("SQ23","TRAP",idFrameEpoxy,par,11); |
d1cd2474 |
1385 | par[0] = kHzOETFI; |
5f91c9e8 |
1386 | gMC->Gsvolu("SQ24","TRAP",idInox,par,11); |
ba030c0e |
1387 | |
5f91c9e8 |
1388 | //--- |
1389 | // OutVFrame |
d1cd2474 |
1390 | par[0] = kHxOutVFrame; |
1391 | par[1] = kHyOutVFrame; |
1392 | par[2] = kHzOutVFrame; |
5f91c9e8 |
1393 | gMC->Gsvolu("SQ25","BOX",idFrameEpoxy,par,3); |
d1cd2474 |
1394 | |
5f91c9e8 |
1395 | // OutVFrame corner |
d1cd2474 |
1396 | par[0] = kHzOCTF; |
1397 | par[1] = kTetOCTF; |
1398 | par[2] = kPhiOCTF; |
1399 | par[3] = kH1OCTF; |
1400 | par[4] = kBl1OCTF; |
1401 | par[5] = kTl1OCTF; |
1402 | par[6] = kAlp1OCTF; |
1403 | par[7] = kH2OCTF; |
1404 | par[8] = kBl2OCTF; |
1405 | par[9] = kTl2OCTF; |
1406 | par[10] = kAlp2OCTF; |
5f91c9e8 |
1407 | gMC->Gsvolu("SQ26","TRAP",idFrameEpoxy,par,11); |
1408 | |
1409 | // EarthFaceCu trapezoid |
d1cd2474 |
1410 | par[0] = kHzVFC; |
1411 | par[1] = kTetVFC; |
1412 | par[2] = kPhiVFC; |
1413 | par[3] = kH1VFC; |
1414 | par[4] = kBl1VFC; |
1415 | par[5] = kTl1VFC; |
1416 | par[6] = kAlp1VFC; |
1417 | par[7] = kH2VFC; |
1418 | par[8] = kBl2VFC; |
1419 | par[9] = kTl2VFC; |
1420 | par[10] = kAlp2VFC; |
5f91c9e8 |
1421 | gMC->Gsvolu("SQ27","TRAP",idCopper,par,11); |
1422 | |
1423 | // VertEarthSteel trapezoid |
d1cd2474 |
1424 | par[0] = kHzVES; |
1425 | par[1] = kTetVES; |
1426 | par[2] = kPhiVES; |
1427 | par[3] = kH1VES; |
1428 | par[4] = kBl1VES; |
1429 | par[5] = kTl1VES; |
1430 | par[6] = kAlp1VES; |
1431 | par[7] = kH2VES; |
1432 | par[8] = kBl2VES; |
1433 | par[9] = kTl2VES; |
1434 | par[10] = kAlp2VES; |
5f91c9e8 |
1435 | gMC->Gsvolu("SQ28","TRAP",idInox,par,11); |
1436 | |
1437 | // VertEarthProfCu trapezoid |
d1cd2474 |
1438 | par[0] = kHzVPC; |
1439 | par[1] = kTetVPC; |
1440 | par[2] = kPhiVPC; |
1441 | par[3] = kH1VPC; |
1442 | par[4] = kBl1VPC; |
1443 | par[5] = kTl1VPC; |
1444 | par[6] = kAlp1VPC; |
1445 | par[7] = kH2VPC; |
1446 | par[8] = kBl2VPC; |
1447 | par[9] = kTl2VPC; |
1448 | par[10] = kAlp2VPC; |
5f91c9e8 |
1449 | gMC->Gsvolu("SQ29","TRAP",idCopper,par,11); |
1450 | |
1451 | // SuppLateralPositionner cuboid |
d1cd2474 |
1452 | par[0] = kHxSLP; |
1453 | par[1] = kHySLP; |
1454 | par[2] = kHzSLP; |
5f91c9e8 |
1455 | gMC->Gsvolu("SQ30","BOX",idAlu,par,3); |
1456 | |
1457 | // LateralPositionerFace |
d1cd2474 |
1458 | par[0] = kHxLPF; |
1459 | par[1] = kHyLPF; |
1460 | par[2] = kHzLPF; |
5f91c9e8 |
1461 | gMC->Gsvolu("SQ31","BOX",idInox,par,3); |
1462 | |
1463 | // LateralPositionerProfile |
d1cd2474 |
1464 | par[0] = kHxLPP; |
1465 | par[1] = kHyLPP; |
1466 | par[2] = kHzLPP; |
5f91c9e8 |
1467 | gMC->Gsvolu("SQ32","BOX",idInox,par,3); // middle layer |
1468 | |
d1cd2474 |
1469 | par[0] = kHxLPP; |
1470 | par[1] = kHyLPP; |
1471 | par[2] = kHzLPNF; |
5f91c9e8 |
1472 | gMC->Gsvolu("SQ33","BOX",idInox,par,3); // near and far layers |
1473 | |
1474 | // VertCradleA - 1st trapezoid |
d1cd2474 |
1475 | par[0] = kHzVC1; |
1476 | par[1] = kTetVC1; |
1477 | par[2] = kPhiVC1; |
1478 | par[3] = kH1VC1; |
1479 | par[4] = kBl1VC1; |
1480 | par[5] = kTl1VC1; |
1481 | par[6] = kAlp1VC1; |
1482 | par[7] = kH2VC1; |
1483 | par[8] = kBl2VC1; |
1484 | par[9] = kTl2VC1; |
1485 | par[10] = kAlp2VC1; |
5f91c9e8 |
1486 | gMC->Gsvolu("SQ34","TRAP",idAlu,par,11); |
ba030c0e |
1487 | |
5f91c9e8 |
1488 | // VertCradleB - 2nd trapezoid |
d1cd2474 |
1489 | par[0] = kHzVC2; |
1490 | par[1] = kTetVC2; |
1491 | par[2] = kPhiVC2; |
1492 | par[3] = kH1VC2; |
1493 | par[4] = kBl1VC2; |
1494 | par[5] = kTl1VC2; |
1495 | par[6] = kAlp1VC2; |
1496 | par[7] = kH2VC2; |
1497 | par[8] = kBl2VC2; |
1498 | par[9] = kTl2VC2; |
1499 | par[10] = kAlp2VC2; |
5f91c9e8 |
1500 | gMC->Gsvolu("SQ35","TRAP",idAlu,par,11); |
1501 | |
1502 | // VertCradleC - 3rd trapezoid |
d1cd2474 |
1503 | par[0] = kHzVC3; |
1504 | par[1] = kTetVC3; |
1505 | par[2] = kPhiVC3; |
1506 | par[3] = kH1VC3; |
1507 | par[4] = kBl1VC3; |
1508 | par[5] = kTl1VC3; |
1509 | par[6] = kAlp1VC3; |
1510 | par[7] = kH2VC3; |
1511 | par[8] = kBl2VC3; |
1512 | par[9] = kTl2VC3; |
1513 | par[10] = kAlp2VC3; |
5f91c9e8 |
1514 | gMC->Gsvolu("SQ36","TRAP",idAlu,par,11); |
1515 | |
1516 | // VertCradleD - 4th trapezoid |
d1cd2474 |
1517 | par[0] = kHzVC4; |
1518 | par[1] = kTetVC4; |
1519 | par[2] = kPhiVC4; |
1520 | par[3] = kH1VC4; |
1521 | par[4] = kBl1VC4; |
1522 | par[5] = kTl1VC4; |
1523 | par[6] = kAlp1VC4; |
1524 | par[7] = kH2VC4; |
1525 | par[8] = kBl2VC4; |
1526 | par[9] = kTl2VC4; |
1527 | par[10] = kAlp2VC4; |
5f91c9e8 |
1528 | gMC->Gsvolu("SQ37","TRAP",idAlu,par,11); |
1529 | |
1530 | // LateralSightSupport trapezoid |
d1cd2474 |
1531 | par[0] = kHzVSS; |
1532 | par[1] = kTetVSS; |
1533 | par[2] = kPhiVSS; |
1534 | par[3] = kH1VSS; |
1535 | par[4] = kBl1VSS; |
1536 | par[5] = kTl1VSS; |
1537 | par[6] = kAlp1VSS; |
1538 | par[7] = kH2VSS; |
1539 | par[8] = kBl2VSS; |
1540 | par[9] = kTl2VSS; |
1541 | par[10] = kAlp2VSS; |
5f91c9e8 |
1542 | gMC->Gsvolu("SQ38","TRAP",idAlu,par,11); |
1543 | |
1544 | // LateralSight |
d1cd2474 |
1545 | par[0] = kVSInRad; |
1546 | par[1] = kVSOutRad; |
1547 | par[2] = kVSLen; |
5f91c9e8 |
1548 | gMC->Gsvolu("SQ39","TUBE",idFrameEpoxy,par,3); |
1549 | |
1550 | //--- |
1551 | // InHFrame |
d1cd2474 |
1552 | par[0] = kHxInHFrame; |
1553 | par[1] = kHyInHFrame; |
1554 | par[2] = kHzInHFrame; |
5f91c9e8 |
1555 | gMC->Gsvolu("SQ40","BOX",idFrameEpoxy,par,3); |
1556 | |
1557 | //Flat 7.5mm horizontal section |
d1cd2474 |
1558 | par[0] = kHxH1mm; |
1559 | par[1] = kHyH1mm; |
1560 | par[2] = kHzH1mm; |
5f91c9e8 |
1561 | gMC->Gsvolu("SQ41","BOX",idFrameEpoxy,par,3); |
1562 | |
1563 | // InArcFrame |
d1cd2474 |
1564 | par[0] = kIAF; |
1565 | par[1] = kOAF; |
1566 | par[2] = kHzAF; |
1567 | par[3] = kAFphi1; |
1568 | par[4] = kAFphi2; |
5f91c9e8 |
1569 | |
1570 | gMC->Gsvolu("SQ42","TUBS",idFrameEpoxy,par,5); |
1571 | |
1572 | //--- |
1573 | // ScrewsInFrame - 3 sections in order to avoid overlapping volumes |
1574 | // Screw Head, in air |
d1cd2474 |
1575 | par[0] = kSCRUHMI; |
1576 | par[1] = kSCRUHMA; |
1577 | par[2] = kSCRUHLE; |
5f91c9e8 |
1578 | |
1579 | gMC->Gsvolu("SQ43","TUBE",idInox,par,3); |
1580 | |
1581 | // Middle part, in the Epoxy |
d1cd2474 |
1582 | par[0] = kSCRUMMI; |
1583 | par[1] = kSCRUMMA; |
1584 | par[2] = kSCRUMLE; |
5f91c9e8 |
1585 | gMC->Gsvolu("SQ44","TUBE",idInox,par,3); |
1586 | |
1587 | // Screw nut, in air |
d1cd2474 |
1588 | par[0] = kSCRUNMI; |
1589 | par[1] = kSCRUNMA; |
1590 | par[2] = kSCRUNLE; |
5f91c9e8 |
1591 | gMC->Gsvolu("SQ45","TUBE",idInox,par,3); |
1592 | } |
1593 | |
1594 | // __________________Place volumes in the quadrant ____________ |
1595 | |
1596 | // InVFrame |
d1cd2474 |
1597 | posX = kHxInVFrame; |
1598 | posY = 2.0*kHyInHFrame+2.*kHyH1mm+kIAF+kHyInVFrame; |
5f91c9e8 |
1599 | posZ = 0.; |
1600 | gMC->Gspos("SQ00",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
ba030c0e |
1601 | |
d1cd2474 |
1602 | // keep memory of the mid position. Used for placing screws |
1603 | const GReal_t kMidVposX = posX; |
1604 | const GReal_t kMidVposY = posY; |
1605 | const GReal_t kMidVposZ = posZ; |
1606 | |
5f91c9e8 |
1607 | //Flat 7.5mm vertical section |
d1cd2474 |
1608 | posX = 2.0*kHxInVFrame+kHxV1mm; |
1609 | posY = 2.0*kHyInHFrame+2.*kHyH1mm+kIAF+kHyV1mm; |
5f91c9e8 |
1610 | posZ = 0.; |
1611 | gMC->Gspos("SQ01",1,QuadrantMLayerName(chamber),posX, posY, posZ,0, "ONLY"); |
1612 | |
1613 | // TopFrameAnode place 2 layers of TopFrameAnode cuboids |
d1cd2474 |
1614 | posX = kHxTFA; |
1615 | posY = 2.*kHyInHFrame+2.*kHyH1mm+kIAF+2.*kHyInVFrame+kHyTFA; |
1616 | posZ = kHzOuterFrameInox; |
5f91c9e8 |
1617 | gMC->Gspos("SQ02",1,QuadrantMLayerName(chamber),posX, posY, posZ,0,"ONLY"); |
d1cd2474 |
1618 | posZ = posZ+kHzOuterFrameInox; |
5f91c9e8 |
1619 | gMC->Gspos("SQ03",1,QuadrantMLayerName(chamber),posX, posY, posZ,0,"ONLY"); |
1620 | |
1621 | // place 2 layers of TopFrameAnodeA trapezoids |
1622 | posX = 35.8932+fgkDeltaQuadLHC; |
1623 | posY = 92.6745+fgkDeltaQuadLHC; |
d1cd2474 |
1624 | posZ = kHzOuterFrameInox; |
5f91c9e8 |
1625 | gMC->Gspos("SQ04",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
d1cd2474 |
1626 | posZ = posZ+kHzOuterFrameInox; |
5f91c9e8 |
1627 | gMC->Gspos("SQ05",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1628 | |
1629 | // place 2 layers of TopFrameAnodeB trapezoids |
1630 | posX = 44.593+fgkDeltaQuadLHC; |
1631 | posY = 90.737+fgkDeltaQuadLHC; |
d1cd2474 |
1632 | posZ = kHzOuterFrameInox; |
5f91c9e8 |
1633 | gMC->Gspos("SQ06",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
d1cd2474 |
1634 | posZ = posZ+kHzOuterFrameInox; |
5f91c9e8 |
1635 | gMC->Gspos("SQ07",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1636 | |
1637 | // TopAnode1 place 2 layers |
1638 | posX = 6.8+fgkDeltaQuadLHC; |
1639 | posY = 99.85+fgkDeltaQuadLHC; |
d1cd2474 |
1640 | posZ = -1.*kHzAnodeFR4; |
5f91c9e8 |
1641 | gMC->Gspos("SQ08",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
d1cd2474 |
1642 | posZ = posZ+kHzTopAnodeSteel1; |
5f91c9e8 |
1643 | gMC->Gspos("SQ09",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1644 | |
1645 | // TopAnode2 place 2 layers |
1646 | posX = 18.534+fgkDeltaQuadLHC; |
1647 | posY = 99.482+fgkDeltaQuadLHC; |
d1cd2474 |
1648 | posZ = -1.*kHzAnodeFR4; |
5f91c9e8 |
1649 | gMC->Gspos("SQ10",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
d1cd2474 |
1650 | posZ = posZ+kHzTopAnodeSteel2; |
5f91c9e8 |
1651 | gMC->Gspos("SQ11",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1652 | |
1653 | // TopAnode3 place 1 layer |
1654 | posX = 25.80+fgkDeltaQuadLHC; |
1655 | posY = 98.61+fgkDeltaQuadLHC; |
1656 | posZ = 0.; |
1657 | gMC->Gspos("SQ12",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1658 | |
1659 | // TopEarthFace - 2 copies |
1660 | posX = 23.122+fgkDeltaQuadLHC; |
1661 | posY = 96.90+fgkDeltaQuadLHC; |
d1cd2474 |
1662 | posZ = kHzOuterFrameEpoxy+kHzOuterFrameInox+kHzTopEarthFaceCu; |
5f91c9e8 |
1663 | gMC->Gspos("SQ13",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1664 | posZ = -1.*posZ; |
1665 | gMC->Gspos("SQ13",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1666 | |
1667 | // TopEarthProfile |
1668 | posX = 14.475+fgkDeltaQuadLHC; |
1669 | posY = 97.900+fgkDeltaQuadLHC; |
d1cd2474 |
1670 | posZ = kHzTopEarthProfileCu; |
5f91c9e8 |
1671 | gMC->Gspos("SQ14",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1672 | posZ = -1.0*posZ; |
1673 | gMC->Gspos("SQ14",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1674 | |
1675 | // TopGasSupport - 2 copies |
1676 | posX = 4.9500+fgkDeltaQuadLHC; |
1677 | posY = 96.200+fgkDeltaQuadLHC; |
d1cd2474 |
1678 | posZ = kHzOuterFrameEpoxy+kHzOuterFrameInox+kHzTopGasSupportAl; |
5f91c9e8 |
1679 | gMC->Gspos("SQ15",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1680 | posZ = -1.*posZ; |
1681 | gMC->Gspos("SQ15",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1682 | |
1683 | // TopPositioner parameters - single Stainless Steel trapezoid - 2 copies |
1684 | posX = 7.60+fgkDeltaQuadLHC; |
1685 | posY = 98.98+fgkDeltaQuadLHC; |
d1cd2474 |
1686 | posZ = kHzOuterFrameEpoxy+kHzOuterFrameInox+2.*kHzTopGasSupportAl+kHzTopPositionerSteel; |
5f91c9e8 |
1687 | gMC->Gspos("SQ16",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1688 | posZ = -1.*posZ; |
1689 | gMC->Gspos("SQ16",2,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1690 | |
1691 | // OutEdgeFrame |
c03e5213 |
1692 | Float_t xCenter[8]; |
1693 | Float_t yCenter[8]; |
5f91c9e8 |
1694 | |
c03e5213 |
1695 | xCenter[0] = 73.201 + fgkDeltaQuadLHC; |
1696 | xCenter[1] = 78.124 + fgkDeltaQuadLHC; |
b367fd8f |
1697 | //xCenter[2] = 82.862 + fgkDeltaQuadLHC; |
1698 | xCenter[2] = 83.102 + fgkDeltaQuadLHC; |
c03e5213 |
1699 | xCenter[3] = 87.418 + fgkDeltaQuadLHC; |
b367fd8f |
1700 | // Fix (5) - overlap of SQ21 with 041M and 125M |
5f91c9e8 |
1701 | |
c03e5213 |
1702 | yCenter[0] = 68.122 + fgkDeltaQuadLHC; |
1703 | yCenter[1] = 62.860 + fgkDeltaQuadLHC; |
b367fd8f |
1704 | //yCenter[2] = 57.420 + fgkDeltaQuadLHC; |
1705 | yCenter[2] = 57.660 + fgkDeltaQuadLHC; |
c03e5213 |
1706 | yCenter[3] = 51.800 + fgkDeltaQuadLHC; |
b367fd8f |
1707 | // Fix (5) - overlap of SQ21 with 041M and 125M |
5f91c9e8 |
1708 | |
c03e5213 |
1709 | xCenter[4] = 68.122 + fgkDeltaQuadLHC; |
1710 | xCenter[5] = 62.860 + fgkDeltaQuadLHC; |
1711 | xCenter[6] = 57.420 + fgkDeltaQuadLHC; |
1712 | xCenter[7] = 51.800 + fgkDeltaQuadLHC; |
5f91c9e8 |
1713 | |
c03e5213 |
1714 | yCenter[4] = 73.210 + fgkDeltaQuadLHC; |
1715 | yCenter[5] = 78.124 + fgkDeltaQuadLHC; |
1716 | yCenter[6] = 82.862 + fgkDeltaQuadLHC; |
1717 | yCenter[7] = 87.418 + fgkDeltaQuadLHC; |
5f91c9e8 |
1718 | |
d1cd2474 |
1719 | posZ = -1.0*kHzOuterFrameInox; |
c03e5213 |
1720 | gMC->Gspos("SQ17",1,QuadrantMLayerName(chamber), xCenter[0], yCenter[0], posZ, rot2,"ONLY"); |
1721 | gMC->Gspos("SQ17",2,QuadrantMLayerName(chamber), xCenter[4], yCenter[4], posZ, rot3,"ONLY"); |
5f91c9e8 |
1722 | |
c03e5213 |
1723 | gMC->Gspos("SQ19",1,QuadrantMLayerName(chamber), xCenter[1], yCenter[1], posZ, rot2,"ONLY"); |
1724 | gMC->Gspos("SQ19",2,QuadrantMLayerName(chamber), xCenter[5], yCenter[5], posZ, rot3,"ONLY"); |
5f91c9e8 |
1725 | |
c03e5213 |
1726 | gMC->Gspos("SQ21",1,QuadrantMLayerName(chamber), xCenter[2], yCenter[2], posZ, rot2,"ONLY"); |
1727 | gMC->Gspos("SQ21",2,QuadrantMLayerName(chamber), xCenter[6], yCenter[6], posZ, rot3,"ONLY"); |
ba030c0e |
1728 | |
c03e5213 |
1729 | gMC->Gspos("SQ23",1,QuadrantMLayerName(chamber), xCenter[3], yCenter[3], posZ, rot2,"ONLY"); |
1730 | gMC->Gspos("SQ23",2,QuadrantMLayerName(chamber), xCenter[7], yCenter[7], posZ, rot3,"ONLY"); |
5f91c9e8 |
1731 | |
d1cd2474 |
1732 | posZ = posZ+kHzOuterFrameEpoxy; |
5f91c9e8 |
1733 | |
c03e5213 |
1734 | gMC->Gspos("SQ18",1,QuadrantMLayerName(chamber), xCenter[0], yCenter[0], posZ, rot2,"ONLY"); |
1735 | gMC->Gspos("SQ18",2,QuadrantMLayerName(chamber), xCenter[4], yCenter[4], posZ, rot3,"ONLY"); |
5f91c9e8 |
1736 | |
c03e5213 |
1737 | gMC->Gspos("SQ20",1,QuadrantMLayerName(chamber), xCenter[1], yCenter[1], posZ, rot2,"ONLY"); |
1738 | gMC->Gspos("SQ20",2,QuadrantMLayerName(chamber), xCenter[5], yCenter[5], posZ, rot3,"ONLY"); |
5f91c9e8 |
1739 | |
c03e5213 |
1740 | gMC->Gspos("SQ22",1,QuadrantMLayerName(chamber), xCenter[2], yCenter[2], posZ, rot2,"ONLY"); |
1741 | gMC->Gspos("SQ22",2,QuadrantMLayerName(chamber), xCenter[6], yCenter[6], posZ, rot3,"ONLY"); |
5f91c9e8 |
1742 | |
c03e5213 |
1743 | gMC->Gspos("SQ24",1,QuadrantMLayerName(chamber), xCenter[3], yCenter[3], posZ, rot2,"ONLY"); |
1744 | gMC->Gspos("SQ24",2,QuadrantMLayerName(chamber), xCenter[7], yCenter[7], posZ, rot3,"ONLY"); |
5f91c9e8 |
1745 | |
1746 | //--- |
1747 | |
ba030c0e |
1748 | // OutVFrame |
d1cd2474 |
1749 | posX = 2.*kHxInVFrame+kIAF+2.*kHxInHFrame-kHxOutVFrame+2.*kHxV1mm; |
1750 | posY = 2.*kHyInHFrame+kHyOutVFrame; |
ba030c0e |
1751 | posZ = 0.; |
5f91c9e8 |
1752 | gMC->Gspos("SQ25",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1753 | |
d1cd2474 |
1754 | // keep memory of the mid position. Used for placing screws |
1755 | const GReal_t kMidOVposX = posX; |
1756 | const GReal_t kMidOVposY = posY; |
1757 | const GReal_t kMidOVposZ = posZ; |
1758 | |
1759 | const Float_t kTOPY = posY+kHyOutVFrame; |
1760 | const Float_t kOUTX = posX; |
ba030c0e |
1761 | |
5f91c9e8 |
1762 | // OutVFrame corner |
d1cd2474 |
1763 | posX = kOUTX; |
1764 | posY = kTOPY+((kBl1OCTF+kTl1OCTF)/2.); |
5f91c9e8 |
1765 | posZ = 0.; |
1766 | gMC->Gspos("SQ26",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1,"ONLY"); |
1767 | |
1768 | // VertEarthFaceCu - 2 copies |
1769 | posX = 89.4000+fgkDeltaQuadLHC; |
1770 | posY = 25.79+fgkDeltaQuadLHC; |
d1cd2474 |
1771 | posZ = kHzFrameThickness+2.0*kHzFoam+kHzVertEarthFaceCu; |
5f91c9e8 |
1772 | gMC->Gspos("SQ27",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1773 | posZ = -1.0*posZ; |
1774 | gMC->Gspos("SQ27",2,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1775 | |
1776 | // VertEarthSteel - 2 copies |
1777 | posX = 91.00+fgkDeltaQuadLHC; |
1778 | posY = 30.616+fgkDeltaQuadLHC; |
d1cd2474 |
1779 | posZ = kHzFrameThickness+2.0*kHzFoam+kHzVertBarSteel; |
5f91c9e8 |
1780 | gMC->Gspos("SQ28",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1781 | posZ = -1.0*posZ; |
1782 | gMC->Gspos("SQ28",2,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1783 | |
1784 | // VertEarthProfCu - 2 copies |
1785 | posX = 92.000+fgkDeltaQuadLHC; |
1786 | posY = 29.64+fgkDeltaQuadLHC; |
d1cd2474 |
1787 | posZ = kHzFrameThickness; |
5f91c9e8 |
1788 | gMC->Gspos("SQ29",1,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1789 | posZ = -1.0*posZ; |
1790 | gMC->Gspos("SQ29",2,QuadrantMLayerName(chamber),posX, posY, posZ, rot1, "ONLY"); |
1791 | |
1792 | // SuppLateralPositionner - 2 copies |
d1cd2474 |
1793 | posX = 90.2-kNearFarLHC; |
1794 | posY = 5.00-kNearFarLHC; |
1795 | posZ = kHzLateralPosnAl-fgkMotherThick2; |
5f91c9e8 |
1796 | gMC->Gspos("SQ30",1,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1797 | posZ = -1.0*posZ; |
1798 | gMC->Gspos("SQ30",2,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1799 | |
1800 | // LateralPositionner - 2 copies - Face view |
d1cd2474 |
1801 | posX = 92.175-kNearFarLHC-2.*kHxLPP; |
1802 | posY = 5.00-kNearFarLHC; |
1803 | posZ =2.0*kHzLateralPosnAl+kHzLateralPosnInoxFace-fgkMotherThick2; |
5f91c9e8 |
1804 | gMC->Gspos("SQ31",1,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1805 | posZ = -1.0*posZ; |
1806 | gMC->Gspos("SQ31",2,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1807 | |
1808 | // LateralPositionner - Profile view |
d1cd2474 |
1809 | posX = 92.175+fgkDeltaQuadLHC+kHxLPF-kHxLPP; |
5f91c9e8 |
1810 | posY = 5.00+fgkDeltaQuadLHC; |
1811 | posZ = 0.; |
1812 | gMC->Gspos("SQ32",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); // middle layer |
1813 | |
d1cd2474 |
1814 | posX = 92.175-kNearFarLHC+kHxLPF-kHxLPP; |
1815 | posY = 5.0000-kNearFarLHC; |
1816 | posZ = fgkMotherThick2-kHzLPNF; |
5f91c9e8 |
1817 | gMC->Gspos("SQ33",1,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); // near layer |
1818 | posZ = -1.*posZ; |
1819 | gMC->Gspos("SQ33",2,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); // far layer |
1820 | |
1821 | // VertCradleA 1st Trapezoid - 3 copies |
1822 | posX = 95.73+fgkDeltaQuadLHC; |
1823 | posY = 33.26+fgkDeltaQuadLHC; |
1824 | posZ = 0.; |
1825 | gMC->Gspos("SQ34",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1826 | |
d1cd2474 |
1827 | posX = 95.73-kNearFarLHC; |
1828 | posY = 33.26-kNearFarLHC; |
1829 | posZ = 2.0*kHzLateralSightAl+kHzVerticalCradleAl-fgkMotherThick2; |
5f91c9e8 |
1830 | gMC->Gspos("SQ34",1,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1831 | posZ = -1.0*posZ; |
1832 | gMC->Gspos("SQ34",3,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1833 | |
1834 | // VertCradleB 2nd Trapezoid - 3 copies |
1835 | posX = 97.29+fgkDeltaQuadLHC; |
1836 | posY = 23.02+fgkDeltaQuadLHC; |
1837 | posZ = 0.; |
1838 | gMC->Gspos("SQ35",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1839 | |
d1cd2474 |
1840 | posX = 97.29-kNearFarLHC; |
1841 | posY = 23.02-kNearFarLHC; |
1842 | posZ = 2.0*kHzLateralSightAl+kHzVerticalCradleAl-fgkMotherThick2; |
5f91c9e8 |
1843 | gMC->Gspos("SQ35",1,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1844 | posZ = -1.0*posZ; |
1845 | gMC->Gspos("SQ35",3,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1846 | |
1847 | // OutVertCradleC 3rd Trapeze - 3 copies |
1848 | posX = 98.31+fgkDeltaQuadLHC; |
1849 | posY = 12.77+fgkDeltaQuadLHC; |
1850 | posZ = 0.; |
1851 | gMC->Gspos("SQ36",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1852 | |
b367fd8f |
1853 | posX = 98.05-kNearFarLHC; |
d1cd2474 |
1854 | posY = 12.77-kNearFarLHC; |
d1cd2474 |
1855 | posZ = 2.0*kHzLateralSightAl+kHzVerticalCradleAl-fgkMotherThick2; |
b367fd8f |
1856 | // Fix (2) of extrusion SQ36 from SQN1, SQN2, SQF1, SQF2 |
1857 | // (was posX = 98.31 ...) |
5f91c9e8 |
1858 | gMC->Gspos("SQ36",1,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1859 | posZ = -1.0*posZ; |
1860 | gMC->Gspos("SQ36",3,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1861 | |
1862 | // OutVertCradleD 4th Trapeze - 3 copies |
1863 | posX = 98.81+fgkDeltaQuadLHC; |
1864 | posY = 2.52+fgkDeltaQuadLHC; |
1865 | posZ = 0.; |
1866 | gMC->Gspos("SQ37",2,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1867 | |
d1cd2474 |
1868 | posZ = fgkMotherThick1-kHzVerticalCradleAl; |
5f91c9e8 |
1869 | gMC->Gspos("SQ37",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1870 | posZ = -1.0*posZ; |
1871 | gMC->Gspos("SQ37",3,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1872 | |
1873 | // LateralSightSupport - 2 copies |
b367fd8f |
1874 | posX = 98.33-kNearFarLHC; |
d1cd2474 |
1875 | posY = 10.00-kNearFarLHC; |
1876 | posZ = kHzLateralSightAl-fgkMotherThick2; |
b367fd8f |
1877 | // Fix (3) of extrusion SQ38 from SQN1, SQN2, SQF1, SQF2 |
1878 | // (was posX = 98.53 ...) |
5f91c9e8 |
1879 | gMC->Gspos("SQ38",1,QuadrantNLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1880 | posZ = -1.0*posZ; |
1881 | gMC->Gspos("SQ38",2,QuadrantFLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
1882 | |
1883 | // Mire placement |
1884 | posX = 92.84+fgkDeltaQuadLHC; |
1885 | posY = 8.13+fgkDeltaQuadLHC; |
ba030c0e |
1886 | posZ = 0.; |
5f91c9e8 |
1887 | gMC->Gspos("SQ39",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0,"ONLY"); |
1888 | |
1889 | //--- |
1890 | |
1891 | // InHFrame |
d1cd2474 |
1892 | posX = 2.0*kHxInVFrame+2.*kHxV1mm+kIAF+kHxInHFrame; |
1893 | posY = kHyInHFrame; |
5f91c9e8 |
1894 | posZ = 0.; |
1895 | gMC->Gspos("SQ40",1,QuadrantMLayerName(chamber),posX, posY, posZ, 0, "ONLY"); |
ba030c0e |
1896 | |
d1cd2474 |
1897 | // keep memory of the mid position. Used for placing screws |
1898 | const GReal_t kMidHposX = posX; |
1899 | const GReal_t kMidHposY = posY; |
1900 | const GReal_t kMidHposZ = posZ; |
1901 | |
5f91c9e8 |
1902 | // Flat 7.5mm horizontal section |
d1cd2474 |
1903 | posX = 2.0*kHxInVFrame+2.*kHxV1mm+kIAF+kHxH1mm; |
1904 | posY = 2.0*kHyInHFrame+kHyH1mm; |
ba030c0e |
1905 | posZ = 0.; |
5f91c9e8 |
1906 | gMC->Gspos("SQ41",1,QuadrantMLayerName(chamber),posX, posY, posZ,0, "ONLY"); |
ba030c0e |
1907 | |
1908 | // InArcFrame |
d1cd2474 |
1909 | posX = 2.0*kHxInVFrame+2.*kHxV1mm; |
1910 | posY = 2.0*kHyInHFrame+2.*kHyH1mm; |
ba030c0e |
1911 | posZ = 0.; |
5f91c9e8 |
1912 | gMC->Gspos("SQ42",1,QuadrantMLayerName(chamber),posX, posY, posZ,0, "ONLY"); |
ba030c0e |
1913 | |
d1cd2474 |
1914 | // keep memory of the mid position. Used for placing screws |
1915 | const GReal_t kMidArcposX = posX; |
1916 | const GReal_t kMidArcposY = posY; |
1917 | const GReal_t kMidArcposZ = posZ; |
1918 | |
5f91c9e8 |
1919 | // ScrewsInFrame - in sensitive volume |
ba030c0e |
1920 | |
1921 | Float_t scruX[64]; |
1922 | Float_t scruY[64]; |
1923 | |
1924 | // Screws on IHEpoxyFrame |
1925 | |
d1cd2474 |
1926 | const Int_t kNumberOfScrewsIH = 14; // no. of screws on the IHEpoxyFrame |
1927 | const Float_t kOffX = 5.; // inter-screw distance |
ba030c0e |
1928 | |
1929 | // first screw coordinates |
1930 | scruX[0] = 21.07; |
1931 | scruY[0] = -2.23; |
1932 | // other screw coordinates |
d1cd2474 |
1933 | for (Int_t i = 1;i<kNumberOfScrewsIH;i++){ |
1934 | scruX[i] = scruX[i-1]+kOffX; |
ba030c0e |
1935 | scruY[i] = scruY[0]; |
1936 | } |
1937 | // Position the volumes on the frames |
d1cd2474 |
1938 | for (Int_t i = 0;i<kNumberOfScrewsIH;i++){ |
5f91c9e8 |
1939 | posX = fgkDeltaQuadLHC + scruX[i]; |
1940 | posY = fgkDeltaQuadLHC + scruY[i]; |
ba030c0e |
1941 | posZ = 0.; |
d1cd2474 |
1942 | gMC->Gspos("SQ43",i+1,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ-kHzInHFrame-kSCRUHLE, 0, "ONLY"); |
1943 | if (chamber==1) |
1944 | gMC->Gspos("SQ44",i+1,"SQ40",posX+0.1-kMidHposX, posY+0.1-kMidHposY, posZ-kMidHposZ, 0, "ONLY"); |
1945 | gMC->Gspos("SQ45",i+1,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ+kHzInHFrame+kSCRUNLE, 0, "ONLY"); |
ba030c0e |
1946 | } |
1947 | // special screw coordinates |
1948 | scruX[63] = 16.3; |
1949 | scruY[63] = -2.23; |
5f91c9e8 |
1950 | posX = fgkDeltaQuadLHC + scruX[63]; |
1951 | posY = fgkDeltaQuadLHC + scruY[63]; |
ba030c0e |
1952 | posZ = 0.; |
d1cd2474 |
1953 | gMC->Gspos("SQ43",64,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ-kHzInHFrame-kSCRUHLE, 0, "ONLY"); |
1954 | if (chamber==1) |
1955 | gMC->Gspos("SQ44",64,"SQ40",posX+0.1-kMidHposX, posY+0.1-kMidHposY, posZ-kMidHposZ, 0, "ONLY"); |
1956 | gMC->Gspos("SQ45",64,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ+kHzInHFrame+kSCRUNLE, 0, "ONLY"); |
ba030c0e |
1957 | |
1958 | // Screws on the IVEpoxyFrame |
1959 | |
d1cd2474 |
1960 | const Int_t kNumberOfScrewsIV = 15; // no. of screws on the IVEpoxyFrame |
1961 | const Float_t kOffY = 5.; // inter-screw distance |
c03e5213 |
1962 | Int_t firstScrew = 58; |
1963 | Int_t lastScrew = 44; |
ba030c0e |
1964 | |
1965 | // first (special) screw coordinates |
c03e5213 |
1966 | scruX[firstScrew-1] = -2.23; |
1967 | scruY[firstScrew-1] = 16.3; |
ba030c0e |
1968 | // second (repetitive) screw coordinates |
c03e5213 |
1969 | scruX[firstScrew-2] = -2.23; |
1970 | scruY[firstScrew-2] = 21.07; |
ba030c0e |
1971 | // other screw coordinates |
c03e5213 |
1972 | for (Int_t i = firstScrew-3;i>lastScrew-2;i--){ |
1973 | scruX[i] = scruX[firstScrew-2]; |
d1cd2474 |
1974 | scruY[i] = scruY[i+1]+kOffY; |
ba030c0e |
1975 | } |
1976 | |
d1cd2474 |
1977 | for (Int_t i = 0;i<kNumberOfScrewsIV;i++){ |
c03e5213 |
1978 | posX = fgkDeltaQuadLHC + scruX[i+lastScrew-1]; |
1979 | posY = fgkDeltaQuadLHC + scruY[i+lastScrew-1]; |
ba030c0e |
1980 | posZ = 0.; |
d1cd2474 |
1981 | gMC->Gspos("SQ43",i+lastScrew,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ-kHzInHFrame-kSCRUHLE, 0, "ONLY"); |
1982 | if (chamber==1) |
1983 | gMC->Gspos("SQ44",i+lastScrew,"SQ00",posX+0.1-kMidVposX, posY+0.1-kMidVposY, posZ-kMidVposZ, 0, "ONLY"); |
1984 | gMC->Gspos("SQ45",i+lastScrew,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ+kHzInHFrame+kSCRUNLE, 0, "ONLY"); |
ba030c0e |
1985 | } |
1986 | |
1987 | // Screws on the OVEpoxyFrame |
1988 | |
d1cd2474 |
1989 | const Int_t kNumberOfScrewsOV = 10; // no. of screws on the OVEpoxyFrame |
ba030c0e |
1990 | |
c03e5213 |
1991 | firstScrew = 15; |
1992 | lastScrew = 25; |
ba030c0e |
1993 | |
1994 | // first (repetitive) screw coordinates |
d1cd2474 |
1995 | // notes: 1st screw should be placed in volume 40 (InnerHorizFrame) |
c03e5213 |
1996 | scruX[firstScrew-1] = 90.9; |
1997 | scruY[firstScrew-1] = -2.23; // true value |
ba030c0e |
1998 | |
1999 | // other screw coordinates |
c03e5213 |
2000 | for (Int_t i = firstScrew; i<lastScrew; i++ ){ |
2001 | scruX[i] = scruX[firstScrew-1]; |
d1cd2474 |
2002 | scruY[i] = scruY[i-1]+kOffY; |
ba030c0e |
2003 | } |
d1cd2474 |
2004 | for (Int_t i = 1;i<kNumberOfScrewsOV;i++){ |
c03e5213 |
2005 | posX = fgkDeltaQuadLHC + scruX[i+firstScrew-1]; |
2006 | posY = fgkDeltaQuadLHC + scruY[i+firstScrew-1]; |
ba030c0e |
2007 | posZ = 0.; |
d1cd2474 |
2008 | gMC->Gspos("SQ43",i+firstScrew,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ-kHzInHFrame-kSCRUHLE, 0, "ONLY"); |
2009 | // ?? |
2010 | if (chamber==1) |
2011 | gMC->Gspos("SQ44",i+firstScrew,"SQ25",posX+0.1-kMidOVposX, posY+0.1-kMidOVposY, posZ-kMidOVposZ, 0, "ONLY"); |
2012 | gMC->Gspos("SQ45",i+firstScrew,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ+kHzInHFrame+kSCRUNLE, 0, "ONLY"); |
ba030c0e |
2013 | } |
d1cd2474 |
2014 | // special case for 1st screw, inside the horizontal frame (volume 40) |
2015 | posX = fgkDeltaQuadLHC + scruX[firstScrew-1]; |
2016 | posY = fgkDeltaQuadLHC + scruY[firstScrew-1]; |
2017 | posZ = 0.; |
2018 | if (chamber==1) |
2019 | gMC->Gspos("SQ44",firstScrew,"SQ40",posX+0.1-kMidHposX, posY+0.1-kMidHposY, posZ-kMidHposZ, 0, "ONLY"); |
2020 | |
ba030c0e |
2021 | // Inner Arc of Frame, screw positions and numbers-1 |
2022 | scruX[62] = 16.009; scruY[62] = 1.401; |
2023 | scruX[61] = 14.564; scruY[61] = 6.791; |
2024 | scruX[60] = 11.363; scruY[60] = 11.363; |
2025 | scruX[59] = 6.791 ; scruY[59] = 14.564; |
2026 | scruX[58] = 1.401 ; scruY[58] = 16.009; |
2027 | |
2028 | for (Int_t i = 0;i<5;i++){ |
5f91c9e8 |
2029 | posX = fgkDeltaQuadLHC + scruX[i+58]; |
2030 | posY = fgkDeltaQuadLHC + scruY[i+58]; |
ba030c0e |
2031 | posZ = 0.; |
d1cd2474 |
2032 | gMC->Gspos("SQ43",i+58+1,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ-kHzInHFrame-kSCRUHLE, 0, "ONLY"); |
2033 | if (chamber==1) |
2034 | gMC->Gspos("SQ44",i+58+1,"SQ42",posX+0.1-kMidArcposX, posY+0.1-kMidArcposY, posZ-kMidArcposZ, 0, "ONLY"); |
2035 | gMC->Gspos("SQ45",i+58+1,QuadrantMLayerName(chamber),posX+0.1, posY+0.1, posZ+kHzInHFrame+kSCRUNLE, 0, "ONLY"); |
5f91c9e8 |
2036 | } |
2037 | } |
ba030c0e |
2038 | |
5f91c9e8 |
2039 | //______________________________________________________________________________ |
d1cd2474 |
2040 | void AliMUONSt1GeometryBuilderV2::PlaceInnerLayers(Int_t chamber) |
5f91c9e8 |
2041 | { |
5398f946 |
2042 | /// Place the gas and copper layers for the specified chamber. |
ba030c0e |
2043 | |
5f91c9e8 |
2044 | // Rotation Matrices |
2045 | Int_t rot1, rot2, rot3, rot4; |
ba030c0e |
2046 | |
d1cd2474 |
2047 | fMUON->AliMatrix(rot1, 90., 315., 90., 45., 0., 0.); // -45 deg |
2048 | fMUON->AliMatrix(rot2, 90., 90., 90., 180., 0., 0.); // 90 deg |
2049 | fMUON->AliMatrix(rot3, 90., 270., 90., 0., 0., 0.); // -90 deg |
2050 | fMUON->AliMatrix(rot4, 90., 45., 90., 135., 0., 0.); // deg |
ba030c0e |
2051 | |
5f91c9e8 |
2052 | GReal_t x; |
2053 | GReal_t y; |
2054 | GReal_t zg = 0.; |
2055 | GReal_t zc = fgkHzGas + fgkHzPadPlane; |
2056 | Int_t dpos = (chamber-1)*2; |
2057 | TString name; |
ba030c0e |
2058 | |
5f91c9e8 |
2059 | x = 14.53 + fgkDeltaQuadLHC; |
2060 | y = 53.34 + fgkDeltaQuadLHC; |
2061 | name = GasVolumeName("SAG", chamber); |
2062 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,0,"ONLY"); |
2063 | gMC->Gspos("SA1C", 1+dpos, QuadrantMLayerName(chamber),x,y, zc,0,"ONLY"); |
2064 | gMC->Gspos("SA1C", 2+dpos, QuadrantMLayerName(chamber),x,y,-zc,0,"ONLY"); |
2065 | |
2066 | x = 40.67 + fgkDeltaQuadLHC; |
2067 | y = 40.66 + fgkDeltaQuadLHC; |
2068 | name = GasVolumeName("SBG", chamber); |
2069 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot1,"ONLY"); |
2070 | gMC->Gspos("SB1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot1,"ONLY"); |
2071 | gMC->Gspos("SB1C", 2+dpos, QuadrantMLayerName(chamber),x,y,-zc,rot1,"ONLY"); |
2072 | |
2073 | x = 53.34 + fgkDeltaQuadLHC; |
2074 | y = 14.52 + fgkDeltaQuadLHC; |
2075 | name = GasVolumeName("SCG", chamber); |
2076 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot2,"ONLY"); |
2077 | gMC->Gspos("SC1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot2,"ONLY"); |
2078 | gMC->Gspos("SC1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot2,"ONLY"); |
2079 | |
2080 | x = 5.83 + fgkDeltaQuadLHC; |
2081 | y = 17.29 + fgkDeltaQuadLHC; |
2082 | name = GasVolumeName("SDG", chamber); |
2083 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot3,"ONLY"); |
2084 | gMC->Gspos("SD1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot3,"ONLY"); |
2085 | gMC->Gspos("SD1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot3,"ONLY"); |
2086 | |
2087 | x = 9.04 + fgkDeltaQuadLHC; |
2088 | y = 16.91 + fgkDeltaQuadLHC; |
2089 | name = GasVolumeName("SEG", chamber); |
2090 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,0,"ONLY"); |
2091 | gMC->Gspos("SE1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,0,"ONLY"); |
2092 | gMC->Gspos("SE1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,0,"ONLY"); |
2093 | |
2094 | x = 10.12 + fgkDeltaQuadLHC; |
2095 | y = 14.67 + fgkDeltaQuadLHC; |
2096 | name = GasVolumeName("SFG", chamber); |
2097 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot4,"ONLY"); |
2098 | gMC->Gspos("SF1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot4,"ONLY"); |
2099 | gMC->Gspos("SF1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot4,"ONLY"); |
2100 | |
2101 | x = 8.2042 + fgkDeltaQuadLHC; |
2102 | y = 16.19 + fgkDeltaQuadLHC; |
2103 | name = GasVolumeName("SGG", chamber); |
2104 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot4,"ONLY"); |
2105 | gMC->Gspos("SG1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot4,"ONLY"); |
2106 | gMC->Gspos("SG1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot4,"ONLY"); |
2107 | |
2108 | x = 14.68 + fgkDeltaQuadLHC; |
2109 | y = 10.10 + fgkDeltaQuadLHC; |
2110 | name = GasVolumeName("SHG", chamber); |
2111 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot4,"ONLY"); |
2112 | gMC->Gspos("SH1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot4,"ONLY"); |
2113 | gMC->Gspos("SH1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot4,"ONLY"); |
2114 | |
2115 | x = 16.21 + fgkDeltaQuadLHC; |
2116 | y = 8.17 + fgkDeltaQuadLHC; |
2117 | name = GasVolumeName("SIG", chamber); |
2118 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot4,"ONLY"); |
2119 | gMC->Gspos("SI1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot4,"ONLY"); |
2120 | gMC->Gspos("SI1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot4,"ONLY"); |
2121 | |
2122 | x = 16.92 + fgkDeltaQuadLHC; |
2123 | y = 9.02 + fgkDeltaQuadLHC; |
2124 | name = GasVolumeName("SJG", chamber); |
2125 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,rot3,"ONLY"); |
2126 | gMC->Gspos("SJ1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,rot3,"ONLY"); |
2127 | gMC->Gspos("SJ1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,rot3,"ONLY"); |
2128 | |
2129 | x = 17.30 + fgkDeltaQuadLHC; |
2130 | y = 5.85 + fgkDeltaQuadLHC; |
2131 | name = GasVolumeName("SKG", chamber); |
2132 | gMC->Gspos(name,1,QuadrantMLayerName(chamber),x,y,zg,0,"ONLY"); |
2133 | gMC->Gspos("SK1C", 1+dpos ,QuadrantMLayerName(chamber),x,y, zc,0,"ONLY"); |
2134 | gMC->Gspos("SK1C", 2+dpos ,QuadrantMLayerName(chamber),x,y,-zc,0,"ONLY"); |
ba030c0e |
2135 | } |
2136 | |
5f91c9e8 |
2137 | //______________________________________________________________________________ |
d1cd2474 |
2138 | void AliMUONSt1GeometryBuilderV2::PlaceSector(AliMpSector* sector,SpecialMap specialMap, |
5f91c9e8 |
2139 | const TVector3& where, Bool_t reflectZ, Int_t chamber) |
ba030c0e |
2140 | { |
5398f946 |
2141 | /// Place all the segments in the mother volume, at the position defined |
2142 | /// by the sector's data. |
2143 | |
2144 | /// \cond SKIP |
ba030c0e |
2145 | |
5f91c9e8 |
2146 | static Int_t segNum=1; |
2147 | Int_t sgn; |
2148 | Int_t reflZ; |
2149 | Int_t rotMat; |
2150 | |
2151 | if (!reflectZ) { |
2152 | sgn= 1; |
2153 | reflZ=0; // no reflection along z... nothing |
d1cd2474 |
2154 | fMUON->AliMatrix(rotMat, 90.,90.,90,180.,0.,0.); // 90° rotation around z, NO reflection along z |
5f91c9e8 |
2155 | } else { |
2156 | sgn=-1; |
d1cd2474 |
2157 | fMUON->AliMatrix(reflZ, 90.,0.,90,90.,180.,0.); // reflection along z |
2158 | fMUON->AliMatrix(rotMat, 90.,90.,90,180.,180.,0.); // 90° rotation around z AND reflection along z |
5f91c9e8 |
2159 | } |
2160 | |
ba030c0e |
2161 | GReal_t posX,posY,posZ; |
2162 | |
86488ea7 |
2163 | #ifdef WITH_STL |
d1cd2474 |
2164 | vector<Int_t> alreadyDone; |
2165 | #endif |
2166 | |
86488ea7 |
2167 | #ifdef WITH_ROOT |
d1cd2474 |
2168 | TArrayI alreadyDone(20); |
2169 | Int_t nofAlreadyDone = 0; |
2170 | #endif |
2171 | |
5f91c9e8 |
2172 | for (Int_t irow=0;irow<sector->GetNofRows();irow++){ // for each row |
2173 | AliMpRow* row = sector->GetRow(irow); |
ba030c0e |
2174 | |
ba030c0e |
2175 | |
5f91c9e8 |
2176 | for (Int_t iseg=0;iseg<row->GetNofRowSegments();iseg++){ // for each row segment |
2177 | AliMpVRowSegment* seg = row->GetRowSegment(iseg); |
5f91c9e8 |
2178 | |
86488ea7 |
2179 | #ifdef WITH_STL |
d1cd2474 |
2180 | SpecialMap::iterator iter |
5f91c9e8 |
2181 | = specialMap.find(seg->GetMotifPositionId(0)); |
ba030c0e |
2182 | |
5f91c9e8 |
2183 | if ( iter == specialMap.end()){ //if this is a normal segment (ie. not part of <specialMap>) |
d1cd2474 |
2184 | #endif |
2185 | |
86488ea7 |
2186 | #ifdef WITH_ROOT |
d1cd2474 |
2187 | Long_t value = specialMap.GetValue(seg->GetMotifPositionId(0)); |
2188 | |
2189 | if ( value == 0 ){ //if this is a normal segment (ie. not part of <specialMap>) |
2190 | #endif |
5f91c9e8 |
2191 | |
2192 | // create the cathode part |
62c708bf |
2193 | CreatePlaneSegment(segNum, seg->Dimensions(), seg->GetNofMotifs()); |
5f91c9e8 |
2194 | |
e77b6d6b |
2195 | posX = where.X() + seg->Position().X(); |
2196 | posY = where.Y() + seg->Position().Y(); |
5f91c9e8 |
2197 | posZ = where.Z() + sgn * (TotalHzPlane() + fgkHzGas + 2.*fgkHzPadPlane); |
62c708bf |
2198 | gMC->Gspos(PlaneSegmentName(segNum).Data(), 1, |
2199 | QuadrantMLayerName(chamber), posX, posY, posZ, reflZ, "ONLY"); |
5f91c9e8 |
2200 | |
2201 | // and place all the daughter boards of this segment |
2202 | for (Int_t motifNum=0;motifNum<seg->GetNofMotifs();motifNum++) { |
e8c253a0 |
2203 | |
2204 | // Copy number |
5f91c9e8 |
2205 | Int_t motifPosId = seg->GetMotifPositionId(motifNum); |
2206 | AliMpMotifPosition* motifPos = |
2207 | sector->GetMotifMap()->FindMotifPosition(motifPosId); |
e8c253a0 |
2208 | Int_t copyNo = motifPosId; |
866c3232 |
2209 | if ( sector->GetDirection() == AliMp::kX) copyNo += fgkDaughterCopyNoOffset; |
5f91c9e8 |
2210 | |
e8c253a0 |
2211 | // Position |
e77b6d6b |
2212 | posX = where.X() + motifPos->Position().X() + fgkOffsetX; |
2213 | posY = where.Y() + motifPos->Position().Y() + fgkOffsetY; |
5f91c9e8 |
2214 | posZ = where.Z() + sgn * (fgkMotherThick1 - TotalHzDaughter()); |
e8c253a0 |
2215 | |
2216 | gMC->Gspos(fgkDaughterName, copyNo, QuadrantMLayerName(chamber), posX, posY, posZ, reflZ, "ONLY"); |
5f91c9e8 |
2217 | } |
2218 | segNum++; |
2219 | |
2220 | } else { |
2221 | |
2222 | // if this is a special segment |
2223 | for (Int_t motifNum=0;motifNum<seg->GetNofMotifs();motifNum++) {// for each motif |
2224 | |
2225 | Int_t motifPosId = seg->GetMotifPositionId(motifNum); |
2226 | |
86488ea7 |
2227 | #ifdef WITH_STL |
d1cd2474 |
2228 | if (find(alreadyDone.begin(),alreadyDone.end(),motifPosId) |
2229 | != alreadyDone.end()) continue; // don't treat the same motif twice |
2230 | |
5f91c9e8 |
2231 | AliMUONSt1SpecialMotif spMot = specialMap[motifPosId]; |
d1cd2474 |
2232 | #endif |
86488ea7 |
2233 | #ifdef WITH_ROOT |
d1cd2474 |
2234 | Bool_t isDone = false; |
2235 | Int_t i=0; |
2236 | while (i<nofAlreadyDone && !isDone) { |
2237 | if (alreadyDone.At(i) == motifPosId) isDone=true; |
2238 | i++; |
2239 | } |
2240 | if (isDone) continue; // don't treat the same motif twice |
2241 | |
2242 | AliMUONSt1SpecialMotif spMot = *((AliMUONSt1SpecialMotif*)specialMap.GetValue(motifPosId)); |
2243 | #endif |
2244 | // check |
2245 | // cout << chamber << " processing special motif: " << motifPosId << endl; |
2246 | |
5f91c9e8 |
2247 | AliMpMotifPosition* motifPos = sector->GetMotifMap()->FindMotifPosition(motifPosId); |
2248 | |
e8c253a0 |
2249 | // Copy number |
2250 | Int_t copyNo = motifPosId; |
866c3232 |
2251 | if ( sector->GetDirection() == AliMp::kX) copyNo += fgkDaughterCopyNoOffset; |
e8c253a0 |
2252 | |
5f91c9e8 |
2253 | // place the hole for the motif, wrt the requested rotation angle |
2254 | Int_t rot = ( spMot.GetRotAngle()<0.1 ) ? reflZ:rotMat; |
2255 | |
e77b6d6b |
2256 | posX = where.X() + motifPos->Position().X() + spMot.GetDelta().X(); |
2257 | posY = where.Y() + motifPos->Position().Y() + spMot.GetDelta().Y(); |
5f91c9e8 |
2258 | posZ = where.Z() + sgn * (TotalHzPlane() + fgkHzGas + 2.*fgkHzPadPlane); |
e8c253a0 |
2259 | gMC->Gspos(fgkHoleName, copyNo, QuadrantMLayerName(chamber), posX, posY, posZ, rot, "ONLY"); |
5f91c9e8 |
2260 | |
2261 | // then place the daughter board for the motif, wrt the requested rotation angle |
2262 | posX = posX+fgkDeltaFilleEtamX; |
2263 | posY = posY+fgkDeltaFilleEtamY; |
2264 | posZ = where.Z() + sgn * (fgkMotherThick1 - TotalHzDaughter()); |
e8c253a0 |
2265 | gMC->Gspos(fgkDaughterName, copyNo, QuadrantMLayerName(chamber), posX, posY, posZ, rot, "ONLY"); |
5f91c9e8 |
2266 | |
86488ea7 |
2267 | #ifdef WITH_STL |
d1cd2474 |
2268 | alreadyDone.push_back(motifPosId);// mark this motif as done |
2269 | #endif |
86488ea7 |
2270 | #ifdef WITH_ROOT |
d1cd2474 |
2271 | if (nofAlreadyDone == alreadyDone.GetSize()) |
2272 | alreadyDone.Set(2*nofAlreadyDone); |
2273 | alreadyDone.AddAt(motifPosId, nofAlreadyDone++); |
2274 | #endif |
2275 | // check |
2276 | // cout << chamber << " processed motifPosId: " << motifPosId << endl; |
5f91c9e8 |
2277 | } |
2278 | }// end of special motif case |
2279 | } |
2280 | } |
5398f946 |
2281 | /// \endcond |
5f91c9e8 |
2282 | } |
2283 | |
2284 | //______________________________________________________________________________ |
d1cd2474 |
2285 | TString AliMUONSt1GeometryBuilderV2::GasVolumeName(const TString& name, Int_t chamber) const |
ba030c0e |
2286 | { |
5398f946 |
2287 | /// Insert the chamber number into the name. |
ba030c0e |
2288 | |
5f91c9e8 |
2289 | TString newString(name); |
2290 | |
2291 | TString number(""); |
2292 | number += chamber; |
ba030c0e |
2293 | |
5f91c9e8 |
2294 | newString.Insert(2, number); |
ba030c0e |
2295 | |
5f91c9e8 |
2296 | return newString; |
ba030c0e |
2297 | } |
2298 | |
5f91c9e8 |
2299 | // |
2300 | // public methods |
2301 | // |
2302 | |
2303 | //______________________________________________________________________________ |
d1cd2474 |
2304 | void AliMUONSt1GeometryBuilderV2::CreateMaterials() |
ba030c0e |
2305 | { |
5398f946 |
2306 | /// Define materials specific to station 1 |
2307 | |
d1cd2474 |
2308 | // Materials and medias defined in MUONv1: |
2309 | // |
2310 | // AliMaterial( 9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2); |
2311 | // AliMaterial(10, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2); |
2312 | // AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500); |
2313 | // AliMixture( 19, "Bakelite$", abak, zbak, dbak, -3, wbak); |
2314 | // AliMixture( 20, "ArC4H10 GAS$", ag, zg, dg, 3, wg); |
2315 | // AliMixture( 21, "TRIG GAS$", atrig, ztrig, dtrig, -5, wtrig); |
2316 | // AliMixture( 22, "ArCO2 80%$", ag1, zg1, dg1, 3, wg1); |
2317 | // AliMixture( 23, "Ar-freon $", atr1, ztr1, dtr1, 4, wtr1); |
2318 | // AliMixture( 24, "ArCO2 GAS$", agas, zgas, dgas, 3, wgas); |
2319 | // AliMaterial(31, "COPPER$", 63.54, 29., 8.96, 1.4, 0.); |
2320 | // AliMixture( 32, "Vetronite$",aglass, zglass, dglass, 5, wglass); |
2321 | // AliMaterial(33, "Carbon$", 12.01, 6., 2.265, 18.8, 49.9); |
2322 | // AliMixture( 34, "Rohacell$", arohac, zrohac, drohac, -4, wrohac); |
2323 | |
2324 | // AliMedium( 1, "AIR_CH_US ", 15, 1, iSXFLD, ... |
2325 | // AliMedium( 4, "ALU_CH_US ", 9, 0, iSXFLD, ... |
2326 | // AliMedium( 5, "ALU_CH_US ", 10, 0, iSXFLD, ... |
2327 | // AliMedium( 6, "AR_CH_US ", 20, 1, iSXFLD, ... |
2328 | // AliMedium( 7, "GAS_CH_TRIGGER ", 21, 1, iSXFLD, ... |
2329 | // AliMedium( 8, "BAKE_CH_TRIGGER ", 19, 0, iSXFLD, ... |
2330 | // AliMedium( 9, "ARG_CO2 ", 22, 1, iSXFLD, ... |
2331 | // AliMedium(11, "PCB_COPPER ", 31, 0, iSXFLD, ... |
2332 | // AliMedium(12, "VETRONITE ", 32, 0, iSXFLD, ... |
2333 | // AliMedium(13, "CARBON ", 33, 0, iSXFLD, ... |
2334 | // AliMedium(14, "Rohacell ", 34, 0, iSXFLD, ... |
2d5a9247 |
2335 | // AliMedium(24, "FrameCH$ ", 44, 1, iSXFLD, ... |
d1cd2474 |
2336 | |
2337 | // |
2338 | // --- Define materials for GEANT --- |
2339 | // |
2340 | |
2341 | fMUON->AliMaterial(41, "Aluminium II$", 26.98, 13., 2.7, -8.9, 26.1); |
2342 | // was id: 9 |
2343 | // from PDG and "The Particle Detector BriefBook", Bock and Vasilescu, P.18 |
2344 | // ??? same but the last but one argument < 0 |
d1cd2474 |
2345 | // |
2346 | // --- Define mixtures for GEANT --- |
2347 | // |
2348 | |
2349 | // Ar-CO2 gas II (80%+20%) |
2350 | Float_t ag1[2] = { 39.95, 44.01}; |
2351 | Float_t zg1[2] = { 18., 22.}; |
2352 | Float_t wg1[2] = { .8, 0.2}; |
2353 | Float_t dg1 = .001821; |
2354 | fMUON->AliMixture(45, "ArCO2 II 80%$", ag1, zg1, dg1, 2, wg1); |
2355 | // was id: 22 |
2356 | // use wg1 weighting factors (6th arg > 0) |
2357 | |
2358 | // Rohacell 51 II - imide methacrylique |
2359 | Float_t aRohacell51[4] = { 12.01, 1.01, 16.00, 14.01}; |
2360 | Float_t zRohacell51[4] = { 6., 1., 8., 7.}; |
2361 | Float_t wRohacell51[4] = { 9., 13., 2., 1.}; |
5f91c9e8 |
2362 | Float_t dRohacell51 = 0.052; |
d1cd2474 |
2363 | fMUON->AliMixture(46, "FOAM$",aRohacell51,zRohacell51,dRohacell51,-4,wRohacell51); |
2364 | // was id: 32 |
2365 | // use relative A (molecular) values (6th arg < 0) |
5f91c9e8 |
2366 | |
d1cd2474 |
2367 | Float_t aSnPb[2] = { 118.69, 207.19}; |
2368 | Float_t zSnPb[2] = { 50, 82}; |
2369 | Float_t wSnPb[2] = { 0.6, 0.4} ; |
5f91c9e8 |
2370 | Float_t dSnPb = 8.926; |
d1cd2474 |
2371 | fMUON->AliMixture(47, "SnPb$", aSnPb,zSnPb,dSnPb,2,wSnPb); |
2372 | // was id: 35 |
2373 | // use wSnPb weighting factors (6th arg > 0) |
ba030c0e |
2374 | |
5f91c9e8 |
2375 | // plastic definition from K5, Freiburg (found on web) |
d1cd2474 |
2376 | Float_t aPlastic[2]={ 1.01, 12.01}; |
2377 | Float_t zPlastic[2]={ 1, 6}; |
2378 | Float_t wPlastic[2]={ 1, 1}; |
5f91c9e8 |
2379 | Float_t denPlastic=1.107; |
d1cd2474 |
2380 | fMUON->AliMixture(48, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic); |
2381 | // was id: 33 |
2382 | // use relative A (molecular) values (6th arg < 0)...no other info... |
5f91c9e8 |
2383 | |
d1cd2474 |
2384 | // Not used, to be removed |
2385 | // |
d1cd2474 |
2386 | // was id: 34 |
2387 | |
5f91c9e8 |
2388 | // Inox/Stainless Steel (18%Cr, 9%Ni) |
d1cd2474 |
2389 | Float_t aInox[3] = {55.847, 51.9961, 58.6934}; |
2390 | Float_t zInox[3] = {26., 24., 28.}; |
2391 | Float_t wInox[3] = {0.73, 0.18, 0.09}; |
5f91c9e8 |
2392 | Float_t denInox = 7.930; |
d1cd2474 |
2393 | fMUON->AliMixture(50, "StainlessSteel$",aInox,zInox,denInox,3,wInox); |
2394 | // was id: 37 |
2395 | // use wInox weighting factors (6th arg > 0) |
2396 | // from CERN note NUFACT Note023, Oct.2000 |
2397 | // |
2398 | // End - Not used, to be removed |
2399 | |
2400 | // |
2401 | // --- Define the tracking medias for GEANT --- |
2402 | // |
2403 | |
5f91c9e8 |
2404 | GReal_t epsil = .001; // Tracking precision, |
d1cd2474 |
2405 | //GReal_t stemax = -1.; // Maximum displacement for multiple scat |
5f91c9e8 |
2406 | GReal_t tmaxfd = -20.; // Maximum angle due to field deflection |
d1cd2474 |
2407 | //GReal_t deemax = -.3; // Maximum fractional energy loss, DLS |
5f91c9e8 |
2408 | GReal_t stmin = -.8; |
d1cd2474 |
2409 | GReal_t maxStepAlu = fMUON->GetMaxStepAlu(); |
2410 | GReal_t maxDestepAlu = fMUON->GetMaxDestepAlu(); |
2411 | GReal_t maxStepGas = fMUON->GetMaxStepGas(); |
7b5f6560 |
2412 | Int_t iSXFLD = gAlice->Field()->PrecInteg(); |
5f91c9e8 |
2413 | Float_t sXMGMX = gAlice->Field()->Max(); |
2414 | |
d1cd2474 |
2415 | fMUON->AliMedium(21, "ALU_II$", 41, 0, iSXFLD, sXMGMX, |
2416 | tmaxfd, maxStepAlu, maxDestepAlu, epsil, stmin); |
f1501d74 |
2417 | |
d1cd2474 |
2418 | // was med: 20 mat: 36 |
2419 | fMUON->AliMedium(25, "ARG_CO2_II", 45, 1, iSXFLD, sXMGMX, |
2420 | tmaxfd, maxStepGas, maxDestepAlu, epsil, stmin); |
2421 | // was med: 9 mat: 22 |
2422 | fMUON->AliMedium(26, "FOAM_CH$", 46, 0, iSXFLD, sXMGMX, |
2423 | 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
2424 | // was med: 16 mat: 32 |
2425 | fMUON->AliMedium(27, "SnPb$", 47, 0, iSXFLD, sXMGMX, |
2426 | 10.0, 0.01, 1.0, 0.003, 0.003); |
2427 | // was med: 19 mat: 35 |
2428 | fMUON->AliMedium(28, "Plastic$", 48, 0, iSXFLD, sXMGMX, |
2429 | 10.0, 0.01, 1.0, 0.003, 0.003); |
2430 | // was med: 17 mat: 33 |
2431 | |
2432 | // Not used, to be romoved |
2433 | // |
f1501d74 |
2434 | |
d1cd2474 |
2435 | fMUON->AliMedium(30, "InoxBolts$", 50, 1, iSXFLD, sXMGMX, |
2436 | 10.0, 0.01, 1.0, 0.003, 0.003); |
2437 | // was med: 21 mat: 37 |
2438 | // |
2439 | // End - Not used, to be removed |
ba030c0e |
2440 | } |
2441 | |
5f91c9e8 |
2442 | //______________________________________________________________________________ |
d1cd2474 |
2443 | void AliMUONSt1GeometryBuilderV2::CreateGeometry() |
ba030c0e |
2444 | { |
5398f946 |
2445 | /// Create the detailed GEANT geometry for the dimuon arm station1 |
2446 | |
5a0e88a7 |
2447 | AliDebug(1,"Called"); |
5f91c9e8 |
2448 | |
adbabf6d |
2449 | // Define chamber volumes as virtual |
2450 | // |
2451 | |
5f91c9e8 |
2452 | // Create basic volumes |
2453 | // |
2454 | CreateHole(); |
2455 | CreateDaughterBoard(); |
2456 | CreateInnerLayers(); |
ba030c0e |
2457 | |
5f91c9e8 |
2458 | // Create reflexion matrices |
2459 | // |
d1cd2474 |
2460 | /* |
5f91c9e8 |
2461 | Int_t reflXZ, reflYZ, reflXY; |
d1cd2474 |
2462 | fMUON->AliMatrix(reflXZ, 90., 180., 90., 90., 180., 0.); |
2463 | fMUON->AliMatrix(reflYZ, 90., 0., 90.,-90., 180., 0.); |
2464 | fMUON->AliMatrix(reflXY, 90., 180., 90., 270., 0., 0.); |
2465 | */ |
5f91c9e8 |
2466 | // Define transformations for each quadrant |
e7addd77 |
2467 | // In old coordinate system: In new coordinate system: |
5f91c9e8 |
2468 | // |
e7addd77 |
2469 | // |
2470 | // II. | I. I. | II. |
ecbcb19e |
2471 | // | (101) | (100) |
e7addd77 |
2472 | // _____ | ____ _____ | ____ |
2473 | // | | |
2474 | // III. | IV. IV. | III. |
ecbcb19e |
2475 | // (102) | (103) |
5f91c9e8 |
2476 | // |
d1cd2474 |
2477 | /* |
5f91c9e8 |
2478 | Int_t rotm[4]; |
2479 | rotm[0]=0; // quadrant I |
2480 | rotm[1]=reflXZ; // quadrant II |
2481 | rotm[2]=reflXY; // quadrant III |
2482 | rotm[3]=reflYZ; // quadrant IV |
d1cd2474 |
2483 | */ |
2484 | TGeoRotation rotm[4]; |
2485 | rotm[0] = TGeoRotation("identity"); |
2486 | rotm[1] = TGeoRotation("reflXZ", 90., 180., 90., 90., 180., 0.); |
2487 | rotm[2] = TGeoRotation("reflXY", 90., 180., 90., 270., 0., 0.); |
2488 | rotm[3] = TGeoRotation("reflYZ", 90., 0., 90.,-90., 180., 0.); |
ba030c0e |
2489 | |
5f91c9e8 |
2490 | TVector3 scale[4]; |
2491 | scale[0] = TVector3( 1, 1, 1); // quadrant I |
2492 | scale[1] = TVector3(-1, 1, -1); // quadrant II |
2493 | scale[2] = TVector3(-1, -1, 1); // quadrant III |
2494 | scale[3] = TVector3( 1, -1, -1); // quadrant IV |
ba030c0e |
2495 | |
a432117a |
2496 | Int_t detElemId[4]; |
ecbcb19e |
2497 | detElemId[0] = 1; // quadrant I |
e7addd77 |
2498 | detElemId[1] = 0; // quadrant II |
ecbcb19e |
2499 | detElemId[2] = 3; // quadrant III |
2500 | detElemId[3] = 2; // quadrant IV |
a432117a |
2501 | |
5f91c9e8 |
2502 | // Shift in Z of the middle layer |
10bb087f |
2503 | Double_t deltaZ = 7.5/2.; |
5f91c9e8 |
2504 | |
2505 | // Position of quadrant I wrt to the chamber position |
b367fd8f |
2506 | // TVector3 pos0(-fgkDeltaQuadLHC, -fgkDeltaQuadLHC, deltaZ); |
5f91c9e8 |
2507 | |
2508 | // Shift for near/far layers |
2509 | GReal_t shiftXY = fgkFrameOffset; |
2510 | GReal_t shiftZ = fgkMotherThick1+fgkMotherThick2; |
2511 | |
2512 | // Build two chambers |
2513 | // |
2514 | for (Int_t ich=1; ich<3; ich++) { |
2515 | |
2516 | // Create quadrant volume |
2517 | CreateQuadrant(ich); |
2518 | |
2519 | // Place gas volumes |
2520 | PlaceInnerLayers(ich); |
2521 | |
2522 | // Place the quadrant |
2523 | for (Int_t i=0; i<4; i++) { |
2524 | |
b367fd8f |
2525 | // DE envelope |
2526 | GReal_t posx0, posy0, posz0; |
2527 | posx0 = fgkPadXOffsetBP * scale[i].X(); |
2528 | posy0 = fgkPadYOffsetBP * scale[i].Y();; |
2529 | posz0 = deltaZ * scale[i].Z(); |
2530 | GetEnvelopes(ich-1) |
2531 | ->AddEnvelope(QuadrantEnvelopeName(ich,i), detElemId[i] + ich*100, true, |
2532 | TGeoTranslation(posx0, posy0, posz0), rotm[i]); |
2533 | |
5f91c9e8 |
2534 | // Middle layer |
a432117a |
2535 | GReal_t posx, posy, posz; |
b367fd8f |
2536 | posx = -fgkDeltaQuadLHC - fgkPadXOffsetBP; |
2537 | posy = -fgkDeltaQuadLHC - fgkPadYOffsetBP; |
2538 | posz = 0.; |
a432117a |
2539 | GetEnvelopes(ich-1) |
b367fd8f |
2540 | ->AddEnvelopeConstituent(QuadrantMLayerName(ich), QuadrantEnvelopeName(ich,i), |
2541 | i+1, TGeoTranslation(posx, posy, posz)); |
5f91c9e8 |
2542 | |
2543 | // Near/far layers |
b367fd8f |
2544 | GReal_t posx2 = posx + shiftXY;; |
2545 | GReal_t posy2 = posy + shiftXY;; |
2546 | GReal_t posz2 = posz - shiftZ;; |
d1cd2474 |
2547 | //gMC->Gspos(QuadrantNLayerName(ich), i+1, "ALIC", posx2, posy2, posz2, rotm[i],"ONLY"); |
a432117a |
2548 | GetEnvelopes(ich-1) |
b367fd8f |
2549 | ->AddEnvelopeConstituent(QuadrantNLayerName(ich), QuadrantEnvelopeName(ich,i), |
2550 | i+1, TGeoTranslation(posx2, posy2, posz2)); |
5f91c9e8 |
2551 | |
b367fd8f |
2552 | posz2 = posz + shiftZ; |
d1cd2474 |
2553 | //gMC->Gspos(QuadrantFLayerName(ich), i+1, "ALIC", posx2, posy2, posz2, rotm[i],"ONLY"); |
a432117a |
2554 | GetEnvelopes(ich-1) |
b367fd8f |
2555 | ->AddEnvelopeConstituent(QuadrantFLayerName(ich), QuadrantEnvelopeName(ich,i), |
2556 | i+1, TGeoTranslation(posx2, posy2, posz2)); |
5f91c9e8 |
2557 | } |
2558 | } |
5f91c9e8 |
2559 | } |
2560 | |
2561 | //______________________________________________________________________________ |
d1cd2474 |
2562 | void AliMUONSt1GeometryBuilderV2::SetTransformations() |
5f91c9e8 |
2563 | { |
5398f946 |
2564 | /// Define the transformations for the station2 chambers. |
5f91c9e8 |
2565 | |
7b5f6560 |
2566 | if (gAlice->GetModule("SHIL")) { |
2567 | SetMotherVolume(0, "YOUT1"); |
2568 | SetMotherVolume(1, "YOUT1"); |
2569 | } |
2570 | |
adbabf6d |
2571 | SetVolume(0, "SC01", true); |
2572 | SetVolume(1, "SC02", true); |
2573 | |
b7ef3c96 |
2574 | Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(0); |
2575 | SetTranslation(0, TGeoTranslation(0., 0., zpos1)); |
5f91c9e8 |
2576 | |
b7ef3c96 |
2577 | Double_t zpos2 = - AliMUONConstants::DefaultChamberZ(1); |
2578 | SetTranslation(1, TGeoTranslation(0., 0., zpos2)); |
d1cd2474 |
2579 | } |
5f91c9e8 |
2580 | |
d1cd2474 |
2581 | //______________________________________________________________________________ |
2582 | void AliMUONSt1GeometryBuilderV2::SetSensitiveVolumes() |
2583 | { |
5398f946 |
2584 | /// Define the sensitive volumes for station2 chambers. |
5f91c9e8 |
2585 | |
e118b27e |
2586 | GetGeometry(0)->SetSensitiveVolume("SA1G"); |
2587 | GetGeometry(0)->SetSensitiveVolume("SB1G"); |
2588 | GetGeometry(0)->SetSensitiveVolume("SC1G"); |
2589 | GetGeometry(0)->SetSensitiveVolume("SD1G"); |
2590 | GetGeometry(0)->SetSensitiveVolume("SE1G"); |
2591 | GetGeometry(0)->SetSensitiveVolume("SF1G"); |
2592 | GetGeometry(0)->SetSensitiveVolume("SG1G"); |
2593 | GetGeometry(0)->SetSensitiveVolume("SH1G"); |
2594 | GetGeometry(0)->SetSensitiveVolume("SI1G"); |
2595 | GetGeometry(0)->SetSensitiveVolume("SJ1G"); |
2596 | GetGeometry(0)->SetSensitiveVolume("SK1G"); |
d1cd2474 |
2597 | |
e118b27e |
2598 | GetGeometry(1)->SetSensitiveVolume("SA2G"); |
2599 | GetGeometry(1)->SetSensitiveVolume("SB2G"); |
2600 | GetGeometry(1)->SetSensitiveVolume("SC2G"); |
2601 | GetGeometry(1)->SetSensitiveVolume("SD2G"); |
2602 | GetGeometry(1)->SetSensitiveVolume("SE2G"); |
2603 | GetGeometry(1)->SetSensitiveVolume("SF2G"); |
2604 | GetGeometry(1)->SetSensitiveVolume("SG2G"); |
2605 | GetGeometry(1)->SetSensitiveVolume("SH2G"); |
2606 | GetGeometry(1)->SetSensitiveVolume("SI2G"); |
2607 | GetGeometry(1)->SetSensitiveVolume("SJ2G"); |
2608 | GetGeometry(1)->SetSensitiveVolume("SK2G"); |
ba030c0e |
2609 | } |
5f91c9e8 |
2610 | |