* provided "as is" without express or implied warranty. *
**************************************************************************/
-/* $Id $ */
+/* $Id$ */
//-------------------------------------------------------------------------
// The small angle absorber SAA (beam shield)
TGeoRotation* rot090 = new TGeoRotation("rot090", 90., 90., 90., 180., 0., 0.);
TGeoRotation* rot180 = new TGeoRotation("rot180", 90., 180., 90., 270., 0., 0.);
TGeoRotation* rot270 = new TGeoRotation("rot270", 90., 270., 90., 0., 0., 0.);
+ Float_t alhc = 0.794;
+ TGeoRotation* rotxzlhc = new TGeoRotation("rotxzlhc", 0., -alhc, 0.);
+ TGeoRotation* rotlhc = new TGeoRotation("rotlhc", 0., alhc, 0.);
+
//
// Media
//
TGeoMedium* kMedPb = gGeoManager->GetMedium("SHIL_PB_C0");
TGeoMedium* kMedPbSh = gGeoManager->GetMedium("SHIL_PB_C2");
//
-// TGeoMedium* kMedConc = gGeoManager->GetMedium("SHIL_CC_C0");
TGeoMedium* kMedConcSh = gGeoManager->GetMedium("SHIL_CC_C2");
//
const Float_t kDegRad = TMath::Pi() / 180.;
//
///////////////////////////////////
// SAA3 Outer Shape //
-// Drawing ALIP2A__0xxx //
+// Drawing ALIP2A__0288 //
///////////////////////////////////
TGeoVolumeAssembly* voSaa3 = new TGeoVolumeAssembly("YSAA3");
///////////////////////////////////
-// SAA3 Steel Components //
-// Drawing ALIP2A__0xxx //
+// SAA3 Concrete cone //
+// Drawing ALIP2A__0284 //
///////////////////////////////////
// Block
TGeoBBox* shSaa3CCBlockO = new TGeoBBox(80./2., 80./2., 100./2.);
shSaa3CCBlockO->SetName("Saa3CCBlockO");
- TGeoPcon* shSaa3InnerRegion = new TGeoPcon(0., 360., 6);
- shSaa3InnerRegion->DefineSection( 0, -60.0, 0., 56.6/2.);
- shSaa3InnerRegion->DefineSection( 1, -45.0, 0., 56.6/2.);
- shSaa3InnerRegion->DefineSection( 2, -42.0, 0., 50.6/2.);
- shSaa3InnerRegion->DefineSection( 3, -30.0, 0., 50.6/2.);
- shSaa3InnerRegion->DefineSection( 4, 30.5, 0., 16.8/2.);
- shSaa3InnerRegion->DefineSection( 5, 60.0, 0., 16.8/2.);
+ TGeoPcon* shSaa3InnerRegion = new TGeoPcon(0., 360., 4);
+ shSaa3InnerRegion->DefineSection( 0, -60.0, 0., 27.1);
+ shSaa3InnerRegion->DefineSection( 1, -23.0, 0., 27.1);
+ shSaa3InnerRegion->DefineSection( 2, 29.1, 0., 12.3);
+ shSaa3InnerRegion->DefineSection( 3, 60.0, 0., 12.3);
shSaa3InnerRegion->SetName("Saa3InnerRegion");
TGeoCompositeShape* shSaa3CCBlock = new TGeoCompositeShape("Saa3CCBlock", "Saa3CCBlockO-Saa3InnerRegion");
TGeoBBox* shMuonFilterO = new TGeoBBox(550./2., 620./2., dzMuonFilter);
shMuonFilterO->SetName("FilterO");
- TGeoTube* shMuonFilterI = new TGeoTube(0., 50., dzMuonFilter + 5.);
+ TGeoCombiTrans* trFilter = new TGeoCombiTrans("trFilter", 0., -dzMuonFilter * TMath::Tan(alhc * kDegrad), 0., rotlhc);
+ trFilter->RegisterYourself();
+ TGeoTube* shMuonFilterI = new TGeoTube(0., 48.8, dzMuonFilter + 20.);
shMuonFilterI->SetName("FilterI");
- TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI");
+ TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI:trFilter");
//
// !!!!! Needs to be inclined
TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedSteel);
shMuonFilterOH->SetName("FilterOH");
TGeoTube* shMuonFilterIH = new TGeoTube(0., 50., dzMuonFilterH + 5.);
shMuonFilterIH->SetName("FilterIH");
- TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH");
+ TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH:trFilter");
TGeoVolume* voMuonFilterH = new TGeoVolume("YMuonFilterH", shMuonFilterH, kMedSteelSh);
voMuonFilter->AddNode(voMuonFilterH, 1, gGeoIdentity);
// Position of the dipole
Float_t ziDipole = 741.;
- TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 25);
+ TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 24);
Float_t eps = 1.e-2;
// FA Tail Section
- for (Int_t iz = 0; iz < 9; iz++) {
+ for (Int_t iz = 1; iz < 9; iz++) {
z = shFaWTail->GetZ(iz+1);
if (iz == 8) z -= ozFaSaa1;
- shYOUT1->DefineSection(iz, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
+ shYOUT1->DefineSection(iz-1, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
}
// FA-SAA1 Joint
- z = shYOUT1->GetZ(8);
+ z = shYOUT1->GetZ(7);
for (Int_t iz = 9; iz < 17; iz++)
- shYOUT1->DefineSection(iz, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
+ shYOUT1->DefineSection(iz-1, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
- z = shYOUT1->GetZ(16) - ozSaa1;
+ z = shYOUT1->GetZ(15) - ozSaa1;
// SAA1 - Dipole
for (Int_t iz = 17; iz < 24; iz++)
- shYOUT1->DefineSection(iz, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.);
+ shYOUT1->DefineSection(iz-1, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.);
// Distance between dipole and start of SAA1 2deg opening cone
dz = ziDipole - (zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1);
rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
- shYOUT1->DefineSection(24, ziDipole, rOut + eps, 150.);
+ shYOUT1->DefineSection(23, ziDipole, rOut + eps, 150.);
InvertPcon(shYOUT1);
TGeoVolume* voYOUT1 = new TGeoVolume("YOUT1", shYOUT1, kMedAirMu);
//
Float_t zoDipole = 1249.;
- TGeoPcon* shYOUT2 = new TGeoPcon(0., 360., 14);
+ TGeoPcon* shYOUT21 = new TGeoPcon(0., 360., 14);
z = zoDipole;
- shYOUT2->DefineSection(0, z, rOuSaa1String, 252.);
+ shYOUT21->DefineSection(0, z, rOuSaa1String, 375.);
// Start of SAA1-SAA2
z = ziSaa1Saa2;
- shYOUT2->DefineSection(1, z, rOuSaa1String, 252.);
- shYOUT2->DefineSection(2, z, rOuSaa1Saa2Steel, 252.);
+ shYOUT21->DefineSection(1, z, rOuSaa1String, 375.);
+ shYOUT21->DefineSection(2, z, rOuSaa1Saa2Steel, 375.);
// End of SAA1-SAA2
z = ziSaa2;
- shYOUT2->DefineSection(3, z, rOuSaa1Saa2Steel, 252.);
+ shYOUT21->DefineSection(3, z, rOuSaa1Saa2Steel, 375.);
// SAA2
- shYOUT2->DefineSection( 4, z, rInSaa2StEnv1 + dSt, 252.);
+ shYOUT21->DefineSection( 4, z, rInSaa2StEnv1 + dSt, 375.);
z = ziSaa2 + zSaa2PbRing;
- shYOUT2->DefineSection( 5, z, rInSaa2StEnv1 + dSt, 252.);
+ shYOUT21->DefineSection( 5, z, rInSaa2StEnv1 + dSt, 375.);
// Pb Cone
- shYOUT2->DefineSection( 6, z, rOuSaa2PbRingF, 252.);
+ shYOUT21->DefineSection( 6, z, rOuSaa2PbRingF, 375.);
rmin = rOuSaa2PbRingF + (1380. - z) * TMath::Tan(1.6 * kDegRad);
- shYOUT2->DefineSection( 7, 1380., rmin, 252.);
- shYOUT2->DefineSection( 8, 1380., rmin, 304.);
+ shYOUT21->DefineSection( 7, 1380., rmin, 375.);
+ shYOUT21->DefineSection( 8, 1380., rmin, 375.);
z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
- shYOUT2->DefineSection( 9, z, rOuSaa2PbRingR, 304.);
+ shYOUT21->DefineSection( 9, z, rOuSaa2PbRingR, 375.);
// Straight Sections
- shYOUT2->DefineSection(10, z, rInSaa2StEnv1 + dSt, 460.);
+ shYOUT21->DefineSection(10, z, rInSaa2StEnv1 + dSt, 460.);
z = ziSaa2 + dzSaa2StEnv1;
- shYOUT2->DefineSection(11, z, rInSaa2StEnv1 + dSt, 460.);
- shYOUT2->DefineSection(12, z, rInSaa2StEnv2 + dSt, 460.);
+ shYOUT21->DefineSection(11, z, rInSaa2StEnv1 + dSt, 460.);
+ shYOUT21->DefineSection(12, z, rInSaa2StEnv2 + dSt, 460.);
z += dzSaa2StEnv2;
- shYOUT2->DefineSection(13, z, rInSaa2StEnv2 + dSt, 460.);
+ shYOUT21->DefineSection(13, z, rInSaa2StEnv2 + dSt, 460.);
+
+ InvertPcon(shYOUT21);
+ shYOUT21->SetName("shYOUT21");
+
+ TGeoBBox* shYOUT22 = new TGeoBBox(460. , 200., 65.);
+ shYOUT22->SetName("shYOUT22");
+
+ TGeoTranslation* tYOUT22 = new TGeoTranslation(0., -310. - 200., -zcFilter);
+ tYOUT22->SetName("tYOUT22");
+ tYOUT22->RegisterYourself();
+
+
+ TGeoCompositeShape* shYOUT2 = new TGeoCompositeShape("shYOUT2", "shYOUT21-shYOUT22:tYOUT22");
- InvertPcon(shYOUT2);
TGeoVolume* voYOUT2 = new TGeoVolume("YOUT2", shYOUT2, kMedAirMu);
- voYOUT2->SetVisibility(0);
- voYOUT2->AddNode(voMuonFilter, 1, new TGeoTranslation(0., 0., -zcFilter));
+ voYOUT2->SetVisibility(1);
+ voYOUT2->AddNode(voMuonFilter, 1, new TGeoCombiTrans(0., dzMuonFilter * TMath::Tan(alhc * kDegrad), -zcFilter, rotxzlhc));
top->AddNode(voYOUT2, 1, gGeoIdentity);
}