66 Float_t aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
67 Float_t zAir[4] = {6., 7., 8., 18.};
68 Float_t wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
80 Float_t aconc[10] = {1., 12.01, 15.994, 22.99, 24.305, 26.98, 28.086, 39.1, 40.08, 55.85};
81 Float_t zconc[10] = {1., 6., 8., 11., 12., 13., 14., 19., 20., 26.};
82 Float_t wconc[10] = {.01, .001, .529107, .016, .002, .033872, .337021, .013, .044, .014};
86 Float_t asteel[4] = {55.847, 51.9961, 58.6934, 28.0855};
87 Float_t zsteel[4] = {26., 24., 28., 14.};
88 Float_t wsteel[4] = {.715, .18, .1, .005};
92 Float_t aniwcu[3] = {58.6934, 183.84, 63.546};
93 Float_t zniwcu[3] = {28., 74., 29};
94 Float_t wniwcu[3] = {0.015, 0.95, 0.035};
99 Float_t ains[4] = {28.0855, 15.9994, 47.867, 26.982};
100 Float_t zins[4] = {14., 8., 22., 13.};
101 Float_t wins[4] = {0.3019, 0.4887, 0.1914, 0.018};
106 Float_t epsil, stmin, tmaxfd, deemax, stemax;
117 matmgr.Material(
"ABSO", 6,
"CARBON0$", 12.01, 6., 1.75, 24.4, 49.9);
118 matmgr.Material(
"ABSO", 26,
"CARBON1$", 12.01, 6., 1.75, 24.4, 49.9);
119 matmgr.Material(
"ABSO", 46,
"CARBON2$", 12.01, 6., 1.75, 24.4, 49.9);
120 matmgr.Medium(
"ABSO", 6,
"C_C0", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
121 matmgr.Medium(
"ABSO", 26,
"C_C1", 26, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
122 matmgr.Medium(
"ABSO", 46,
"C_C2", 46, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
126 matmgr.Material(
"ABSO", 9,
"ALUMINIUM0$", 26.98, 13., 2.7, 8.9, 37.2);
127 matmgr.Material(
"ABSO", 29,
"ALUMINIUM1$", 26.98, 13., 2.7, 8.9, 37.2);
128 matmgr.Material(
"ABSO", 49,
"ALUMINIUM2$", 26.98, 13., 2.7, 8.9, 37.2);
129 matmgr.Medium(
"ABSO", 9,
"ALU_C0", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
130 matmgr.Medium(
"ABSO", 29,
"ALU_C1", 29, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
131 matmgr.Medium(
"ABSO", 49,
"ALU_C2", 49, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
135 matmgr.Material(
"ABSO", 7,
"MAGNESIUM$", 24.31, 12., 1.74, 25.3, 46.0);
136 matmgr.Medium(
"ABSO", 7,
"MG_C0", 7, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
140 matmgr.Mixture(
"ABSO", 21,
"Ni-W-Cu0$", aniwcu, zniwcu, 18.78, 3, wniwcu);
141 matmgr.Mixture(
"ABSO", 41,
"Ni-W-Cu1$", aniwcu, zniwcu, 18.78, 3, wniwcu);
142 matmgr.Mixture(
"ABSO", 61,
"Ni-W-Cu2$", aniwcu, zniwcu, 18.78, 3, wniwcu);
143 matmgr.Medium(
"ABSO", 21,
"Ni/W0", 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
144 matmgr.Medium(
"ABSO", 41,
"Ni/W1", 41, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
145 matmgr.Medium(
"ABSO", 61,
"Ni/W3", 61, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
149 matmgr.Material(
"ABSO", 13,
"LEAD0$", 207.19, 82., 11.35, .56, 18.5);
150 matmgr.Material(
"ABSO", 33,
"LEAD1$", 207.19, 82., 11.35, .56, 18.5);
151 matmgr.Material(
"ABSO", 53,
"LEAD2$", 207.19, 82., 11.35, .56, 18.5);
152 matmgr.Medium(
"ABSO", 13,
"PB_C0", 13, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
153 matmgr.Medium(
"ABSO", 33,
"PB_C1", 33, 0, isxfld, sxmgmx, tmaxfd, -stemax, deemax, epsil, stmin);
154 matmgr.Medium(
"ABSO", 53,
"PB_C2", 53, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
158 matmgr.Mixture(
"ABSO", 14,
"INSULATION0$", ains, zins, 0.41, 4, wins);
159 matmgr.Mixture(
"ABSO", 34,
"INSULATION1$", ains, zins, 0.41, 4, wins);
160 matmgr.Mixture(
"ABSO", 54,
"INSULATION2$", ains, zins, 0.41, 4, wins);
161 matmgr.Medium(
"ABSO", 14,
"INS_C0", 14, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
162 matmgr.Medium(
"ABSO", 34,
"INS_C1", 34, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
163 matmgr.Medium(
"ABSO", 54,
"INS_C2", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
167 matmgr.Mixture(
"ABSO", 15,
"AIR0$", aAir, zAir, dAir, 4, wAir);
168 matmgr.Mixture(
"ABSO", 35,
"AIR1$", aAir, zAir, dAir, 4, wAir);
169 matmgr.Mixture(
"ABSO", 55,
"AIR2$", aAir, zAir, dAir, 4, wAir);
170 matmgr.Medium(
"ABSO", 15,
"AIR_C0", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
171 matmgr.Medium(
"ABSO", 35,
"AIR_C1", 35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
172 matmgr.Medium(
"ABSO", 55,
"AIR_C2", 55, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
176 matmgr.Mixture(
"ABSO", 16,
"VACUUM0$", aAir, zAir, dAir1, 4, wAir);
177 matmgr.Mixture(
"ABSO", 36,
"VACUUM1$", aAir, zAir, dAir1, 4, wAir);
178 matmgr.Mixture(
"ABSO", 56,
"VACUUM2$", aAir, zAir, dAir1, 4, wAir);
179 matmgr.Medium(
"ABSO", 16,
"VA_C0", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
180 matmgr.Medium(
"ABSO", 36,
"VA_C1", 36, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
181 matmgr.Medium(
"ABSO", 56,
"VA_C2", 56, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
185 matmgr.Mixture(
"ABSO", 17,
"CONCRETE0$", aconc, zconc, 2.35, 10, wconc);
186 matmgr.Mixture(
"ABSO", 37,
"CONCRETE1$", aconc, zconc, 2.35, 10, wconc);
187 matmgr.Mixture(
"ABSO", 57,
"CONCRETE2$", aconc, zconc, 2.35, 10, wconc);
188 matmgr.Medium(
"ABSO", 17,
"CC_C0", 17, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
189 matmgr.Medium(
"ABSO", 37,
"CC_C1", 37, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
190 matmgr.Medium(
"ABSO", 57,
"CC_C2", 57, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
194 matmgr.Mixture(
"ABSO", 18,
"POLYETHYLEN0$", apoly, zpoly, .95, -2, wpoly);
195 matmgr.Mixture(
"ABSO", 38,
"POLYETHYLEN1$", apoly, zpoly, .95, 2, wpoly);
196 matmgr.Mixture(
"ABSO", 58,
"POLYETHYLEN2$", apoly, zpoly, .95, 2, wpoly);
197 matmgr.Medium(
"ABSO", 18,
"CH2_C0", 18, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
198 matmgr.Medium(
"ABSO", 38,
"CH2_C1", 38, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
199 matmgr.Medium(
"ABSO", 58,
"CH2_C2", 58, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
203 matmgr.Mixture(
"ABSO", 19,
"STAINLESS STEEL0$", asteel, zsteel, 7.88, 4, wsteel);
204 matmgr.Mixture(
"ABSO", 39,
"STAINLESS STEEL1$", asteel, zsteel, 7.88, 4, wsteel);
205 matmgr.Mixture(
"ABSO", 59,
"STAINLESS STEEL2$", asteel, zsteel, 7.88, 4, wsteel);
206 matmgr.Medium(
"ABSO", 19,
"ST_C0", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
207 matmgr.Medium(
"ABSO", 39,
"ST_C1", 39, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
208 matmgr.Medium(
"ABSO", 59,
"ST_C3", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
240 TGeoVolume* barrel = gGeoManager->GetVolume(
"barrel");
245 auto kMedNiW = matmgr.getTGeoMedium(
"ABSO_Ni/W0");
246 auto kMedNiWsh = matmgr.getTGeoMedium(
"ABSO_Ni/W3");
248 auto kMedSteel = matmgr.getTGeoMedium(
"ABSO_ST_C0");
249 auto kMedSteelSh = matmgr.getTGeoMedium(
"ABSO_ST_C3");
251 auto kMedAir = matmgr.getTGeoMedium(
"ABSO_AIR_C0");
253 auto kMedPb = matmgr.getTGeoMedium(
"ABSO_PB_C0");
254 auto kMedPbSh = matmgr.getTGeoMedium(
"ABSO_PB_C2");
256 auto kMedConcSh = matmgr.getTGeoMedium(
"ABSO_CC_C2");
258 auto kMedCH2Sh = matmgr.getTGeoMedium(
"ABSO_CH2_C2");
260 auto kMedC = matmgr.getTGeoMedium(
"ABSO_C_C0");
261 auto kMedCsh = matmgr.getTGeoMedium(
"ABSO_C_C2");
263 auto kMedAlu = matmgr.getTGeoMedium(
"ABSO_ALU_C0");
265 auto kMedMg = matmgr.getTGeoMedium(
"ABSO_MG_C0");
267 const Float_t kDegRad = TMath::Pi() / 180.;
270 TGeoRotation* rotxz =
new TGeoRotation(
"rotxz", 90., 0., 90., 90., 180., 0.);
300 const Float_t angle02 = TMath::Tan(2. * kDegRad);
302 const Float_t angle10 = TMath::Tan(10. * kDegRad);
304 const Float_t angle03 = TMath::Tan(3. * kDegRad);
306 const Float_t angle05 = TMath::Tan(5. * kDegRad);
308 const Float_t angle24 = TMath::Tan(24. * kDegRad);
310 const Float_t angle71 = TMath::Tan(0.697 * kDegRad);
324 Float_t dzSteelEnvelopeFC = 4.00;
326 Float_t rInSteelEnvelopeFC1 = 35.90 / 2.;
327 Float_t rInSteelEnvelopeFC2 = rInSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle10;
329 Float_t rOuSteelEnvelopeFC1 = 88.97 / 2.;
330 Float_t rOuSteelEnvelopeFC2 = rOuSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle05;
333 Float_t dzSteelEnvelopeC5 = 168.9;
334 Float_t rInSteelEnvelopeC5 = rOuSteelEnvelopeFC2 - dSteelEnvelope / TMath::Cos(5 * kDegRad);
335 Float_t rOuSteelEnvelopeC5 = rOuSteelEnvelopeFC2;
337 Float_t dzSteelEnvelopeC10 = 227.1 - 4.;
338 Float_t rInSteelEnvelopeC10 = 116.22 / 2.;
339 Float_t rOuSteelEnvelopeC10 = rInSteelEnvelopeC10 + dSteelEnvelope / TMath::Cos(10 * kDegRad);
342 Float_t rInSteelEnvelopeR2 = 196.3 / 2.;
343 Float_t rOuSteelEnvelopeR2 = 212.0 / 2.;
344 Float_t rInSteelEnvelopeR1 = rInSteelEnvelopeR2 - dzSteelEnvelopeR * angle10;
345 Float_t rOuSteelEnvelopeR1 = rInSteelEnvelopeR1 + dSteelEnvelope / TMath::Cos(10 * kDegRad);
347 Float_t dzSteelEnvelopeFI = 1.;
348 Float_t rInSteelEnvelopeFI = 42.0 / 2.;
349 Float_t rOuSteelEnvelopeFI = 85.0 / 2. + 0.06;
351 TGeoPcon* shFaSteelEnvelopeC =
new TGeoPcon(0., 360., 7);
354 shFaSteelEnvelopeC->DefineSection(0,
z, rInSteelEnvelopeFC1, rOuSteelEnvelopeFC1);
355 z += dzSteelEnvelopeFC;
356 shFaSteelEnvelopeC->DefineSection(1,
z, rInSteelEnvelopeFC2, rOuSteelEnvelopeFC2);
358 shFaSteelEnvelopeC->DefineSection(2,
z, rInSteelEnvelopeC5, rOuSteelEnvelopeC5);
359 z += dzSteelEnvelopeC5;
360 shFaSteelEnvelopeC->DefineSection(3,
z, rInSteelEnvelopeC10, rOuSteelEnvelopeC10);
362 z += dzSteelEnvelopeC10;
363 shFaSteelEnvelopeC->DefineSection(4,
z, rInSteelEnvelopeR1, rOuSteelEnvelopeR1);
365 shFaSteelEnvelopeC->DefineSection(5,
z, rInSteelEnvelopeR1, rOuSteelEnvelopeR2);
366 z += dzSteelEnvelopeR;
367 shFaSteelEnvelopeC->DefineSection(6,
z, rInSteelEnvelopeR2, rOuSteelEnvelopeR2);
370 shFaSteelEnvelopeC->SetName(
"steelEnvC");
371 TGeoTube* shFaSteelEnvelopeT =
new TGeoTube(rInSteelEnvelopeFI, rOuSteelEnvelopeFI, dzSteelEnvelopeFI);
372 shFaSteelEnvelopeT->SetName(
"steelEnvT");
373 TGeoCompositeShape* shFaSteelEnvelope =
new TGeoCompositeShape(
"shFaSteelEnvelope",
"steelEnvC-steelEnvT");
375 TGeoVolume* voFaSteelEnvelope =
new TGeoVolume(
"AFaSteelEnvelope", shFaSteelEnvelope, kMedSteel);
390 Float_t rInEndPlate = 52.5 / 2.;
392 Float_t rInEndPlateI = 175.3 / 2.;
393 Float_t rOuEndPlateI = 212.2 / 2.;
396 TGeoBBox* endPlate1 =
new TGeoBBox(dxEndPlate / 2., dyEndPlate / 2., dzEndPlate / 2.);
397 endPlate1->SetName(
"endPlate1");
399 TGeoTube* endPlate2 =
new TGeoTube(0., rInEndPlate, (dzEndPlate + 0.1) / 2.);
400 endPlate2->SetName(
"endPlate2");
401 TGeoTube* endPlate3 =
new TGeoTube(rInEndPlateI, rOuEndPlateI, (dzEndPlateI + 0.1) / 2.);
402 endPlate3->SetName(
"endPlate3");
404 TGeoTranslation* tPlate =
new TGeoTranslation(
"tPlate", 0., 0., -dzEndPlateI - 0.05);
405 tPlate->RegisterYourself();
407 TGeoCompositeShape* shFaEndPlate =
new TGeoCompositeShape(
"shFaEndPlate",
"endPlate1-(endPlate2+endPlate3:tPlate)");
408 TGeoVolume* voFaEndPlate =
new TGeoVolume(
"AFaEndPlate", shFaEndPlate, kMedSteel);
418 Float_t rOuFaFlange = 41.0 / 2.;
421 Float_t rInFaFlange1 = 33.4 / 2.;
424 Float_t rInFaFlange2 = 36.4 / 2.;
426 TGeoPcon* shFaFlange =
new TGeoPcon(0., 360., 4);
428 shFaFlange->DefineSection(0,
z, rInFaFlange1, rOuFaFlange);
430 shFaFlange->DefineSection(1,
z, rInFaFlange1, rOuFaFlange);
431 shFaFlange->DefineSection(2,
z, rInFaFlange2, rOuFaFlange);
433 shFaFlange->DefineSection(3,
z, rInFaFlange2, rOuFaFlange);
435 TGeoVolume* voFaFlange =
new TGeoVolume(
"AFaFlange", shFaFlange, kMedSteel);
449 Float_t rOuFaQPlateC1 = rOuFaQPlateF + dzFaWPlateF * angle24;
452 Float_t rInFaQPlateC2 = rInFaQPlateC1 + dzFaWPlateC1 * angle10;
453 Float_t rOuFaQPlateC2 = rOuFaQPlateC1 + dzFaWPlateC1 * angle24;
461 Float_t dzFaWPlate = dzFaWPlateF + dzFaWPlateC1 + dzFaWPlateC2;
463 TGeoPcon* shFaWPlateA =
new TGeoPcon(0., 360., 7);
466 shFaWPlateA->DefineSection(0,
z, rInFaQPlateF, rOuFaQPlateF);
468 shFaWPlateA->DefineSection(1,
z, rInFaQPlateF, rOuFaQPlateC1);
470 shFaWPlateA->DefineSection(2,
z, rInFaQPlateC1, rOuFaQPlateC1);
472 shFaWPlateA->DefineSection(3,
z, rInFaQPlateC2, rOuFaQPlateC2);
475 shFaWPlateA->DefineSection(4,
z, rInFaQPlateC3, rOuFaQPlateC3);
477 shFaWPlateA->DefineSection(5,
z, rInFaQPlateR, rOuFaQPlateR);
479 shFaWPlateA->DefineSection(6,
z, rInFaQPlateR, rOuFaQPlateR);
481 TGeoVolume* voFaWPlateA =
new TGeoVolume(
"AFaWPlateA", shFaWPlateA, kMedNiW);
483 TGeoPcon* shFaWPlateAI =
new TGeoPcon(0., 360., 5);
485 shFaWPlateAI->DefineSection(0,
z, rInFaQPlateF +
z * angle10, rOuFaQPlateC1 + (
z - dzFaWPlateF) * angle24);
486 for (Int_t
i = 1;
i < 5;
i++) {
487 Float_t rmin = shFaWPlateA->GetRmin(
i + 2);
488 Float_t rmax = shFaWPlateA->GetRmax(
i + 2) - 3.;
489 Float_t zpos = shFaWPlateA->GetZ(
i + 2);
490 shFaWPlateAI->DefineSection(
i, zpos, rmin, rmax);
492 TGeoVolume* voFaWPlateAI =
new TGeoVolume(
"AFaWPlateAI", shFaWPlateAI, kMedNiWsh);
493 voFaWPlateA->AddNode(voFaWPlateAI, 1, gGeoIdentity);
515 Float_t rInFaWTube1C1 = 9.1 / 2.;
518 Float_t rOuFaWTube1C1 = 13.8 / 2.;
519 Float_t rOuFaWTube1C2 = 20.7 / 2.;
522 Float_t rOuFaWTube1R = 15.0 / 2.;
524 Float_t dzFaWTube1 = dzFaWTube1C + dzFaWTube1R;
526 TGeoPcon* shFaWTube1 =
new TGeoPcon(0., 360., 4);
529 shFaWTube1->DefineSection(0,
z, rInFaWTube1C1, rOuFaWTube1C1);
531 shFaWTube1->DefineSection(1,
z, rInFaWTube1C1, rOuFaWTube1C2);
533 shFaWTube1->DefineSection(2,
z, rInFaWTube1C1, rOuFaWTube1R);
535 shFaWTube1->DefineSection(3,
z, rInFaWTube1C1, rOuFaWTube1R);
537 TGeoVolume* voFaWTube1 =
new TGeoVolume(
"AFaWTube1", shFaWTube1, kMedNiWsh);
548 Float_t rInFaWTube2C1 = 9.10 / 2.;
549 Float_t rInFaWTube2C2 = 12.58 / 2.;
550 Float_t rOuFaWTube2C1 = 20.70 / 2.;
551 Float_t rOuFaWTube2C2 = 30.72 / 2. - 0.05;
554 Float_t rInFaWTube2F = 15.4 / 2.;
556 Float_t dzFaWTube2 = dzFaWTube2C + dzFaWTube2F;
558 TGeoPcon* shFaWTube2 =
new TGeoPcon(0., 360., 4);
561 shFaWTube2->DefineSection(0,
z, rInFaWTube2F, rOuFaWTube2C1);
563 shFaWTube2->DefineSection(1,
z, rInFaWTube2F, rOuFaWTube2C1);
565 shFaWTube2->DefineSection(2,
z, rInFaWTube2C1, rOuFaWTube2C1);
567 shFaWTube2->DefineSection(3,
z, rInFaWTube2C2, rOuFaWTube2C2);
569 TGeoVolume* voFaWTube2 =
new TGeoVolume(
"AFaWTube2", shFaWTube2, kMedNiWsh);
577 Float_t rInFaWTube3C1 = 12.59 / 2.;
578 Float_t rInFaWTube3C2 = 13.23 / 2.;
579 Float_t rOuFaWTube3C1 = 30.60 / 2.;
580 Float_t rOuFaWTube3C2 = 32.35 / 2.;
581 TGeoVolume* voFaWTube3 =
new TGeoVolume(
582 "AFaWTube3",
new TGeoCone(dzFaWTube3 / 2., rInFaWTube3C1, rOuFaWTube3C1, rInFaWTube3C2, rOuFaWTube3C2), kMedNiWsh);
590 Float_t rInFaWTube4C1 = 13.23 / 2.;
591 Float_t rInFaWTube4C2 = 13.98 / 2.;
592 Float_t rOuFaWTube4C1 = 48.80 / 2.;
593 Float_t rOuFaWTube4C2 = 52.05 / 2.;
594 TGeoVolume* voFaWTube4 =
new TGeoVolume(
595 "AFaWTube4",
new TGeoCone(dzFaWTube4 / 2., rInFaWTube4C1, rOuFaWTube4C1, rInFaWTube4C2, rOuFaWTube4C2), kMedNiWsh);
601 Float_t kAngle0071 = TMath::Tan(0.71 * kDegRad);
602 Float_t rInFaWTube5C1 = rInFaWTube4C2;
603 Float_t rInFaWTube5C2 = rInFaWTube4C2 + dzFaWTube4 * kAngle0071;
604 Float_t rOuFaWTube5C1 = rOuFaWTube4C2;
605 TGeoVolume* voFaWTube5 =
new TGeoVolume(
606 "AFaWTube5",
new TGeoCone(dzFaWTube5 / 2., rInFaWTube5C1, rOuFaWTube5C1, rInFaWTube5C2, rOuFaWTube5C1), kMedNiWsh);
616 Float_t dzFaGraphiteCone = 225.0;
618 Float_t dzFaGraphiteConeS = 108.3;
620 Float_t rInFaGraphiteCone1 = 4.5;
622 Float_t rOuFaGraphiteCone1 = (zFa + dzFaFlange) * angle10;
624 Float_t rInFaGraphiteCone2 = 7.0;
626 Float_t rOuFaGraphiteCone2 = (zFa + dzFaFlange + dzFaGraphiteConeS) * angle10;
628 Float_t rInFaGraphiteCone3 = 11.0;
630 Float_t rOuFaGraphiteCone3 = (zFa + dzFaFlange + dzFaGraphiteCone) * angle10;
632 TGeoPcon* shFaGraphiteCone =
new TGeoPcon(0., 360., 4);
636 shFaGraphiteCone->DefineSection(0,
z, rInFaGraphiteCone1, rOuFaGraphiteCone1);
637 z += dzFaGraphiteConeS;
638 shFaGraphiteCone->DefineSection(1,
z, rInFaGraphiteCone1, rOuFaGraphiteCone2);
640 shFaGraphiteCone->DefineSection(2,
z, rInFaGraphiteCone2, rOuFaGraphiteCone2);
641 z = dzFaGraphiteCone;
642 shFaGraphiteCone->DefineSection(3,
z, rInFaGraphiteCone3, rOuFaGraphiteCone3);
644 TGeoVolume* voFaGraphiteCone =
new TGeoVolume(
"AFaGraphiteCone", shFaGraphiteCone, kMedCsh);
648 TGeoCone* shFaGraphiteConeO =
new TGeoCone(dz / 2., rInFaGraphiteCone1, rOuFaGraphiteCone1, rInFaGraphiteCone1,
649 rOuFaGraphiteCone1 + dz * angle10);
651 TGeoVolume* voFaGraphiteConeO =
new TGeoVolume(
"AFaGraphiteConeO", shFaGraphiteConeO, kMedC);
652 voFaGraphiteCone->AddNode(voFaGraphiteConeO, 1,
new TGeoTranslation(0., 0., dz / 2.));
661 Float_t rInFaPbCone5 = 37.35 / 2.;
662 Float_t rOuFaPbCone5 = 85.66 / 2.;
665 Float_t rInFaPbCone10 = rInFaPbCone5 + dzFaPbCone5 * angle10;
666 Float_t rOuFaPbCone10 = 115.2 / 2.;
668 Float_t rInFaPbConeE = 106.05 / 2.;
669 Float_t rOuFaPbConeE = 124.35 / 2.;
671 Float_t dzFaPbCone = dzFaPbCone5 + dzFaPbCone10;
673 TGeoPcon* shFaPbCone =
new TGeoPcon(0., 360., 3);
676 shFaPbCone->DefineSection(0,
z, rInFaPbCone5, rOuFaPbCone5);
679 shFaPbCone->DefineSection(1,
z, rInFaPbCone10, rOuFaPbCone10);
681 shFaPbCone->DefineSection(2,
z, rInFaPbConeE, rOuFaPbConeE);
683 TGeoVolume* voFaPbCone =
new TGeoVolume(
"AFaPbCone", shFaPbCone, kMedPb);
687 TGeoVolume* voFaPbConeI =
new TGeoVolume(
"AFaPbConeI", shFaPbConeI, kMedPbSh);
688 voFaPbCone->AddNode(voFaPbConeI, 1, gGeoIdentity);
695 Float_t dzFaConcreteCone = 126.;
696 Float_t rOuFaConcreteCone1 = rOuFaGraphiteCone3;
697 Float_t rInFaConcreteCone1 = 11.;
698 Float_t rOuFaConcreteCone2 = rOuFaConcreteCone1 + dzFaConcreteCone * angle10;
699 Float_t rInFaConcreteCone2 = rInFaConcreteCone1 + dzFaConcreteCone * angle02;
701 TGeoVolume* voFaConcreteCone =
new TGeoVolume(
703 new TGeoCone(dzFaConcreteCone / 2., rInFaConcreteCone1, rOuFaConcreteCone1, rInFaConcreteCone2, rOuFaConcreteCone2),
712 Float_t rInFaCH2Cone1 = 106.0 / 2.;
713 Float_t rInFaCH2Cone2 = 176.9 / 2.;
714 Float_t dFaCH2Cone = 7.5 / TMath::Cos(10. * kDegRad);
716 TGeoVolume* voFaCH2Cone =
717 new TGeoVolume(
"AFaCH2Cone",
new TGeoCone(dzFaCH2Cone / 2., rInFaCH2Cone1, rInFaCH2Cone1 + dFaCH2Cone, rInFaCH2Cone2, rInFaCH2Cone2 + dFaCH2Cone),
727 Float_t rInFaSteelCone25A = rInFaConcreteCone2;
728 Float_t rOuFaSteelCone25A = rOuFaConcreteCone2;
729 Float_t rInFaSteelCone25B = rInFaSteelCone25A + dzFaSteelCone25 * angle02;
730 Float_t rOuFaSteelCone25B = rOuFaSteelCone25A + dzFaSteelCone25 * angle10;
732 TGeoVolume* voFaSteelCone25 =
new TGeoVolume(
733 "AFaSteelCone25",
new TGeoCone(dzFaSteelCone25 / 2., rInFaSteelCone25A + eps, rOuFaSteelCone25A - eps, rInFaSteelCone25B + eps, rOuFaSteelCone25B - eps),
742 Float_t rInFaSteelCone31A = rOuFaWTube4C1;
744 Float_t rOuFaSteelCone31A = rOuFaSteelCone25B;
745 Float_t rInFaSteelCone31B = rOuFaWTube4C2;
746 Float_t rOuFaSteelCone31B = rOuFaSteelCone31A + dzFaSteelCone31 * angle10;
748 TGeoVolume* voFaSteelCone31 =
new TGeoVolume(
749 "AFaSteelCone31",
new TGeoCone(dzFaSteelCone31 / 2., rInFaSteelCone31A + eps, rOuFaSteelCone31A - eps, rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps),
753 TGeoVolume* voFaSteelCone31I =
754 new TGeoVolume(
"AFaSteelCone31I",
755 new TGeoCone(dz / 2., rInFaSteelCone31B - dz * angle03 + eps, rOuFaSteelCone31B - dz * angle10 - eps,
756 rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps),
759 voFaSteelCone31->AddNode(voFaSteelCone31I, 1,
new TGeoTranslation(0., 0., dzFaSteelCone31 / 2. - dz / 2.));
767 Float_t rInFaCompRing1 = 11.0 / 2.;
768 Float_t rOuFaCompRing1 = 32.4 / 2.;
771 Float_t rInFaCompRing2 = 14.0 / 2.;
772 Float_t rOuFaCompRing2 = 35.3 / 2.;
774 TGeoPcon* shFaCompRing =
new TGeoPcon(0., 360., 4);
777 shFaCompRing->DefineSection(0,
z, rInFaCompRing1, rOuFaCompRing1);
779 shFaCompRing->DefineSection(1,
z, rInFaCompRing1, rOuFaCompRing1);
781 shFaCompRing->DefineSection(2,
z, rInFaCompRing2, rOuFaCompRing2);
784 shFaCompRing->DefineSection(3,
z, rInFaCompRing2, rOuFaCompRing2);
786 TGeoVolume* voFaCompRing =
new TGeoVolume(
"AFaCompRing", shFaCompRing, kMedC);
801 TGeoPcon* shFaMgRing =
new TGeoPcon(0., 360., 8);
804 shFaMgRing->DefineSection(0,
z, rInFaMgRingO, rInFaCompRing1);
806 shFaMgRing->DefineSection(1,
z, rInFaMgRingO, rInFaCompRing1);
808 shFaMgRing->DefineSection(2,
z, rInFaMgRingI, rInFaCompRing1);
809 z += dzFaMgRingI / 2.;
810 shFaMgRing->DefineSection(3,
z, rInFaMgRingI, rInFaCompRing1);
812 shFaMgRing->DefineSection(4,
z, rInFaMgRingI, rInFaCompRing2);
813 z += dzFaMgRingI / 2.;
814 shFaMgRing->DefineSection(5,
z, rInFaMgRingI, rInFaCompRing2);
816 shFaMgRing->DefineSection(6,
z, rInFaMgRingO, rInFaCompRing2);
818 shFaMgRing->DefineSection(7,
z, rInFaMgRingO, rInFaCompRing2);
819 TGeoVolume* voFaMgRing =
new TGeoVolume(
"AFaMgRing", shFaMgRing, kMedMg);
826 Float_t dzFa = dzFaFlange + dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25 + dzFaSteelCone31;
827 TGeoPcon* shFaM =
new TGeoPcon(0., 360., 16);
830 shFaM->DefineSection(0,
z, rInFaMgRingO, rOuFaQPlateF);
833 shFaM->DefineSection(1,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
834 shFaM->DefineSection(2,
z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
837 shFaM->DefineSection(3,
z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
838 shFaM->DefineSection(4,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
841 shFaM->DefineSection(5,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
842 shFaM->DefineSection(6,
z, rInFaGraphiteCone1, rOuFaQPlateF + dz * angle24);
845 shFaM->DefineSection(7,
z, rInFaGraphiteCone1, rOuFaQPlateC2);
848 shFaM->DefineSection(8,
z, rInFaGraphiteCone1, rOuFaQPlateC3);
850 z = zFaSteelEnvelope + dzSteelEnvelopeFC + dzSteelEnvelopeC5;
851 shFaM->DefineSection(9,
z, rInFaGraphiteCone1, rOuSteelEnvelopeC10);
854 z = dzFaFlange + dzFaGraphiteConeS + dzFaWTube1C;
856 shFaM->DefineSection(10,
z, rInFaGraphiteCone1, rOuSteelEnvelopeC10 + dz * angle10);
859 z = dzFa - dzSteelEnvelopeR / 2.;
861 shFaM->DefineSection(11,
z, rInFaGraphiteCone1 + dz * angle71, rOuSteelEnvelopeR1);
862 shFaM->DefineSection(12,
z, rInFaGraphiteCone1 + dz * angle71, rOuSteelEnvelopeR2);
863 z += dzSteelEnvelopeR / 2.;
864 shFaM->DefineSection(13,
z, rInFaWTube4C2, rOuSteelEnvelopeR2);
866 dz = dzSteelEnvelopeR / 2;
867 shFaM->DefineSection(14,
z, rInFaCH2Cone2 - dz * angle10, rOuSteelEnvelopeR2);
868 z += dzSteelEnvelopeR / 2.;
869 shFaM->DefineSection(15,
z, rInFaCH2Cone2, rOuSteelEnvelopeR2);
870 TGeoVolume* voFaM =
new TGeoVolume(
"AFaM", shFaM, kMedAir);
871 voFaM->SetVisibility(0);
875 TGeoPcon* shFaAccM =
new TGeoPcon(0., 360., 7);
876 for (Int_t
i = 0;
i < 4;
i++) {
877 Float_t zpos = shFaGraphiteCone->GetZ(
i);
878 Float_t rmin = shFaGraphiteCone->GetRmin(
i);
879 Float_t rmax = shFaGraphiteCone->GetRmax(
i);
880 shFaAccM->DefineSection(
i, zpos, rmin, rmax);
882 z = dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25;
883 z0 =
z + zFa + dzFaFlange;
884 shFaAccM->DefineSection(4,
z, rOuFaWTube3C2, z0 * angle10);
885 shFaAccM->DefineSection(5,
z, rOuFaWTube4C1, z0 * angle10);
886 z += dzFaSteelCone31;
887 z0 += dzFaSteelCone31;
888 shFaAccM->DefineSection(6,
z, rOuFaWTube4C2, z0 * angle10);
889 TGeoVolume* voFaAccM =
new TGeoVolume(
"AFaAcc", shFaAccM, kMedAir);
892 voFaAccM->AddNode(voFaGraphiteCone, 1, gGeoIdentity);
893 z += dzFaGraphiteCone;
894 voFaAccM->AddNode(voFaConcreteCone, 1,
new TGeoTranslation(0., 0.,
z + dzFaConcreteCone / 2.));
895 z += dzFaConcreteCone;
896 voFaAccM->AddNode(voFaSteelCone25, 1,
new TGeoTranslation(0., 0.,
z + dzFaSteelCone25 / 2.));
897 z += dzFaSteelCone25;
898 voFaAccM->AddNode(voFaSteelCone31, 1,
new TGeoTranslation(0., 0.,
z + dzFaSteelCone31 / 2.));
902 TGeoVolumeAssembly* voFaInnerShield =
new TGeoVolumeAssembly(
"AFaInnerShield");
903 voFaInnerShield->AddNode(voFaWTube1, 1, gGeoIdentity);
904 z = dzFaWTube1 - 0.6;
905 voFaInnerShield->AddNode(voFaWTube2, 1,
new TGeoTranslation(0., 0.,
z));
907 voFaInnerShield->AddNode(voFaWTube3, 1,
new TGeoTranslation(0., 0.,
z + dzFaWTube3 / 2.));
909 voFaInnerShield->AddNode(voFaWTube4, 1,
new TGeoTranslation(0., 0.,
z + dzFaWTube4 / 2.));
910 z = dzFaGraphiteConeS + dzFaFlange;
911 voFaM->AddNode(voFaInnerShield, 1,
new TGeoTranslation(0., 0.,
z));
917 voFaM->AddNode(voFaWPlateA, 1, gGeoIdentity);
919 voFaM->AddNode(voFaSteelEnvelope, 1,
new TGeoTranslation(0., 0.,
z));
920 z += dzSteelEnvelopeFC;
921 voFaM->AddNode(voFaPbCone, 1,
new TGeoTranslation(0., 0.,
z));
922 z += (dzFaPbCone + dzFaCH2Cone / 2.);
923 voFaM->AddNode(voFaCH2Cone, 1,
new TGeoTranslation(0., 0.,
z));
924 voFaM->AddNode(voFaFlange, 1, gGeoIdentity);
925 voFaM->AddNode(voFaMgRing, 1, gGeoIdentity);
926 voFaM->AddNode(voFaCompRing, 1, gGeoIdentity);
927 voFaM->AddNode(voFaAccM, 1,
new TGeoTranslation(0., 0., dzFaFlange));
938 TGeoVolumeAssembly* voFass =
new TGeoVolumeAssembly(
"AFass");
939 const Float_t kFassUBFlangeH = 380.;
940 const Float_t kFassUBFlangeW = 77.;
942 const Float_t kFassUMFlangeH = 380.;
943 const Float_t kFassUMFlangeB = 246. - 9.85;
944 const Float_t kFassUMFlangeT = 10.;
945 const Float_t kFassUMFalpha = -TMath::ATan((kFassUMFlangeB - kFassUMFlangeT) / kFassUMFlangeH / 2.) / kDegRad;
949 TGeoVolume* voFassUBFlange =
950 new TGeoVolume(
"AFassUBFlange",
new TGeoBBox(kFassUBFlangeW / 2., kFassUBFlangeH / 2., 3. / 2.), kMedSteel);
962 TGeoVolume* voFassUMFlange =
new TGeoVolume(
963 "AFassUMFlange",
new TGeoTrap(kFassUMFlangeH / 2., kFassUMFalpha, 0., 1.5, kFassUMFlangeB / 2., kFassUMFlangeB / 2., 0., 1.5, kFassUMFlangeT / 2., kFassUMFlangeT / 2., 0.),
966 TGeoRotation* rotFass1 =
new TGeoRotation(
"rotFass1", 180., 0., 90., 0., 90., 90.);
967 voFass->AddNode(voFassUMFlange, 1,
968 new TGeoCombiTrans(0., 180. + kFassUMFlangeH / 2.,
969 -(kFassUMFlangeB + kFassUMFlangeT) / 4. + kFassUMFlangeB, rotFass1));
975 const Float_t kFassLMFlangeH = 242.;
976 const Float_t kFassLMFlangeB = 246. - 9.85;
977 const Float_t kFassLMFlangeT = 43.;
978 const Float_t kFassLMFalpha = -TMath::ATan((kFassLMFlangeB - kFassLMFlangeT) / kFassLMFlangeH / 2.) / kDegRad;
979 TGeoVolume* voFassLMFlange =
new TGeoVolume(
980 "AFassLMFlange",
new TGeoTrap(kFassLMFlangeH / 2., kFassLMFalpha, 0., 1.5, kFassLMFlangeB / 2., kFassLMFlangeB / 2., 0., 1.5, kFassLMFlangeT / 2., kFassLMFlangeT / 2., 0.),
982 TGeoRotation* rotFass2 =
new TGeoRotation(
"rotFass2", 180., 0., 90., 0., 90., 270.);
983 voFass->AddNode(voFassLMFlange, 1,
984 new TGeoCombiTrans(0., -180. - kFassLMFlangeH / 2.,
985 -(kFassLMFlangeB + kFassLMFlangeT) / 4. + kFassLMFlangeB, rotFass2));
993 TGeoPgon* shFassCone =
new TGeoPgon(
"FassCone", 22.5, 360., 8, 4);
994 shFassCone->DefineSection(0, 0., 0., 180.);
995 shFassCone->DefineSection(1, 3., 0., 180.);
996 shFassCone->DefineSection(2, 3., 177., 180.);
997 shFassCone->DefineSection(3, 246. - 9.85, 177., 180.);
999 TGeoBBox* shFassWindow =
new TGeoBBox(190., 53., 28.);
1000 shFassWindow->SetName(
"FassWindow");
1001 TGeoTranslation* tFassWindow =
new TGeoTranslation(
"tFassWindow", 0., 0., 78.);
1002 tFassWindow->RegisterYourself();
1004 TGeoTube* shFassApperture =
new TGeoTube(0., 104., 3.);
1005 shFassApperture->SetName(
"FassApperture");
1007 TGeoCompositeShape* shFassCentral =
1008 new TGeoCompositeShape(
"shFassCentral",
"FassCone-(FassWindow:tFassWindow+FassApperture)");
1010 TGeoVolume* voFassCentral =
new TGeoVolume(
"AFassCentral", shFassCentral, kMedSteel);
1011 voFass->AddNode(voFassCentral, 1, gGeoIdentity);
1016 TGeoVolume* voFassAlRing =
new TGeoVolume(
"AFassAlRing",
new TGeoTube(104., 180., 10.), kMedAlu);
1033 TGeoVolumeAssembly* voFA =
new TGeoVolumeAssembly(
"AFA");
1034 voFA->AddNode(voFaM, 1, gGeoIdentity);
1035 voFA->AddNode(voFaEndPlate, 1,
new TGeoTranslation(0., 0., dzFa + dzEndPlate / 2.));
1036 voFA->AddNode(voFass, 1,
new TGeoTranslation(0., 0., 388.45));
1037 voFA->AddNode(voFassAlRing, 1,
new TGeoTranslation(0., 0., 382. - 3.56));
1038 voFA->AddNode(voFaWTube5, 1,
new TGeoTranslation(0., 0., 412.));
1039 barrel->AddNode(voFA, 1,
new TGeoCombiTrans(0., 30., -90., rotxz));