Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:58

0001 
0002 void MagnetInit() {}
0003 
0004 double Magnet(PHG4Reco* g4Reco,
0005               double radius,
0006               const int crossings = 0,
0007               const int absorberactive = 0,
0008               int verbosity = 0) {
0009 
0010   double magnet_inner_cryostat_wall_radius = 142;
0011   double magnet_inner_cryostat_wall_thickness = 1;
0012   double magnet_outer_cryostat_wall_radius = 174.5;
0013   double magnet_outer_cryostat_wall_thickness = 2.5;
0014   double magnet_coil_radius = 150.8;
0015   double magnet_coil_thickness = 9.38;
0016   double magnet_length = 379.;
0017   double coil_length = 361.5;
0018   if (radius > magnet_inner_cryostat_wall_radius) {
0019     cout << "inconsistency: radius: " << radius
0020          << " larger than Magnet inner radius: " << magnet_inner_cryostat_wall_radius << endl;
0021     gSystem->Exit(-1);
0022   }
0023 
0024   gSystem->Load("libg4detectors.so");
0025   gSystem->Load("libg4testbench.so");
0026 
0027   radius = magnet_inner_cryostat_wall_radius;
0028   PHG4CylinderSubsystem *cyl = new PHG4CylinderSubsystem("MAGNET", 0);
0029   cyl->set_double_param("radius",magnet_inner_cryostat_wall_radius);
0030   cyl->set_int_param("lengthviarapidity",0);
0031   cyl->set_double_param("length",magnet_length);
0032   cyl->set_double_param("thickness",magnet_inner_cryostat_wall_thickness);
0033   cyl->set_string_param("material","Al5083"); // use 1 radiation length Al for magnet thickness
0034   cyl->SuperDetector("MAGNET");
0035   if (absorberactive)  cyl->SetActive();
0036   g4Reco->registerSubsystem( cyl );
0037 
0038   cyl = new PHG4CylinderSubsystem("MAGNET", 1);
0039   cyl->set_double_param("radius",magnet_coil_radius);
0040   cyl->set_int_param("lengthviarapidity",0);
0041   cyl->set_double_param("length",coil_length);
0042   cyl->set_double_param("thickness",magnet_coil_thickness);
0043   cyl->set_string_param("material","Al5083"); // use 1 radiation length Al for magnet thickness
0044   cyl->SuperDetector("MAGNET");
0045   if (absorberactive)  cyl->SetActive();
0046   g4Reco->registerSubsystem( cyl );
0047 
0048   cyl = new PHG4CylinderSubsystem("MAGNET", 2);
0049   cyl->set_double_param("radius",magnet_outer_cryostat_wall_radius);
0050   cyl->set_int_param("lengthviarapidity",0);
0051   cyl->set_double_param("length",magnet_length);
0052   cyl->set_double_param("thickness",magnet_outer_cryostat_wall_thickness);
0053   cyl->set_string_param("material","Al5083"); // use 1 radiation length Al for magnet thickness
0054   cyl->SuperDetector("MAGNET");
0055   if (absorberactive)  cyl->SetActive();
0056   g4Reco->registerSubsystem( cyl );
0057 
0058   radius = magnet_outer_cryostat_wall_radius + magnet_outer_cryostat_wall_thickness; // outside of magnet
0059 
0060   if (verbosity > 0) {
0061     cout << "========================= G4_Magnet.C::Magnet() ===========================" << endl;
0062     cout << " MAGNET Material Description:" << endl;
0063     cout << "  inner radius = " << magnet_inner_cryostat_wall_radius << " cm" << endl;
0064     cout << "  outer radius = " << magnet_outer_cryostat_wall_radius + magnet_outer_cryostat_wall_thickness << " cm" << endl;
0065     cout << "  length = " << magnet_length << " cm" << endl;
0066     cout << "===========================================================================" << endl;
0067   }
0068 
0069   radius += no_overlapp;
0070 
0071   return radius;
0072 }