Back to home page

sPhenix code displayed by LXR

 
 

    


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     //! save Geant4 energy deposition as the weight of the cells
0028     kEnergyDeposition,
0029     //! save light yield as the weight of the cells
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   /* TowerInfoContainer *m_TowerInfoContainer = nullptr; */
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};  // 0 just produce RawTowers, 1 just produce TowerInfo objects, and 2 produce both
0094 };
0095 
0096 #endif  // G4CALO_RAWTOWERBUILDER_H