diff --git a/macro/pipe/fair/create_bpipe_geometry_gen.C b/macro/pipe/fair/create_bpipe_geometry_gen.C new file mode 100644 index 0000000000000000000000000000000000000000..e82078cb77613e715862906cade78bd0617fcc26 --- /dev/null +++ b/macro/pipe/fair/create_bpipe_geometry_gen.C @@ -0,0 +1,442 @@ +/* Copyright (C) 2022 Czech Technical University in Prague, + Faculty of Nuclear Sciences and Physical Engineering + 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 "TFile.h" +#include "TVector3.h" + +#include "iostream" +#include "stdio.h" +#include "cmath" + +using namespace std; +using namespace TGeoUnit; + +void create_bpipe_geometry_gen(const char* geoTag = "v24f", double beam_deflection_angle=0) +{ + //--- Definition of a simple geometry + gSystem->Load("libGeom"); + TString geomMngr = "beampipe_"; + geomMngr = geomMngr+geoTag; + TGeoManager* geom = new TGeoManager(geomMngr, "CBM beampipe geometry generator for user adjustable angles"); + + //--- 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); + + // Conus part dimensions + const Double_t conus_lenght = 1585 * mm; + const Double_t conus_rmin1 = 55 * mm; + const Double_t conus_rmax1 = 56 * mm; + const Double_t conus_rmin2 = 125 * mm; + const Double_t conus_rmax2 = 126 * mm; + + const Double_t beam_pipe_length = 14460 * mm; + const Double_t beam_pipe_rmin = 90 * mm; + const Double_t beam_pipe_rmax = 92 * mm; + + const Double_t dist_to_bellow = 4418 * mm; // center of mass of upstream flange + const Double_t bending_radius = 4737 * mm; // center of mass of downstream flange + const Double_t flange_thickness = 30 * mm; + const Double_t short_segment = 45 * mm; + const Double_t long_segment = 65 * mm; + const Double_t bellow_rmin = 137.5 * mm; + const Double_t bellow_rmax = 142.5 * mm; + const Double_t cone_deflection_angle = 1.277/radian; // from deg to rad + + beam_deflection_angle = beam_deflection_angle/radian; // from deg to rad + + Double_t pipe_deflection_radius = bending_radius+(flange_thickness/2)+(beam_pipe_length/2); + + Double_t bellow_deflection_angle = beam_deflection_angle-cone_deflection_angle; // in radians + Double_t alpha = atan((bending_radius*sin(bellow_deflection_angle))/(bending_radius*cos(bellow_deflection_angle)-dist_to_bellow)); // in radians + Double_t direction=1.0; + if (alpha!=0){ + direction=alpha/abs(alpha); + } + // Center of mass points of bellow flanges + TVector3 p_b0(0,0,flange_thickness/2); + TVector3 p_b6(bending_radius*sin(bellow_deflection_angle),0,bending_radius*cos(bellow_deflection_angle)-dist_to_bellow); + + // Vectors defining axis of each part of bellow + TVector3 b0(0,0,flange_thickness); // axis vector of the upstream flange + TVector3 b1(short_segment*sin(alpha/4),0,short_segment*cos(alpha/4)); // axis vector of the first bellow segment + TVector3 b2(long_segment*sin(alpha),0,long_segment*cos(alpha)); // axis vector of the second bellow segment + TVector3 b3; // axis vector of the third (middle) bellow segment - init only + TVector3 b4(long_segment*sin(alpha+bellow_deflection_angle),0,long_segment*cos(alpha+bellow_deflection_angle)); // axis vector of the fourth bellow segment + TVector3 b5(short_segment*sin((alpha/4)+bellow_deflection_angle),0,short_segment*cos((alpha/4)+bellow_deflection_angle)); // axis vector of the fifth bellow segment + TVector3 b6(flange_thickness*sin(bellow_deflection_angle),0,flange_thickness*cos(bellow_deflection_angle)); // axis vector of the downstream flange + b3 = (p_b6-(1./2)*b6-b5-b4)-(p_b0+(1./2)*b0+b1+b2); // axis vector of the third (middle) bellow segment + + TVector3 pipe_vec(beam_pipe_length*sin(bellow_deflection_angle),0,beam_pipe_length*cos(bellow_deflection_angle)); + + Double_t middle_segment = b3.Mag(); + + + // Angles of separate part of bellow + Double_t beta0 = direction*b0.Theta(); + Double_t beta1 = direction*b1.Theta(); + Double_t beta2 = direction*b2.Theta(); + Double_t beta3 = direction*b3.Theta(); + Double_t beta4 = direction*b4.Theta(); + Double_t beta5 = direction*b5.Theta(); + Double_t beta6 = direction*b6.Theta(); + + // Normal vectors for CTub cut planes for bellow segments + TVector3 n01(-sin((beta0-beta1)),0,-cos((beta0-beta1))); + TVector3 n12(-sin((beta1-beta2)/2),0,cos((beta1-beta2)/2)); + TVector3 n21(sin((beta2-beta1)/2),0,-cos((beta2-beta1)/2)); + TVector3 n23(-sin((beta2-beta3)/2),0,cos((beta2-beta3)/2)); + TVector3 n32(sin((beta3-beta2)/2),0,-cos((beta3-beta2)/2)); + TVector3 n34(-sin((beta3-beta4)/2),0,cos((beta3-beta4)/2)); + TVector3 n43(sin((beta4-beta3)/2),0,-cos((beta4-beta3)/2)); + TVector3 n45(-sin((beta4-beta5)/2),0,cos((beta4-beta5)/2)); + TVector3 n54(sin((beta5-beta4)/2),0,-cos((beta5-beta4)/2)); + TVector3 n56(-sin((beta5-beta6)),0,cos((beta5-beta6))); + + //-----------------------DEFINITION OF TRANSFORMATIONS-------------------------------------------------------------------------------------- + + TGeoTranslation orig_translation("orig_translation", -0.15707676 * mm, 0, 3230 * mm); + + TGeoTranslation orig_translation_cone("orig_translation_cone", -0.15707676 * mm, 0, 1645 * mm); + + + TGeoRotation orig_rotation("orig_rotation"); + orig_rotation.RotateY(cone_deflection_angle*radian); + + + TGeoHMatrix orig_combi = orig_rotation * orig_translation; + + TGeoHMatrix orig_combi_cone = orig_rotation * orig_translation_cone; + + TGeoHMatrix* origin_combi = new TGeoHMatrix(orig_combi); + + TGeoHMatrix* origin_combi_cone = new TGeoHMatrix(orig_combi_cone); + + + 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, -1600 * 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(-cone_deflection_angle*radian); + TGeoCombiTrans* ctr_sts_tube = new TGeoCombiTrans(0.3707676 * mm, 0, -1631.001 * mm, rotation_of_sts_tube); + + + TVector3 aux_vec; + + aux_vec=(1./2)*b0; + TGeoRotation* rot_b0 = new TGeoRotation("rot_b0"); + rot_b0->RotateY(beta0*radian); + TGeoCombiTrans* ctr_b0 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b0); + + aux_vec=aux_vec+(1./2)*(b0+b1); + TGeoRotation* rot_b1 = new TGeoRotation("rot_b1"); + rot_b1->RotateY(beta1*radian); + TGeoCombiTrans* ctr_b1 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b1); + + aux_vec=aux_vec+(1./2)*(b1+b2); + TGeoRotation* rot_b2 = new TGeoRotation("rot_b2"); + rot_b2->RotateY(beta2*radian); + TGeoCombiTrans* ctr_b2 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b2); + + aux_vec=aux_vec+(1./2)*(b2+b3); + TGeoRotation* rot_b3 = new TGeoRotation("rot_b3"); + rot_b3->RotateY(beta3*radian); + TGeoCombiTrans* ctr_b3 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b3); + + aux_vec=aux_vec+(1./2)*(b3+b4); + TGeoRotation* rot_b4 = new TGeoRotation("rot_b4"); + rot_b4->RotateY(beta4*radian); + TGeoCombiTrans* ctr_b4 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b4); + + aux_vec=aux_vec+(1./2)*(b4+b5); + TGeoRotation* rot_b5 = new TGeoRotation("rot_b5"); + rot_b5->RotateY(beta5*radian); + TGeoCombiTrans* ctr_b5 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b5); + + aux_vec=aux_vec+(1./2)*(b5+b6); + TGeoRotation* rot_b6 = new TGeoRotation("rot_b6"); + rot_b6->RotateY(beta6*radian); + TGeoCombiTrans* ctr_b6 = new TGeoCombiTrans(aux_vec.X(),aux_vec.Y(),aux_vec.Z(),rot_b6); + + aux_vec=aux_vec+(1./2)*(b6+pipe_vec); + TGeoRotation rot_psd_tube_loc("rot_psd_tube_loc"); + rot_psd_tube_loc.RotateY(beta6*radian); + TGeoTranslation tr_psd_tube_loc("tr_psd_tube", aux_vec.X(),aux_vec.Y(),aux_vec.Z()); + + TGeoHMatrix ctr_psd_tube_aux = orig_combi*tr_psd_tube_loc*rot_psd_tube_loc; + TGeoHMatrix* ctr_psd_tube = new TGeoHMatrix(ctr_psd_tube_aux); + + //------------------------------------DEFINITIONS OF VOLUMES---------------------------------------- + //--- make the top container volume + Double_t worldx = 800 * mm; + Double_t worldy = 220 * mm; + Double_t worldz = 18100 * mm; + TString assemblyName = "pipe_"; + assemblyName=assemblyName+geoTag; + TGeoVolumeAssembly* full_assembly = new TGeoVolumeAssembly(assemblyName); + geom->SetTopVolume(full_assembly); + full_assembly->SetVisibility(kTRUE); + TGeoVolume* conical_beam_pipe = new TGeoVolumeAssembly("conical_beam_pipe"); + conical_beam_pipe->SetVisibility(kFALSE); + + TGeoVolume* vacuum_conical_beam_pipe = new TGeoVolumeAssembly("vacuum_conical_beam_pipe"); + vacuum_conical_beam_pipe->SetVisibility(kFALSE); + + TGeoVolume* bellow_ass = new TGeoVolumeAssembly("Bellow assembly"); + bellow_ass->SetVisibility(kFALSE); + + TGeoVolume* vacuum_bellow_ass = new TGeoVolumeAssembly("Vacuum_bellow assembly"); + vacuum_bellow_ass->SetVisibility(kFALSE); + + + + + + // 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.6, 1.6); + 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); + + // VACUUM IN THE FLANGE---------------------------------------------------------------------------------------------- + TGeoTube* vacuum_flange_hole = new TGeoTube("vacuum_flange_hole", 0., 12.5, 1.5); + TGeoVolume* vacuum_downstream_flange = + new TGeoVolume("vacuum_downstream_flange", vacuum_flange_hole, Vacuum); + vacuum_downstream_flange->SetLineColor(kRed); + + // CONICAL_BEAM_PIPE---------------------------------------------------------------------------------------------------------- + TGeoCone* conus = new TGeoCone("conus", conus_lenght, conus_rmin1, conus_rmax1, conus_rmin2, conus_rmax2); + TGeoVolume* conus_volume = new TGeoVolume("conus_volume", conus, CF); + conus_volume->SetLineColor(kGray); + + //-------------------------------VACUUM IN CONE------------------------------------------------------------------- + TGeoCone* vacuum_conus = new TGeoCone("vacuum_conus", conus_lenght, 0, conus_rmin1, 0, conus_rmin2); + TGeoVolume* vacuum_conus_volume = new TGeoVolume("vacuum_conus_volume", vacuum_conus, Vacuum); + vacuum_conus_volume->SetLineColor(kGreen); + + // CONNECTING TUBE-------------------------------------------------------------------------------------------------------------------------------------------------------- + TGeoCtub* tube_connection = new TGeoCtub("tube_connection", 55. * mm, 56. * mm, 15. * mm, 0., 360., -0.022286009, 0., -0.999751636, 0., 0., 1.); + TGeoVolume* tube_connection_volume = new TGeoVolume("tube_connection_volume", tube_connection, CF); + tube_connection_volume->SetLineColor(kGray); + + //------------------------VACUUM IN THE CONNECTING TUBE-------------------------------------------------------------- + TGeoCtub* vacuum_tube_connection = new TGeoCtub("vacuum_tube_connection", 0. * mm, 55. * mm, 15. * mm, 0., 360., -0.022286009, 0., -0.999751636, 0., 0., 1.); + TGeoVolume* vacuum_tube_connection_volume = new TGeoVolume("vacuum_tube_connection_volume", vacuum_tube_connection, Vacuum); + vacuum_tube_connection_volume->SetLineColor(kGreen); + + // STS tube----------------------------------------------------------------------------------------------------- + TGeoCtub* tube_connection_sts = new TGeoCtub("tube_connection_sts", 55. * mm, 56. * mm, 15. * mm, 0., 360., 0., 0., -1., 0.011143697, 0., 0.999937907); + TGeoVolume* tube_connection_sts_volume = new TGeoVolume("tube_connection_sts_volume", tube_connection_sts, CF); + tube_connection_sts_volume->SetLineColor(kGray); + + + + + + + //-------------------------------BELLOW DEFINITION---------------------------------------------------------------- + //UPSTREAM FLANGE + TGeoBBox* flange_box = new TGeoBBox("flange_box", 15.2, 15.2, 1.5); + TGeoTube* flange_hole = new TGeoTube("flange_hole", 0., 12.5, 1.6); + + TGeoCompositeShape* flange_composite = new TGeoCompositeShape("flange_composite", "flange_box-flange_hole"); + TGeoVolume* bellow_flange_0 = new TGeoVolume("bellow_flange_0", flange_composite, CF); + bellow_flange_0->SetLineColor(kRed); + + //BELLOW SEGMENT 1 + TGeoCtub* bellow_s1 = new TGeoCtub("bellow_s1", bellow_rmin, bellow_rmax, short_segment/2-0.001, 0., 360., + n01.X(), n01.Y(), n01.Z(), n12.X(), n12.Y(), n12.Z()); + TGeoVolume* bellow_1 = new TGeoVolume("bellow_s1", bellow_s1, CF); + bellow_1->SetLineColor(kRed); + + //BELLOW SEGMENT 2 + TGeoCtub* bellow_s2 = new TGeoCtub("bellow_s2", bellow_rmin, bellow_rmax, long_segment/2-0.001, 0., 360., + n21.X(), n21.Y(), n21.Z(), n23.X(), n23.Y(), n23.Z()); + TGeoVolume* bellow_2 = new TGeoVolume("bellow_s2", bellow_s2, CF); + bellow_2->SetLineColor(kRed); + + //BELLOW SEGMENT 3 + TGeoCtub* bellow_s3 = new TGeoCtub("bellow_s3", bellow_rmin, bellow_rmax, middle_segment/2-0.001, 0., 360., + n32.X(), n32.Y(), n32.Z(), n34.X(), n34.Y(), n34.Z()); + TGeoVolume* bellow_3 = new TGeoVolume("bellow_s3", bellow_s3, CF); + bellow_3->SetLineColor(kRed); + + //BELLOW SEGMENT 4 + TGeoCtub* bellow_s4 = new TGeoCtub("bellow_s4", bellow_rmin, bellow_rmax, long_segment/2-0.001, 0., 360., + n43.X(), n43.Y(), n43.Z(), n45.X(), n45.Y(), n45.Z()); + TGeoVolume* bellow_4 = new TGeoVolume("bellow_s4", bellow_s4, CF); + bellow_4->SetLineColor(kRed); + + //BELLOW SEGMENT 5 + TGeoCtub* bellow_s5 = new TGeoCtub("bellow_s5", bellow_rmin, bellow_rmax, short_segment/2-0.001, 0., 360., + n54.X(), n54.Y(), n54.Z(), n56.X(), n56.Y(), n56.Z()); + TGeoVolume* bellow_5 = new TGeoVolume("bellow_s5", bellow_s5, CF); + bellow_5->SetLineColor(kRed); + + //DOWNSTREAM FLANGE + TGeoTube* flange_cyl = new TGeoTube("flange_cyl", 8.9, 15., 1.5); + TGeoVolume* bellow_flange_1 = new TGeoVolume("bellow_flange_1", flange_cyl, CF); + bellow_flange_1->SetLineColor(kRed); + + //-------------------------------BELLOW VACUUM DEFINITION---------------------------------------------------------------- + //VACUUM UPSTREAM FLANGE + TGeoVolume* vacuum_bellow_flange_0 = new TGeoVolume("vacuum_bellow_flange_0", vacuum_flange_hole, Vacuum); + vacuum_bellow_flange_0->SetLineColor(kGreen); + + //VACUUM BELLOW SEGMENT 1 + TGeoCtub* vacuum_bellow_s1 = new TGeoCtub("vacuum_bellow_s1", 0, bellow_rmin, short_segment/2, 0., 360., + n01.X(), n01.Y(), n01.Z(), n12.X(), n12.Y(), n12.Z()); + TGeoVolume* vacuum_bellow_1 = new TGeoVolume("vacuum_bellow_s1", vacuum_bellow_s1, Vacuum); + vacuum_bellow_1->SetLineColor(kGreen); + + //VACUUM BELLOW SEGMENT 2 + TGeoCtub* vacuum_bellow_s2 = new TGeoCtub("vacuum_bellow_s2", 0, bellow_rmin, long_segment/2, 0., 360., + n21.X(), n21.Y(), n21.Z(), n23.X(), n23.Y(), n23.Z()); + TGeoVolume* vacuum_bellow_2 = new TGeoVolume("vacuum_bellow_s2", vacuum_bellow_s2, Vacuum); + vacuum_bellow_2->SetLineColor(kGreen); + + //VACUUM BELLOW SEGMENT 3 + TGeoCtub* vacuum_bellow_s3 = new TGeoCtub("vacuum_bellow_s3", 0, bellow_rmin, middle_segment/2, 0., 360., + n32.X(), n32.Y(), n32.Z(), n34.X(), n34.Y(), n34.Z()); + TGeoVolume* vacuum_bellow_3 = new TGeoVolume("vacuum_bellow_s3", vacuum_bellow_s3, Vacuum); + vacuum_bellow_3->SetLineColor(kGreen); + + //VACUUM BELLOW SEGMENT 4 + TGeoCtub* vacuum_bellow_s4 = new TGeoCtub("vacuum_bellow_s4", 0, bellow_rmin, long_segment/2, 0., 360., + n43.X(), n43.Y(), n43.Z(), n45.X(), n45.Y(), n45.Z()); + TGeoVolume* vacuum_bellow_4 = new TGeoVolume("vacuum_bellow_s4", vacuum_bellow_s4, Vacuum); + vacuum_bellow_4->SetLineColor(kGreen); + + //VACUUM BELLOW SEGMENT 5 + TGeoCtub* vacuum_bellow_s5 = new TGeoCtub("vacuum_bellow_s5", 0, bellow_rmin, short_segment/2, 0., 360., + n54.X(), n54.Y(), n54.Z(), n56.X(), n56.Y(), n56.Z()); + TGeoVolume* vacuum_bellow_5 = new TGeoVolume("vacuum_bellow_s5", vacuum_bellow_s5, Vacuum); + vacuum_bellow_5->SetLineColor(kGreen); + + //VACUUM DOWNSTREAM FLANGE + TGeoTube* vacuum_flange_cyl_hole = new TGeoTube("vacuum_flange_cyl_hole", 0., 8.9, 1.5); + TGeoVolume* vacuum_bellow_flange_1 = new TGeoVolume("vacuum_bellow_flange_1", vacuum_flange_cyl_hole, Vacuum); + vacuum_bellow_flange_1->SetLineColor(kGreen); + + //------------------------------PSD TUBE------------------------------------------------------------------------- + TGeoTube* psd_tube_s = new TGeoTube("psd_tube_s", beam_pipe_rmin, beam_pipe_rmax, beam_pipe_length/2); + TGeoVolume* psd_tube = new TGeoVolume("psd_tube", psd_tube_s, CF); + psd_tube->SetLineColor(kGray); + + //------------------------------VACUUM PSD TUBE------------------------------------------------------------------------- + TGeoTube* vacuum_psd_tube_s = new TGeoTube("vacuum_psd_tube_s", 0. * mm, beam_pipe_rmin, beam_pipe_length/2); + TGeoVolume* vacuum_psd_tube = new TGeoVolume("vacuum_psd_tube", vacuum_psd_tube_s, Vacuum); + vacuum_psd_tube->SetLineColor(kGreen); + + + //----------------Bellow with flanges----------------------------- + bellow_ass->AddNode(bellow_flange_0, 1, ctr_b0); + bellow_ass->AddNode(bellow_1, 1, ctr_b1); + bellow_ass->AddNode(bellow_2, 1, ctr_b2); + bellow_ass->AddNode(bellow_3, 1, ctr_b3); + bellow_ass->AddNode(bellow_4, 1, ctr_b4); + bellow_ass->AddNode(bellow_5, 1, ctr_b5); + bellow_ass->AddNode(bellow_flange_1, 1, ctr_b6); + + //----------------Vacuum in bellow and flanges----------------------------- + vacuum_bellow_ass->AddNode(vacuum_bellow_flange_0, 1, ctr_b0); + vacuum_bellow_ass->AddNode(vacuum_bellow_1, 1, ctr_b1); + vacuum_bellow_ass->AddNode(vacuum_bellow_2, 1, ctr_b2); + vacuum_bellow_ass->AddNode(vacuum_bellow_3, 1, ctr_b3); + vacuum_bellow_ass->AddNode(vacuum_bellow_4, 1, ctr_b4); + vacuum_bellow_ass->AddNode(vacuum_bellow_5, 1, ctr_b5); + vacuum_bellow_ass->AddNode(vacuum_bellow_flange_1, 1, ctr_b6); + + //-------------------CONICAL section-------------------------------------------------- + conical_beam_pipe->AddNode(rich_much_downstream_flange, 1, new TGeoTranslation(0, 0, 1570 * mm)); + conical_beam_pipe->AddNode(conus_volume, 1, new TGeoTranslation(0, 0, 0)); + conical_beam_pipe->AddNode(tube_connection_volume, 1, ctr_sts_conus_connection); + // conical_beam_pipe->AddNode(tube_connection_sts_volume, 1, ctr_sts_tube); //inset in STS box - omitted; if used, needs some fine tunning + + //-------------------VACUUM in CONICAL section-------------------------------------------------- + vacuum_conical_beam_pipe->AddNode(vacuum_conus_volume, 1, new TGeoTranslation(0, 0, 0)); + vacuum_conical_beam_pipe->AddNode(vacuum_tube_connection_volume, 1, ctr_sts_conus_connection); + + + + + //------------------INSERT into top volume + full_assembly->AddNode(conical_beam_pipe, 1, origin_combi_cone); + full_assembly->AddNode(vacuum_conical_beam_pipe, 1, origin_combi_cone); + full_assembly->AddNode(bellow_ass, 1, origin_combi); + full_assembly->AddNode(vacuum_bellow_ass, 1, origin_combi); + full_assembly->AddNode(psd_tube, 1, ctr_psd_tube); + full_assembly->AddNode(vacuum_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 = TFile::Open(geo_bin_filename, "RECREATE"); + + geom->GetTopVolume()->Write(geo_name); // outputting on the top volume + TGeoTranslation* trans = new TGeoTranslation(0.0, 0.0, 79.0003); // pushing the beampipe to touch the STS + trans->Write("trans"); + cout << endl; + cout << "Geometry " << geom->GetTopVolume()->GetName() << " written to " << geo_bin_filename << endl; + binfile->Close(); + //--- close the geometry + geom->CloseGeometry(); + // gGeoManager->CheckOverlaps(0.000000001); + // gGeoManager->GetListOfOverlaps()->Print(); +} + + diff --git a/pipe/pipe_v24e.geo.info b/pipe/pipe_v24e.geo.info new file mode 100644 index 0000000000000000000000000000000000000000..3c2f8fa72890256c83a1deb4ed01f41641b330c2 --- /dev/null +++ b/pipe/pipe_v24e.geo.info @@ -0,0 +1,7 @@ +Created by macro: macro/pipe/fair/create_bpipe_geometry_gen.C +Parameters: geoTag=v24e, beam_deflection_angle=1.89 + +The downstream section has maximum deflection at the bellows. + +May be used for low beam energies from 5 AGeV gold-gold collisions +at 100% MF and below. diff --git a/pipe/pipe_v24e.geo.root b/pipe/pipe_v24e.geo.root new file mode 100644 index 0000000000000000000000000000000000000000..fcf176e64c9805f07f20636aedc885e53fd0f12d Binary files /dev/null and b/pipe/pipe_v24e.geo.root differ diff --git a/pipe/pipe_v24f.geo.info b/pipe/pipe_v24f.geo.info new file mode 100644 index 0000000000000000000000000000000000000000..6d8feda317365216a9ef4e3617becc40da2b1537 --- /dev/null +++ b/pipe/pipe_v24f.geo.info @@ -0,0 +1,4 @@ +Created by macro: macro/pipe/fair/create_bpipe_geometry_gen.C +Parameters: geoTag=v24f, beam_deflection_angle=0 + +Configuration for 0% MF diff --git a/pipe/pipe_v24f.geo.root b/pipe/pipe_v24f.geo.root new file mode 100644 index 0000000000000000000000000000000000000000..681edbb3875f8a752fdcdb49c29c2b2d8b78be19 Binary files /dev/null and b/pipe/pipe_v24f.geo.root differ diff --git a/pipe/pipe_v24h.geo.info b/pipe/pipe_v24h.geo.info new file mode 100644 index 0000000000000000000000000000000000000000..6f1e64e4f46c7d36c7b76eb3b234430246d70b98 --- /dev/null +++ b/pipe/pipe_v24h.geo.info @@ -0,0 +1,4 @@ +Created by macro: macro/pipe/fair/create_bpipe_geometry_gen.C +Parameters: geoTag=v24h, beam_deflection_angle=0.98 + +Configuration for gold ions with T=11 AGeV, (P=12 AGeV/c) and 100% MF diff --git a/pipe/pipe_v24h.geo.root b/pipe/pipe_v24h.geo.root new file mode 100644 index 0000000000000000000000000000000000000000..bffc1deb6c18fd3872a50dc0e02111a03048d414 Binary files /dev/null and b/pipe/pipe_v24h.geo.root differ diff --git a/pipe/pipe_v24i.geo.info b/pipe/pipe_v24i.geo.info new file mode 100644 index 0000000000000000000000000000000000000000..5c9b96e4cd5cc6934aa8ecb4bbe0c58689ac7e10 --- /dev/null +++ b/pipe/pipe_v24i.geo.info @@ -0,0 +1,4 @@ +Created by macro: macro/pipe/fair/create_bpipe_geometry_gen.C +Parameters: geoTag=v24i, beam_deflection_angle=1.05 + +Configuration for gold ions with T=10 AGeV, (P=11 AGeV/c) and 100% MF diff --git a/pipe/pipe_v24i.geo.root b/pipe/pipe_v24i.geo.root new file mode 100644 index 0000000000000000000000000000000000000000..ec5eef1e9a54f5b1116450426a530988059d24b5 Binary files /dev/null and b/pipe/pipe_v24i.geo.root differ