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