108 TGeoVolume*
top = gGeoManager->GetVolume(
"cave");
113 TGeoRotation* rot000 =
new TGeoRotation(
"rot000", 90., 0., 90., 90., 0., 0.);
114 TGeoRotation* rot090 =
new TGeoRotation(
"rot090", 90., 90., 90., 180., 0., 0.);
115 TGeoRotation* rot180 =
new TGeoRotation(
"rot180", 90., 180., 90., 270., 0., 0.);
116 TGeoRotation* rot270 =
new TGeoRotation(
"rot270", 90., 270., 90., 0., 0., 0.);
118 TGeoRotation* rotxzlhc =
new TGeoRotation(
"rotxzlhc", 0., -alhc, 0.);
119 TGeoRotation* rotlhc =
new TGeoRotation(
"rotlhc", 0., alhc, 0.);
125 auto kMedNiW = matmgr.getTGeoMedium(
"SHIL_Ni/W0");
126 auto kMedNiWsh = matmgr.getTGeoMedium(
"SHIL_Ni/W3");
128 auto kMedSteel = matmgr.getTGeoMedium(
"SHIL_ST_C0");
129 auto kMedSteelSh = matmgr.getTGeoMedium(
"SHIL_ST_C3");
131 auto kMedAir = matmgr.getTGeoMedium(
"SHIL_AIR_C0");
132 auto kMedAirMu = matmgr.getTGeoMedium(
"SHIL_AIR_MUON");
134 auto kMedPb = matmgr.getTGeoMedium(
"SHIL_PB_C0");
135 auto kMedPbSh = matmgr.getTGeoMedium(
"SHIL_PB_C2");
137 auto kMedConcSh = matmgr.getTGeoMedium(
"SHIL_CC_C2");
139 auto kMedCastiron = matmgr.getTGeoMedium(
"SHIL_CAST_IRON0");
140 auto kMedCastironSh = matmgr.getTGeoMedium(
"SHIL_CAST_IRON2");
142 const Float_t kDegRad = TMath::Pi() / 180.;
143 const Float_t kAngle02 = TMath::Tan(2.00 * kDegRad);
144 const Float_t kAngle0071 = TMath::Tan(0.71 * kDegRad);
156 Float_t rInFaWTail1 = 13.98 / 2.;
158 Float_t rOuFaWTail1 = 52.00 / 2.;
160 Float_t rOuFaWTail2 = 35.27 / 2.;
166 Float_t rInFaWTail2 = rInFaWTail1 + dzFaWTail1 * kAngle0071;
168 Float_t rInFaWTail3 = rInFaWTail2 + dzFaWTail2 * kAngle0071;
170 Float_t rOuFaWTail3 = rOuFaWTail2 + dzFaWTail2 * kAngle02;
172 Float_t rOuFaWTailR = 30.8 / 2.;
176 Float_t rInFaWTail4 = rInFaWTail3 + dzFaWTailR * kAngle0071;
178 Float_t rOuFaWTail4 = rOuFaWTail3 + dzFaWTailR * kAngle02;
180 Float_t rInFaWTailS = 22.30 / 2.;
184 Float_t rOuFaWTailB = rOuFaWTail4 + dzFaWTailB * kAngle02;
186 Float_t rOuFaWTailE = 31.6 / 2.;
188 const Float_t dzFaWTail = 70.7 - 6.;
190 TGeoPcon* shFaWTail =
new TGeoPcon(0., 360., 8);
196 shFaWTail->DefineSection(0,
z, rInFaWTail2, rOuFaWTail2);
199 shFaWTail->DefineSection(1,
z, rInFaWTail3, rOuFaWTail3);
200 shFaWTail->DefineSection(2,
z, rInFaWTail3, rOuFaWTailR);
203 shFaWTail->DefineSection(3,
z, rInFaWTail4, rOuFaWTailR);
204 shFaWTail->DefineSection(4,
z, rInFaWTailS, rOuFaWTail4);
207 shFaWTail->DefineSection(5,
z, rInFaWTailS, rOuFaWTailB);
208 shFaWTail->DefineSection(6,
z, rInFaWTailS, rOuFaWTailE);
211 shFaWTail->DefineSection(7,
z, rInFaWTailS, rOuFaWTailE);
213 TGeoVolume* voFaWTail =
new TGeoVolume(
"YFaWTail", shFaWTail, kMedNiW);
216 TGeoPcon* shFaWTailI =
new TGeoPcon(0., 360., 4);
219 shFaWTailI->DefineSection(0,
z, rInFaWTail2, rInFaWTail2 + dr);
220 z += (dzFaWTail2 + dzFaWTailR);
221 shFaWTailI->DefineSection(1,
z, rInFaWTail4, rInFaWTail4 + dr);
222 shFaWTailI->DefineSection(2,
z, rInFaWTailS, rInFaWTailS + dr);
224 shFaWTailI->DefineSection(3,
z, rInFaWTailS, rInFaWTailS + dr);
225 TGeoVolume* voFaWTailI =
new TGeoVolume(
"YFaWTailI", shFaWTailI, kMedNiWsh);
226 voFaWTail->AddNode(voFaWTailI, 1, gGeoIdentity);
238 const Float_t kFaWring2Rinner = 15.41;
239 const Float_t kFaWring2Router = 18.40;
240 const Float_t kFaWring2HWidth = 3.75;
241 const Float_t kFaWring2Cutoffx = 3.35;
242 const Float_t kFaWring2Cutoffy = 3.35;
243 TGeoTubeSeg* shFaWring2a =
new TGeoTubeSeg(kFaWring2Rinner, kFaWring2Router, kFaWring2HWidth, 0., 90.);
244 shFaWring2a->SetName(
"shFaWring2a");
245 TGeoBBox* shFaWring2b =
new TGeoBBox(kFaWring2Router / 2., kFaWring2Router / 2., kFaWring2HWidth);
246 shFaWring2b->SetName(
"shFaWring2b");
247 TGeoTranslation* trFaWring2b =
new TGeoTranslation(
"trFaWring2b", kFaWring2Router / 2. + kFaWring2Cutoffx,
248 kFaWring2Router / 2. + kFaWring2Cutoffy, 0.);
249 trFaWring2b->RegisterYourself();
250 TGeoCompositeShape* shFaWring2 =
new TGeoCompositeShape(
"shFaWring2",
"(shFaWring2a)*(shFaWring2b:trFaWring2b)");
251 TGeoVolume* voFaWring2 =
new TGeoVolume(
"YFA_WRING2", shFaWring2, kMedNiW);
257 const Float_t kFaWring3Rinner = 15.41;
258 const Float_t kFaWring3Router = 18.40;
259 const Float_t kFaWring3HWidth = 3.75;
260 const Float_t kFaWring3Cutoffx = 3.35;
261 const Float_t kFaWring3Cutoffy = 3.35;
262 TGeoTubeSeg* shFaWring3a =
new TGeoTubeSeg(kFaWring3Rinner, kFaWring3Router, kFaWring3HWidth, 0., 90.);
263 shFaWring3a->SetName(
"shFaWring3a");
264 TGeoBBox* shFaWring3b =
new TGeoBBox(kFaWring3Router / 2., kFaWring3Router / 2., kFaWring3HWidth);
265 shFaWring3b->SetName(
"shFaWring3b");
266 TGeoTranslation* trFaWring3b =
new TGeoTranslation(
"trFaWring3b", kFaWring3Router / 2. + kFaWring3Cutoffx,
267 kFaWring3Router / 2. + kFaWring3Cutoffy, 0.);
268 trFaWring3b->RegisterYourself();
269 TGeoCompositeShape* shFaWring3 =
new TGeoCompositeShape(
"shFaWring3",
"(shFaWring3a)*(shFaWring3b:trFaWring3b)");
270 TGeoVolume* voFaWring3 =
new TGeoVolume(
"YFA_WRING3", shFaWring3, kMedNiW);
276 const Float_t kFaWring5Rinner = 15.41;
277 const Float_t kFaWring5Router = 18.67;
278 const Float_t kFaWring5HWidth = 1.08;
279 TGeoVolume* voFaWring5 =
280 new TGeoVolume(
"YFA_WRING5",
new TGeoTube(kFaWring5Rinner, kFaWring5Router, kFaWring5HWidth), kMedNiW);
285 TGeoVolumeAssembly* asFaExtraShield =
new TGeoVolumeAssembly(
"YCRE");
287 const Float_t kFaDWrings = 1.92;
291 dz += kFaWring2HWidth;
292 asFaExtraShield->AddNode(voFaWring2, 1,
new TGeoCombiTrans(0., 0., dz, rot180));
293 asFaExtraShield->AddNode(voFaWring2, 2,
new TGeoCombiTrans(0., 0., dz, rot000));
294 dz += kFaWring2HWidth;
296 dz += kFaWring3HWidth;
297 asFaExtraShield->AddNode(voFaWring3, 1,
new TGeoCombiTrans(0., 0., dz, rot090));
298 asFaExtraShield->AddNode(voFaWring3, 2,
new TGeoCombiTrans(0., 0., dz, rot270));
299 dz += kFaWring3HWidth;
300 dz += kFaWring5HWidth;
301 asFaExtraShield->AddNode(voFaWring5, 1,
new TGeoTranslation(0., 0., dz));
302 dz += kFaWring5HWidth;
303 dz += kFaWring3HWidth;
304 asFaExtraShield->AddNode(voFaWring3, 3,
new TGeoCombiTrans(0., 0., dz, rot180));
305 asFaExtraShield->AddNode(voFaWring3, 4,
new TGeoCombiTrans(0., 0., dz, rot000));
306 dz += kFaWring3HWidth;
308 dz += kFaWring2HWidth;
309 asFaExtraShield->AddNode(voFaWring2, 3,
new TGeoCombiTrans(0., 0., dz, rot090));
310 asFaExtraShield->AddNode(voFaWring2, 4,
new TGeoCombiTrans(0., 0., dz, rot270));
311 dz += kFaWring2HWidth;
325 Float_t rInFaSaa1F1 = 32.0 / 2.;
327 Float_t rOuFaSaa1F1 = 39.5 / 2.;
329 Float_t dzFaSaa1S1 = 18.5 - dzFaSaa1F1;
331 Float_t rInFaSaa1S1 = 22.3 / 2.;
335 Float_t rInFaSaa1S2 = 17.9 / 2.;
341 Float_t rInFaSaa1F2 = 25.2 / 2.;
345 Float_t rOuFaSaa1E = 41.93 / 2.;
347 TGeoPcon* shFaSaa1 =
new TGeoPcon(0., 360., 8);
350 shFaSaa1->DefineSection(0,
z, rInFaSaa1F1, rOuFaSaa1F1 - 0.01);
352 shFaSaa1->DefineSection(1,
z, rInFaSaa1F1, 40.0);
353 shFaSaa1->DefineSection(2,
z, rInFaSaa1S1, 40.0);
356 shFaSaa1->DefineSection(3,
z, rInFaSaa1S1, 40.0);
359 shFaSaa1->DefineSection(4,
z, rInFaSaa1S2, 40.0);
362 shFaSaa1->DefineSection(5,
z, rInFaSaa1S2, 40.0);
363 shFaSaa1->DefineSection(6,
z, rInFaSaa1F2, 40.0);
366 shFaSaa1->DefineSection(7,
z, rInFaSaa1F2, rOuFaSaa1E - 0.01);
369 for (Int_t
i = 1;
i < 7;
i++) {
370 Double_t zp = shFaSaa1->GetZ(
i);
371 Double_t r1 = shFaSaa1->GetRmin(
i);
372 Double_t r2 = 39.5 / 2. + zp * TMath::Tan(2. * kDegRad) - 0.01;
373 shFaSaa1->DefineSection(
i, zp, r1, r2);
375 TGeoVolume* voFaSaa1 =
new TGeoVolume(
"YFASAA1", shFaSaa1, kMedNiWsh);
378 TGeoCone* shFaSaa1O =
379 new TGeoCone(dzFaSaa1 / 2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1 - 0.01, rOuFaSaa1E - 3.5, rOuFaSaa1E - 0.01);
380 TGeoVolume* voFaSaa1O =
new TGeoVolume(
"YFASAA1O", shFaSaa1O, kMedNiW);
381 voFaSaa1->AddNode(voFaSaa1O, 1,
new TGeoTranslation(0., 0., dzFaSaa1 / 2.));
393 Float_t zSaa1StEnv[5] = {111.2, 113.7, 229.3, 195.0};
396 Float_t rOuSaa1StEnv1 = 40.4 / 2.;
397 Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt - 0.05;
399 Float_t rInSaa1StEnv2 = 41.7 / 2.;
400 Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad) - 0.05;
402 Float_t rOuSaa1StEnv3 = 57.6 / 2.;
403 Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt + 0.05;
405 Float_t rInSaa1StEnv4 = 63.4 / 2.;
406 Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
408 Float_t rInSaa1StEnv5 = 74.28 / 2.;
409 Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
413 TGeoPcon* shSaa1StEnv =
new TGeoPcon(0., 360., 11);
416 shSaa1StEnv->DefineSection(0,
z, rInSaa1StEnv1, rOuSaa1StEnv1);
417 z += (zSaa1StEnv[0] - dSt);
418 shSaa1StEnv->DefineSection(1,
z, rInSaa1StEnv1, rOuSaa1StEnv1);
420 shSaa1StEnv->DefineSection(2,
z, rInSaa1StEnv1, rOuSaa1StEnv2);
422 shSaa1StEnv->DefineSection(3,
z, rInSaa1StEnv1, rOuSaa1StEnv2);
424 shSaa1StEnv->DefineSection(4,
z, rInSaa1StEnv2, rOuSaa1StEnv2);
426 shSaa1StEnv->DefineSection(5,
z, rInSaa1StEnv3, rOuSaa1StEnv3);
428 z += (zSaa1StEnv[2] - dSt);
429 shSaa1StEnv->DefineSection(6,
z, rInSaa1StEnv3, rOuSaa1StEnv3);
431 shSaa1StEnv->DefineSection(7,
z, rInSaa1StEnv3, rOuSaa1StEnv4);
433 shSaa1StEnv->DefineSection(8,
z, rInSaa1StEnv3, rOuSaa1StEnv4);
435 shSaa1StEnv->DefineSection(9,
z, rInSaa1StEnv4, rOuSaa1StEnv4);
437 shSaa1StEnv->DefineSection(10,
z, rInSaa1StEnv5, rOuSaa1StEnv5);
438 TGeoVolume* voSaa1StEnv =
new TGeoVolume(
"YSAA1_SteelEnvelope", shSaa1StEnv, kMedSteel);
449 Float_t rOuSaa1WPipeF1 = 24.5 / 2.;
451 Float_t rInSaa1WPipeF1 = 22.0 / 2.;
455 Float_t rInSaa1WPipeF11 = 18.5 / 2.;
461 Float_t rInSaa1WPipeC = 22.0 / 2.;
463 Float_t rOuSaa1WPipeC = 31.9 / 2.;
469 Float_t rOuSaa1WPipeF2 = 41.56 / 2.;
472 TGeoPcon* shSaa1WPipe =
new TGeoPcon(0., 360., 8);
475 shSaa1WPipe->DefineSection(0,
z, rInSaa1WPipeF1, rOuSaa1WPipeF1);
477 shSaa1WPipe->DefineSection(1,
z, rInSaa1WPipeF1, rOuSaa1WPipeF1);
479 shSaa1WPipe->DefineSection(2,
z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
481 shSaa1WPipe->DefineSection(3,
z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
483 shSaa1WPipe->DefineSection(4,
z, rInSaa1WPipeF11, rOuSaa1WPipeC);
485 shSaa1WPipe->DefineSection(5,
z, rInSaa1WPipeC, rOuSaa1WPipeC);
487 shSaa1WPipe->DefineSection(6,
z, rInSaa1WPipeC, rOuSaa1WPipeF2);
489 shSaa1WPipe->DefineSection(7,
z, rInSaa1WPipeC, rOuSaa1WPipeF2);
491 TGeoVolume* voSaa1WPipe =
new TGeoVolume(
"YSAA1_WPipe", shSaa1WPipe, kMedNiW);
494 TGeoTube* shSaa1WPipeI =
new TGeoTube(rInSaa1WPipeC, rOuSaa1WPipeC, dzSaa1WPipeC / 2.);
495 TGeoVolume* voSaa1WPipeI =
new TGeoVolume(
"YSAA1_WPipeI", shSaa1WPipeI, kMedNiWsh);
496 voSaa1WPipe->AddNode(voSaa1WPipeI, 1,
new TGeoTranslation(0., 0., dzSaa1WPipeF1 + dzSaa1WPipeF11 + dzSaa1WPipeC / 2));
504 Float_t tanAlpha = TMath::Tan(1.69 / 2. * kDegRad);
505 Float_t tanBeta = TMath::Tan(3.20 / 2. * kDegRad);
509 Float_t dzSaa1PbComp1 = 100.23;
511 Float_t rInSaa1PbComp1 = 22.0 / 2.;
513 Float_t rOuSaa1PbComp1 = 42.0 / 2.;
517 Float_t dzSaa1PbComp2 = 236.77;
519 Float_t rInSaa1PbComp2 = rInSaa1PbComp1 + dzSaa1PbComp1 * tanAlpha;
521 Float_t rOuSaa1PbComp2 = 49.0 / 2.;
527 Float_t rInSaa1PbComp3 = rInSaa1PbComp2 + dzSaa1PbComp2 * tanAlpha;
529 Float_t rOuSaa1PbComp3 = 62.8 / 2.;
534 Float_t rInSaa1PbComp4 = 37.1 / 2.;
535 Float_t rInSaa1PbCompB = 43.0 / 2.;
537 Float_t rOuSaa1PbComp4 = rOuSaa1PbComp3 + dzSaa1PbComp3 * tanBeta;
542 Float_t rOuSaa1PbCompF1 = 74.1 / 2.;
545 Float_t rOuSaa1PbCompF2 = 66.0 / 2.;
546 Float_t rOuSaa1PbCompF3 = 58.0 / 2.;
548 TGeoPcon* shSaa1PbComp =
new TGeoPcon(0., 360., 11);
551 shSaa1PbComp->DefineSection(0,
z, rInSaa1PbComp1, rOuSaa1PbComp1);
553 shSaa1PbComp->DefineSection(1,
z, rInSaa1PbComp2, rOuSaa1PbComp2);
556 shSaa1PbComp->DefineSection(2,
z, rInSaa1PbComp3, rOuSaa1PbComp2);
558 shSaa1PbComp->DefineSection(3,
z, rInSaa1PbComp3, rOuSaa1PbComp3);
560 shSaa1PbComp->DefineSection(4,
z, rInSaa1PbComp4, rOuSaa1PbComp4);
562 shSaa1PbComp->DefineSection(5,
z, rInSaa1PbCompB, rOuSaa1PbComp4);
563 z += (dzSaa1PbComp4 - dzSaa1PbCompF1 - dzSaa1PbCompF2);
564 shSaa1PbComp->DefineSection(6,
z, rInSaa1PbCompB, rOuSaa1PbCompF1);
565 shSaa1PbComp->DefineSection(7,
z, rInSaa1PbCompB, rOuSaa1PbCompF2);
568 shSaa1PbComp->DefineSection(8,
z, rInSaa1PbCompB, rOuSaa1PbCompF2);
569 shSaa1PbComp->DefineSection(9,
z, rInSaa1PbCompB, rOuSaa1PbCompF3);
572 shSaa1PbComp->DefineSection(10,
z, rInSaa1PbCompB, rOuSaa1PbCompF3);
574 TGeoVolume* voSaa1PbComp =
new TGeoVolume(
"YSAA1_PbComp", shSaa1PbComp, kMedPb);
578 TGeoVolume* voSaa1PbCompI =
new TGeoVolume(
"YSAA1_PbCompI", shSaa1PbCompI, kMedPbSh);
579 voSaa1PbComp->AddNode(voSaa1PbCompI, 1, gGeoIdentity);
589 Float_t rOuSaa1WCone1 = rInSaa1WCone1 + 0.97;
590 Float_t rOuSaa1WCone2 = rInSaa1WCone1 + 2.80;
594 TGeoPcon* shSaa1WCone =
new TGeoPcon(0., 360., 2);
596 shSaa1WCone->DefineSection(0,
z, rInSaa1WCone1, rOuSaa1WCone1);
598 shSaa1WCone->DefineSection(1,
z, rInSaa1WCone1, rOuSaa1WCone2);
599 TGeoVolume* voSaa1WCone =
new TGeoVolume(
"YSAA1_WCone", shSaa1WCone, kMedNiW);
613 TGeoPcon* shSaa1StRing =
new TGeoPcon(0., 360., 2);
615 shSaa1StRing->DefineSection(0,
z, rInSaa1String, rOuSaa1String);
617 shSaa1StRing->DefineSection(1,
z, rInSaa1String, rOuSaa1String);
618 TGeoVolume* voSaa1StRing =
new TGeoVolume(
"YSAA1_StRing", shSaa1StRing, kMedSteel);
631 Float_t dzSaa1InnerTube = 631.9 / 2.;
632 Float_t rInSaa1InnerTube = 18.2 / 2.;
633 Float_t rOuSaa1InnerTube = 36.8 / 2.;
635 TGeoVolume* voSaa1InnerTube =
636 new TGeoVolume(
"YSAA1_InnerTube",
new TGeoCone(dzSaa1InnerTube, rInSaa1InnerTube - dSaa1InnerTube, rInSaa1InnerTube, rOuSaa1InnerTube - dSaa1InnerTube, rOuSaa1InnerTube),
646 TGeoPcon* shSaa1M =
new TGeoPcon(0., 360., 20);
648 Float_t rmin = rInSaa1InnerTube - dSaa1InnerTube - kSec;
649 rmax = rOuSaa1InnerTube - dSaa1InnerTube - kSec;
651 shSaa1M->DefineSection(0,
z, rmin, rOuSaa1WPipeF1);
653 shSaa1M->DefineSection(1,
z, rmin, rOuSaa1WPipeF1);
654 shSaa1M->DefineSection(2,
z, 0., rOuSaa1WPipeF1);
656 shSaa1M->DefineSection(3,
z, 0., rOuSaa1WPipeF1);
657 shSaa1M->DefineSection(4,
z, 0., rOuSaa1StEnv1);
659 shSaa1M->DefineSection(5,
z, 0., rOuSaa1StEnv1);
660 shSaa1M->DefineSection(6,
z, 0., rOuSaa1WCone1);
662 shSaa1M->DefineSection(7,
z, 0., rOuSaa1WCone2);
663 shSaa1M->DefineSection(8,
z, 0., rOuSaa1StEnv1);
664 z = zSaa1StEnv[0] - dSt + zSaa1StEnvS;
665 shSaa1M->DefineSection(9,
z, 0., rOuSaa1StEnv1);
666 shSaa1M->DefineSection(10,
z, 0., rOuSaa1StEnv2);
667 z += (zSaa1StEnv[1] + dSt);
668 shSaa1M->DefineSection(11,
z, 0., rOuSaa1StEnv3);
669 z += (zSaa1StEnv[2] - dSt);
670 shSaa1M->DefineSection(12,
z, 0., rOuSaa1StEnv3);
671 shSaa1M->DefineSection(13,
z, 0., rOuSaa1StEnv4);
673 z += (zSaa1StEnv[3] - dSt + dzSaa1PbCompF1 + dzSaa1PbCompF2 - dzSaa1PbComp4);
674 Float_t rmaxSaa1 = shSaa1M->GetRmax(13) + (
z - shSaa1M->GetZ(13)) * TMath::Tan(1.6 * kDegRad);
676 shSaa1M->DefineSection(14,
z, 0., rmaxSaa1);
677 shSaa1M->DefineSection(15,
z, rmax, rmaxSaa1);
679 shSaa1M->DefineSection(16,
z, rmax + 0.4, rOuSaa1String);
681 shSaa1M->DefineSection(17,
z, rmax + 0.4, rOuSaa1String);
682 shSaa1M->DefineSection(18,
z, rmax + 0.4, rOuSaa1PbCompF3);
684 shSaa1M->DefineSection(19,
z, rmax + 0.4, rOuSaa1PbCompF3);
688 for (Int_t
i = 2;
i < 15;
i++) {
689 Double_t zp = shSaa1M->GetZ(
i);
690 Double_t r2 = shSaa1M->GetRmax(
i);
691 Double_t r1 = rmin + (zp - 0.9) * TMath::Tan(1.686 / 2. * kDegRad) - kSec;
692 shSaa1M->DefineSection(
i, zp, r1, r2);
695 TGeoVolume* voSaa1M =
new TGeoVolume(
"YSAA1M", shSaa1M, kMedAir);
696 voSaa1M->SetVisibility(0);
707 Float_t saa1Wring1Width = 5.85;
708 TGeoPcon* shSaa1Wring1 =
new TGeoPcon(0., 360., 2);
709 shSaa1Wring1->DefineSection(0, 0.00, 20.31, 23.175);
710 shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.31, 23.400);
711 TGeoVolume* voSaa1Wring1 =
new TGeoVolume(
"YSAA1_WRING1", shSaa1Wring1, kMedNiW);
717 Float_t saa1Wring2Rinner = 20.31;
718 Float_t saa1Wring2Router = 23.40;
719 Float_t saa1Wring2HWidth = 3.75;
720 Float_t saa1Wring2Cutoffx = 4.9;
721 Float_t saa1Wring2Cutoffy = 4.9;
722 TGeoTubeSeg* shSaa1Wring2a =
new TGeoTubeSeg(saa1Wring2Rinner, saa1Wring2Router, saa1Wring2HWidth, 0., 90.);
723 shSaa1Wring2a->SetName(
"shSaa1Wring2a");
724 TGeoBBox* shSaa1Wring2b =
new TGeoBBox(saa1Wring2Router / 2., saa1Wring2Router / 2., saa1Wring2HWidth);
725 shSaa1Wring2b->SetName(
"shSaa1Wring2b");
726 TGeoTranslation* trSaa1Wring2b =
new TGeoTranslation(
"trSaa1Wring2b", saa1Wring2Router / 2. + saa1Wring2Cutoffx,
727 saa1Wring2Router / 2. + saa1Wring2Cutoffy, 0.);
728 trSaa1Wring2b->RegisterYourself();
729 TGeoCompositeShape* shSaa1Wring2 =
730 new TGeoCompositeShape(
"shSaa1Wring2",
"(shSaa1Wring2a)*(shSaa1Wring2b:trSaa1Wring2b)");
731 TGeoVolume* voSaa1Wring2 =
new TGeoVolume(
"YSAA1_WRING2", shSaa1Wring2, kMedNiW);
738 Float_t saa1Wring3Rinner = 20.31;
739 Float_t saa1Wring3Router = 23.40;
740 Float_t saa1Wring3HWidth = 3.75;
741 Float_t saa1Wring3Cutoffx = 4.50;
742 Float_t saa1Wring3Cutoffy = 4.50;
743 TGeoTubeSeg* shSaa1Wring3a =
new TGeoTubeSeg(saa1Wring3Rinner, saa1Wring3Router, saa1Wring3HWidth, 0., 90.);
744 shSaa1Wring3a->SetName(
"shSaa1Wring3a");
745 TGeoBBox* shSaa1Wring3b =
new TGeoBBox(saa1Wring3Router / 2., saa1Wring3Router / 2., saa1Wring3HWidth);
746 shSaa1Wring3b->SetName(
"shSaa1Wring3b");
747 TGeoTranslation* trSaa1Wring3b =
new TGeoTranslation(
"trSaa1Wring3b", saa1Wring3Router / 2. + saa1Wring3Cutoffx,
748 saa1Wring3Router / 2. + saa1Wring3Cutoffy, 0.);
749 trSaa1Wring3b->RegisterYourself();
750 TGeoCompositeShape* shSaa1Wring3 =
751 new TGeoCompositeShape(
"shSaa1Wring3",
"(shSaa1Wring3a)*(shSaa1Wring3b:trSaa1Wring3b)");
752 TGeoVolume* voSaa1Wring3 =
new TGeoVolume(
"YSAA1_WRING3", shSaa1Wring3, kMedNiW);
758 Float_t saa1Wring4Width = 5.85;
759 TGeoPcon* shSaa1Wring4 =
new TGeoPcon(0., 360., 5);
760 shSaa1Wring4->DefineSection(0, 0.00, 20.31, 23.40);
761 shSaa1Wring4->DefineSection(1, 1.00, 20.31, 23.40);
762 shSaa1Wring4->DefineSection(2, 1.00, 20.31, 24.50);
763 shSaa1Wring4->DefineSection(3, 4.85, 20.31, 24.80);
764 shSaa1Wring4->DefineSection(4, 5.85, 24.10, 24.80);
765 TGeoVolume* voSaa1Wring4 =
new TGeoVolume(
"YSAA1_WRING4", shSaa1Wring4, kMedNiW);
771 Float_t saa1Wring5Rinner = 20.31;
772 Float_t saa1Wring5Router = 23.40;
773 Float_t saa1Wring5HWidth = 0.85;
774 TGeoVolume* voSaa1Wring5 =
775 new TGeoVolume(
"YSAA1_WRING5",
new TGeoTube(saa1Wring5Rinner, saa1Wring5Router, saa1Wring5HWidth), kMedNiW);
779 TGeoVolumeAssembly* asSaa1ExtraShield =
new TGeoVolumeAssembly(
"YSAA1ExtraShield");
783 dz = -(saa1Wring1Width + 6. * saa1Wring2HWidth + 2. * saa1Wring3HWidth + saa1Wring4Width + 2. * saa1Wring5HWidth +
786 asSaa1ExtraShield->AddNode(voSaa1Wring1, 1,
new TGeoTranslation(0., 0., dz));
787 dz += saa1Wring1Width;
788 dz += saa1Wring2HWidth;
789 asSaa1ExtraShield->AddNode(voSaa1Wring2, 1,
new TGeoCombiTrans(0., 0., dz, rot000));
790 asSaa1ExtraShield->AddNode(voSaa1Wring2, 2,
new TGeoCombiTrans(0., 0., dz, rot180));
791 dz += saa1Wring2HWidth;
793 dz += saa1Wring2HWidth;
794 asSaa1ExtraShield->AddNode(voSaa1Wring2, 3,
new TGeoCombiTrans(0., 0., dz, rot090));
795 asSaa1ExtraShield->AddNode(voSaa1Wring2, 4,
new TGeoCombiTrans(0., 0., dz, rot270));
796 dz += saa1Wring2HWidth;
797 dz += saa1Wring5HWidth;
798 asSaa1ExtraShield->AddNode(voSaa1Wring5, 1,
new TGeoTranslation(0., 0., dz));
799 dz += saa1Wring5HWidth;
800 dz += saa1Wring2HWidth;
801 asSaa1ExtraShield->AddNode(voSaa1Wring2, 5,
new TGeoCombiTrans(0., 0., dz, rot000));
802 asSaa1ExtraShield->AddNode(voSaa1Wring2, 6,
new TGeoCombiTrans(0., 0., dz, rot180));
803 dz += saa1Wring2HWidth;
805 dz += saa1Wring3HWidth;
806 asSaa1ExtraShield->AddNode(voSaa1Wring3, 1,
new TGeoCombiTrans(0., 0., dz, rot090));
807 asSaa1ExtraShield->AddNode(voSaa1Wring3, 2,
new TGeoCombiTrans(0., 0., dz, rot270));
808 dz += saa1Wring3HWidth;
809 asSaa1ExtraShield->AddNode(voSaa1Wring4, 1,
new TGeoTranslation(0., 0., dz));
810 dz += saa1Wring4Width;
811 const Float_t saa1ExtraShieldL = 48;
814 voSaa1M->AddNode(voSaa1StEnv, 1, gGeoIdentity);
815 voSaa1M->AddNode(voSaa1WPipe, 1, gGeoIdentity);
816 voSaa1M->AddNode(voSaa1PbComp, 1, gGeoIdentity);
817 voSaa1M->AddNode(voSaa1WCone, 1, gGeoIdentity);
818 voSaa1M->AddNode(voSaa1StRing, 1, gGeoIdentity);
819 voSaa1M->AddNode(voSaa1InnerTube, 1,
new TGeoTranslation(0., 0., dzSaa1InnerTube + 0.9));
820 TGeoVolumeAssembly* voSaa1 =
new TGeoVolumeAssembly(
"YSAA1");
821 voSaa1->AddNode(voSaa1M, 1, gGeoIdentity);
829 Float_t rOuSaa1Saa2 = 70.0 / 2.;
832 Float_t rInSaa1Saa2F1 = 58.5 / 2.;
835 Float_t rInSaa1Saa2C1 = 42.8 / 2.;
840 Float_t rInSaa1Saa2C2 = 36.2 / 2.;
843 Float_t rInSaa1Saa2F2 = 54.1 / 2.;
845 const Float_t dzSaa1Saa2 = 34.9;
847 TGeoPcon* shSaa1Saa2Pb =
new TGeoPcon(0., 360., 8);
850 shSaa1Saa2Pb->DefineSection(0,
z, rInSaa1Saa2F1, rOuSaa1Saa2);
852 shSaa1Saa2Pb->DefineSection(1,
z, rInSaa1Saa2F1, rOuSaa1Saa2);
853 shSaa1Saa2Pb->DefineSection(2,
z, rInSaa1Saa2C1, rOuSaa1Saa2);
856 shSaa1Saa2Pb->DefineSection(3,
z, rInSaa1Saa2C1, rOuSaa1Saa2);
859 shSaa1Saa2Pb->DefineSection(4,
z, rInSaa1Saa2C2, rOuSaa1Saa2);
861 shSaa1Saa2Pb->DefineSection(5,
z, rInSaa1Saa2C2, rOuSaa1Saa2);
862 shSaa1Saa2Pb->DefineSection(6,
z, rInSaa1Saa2F2, rOuSaa1Saa2);
864 shSaa1Saa2Pb->DefineSection(7,
z, rInSaa1Saa2F2, rOuSaa1Saa2);
865 TGeoVolume* voSaa1Saa2Pb =
new TGeoVolume(
"YSAA1SAA2Pb", shSaa1Saa2Pb, kMedPb);
868 Float_t rOuSaa1Saa2Steel = 36.9;
871 TGeoVolume* voSaa1Saa2 =
new TGeoVolume(
"YSAA1SAA2", shSaa1Saa2, kMedSteel);
872 voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, gGeoIdentity);
877 TGeoVolume* voSaa1Saa2I =
new TGeoVolume(
"YSAA1_SAA2I", shSaa1Saa2I, kMedPbSh);
878 voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, gGeoIdentity);
891 Float_t rInSaa2StEnv1 = 65.8 / 2.;
893 Float_t dzSaa2StEnv2 = 340.35 - 4.;
894 Float_t rInSaa2StEnv2 = 87.2 / 2.;
898 TGeoPcon* shSaa2StEnv =
new TGeoPcon(0., 360., 6);
901 shSaa2StEnv->DefineSection(0,
z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
903 shSaa2StEnv->DefineSection(1,
z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
905 shSaa2StEnv->DefineSection(2,
z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
907 shSaa2StEnv->DefineSection(3,
z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
909 shSaa2StEnv->DefineSection(4,
z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
911 shSaa2StEnv->DefineSection(5,
z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
913 TGeoVolume* voSaa2StEnv =
new TGeoVolume(
"YSAA2_SteelEnvelope", shSaa2StEnv, kMedSteel);
928 Float_t rOuSaa2PbRingF = 42.74;
930 Float_t rOuSaa2PbRingR = 44.58;
932 TGeoPcon* shSaa2PbRing =
new TGeoPcon(0., 360., 2);
934 shSaa2PbRing->DefineSection(0,
z, rInSaa2PbRing, rOuSaa2PbRingF);
936 shSaa2PbRing->DefineSection(1,
z, rInSaa2PbRing, rOuSaa2PbRingR);
938 TGeoVolume* voSaa2PbRing =
new TGeoVolume(
"YSAA2_PbRing", shSaa2PbRing, kMedPb);
944 tanAlpha = TMath::Tan(1.89 / 2. * kDegRad);
945 TGeoPcon* shSaa2PbComp =
new TGeoPcon(0., 360., 16);
947 const Float_t dzSaa2PbComp = 512.;
955 Float_t rInSaa2PbCompA1 = 43.0 / 2.;
956 Float_t rOuSaa2PbCompA1 = 53.0 / 2.;
959 Float_t rInSaa2PbCompA2 = 36.8 / 2.;
960 Float_t rOuSaa2PbCompA2 = rOuSaa2PbCompA1;
963 Float_t rInSaa2PbCompA3 = rInSaa2PbCompA2;
964 Float_t rOuSaa2PbCompA3 = 65.2 / 2.;
968 Float_t dzSaa2PbComp1 = 146.15;
970 Float_t rInSaa2PbComp1 = rInSaa2PbCompA3 + dzSaa2PbComp1 * tanAlpha;
972 Float_t rOuSaa2PbComp1 = rOuSaa2PbCompA3;
976 Float_t dzSaa2PbComp2 = (dzSaa2PbComp - dzSaa2PbComp1 - dzSaa2PbCompB1 - dzSaa2PbCompB2);
978 Float_t rInSaa2PbComp2 = rInSaa2PbComp1 + dzSaa2PbComp2 * tanAlpha;
980 Float_t rOuSaa2PbComp2 = 86.6 / 2.;
987 Float_t rInSaa2PbCompE1 = 52.0 / 2.;
988 Float_t rOuSaa2PbCompE1 = 86.6 / 2.;
993 Float_t rInSaa2PbCompE3 = 52.0 / 2. + dzSaa2PbCompE2;
994 Float_t rOuSaa2PbCompE3 = 83.0 / 2.;
997 Float_t rOuSaa2PbCompE4 = 61.6 / 2.;
1005 shSaa2PbComp->DefineSection(0,
z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
1006 z += dzSaa2PbCompA1;
1007 shSaa2PbComp->DefineSection(1,
z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
1008 shSaa2PbComp->DefineSection(2,
z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
1010 z += dzSaa2PbCompA2;
1011 shSaa2PbComp->DefineSection(3,
z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
1012 shSaa2PbComp->DefineSection(4,
z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
1014 z += dzSaa2PbCompA3;
1015 shSaa2PbComp->DefineSection(5,
z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
1019 shSaa2PbComp->DefineSection(6,
z, rInSaa2PbComp1, rOuSaa2PbComp1);
1020 shSaa2PbComp->DefineSection(7,
z, rInSaa2PbComp1, rOuSaa2PbComp2);
1024 shSaa2PbComp->DefineSection(8,
z, rInSaa2PbComp2, rOuSaa2PbComp2);
1027 z += dzSaa2PbCompE1;
1028 shSaa2PbComp->DefineSection(9,
z, rInSaa2PbCompE1, rOuSaa2PbCompE1);
1030 z += dzSaa2PbCompE2;
1031 shSaa2PbComp->DefineSection(10,
z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1033 z += dzSaa2PbCompE3;
1034 shSaa2PbComp->DefineSection(11,
z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1035 shSaa2PbComp->DefineSection(12,
z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1037 z += dzSaa2PbCompE4;
1038 shSaa2PbComp->DefineSection(13,
z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1039 shSaa2PbComp->DefineSection(14,
z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1041 z += dzSaa2PbCompE5;
1042 shSaa2PbComp->DefineSection(15,
z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1044 TGeoVolume* voSaa2PbComp =
new TGeoVolume(
"YSAA2_PbComp", shSaa2PbComp, kMedPbSh);
1059 const Float_t kSaa2InnerTubeL = 501.7;
1060 const Float_t kSaa2InnerTubeRmin = 36.6 / 2.;
1061 const Float_t kSaa2InnerTubeRmax = 51.8 / 2.;
1062 const Float_t kSaa2InnerTubeD = 0.2;
1063 TGeoPcon* shSaa2InnerTube =
new TGeoPcon(0., 360., 4);
1065 shSaa2InnerTube->DefineSection(0,
z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1066 z += dzSaa2PbCompA2 + dzSaa2PbCompA3;
1067 shSaa2InnerTube->DefineSection(1,
z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1068 z = kSaa2InnerTubeL - dzSaa2PbCompE1;
1069 shSaa2InnerTube->DefineSection(2,
z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1070 z = kSaa2InnerTubeL;
1071 shSaa2InnerTube->DefineSection(3,
z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1072 TGeoVolume* voSaa2InnerTube =
new TGeoVolume(
"YSAA2_InnerTube", shSaa2InnerTube, kMedSteelSh);
1080 TGeoTube* shSaa2SteelRing =
new TGeoTube(41.6, 47.6, dzSaa2SteelRing);
1081 TGeoVolume* voSaa2SteelRing =
new TGeoVolume(
"YSAA2_SteelRing", shSaa2SteelRing, kMedSteel);
1088 TGeoPcon* shSaa2 =
new TGeoPcon(0., 360., 16);
1090 rmin = kSaa2InnerTubeRmin - kSaa2InnerTubeD - kSec;
1091 rmax = kSaa2InnerTubeRmax - kSaa2InnerTubeD - kSec;
1094 shSaa2->DefineSection(0,
z, rmin, rOuSaa2PbCompA1);
1095 z += dzSaa2PbCompA1 + dzSaa2PbCompA2;
1096 shSaa2->DefineSection(1,
z, rmin, rOuSaa2PbCompA1);
1097 shSaa2->DefineSection(2,
z, rmin, rInSaa2StEnv1 + dSt);
1098 z += dzSaa2PbCompA3;
1099 shSaa2->DefineSection(3,
z, rmin, rInSaa2StEnv1 + dSt);
1101 shSaa2->DefineSection(4,
z, 0., rInSaa2StEnv1 + dSt);
1102 shSaa2->DefineSection(5,
z, 0., rOuSaa2PbRingF);
1104 shSaa2->DefineSection(6,
z, 0., rOuSaa2PbRingR);
1105 shSaa2->DefineSection(7,
z, 0., rInSaa2StEnv1 + dSt);
1106 z = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2StEnv1;
1107 shSaa2->DefineSection(8,
z, 0., rInSaa2StEnv1 + dSt);
1108 shSaa2->DefineSection(9,
z, 0., rInSaa2StEnv2 + dSt);
1109 z = dzSaa2PbComp - dzSaa2PbCompB2;
1110 shSaa2->DefineSection(10,
z, rmax, rInSaa2StEnv2 + dSt);
1111 z += dzSaa2PbCompE1;
1112 shSaa2->DefineSection(11,
z, rmax, rInSaa2StEnv2 + dSt);
1113 z += dzSaa2PbCompE2;
1114 shSaa2->DefineSection(12,
z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1115 z += (dzSaa2PbCompE3 + dzSaa2PbCompE4);
1116 shSaa2->DefineSection(13,
z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1117 shSaa2->DefineSection(14,
z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1118 z += dzSaa2PbCompE5;
1119 shSaa2->DefineSection(15,
z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1121 TGeoVolume* voSaa2 =
new TGeoVolume(
"YSAA2", shSaa2, kMedAir);
1122 voSaa2->SetVisibility(0);
1124 Double_t zref = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2PbCompA3;
1125 for (Int_t
i = 4;
i < 10;
i++) {
1126 Double_t zp = shSaa2->GetZ(
i);
1127 Double_t r2 = shSaa2->GetRmax(
i);
1128 Double_t r1 = rmin + (zp - zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
1129 shSaa2->DefineSection(
i, zp, r1, r2);
1134 voSaa2->AddNode(voSaa2StEnv, 1, gGeoIdentity);
1135 voSaa2->AddNode(voSaa2PbRing, 1, gGeoIdentity);
1136 voSaa2->AddNode(voSaa2PbComp, 1, gGeoIdentity);
1137 voSaa2->AddNode(voSaa2InnerTube, 1,
new TGeoTranslation(0., 0., dzSaa2PbCompA1));
1138 z = (dzSaa2PbComp - dzSaa2PbCompE4 - dzSaa2PbCompE5) + dzSaa2SteelRing;
1139 voSaa2->AddNode(voSaa2SteelRing, 1,
new TGeoTranslation(0., 0.,
z));
1153 TGeoVolumeAssembly* voSaa3 =
new TGeoVolumeAssembly(
"YSAA3");
1159 TGeoBBox* shSaa3CCBlockO =
new TGeoBBox(80. / 2., 80. / 2., 80. / 2.);
1160 shSaa3CCBlockO->SetName(
"Saa3CCBlockO");
1162 TGeoPcon* shSaa3InnerRegion =
new TGeoPcon(0., 360., 4);
1164 shSaa3InnerRegion->DefineSection(0, -50.0, 0., 27.1);
1165 shSaa3InnerRegion->DefineSection(1, -13.0, 0., 27.1);
1166 shSaa3InnerRegion->DefineSection(2, 39.1, 0., 12.3);
1167 shSaa3InnerRegion->DefineSection(3, 80.0, 0., 12.3);
1168 shSaa3InnerRegion->SetName(
"Saa3InnerRegion");
1170 TGeoCompositeShape* shSaa3CCBlock =
new TGeoCompositeShape(
"Saa3CCBlock",
"Saa3CCBlockO-Saa3InnerRegion");
1171 TGeoVolume* voSaa3CCBlock =
new TGeoVolume(
"YSAA3CCBlock", shSaa3CCBlock, kMedConcSh);
1173 voSaa3->AddNode(voSaa3CCBlock, 1, gGeoIdentity);
1176 TGeoVolume* voSaa3SteelPlate1 =
1177 new TGeoVolume(
"YSAA3SteelPlate1",
new TGeoBBox(240. / 2., 80. / 2., 80. / 2.), kMedSteelSh);
1178 TGeoVolume* voSaa3SteelPlate11 =
1179 new TGeoVolume(
"YSAA3SteelPlate11",
new TGeoBBox(240. / 2., 80. / 2., 10. / 2.), kMedSteel);
1180 voSaa3SteelPlate11->SetVisContainers(kTRUE);
1181 voSaa3SteelPlate1->SetVisibility(kTRUE);
1182 voSaa3SteelPlate1->AddNode(voSaa3SteelPlate11, 1,
new TGeoTranslation(0., 0., -35.));
1183 voSaa3->AddNode(voSaa3SteelPlate1, 1,
new TGeoTranslation(0., +80., 0.));
1184 voSaa3->AddNode(voSaa3SteelPlate1, 2,
new TGeoTranslation(0., -80., 0.));
1187 TGeoVolume* voSaa3SteelPlate2 =
1188 new TGeoVolume(
"YSAA3SteelPlate2",
new TGeoBBox(80. / 2., 80. / 2., 80. / 2.), kMedSteelSh);
1189 TGeoVolume* voSaa3SteelPlate21 =
1190 new TGeoVolume(
"YSAA3SteelPlate21",
new TGeoBBox(80. / 2., 80. / 2., 10. / 2.), kMedSteel);
1191 voSaa3SteelPlate2->AddNode(voSaa3SteelPlate21, 1,
new TGeoTranslation(0., 0., -35.));
1192 voSaa3->AddNode(voSaa3SteelPlate2, 1,
new TGeoTranslation(+80, 0., 0.));
1193 voSaa3->AddNode(voSaa3SteelPlate2, 2,
new TGeoTranslation(-80, 0., 0.));
1200 const Float_t dzMuonFilter = 60.;
1202 TGeoBBox* shMuonFilterO =
new TGeoBBox(550. / 2., 620. / 2., dzMuonFilter);
1203 shMuonFilterO->SetName(
"FilterO");
1204 TGeoCombiTrans* trFilter =
new TGeoCombiTrans(
"trFilter", 0., -dzMuonFilter * TMath::Tan(alhc *
kDegrad), 0., rotlhc);
1205 trFilter->RegisterYourself();
1206 TGeoTube* shMuonFilterI =
new TGeoTube(0., 48.8, dzMuonFilter + 20.);
1207 shMuonFilterI->SetName(
"FilterI");
1208 TGeoCompositeShape* shMuonFilter =
new TGeoCompositeShape(
"MuonFilter",
"FilterO-FilterI:trFilter");
1211 TGeoVolume* voMuonFilter =
new TGeoVolume(
"YMuonFilter", shMuonFilter, kMedCastiron);
1215 TGeoBBox* shMuonFilterOH =
new TGeoBBox(550. / 2., 620. / 2., dzMuonFilterH);
1216 shMuonFilterOH->SetName(
"FilterOH");
1217 TGeoTube* shMuonFilterIH =
new TGeoTube(0., 50., dzMuonFilterH + 5.);
1218 shMuonFilterIH->SetName(
"FilterIH");
1219 TGeoCompositeShape* shMuonFilterH =
new TGeoCompositeShape(
"MuonFilterH",
"FilterOH-FilterIH:trFilter");
1220 TGeoVolume* voMuonFilterH =
new TGeoVolume(
"YMuonFilterH", shMuonFilterH, kMedCastironSh);
1221 voMuonFilter->AddNode(voMuonFilterH, 1, gGeoIdentity);
1224 TGeoVolumeAssembly* voSaa =
new TGeoVolumeAssembly(
"YSAA");
1227 const Float_t ziFaWTail = 505.0;
1229 const Float_t zoFaWTail = ziFaWTail + dzFaWTail;
1232 const Float_t ziFaSaa1 = zoFaWTail - ozFaSaa1;
1234 const Float_t zoFaSaa1 = ziFaSaa1 + dzFaSaa1;
1237 const Float_t ziSaa1 = zoFaSaa1 - ozSaa1;
1239 const Float_t zoSaa1 = ziSaa1 + dzSaa1;
1241 const Float_t ziSaa1Saa2 = zoSaa1 - 1.95;
1243 const Float_t zoSaa1Saa2 = ziSaa1Saa2 + dzSaa1Saa2;
1245 const Float_t ziSaa2 = zoSaa1Saa2 - 3.1;
1247 const Float_t zoSaa2 = ziSaa2 + dzSaa2PbComp;
1252 const Float_t zcFilter = 1465.9 + dzMuonFilter;
1254 voSaa->AddNode(voFaWTail, 1,
new TGeoTranslation(0., 0., ziFaWTail));
1255 voSaa->AddNode(voFaSaa1, 1,
new TGeoTranslation(0., 0., ziFaSaa1));
1256 voSaa->AddNode(voSaa1, 1,
new TGeoTranslation(0., 0., ziSaa1));
1257 voSaa->AddNode(voSaa1Saa2, 1,
new TGeoTranslation(0., 0., ziSaa1Saa2 - 0.1));
1258 voSaa->AddNode(voSaa2, 1,
new TGeoTranslation(0., 0., ziSaa2));
1263 voSaa->AddNode(voSaa3, 1,
new TGeoTranslation(0., 0., zcSaa3));
1265 TGeoRotation* rotxz =
new TGeoRotation(
"rotxz", 90., 0., 90., 90., 180., 0.);
1266 top->AddNode(voSaa, 1,
new TGeoCombiTrans(0., 0., 0., rotxz));
1274 TGeoPcon* shYOUT1 =
new TGeoPcon(0., 360., 22);
1277 for (Int_t iz = 1; iz < 9; iz++) {
1278 z = shFaWTail->GetZ(iz - 1);
1282 shYOUT1->DefineSection(iz - 1,
z + ziFaWTail, shFaWTail->GetRmax(iz - 1) + eps, 150.);
1285 z = shYOUT1->GetZ(7);
1287 for (Int_t iz = 9; iz < 17; iz++) {
1288 if (iz == 11 || iz == 15) {
1291 shYOUT1->DefineSection(izc,
z + shFaSaa1->GetZ(iz - 9), shFaSaa1->GetRmax(iz - 9) + eps, 150.);
1294 z = shYOUT1->GetZ(13) - ozSaa1;
1296 for (Int_t iz = 15; iz < 22; iz++) {
1297 shYOUT1->DefineSection(iz - 1,
z + shSaa1M->GetZ(iz - 11), shSaa1M->GetRmax(iz - 11) + eps, 150.);
1300 dz = ziDipole - (zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1);
1301 rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
1303 shYOUT1->DefineSection(21, ziDipole, rOut + eps, 150.);
1306 TGeoVolume* voYOUT1 =
new TGeoVolume(
"YOUT1", shYOUT1, kMedAirMu);
1307 voYOUT1->SetVisibility(0);
1309 voYOUT1->AddNode(asSaa1ExtraShield, 1,
1310 new TGeoCombiTrans(0., 0., -(100.7 + 56.2 + saa1ExtraShieldL / 2. + ziFaWTail), rotxz));
1311 voYOUT1->AddNode(asFaExtraShield, 1,
1312 new TGeoCombiTrans(0., 0., -(16.41 - 7.46 + kFaWring2HWidth + ziFaWTail), rotxz));
1313 top->AddNode(voYOUT1, 1, gGeoIdentity);
1319 TGeoPcon* shYOUT21 =
new TGeoPcon(0., 360., 12);
1321 shYOUT21->DefineSection(0,
z, rOuSaa1String, 375.);
1324 shYOUT21->DefineSection(1,
z, rOuSaa1String, 375.);
1325 shYOUT21->DefineSection(2,
z, rOuSaa1Saa2Steel, 375.);
1328 shYOUT21->DefineSection(3,
z, rOuSaa1Saa2Steel, 375.);
1330 z = ziSaa2 + zSaa2PbRing;
1331 shYOUT21->DefineSection(4,
z, rInSaa2StEnv1 + dSt, 375.);
1333 shYOUT21->DefineSection(5,
z, rOuSaa2PbRingF, 375.);
1334 rmin = rOuSaa2PbRingF + (1380. -
z) * TMath::Tan(1.6 * kDegRad);
1335 shYOUT21->DefineSection(6, 1380., rmin, 375.);
1336 z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
1337 shYOUT21->DefineSection(7,
z, rOuSaa2PbRingR, 375.);
1339 shYOUT21->DefineSection(8,
z, rInSaa2StEnv1 + dSt, 460.);
1340 z = ziSaa2 + dzSaa2StEnv1;
1341 shYOUT21->DefineSection(9,
z, rInSaa2StEnv1 + dSt, 460.);
1342 shYOUT21->DefineSection(10,
z, rInSaa2StEnv2 + dSt, 460.);
1344 shYOUT21->DefineSection(11,
z, rInSaa2StEnv2 + dSt, 460.);
1347 shYOUT21->SetName(
"shYOUT21");
1349 TGeoBBox* shYOUT22 =
new TGeoBBox(460., 200., 65. - 1.5);
1350 shYOUT22->SetName(
"shYOUT22");
1352 TGeoTranslation* tYOUT22 =
new TGeoTranslation(0., -310. - 200., -zcFilter);
1353 tYOUT22->SetName(
"tYOUT22");
1354 tYOUT22->RegisterYourself();
1356 TGeoCompositeShape* shYOUT2 =
new TGeoCompositeShape(
"shYOUT2",
"shYOUT21-shYOUT22:tYOUT22");
1358 TGeoVolume* voYOUT2 =
new TGeoVolume(
"YOUT2", shYOUT2, kMedAirMu);
1359 voYOUT2->SetVisibility(1);
1360 voYOUT2->AddNode(voMuonFilter, 1,
1361 new TGeoCombiTrans(0., dzMuonFilter * TMath::Tan(alhc *
kDegrad), -zcFilter, rotxzlhc));
1362 top->AddNode(voYOUT2, 1, gGeoIdentity);