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);
185 matmgr.Mixture(
"ABSO", 20,
"AIR_ENVELOPE0$", aAir, zAir, dAir, 4, wAir);
186 matmgr.Medium(
"ABSO", 20,
"AIR_ENVELOPE", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil,
191 matmgr.Mixture(
"ABSO", 16,
"VACUUM0$", aAir, zAir, dAir1, 4, wAir);
192 matmgr.Mixture(
"ABSO", 36,
"VACUUM1$", aAir, zAir, dAir1, 4, wAir);
193 matmgr.Mixture(
"ABSO", 56,
"VACUUM2$", aAir, zAir, dAir1, 4, wAir);
194 matmgr.Medium(
"ABSO", 16,
"VA_C0", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
195 matmgr.Medium(
"ABSO", 36,
"VA_C1", 36, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
196 matmgr.Medium(
"ABSO", 56,
"VA_C2", 56, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
200 matmgr.Mixture(
"ABSO", 17,
"CONCRETE0$", aconc, zconc, 2.35, 10, wconc);
201 matmgr.Mixture(
"ABSO", 37,
"CONCRETE1$", aconc, zconc, 2.35, 10, wconc);
202 matmgr.Mixture(
"ABSO", 57,
"CONCRETE2$", aconc, zconc, 2.35, 10, wconc);
203 matmgr.Medium(
"ABSO", 17,
"CC_C0", 17, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
204 matmgr.Medium(
"ABSO", 37,
"CC_C1", 37, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
205 matmgr.Medium(
"ABSO", 57,
"CC_C2", 57, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
209 matmgr.Mixture(
"ABSO", 18,
"POLYETHYLEN0$", apoly, zpoly, .95, -2, wpoly);
210 matmgr.Mixture(
"ABSO", 38,
"POLYETHYLEN1$", apoly, zpoly, .95, 2, wpoly);
211 matmgr.Mixture(
"ABSO", 58,
"POLYETHYLEN2$", apoly, zpoly, .95, 2, wpoly);
212 matmgr.Medium(
"ABSO", 18,
"CH2_C0", 18, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
213 matmgr.Medium(
"ABSO", 38,
"CH2_C1", 38, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
214 matmgr.Medium(
"ABSO", 58,
"CH2_C2", 58, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
218 matmgr.Mixture(
"ABSO", 19,
"STAINLESS STEEL0$", asteel, zsteel, 7.88, 4, wsteel);
219 matmgr.Mixture(
"ABSO", 39,
"STAINLESS STEEL1$", asteel, zsteel, 7.88, 4, wsteel);
220 matmgr.Mixture(
"ABSO", 59,
"STAINLESS STEEL2$", asteel, zsteel, 7.88, 4, wsteel);
221 matmgr.Medium(
"ABSO", 19,
"ST_C0", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
222 matmgr.Medium(
"ABSO", 39,
"ST_C1", 39, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
223 matmgr.Medium(
"ABSO", 59,
"ST_C3", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
255 TGeoVolume* barrel = gGeoManager->GetVolume(
"barrel");
260 auto kMedNiW = matmgr.getTGeoMedium(
"ABSO_Ni/W0");
261 auto kMedNiWsh = matmgr.getTGeoMedium(
"ABSO_Ni/W3");
263 auto kMedSteel = matmgr.getTGeoMedium(
"ABSO_ST_C0");
264 auto kMedSteelSh = matmgr.getTGeoMedium(
"ABSO_ST_C3");
266 auto kMedAir = matmgr.getTGeoMedium(
"ABSO_AIR_C0");
268 auto kMedAirEnvelope = matmgr.getTGeoMedium(
"ABSO_AIR_ENVELOPE");
270 auto kMedPb = matmgr.getTGeoMedium(
"ABSO_PB_C0");
271 auto kMedPbSh = matmgr.getTGeoMedium(
"ABSO_PB_C2");
273 auto kMedConcSh = matmgr.getTGeoMedium(
"ABSO_CC_C2");
275 auto kMedCH2Sh = matmgr.getTGeoMedium(
"ABSO_CH2_C2");
277 auto kMedC = matmgr.getTGeoMedium(
"ABSO_C_C0");
278 auto kMedCsh = matmgr.getTGeoMedium(
"ABSO_C_C2");
280 auto kMedAlu = matmgr.getTGeoMedium(
"ABSO_ALU_C0");
282 auto kMedMg = matmgr.getTGeoMedium(
"ABSO_MG_C0");
284 const Float_t kDegRad = TMath::Pi() / 180.;
287 TGeoRotation* rotxz =
new TGeoRotation(
"rotxz", 90., 0., 90., 90., 180., 0.);
317 const Float_t angle02 = TMath::Tan(2. * kDegRad);
319 const Float_t angle10 = TMath::Tan(10. * kDegRad);
321 const Float_t angle03 = TMath::Tan(3. * kDegRad);
323 const Float_t angle05 = TMath::Tan(5. * kDegRad);
325 const Float_t angle24 = TMath::Tan(24. * kDegRad);
327 const Float_t angle71 = TMath::Tan(0.697 * kDegRad);
341 Float_t dzSteelEnvelopeFC = 4.00;
343 Float_t rInSteelEnvelopeFC1 = 35.90 / 2.;
344 Float_t rInSteelEnvelopeFC2 = rInSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle10;
346 Float_t rOuSteelEnvelopeFC1 = 88.97 / 2.;
347 Float_t rOuSteelEnvelopeFC2 = rOuSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle05;
350 Float_t dzSteelEnvelopeC5 = 168.9;
351 Float_t rInSteelEnvelopeC5 = rOuSteelEnvelopeFC2 - dSteelEnvelope / TMath::Cos(5 * kDegRad);
352 Float_t rOuSteelEnvelopeC5 = rOuSteelEnvelopeFC2;
354 Float_t dzSteelEnvelopeC10 = 227.1 - 4.;
355 Float_t rInSteelEnvelopeC10 = 116.22 / 2.;
356 Float_t rOuSteelEnvelopeC10 = rInSteelEnvelopeC10 + dSteelEnvelope / TMath::Cos(10 * kDegRad);
359 Float_t rInSteelEnvelopeR2 = 196.3 / 2.;
360 Float_t rOuSteelEnvelopeR2 = 212.0 / 2.;
361 Float_t rInSteelEnvelopeR1 = rInSteelEnvelopeR2 - dzSteelEnvelopeR * angle10;
362 Float_t rOuSteelEnvelopeR1 = rInSteelEnvelopeR1 + dSteelEnvelope / TMath::Cos(10 * kDegRad);
364 Float_t dzSteelEnvelopeFI = 1.;
365 Float_t rInSteelEnvelopeFI = 42.0 / 2.;
366 Float_t rOuSteelEnvelopeFI = 85.0 / 2. + 0.06;
368 TGeoPcon* shFaSteelEnvelopeC =
new TGeoPcon(0., 360., 7);
371 shFaSteelEnvelopeC->DefineSection(0,
z, rInSteelEnvelopeFC1, rOuSteelEnvelopeFC1);
372 z += dzSteelEnvelopeFC;
373 shFaSteelEnvelopeC->DefineSection(1,
z, rInSteelEnvelopeFC2, rOuSteelEnvelopeFC2);
375 shFaSteelEnvelopeC->DefineSection(2,
z, rInSteelEnvelopeC5, rOuSteelEnvelopeC5);
376 z += dzSteelEnvelopeC5;
377 shFaSteelEnvelopeC->DefineSection(3,
z, rInSteelEnvelopeC10, rOuSteelEnvelopeC10);
379 z += dzSteelEnvelopeC10;
380 shFaSteelEnvelopeC->DefineSection(4,
z, rInSteelEnvelopeR1, rOuSteelEnvelopeR1);
382 shFaSteelEnvelopeC->DefineSection(5,
z, rInSteelEnvelopeR1, rOuSteelEnvelopeR2);
383 z += dzSteelEnvelopeR;
384 shFaSteelEnvelopeC->DefineSection(6,
z, rInSteelEnvelopeR2, rOuSteelEnvelopeR2);
387 shFaSteelEnvelopeC->SetName(
"steelEnvC");
388 TGeoTube* shFaSteelEnvelopeT =
new TGeoTube(rInSteelEnvelopeFI, rOuSteelEnvelopeFI, dzSteelEnvelopeFI);
389 shFaSteelEnvelopeT->SetName(
"steelEnvT");
390 TGeoCompositeShape* shFaSteelEnvelope =
new TGeoCompositeShape(
"shFaSteelEnvelope",
"steelEnvC-steelEnvT");
392 TGeoVolume* voFaSteelEnvelope =
new TGeoVolume(
"AFaSteelEnvelope", shFaSteelEnvelope, kMedSteel);
407 Float_t rInEndPlate = 52.5 / 2.;
409 Float_t rInEndPlateI = 175.3 / 2.;
410 Float_t rOuEndPlateI = 212.2 / 2.;
413 TGeoBBox* endPlate1 =
new TGeoBBox(dxEndPlate / 2., dyEndPlate / 2., dzEndPlate / 2.);
414 endPlate1->SetName(
"endPlate1");
416 TGeoTube* endPlate2 =
new TGeoTube(0., rInEndPlate, (dzEndPlate + 0.1) / 2.);
417 endPlate2->SetName(
"endPlate2");
418 TGeoTube* endPlate3 =
new TGeoTube(rInEndPlateI, rOuEndPlateI, (dzEndPlateI + 0.1) / 2.);
419 endPlate3->SetName(
"endPlate3");
421 TGeoTranslation* tPlate =
new TGeoTranslation(
"tPlate", 0., 0., -dzEndPlateI - 0.05);
422 tPlate->RegisterYourself();
424 TGeoCompositeShape* shFaEndPlate =
new TGeoCompositeShape(
"shFaEndPlate",
"endPlate1-(endPlate2+endPlate3:tPlate)");
425 TGeoVolume* voFaEndPlate =
new TGeoVolume(
"AFaEndPlate", shFaEndPlate, kMedSteel);
435 Float_t rOuFaFlange = 41.0 / 2.;
438 Float_t rInFaFlange1 = 33.4 / 2.;
441 Float_t rInFaFlange2 = 36.4 / 2.;
443 TGeoPcon* shFaFlange =
new TGeoPcon(0., 360., 4);
445 shFaFlange->DefineSection(0,
z, rInFaFlange1, rOuFaFlange);
447 shFaFlange->DefineSection(1,
z, rInFaFlange1, rOuFaFlange);
448 shFaFlange->DefineSection(2,
z, rInFaFlange2, rOuFaFlange);
450 shFaFlange->DefineSection(3,
z, rInFaFlange2, rOuFaFlange);
452 TGeoVolume* voFaFlange =
new TGeoVolume(
"AFaFlange", shFaFlange, kMedSteel);
466 Float_t rOuFaQPlateC1 = rOuFaQPlateF + dzFaWPlateF * angle24;
469 Float_t rInFaQPlateC2 = rInFaQPlateC1 + dzFaWPlateC1 * angle10;
470 Float_t rOuFaQPlateC2 = rOuFaQPlateC1 + dzFaWPlateC1 * angle24;
478 Float_t dzFaWPlate = dzFaWPlateF + dzFaWPlateC1 + dzFaWPlateC2;
480 TGeoPcon* shFaWPlateA =
new TGeoPcon(0., 360., 7);
483 shFaWPlateA->DefineSection(0,
z, rInFaQPlateF, rOuFaQPlateF);
485 shFaWPlateA->DefineSection(1,
z, rInFaQPlateF, rOuFaQPlateC1);
487 shFaWPlateA->DefineSection(2,
z, rInFaQPlateC1, rOuFaQPlateC1);
489 shFaWPlateA->DefineSection(3,
z, rInFaQPlateC2, rOuFaQPlateC2);
492 shFaWPlateA->DefineSection(4,
z, rInFaQPlateC3, rOuFaQPlateC3);
494 shFaWPlateA->DefineSection(5,
z, rInFaQPlateR, rOuFaQPlateR);
496 shFaWPlateA->DefineSection(6,
z, rInFaQPlateR, rOuFaQPlateR);
498 TGeoVolume* voFaWPlateA =
new TGeoVolume(
"AFaWPlateA", shFaWPlateA, kMedNiW);
500 TGeoPcon* shFaWPlateAI =
new TGeoPcon(0., 360., 5);
502 shFaWPlateAI->DefineSection(0,
z, rInFaQPlateF +
z * angle10, rOuFaQPlateC1 + (
z - dzFaWPlateF) * angle24);
503 for (Int_t
i = 1;
i < 5;
i++) {
504 Float_t rmin = shFaWPlateA->GetRmin(
i + 2);
505 Float_t rmax = shFaWPlateA->GetRmax(
i + 2) - 3.;
506 Float_t zpos = shFaWPlateA->GetZ(
i + 2);
507 shFaWPlateAI->DefineSection(
i, zpos, rmin, rmax);
509 TGeoVolume* voFaWPlateAI =
new TGeoVolume(
"AFaWPlateAI", shFaWPlateAI, kMedNiWsh);
510 voFaWPlateA->AddNode(voFaWPlateAI, 1, gGeoIdentity);
532 Float_t rInFaWTube1C1 = 9.1 / 2.;
535 Float_t rOuFaWTube1C1 = 13.8 / 2.;
536 Float_t rOuFaWTube1C2 = 20.7 / 2.;
539 Float_t rOuFaWTube1R = 15.0 / 2.;
541 Float_t dzFaWTube1 = dzFaWTube1C + dzFaWTube1R;
543 TGeoPcon* shFaWTube1 =
new TGeoPcon(0., 360., 4);
546 shFaWTube1->DefineSection(0,
z, rInFaWTube1C1, rOuFaWTube1C1);
548 shFaWTube1->DefineSection(1,
z, rInFaWTube1C1, rOuFaWTube1C2);
550 shFaWTube1->DefineSection(2,
z, rInFaWTube1C1, rOuFaWTube1R);
552 shFaWTube1->DefineSection(3,
z, rInFaWTube1C1, rOuFaWTube1R);
554 TGeoVolume* voFaWTube1 =
new TGeoVolume(
"AFaWTube1", shFaWTube1, kMedNiWsh);
565 Float_t rInFaWTube2C1 = 9.10 / 2.;
566 Float_t rInFaWTube2C2 = 12.58 / 2.;
567 Float_t rOuFaWTube2C1 = 20.70 / 2.;
568 Float_t rOuFaWTube2C2 = 30.72 / 2. - 0.05;
571 Float_t rInFaWTube2F = 15.4 / 2.;
573 Float_t dzFaWTube2 = dzFaWTube2C + dzFaWTube2F;
575 TGeoPcon* shFaWTube2 =
new TGeoPcon(0., 360., 4);
578 shFaWTube2->DefineSection(0,
z, rInFaWTube2F, rOuFaWTube2C1);
580 shFaWTube2->DefineSection(1,
z, rInFaWTube2F, rOuFaWTube2C1);
582 shFaWTube2->DefineSection(2,
z, rInFaWTube2C1, rOuFaWTube2C1);
584 shFaWTube2->DefineSection(3,
z, rInFaWTube2C2, rOuFaWTube2C2);
586 TGeoVolume* voFaWTube2 =
new TGeoVolume(
"AFaWTube2", shFaWTube2, kMedNiWsh);
594 Float_t rInFaWTube3C1 = 12.59 / 2.;
595 Float_t rInFaWTube3C2 = 13.23 / 2.;
596 Float_t rOuFaWTube3C1 = 30.60 / 2.;
597 Float_t rOuFaWTube3C2 = 32.35 / 2.;
598 TGeoVolume* voFaWTube3 =
new TGeoVolume(
599 "AFaWTube3",
new TGeoCone(dzFaWTube3 / 2., rInFaWTube3C1, rOuFaWTube3C1, rInFaWTube3C2, rOuFaWTube3C2), kMedNiWsh);
607 Float_t rInFaWTube4C1 = 13.23 / 2.;
608 Float_t rInFaWTube4C2 = 13.98 / 2.;
609 Float_t rOuFaWTube4C1 = 48.80 / 2.;
610 Float_t rOuFaWTube4C2 = 52.05 / 2.;
611 TGeoVolume* voFaWTube4 =
new TGeoVolume(
612 "AFaWTube4",
new TGeoCone(dzFaWTube4 / 2., rInFaWTube4C1, rOuFaWTube4C1, rInFaWTube4C2, rOuFaWTube4C2), kMedNiWsh);
618 Float_t kAngle0071 = TMath::Tan(0.71 * kDegRad);
619 Float_t rInFaWTube5C1 = rInFaWTube4C2;
620 Float_t rInFaWTube5C2 = rInFaWTube4C2 + dzFaWTube4 * kAngle0071;
621 Float_t rOuFaWTube5C1 = rOuFaWTube4C2;
622 TGeoVolume* voFaWTube5 =
new TGeoVolume(
623 "AFaWTube5",
new TGeoCone(dzFaWTube5 / 2., rInFaWTube5C1, rOuFaWTube5C1, rInFaWTube5C2, rOuFaWTube5C1), kMedNiWsh);
633 Float_t dzFaGraphiteCone = 225.0;
635 Float_t dzFaGraphiteConeS = 108.3;
637 Float_t rInFaGraphiteCone1 = 4.5;
639 Float_t rOuFaGraphiteCone1 = (zFa + dzFaFlange) * angle10;
641 Float_t rInFaGraphiteCone2 = 7.0;
643 Float_t rOuFaGraphiteCone2 = (zFa + dzFaFlange + dzFaGraphiteConeS) * angle10;
645 Float_t rInFaGraphiteCone3 = 11.0;
647 Float_t rOuFaGraphiteCone3 = (zFa + dzFaFlange + dzFaGraphiteCone) * angle10;
649 TGeoPcon* shFaGraphiteCone =
new TGeoPcon(0., 360., 4);
653 shFaGraphiteCone->DefineSection(0,
z, rInFaGraphiteCone1, rOuFaGraphiteCone1);
654 z += dzFaGraphiteConeS;
655 shFaGraphiteCone->DefineSection(1,
z, rInFaGraphiteCone1, rOuFaGraphiteCone2);
657 shFaGraphiteCone->DefineSection(2,
z, rInFaGraphiteCone2, rOuFaGraphiteCone2);
658 z = dzFaGraphiteCone;
659 shFaGraphiteCone->DefineSection(3,
z, rInFaGraphiteCone3, rOuFaGraphiteCone3);
661 TGeoVolume* voFaGraphiteCone =
new TGeoVolume(
"AFaGraphiteCone", shFaGraphiteCone, kMedCsh);
665 TGeoCone* shFaGraphiteConeO =
new TGeoCone(dz / 2., rInFaGraphiteCone1, rOuFaGraphiteCone1, rInFaGraphiteCone1,
666 rOuFaGraphiteCone1 + dz * angle10);
668 TGeoVolume* voFaGraphiteConeO =
new TGeoVolume(
"AFaGraphiteConeO", shFaGraphiteConeO, kMedC);
669 voFaGraphiteCone->AddNode(voFaGraphiteConeO, 1,
new TGeoTranslation(0., 0., dz / 2.));
678 Float_t rInFaPbCone5 = 37.35 / 2.;
679 Float_t rOuFaPbCone5 = 85.66 / 2.;
682 Float_t rInFaPbCone10 = rInFaPbCone5 + dzFaPbCone5 * angle10;
683 Float_t rOuFaPbCone10 = 115.2 / 2.;
685 Float_t rInFaPbConeE = 106.05 / 2.;
686 Float_t rOuFaPbConeE = 124.35 / 2.;
688 Float_t dzFaPbCone = dzFaPbCone5 + dzFaPbCone10;
690 TGeoPcon* shFaPbCone =
new TGeoPcon(0., 360., 3);
693 shFaPbCone->DefineSection(0,
z, rInFaPbCone5, rOuFaPbCone5);
696 shFaPbCone->DefineSection(1,
z, rInFaPbCone10, rOuFaPbCone10);
698 shFaPbCone->DefineSection(2,
z, rInFaPbConeE, rOuFaPbConeE);
700 TGeoVolume* voFaPbCone =
new TGeoVolume(
"AFaPbCone", shFaPbCone, kMedPb);
704 TGeoVolume* voFaPbConeI =
new TGeoVolume(
"AFaPbConeI", shFaPbConeI, kMedPbSh);
705 voFaPbCone->AddNode(voFaPbConeI, 1, gGeoIdentity);
712 Float_t dzFaConcreteCone = 126.;
713 Float_t rOuFaConcreteCone1 = rOuFaGraphiteCone3;
714 Float_t rInFaConcreteCone1 = 11.;
715 Float_t rOuFaConcreteCone2 = rOuFaConcreteCone1 + dzFaConcreteCone * angle10;
716 Float_t rInFaConcreteCone2 = rInFaConcreteCone1 + dzFaConcreteCone * angle02;
718 TGeoVolume* voFaConcreteCone =
new TGeoVolume(
720 new TGeoCone(dzFaConcreteCone / 2., rInFaConcreteCone1, rOuFaConcreteCone1, rInFaConcreteCone2, rOuFaConcreteCone2),
729 Float_t rInFaCH2Cone1 = 106.0 / 2.;
730 Float_t rInFaCH2Cone2 = 176.9 / 2.;
731 Float_t dFaCH2Cone = 7.5 / TMath::Cos(10. * kDegRad);
733 TGeoVolume* voFaCH2Cone =
734 new TGeoVolume(
"AFaCH2Cone",
new TGeoCone(dzFaCH2Cone / 2., rInFaCH2Cone1, rInFaCH2Cone1 + dFaCH2Cone, rInFaCH2Cone2, rInFaCH2Cone2 + dFaCH2Cone),
744 Float_t rInFaSteelCone25A = rInFaConcreteCone2;
745 Float_t rOuFaSteelCone25A = rOuFaConcreteCone2;
746 Float_t rInFaSteelCone25B = rInFaSteelCone25A + dzFaSteelCone25 * angle02;
747 Float_t rOuFaSteelCone25B = rOuFaSteelCone25A + dzFaSteelCone25 * angle10;
749 TGeoVolume* voFaSteelCone25 =
new TGeoVolume(
750 "AFaSteelCone25",
new TGeoCone(dzFaSteelCone25 / 2., rInFaSteelCone25A + eps, rOuFaSteelCone25A - eps, rInFaSteelCone25B + eps, rOuFaSteelCone25B - eps),
759 Float_t rInFaSteelCone31A = rOuFaWTube4C1;
761 Float_t rOuFaSteelCone31A = rOuFaSteelCone25B;
762 Float_t rInFaSteelCone31B = rOuFaWTube4C2;
763 Float_t rOuFaSteelCone31B = rOuFaSteelCone31A + dzFaSteelCone31 * angle10;
765 TGeoVolume* voFaSteelCone31 =
new TGeoVolume(
766 "AFaSteelCone31",
new TGeoCone(dzFaSteelCone31 / 2., rInFaSteelCone31A + eps, rOuFaSteelCone31A - eps, rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps),
770 TGeoVolume* voFaSteelCone31I =
771 new TGeoVolume(
"AFaSteelCone31I",
772 new TGeoCone(dz / 2., rInFaSteelCone31B - dz * angle03 + eps, rOuFaSteelCone31B - dz * angle10 - eps,
773 rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps),
776 voFaSteelCone31->AddNode(voFaSteelCone31I, 1,
new TGeoTranslation(0., 0., dzFaSteelCone31 / 2. - dz / 2.));
784 Float_t rInFaCompRing1 = 11.0 / 2.;
785 Float_t rOuFaCompRing1 = 32.4 / 2.;
788 Float_t rInFaCompRing2 = 14.0 / 2.;
789 Float_t rOuFaCompRing2 = 35.3 / 2.;
791 TGeoPcon* shFaCompRing =
new TGeoPcon(0., 360., 4);
794 shFaCompRing->DefineSection(0,
z, rInFaCompRing1, rOuFaCompRing1);
796 shFaCompRing->DefineSection(1,
z, rInFaCompRing1, rOuFaCompRing1);
798 shFaCompRing->DefineSection(2,
z, rInFaCompRing2, rOuFaCompRing2);
801 shFaCompRing->DefineSection(3,
z, rInFaCompRing2, rOuFaCompRing2);
803 TGeoVolume* voFaCompRing =
new TGeoVolume(
"AFaCompRing", shFaCompRing, kMedC);
818 TGeoPcon* shFaMgRing =
new TGeoPcon(0., 360., 8);
821 shFaMgRing->DefineSection(0,
z, rInFaMgRingO, rInFaCompRing1);
823 shFaMgRing->DefineSection(1,
z, rInFaMgRingO, rInFaCompRing1);
825 shFaMgRing->DefineSection(2,
z, rInFaMgRingI, rInFaCompRing1);
826 z += dzFaMgRingI / 2.;
827 shFaMgRing->DefineSection(3,
z, rInFaMgRingI, rInFaCompRing1);
829 shFaMgRing->DefineSection(4,
z, rInFaMgRingI, rInFaCompRing2);
830 z += dzFaMgRingI / 2.;
831 shFaMgRing->DefineSection(5,
z, rInFaMgRingI, rInFaCompRing2);
833 shFaMgRing->DefineSection(6,
z, rInFaMgRingO, rInFaCompRing2);
835 shFaMgRing->DefineSection(7,
z, rInFaMgRingO, rInFaCompRing2);
836 TGeoVolume* voFaMgRing =
new TGeoVolume(
"AFaMgRing", shFaMgRing, kMedMg);
843 Float_t dzFa = dzFaFlange + dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25 + dzFaSteelCone31;
844 TGeoPcon* shFaM =
new TGeoPcon(0., 360., 16);
847 shFaM->DefineSection(0,
z, rInFaMgRingO, rOuFaQPlateF);
850 shFaM->DefineSection(1,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
851 shFaM->DefineSection(2,
z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
854 shFaM->DefineSection(3,
z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
855 shFaM->DefineSection(4,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
858 shFaM->DefineSection(5,
z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
859 shFaM->DefineSection(6,
z, rInFaGraphiteCone1, rOuFaQPlateF + dz * angle24);
862 shFaM->DefineSection(7,
z, rInFaGraphiteCone1, rOuFaQPlateC2);
865 shFaM->DefineSection(8,
z, rInFaGraphiteCone1, rOuFaQPlateC3);
867 z = zFaSteelEnvelope + dzSteelEnvelopeFC + dzSteelEnvelopeC5;
868 shFaM->DefineSection(9,
z, rInFaGraphiteCone1, rOuSteelEnvelopeC10);
871 z = dzFaFlange + dzFaGraphiteConeS + dzFaWTube1C;
873 shFaM->DefineSection(10,
z, rInFaGraphiteCone1, rOuSteelEnvelopeC10 + dz * angle10);
876 z = dzFa - dzSteelEnvelopeR / 2.;
878 shFaM->DefineSection(11,
z, rInFaGraphiteCone1 + dz * angle71, rOuSteelEnvelopeR1);
879 shFaM->DefineSection(12,
z, rInFaGraphiteCone1 + dz * angle71, rOuSteelEnvelopeR2);
880 z += dzSteelEnvelopeR / 2.;
881 shFaM->DefineSection(13,
z, rInFaWTube4C2, rOuSteelEnvelopeR2);
883 dz = dzSteelEnvelopeR / 2;
884 shFaM->DefineSection(14,
z, rInFaCH2Cone2 - dz * angle10, rOuSteelEnvelopeR2);
885 z += dzSteelEnvelopeR / 2.;
886 shFaM->DefineSection(15,
z, rInFaCH2Cone2, rOuSteelEnvelopeR2);
889 TGeoVolume* voFaM =
new TGeoVolume(
"AFaM", shFaM, kMedAirEnvelope);
890 voFaM->SetVisibility(0);
894 TGeoPcon* shFaAccM =
new TGeoPcon(0., 360., 7);
895 for (Int_t
i = 0;
i < 4;
i++) {
896 Float_t zpos = shFaGraphiteCone->GetZ(
i);
897 Float_t rmin = shFaGraphiteCone->GetRmin(
i);
898 Float_t rmax = shFaGraphiteCone->GetRmax(
i);
899 shFaAccM->DefineSection(
i, zpos, rmin, rmax);
901 z = dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25;
902 z0 =
z + zFa + dzFaFlange;
903 shFaAccM->DefineSection(4,
z, rOuFaWTube3C2, z0 * angle10);
904 shFaAccM->DefineSection(5,
z, rOuFaWTube4C1, z0 * angle10);
905 z += dzFaSteelCone31;
906 z0 += dzFaSteelCone31;
907 shFaAccM->DefineSection(6,
z, rOuFaWTube4C2, z0 * angle10);
908 TGeoVolume* voFaAccM =
new TGeoVolume(
"AFaAcc", shFaAccM, kMedAir);
911 voFaAccM->AddNode(voFaGraphiteCone, 1, gGeoIdentity);
912 z += dzFaGraphiteCone;
913 voFaAccM->AddNode(voFaConcreteCone, 1,
new TGeoTranslation(0., 0.,
z + dzFaConcreteCone / 2.));
914 z += dzFaConcreteCone;
915 voFaAccM->AddNode(voFaSteelCone25, 1,
new TGeoTranslation(0., 0.,
z + dzFaSteelCone25 / 2.));
916 z += dzFaSteelCone25;
917 voFaAccM->AddNode(voFaSteelCone31, 1,
new TGeoTranslation(0., 0.,
z + dzFaSteelCone31 / 2.));
921 TGeoVolumeAssembly* voFaInnerShield =
new TGeoVolumeAssembly(
"AFaInnerShield");
922 voFaInnerShield->AddNode(voFaWTube1, 1, gGeoIdentity);
923 z = dzFaWTube1 - 0.6;
924 voFaInnerShield->AddNode(voFaWTube2, 1,
new TGeoTranslation(0., 0.,
z));
926 voFaInnerShield->AddNode(voFaWTube3, 1,
new TGeoTranslation(0., 0.,
z + dzFaWTube3 / 2.));
928 voFaInnerShield->AddNode(voFaWTube4, 1,
new TGeoTranslation(0., 0.,
z + dzFaWTube4 / 2.));
929 z = dzFaGraphiteConeS + dzFaFlange;
930 voFaM->AddNode(voFaInnerShield, 1,
new TGeoTranslation(0., 0.,
z));
936 voFaM->AddNode(voFaWPlateA, 1, gGeoIdentity);
938 voFaM->AddNode(voFaSteelEnvelope, 1,
new TGeoTranslation(0., 0.,
z));
939 z += dzSteelEnvelopeFC;
940 voFaM->AddNode(voFaPbCone, 1,
new TGeoTranslation(0., 0.,
z));
941 z += (dzFaPbCone + dzFaCH2Cone / 2.);
942 voFaM->AddNode(voFaCH2Cone, 1,
new TGeoTranslation(0., 0.,
z));
943 voFaM->AddNode(voFaFlange, 1, gGeoIdentity);
944 voFaM->AddNode(voFaMgRing, 1, gGeoIdentity);
945 voFaM->AddNode(voFaCompRing, 1, gGeoIdentity);
946 voFaM->AddNode(voFaAccM, 1,
new TGeoTranslation(0., 0., dzFaFlange));
957 TGeoVolumeAssembly* voFass =
new TGeoVolumeAssembly(
"AFass");
958 const Float_t kFassUBFlangeH = 380.;
959 const Float_t kFassUBFlangeW = 77.;
961 const Float_t kFassUMFlangeH = 380.;
962 const Float_t kFassUMFlangeB = 246. - 9.85;
963 const Float_t kFassUMFlangeT = 10.;
964 const Float_t kFassUMFalpha = -TMath::ATan((kFassUMFlangeB - kFassUMFlangeT) / kFassUMFlangeH / 2.) / kDegRad;
968 TGeoVolume* voFassUBFlange =
969 new TGeoVolume(
"AFassUBFlange",
new TGeoBBox(kFassUBFlangeW / 2., kFassUBFlangeH / 2., 3. / 2.), kMedSteel);
981 TGeoVolume* voFassUMFlange =
new TGeoVolume(
982 "AFassUMFlange",
new TGeoTrap(kFassUMFlangeH / 2., kFassUMFalpha, 0., 1.5, kFassUMFlangeB / 2., kFassUMFlangeB / 2., 0., 1.5, kFassUMFlangeT / 2., kFassUMFlangeT / 2., 0.),
985 TGeoRotation* rotFass1 =
new TGeoRotation(
"rotFass1", 180., 0., 90., 0., 90., 90.);
986 voFass->AddNode(voFassUMFlange, 1,
987 new TGeoCombiTrans(0., 180. + kFassUMFlangeH / 2.,
988 -(kFassUMFlangeB + kFassUMFlangeT) / 4. + kFassUMFlangeB, rotFass1));
994 const Float_t kFassLMFlangeH = 242.;
995 const Float_t kFassLMFlangeB = 246. - 9.85;
996 const Float_t kFassLMFlangeT = 43.;
997 const Float_t kFassLMFalpha = -TMath::ATan((kFassLMFlangeB - kFassLMFlangeT) / kFassLMFlangeH / 2.) / kDegRad;
998 TGeoVolume* voFassLMFlange =
new TGeoVolume(
999 "AFassLMFlange",
new TGeoTrap(kFassLMFlangeH / 2., kFassLMFalpha, 0., 1.5, kFassLMFlangeB / 2., kFassLMFlangeB / 2., 0., 1.5, kFassLMFlangeT / 2., kFassLMFlangeT / 2., 0.),
1001 TGeoRotation* rotFass2 =
new TGeoRotation(
"rotFass2", 180., 0., 90., 0., 90., 270.);
1002 voFass->AddNode(voFassLMFlange, 1,
1003 new TGeoCombiTrans(0., -180. - kFassLMFlangeH / 2.,
1004 -(kFassLMFlangeB + kFassLMFlangeT) / 4. + kFassLMFlangeB, rotFass2));
1012 TGeoPgon* shFassCone =
new TGeoPgon(
"FassCone", 22.5, 360., 8, 4);
1013 shFassCone->DefineSection(0, 0., 0., 180.);
1014 shFassCone->DefineSection(1, 3., 0., 180.);
1015 shFassCone->DefineSection(2, 3., 177., 180.);
1016 shFassCone->DefineSection(3, 246. - 9.85, 177., 180.);
1019 shFassWindow->SetName(
"FassWindow");
1020 TGeoTranslation* tFassWindow =
new TGeoTranslation(
"tFassWindow", 0., 0., 78.);
1021 tFassWindow->RegisterYourself();
1023 TGeoTube* shFassApperture =
new TGeoTube(0., 104., 3.);
1024 shFassApperture->SetName(
"FassApperture");
1026 TGeoCompositeShape* shFassCentral =
1027 new TGeoCompositeShape(
"shFassCentral",
"FassCone-(FassWindow:tFassWindow+FassApperture)");
1029 TGeoVolume* voFassCentral =
new TGeoVolume(
"AFassCentral", shFassCentral, kMedSteel);
1030 voFass->AddNode(voFassCentral, 1, gGeoIdentity);
1035 TGeoVolume* voFassAlRing =
new TGeoVolume(
"AFassAlRing",
new TGeoTube(104., 180., 10.), kMedAlu);
1052 TGeoVolumeAssembly* voFA =
new TGeoVolumeAssembly(
"AFA");
1053 voFA->AddNode(voFaM, 1, gGeoIdentity);
1054 voFA->AddNode(voFaEndPlate, 1,
new TGeoTranslation(0., 0., dzFa + dzEndPlate / 2.));
1055 voFA->AddNode(voFass, 1,
new TGeoTranslation(0., 0., 388.45));
1056 voFA->AddNode(voFassAlRing, 1,
new TGeoTranslation(0., 0., 382. - 3.56));
1057 voFA->AddNode(voFaWTube5, 1,
new TGeoTranslation(0., 0., 412.));
1058 barrel->AddNode(voFA, 1,
new TGeoCombiTrans(0., 30., -90., rotxz));