File indexing completed on 2025-08-06 08:19:31
0001 #include "PHG4TpcEndCapSubsystem.h"
0002
0003 #include "PHG4TpcEndCapDetector.h"
0004 #include "PHG4TpcEndCapDisplayAction.h"
0005 #include "PHG4TpcEndCapSteppingAction.h"
0006
0007 #include <phparameter/PHParameters.h>
0008
0009 #include <g4detectors/PHG4DetectorSubsystem.h> // for PHG4DetectorSubsystem
0010
0011 #include <g4main/PHG4DisplayAction.h> // for PHG4DisplayAction
0012 #include <g4main/PHG4HitContainer.h>
0013 #include <g4main/PHG4SteppingAction.h>
0014
0015 #include <phool/PHCompositeNode.h>
0016 #include <phool/PHIODataNode.h>
0017 #include <phool/PHNode.h>
0018 #include <phool/PHNodeIterator.h>
0019 #include <phool/PHObject.h>
0020 #include <phool/getClass.h>
0021
0022
0023 PHG4TpcEndCapSubsystem::PHG4TpcEndCapSubsystem(const std::string &name)
0024 : PHG4DetectorSubsystem(name)
0025 {
0026
0027
0028 InitializeParameters();
0029 }
0030
0031 PHG4TpcEndCapSubsystem::~PHG4TpcEndCapSubsystem()
0032 {
0033 delete m_DisplayAction;
0034 }
0035
0036
0037 int PHG4TpcEndCapSubsystem::InitRunSubsystem(PHCompositeNode *topNode)
0038 {
0039 PHNodeIterator iter(topNode);
0040 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0041
0042
0043 m_DisplayAction = new PHG4TpcEndCapDisplayAction(Name());
0044
0045
0046 m_Detector = new PHG4TpcEndCapDetector(this, topNode, GetParams(), Name());
0047 m_Detector->SuperDetector(SuperDetector());
0048 m_Detector->OverlapCheck(CheckOverlap());
0049 m_Detector->Verbosity(Verbosity());
0050
0051 if (GetParams()->get_int_param("active"))
0052 {
0053 PHNodeIterator dstIter(dstNode);
0054 PHCompositeNode *DetNode = dstNode;
0055 if (SuperDetector() != "NONE" && !SuperDetector().empty())
0056 {
0057 PHNodeIterator iter_dst(dstNode);
0058 DetNode = dynamic_cast<PHCompositeNode *>(iter_dst.findFirst("PHCompositeNode", SuperDetector()));
0059
0060 if (!DetNode)
0061 {
0062 DetNode = new PHCompositeNode(SuperDetector());
0063 dstNode->addNode(DetNode);
0064 }
0065 }
0066 std::string detector_suffix = SuperDetector();
0067 if (detector_suffix == "NONE" || detector_suffix.empty())
0068 {
0069 detector_suffix = Name();
0070 }
0071 m_HitNodeName = "G4HIT_" + detector_suffix;
0072 PHG4HitContainer *g4_hits = findNode::getClass<PHG4HitContainer>(DetNode, m_HitNodeName);
0073 if (!g4_hits)
0074 {
0075 g4_hits = new PHG4HitContainer(m_HitNodeName);
0076 DetNode->addNode(new PHIODataNode<PHObject>(g4_hits, m_HitNodeName, "PHObject"));
0077 }
0078 }
0079
0080 if (GetParams()->get_int_param("active"))
0081 {
0082 m_SteppingAction = new PHG4TpcEndCapSteppingAction(m_Detector, GetParams());
0083 m_SteppingAction->SetHitNodeName("G4HIT", m_HitNodeName);
0084 }
0085 return 0;
0086 }
0087
0088 int PHG4TpcEndCapSubsystem::process_event(PHCompositeNode *topNode)
0089 {
0090
0091
0092 if (m_SteppingAction)
0093 {
0094 m_SteppingAction->SetInterfacePointers(topNode);
0095 }
0096 return 0;
0097 }
0098
0099 void PHG4TpcEndCapSubsystem::Print(const std::string &what) const
0100 {
0101 if (m_Detector)
0102 {
0103 m_Detector->Print(what);
0104 }
0105 return;
0106 }
0107
0108
0109 PHG4Detector *PHG4TpcEndCapSubsystem::GetDetector() const
0110 {
0111 return m_Detector;
0112 }
0113
0114
0115 void PHG4TpcEndCapSubsystem::SetDefaultParameters()
0116 {
0117 set_default_int_param("construction_verbosity", 0);
0118
0119
0120
0121
0122 set_default_double_param("place_x", 0.);
0123 set_default_double_param("place_y", 0.);
0124 set_default_double_param("place_z", 0.);
0125 set_default_double_param("rot_x", 0.);
0126 set_default_double_param("rot_y", 0.);
0127 set_default_double_param("rot_z", 0.);
0128
0129 set_default_double_param("envelop_r_min", 20.);
0130 set_default_double_param("envelop_r_max", 76.27);
0131 set_default_double_param("envelop_front_surface_z", 211. / 2.);
0132
0133 set_default_int_param("n_GEM_layers", 4);
0134
0135 const double inch_to_cm = 2.54;
0136
0137 set_default_int_param("n_sectors", 12);
0138 set_default_int_param("n_radial_modules", 3);
0139
0140 set_default_string_param("wagon_wheel_material", "G4_Al");
0141
0142 set_default_double_param("wagon_wheel_sector_phi_offset_degree", 360. / 12. / 2.);
0143
0144 set_default_double_param("wagon_wheel_front_frame_thickness", inch_to_cm * .38);
0145 set_default_double_param("wagon_wheel_front_frame_spoke_width", inch_to_cm * 1.12);
0146
0147 set_default_double_param("wagon_wheel_front_frame_R_inner", inch_to_cm * 15.74 / 2.);
0148 set_default_double_param("wagon_wheel_front_frame_R_outer", inch_to_cm * 30.7);
0149
0150 set_default_double_param("wagon_wheel_front_frame_R_R1_inner", inch_to_cm * 9.81);
0151 set_default_double_param("wagon_wheel_front_frame_R_R1_outer", inch_to_cm * 15.47);
0152
0153 set_default_double_param("wagon_wheel_front_frame_R_R2_inner", inch_to_cm * 16.59);
0154 set_default_double_param("wagon_wheel_front_frame_R_R2_outer", inch_to_cm * 22.24);
0155
0156 set_default_double_param("wagon_wheel_front_frame_R_R3_inner", inch_to_cm * 23.36);
0157 set_default_double_param("wagon_wheel_front_frame_R_R3_outer", inch_to_cm * 29.02);
0158
0159 set_default_double_param("wagon_wheel_rim_outer_Rin", inch_to_cm * 29.58);
0160 set_default_double_param("wagon_wheel_rim_outer_Rout", inch_to_cm * 60.49 / 2.);
0161 set_default_double_param("wagon_wheel_rim_outer_thickness", inch_to_cm * (4.5 - .38));
0162
0163 set_default_double_param("wagon_wheel_spoke_width", inch_to_cm * .36);
0164 set_default_double_param("wagon_wheel_spoke_height_inner", inch_to_cm * (1.715 - .38));
0165 set_default_double_param("wagon_wheel_spoke_height_outer", inch_to_cm * (4.5 - .38));
0166 set_default_double_param("wagon_wheel_spoke_R_inner", inch_to_cm * 9);
0167 set_default_double_param("wagon_wheel_spoke_R_outer", inch_to_cm * 29.5);
0168
0169 set_default_int_param("electronics_enable", 1);
0170 set_default_int_param("electronics_nFEE_R1", 6);
0171 set_default_int_param("electronics_nFEE_R2", 8);
0172 set_default_int_param("electronics_nFEE_R3", 12);
0173
0174
0175 set_default_double_param("electronics_FEE_depth", inch_to_cm * 5.57);
0176 set_default_double_param("electronics_FEE_Cu_thickness", 35e-4 * 10 * .8);
0177 set_default_double_param("electronics_FEE_PCB_thickness", inch_to_cm * 0.07);
0178 set_default_double_param("electronics_FEE_Al_thickness", inch_to_cm * .13);
0179
0180 set_default_string_param("electronics_cooling_block_material", "G4_Al");
0181 set_default_double_param("electronics_cooling_block_thickness", inch_to_cm * 3.5);
0182
0183 set_default_double_param("electronics_cooling_block_R_inner", inch_to_cm * 9.26);
0184 set_default_double_param("electronics_cooling_block_R_outer", inch_to_cm * 29.57);
0185
0186 set_default_double_param("electronics_cooling_block_R_R1_inner", inch_to_cm * 9.81);
0187 set_default_double_param("electronics_cooling_block_R_R1_outer", inch_to_cm * 15.47);
0188
0189 set_default_double_param("electronics_cooling_block_R_R2_inner", inch_to_cm * 16.59);
0190 set_default_double_param("electronics_cooling_block_R_R2_outer", inch_to_cm * 22.24);
0191
0192 set_default_double_param("electronics_cooling_block_R_R3_inner", inch_to_cm * 23.36);
0193 set_default_double_param("electronics_cooling_block_R_R3_outer", inch_to_cm * 29.02);
0194 }