File indexing completed on 2025-08-03 08:18:12
0001 #ifndef G4CALO_RAWTOWERBUILDER_H
0002 #define G4CALO_RAWTOWERBUILDER_H
0003
0004 #include <fun4all/SubsysReco.h>
0005
0006 #include <g4detectors/PHG4CellDefs.h>
0007
0008 #include <cmath>
0009 #include <string>
0010
0011 class PHCompositeNode;
0012 class RawTowerContainer;
0013 class RawTowerGeomContainer;
0014
0015 class RawTowerBuilder : public SubsysReco
0016 {
0017 public:
0018 RawTowerBuilder(const std::string &name = "RawTowerBuilder");
0019 ~RawTowerBuilder() override = default;
0020 int InitRun(PHCompositeNode *topNode) override;
0021 int process_event(PHCompositeNode *topNode) override;
0022 void Detector(const std::string &d) { m_Detector = d; }
0023 void EminCut(const double e) { m_Emin = e; }
0024 void checkenergy(const int i = 1) { m_ChkEnergyConservationFlag = i; }
0025 enum enu_tower_energy_src
0026 {
0027
0028 kEnergyDeposition,
0029
0030 kLightYield
0031 };
0032 enum ProcessTowerType
0033 {
0034 kRawTowerOnly= 0,
0035 kTowerInfoOnly = 1,
0036 kBothTowers =2
0037 };
0038
0039
0040 enu_tower_energy_src
0041 get_tower_energy_src() const
0042 {
0043 return m_TowerEnergySrcEnum;
0044 }
0045
0046 void
0047 set_tower_energy_src(enu_tower_energy_src towerEnergySrc)
0048 {
0049 m_TowerEnergySrcEnum = towerEnergySrc;
0050 }
0051
0052 const std::string
0053 &get_sim_tower_node_prefix() const
0054 {
0055 return m_SimTowerNodePrefix;
0056 }
0057
0058 void
0059 set_sim_tower_node_prefix(const std::string &simTowerNodePrefix)
0060 {
0061 m_SimTowerNodePrefix = simTowerNodePrefix;
0062 }
0063
0064 void set_towerinfo(RawTowerBuilder::ProcessTowerType UseTowerInfo )
0065 {
0066 m_UseTowerInfo = UseTowerInfo;
0067 }
0068
0069 protected:
0070 void CreateNodes(PHCompositeNode *topNode);
0071
0072 RawTowerContainer *m_TowerContainer {nullptr};
0073
0074 RawTowerGeomContainer *m_RawTowerGeomContainer {nullptr};
0075
0076 std::string m_Detector = "NONE";
0077 std::string m_TowerNodeName;
0078 std::string m_TowerInfoNodeName;
0079 std::string m_TowerGeomNodeName;
0080 std::string m_SimTowerNodePrefix;
0081
0082 enu_tower_energy_src m_TowerEnergySrcEnum {kLightYield};
0083 int m_CellBinning {PHG4CellDefs::undefined};
0084 int m_ChkEnergyConservationFlag {0};
0085 int m_NumLayers {-1};
0086 int m_NumPhiBins {-1};
0087 int m_NumEtaBins {-1};
0088 double m_Emin {1e-6};
0089 double m_EtaMin {std::numeric_limits<double>::quiet_NaN()};
0090 double m_PhiMin {std::numeric_limits<double>::quiet_NaN()};
0091 double m_EtaStep {std::numeric_limits<double>::quiet_NaN()};
0092 double m_PhiStep {std::numeric_limits<double>::quiet_NaN()};
0093 RawTowerBuilder::ProcessTowerType m_UseTowerInfo {RawTowerBuilder::ProcessTowerType::kBothTowers};
0094 };
0095
0096 #endif