Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:18:06

0001 #include "PHG4InttSubsystem.h"
0002 #include "PHG4InttDefs.h"
0003 #include "PHG4InttDetector.h"
0004 #include "PHG4InttDisplayAction.h"
0005 #include "PHG4InttSteppingAction.h"
0006 
0007 #include <g4detectors/PHG4DetectorGroupSubsystem.h>  // for PHG4DetectorGrou...
0008 #include <phparameter/PHParameters.h>
0009 #include <phparameter/PHParametersContainer.h>
0010 
0011 #include <g4main/PHG4DisplayAction.h>  // for PHG4DisplayAction
0012 #include <g4main/PHG4HitContainer.h>
0013 #include <g4main/PHG4SteppingAction.h>  // for PHG4SteppingAction
0014 
0015 #include <phool/PHCompositeNode.h>
0016 #include <phool/PHIODataNode.h>    // for PHIODataNode
0017 #include <phool/PHNode.h>          // for PHNode
0018 #include <phool/PHNodeIterator.h>  // for PHNodeIterator
0019 #include <phool/PHObject.h>        // for PHObject
0020 #include <phool/getClass.h>
0021 
0022 #include <iostream>     // for operator<<, basi...
0023 #include <set>          // for _Rb_tree_const_i...
0024 #include <type_traits>  // for __decay_and_stri...
0025 
0026 class PHG4Detector;
0027 
0028 //_______________________________________________________________________
0029 PHG4InttSubsystem::PHG4InttSubsystem(const std::string &detectorname, const vpair &layerconfig)
0030   : PHG4DetectorGroupSubsystem(detectorname)
0031   , m_LayerConfigVector(layerconfig)
0032   , m_DetectorType(detectorname)
0033 {
0034   for (const auto &piter : layerconfig)
0035   {
0036     AddDetId(piter.second);
0037   }
0038 
0039   InitializeParameters();
0040   // put the layer into the name so we get unique names
0041   // for multiple layers
0042   Name(detectorname);
0043   SuperDetector(detectorname);
0044 }
0045 
0046 PHG4InttSubsystem::~PHG4InttSubsystem()
0047 {
0048   delete m_DisplayAction;
0049 }
0050 
0051 //_______________________________________________________________________
0052 int PHG4InttSubsystem::InitRunSubsystem(PHCompositeNode *topNode)
0053 {
0054   if (Verbosity() > 0)
0055   {
0056     std::cout << "PHG4InttSubsystem::Init started" << std::endl;
0057   }
0058 
0059   PHNodeIterator iter(topNode);
0060   PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0061 
0062   // create display settings before detector (detector adds its volumes to it)
0063   m_DisplayAction = new PHG4InttDisplayAction(Name());
0064   // create detector
0065   std::pair<std::vector<std::pair<int, int>>::const_iterator, std::vector<std::pair<int, int>>::const_iterator> layer_begin_end = std::make_pair(m_LayerConfigVector.begin(), m_LayerConfigVector.end());
0066   m_Detector = new PHG4InttDetector(this, topNode, GetParamsContainer(), Name(), layer_begin_end);
0067   m_Detector->Verbosity(Verbosity());
0068   m_Detector->SuperDetector(SuperDetector());
0069   m_Detector->Detector(m_DetectorType);
0070   m_Detector->OverlapCheck(CheckOverlap());
0071   m_Detector->useSurveyGeometry(m_UseSurveyGeometry);
0072 
0073   int active = 0;
0074   // initialize with support active flag (if support is active we need the absorber hit node)
0075   int absorberactive = GetParamsContainer()->GetParameters(PHG4InttDefs::SUPPORTPARAMS)->get_int_param("supportactive");
0076   int blackhole = 0;
0077   for (std::set<int>::const_iterator parcontaineriter = GetDetIds().first; parcontaineriter != GetDetIds().second; ++parcontaineriter)
0078   {
0079     if (active || GetParamsContainer()->GetParameters(*parcontaineriter)->get_int_param("active"))
0080     {
0081       active = 1;
0082     }
0083     if (absorberactive || GetParamsContainer()->GetParameters(*parcontaineriter)->get_int_param("absorberactive") || GetParamsContainer()->GetParameters(*parcontaineriter)->get_int_param("supportactive"))
0084     {
0085       absorberactive = 1;
0086     }
0087     if (blackhole || GetParamsContainer()->GetParameters(*parcontaineriter)->get_int_param("blackhole"))
0088     {
0089       blackhole = 1;
0090     }
0091   }
0092   std::set<std::string> nodes;
0093   if (active)
0094   {
0095     PHNodeIterator dstIter(dstNode);
0096     PHCompositeNode *DetNode = dstNode;
0097     if (SuperDetector() != "NONE" && !SuperDetector().empty())
0098     {
0099       PHNodeIterator iter_dst(dstNode);
0100       DetNode = dynamic_cast<PHCompositeNode *>(iter_dst.findFirst("PHCompositeNode", SuperDetector()));
0101       if (!DetNode)
0102       {
0103         DetNode = new PHCompositeNode(SuperDetector());
0104         dstNode->addNode(DetNode);
0105       }
0106     }
0107     // create hit output nodes
0108     std::string detector_suffix = SuperDetector();
0109     if (detector_suffix == "NONE" || detector_suffix.empty())
0110     {
0111       detector_suffix = Name();
0112     }
0113     m_HitNodeName = "G4HIT_" + detector_suffix;
0114     nodes.insert(m_HitNodeName);
0115     m_AbsorberNodeName = "G4HIT_ABSORBER_" + detector_suffix;
0116     if (absorberactive)
0117     {
0118       nodes.insert(m_AbsorberNodeName);
0119     }
0120     for (const auto &nodename : nodes)
0121     {
0122       PHG4HitContainer *g4_hits = findNode::getClass<PHG4HitContainer>(topNode, nodename);
0123       if (!g4_hits)
0124       {
0125         g4_hits = new PHG4HitContainer(nodename);
0126         DetNode->addNode(new PHIODataNode<PHObject>(g4_hits, nodename, "PHObject"));
0127       }
0128     }
0129     // create stepping action
0130     m_SteppingAction = new PHG4InttSteppingAction(m_Detector, GetParamsContainer(), layer_begin_end);
0131     m_SteppingAction->Verbosity(Verbosity());
0132     m_SteppingAction->SetHitNodeName("G4HIT", m_HitNodeName);
0133     m_SteppingAction->SetHitNodeName("G4HIT_ABSORBER", m_AbsorberNodeName);
0134   }
0135   else
0136   {
0137     if (blackhole)
0138     {
0139       m_SteppingAction = new PHG4InttSteppingAction(m_Detector, GetParamsContainer(), layer_begin_end);
0140     }
0141   }
0142 
0143   return 0;
0144 }
0145 
0146 //_______________________________________________________________________
0147 int PHG4InttSubsystem::process_event(PHCompositeNode *topNode)
0148 {
0149   // pass top node to stepping action so that it gets
0150   // relevant nodes needed internally
0151   if (m_SteppingAction)
0152   {
0153     m_SteppingAction->SetInterfacePointers(topNode);
0154   }
0155 
0156   return 0;
0157 }
0158 
0159 //_______________________________________________________________________
0160 PHG4Detector *PHG4InttSubsystem::GetDetector() const
0161 {
0162   return m_Detector;
0163 }
0164 
0165 void PHG4InttSubsystem::SetDefaultParameters()
0166 {
0167   int laddertype[4] = {PHG4InttDefs::SEGMENTATION_PHI,
0168                        PHG4InttDefs::SEGMENTATION_PHI,
0169                        PHG4InttDefs::SEGMENTATION_PHI,
0170                        PHG4InttDefs::SEGMENTATION_PHI};  // default
0171 
0172   int nladder[4] = {12, 12, 16, 16};
0173   double sensor_radius[4] = {7.188 - 36e-4, 7.732 - 36e-4, 9.680 - 36e-4, 10.262 - 36e-4};
0174   double offsetphi[4] = {-0.5 * 360.0 / nladder[0], 0.0, -0.5 * 360.0 / nladder[2], 0.0};
0175 
0176   // This was the original code block; I am leaving it here as a comment in case any of the changes need to be reverted
0177   // // We have only two types of ladders, one with vertical strips (SEGMENTATION_Z) and one with horizontal strips (SEGMENTATION_PHI)set
0178   // // There are 4 sensors in each ladder
0179   // //     In ladder type 0 the sensor is special and inner and outer sensors are the same.
0180   // //     In ladder type 1 there are two different sensor types, inner and outer
0181   // // We do not want to hard code the ladder types for the layers
0182 
0183   // // We define default ladder types for 8 layers, but these can be changed at the macro level
0184 
0185   // int laddertype[8] = {PHG4InttDefs::SEGMENTATION_Z,
0186   //                      PHG4InttDefs::SEGMENTATION_Z,
0187   //                      PHG4InttDefs::SEGMENTATION_PHI,
0188   //                      PHG4InttDefs::SEGMENTATION_PHI,
0189   //                      PHG4InttDefs::SEGMENTATION_PHI,
0190   //                      PHG4InttDefs::SEGMENTATION_PHI,
0191   //                      PHG4InttDefs::SEGMENTATION_PHI,
0192   //                      PHG4InttDefs::SEGMENTATION_PHI};  // default
0193 
0194   // int nladder[8] = {17, 17, 12, 12, 16, 16, 21, 21};  // default, new 03/05/2020
0195 
0196   // double sensor_radius[8] = {6.876, 7.462,
0197   //                            // 4 elements are those for PHG4InttDefs::SEGMENTATION_PHI, 36um subtracted to set si sensors at the place
0198   //                            // these subtractions are due to different thickness of glue for the sensors (14um) and the FPHX chips (50um)
0199   //                            7.188 - 36e-4, 7.732 - 36e-4, 9.680 - 36e-4, 10.262 - 36e-4,
0200   //                            12.676, 13.179};  // radius of center of sensor for layer default, new 30/05/2020
0201 
0202   // double offsetphi[4] = {-0.5 * 360.0 / nladder[0+2], 0.0, -0.5 * 360.0 / nladder[2+2], 0.0 }; // the final configuration, July/09/202
0203 
0204   auto detid = GetDetIds();  // get pair of iterators to begin/end of set<int> of detids
0205   for (auto detiter = detid.first; detiter != detid.second; ++detiter)
0206   {
0207     set_default_int_param(*detiter, "active", 1);
0208 
0209     // To reconfigure the layers, all you have to do is overide the defaults for these four arrays from the tracking macro
0210     set_default_int_param(*detiter, "laddertype", laddertype[*detiter]);
0211     set_default_int_param(*detiter, "nladder", nladder[*detiter]);  // ladders per layer
0212     set_default_double_param(*detiter, "sensor_radius", sensor_radius[*detiter]);
0213     // These offsets should be kept at zero in the new design
0214     //  set_default_double_param(*detiter, "offsetphi", 0.);// obsolete
0215     set_default_double_param(*detiter, "offsetphi", offsetphi[*detiter]);
0216     set_default_double_param(*detiter, "offsetrot", 0.);
0217 
0218     //  sitrack->set_int_param(i, "laddertype", laddertype[i]);
0219   }
0220 
0221   // These are the parameters that describe the internal ladder geometry for the two ladder types
0222   // SEGMENTATION_Z //////////////////////////////////////
0223   // int param
0224   set_default_int_param(PHG4InttDefs::SEGMENTATION_Z, "nstrips_phi_cell", 1);
0225   set_default_int_param(PHG4InttDefs::SEGMENTATION_Z, "nstrips_phi_sensor", 1);
0226   set_default_int_param(PHG4InttDefs::SEGMENTATION_Z, "nstrips_z_sensor_0", 128 * 5);
0227   set_default_int_param(PHG4InttDefs::SEGMENTATION_Z, "nstrips_z_sensor_1", 128 * 5);
0228 
0229   // double param
0230   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "fphx_x", 0.032);
0231   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "fphx_y", 0.27);
0232   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "fphx_z", 0.91);
0233   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "fphx_offset_z", 0.005);
0234   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "gap_sensor_fphx", 0.1);
0235   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "halfladder_z", 40.00);
0236   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "halfladder_inside_z", 23.28);  // previous 23.9622
0237   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "hdi_copper_x", 0.0052);
0238   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "hdi_edge_z", 0.);
0239   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "hdi_kapton_x", 0.038);
0240   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "hdi_y", 2.55);
0241   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "pgs_x", 0.02);
0242   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "sensor_edge_phi", 0.13);
0243   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "sensor_edge_z", 0.1);
0244   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "sensor_offset_y", 0.304);
0245   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "strip_x", 0.032);
0246   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "strip_y", 1.6);
0247   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "strip_z_0", 0.01406);
0248   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "strip_z_1", 0.01406);
0249   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "stave_straight_cooler_x", 0.01905);
0250   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "stave_straight_cooler_y", 0.47);
0251   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "stave_slant_cooler_y", 1.4362);
0252   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "stave_straight_outer_y", 0.672);
0253   set_default_double_param(PHG4InttDefs::SEGMENTATION_Z, "stave_straight_rohacell_y", 0.57181);
0254 
0255   // SEGMENTATION_PHI //////////////////////////////////////
0256   // int param
0257   set_default_int_param(PHG4InttDefs::SEGMENTATION_PHI, "nstrips_phi_cell", 256);
0258   set_default_int_param(PHG4InttDefs::SEGMENTATION_PHI, "nstrips_phi_sensor", 256);
0259   set_default_int_param(PHG4InttDefs::SEGMENTATION_PHI, "nstrips_z_sensor_0", 8);
0260   set_default_int_param(PHG4InttDefs::SEGMENTATION_PHI, "nstrips_z_sensor_1", 5);
0261 
0262   // double param
0263   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "fphx_x", 0.032);
0264   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "fphx_y", 0.27);
0265   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "fphx_z", 0.91);
0266   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "fphx_offset_z", 0.005);
0267   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "gap_sensor_fphx", 0.1);
0268 
0269   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "si_glue_x", 0.0014);   // 14 um, don't forget to change double sensor_radius when it's changed
0270   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "fphx_glue_x", 0.005);  // 50 um
0271 
0272   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "halfladder_z", 40.00);
0273   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "halfladder_inside_z", 23.28);  // previous 23.9622
0274 
0275   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "hdi_copper_x", 0.00376);
0276   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "hdi_edge_z", 0.);
0277   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "hdi_kapton_x", 0.038);
0278   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "hdi_y", 3.8);
0279 
0280   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "sensor_edge_phi", 0.13);
0281   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "sensor_edge_z", 0.1);
0282   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "sensor_offset_y", 0.);
0283   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "strip_x", 0.032);
0284   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "strip_y", 0.0078);
0285   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "strip_z_0", 1.6);
0286   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "strip_z_1", 2.);
0287 
0288   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "stave_straight_cooler_x", 0.03);
0289   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "stave_straight_cooler_y", 1.47684);
0290 
0291   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "stave_slant_cooler_y", 0.6322614829);
0292 
0293   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "stave_straight_outer_y", 0.33227);
0294   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "stave_straight_rohacell_y", 0.58842);
0295 
0296   // Average shift of the whole INTT barrel in the z direction
0297   set_default_double_param(PHG4InttDefs::SEGMENTATION_PHI, "ladder_center_avgshift_z", -4.724503928571429 / 10.);  // unit: cm
0298 
0299   // SUPPORTPARAMS //////////////////////////////////////
0300   // int param
0301   set_default_int_param(PHG4InttDefs::SUPPORTPARAMS, "supportactive", 0);
0302 
0303   // double param
0304   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_inner_radius", 6.2416);
0305   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_length",      50.7   );
0306   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_outer_radius", 6.2666);
0307   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_inner_radius", 12.9667 / 2);
0308   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_outer_radius", 13.0175 / 2);
0309   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "inner_skin_length", 49.7);
0310 
0311   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcin_inner_radius", 12.0444);
0312   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcin_outer_radius", 12.0694);
0313   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcin_length",       50.7   );
0314 
0315   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_foam_inner_radius", 12.0694);
0316   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_foam_outer_radius", 12.2194);
0317   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_foam_length",       50.7   );
0318 
0319   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcout_inner_radius", 12.2194);
0320   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcout_outer_radius", 12.2444);
0321   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_cfcout_length",       50.7   );
0322 
0323   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_inner_radius", 23.4950 / 2);
0324   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_outer_radius", 23.5458 / 2);
0325   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "outer_skin_length", 49.7);
0326 
0327   // Endcap ring flag
0328   set_default_int_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_ring_enabled", 1);
0329   set_default_int_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_ring_type", 2);  // 0: Al+SS+WG, 1 : CarbonPEEK, 2(default) : new  model Jan/2021
0330 
0331   // Aluminum endcap ring position
0332   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_ring_x", 0.4026857142857132 / 10.);  // unit: mm, the center positions of the metal and CF rings in XY plane, calculated from the survey data
0333   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_ring_y", -2.886627321428573 / 10.);  // unit: mm, the center positions of the metal and CF rings in XY plane, calculated from the survey data
0334   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_ring_z", 24.35);
0335 
0336   // Aluminum endcap ring
0337   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_Alring_inner_radius", 6.267);
0338   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_Alring_outer_radius", 12.0444);
0339   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_Alring_length", 0.3645);
0340 
0341   // Stainless steel endcap ring
0342   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_SSring_inner_radius", 6.267);
0343   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_SSring_outer_radius", 12.0444);
0344   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_SSring_length", 0.0047);
0345 
0346   // Water Glycol endcap ring
0347   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_WGring_inner_radius", 6.267);
0348   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_WGring_outer_radius", 12.0444);
0349   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_WGring_length", 0.0186);
0350 
0351   // CarbonPEEK endcap ring position
0352   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_CPring_z", 24.4185);
0353 
0354   // CarbonPEEK endcap ring position
0355   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_CPring_inner_radius", 6.6675);
0356   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_CPring_outer_radius", 11.43);
0357   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_CPring_length", 0.6370);
0358 
0359   ////////////////////////////////////////////////////////////////////////////////////////
0360   // the new endcap model
0361   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_z", 24.4185);
0362 
0363   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_1_outer_radius", 11.7375);  // outer radius of the outermost part
0364   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_1_inner_radius", 11.0683);  // inner radius of the outermost part
0365   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Cring_1_outer_radius", 10.6826);   // outer radius of the 2nd outermost part
0366   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Cring_1_inner_radius", 10.0984);   // inner radius of the 2nd outermost part
0367   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_2_outer_radius", 9.7227);   // outer radius of the 3rd outermost part, slightly shrinked from the reeeal drawing of 9.6971 cm to avoid overwlapping
0368   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_2_inner_radius", 8.5485);   // inner radius of the 3rd outermost part, slightly shrinked from the reeeal drawing of 9.6971 cm to avoid overwlapping
0369   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Cring_2_outer_radius", 8.1852);    // outer radius of the 4th outermost part
0370   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Cring_2_inner_radius", 7.6518);    // inner radius of the 4th outermost part
0371   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_3_outer_radius", 7.2886);   // outer radius of the 5th outermost part, slightly shrinked from the real drawing of 7.2045 cm to avoid overlapping
0372   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_3_inner_radius", 6.5188);   // inner radius of the 5th outermost (=the outer most) part
0373 
0374   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Alring_length", 0.625 / 2.);  // unit: cm, previously 0.75
0375   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "endcap_AlPEEK_Cring_length", 0.75);         // unit: cm, previous 0.5
0376 
0377   ////////////////////////////////////////////////////////////////////////////////////////
0378   // Survice barrel, outer
0379   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "service_barrel_outer_inner_radius", 33.02 / 2);
0380   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "service_barrel_outer_outer_radius", 33.34 / 2);
0381   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "service_barrel_outer_length", 273.69);
0382 
0383   ////////////////////////////////////////////////////////////////////////////////////////
0384   // Support tube
0385   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "support_tube_inner_radius", 37.47 / 2);
0386   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "support_tube_outer_radius", 38.10 / 2);
0387   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "support_tube_length", 273.69);
0388 
0389   // Cylinders for the bus extenders
0390   set_default_int_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender", 1);                           // 0: OFF, 1: ON
0391   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender_length", 111.0);             // in cm
0392   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender_ends_at", 328.5);            // z-coordinate in cm where the bus extender ends at
0393   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender_radius", 15.0);              // radius of the innermost layer (copper for the inner barrel)
0394   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender_copper_x", 48.0e-4 * 1.5);   // thickness of the copper layer of the bus extenders in cm, it's 48 um
0395   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "bus_extender_kapton_x", 300.0e-4 * 1.5);  // thickness of the kapton layer of the bus extenders in cm, it's 300 um
0396 
0397   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_dphi", 90.);  // deg
0398   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_inner_radius", 0.45);
0399   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_length", 410);  // tpc length
0400   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_length",     20   );  // tpc length
0401   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_outer_radius", 0.6);
0402   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_phi_start", 45.);  // deg
0403   // set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_radius",     16.85 );
0404   set_default_double_param(PHG4InttDefs::SUPPORTPARAMS, "rail_radius", (33.34 + 0.6 * 2) / 2);  // tentativevalue
0405 
0406   return;
0407 }
0408 
0409 void PHG4InttSubsystem::Print(const std::string & /*what*/) const
0410 {
0411   PrintDefaultParams();
0412   std::cout << std::endl
0413             << "------" << std::endl;
0414   PrintMacroParams();
0415   std::cout << std::endl
0416             << "------" << std::endl
0417             << std::endl;
0418   GetParamsContainer()->Print();
0419 }