File indexing completed on 2025-08-05 08:17:51
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "PHG4PSTOFSubsystem.h"
0012 #include "PHG4PSTOFDetector.h"
0013 #include "PHG4PSTOFSteppingAction.h"
0014
0015 #include <phparameter/PHParameters.h>
0016 #include <phparameter/PHParametersContainer.h>
0017
0018 #include <g4main/PHG4HitContainer.h>
0019 #include <g4main/PHG4SteppingAction.h> // for PHG4SteppingAction
0020
0021 #include <phool/PHCompositeNode.h>
0022 #include <phool/PHIODataNode.h> // for PHIODataNode
0023 #include <phool/PHNode.h> // for PHNode
0024 #include <phool/PHNodeIterator.h> // for PHNodeIterator
0025 #include <phool/PHObject.h> // for PHObject
0026 #include <phool/getClass.h>
0027
0028 #include <set> // for set
0029 #include <sstream>
0030
0031
0032 PHG4PSTOFSubsystem::PHG4PSTOFSubsystem(const std::string &name)
0033 : PHG4DetectorGroupSubsystem(name)
0034 {
0035 InitializeParameters();
0036 Name(name);
0037 SuperDetector(name);
0038 }
0039
0040
0041 int PHG4PSTOFSubsystem::InitRunSubsystem(PHCompositeNode *topNode)
0042 {
0043 PHNodeIterator iter(topNode);
0044 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0045
0046
0047 detector_ = new PHG4PSTOFDetector(this, topNode, GetParamsContainer(), Name());
0048 detector_->SuperDetector(SuperDetector());
0049 detector_->OverlapCheck(CheckOverlap());
0050
0051 if (GetParamsContainer()->GetParameters(-1)->get_int_param("active"))
0052 {
0053 std::set<std::string> nodes;
0054 PHNodeIterator dstIter(dstNode);
0055 PHCompositeNode *DetNode = dynamic_cast<PHCompositeNode *>(dstIter.findFirst("PHCompositeNode", SuperDetector()));
0056 if (!DetNode)
0057 {
0058 DetNode = new PHCompositeNode(SuperDetector());
0059 dstNode->addNode(DetNode);
0060 }
0061 std::ostringstream nodename;
0062 if (SuperDetector() != "NONE")
0063 {
0064 nodename << "G4HIT_" << SuperDetector();
0065 }
0066 else
0067 {
0068 nodename << "G4HIT_" << Name();
0069 }
0070 nodes.insert(nodename.str());
0071 for (auto &node : nodes)
0072 {
0073 PHG4HitContainer *g4_hits = findNode::getClass<PHG4HitContainer>(topNode, node);
0074 if (!g4_hits)
0075 {
0076 g4_hits = new PHG4HitContainer(node);
0077 DetNode->addNode(new PHIODataNode<PHObject>(g4_hits, node, "PHObject"));
0078 }
0079 }
0080
0081 steppingAction_ = new PHG4PSTOFSteppingAction(detector_, GetParamsContainer());
0082 steppingAction_->Init();
0083 }
0084
0085 return 0;
0086 }
0087
0088
0089 int PHG4PSTOFSubsystem::process_event(PHCompositeNode *topNode)
0090 {
0091
0092
0093 if (steppingAction_)
0094 {
0095 steppingAction_->SetInterfacePointers(topNode);
0096 }
0097 return 0;
0098 }
0099
0100 void PHG4PSTOFSubsystem::Print(const std::string &what) const
0101 {
0102
0103 PrintDefaultParams();
0104 PrintMacroParams();
0105 GetParamsContainer()->Print();
0106 if (detector_)
0107 {
0108 detector_->Print(what);
0109 }
0110 return;
0111 }
0112
0113
0114 PHG4Detector *PHG4PSTOFSubsystem::GetDetector() const
0115 {
0116 return detector_;
0117 }
0118
0119
0120 PHG4SteppingAction *PHG4PSTOFSubsystem::GetSteppingAction() const
0121 {
0122 return steppingAction_;
0123 }
0124
0125 void PHG4PSTOFSubsystem::SetDefaultParameters()
0126 {
0127 set_default_double_param(0, "z_mod_0", -109.3);
0128 set_default_double_param(1, "z_mod_0", -96.66);
0129 set_default_double_param(2, "z_mod_0", -84.42);
0130 set_default_double_param(3, "z_mod_0", -72.55);
0131 set_default_double_param(4, "z_mod_0", -61.07);
0132 set_default_double_param(5, "z_mod_0", -49.97);
0133 set_default_double_param(6, "z_mod_0", -39.25);
0134 set_default_double_param(7, "z_mod_0", -28.72);
0135 set_default_double_param(8, "z_mod_0", -18.76);
0136 set_default_double_param(9, "z_mod_0", -9.191);
0137 set_default_double_param(10, "z_mod_0", 0);
0138 set_default_double_param(11, "z_mod_0", 9.191);
0139 set_default_double_param(12, "z_mod_0", 18.76);
0140 set_default_double_param(13, "z_mod_0", 28.72);
0141 set_default_double_param(14, "z_mod_0", 39.25);
0142 set_default_double_param(15, "z_mod_0", 49.97);
0143 set_default_double_param(16, "z_mod_0", 61.07);
0144 set_default_double_param(17, "z_mod_0", 72.55);
0145 set_default_double_param(18, "z_mod_0", 84.42);
0146 set_default_double_param(19, "z_mod_0", 96.66);
0147 set_default_double_param(20, "z_mod_0", 109.3);
0148
0149 set_default_double_param(0, "z_mod_1", -107.2);
0150 set_default_double_param(1, "z_mod_1", -94.66);
0151 set_default_double_param(2, "z_mod_1", -82.52);
0152 set_default_double_param(3, "z_mod_1", -70.75);
0153 set_default_double_param(4, "z_mod_1", -59.37);
0154 set_default_double_param(5, "z_mod_1", -48.47);
0155 set_default_double_param(6, "z_mod_1", -37.85);
0156 set_default_double_param(7, "z_mod_1", -27.72);
0157 set_default_double_param(8, "z_mod_1", -18.76);
0158 set_default_double_param(9, "z_mod_1", -9.191);
0159 set_default_double_param(10, "z_mod_1", 0);
0160 set_default_double_param(11, "z_mod_1", 9.191);
0161 set_default_double_param(12, "z_mod_1", 18.76);
0162 set_default_double_param(13, "z_mod_1", 27.72);
0163 set_default_double_param(14, "z_mod_1", 37.85);
0164 set_default_double_param(15, "z_mod_1", 48.47);
0165 set_default_double_param(16, "z_mod_1", 59.37);
0166 set_default_double_param(17, "z_mod_1", 70.75);
0167 set_default_double_param(18, "z_mod_1", 82.52);
0168 set_default_double_param(19, "z_mod_1", 94.66);
0169 set_default_double_param(20, "z_mod_1", 107.2);
0170
0171 set_default_double_param(0, "r_mod_0", 85.6);
0172 set_default_double_param(1, "r_mod_0", 85.6);
0173 set_default_double_param(2, "r_mod_0", 85.6);
0174 set_default_double_param(3, "r_mod_0", 85.6);
0175 set_default_double_param(4, "r_mod_0", 86);
0176 set_default_double_param(5, "r_mod_0", 86.5);
0177 set_default_double_param(6, "r_mod_0", 86.5);
0178 set_default_double_param(7, "r_mod_0", 86.5);
0179 set_default_double_param(8, "r_mod_0", 85.5);
0180 set_default_double_param(9, "r_mod_0", 83.6);
0181 set_default_double_param(10, "r_mod_0", 87.5);
0182 set_default_double_param(11, "r_mod_0", 83.6);
0183 set_default_double_param(12, "r_mod_0", 85.5);
0184 set_default_double_param(13, "r_mod_0", 86.5);
0185 set_default_double_param(14, "r_mod_0", 86.5);
0186 set_default_double_param(15, "r_mod_0", 86.5);
0187 set_default_double_param(16, "r_mod_0", 86);
0188 set_default_double_param(17, "r_mod_0", 85.6);
0189 set_default_double_param(18, "r_mod_0", 85.6);
0190 set_default_double_param(19, "r_mod_0", 85.6);
0191 set_default_double_param(20, "r_mod_0", 85.6);
0192
0193 set_default_double_param(0, "r_mod_1", 85.3);
0194 set_default_double_param(1, "r_mod_1", 85.2);
0195 set_default_double_param(2, "r_mod_1", 84.9);
0196 set_default_double_param(3, "r_mod_1", 84.8);
0197 set_default_double_param(4, "r_mod_1", 85.1);
0198 set_default_double_param(5, "r_mod_1", 85);
0199 set_default_double_param(6, "r_mod_1", 85);
0200 set_default_double_param(7, "r_mod_1", 84.8);
0201 set_default_double_param(8, "r_mod_1", 83.8);
0202 set_default_double_param(9, "r_mod_1", 81.9);
0203 set_default_double_param(10, "r_mod_1", 85.8);
0204 set_default_double_param(11, "r_mod_1", 81.9);
0205 set_default_double_param(12, "r_mod_1", 83.8);
0206 set_default_double_param(13, "r_mod_1", 84.8);
0207 set_default_double_param(14, "r_mod_1", 85);
0208 set_default_double_param(15, "r_mod_1", 85);
0209 set_default_double_param(16, "r_mod_1", 85.1);
0210 set_default_double_param(17, "r_mod_1", 84.8);
0211 set_default_double_param(18, "r_mod_1", 84.9);
0212 set_default_double_param(19, "r_mod_1", 85.2);
0213 set_default_double_param(20, "r_mod_1", 85.3);
0214
0215
0216
0217
0218
0219 set_default_int_param(-1, "modules", 21);
0220 set_default_int_param(-1, "rows", 56);
0221 set_default_double_param(-1, "xsize", 0.8);
0222 set_default_double_param(-1, "ysize", 6.);
0223 set_default_double_param(-1, "zsize", 5.);
0224 set_default_int_param(-1, "active", 1);
0225 set_default_int_param(-1, "absorberactive", 0);
0226 }