diff --git a/macro/passive/create_bpipe_geometry_v21e.C b/macro/passive/create_bpipe_geometry_v21e.C new file mode 100644 index 0000000000000000000000000000000000000000..f3cac70df1a99ba9402c18ab1506e5432101efd6 --- /dev/null +++ b/macro/passive/create_bpipe_geometry_v21e.C @@ -0,0 +1,669 @@ +/* Copyright (C) 2021 Nuclear Physics Institute of the CAS, Rez + SPDX-License-Identifier: GPL-3.0-only + Authors: Petr Chudoba [committer] */ + +#include "TGeoArb8.h" +#include "TGeoCompositeShape.h" +#include "TGeoCone.h" +#include "TGeoManager.h" +#include "TGeoMatrix.h" +#include "TGeoSystemOfUnits.h" +#include "TGeoTube.h" +#include "TPad.h" +#include "TROOT.h" +#include "TSystem.h" + +#include "iostream" +#include "stdio.h" +using namespace std; +using namespace TGeoUnit; + +void create_bpipe_geometry_v21e(const char* geoTag = "v21e") +{ + //--- Definition of a simple geometry + gSystem->Load("libGeom"); + TGeoManager* geom = new TGeoManager("beampipe_v21e", "Beampipe for maximum deflection"); + + + //--- define some materials + TGeoMixture* matCarbonFiber = new TGeoMixture("BP_carbonfiber", 4, 1.5); + matCarbonFiber->AddElement(12.001, 6.0, 0.8926); + matCarbonFiber->AddElement(1.0079, 1.0, 0.0192); + matCarbonFiber->AddElement(35.453, 17.0, 0.0271); + matCarbonFiber->AddElement(15.999, 8.0, 0.0611); + + TGeoMixture* matStainless = new TGeoMixture("BP_stainless", 10, 8.0); + matStainless->AddElement(12.0, 6.0, 0.00035); + matStainless->AddElement(51.94, 24.0, 0.175); + matStainless->AddElement(54.94, 25.0, 0.01); + matStainless->AddElement(95.94, 42.0, 0.025); + matStainless->AddElement(14.0, 7.0, 0.0005); + matStainless->AddElement(58.6934, 28.0, 0.115); + matStainless->AddElement(30.97, 15.0, 0.000225); + matStainless->AddElement(31.97, 16.0, 0.000075); + matStainless->AddElement(27.98, 14.0, 0.005); + matStainless->AddElement(55.93, 26.0, 0.67135); + + TGeoMaterial* matVacuum = new TGeoMaterial("BP_vacuum", 1.e-16, 1.e-16, 1.e-16); + TGeoMaterial* matAl = new TGeoMaterial("BP_aluminium", 26.9815386, 13, 2.7, 24.01); + + // //--- define some media + TGeoMedium* Vacuum = new TGeoMedium("BP_vacuum", 1, matVacuum); + TGeoMedium* Al = new TGeoMedium("BP_aluminium", 2, matAl); + TGeoMedium* CF = new TGeoMedium("BP_carbonfiber", 3, matCarbonFiber); + TGeoMedium* Stainless = new TGeoMedium("BP_stainless", 4, matStainless); + + Double_t conus_lenght = 1585 * mm; + Double_t rmin1 = 55 * mm; + Double_t rmax1 = 56 * mm; + Double_t rmin2 = 125 * mm; + Double_t rmax2 = 126 * mm; + + Double_t rail_cord[] = {23.1, 0, 4.5, 21.5, 2.8, 4.5}; + Double_t top_plate_cord[] = {10, 0, 2.1, 10.15, 0, 4.05, 11.75, 2.15, 4.0, 15.3, 4.28, + 2.85, 18.1, 5.27, 2.85, 19.75, 5.65, 5.0, 21.1, 5.65, 0}; + Double_t side_plate_cord[] = {11.3, 0, 2, 11.3, 0, 7.55, 16, 6.8, 4.6, 8.7, 6.8, 4.6, + 19.8, 8.3, 2.35, 13.6, 8.3, 2.35, 20.8, 7.9, 3.0, 14.8, 7.9, 3.0, + 21.3, 6.8, 1.5, 16.3, 6.8, 1.5, 21.3, 6.3, 0, 17.4, 6.3, 0}; + + + //-----------------------DEFINITION OF TRANSFORMATIONS-------------------------------------------------------------------------------------- + + TGeoRotation* rot_top = new TGeoRotation("rot_top"); + rot_top->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_top = new TGeoCombiTrans(0, 15.2, 0, rot_top); + + TGeoRotation* rot_bott = new TGeoRotation("rot_bott"); + rot_bott->SetAngles(180, 0, 0); + TGeoCombiTrans* combi_bott = new TGeoCombiTrans(0, -15.2, 0, rot_bott); + + TGeoRotation* rot_rail_top = new TGeoRotation("rot_rail_top"); + rot_rail_top->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_rail_top = new TGeoCombiTrans(0, 20.15 - rail_cord[4], rail_cord[2] + 33, rot_rail_top); + + TGeoRotation* rot_rail = new TGeoRotation("rot_rail_bott"); + rot_rail->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_rail_bott = new TGeoCombiTrans(0, -20.15, rail_cord[2] + 33, rot_rail); + + + TGeoTranslation* ident_translation = new TGeoTranslation("ident_translation", 0, 0, 0); + ident_translation->RegisterYourself(); + + TGeoRotation* ident_rotation = new TGeoRotation("ident_rotation"); + ident_rotation->RotateY(0); + ident_rotation->RotateY(0); + ident_rotation->RegisterYourself(); + + TGeoTranslation orig_translation("orig_translation", -0.15707676 * mm, 0, 3230 * mm); + //TGeoCombiTrans *origin_translation = new TGeoCombiTrans(orig_translation,ident); + + + TGeoRotation orig_rotation("orig_rotation"); + orig_rotation.RotateY(1.2); + //TGeoCombiTrans *origin_rotation = new TGeoCombiTrans(0,orig_rotation); + //orig_rotation->RegisterYourself(); + + + //TGeoHMatrix orig_combi = orig_translation * orig_rotation; + TGeoHMatrix orig_combi = orig_rotation * orig_translation; + + TGeoHMatrix* origin_combi = new TGeoHMatrix(orig_combi); + + + TGeoRotation* rot_left = new TGeoRotation("rot_left"); + rot_left->SetAngles(90, 0, 0); + TGeoCombiTrans* combi_left = new TGeoCombiTrans(-15.2, 0, 0, rot_left); + + TGeoRotation* rot_right = new TGeoRotation("rot_right"); + rot_right->SetAngles(270, 0, 0); + TGeoCombiTrans* combi_right = new TGeoCombiTrans(15.2, 0, 0, rot_right); + + TGeoCombiTrans* tr_top_0a = new TGeoCombiTrans(0, 15.2, top_plate_cord[2], rot_top); + TGeoCombiTrans* tr_top_1a = new TGeoCombiTrans(0, 15.2, 2 * top_plate_cord[2] + top_plate_cord[5], rot_top); + TGeoCombiTrans* tr_top_2a = new TGeoCombiTrans( + 0, 15.2, 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8], rot_top); + TGeoCombiTrans* tr_top_3a = new TGeoCombiTrans(0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + + top_plate_cord[8] + top_plate_cord[8] + top_plate_cord[11], + rot_top); + TGeoCombiTrans* tr_top_4a = + new TGeoCombiTrans(0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + + top_plate_cord[8] + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14], + rot_top); + TGeoCombiTrans* tr_top_5a = new TGeoCombiTrans( + 0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + top_plate_cord[8] + + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14] + top_plate_cord[14] + top_plate_cord[17], + rot_top); + + TGeoCombiTrans* tr_bott_0a = new TGeoCombiTrans(0, -15.2, top_plate_cord[2], rot_bott); + TGeoCombiTrans* tr_bott_1a = new TGeoCombiTrans(0, -15.2, 2 * top_plate_cord[2] + top_plate_cord[5], rot_bott); + TGeoCombiTrans* tr_bott_2a = new TGeoCombiTrans( + 0, -15.2, 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8], rot_bott); + TGeoCombiTrans* tr_bott_3a = new TGeoCombiTrans(0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + + top_plate_cord[8] + top_plate_cord[8] + top_plate_cord[11], + rot_bott); + TGeoCombiTrans* tr_bott_4a = + new TGeoCombiTrans(0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + + top_plate_cord[8] + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14], + rot_bott); + TGeoCombiTrans* tr_bott_5a = new TGeoCombiTrans( + 0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + top_plate_cord[8] + + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14] + top_plate_cord[14] + top_plate_cord[17], + rot_bott); + + TGeoCombiTrans* tr_side_left_0a = new TGeoCombiTrans(-15.2, 0, side_plate_cord[2], rot_left); + TGeoCombiTrans* tr_side_left_1a = new TGeoCombiTrans(-15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5], rot_left); + TGeoCombiTrans* tr_side_left_2a = new TGeoCombiTrans( + -15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8], rot_left); + TGeoCombiTrans* tr_side_left_3a = + new TGeoCombiTrans(-15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14], + rot_left); + TGeoCombiTrans* tr_side_left_4a = + new TGeoCombiTrans(-15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20], + rot_left); + TGeoCombiTrans* tr_side_left_5a = new TGeoCombiTrans( + -15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + side_plate_cord[8] + + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20] + side_plate_cord[20] + side_plate_cord[26], + rot_left); + + TGeoCombiTrans* tr_side_right_0a = new TGeoCombiTrans(15.2, 0, side_plate_cord[2], rot_right); + TGeoCombiTrans* tr_side_right_1a = + new TGeoCombiTrans(15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5], rot_right); + TGeoCombiTrans* tr_side_right_2a = new TGeoCombiTrans( + 15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8], rot_right); + TGeoCombiTrans* tr_side_right_3a = + new TGeoCombiTrans(15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14], + rot_right); + TGeoCombiTrans* tr_side_right_4a = + new TGeoCombiTrans(15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20], + rot_right); + TGeoCombiTrans* tr_side_right_5a = new TGeoCombiTrans( + 15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + side_plate_cord[8] + + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20] + side_plate_cord[20] + side_plate_cord[26], + rot_right); + + TGeoRotation* rot_sts_conus_connection = new TGeoRotation("rot_sts_conus_connection"); + rot_sts_conus_connection->RotateZ(180); + TGeoCombiTrans* ctr_sts_conus_connection = new TGeoCombiTrans(0, 0, -3185 * mm, rot_sts_conus_connection); + + TGeoRotation* rotation_of_sts_tube = new TGeoRotation("rotation_of_sts_tube"); + rotation_of_sts_tube->RotateZ(180); + rotation_of_sts_tube->RotateY(-1.2); + TGeoCombiTrans* ctr_sts_tube = new TGeoCombiTrans(0.15707676 * mm, 0, -3214.99917754 * mm, rotation_of_sts_tube); + + TGeoRotation* rot_global = new TGeoRotation("rot_global"); + rot_global->RotateY(1.2); + TGeoCombiTrans* ctr_global = new TGeoCombiTrans(0, 0, 3214.99917754 * mm, rot_global); + + TGeoRotation* rot_s1 = new TGeoRotation("rot_s1"); + rot_s1->RotateZ(180.); + rot_s1->RotateY(4.80111677); + TGeoCombiTrans* ctr_s1 = new TGeoCombiTrans("ctr_s1", 2.50041582 * mm, 0, 59.76969908 * mm, rot_s1); + + TGeoRotation* rot_s2 = new TGeoRotation("rot_s2"); + rot_s2->RotateZ(180.); + rot_s2->RotateY(18.84127012); + TGeoCombiTrans* ctr_s2 = new TGeoCombiTrans("ctr_s2", (36.22434468) * mm, 0, (181.04176807) * mm, rot_s2); + + TGeoRotation* rot_s3 = new TGeoRotation("rot_s3"); + //rot_s3->RotateZ(180.); + rot_s3->RotateY(8.5257557); + + TGeoCombiTrans* ctr_s3 = new TGeoCombiTrans("ctr_s3", (70.72502201) * mm, 0, (294.40492979) * mm, rot_s3); + + TGeoRotation* rot_s4 = new TGeoRotation("rot_s4"); + //rot_s4->RotateZ(180.); + rot_s4->RotateY(5.7511677); + + TGeoCombiTrans* ctr_s4 = new TGeoCombiTrans("ctr_s4", (76.53811002) * mm, 0, 341.44507901 * mm, rot_s4); + + + TGeoRotation* rot_plate = new TGeoRotation("rot_plate"); + rot_plate->RotateY(-0.95); + TGeoCombiTrans* ctr_plate_up = + new TGeoCombiTrans("ctr_plate_up", 80. * mm, (147 + 12.5) * mm, (292.8 + 90) * mm, rot_plate); + TGeoCombiTrans* ctr_plate_down = + new TGeoCombiTrans("ctr_plate_down", 80. * mm, -(147 + 12.5) * mm, (292.8 + 90) * mm, rot_plate); + TGeoTranslation* tr_plate_up = new TGeoTranslation("tr_plate_up", 0. * mm, (147 + 12.5) * mm, 0. * mm); + tr_plate_up->RegisterYourself(); + TGeoTranslation* tr_plate_down = new TGeoTranslation("tr_plate_down", 0. * mm, -(147 + 12.5) * mm, 0. * mm); + tr_plate_down->RegisterYourself(); + + TGeoRotation* rot_lsn = new TGeoRotation("rot_lsn"); + //rot_s5->RotateZ(180.); + rot_lsn->RotateY(-90); + TGeoCombiTrans* ctr_lsn = new TGeoCombiTrans("ctr_s5", -22.5 * mm, -159.5 * mm, 534. * mm, rot_lsn); + + TGeoTranslation* mot_transl = new TGeoTranslation("mot_transl", -286.5 * mm, -159.5 * mm, 534. * mm); + + TGeoRotation* rot_psd_tube = new TGeoRotation("rot_psd_tube"); + rot_psd_tube->RotateY(2.15); + TGeoCombiTrans* ctr_psd_tube = + new TGeoCombiTrans("ctr_psd_tube", 426.44387679 * mm, 0. * mm, 10849.15 * mm, rot_psd_tube); + + TGeoRotation* rot_s5 = new TGeoRotation("rot_s5"); + //rot_s5->RotateZ(180.); + rot_s5->RotateY(0.95); + TGeoCombiTrans* ctr_s5 = new TGeoCombiTrans("ctr_s5", (79.32273177) * mm, 0, 381.62237458 * mm, rot_s5); + + TGeoTranslation* nut_transl = new TGeoTranslation("nut_transl", 0. * mm, 0. * mm, -100. * mm); + nut_transl->RegisterYourself(); + + //------------------------------------DEFINITIONS OF VOLUMES---------------------------------------- + //--- make the top container volume + Double_t worldx = 320 * mm; + Double_t worldy = 220 * mm; + Double_t worldz = 18100 * mm; + TGeoVolume* full_assembly = geom->MakeBox("pipe_v21e", Vacuum, worldx, worldy, worldz); + geom->SetTopVolume(full_assembly); + full_assembly->SetVisibility(kTRUE); + TGeoVolume* conical_beam_pipe = geom->MakeBox("conical_beam_pipe", Vacuum, 220 * mm, 220 * mm, 3650 * mm); + conical_beam_pipe->SetVisibility(kFALSE); + TGeoVolume* bellow_ass = geom->MakeBox("Bellow assembly", Vacuum, 320 * mm, 220 * mm, 240 * mm); + bellow_ass->SetVisibility(kFALSE); + + // TOP PLATE-------------------------------------------------------------------------------------- + TGeoVolume* sub_t_plate1 = geom->MakeArb8("sub_t_plate1", CF, top_plate_cord[2]); + sub_t_plate1->SetLineColor(kGray); + TGeoArb8* t_arb1 = (TGeoArb8*) sub_t_plate1->GetShape(); + t_arb1->SetVertex(0, top_plate_cord[0], top_plate_cord[1]); + t_arb1->SetVertex(1, -top_plate_cord[0], top_plate_cord[1]); + t_arb1->SetVertex(2, -top_plate_cord[0], top_plate_cord[1] + 1.0); + t_arb1->SetVertex(3, top_plate_cord[0], top_plate_cord[1] + 1.0); + t_arb1->SetVertex(4, top_plate_cord[3], top_plate_cord[4]); + t_arb1->SetVertex(5, -top_plate_cord[3], top_plate_cord[4]); + t_arb1->SetVertex(6, -top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb1->SetVertex(7, top_plate_cord[3], top_plate_cord[4] + 1.0); + + TGeoVolume* sub_t_plate2 = geom->MakeArb8("sub_t_plate2", CF, top_plate_cord[5]); + sub_t_plate2->SetLineColor(kGray); + TGeoArb8* t_arb2 = (TGeoArb8*) sub_t_plate2->GetShape(); + t_arb2->SetVertex(0, top_plate_cord[3], top_plate_cord[4]); + t_arb2->SetVertex(1, -top_plate_cord[3], top_plate_cord[4]); + t_arb2->SetVertex(2, -top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb2->SetVertex(3, top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb2->SetVertex(4, top_plate_cord[6], top_plate_cord[7]); + t_arb2->SetVertex(5, -top_plate_cord[6], top_plate_cord[7]); + t_arb2->SetVertex(6, -top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb2->SetVertex(7, top_plate_cord[6], top_plate_cord[7] + 1.0); + + TGeoVolume* sub_t_plate3 = geom->MakeArb8("sub_t_plate3", CF, top_plate_cord[8]); + sub_t_plate3->SetLineColor(kGray); + TGeoArb8* t_arb3 = (TGeoArb8*) sub_t_plate3->GetShape(); + t_arb3->SetVertex(0, top_plate_cord[6], top_plate_cord[7]); + t_arb3->SetVertex(1, -top_plate_cord[6], top_plate_cord[7]); + t_arb3->SetVertex(2, -top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb3->SetVertex(3, top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb3->SetVertex(4, top_plate_cord[9], top_plate_cord[10]); + t_arb3->SetVertex(5, -top_plate_cord[9], top_plate_cord[10]); + t_arb3->SetVertex(6, -top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb3->SetVertex(7, top_plate_cord[9], top_plate_cord[10] + 1.0); + + TGeoVolume* sub_t_plate4 = geom->MakeArb8("sub_t_plate4", CF, top_plate_cord[11]); + sub_t_plate4->SetLineColor(kGray); + TGeoArb8* t_arb4 = (TGeoArb8*) sub_t_plate4->GetShape(); + t_arb4->SetVertex(0, top_plate_cord[9], top_plate_cord[10]); + t_arb4->SetVertex(1, -top_plate_cord[9], top_plate_cord[10]); + t_arb4->SetVertex(2, -top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb4->SetVertex(3, top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb4->SetVertex(4, top_plate_cord[12], top_plate_cord[13]); + t_arb4->SetVertex(5, -top_plate_cord[12], top_plate_cord[13]); + t_arb4->SetVertex(6, -top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb4->SetVertex(7, top_plate_cord[12], top_plate_cord[13] + 1.0); + + TGeoVolume* sub_t_plate5 = geom->MakeArb8("sub_t_plate5", CF, top_plate_cord[14]); + sub_t_plate5->SetLineColor(kGray); + TGeoArb8* t_arb5 = (TGeoArb8*) sub_t_plate5->GetShape(); + t_arb5->SetVertex(0, top_plate_cord[12], top_plate_cord[13]); + t_arb5->SetVertex(1, -top_plate_cord[12], top_plate_cord[13]); + t_arb5->SetVertex(2, -top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb5->SetVertex(3, top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb5->SetVertex(4, top_plate_cord[15], top_plate_cord[17]); + t_arb5->SetVertex(5, -top_plate_cord[15], top_plate_cord[17]); + t_arb5->SetVertex(6, -top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb5->SetVertex(7, top_plate_cord[15], top_plate_cord[17] + 1.0); + + TGeoVolume* sub_t_plate6 = geom->MakeArb8("sub_t_plate6", CF, top_plate_cord[17]); + sub_t_plate6->SetLineColor(kGray); + TGeoArb8* t_arb6 = (TGeoArb8*) sub_t_plate6->GetShape(); + t_arb6->SetVertex(0, top_plate_cord[15], top_plate_cord[17]); + t_arb6->SetVertex(1, -top_plate_cord[15], top_plate_cord[17]); + t_arb6->SetVertex(2, -top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(3, top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(4, top_plate_cord[18], top_plate_cord[17]); + t_arb6->SetVertex(5, -top_plate_cord[18], top_plate_cord[17]); + t_arb6->SetVertex(6, -top_plate_cord[18], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(7, top_plate_cord[18], top_plate_cord[17] + 1.0); + + // SIDE PLATE-------------------------------------------------------------------------------------- + + TGeoVolume* sub_s_plate1 = geom->MakeArb8("sub_s_plate1", CF, side_plate_cord[2]); + sub_s_plate1->SetLineColor(kGray); + TGeoArb8* s_arb1 = (TGeoArb8*) sub_s_plate1->GetShape(); + s_arb1->SetVertex(0, side_plate_cord[0], side_plate_cord[1]); + s_arb1->SetVertex(1, -side_plate_cord[0], side_plate_cord[1]); + s_arb1->SetVertex(2, -side_plate_cord[0], side_plate_cord[1] + 1.0); + s_arb1->SetVertex(3, side_plate_cord[0], side_plate_cord[1] + 1.0); + s_arb1->SetVertex(4, side_plate_cord[3], side_plate_cord[4]); + s_arb1->SetVertex(5, -side_plate_cord[3], side_plate_cord[4]); + s_arb1->SetVertex(6, -side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb1->SetVertex(7, side_plate_cord[3], side_plate_cord[4] + 1.0); + + TGeoVolume* sub_s_plate2 = geom->MakeArb8("sub_s_plate2", CF, side_plate_cord[5]); + sub_s_plate2->SetLineColor(kGray); + TGeoArb8* s_arb2 = (TGeoArb8*) sub_s_plate2->GetShape(); + s_arb2->SetVertex(0, side_plate_cord[3], side_plate_cord[4]); + s_arb2->SetVertex(1, -side_plate_cord[3], side_plate_cord[4]); + s_arb2->SetVertex(2, -side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb2->SetVertex(3, side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb2->SetVertex(4, side_plate_cord[6], side_plate_cord[7]); + s_arb2->SetVertex(5, -side_plate_cord[6], side_plate_cord[7]); + s_arb2->SetVertex(6, -side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb2->SetVertex(7, side_plate_cord[6], side_plate_cord[7] + 1.0); + + TGeoVolume* sub_s_plate3 = geom->MakeArb8("sub_s_plate3", CF, side_plate_cord[8]); + sub_s_plate3->SetLineColor(kGray); + TGeoArb8* s_arb3 = (TGeoArb8*) sub_s_plate3->GetShape(); + s_arb3->SetVertex(0, side_plate_cord[6], side_plate_cord[7]); + s_arb3->SetVertex(1, side_plate_cord[9], side_plate_cord[10]); + s_arb3->SetVertex(2, side_plate_cord[9], side_plate_cord[10] + 1.0); + s_arb3->SetVertex(3, side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb3->SetVertex(4, side_plate_cord[12], side_plate_cord[13]); + s_arb3->SetVertex(5, side_plate_cord[15], side_plate_cord[16]); + s_arb3->SetVertex(6, side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb3->SetVertex(7, side_plate_cord[12], side_plate_cord[13] + 1.0); + + TGeoVolume* sub_s_plate4 = geom->MakeArb8("sub_s_plate4", CF, side_plate_cord[8]); + sub_s_plate4->SetLineColor(kGray); + TGeoArb8* s_arb4 = (TGeoArb8*) sub_s_plate4->GetShape(); + s_arb4->SetVertex(0, -side_plate_cord[6], side_plate_cord[7]); + s_arb4->SetVertex(1, -side_plate_cord[9], side_plate_cord[10]); + s_arb4->SetVertex(2, -side_plate_cord[9], side_plate_cord[10] + 1.0); + s_arb4->SetVertex(3, -side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb4->SetVertex(4, -side_plate_cord[12], side_plate_cord[13]); + s_arb4->SetVertex(5, -side_plate_cord[15], side_plate_cord[16]); + s_arb4->SetVertex(6, -side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb4->SetVertex(7, -side_plate_cord[12], side_plate_cord[13] + 1.0); + + TGeoVolume* sub_s_plate5 = geom->MakeArb8("sub_s_plate5", CF, side_plate_cord[14]); + sub_s_plate5->SetLineColor(kGray); + TGeoArb8* s_arb5 = (TGeoArb8*) sub_s_plate5->GetShape(); + s_arb5->SetVertex(0, side_plate_cord[12], side_plate_cord[13]); + s_arb5->SetVertex(1, side_plate_cord[15], side_plate_cord[16]); + s_arb5->SetVertex(2, side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb5->SetVertex(3, side_plate_cord[12], side_plate_cord[13] + 1.0); + s_arb5->SetVertex(4, side_plate_cord[18], side_plate_cord[19]); + s_arb5->SetVertex(5, side_plate_cord[21], side_plate_cord[22]); + s_arb5->SetVertex(6, side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb5->SetVertex(7, side_plate_cord[18], side_plate_cord[19] + 1.0); + + TGeoVolume* sub_s_plate6 = geom->MakeArb8("sub_s_plate6", CF, side_plate_cord[14]); + sub_s_plate6->SetLineColor(kGray); + TGeoArb8* s_arb6 = (TGeoArb8*) sub_s_plate6->GetShape(); + s_arb6->SetVertex(0, -side_plate_cord[12], side_plate_cord[13]); + s_arb6->SetVertex(1, -side_plate_cord[15], side_plate_cord[16]); + s_arb6->SetVertex(2, -side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb6->SetVertex(3, -side_plate_cord[12], side_plate_cord[13] + 1.0); + s_arb6->SetVertex(4, -side_plate_cord[18], side_plate_cord[19]); + s_arb6->SetVertex(5, -side_plate_cord[21], side_plate_cord[22]); + s_arb6->SetVertex(6, -side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb6->SetVertex(7, -side_plate_cord[18], side_plate_cord[19] + 1.0); + + TGeoVolume* sub_s_plate7 = geom->MakeArb8("sub_s_plate7", CF, side_plate_cord[20]); + sub_s_plate7->SetLineColor(kGray); + TGeoArb8* s_arb7 = (TGeoArb8*) sub_s_plate7->GetShape(); + s_arb7->SetVertex(0, side_plate_cord[18], side_plate_cord[19]); + s_arb7->SetVertex(1, side_plate_cord[21], side_plate_cord[22]); + s_arb7->SetVertex(2, side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb7->SetVertex(3, side_plate_cord[18], side_plate_cord[19] + 1.0); + s_arb7->SetVertex(4, side_plate_cord[24], side_plate_cord[25]); + s_arb7->SetVertex(5, side_plate_cord[27], side_plate_cord[28]); + s_arb7->SetVertex(6, side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb7->SetVertex(7, side_plate_cord[24], side_plate_cord[25] + 1.0); + + TGeoVolume* sub_s_plate8 = geom->MakeArb8("sub_s_plate8", CF, side_plate_cord[20]); + sub_s_plate8->SetLineColor(kGray); + TGeoArb8* s_arb8 = (TGeoArb8*) sub_s_plate8->GetShape(); + s_arb8->SetVertex(0, -side_plate_cord[18], side_plate_cord[19]); + s_arb8->SetVertex(1, -side_plate_cord[21], side_plate_cord[22]); + s_arb8->SetVertex(2, -side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb8->SetVertex(3, -side_plate_cord[18], side_plate_cord[19] + 1.0); + s_arb8->SetVertex(4, -side_plate_cord[24], side_plate_cord[25]); + s_arb8->SetVertex(5, -side_plate_cord[27], side_plate_cord[28]); + s_arb8->SetVertex(6, -side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb8->SetVertex(7, -side_plate_cord[24], side_plate_cord[25] + 1.0); + + TGeoVolume* sub_s_plate9 = geom->MakeArb8("sub_s_plate9", CF, side_plate_cord[26]); + sub_s_plate9->SetLineColor(kGray); + TGeoArb8* s_arb9 = (TGeoArb8*) sub_s_plate9->GetShape(); + s_arb9->SetVertex(0, side_plate_cord[24], side_plate_cord[25]); + s_arb9->SetVertex(1, side_plate_cord[27], side_plate_cord[28]); + s_arb9->SetVertex(2, side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb9->SetVertex(3, side_plate_cord[24], side_plate_cord[25] + 1.0); + s_arb9->SetVertex(4, side_plate_cord[30], side_plate_cord[31]); + s_arb9->SetVertex(5, side_plate_cord[33], side_plate_cord[34]); + s_arb9->SetVertex(6, side_plate_cord[33], side_plate_cord[34] + 1.0); + s_arb9->SetVertex(7, side_plate_cord[30], side_plate_cord[31] + 1.0); + + TGeoVolume* sub_s_plate10 = geom->MakeArb8("sub_s_plate10", CF, side_plate_cord[26]); + sub_s_plate10->SetLineColor(kGray); + TGeoArb8* s_arb10 = (TGeoArb8*) sub_s_plate10->GetShape(); + s_arb10->SetVertex(0, -side_plate_cord[24], side_plate_cord[25]); + s_arb10->SetVertex(1, -side_plate_cord[27], side_plate_cord[28]); + s_arb10->SetVertex(2, -side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb10->SetVertex(3, -side_plate_cord[24], side_plate_cord[25] + 1.0); + s_arb10->SetVertex(4, -side_plate_cord[30], side_plate_cord[31]); + s_arb10->SetVertex(5, -side_plate_cord[33], side_plate_cord[34]); + s_arb10->SetVertex(6, -side_plate_cord[33], side_plate_cord[34] + 1.0); + s_arb10->SetVertex(7, -side_plate_cord[30], side_plate_cord[31] + 1.0); + + // RAIL------------------------------------------------------------------------------------ + TGeoVolume* sub_rail = geom->MakeArb8("sub_rail", Al, rail_cord[2]); + sub_rail->SetLineColor(kBlue); + TGeoArb8* r_arb1 = (TGeoArb8*) sub_rail->GetShape(); + r_arb1->SetVertex(0, rail_cord[0], rail_cord[1]); + r_arb1->SetVertex(1, -rail_cord[0], rail_cord[1]); + r_arb1->SetVertex(2, -rail_cord[0], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(3, rail_cord[0], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(4, rail_cord[3], rail_cord[1]); + r_arb1->SetVertex(5, -rail_cord[3], rail_cord[1]); + r_arb1->SetVertex(6, -rail_cord[3], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(7, rail_cord[3], rail_cord[1] + rail_cord[4]); + + TGeoBBox* flange_box = new TGeoBBox("flange_box", 15.2, 15.2, 1.5); + TGeoTube* flange_hole = new TGeoTube("flange_hole", 0., 12.5, 2.5); + + // DOWNSTREAM_CARBON-FIBRE_RICH_MUCH_FLANGE_TO_BELLOW_ASS------------------------------------------------------------------------------------ + TGeoBBox* rich_much_flange_box = new TGeoBBox("rich_much_flange_box", 15.2, 15.2, 1.5); + TGeoTube* rich_much_flange_hole = new TGeoTube("rich_much_flange_hole", 0., 12.5, 2.5); + TGeoCompositeShape* rich_much_flange_composite = + new TGeoCompositeShape("flange_composite_rich", "rich_much_flange_box-rich_much_flange_hole"); + TGeoVolume* rich_much_downstream_flange = + new TGeoVolume("rich_much_downstream_flange", rich_much_flange_composite, CF); + rich_much_downstream_flange->SetLineColor(kGray); + + // CONICAL_BEAM_PIPE WITH CARBONE-FIBRE FLANGE AND TILTED END PIECE OF TUBE TO STS SECTION------------------------------------------------------------------------------------ + TGeoCone* conus = new TGeoCone("conical_beam_pipe", conus_lenght, rmin1, rmax1, rmin2, rmax2); + TGeoVolume* conical_beam_pipe_volume = new TGeoVolume("conical_beam_pipe_volume", conus, CF); + conical_beam_pipe_volume->SetLineColor(kGray); + + TGeoCtub* rich_much_upstream_tube_connection = + new TGeoCtub("rich_much_upstream_tube_connection", 55. * mm, 56. * mm, 15. * mm, 360., 360., 0.05235892, 0., + 4.99972585, 0., 0., 1.); + TGeoVolume* rich_much_upstream_tube_connection_volume = + new TGeoVolume("rich_much_upstream_tube_connection_volume", rich_much_upstream_tube_connection, CF); + rich_much_upstream_tube_connection_volume->SetLineColor(kGray); + + TGeoCtub* rich_much_upstream_tube_connection_to_sts = + new TGeoCtub("rich_much_upstream_tube_connection_to_sts", 55. * mm, 56. * mm, 15. * mm, 360., 360., 0., 0., 1., + -0.05235892, 0., 4.99972585); + TGeoVolume* rich_much_upstream_tube_connection_to_sts_volume = + new TGeoVolume("rich_much_upstream_tube_connection_to_sts_volume", rich_much_upstream_tube_connection_to_sts, CF); + rich_much_upstream_tube_connection_to_sts_volume->SetLineColor(kGray); + + //-------------------------------BELLOW DEFINITION---------------------------------------------------------------- + TGeoCompositeShape* flange_composite = new TGeoCompositeShape("flange_composite", "flange_box-flange_hole"); + TGeoVolume* bellow_flange_0 = new TGeoVolume("bellow_flange_0", flange_composite, Stainless); + bellow_flange_0->SetLineColor(kRed); + + TGeoCtub* bellow_s1 = new TGeoCtub("bellow_s1", 124. * mm, 142. * mm, 29.87452196 * mm, 0., 360., -0.083697266, 0., + -0.996491228, -0.122217128, 0., 0.992503387); + TGeoVolume* bellow_1 = new TGeoVolume("bellow_s1", bellow_s1, Stainless); + bellow_1->SetLineColor(kRed); + + TGeoCtub* bellow_s2 = new TGeoCtub("bellow_s1", 124. * mm, 142. * mm, 96.682942995 * mm, 0., 360., -0.122217128, 0., + -0.992503387, 0.089898314, 0, 0.995950949); + TGeoVolume* bellow_2 = new TGeoVolume("bellow_s2", bellow_s2, Stainless); + bellow_2->SetLineColor(kRed); + + TGeoCtub* bellow_s3 = new TGeoCtub("bellow_s3", 124. * mm, 142. * mm, 22.10506784 * mm, 0., 360., -0.089898314, 0., + -0.995950949, -0.024210927, 0., 0.999706873); + TGeoVolume* bellow_3 = new TGeoVolume("bellow_s3", bellow_s3, Stainless); + bellow_3->SetLineColor(kRed); + + TGeoCtub* bellow_s4 = new TGeoCtub("bellow_s4", 124. * mm, 142. * mm, 25.30673722 * mm, 0., 360., -0.024210927, 0., + -0.999706873, -0.083697266, 0., 0.996491228); + TGeoVolume* bellow_4 = new TGeoVolume("bellow_s3", bellow_s4, Stainless); + bellow_4->SetLineColor(kRed); + + + TGeoBBox* roll_plate_s = new TGeoBBox("roll_plate_s", 75. * mm, 12.5 * mm, 90. * mm); + TGeoVolume* roll_plate = new TGeoVolume("roll_plate", roll_plate_s, Al); + roll_plate->SetLineColor(kBlue); + + TGeoTube* flange_cyl = new TGeoTube("flange_cyl", 0., 15., 1.5); + TGeoTube* flange_cyl_hole = new TGeoTube("flange_cyl_hole", 0., 8.9, 2.5); + TGeoCompositeShape* flange_cyl_composite = new TGeoCompositeShape( + "flange_cyl_composite", "((flange_cyl-flange_cyl_hole)-roll_plate_s:tr_plate_up)-roll_plate_s:tr_plate_down"); + TGeoVolume* bellow_flange_1 = new TGeoVolume("bellow_flange_1", flange_cyl_composite, Stainless); + bellow_flange_1->SetLineColor(kRed); + + + TGeoTube* lead_screw_s = new TGeoTube("lead_screw_s", 0. * mm, 6. * mm, 205. * mm); + TGeoTube* nut_small_s = new TGeoTube("nut_small_s", 6. * mm, 14. * mm, 50. * mm); + TGeoTube* nut_big_s = new TGeoTube("nut_big_s", 14. * mm, 24. * mm, 27. * mm); + + TGeoCompositeShape* lead_screw_nut_s = + new TGeoCompositeShape("lead_screw_nut_s", "lead_screw_s+nut_small_s:nut_transl+nut_big_s:nut_transl"); + TGeoVolume* lead_screw_nut = new TGeoVolume("lead_screw_nut", lead_screw_nut_s, Stainless); + lead_screw_nut->SetLineColor(kRed); + + + TGeoBBox* motor_s = new TGeoBBox("motor_s", 57.5 * mm, 30. * mm, 30. * mm); + TGeoVolume* motor = new TGeoVolume("motor", motor_s, Stainless); + motor->SetLineColor(kRed); + + + TGeoTube* psd_tube_s = new TGeoTube("psd_tube_s", 90. * mm, 92. * mm, 7230. * mm); + TGeoVolume* psd_tube = new TGeoVolume("psd_tube", psd_tube_s, CF); + psd_tube->SetLineColor(kGray); + + //------------------TOP plate------------------------------ + bellow_ass->AddNode(sub_t_plate1, 1, tr_top_0a); + bellow_ass->AddNode(sub_t_plate2, 1, tr_top_1a); + bellow_ass->AddNode(sub_t_plate3, 1, tr_top_2a); + bellow_ass->AddNode(sub_t_plate4, 1, tr_top_3a); + bellow_ass->AddNode(sub_t_plate5, 1, tr_top_4a); + bellow_ass->AddNode(sub_t_plate6, 1, tr_top_5a); + + //-----------------BOTTOM plate---------------------------- + bellow_ass->AddNode(sub_t_plate1, 2, tr_bott_0a); + bellow_ass->AddNode(sub_t_plate2, 2, tr_bott_1a); + bellow_ass->AddNode(sub_t_plate3, 2, tr_bott_2a); + bellow_ass->AddNode(sub_t_plate4, 2, tr_bott_3a); + bellow_ass->AddNode(sub_t_plate5, 2, tr_bott_4a); + bellow_ass->AddNode(sub_t_plate6, 2, tr_bott_5a); + + //-----------------LEFT plate------------------------------ + bellow_ass->AddNode(sub_s_plate1, 1, tr_side_left_0a); + bellow_ass->AddNode(sub_s_plate2, 1, tr_side_left_1a); + bellow_ass->AddNode(sub_s_plate3, 1, tr_side_left_2a); + bellow_ass->AddNode(sub_s_plate4, 1, tr_side_left_2a); + bellow_ass->AddNode(sub_s_plate5, 1, tr_side_left_3a); + bellow_ass->AddNode(sub_s_plate6, 1, tr_side_left_3a); + bellow_ass->AddNode(sub_s_plate7, 1, tr_side_left_4a); + bellow_ass->AddNode(sub_s_plate8, 1, tr_side_left_4a); + bellow_ass->AddNode(sub_s_plate9, 1, tr_side_left_5a); + bellow_ass->AddNode(sub_s_plate10, 1, tr_side_left_5a); + + //---------------RIGHT plate-------------------------------- + bellow_ass->AddNode(sub_s_plate1, 2, tr_side_right_0a); + bellow_ass->AddNode(sub_s_plate2, 2, tr_side_right_1a); + bellow_ass->AddNode(sub_s_plate3, 2, tr_side_right_2a); + bellow_ass->AddNode(sub_s_plate4, 2, tr_side_right_2a); + bellow_ass->AddNode(sub_s_plate5, 2, tr_side_right_3a); + bellow_ass->AddNode(sub_s_plate6, 2, tr_side_right_3a); + bellow_ass->AddNode(sub_s_plate7, 2, tr_side_right_4a); + bellow_ass->AddNode(sub_s_plate8, 2, tr_side_right_4a); + bellow_ass->AddNode(sub_s_plate9, 2, tr_side_right_5a); + bellow_ass->AddNode(sub_s_plate10, 2, tr_side_right_5a); + + //------------------RAIL------------------------------------- + bellow_ass->AddNode(sub_rail, 1, combi_rail_top); + bellow_ass->AddNode(sub_rail, 2, combi_rail_bott); + + //----------------Bellow with flanges----------------------------- + bellow_ass->AddNode(bellow_flange_0, 1, new TGeoTranslation(0, 0, 1.5)); + bellow_ass->AddNode(bellow_1, 1, ctr_s1); + bellow_ass->AddNode(bellow_2, 1, ctr_s2); + bellow_ass->AddNode(bellow_3, 1, ctr_s3); + bellow_ass->AddNode(bellow_4, 1, ctr_s4); + bellow_ass->AddNode(bellow_flange_1, 1, ctr_s5); + + //------------------DRIVE assembly-------------------------------------- + bellow_ass->AddNode(roll_plate, 1, ctr_plate_up); + bellow_ass->AddNode(roll_plate, 2, ctr_plate_down); + bellow_ass->AddNode(lead_screw_nut, 1, ctr_lsn); + bellow_ass->AddNode(motor, 1, mot_transl); + + //-------------------CONICAL section-------------------------------------------------- + conical_beam_pipe->AddNode(rich_much_downstream_flange, 1, new TGeoTranslation(0, 0, -15 * mm)); + conical_beam_pipe->AddNode(conical_beam_pipe_volume, 1, new TGeoTranslation(0, 0, -1585 * mm)); + conical_beam_pipe->AddNode(rich_much_upstream_tube_connection_volume, 1, ctr_sts_conus_connection); + conical_beam_pipe->AddNode(rich_much_upstream_tube_connection_to_sts_volume, 1, ctr_sts_tube); + + + //------------------INSERT into top volume + full_assembly->AddNode(conical_beam_pipe, 1, origin_combi); + full_assembly->AddNode(bellow_ass, 1, origin_combi); + full_assembly->AddNode(psd_tube, 1, ctr_psd_tube); + + //beampipe->AddNode(full_assembly,1, new TGeoTranslation(0, 0, 0*mm)); + // --- close the geometry + geom->CloseGeometry(); + + //--- draw the ROOT box + geom->SetVisLevel(4); + full_assembly->Draw(); + if (gPad && !gROOT->IsBatch()) gPad->GetViewer3D(); + + // --------------- Finish ----------------------------------------------- + TString geo_bin_filename = "pipe_"; + TString geo_name = geo_bin_filename + geoTag; + geo_bin_filename = geo_bin_filename + geoTag + ".geo.root"; + TFile* binfile; + binfile = new TFile(geo_bin_filename, "RECREATE"); + geom->GetTopVolume()->Write(geo_name); // outputting on the top volume + TGeoTranslation* trans = new TGeoTranslation(0.0, 0.0, 82.0); + trans->Write("trans"); + cout << endl; + cout << "Geometry " << geom->GetTopVolume()->GetName() << " written to " << geo_bin_filename << std::endl; + binfile->Close(); + //--- close the geometry + geom->CloseGeometry(); +} diff --git a/macro/passive/create_bpipe_geometry_v21f.C b/macro/passive/create_bpipe_geometry_v21f.C new file mode 100644 index 0000000000000000000000000000000000000000..7f289444776c58741a74ec8659eb0e076fbf3301 --- /dev/null +++ b/macro/passive/create_bpipe_geometry_v21f.C @@ -0,0 +1,673 @@ +/* Copyright (C) 2021 Nuclear Physics Institute of the CAS, Rez + SPDX-License-Identifier: GPL-3.0-only + Authors: Petr Chudoba [committer] */ + +#include "TGeoArb8.h" +#include "TGeoCompositeShape.h" +#include "TGeoCone.h" +#include "TGeoManager.h" +#include "TGeoMatrix.h" +#include "TGeoSystemOfUnits.h" +#include "TGeoTube.h" +#include "TPad.h" +#include "TROOT.h" +#include "TSystem.h" + +#include "iostream" +#include "stdio.h" +using namespace std; +using namespace TGeoUnit; + + +void create_bpipe_geometry_v21f(const char* geoTag = "v21f") +{ + //--- Definition of a simple geometry + gSystem->Load("libGeom"); + TGeoManager* geom = new TGeoManager("beampipe_v21f", "Beampipe for no magnetic field"); + + // fair root mediafile google it + + //--- define some materials + TGeoMixture* matCarbonFiber = new TGeoMixture("BP_carbonfiber", 4, 1.5); + matCarbonFiber->AddElement(12.001, 6.0, 0.8926); + matCarbonFiber->AddElement(1.0079, 1.0, 0.0192); + matCarbonFiber->AddElement(35.453, 17.0, 0.0271); + matCarbonFiber->AddElement(15.999, 8.0, 0.0611); + + TGeoMixture* matStainless = new TGeoMixture("BP_stainless", 10, 8.0); + matStainless->AddElement(12.0, 6.0, 0.00035); + matStainless->AddElement(51.94, 24.0, 0.175); + matStainless->AddElement(54.94, 25.0, 0.01); + matStainless->AddElement(95.94, 42.0, 0.025); + matStainless->AddElement(14.0, 7.0, 0.0005); + matStainless->AddElement(58.6934, 28.0, 0.115); + matStainless->AddElement(30.97, 15.0, 0.000225); + matStainless->AddElement(31.97, 16.0, 0.000075); + matStainless->AddElement(27.98, 14.0, 0.005); + matStainless->AddElement(55.93, 26.0, 0.67135); + + TGeoMaterial* matVacuum = new TGeoMaterial("BP_vacuum", 1.e-16, 1.e-16, 1.e-16); + TGeoMaterial* matAl = new TGeoMaterial("BP_aluminium", 26.9815386, 13, 2.7, 24.01); + + // //--- define some media + TGeoMedium* Vacuum = new TGeoMedium("BP_vacuum", 1, matVacuum); + TGeoMedium* Al = new TGeoMedium("BP_aluminium", 2, matAl); + TGeoMedium* CF = new TGeoMedium("BP_carbonfiber", 3, matCarbonFiber); + TGeoMedium* Stainless = new TGeoMedium("BP_stainless", 4, matStainless); + + Double_t conus_lenght = 1585 * mm; + Double_t rmin1 = 55 * mm; + Double_t rmax1 = 56 * mm; + Double_t rmin2 = 125 * mm; + Double_t rmax2 = 126 * mm; + + Double_t rail_cord[] = {23.1, 0, 4.5, 21.5, 2.8, 4.5}; + Double_t top_plate_cord[] = {10, 0, 2.1, 10.15, 0, 4.05, 11.75, 2.15, 4.0, 15.3, 4.28, + 2.85, 18.1, 5.27, 2.85, 19.75, 5.65, 5.0, 21.1, 5.65, 0}; + Double_t side_plate_cord[] = {11.3, 0, 2, 11.3, 0, 7.55, 16, 6.8, 4.6, 8.7, 6.8, 4.6, + 19.8, 8.3, 2.35, 13.6, 8.3, 2.35, 20.8, 7.9, 3.0, 14.8, 7.9, 3.0, + 21.3, 6.8, 1.5, 16.3, 6.8, 1.5, 21.3, 6.3, 0, 17.4, 6.3, 0}; + + + //-----------------------DEFINITION OF TRANSFORMATIONS-------------------------------------------------------------------------------------- + + TGeoRotation* rot_top = new TGeoRotation("rot_top"); + rot_top->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_top = new TGeoCombiTrans(0, 15.2, 0, rot_top); + + TGeoRotation* rot_bott = new TGeoRotation("rot_bott"); + rot_bott->SetAngles(180, 0, 0); + TGeoCombiTrans* combi_bott = new TGeoCombiTrans(0, -15.2, 0, rot_bott); + + TGeoRotation* rot_rail_top = new TGeoRotation("rot_rail_top"); + rot_rail_top->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_rail_top = new TGeoCombiTrans(0, 20.15 - rail_cord[4], rail_cord[2] + 33, rot_rail_top); + + TGeoRotation* rot_rail = new TGeoRotation("rot_rail_bott"); + rot_rail->SetAngles(0, 0, 0); + TGeoCombiTrans* combi_rail_bott = new TGeoCombiTrans(0, -20.15, rail_cord[2] + 33, rot_rail); + + + TGeoTranslation* ident_translation = new TGeoTranslation("ident_translation", 0, 0, 0); + ident_translation->RegisterYourself(); + + TGeoRotation* ident_rotation = new TGeoRotation("ident_rotation"); + ident_rotation->RotateY(0); + ident_rotation->RotateY(0); + ident_rotation->RegisterYourself(); + + TGeoTranslation orig_translation("orig_translation", -0.15707676 * mm, 0, 3230 * mm); + //TGeoCombiTrans *origin_translation = new TGeoCombiTrans(orig_translation,ident); + + + TGeoRotation orig_rotation("orig_rotation"); + orig_rotation.RotateY(1.2); + //TGeoCombiTrans *origin_rotation = new TGeoCombiTrans(0,orig_rotation); + //orig_rotation->RegisterYourself(); + + + //TGeoHMatrix orig_combi = orig_translation * orig_rotation; + TGeoHMatrix orig_combi = orig_rotation * orig_translation; + + TGeoHMatrix* origin_combi = new TGeoHMatrix(orig_combi); + + + TGeoRotation* rot_left = new TGeoRotation("rot_left"); + rot_left->SetAngles(90, 0, 0); + TGeoCombiTrans* combi_left = new TGeoCombiTrans(-15.2, 0, 0, rot_left); + + TGeoRotation* rot_right = new TGeoRotation("rot_right"); + rot_right->SetAngles(270, 0, 0); + TGeoCombiTrans* combi_right = new TGeoCombiTrans(15.2, 0, 0, rot_right); + + TGeoCombiTrans* tr_top_0a = new TGeoCombiTrans(0, 15.2, top_plate_cord[2], rot_top); + TGeoCombiTrans* tr_top_1a = new TGeoCombiTrans(0, 15.2, 2 * top_plate_cord[2] + top_plate_cord[5], rot_top); + TGeoCombiTrans* tr_top_2a = new TGeoCombiTrans( + 0, 15.2, 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8], rot_top); + TGeoCombiTrans* tr_top_3a = new TGeoCombiTrans(0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + + top_plate_cord[8] + top_plate_cord[8] + top_plate_cord[11], + rot_top); + TGeoCombiTrans* tr_top_4a = + new TGeoCombiTrans(0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + + top_plate_cord[8] + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14], + rot_top); + TGeoCombiTrans* tr_top_5a = new TGeoCombiTrans( + 0, 15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + top_plate_cord[8] + + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14] + top_plate_cord[14] + top_plate_cord[17], + rot_top); + + TGeoCombiTrans* tr_bott_0a = new TGeoCombiTrans(0, -15.2, top_plate_cord[2], rot_bott); + TGeoCombiTrans* tr_bott_1a = new TGeoCombiTrans(0, -15.2, 2 * top_plate_cord[2] + top_plate_cord[5], rot_bott); + TGeoCombiTrans* tr_bott_2a = new TGeoCombiTrans( + 0, -15.2, 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8], rot_bott); + TGeoCombiTrans* tr_bott_3a = new TGeoCombiTrans(0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + + top_plate_cord[8] + top_plate_cord[8] + top_plate_cord[11], + rot_bott); + TGeoCombiTrans* tr_bott_4a = + new TGeoCombiTrans(0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + + top_plate_cord[8] + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14], + rot_bott); + TGeoCombiTrans* tr_bott_5a = new TGeoCombiTrans( + 0, -15.2, + 2 * top_plate_cord[2] + top_plate_cord[5] + top_plate_cord[5] + top_plate_cord[8] + top_plate_cord[8] + + top_plate_cord[11] + top_plate_cord[11] + top_plate_cord[14] + top_plate_cord[14] + top_plate_cord[17], + rot_bott); + + TGeoCombiTrans* tr_side_left_0a = new TGeoCombiTrans(-15.2, 0, side_plate_cord[2], rot_left); + TGeoCombiTrans* tr_side_left_1a = new TGeoCombiTrans(-15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5], rot_left); + TGeoCombiTrans* tr_side_left_2a = new TGeoCombiTrans( + -15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8], rot_left); + TGeoCombiTrans* tr_side_left_3a = + new TGeoCombiTrans(-15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14], + rot_left); + TGeoCombiTrans* tr_side_left_4a = + new TGeoCombiTrans(-15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20], + rot_left); + TGeoCombiTrans* tr_side_left_5a = new TGeoCombiTrans( + -15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + side_plate_cord[8] + + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20] + side_plate_cord[20] + side_plate_cord[26], + rot_left); + + TGeoCombiTrans* tr_side_right_0a = new TGeoCombiTrans(15.2, 0, side_plate_cord[2], rot_right); + TGeoCombiTrans* tr_side_right_1a = + new TGeoCombiTrans(15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5], rot_right); + TGeoCombiTrans* tr_side_right_2a = new TGeoCombiTrans( + 15.2, 0, 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8], rot_right); + TGeoCombiTrans* tr_side_right_3a = + new TGeoCombiTrans(15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14], + rot_right); + TGeoCombiTrans* tr_side_right_4a = + new TGeoCombiTrans(15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + + side_plate_cord[8] + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20], + rot_right); + TGeoCombiTrans* tr_side_right_5a = new TGeoCombiTrans( + 15.2, 0, + 2 * side_plate_cord[2] + side_plate_cord[5] + side_plate_cord[5] + side_plate_cord[8] + side_plate_cord[8] + + side_plate_cord[14] + side_plate_cord[14] + side_plate_cord[20] + side_plate_cord[20] + side_plate_cord[26], + rot_right); + + TGeoRotation* rot_sts_conus_connection = new TGeoRotation("rot_sts_conus_connection"); + rot_sts_conus_connection->RotateZ(180); + TGeoCombiTrans* ctr_sts_conus_connection = new TGeoCombiTrans(0, 0, -3185 * mm, rot_sts_conus_connection); + + TGeoRotation* rotation_of_sts_tube = new TGeoRotation("rotation_of_sts_tube"); + rotation_of_sts_tube->RotateZ(180); + rotation_of_sts_tube->RotateY(-1.2); + TGeoCombiTrans* ctr_sts_tube = new TGeoCombiTrans(0.15707676 * mm, 0, -3214.99917754 * mm, rotation_of_sts_tube); + + TGeoRotation* rot_global = new TGeoRotation("rot_global"); + rot_global->RotateY(1.2); + TGeoCombiTrans* ctr_global = new TGeoCombiTrans(0, 0, 3214.99917754 * mm, rot_global); + + TGeoRotation* rot_s1 = new TGeoRotation("rot_s1"); + rot_s1->RotateY(-11.888); + TGeoCombiTrans* ctr_s1 = new TGeoCombiTrans("ctr_s1", -11.46294558 * mm, 0, 84.45109099 * mm, rot_s1); + + TGeoRotation* rot_s2 = new TGeoRotation("rot_s2"); + rot_s2->RotateY(-26.4732337); + TGeoCombiTrans* ctr_s2 = new TGeoCombiTrans("ctr_s2", (-48.92189672) * mm, 0, (191.10295277) * mm, rot_s2); + + TGeoRotation* rot_s3 = new TGeoRotation("rot_s3"); + rot_s3->RotateZ(180.); + rot_s3->RotateY(-15.505); + + TGeoCombiTrans* ctr_s3 = new TGeoCombiTrans("ctr_s3", (-85.745) * mm, 0, (282.33) * mm, rot_s3); + + TGeoRotation* rot_s4 = new TGeoRotation("rot_s4"); + rot_s4->RotateZ(180.); + rot_s4->RotateY(-4.217); + + TGeoCombiTrans* ctr_s4 = new TGeoCombiTrans("ctr_s4", (-98.226) * mm, 0, 343.795 * mm, rot_s4); + + + TGeoRotation* rot_plate = new TGeoRotation("rot_plate"); + rot_plate->RotateY(-1.2); + TGeoCombiTrans* ctr_plate_up = + new TGeoCombiTrans("ctr_plate_up", -100.194 * mm, (147 + 12.5) * mm, (292.8 + 90) * mm, rot_plate); + TGeoCombiTrans* ctr_plate_down = + new TGeoCombiTrans("ctr_plate_down", -100.194 * mm, -(147 + 12.5) * mm, (292.8 + 90) * mm, rot_plate); + TGeoTranslation* tr_plate_up = new TGeoTranslation("tr_plate_up", 0. * mm, (147 + 12.5) * mm, 0. * mm); + tr_plate_up->RegisterYourself(); + TGeoTranslation* tr_plate_down = new TGeoTranslation("tr_plate_down", 0. * mm, -(147 + 12.5) * mm, 0. * mm); + tr_plate_down->RegisterYourself(); + + TGeoRotation* rot_lsn = new TGeoRotation("rot_lsn"); + //rot_s5->RotateZ(180.); + rot_lsn->RotateY(-90); + TGeoCombiTrans* ctr_lsn = new TGeoCombiTrans("ctr_s5", -22.5 * mm, -159.5 * mm, 534. * mm, rot_lsn); + + TGeoTranslation* mot_transl = new TGeoTranslation("mot_transl", -286.5 * mm, -159.5 * mm, 534. * mm); + + TGeoRotation* rot_psd_tube = new TGeoRotation("rot_psd_tube"); + rot_psd_tube->RotateY(0); + TGeoCombiTrans* ctr_psd_tube = new TGeoCombiTrans("ctr_psd_tube", -24.7 * mm, 0. * mm, 10857.77 * mm, rot_psd_tube); + + TGeoRotation* rot_s5 = new TGeoRotation("rot_s5"); + //rot_s5->RotateZ(180.); + rot_s5->RotateY(-1.2); + TGeoCombiTrans* ctr_s5 = new TGeoCombiTrans("ctr_s5", (-100.194) * mm, 0, 381.231 * mm, rot_s5); + + TGeoTranslation* nut_transl = new TGeoTranslation("nut_transl", 0. * mm, 0. * mm, 80. * mm); + nut_transl->RegisterYourself(); + + + //------------------------------------DEFINITIONS OF VOLUMES---------------------------------------- + //--- make the top container volume + Double_t worldx = 320 * mm; + Double_t worldy = 220 * mm; + Double_t worldz = 18100 * mm; + TGeoVolume* full_assembly = geom->MakeBox("pipe_v21f", Vacuum, worldx, worldy, worldz); + geom->SetTopVolume(full_assembly); + full_assembly->SetVisibility(kTRUE); + TGeoVolume* conical_beam_pipe = geom->MakeBox("conical_beam_pipe", Vacuum, 220 * mm, 220 * mm, 3650 * mm); + conical_beam_pipe->SetVisibility(kFALSE); + TGeoVolume* bellow_ass = geom->MakeBox("Bellow assembly", Vacuum, 320 * mm, 220 * mm, 240 * mm); + bellow_ass->SetVisibility(kFALSE); + + // TOP PLATE-------------------------------------------------------------------------------------- + TGeoVolume* sub_t_plate1 = geom->MakeArb8("sub_t_plate1", CF, top_plate_cord[2]); + sub_t_plate1->SetLineColor(kGray); + TGeoArb8* t_arb1 = (TGeoArb8*) sub_t_plate1->GetShape(); + t_arb1->SetVertex(0, top_plate_cord[0], top_plate_cord[1]); + t_arb1->SetVertex(1, -top_plate_cord[0], top_plate_cord[1]); + t_arb1->SetVertex(2, -top_plate_cord[0], top_plate_cord[1] + 1.0); + t_arb1->SetVertex(3, top_plate_cord[0], top_plate_cord[1] + 1.0); + t_arb1->SetVertex(4, top_plate_cord[3], top_plate_cord[4]); + t_arb1->SetVertex(5, -top_plate_cord[3], top_plate_cord[4]); + t_arb1->SetVertex(6, -top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb1->SetVertex(7, top_plate_cord[3], top_plate_cord[4] + 1.0); + + TGeoVolume* sub_t_plate2 = geom->MakeArb8("sub_t_plate2", CF, top_plate_cord[5]); + sub_t_plate2->SetLineColor(kGray); + TGeoArb8* t_arb2 = (TGeoArb8*) sub_t_plate2->GetShape(); + t_arb2->SetVertex(0, top_plate_cord[3], top_plate_cord[4]); + t_arb2->SetVertex(1, -top_plate_cord[3], top_plate_cord[4]); + t_arb2->SetVertex(2, -top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb2->SetVertex(3, top_plate_cord[3], top_plate_cord[4] + 1.0); + t_arb2->SetVertex(4, top_plate_cord[6], top_plate_cord[7]); + t_arb2->SetVertex(5, -top_plate_cord[6], top_plate_cord[7]); + t_arb2->SetVertex(6, -top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb2->SetVertex(7, top_plate_cord[6], top_plate_cord[7] + 1.0); + + TGeoVolume* sub_t_plate3 = geom->MakeArb8("sub_t_plate3", CF, top_plate_cord[8]); + sub_t_plate3->SetLineColor(kGray); + TGeoArb8* t_arb3 = (TGeoArb8*) sub_t_plate3->GetShape(); + t_arb3->SetVertex(0, top_plate_cord[6], top_plate_cord[7]); + t_arb3->SetVertex(1, -top_plate_cord[6], top_plate_cord[7]); + t_arb3->SetVertex(2, -top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb3->SetVertex(3, top_plate_cord[6], top_plate_cord[7] + 1.0); + t_arb3->SetVertex(4, top_plate_cord[9], top_plate_cord[10]); + t_arb3->SetVertex(5, -top_plate_cord[9], top_plate_cord[10]); + t_arb3->SetVertex(6, -top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb3->SetVertex(7, top_plate_cord[9], top_plate_cord[10] + 1.0); + + TGeoVolume* sub_t_plate4 = geom->MakeArb8("sub_t_plate4", CF, top_plate_cord[11]); + sub_t_plate4->SetLineColor(kGray); + TGeoArb8* t_arb4 = (TGeoArb8*) sub_t_plate4->GetShape(); + t_arb4->SetVertex(0, top_plate_cord[9], top_plate_cord[10]); + t_arb4->SetVertex(1, -top_plate_cord[9], top_plate_cord[10]); + t_arb4->SetVertex(2, -top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb4->SetVertex(3, top_plate_cord[9], top_plate_cord[10] + 1.0); + t_arb4->SetVertex(4, top_plate_cord[12], top_plate_cord[13]); + t_arb4->SetVertex(5, -top_plate_cord[12], top_plate_cord[13]); + t_arb4->SetVertex(6, -top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb4->SetVertex(7, top_plate_cord[12], top_plate_cord[13] + 1.0); + + TGeoVolume* sub_t_plate5 = geom->MakeArb8("sub_t_plate5", CF, top_plate_cord[14]); + sub_t_plate5->SetLineColor(kGray); + TGeoArb8* t_arb5 = (TGeoArb8*) sub_t_plate5->GetShape(); + t_arb5->SetVertex(0, top_plate_cord[12], top_plate_cord[13]); + t_arb5->SetVertex(1, -top_plate_cord[12], top_plate_cord[13]); + t_arb5->SetVertex(2, -top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb5->SetVertex(3, top_plate_cord[12], top_plate_cord[13] + 1.0); + t_arb5->SetVertex(4, top_plate_cord[15], top_plate_cord[17]); + t_arb5->SetVertex(5, -top_plate_cord[15], top_plate_cord[17]); + t_arb5->SetVertex(6, -top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb5->SetVertex(7, top_plate_cord[15], top_plate_cord[17] + 1.0); + + TGeoVolume* sub_t_plate6 = geom->MakeArb8("sub_t_plate6", CF, top_plate_cord[17]); + sub_t_plate6->SetLineColor(kGray); + TGeoArb8* t_arb6 = (TGeoArb8*) sub_t_plate6->GetShape(); + t_arb6->SetVertex(0, top_plate_cord[15], top_plate_cord[17]); + t_arb6->SetVertex(1, -top_plate_cord[15], top_plate_cord[17]); + t_arb6->SetVertex(2, -top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(3, top_plate_cord[15], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(4, top_plate_cord[18], top_plate_cord[17]); + t_arb6->SetVertex(5, -top_plate_cord[18], top_plate_cord[17]); + t_arb6->SetVertex(6, -top_plate_cord[18], top_plate_cord[17] + 1.0); + t_arb6->SetVertex(7, top_plate_cord[18], top_plate_cord[17] + 1.0); + + // SIDE PLATE-------------------------------------------------------------------------------------- + + TGeoVolume* sub_s_plate1 = geom->MakeArb8("sub_s_plate1", CF, side_plate_cord[2]); + sub_s_plate1->SetLineColor(kGray); + TGeoArb8* s_arb1 = (TGeoArb8*) sub_s_plate1->GetShape(); + s_arb1->SetVertex(0, side_plate_cord[0], side_plate_cord[1]); + s_arb1->SetVertex(1, -side_plate_cord[0], side_plate_cord[1]); + s_arb1->SetVertex(2, -side_plate_cord[0], side_plate_cord[1] + 1.0); + s_arb1->SetVertex(3, side_plate_cord[0], side_plate_cord[1] + 1.0); + s_arb1->SetVertex(4, side_plate_cord[3], side_plate_cord[4]); + s_arb1->SetVertex(5, -side_plate_cord[3], side_plate_cord[4]); + s_arb1->SetVertex(6, -side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb1->SetVertex(7, side_plate_cord[3], side_plate_cord[4] + 1.0); + + TGeoVolume* sub_s_plate2 = geom->MakeArb8("sub_s_plate2", CF, side_plate_cord[5]); + sub_s_plate2->SetLineColor(kGray); + TGeoArb8* s_arb2 = (TGeoArb8*) sub_s_plate2->GetShape(); + s_arb2->SetVertex(0, side_plate_cord[3], side_plate_cord[4]); + s_arb2->SetVertex(1, -side_plate_cord[3], side_plate_cord[4]); + s_arb2->SetVertex(2, -side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb2->SetVertex(3, side_plate_cord[3], side_plate_cord[4] + 1.0); + s_arb2->SetVertex(4, side_plate_cord[6], side_plate_cord[7]); + s_arb2->SetVertex(5, -side_plate_cord[6], side_plate_cord[7]); + s_arb2->SetVertex(6, -side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb2->SetVertex(7, side_plate_cord[6], side_plate_cord[7] + 1.0); + + TGeoVolume* sub_s_plate3 = geom->MakeArb8("sub_s_plate3", CF, side_plate_cord[8]); + sub_s_plate3->SetLineColor(kGray); + TGeoArb8* s_arb3 = (TGeoArb8*) sub_s_plate3->GetShape(); + s_arb3->SetVertex(0, side_plate_cord[6], side_plate_cord[7]); + s_arb3->SetVertex(1, side_plate_cord[9], side_plate_cord[10]); + s_arb3->SetVertex(2, side_plate_cord[9], side_plate_cord[10] + 1.0); + s_arb3->SetVertex(3, side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb3->SetVertex(4, side_plate_cord[12], side_plate_cord[13]); + s_arb3->SetVertex(5, side_plate_cord[15], side_plate_cord[16]); + s_arb3->SetVertex(6, side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb3->SetVertex(7, side_plate_cord[12], side_plate_cord[13] + 1.0); + + TGeoVolume* sub_s_plate4 = geom->MakeArb8("sub_s_plate4", CF, side_plate_cord[8]); + sub_s_plate4->SetLineColor(kGray); + TGeoArb8* s_arb4 = (TGeoArb8*) sub_s_plate4->GetShape(); + s_arb4->SetVertex(0, -side_plate_cord[6], side_plate_cord[7]); + s_arb4->SetVertex(1, -side_plate_cord[9], side_plate_cord[10]); + s_arb4->SetVertex(2, -side_plate_cord[9], side_plate_cord[10] + 1.0); + s_arb4->SetVertex(3, -side_plate_cord[6], side_plate_cord[7] + 1.0); + s_arb4->SetVertex(4, -side_plate_cord[12], side_plate_cord[13]); + s_arb4->SetVertex(5, -side_plate_cord[15], side_plate_cord[16]); + s_arb4->SetVertex(6, -side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb4->SetVertex(7, -side_plate_cord[12], side_plate_cord[13] + 1.0); + + TGeoVolume* sub_s_plate5 = geom->MakeArb8("sub_s_plate5", CF, side_plate_cord[14]); + sub_s_plate5->SetLineColor(kGray); + TGeoArb8* s_arb5 = (TGeoArb8*) sub_s_plate5->GetShape(); + s_arb5->SetVertex(0, side_plate_cord[12], side_plate_cord[13]); + s_arb5->SetVertex(1, side_plate_cord[15], side_plate_cord[16]); + s_arb5->SetVertex(2, side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb5->SetVertex(3, side_plate_cord[12], side_plate_cord[13] + 1.0); + s_arb5->SetVertex(4, side_plate_cord[18], side_plate_cord[19]); + s_arb5->SetVertex(5, side_plate_cord[21], side_plate_cord[22]); + s_arb5->SetVertex(6, side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb5->SetVertex(7, side_plate_cord[18], side_plate_cord[19] + 1.0); + + TGeoVolume* sub_s_plate6 = geom->MakeArb8("sub_s_plate6", CF, side_plate_cord[14]); + sub_s_plate6->SetLineColor(kGray); + TGeoArb8* s_arb6 = (TGeoArb8*) sub_s_plate6->GetShape(); + s_arb6->SetVertex(0, -side_plate_cord[12], side_plate_cord[13]); + s_arb6->SetVertex(1, -side_plate_cord[15], side_plate_cord[16]); + s_arb6->SetVertex(2, -side_plate_cord[15], side_plate_cord[16] + 1.0); + s_arb6->SetVertex(3, -side_plate_cord[12], side_plate_cord[13] + 1.0); + s_arb6->SetVertex(4, -side_plate_cord[18], side_plate_cord[19]); + s_arb6->SetVertex(5, -side_plate_cord[21], side_plate_cord[22]); + s_arb6->SetVertex(6, -side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb6->SetVertex(7, -side_plate_cord[18], side_plate_cord[19] + 1.0); + + TGeoVolume* sub_s_plate7 = geom->MakeArb8("sub_s_plate7", CF, side_plate_cord[20]); + sub_s_plate7->SetLineColor(kGray); + TGeoArb8* s_arb7 = (TGeoArb8*) sub_s_plate7->GetShape(); + s_arb7->SetVertex(0, side_plate_cord[18], side_plate_cord[19]); + s_arb7->SetVertex(1, side_plate_cord[21], side_plate_cord[22]); + s_arb7->SetVertex(2, side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb7->SetVertex(3, side_plate_cord[18], side_plate_cord[19] + 1.0); + s_arb7->SetVertex(4, side_plate_cord[24], side_plate_cord[25]); + s_arb7->SetVertex(5, side_plate_cord[27], side_plate_cord[28]); + s_arb7->SetVertex(6, side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb7->SetVertex(7, side_plate_cord[24], side_plate_cord[25] + 1.0); + + TGeoVolume* sub_s_plate8 = geom->MakeArb8("sub_s_plate8", CF, side_plate_cord[20]); + sub_s_plate8->SetLineColor(kGray); + TGeoArb8* s_arb8 = (TGeoArb8*) sub_s_plate8->GetShape(); + s_arb8->SetVertex(0, -side_plate_cord[18], side_plate_cord[19]); + s_arb8->SetVertex(1, -side_plate_cord[21], side_plate_cord[22]); + s_arb8->SetVertex(2, -side_plate_cord[21], side_plate_cord[22] + 1.0); + s_arb8->SetVertex(3, -side_plate_cord[18], side_plate_cord[19] + 1.0); + s_arb8->SetVertex(4, -side_plate_cord[24], side_plate_cord[25]); + s_arb8->SetVertex(5, -side_plate_cord[27], side_plate_cord[28]); + s_arb8->SetVertex(6, -side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb8->SetVertex(7, -side_plate_cord[24], side_plate_cord[25] + 1.0); + + TGeoVolume* sub_s_plate9 = geom->MakeArb8("sub_s_plate9", CF, side_plate_cord[26]); + sub_s_plate9->SetLineColor(kGray); + TGeoArb8* s_arb9 = (TGeoArb8*) sub_s_plate9->GetShape(); + s_arb9->SetVertex(0, side_plate_cord[24], side_plate_cord[25]); + s_arb9->SetVertex(1, side_plate_cord[27], side_plate_cord[28]); + s_arb9->SetVertex(2, side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb9->SetVertex(3, side_plate_cord[24], side_plate_cord[25] + 1.0); + s_arb9->SetVertex(4, side_plate_cord[30], side_plate_cord[31]); + s_arb9->SetVertex(5, side_plate_cord[33], side_plate_cord[34]); + s_arb9->SetVertex(6, side_plate_cord[33], side_plate_cord[34] + 1.0); + s_arb9->SetVertex(7, side_plate_cord[30], side_plate_cord[31] + 1.0); + + TGeoVolume* sub_s_plate10 = geom->MakeArb8("sub_s_plate10", CF, side_plate_cord[26]); + sub_s_plate10->SetLineColor(kGray); + TGeoArb8* s_arb10 = (TGeoArb8*) sub_s_plate10->GetShape(); + s_arb10->SetVertex(0, -side_plate_cord[24], side_plate_cord[25]); + s_arb10->SetVertex(1, -side_plate_cord[27], side_plate_cord[28]); + s_arb10->SetVertex(2, -side_plate_cord[27], side_plate_cord[28] + 1.0); + s_arb10->SetVertex(3, -side_plate_cord[24], side_plate_cord[25] + 1.0); + s_arb10->SetVertex(4, -side_plate_cord[30], side_plate_cord[31]); + s_arb10->SetVertex(5, -side_plate_cord[33], side_plate_cord[34]); + s_arb10->SetVertex(6, -side_plate_cord[33], side_plate_cord[34] + 1.0); + s_arb10->SetVertex(7, -side_plate_cord[30], side_plate_cord[31] + 1.0); + + // RAIL------------------------------------------------------------------------------------ + TGeoVolume* sub_rail = geom->MakeArb8("sub_rail", Al, rail_cord[2]); + sub_rail->SetLineColor(kBlue); + TGeoArb8* r_arb1 = (TGeoArb8*) sub_rail->GetShape(); + r_arb1->SetVertex(0, rail_cord[0], rail_cord[1]); + r_arb1->SetVertex(1, -rail_cord[0], rail_cord[1]); + r_arb1->SetVertex(2, -rail_cord[0], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(3, rail_cord[0], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(4, rail_cord[3], rail_cord[1]); + r_arb1->SetVertex(5, -rail_cord[3], rail_cord[1]); + r_arb1->SetVertex(6, -rail_cord[3], rail_cord[1] + rail_cord[4]); + r_arb1->SetVertex(7, rail_cord[3], rail_cord[1] + rail_cord[4]); + + TGeoBBox* flange_box = new TGeoBBox("flange_box", 15.2, 15.2, 1.5); + TGeoTube* flange_hole = new TGeoTube("flange_hole", 0., 12.5, 2.5); + + // DOWNSTREAM_CARBON-FIBRE_RICH_MUCH_FLANGE_TO_BELLOW_ASS------------------------------------------------------------------------------------ + TGeoBBox* rich_much_flange_box = new TGeoBBox("rich_much_flange_box", 15.2, 15.2, 1.5); + TGeoTube* rich_much_flange_hole = new TGeoTube("rich_much_flange_hole", 0., 12.5, 2.5); + TGeoCompositeShape* rich_much_flange_composite = + new TGeoCompositeShape("flange_composite_rich", "rich_much_flange_box-rich_much_flange_hole"); + TGeoVolume* rich_much_downstream_flange = + new TGeoVolume("rich_much_downstream_flange", rich_much_flange_composite, CF); + rich_much_downstream_flange->SetLineColor(kGray); + + // CONICAL_BEAM_PIPE WITH CARBONE-FIBRE FLANGE AND TILTED END PIECE OF TUBE TO STS SECTION------------------------------------------------------------------------------------ + TGeoCone* conus = new TGeoCone("conical_beam_pipe", conus_lenght, rmin1, rmax1, rmin2, rmax2); + TGeoVolume* conical_beam_pipe_volume = new TGeoVolume("conical_beam_pipe_volume", conus, CF); + conical_beam_pipe_volume->SetLineColor(kGray); + + TGeoCtub* rich_much_upstream_tube_connection = + new TGeoCtub("rich_much_upstream_tube_connection", 55. * mm, 56. * mm, 15. * mm, 360., 360., 0.05235892, 0., + 4.99972585, 0., 0., 1.); + TGeoVolume* rich_much_upstream_tube_connection_volume = + new TGeoVolume("rich_much_upstream_tube_connection_volume", rich_much_upstream_tube_connection, CF); + rich_much_upstream_tube_connection_volume->SetLineColor(kGray); + + TGeoCtub* rich_much_upstream_tube_connection_to_sts = + new TGeoCtub("rich_much_upstream_tube_connection_to_sts", 55. * mm, 56. * mm, 15. * mm, 360., 360., 0., 0., 1., + -0.05235892, 0., 4.99972585); + TGeoVolume* rich_much_upstream_tube_connection_to_sts_volume = + new TGeoVolume("rich_much_upstream_tube_connection_to_sts_volume", rich_much_upstream_tube_connection_to_sts, CF); + rich_much_upstream_tube_connection_to_sts_volume->SetLineColor(kGray); + + + TGeoCompositeShape* flange_composite = new TGeoCompositeShape("flange_composite", "flange_box-flange_hole"); + TGeoVolume* bellow_flange_0 = new TGeoVolume("bellow_flange_0", flange_composite, Stainless); + bellow_flange_0->SetLineColor(kRed); + + TGeoCtub* bellow_s1 = new TGeoCtub("bellow_s1", 121.9435 * mm, 139.4435 * mm, 55.64459032 * mm, 0., 360., -0.206, 0., + -0.979, -0.206, 0., 0.979); + TGeoVolume* bellow_1 = new TGeoVolume("bellow_s1", bellow_s1, Stainless); + bellow_1->SetLineColor(kRed); + + TGeoCtub* bellow_s2 = new TGeoCtub("bellow_s1", 124.842 * mm, 142.342 * mm, 58.3156 * mm, 0., 360., -0.04705248, 0., + -0.998892419, 0.04705248, 0, 0.998892419); + TGeoVolume* bellow_2 = new TGeoVolume("bellow_s2", bellow_s2, Stainless); + bellow_2->SetLineColor(kRed); + + TGeoCtub* bellow_s3 = new TGeoCtub("bellow_s3", 123.5175 * mm, 141.0175 * mm, 40.5 * mm, 0., 360., -0.1439, 0., + -0.9896, -0.1439, 0., 0.9896); + TGeoVolume* bellow_3 = new TGeoVolume("bellow_s3", bellow_s3, Stainless); + bellow_3->SetLineColor(kRed); + + TGeoCtub* bellow_s4 = new TGeoCtub("bellow_s4", 124.8025 * mm, 142.3025 * mm, 22.5 * mm, 0., 360., -0.0526, 0., + -0.9972, -0.0526, 0., 0.9972); + TGeoVolume* bellow_4 = new TGeoVolume("bellow_s3", bellow_s4, Stainless); + bellow_4->SetLineColor(kRed); + + + TGeoBBox* roll_plate_s = new TGeoBBox("roll_plate_s", 75. * mm, 12.5 * mm, 90. * mm); + TGeoVolume* roll_plate = new TGeoVolume("roll_plate", roll_plate_s, Al); + roll_plate->SetLineColor(kBlue); + + TGeoTube* flange_cyl = new TGeoTube("flange_cyl", 0., 15., 1.5); + TGeoTube* flange_cyl_hole = new TGeoTube("flange_cyl_hole", 0., 8.9, 2.5); + TGeoCompositeShape* flange_cyl_composite = new TGeoCompositeShape( + "flange_cyl_composite", "((flange_cyl-flange_cyl_hole)-roll_plate_s:tr_plate_up)-roll_plate_s:tr_plate_down"); + TGeoVolume* bellow_flange_1 = new TGeoVolume("bellow_flange_1", flange_cyl_composite, Stainless); + bellow_flange_1->SetLineColor(kRed); + + + TGeoTube* lead_screw_s = new TGeoTube("lead_screw_s", 0. * mm, 6. * mm, 205. * mm); + TGeoTube* nut_small_s = new TGeoTube("nut_small_s", 6. * mm, 14. * mm, 50. * mm); + TGeoTube* nut_big_s = new TGeoTube("nut_big_s", 14. * mm, 24. * mm, 27. * mm); + + TGeoCompositeShape* lead_screw_nut_s = + new TGeoCompositeShape("lead_screw_nut_s", "lead_screw_s+nut_small_s:nut_transl+nut_big_s:nut_transl"); + TGeoVolume* lead_screw_nut = new TGeoVolume("lead_screw_nut", lead_screw_nut_s, Stainless); + lead_screw_nut->SetLineColor(kRed); + + + TGeoBBox* motor_s = new TGeoBBox("motor_s", 57.5 * mm, 30. * mm, 30. * mm); + TGeoVolume* motor = new TGeoVolume("motor", motor_s, Stainless); + motor->SetLineColor(kRed); + + + TGeoTube* psd_tube_s = new TGeoTube("psd_tube_s", 90. * mm, 92. * mm, 7230. * mm); + TGeoVolume* psd_tube = new TGeoVolume("psd_tube", psd_tube_s, CF); + psd_tube->SetLineColor(kGray); + + + //------------------TOP plate------------------------------ + bellow_ass->AddNode(sub_t_plate1, 1, tr_top_0a); + bellow_ass->AddNode(sub_t_plate2, 1, tr_top_1a); + bellow_ass->AddNode(sub_t_plate3, 1, tr_top_2a); + bellow_ass->AddNode(sub_t_plate4, 1, tr_top_3a); + bellow_ass->AddNode(sub_t_plate5, 1, tr_top_4a); + bellow_ass->AddNode(sub_t_plate6, 1, tr_top_5a); + + //-----------------BOTTOM plate---------------------------- + bellow_ass->AddNode(sub_t_plate1, 2, tr_bott_0a); + bellow_ass->AddNode(sub_t_plate2, 2, tr_bott_1a); + bellow_ass->AddNode(sub_t_plate3, 2, tr_bott_2a); + bellow_ass->AddNode(sub_t_plate4, 2, tr_bott_3a); + bellow_ass->AddNode(sub_t_plate5, 2, tr_bott_4a); + bellow_ass->AddNode(sub_t_plate6, 2, tr_bott_5a); + + //-----------------LEFT plate------------------------------ + bellow_ass->AddNode(sub_s_plate1, 1, tr_side_left_0a); + bellow_ass->AddNode(sub_s_plate2, 1, tr_side_left_1a); + bellow_ass->AddNode(sub_s_plate3, 1, tr_side_left_2a); + bellow_ass->AddNode(sub_s_plate4, 1, tr_side_left_2a); + bellow_ass->AddNode(sub_s_plate5, 1, tr_side_left_3a); + bellow_ass->AddNode(sub_s_plate6, 1, tr_side_left_3a); + bellow_ass->AddNode(sub_s_plate7, 1, tr_side_left_4a); + bellow_ass->AddNode(sub_s_plate8, 1, tr_side_left_4a); + bellow_ass->AddNode(sub_s_plate9, 1, tr_side_left_5a); + bellow_ass->AddNode(sub_s_plate10, 1, tr_side_left_5a); + + //---------------RIGHT plate-------------------------------- + bellow_ass->AddNode(sub_s_plate1, 2, tr_side_right_0a); + bellow_ass->AddNode(sub_s_plate2, 2, tr_side_right_1a); + bellow_ass->AddNode(sub_s_plate3, 2, tr_side_right_2a); + bellow_ass->AddNode(sub_s_plate4, 2, tr_side_right_2a); + bellow_ass->AddNode(sub_s_plate5, 2, tr_side_right_3a); + bellow_ass->AddNode(sub_s_plate6, 2, tr_side_right_3a); + bellow_ass->AddNode(sub_s_plate7, 2, tr_side_right_4a); + bellow_ass->AddNode(sub_s_plate8, 2, tr_side_right_4a); + bellow_ass->AddNode(sub_s_plate9, 2, tr_side_right_5a); + bellow_ass->AddNode(sub_s_plate10, 2, tr_side_right_5a); + + //------------------RAIL------------------------------------- + bellow_ass->AddNode(sub_rail, 1, combi_rail_top); + bellow_ass->AddNode(sub_rail, 2, combi_rail_bott); + + //----------------Bellow with flanges----------------------------- + bellow_ass->AddNode(bellow_flange_0, 1, new TGeoTranslation(0, 0, 1.5)); + bellow_ass->AddNode(bellow_1, 1, ctr_s1); + bellow_ass->AddNode(bellow_2, 1, ctr_s2); + bellow_ass->AddNode(bellow_3, 1, ctr_s3); + bellow_ass->AddNode(bellow_4, 1, ctr_s4); + bellow_ass->AddNode(bellow_flange_1, 1, ctr_s5); + + //------------------DRIVE assembly-------------------------------------- + bellow_ass->AddNode(roll_plate, 1, ctr_plate_up); + bellow_ass->AddNode(roll_plate, 2, ctr_plate_down); + bellow_ass->AddNode(lead_screw_nut, 1, ctr_lsn); + bellow_ass->AddNode(motor, 1, mot_transl); + + //-------------------CONICAL section-------------------------------------------------- + conical_beam_pipe->AddNode(rich_much_downstream_flange, 1, new TGeoTranslation(0, 0, -15 * mm)); + conical_beam_pipe->AddNode(conical_beam_pipe_volume, 1, new TGeoTranslation(0, 0, -1585 * mm)); + conical_beam_pipe->AddNode(rich_much_upstream_tube_connection_volume, 1, ctr_sts_conus_connection); + conical_beam_pipe->AddNode(rich_much_upstream_tube_connection_to_sts_volume, 1, ctr_sts_tube); + + + //------------------INSERT into top volume + full_assembly->AddNode(conical_beam_pipe, 1, origin_combi); + full_assembly->AddNode(bellow_ass, 1, origin_combi); + full_assembly->AddNode(psd_tube, 1, ctr_psd_tube); + + //beampipe->AddNode(full_assembly,1, new TGeoTranslation(0, 0, 0*mm)); + + //--- draw the ROOT box + geom->SetVisLevel(4); + full_assembly->Draw(); + if (gPad && !gROOT->IsBatch()) gPad->GetViewer3D(); + + // --------------- Finish ----------------------------------------------- + TString geo_bin_filename = "pipe_"; + TString geo_name = geo_bin_filename + geoTag; + geo_bin_filename = geo_bin_filename + geoTag + ".geo.root"; + + TFile* binfile; + binfile = new TFile(geo_bin_filename, "RECREATE"); + + geom->GetTopVolume()->Write(geo_name); // outputting on the top volume + + TGeoTranslation* trans = new TGeoTranslation(0.0, 0.0, 82.0); + trans->Write("trans"); + + cout << endl; + cout << "Geometry " << geom->GetTopVolume()->GetName() << " written to " << geo_bin_filename << endl; + binfile->Close(); + + //--- close the geometry + geom->CloseGeometry(); +}