+////////////////////////////////////////////////////
+// //
+// Front Absorber Support Structure FASS //
+// //
+// Drawing ALIP2A__0035 //
+// Drawing ALIP2A__0089 //
+// Drawing ALIP2A__0090 //
+// Drawing ALIP2A__0109 //
+////////////////////////////////////////////////////
+ TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
+
+ TGeoVolumeAssembly* voFass = new TGeoVolumeAssembly("Fass");
+ const Float_t kDegRad = TMath::Pi() / 180.;
+ const TGeoMedium* kMedSteel = gGeoManager->GetMedium("ABSO_ST_C0");
+ const TGeoMedium* kMedAlu = gGeoManager->GetMedium("ABSO_ALU_C0");
+
+ const Float_t kFassUBFlangeH = 380.;
+ const Float_t kFassUBFlangeW = 77.;
+
+ const Float_t kFassUMFlangeH = 380.;
+ const Float_t kFassUMFlangeB = 246.;
+ const Float_t kFassUMFlangeT = 10.;
+ const Float_t kFassUMFalpha = - TMath::ATan((kFassUMFlangeB-kFassUMFlangeT)/ kFassUMFlangeH / 2.) / kDegRad;
+// Upper back flange
+// B1
+// 380 x 77
+ TGeoVolume* voFassUBFlange = new TGeoVolume("FassUBFlange", new TGeoBBox(kFassUBFlangeW/2.,
+ kFassUBFlangeH/2., 3./2.), kMedSteel);
+ voFass->AddNode(voFassUBFlange, 1, new TGeoTranslation(+1.5 + kFassUBFlangeW/2.,
+ 180. + kFassUBFlangeH/2.,
+ kFassUMFlangeB - 1.5));
+ voFass->AddNode(voFassUBFlange, 2, new TGeoTranslation(-1.5 - kFassUBFlangeW/2.,
+ 180. + kFassUBFlangeH/2.,
+ kFassUMFlangeB - 1.5));
+
+
+// Lower back flange
+// Upper median flange
+// Drawing ALIP2A__0090 //
+// Drawing ALIP2A__0089 //
+// A2
+
+ TGeoVolume* voFassUMFlange = new TGeoVolume("FassUMFlange",
+ new TGeoTrap(kFassUMFlangeH/2., kFassUMFalpha,
+ 0., 1.5,
+ kFassUMFlangeB/2., kFassUMFlangeB/2.,
+ 0., 1.5,
+ kFassUMFlangeT/2., kFassUMFlangeT/2.,
+ 0.), kMedSteel);
+
+ TGeoRotation* rotFass1 = new TGeoRotation("rotFass1", 180., 0., 90., 0., 90., 90.);
+ voFass->AddNode(voFassUMFlange,1 ,
+ new TGeoCombiTrans(0., 180. + kFassUMFlangeH/2., -(kFassUMFlangeB+kFassUMFlangeT)/4. + kFassUMFlangeB,
+ rotFass1));
+
+
+// Lower median flange
+// Drawing ALIP2A__0090 //
+// Drawing ALIP2A__0089 //
+// A1
+ const Float_t kFassLMFlangeH = 242.;
+ const Float_t kFassLMFlangeB = 246.;
+ const Float_t kFassLMFlangeT = 43.;
+ const Float_t kFassLMFalpha = - TMath::ATan((kFassLMFlangeB-kFassLMFlangeT)/ kFassLMFlangeH / 2.) / kDegRad;
+ TGeoVolume* voFassLMFlange = new TGeoVolume("FassLMFlange",
+ new TGeoTrap(kFassLMFlangeH/2., kFassLMFalpha,
+ 0., 1.5,
+ kFassLMFlangeB/2., kFassLMFlangeB/2.,
+ 0., 1.5,
+ kFassLMFlangeT/2., kFassLMFlangeT/2.,
+ 0.), kMedSteel);
+ TGeoRotation* rotFass2 = new TGeoRotation("rotFass2", 180., 0., 90., 0., 90., 270.);
+ voFass->AddNode(voFassLMFlange, 1,
+ new TGeoCombiTrans(0., -180. - kFassLMFlangeH/2., -(kFassLMFlangeB+kFassLMFlangeT)/4. + kFassLMFlangeB,
+ rotFass2));
+
+// Stiffeners
+// Support Plate
+//
+// Central cone
+ TGeoPgon* shFassCone = new TGeoPgon(22.5, 360., 8, 4);
+ shFassCone->DefineSection(0, 0., 0., 180.);
+ shFassCone->DefineSection(1, 3., 0., 180.);
+ shFassCone->DefineSection(2, 3., 177., 180.);
+ shFassCone->DefineSection(3, 246., 177., 180.);
+ shFassCone->SetName("FassCone");
+
+ TGeoBBox* shFassWindow = new TGeoBBox( 190., 53., 28.);
+ shFassWindow->SetName("FassWindow");
+ TGeoTranslation* tFassWindow = new TGeoTranslation("tFassWindow", 0., 0., 78.);
+ tFassWindow->RegisterYourself();
+
+ TGeoTube* shFassApperture = new TGeoTube(0., 104., 3.01);
+ shFassApperture->SetName("FassApperture");
+
+ TGeoCompositeShape* shFassCentral =
+ new TGeoCompositeShape("shFassCentral", "FassCone-(FassWindow:tFassWindow+FassApperture)");
+
+ TGeoVolume* voFassCentral = new TGeoVolume("FassCentral", shFassCentral, kMedSteel);
+ voFass->AddNode(voFassCentral, 1, vec0);
+
+//
+// Aluminum ring
+//
+ TGeoVolume* voFassAlRing = new TGeoVolume("FassAlRing", new TGeoTube(100., 180., 10.), kMedAlu);
+ voFass->AddNode(voFassAlRing, 1, new TGeoTranslation(0., 0., -11.));
+ TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.);
+ gGeoManager->GetVolume("ALIC")->AddNode(voFass, 1, new TGeoCombiTrans(0., 0., -388.45 - 90., rotxz));