File indexing completed on 2025-08-03 08:16:59
0001
0002
0003 #ifndef CALORECO_CALOTOWERBUILDER_H
0004 #define CALORECO_CALOTOWERBUILDER_H
0005
0006 #include "CaloTowerDefs.h"
0007 #include "CaloWaveformProcessing.h"
0008
0009 #include <cdbobjects/CDBTTree.h> // for CDBTTree
0010
0011 #include <fun4all/SubsysReco.h>
0012
0013 #include <limits>
0014 #include <string>
0015
0016 class CaloWaveformProcessing;
0017 class PHCompositeNode;
0018 class TowerInfoContainer;
0019 class TowerInfoContainerv3;
0020
0021 class CaloTowerBuilder : public SubsysReco
0022 {
0023 public:
0024 explicit CaloTowerBuilder(const std::string &name = "CaloTowerBuilder");
0025 ~CaloTowerBuilder() override;
0026
0027 int InitRun(PHCompositeNode *topNode) override;
0028 int process_event(PHCompositeNode *topNode) override;
0029
0030 void CreateNodeTree(PHCompositeNode *topNode);
0031
0032 int process_data(PHCompositeNode *topNode, std::vector<std::vector<float>> &waveforms);
0033
0034 void set_detector_type(CaloTowerDefs::DetectorSystem dettype)
0035 {
0036 m_dettype = dettype;
0037 return;
0038 }
0039
0040 void set_builder_type(CaloTowerDefs::BuilderType buildertype)
0041 {
0042 m_buildertype = buildertype;
0043 return;
0044 }
0045
0046 void set_nsamples(int _nsamples)
0047 {
0048 m_nsamples = _nsamples;
0049 return;
0050 }
0051 void set_dataflag(bool flag)
0052 {
0053 m_isdata = flag;
0054 return;
0055 }
0056
0057 void set_processing_type(CaloWaveformProcessing::process processingtype)
0058 {
0059 _processingtype = processingtype;
0060 }
0061
0062 void set_softwarezerosuppression(bool usezerosuppression, int softwarezerosuppression)
0063 {
0064 m_nsoftwarezerosuppression = softwarezerosuppression;
0065 m_bdosoftwarezerosuppression = usezerosuppression;
0066 }
0067
0068 void set_inputNodePrefix(const std::string &name)
0069 {
0070 m_inputNodePrefix = name;
0071 return;
0072 }
0073
0074 void set_outputNodePrefix(const std::string &name)
0075 {
0076 m_outputNodePrefix = name;
0077 return;
0078 }
0079
0080 void set_offlineflag(const bool f = true)
0081 {
0082 m_UseOfflinePacketFlag = f;
0083 }
0084 void set_timeFitLim(float low, float high)
0085 {
0086 m_setTimeLim = true;
0087 m_timeLim_low = low;
0088 m_timeLim_high = high;
0089 return;
0090 }
0091
0092 void set_bitFlipRecovery(bool dobitfliprecovery)
0093 {
0094 m_dobitfliprecovery = dobitfliprecovery;
0095 }
0096
0097 void set_tbt_softwarezerosuppression(const std::string &url)
0098 {
0099 m_zsURL = url;
0100 m_dotbtszs = true;
0101 return;
0102 }
0103
0104 void set_zs_fieldname(const std::string &fieldname)
0105 {
0106 m_zs_fieldname = fieldname;
0107 return;
0108 }
0109
0110 CaloWaveformProcessing *get_WaveformProcessing() { return WaveformProcessing; }
0111
0112 private:
0113 int process_sim();
0114 bool skipChannel(int ich, int pid);
0115 static bool isSZS(float time, float chi2);
0116 CaloWaveformProcessing *WaveformProcessing{nullptr};
0117 TowerInfoContainer *m_CaloInfoContainer{nullptr};
0118 TowerInfoContainer *m_CalowaveformContainer{nullptr};
0119 CDBTTree *cdbttree = nullptr;
0120 CDBTTree *cdbttree_sepd_map = nullptr;
0121 CDBTTree *cdbttree_tbt_zs = nullptr;
0122
0123 bool m_isdata{true};
0124 bool m_bdosoftwarezerosuppression{false};
0125 bool m_UseOfflinePacketFlag{false};
0126 bool m_dotbtszs{false};
0127 bool m_PacketNodesFlag{false};
0128 int m_packet_low{std::numeric_limits<int>::min()};
0129 int m_packet_high{std::numeric_limits<int>::min()};
0130 int m_nsamples{16};
0131 int m_nchannels{192};
0132 int m_nzerosuppsamples{2};
0133 int m_nsoftwarezerosuppression{40};
0134 CaloTowerDefs::DetectorSystem m_dettype{CaloTowerDefs::CEMC};
0135 CaloTowerDefs::BuilderType m_buildertype{CaloTowerDefs::kPRDFTowerv1};
0136 CaloWaveformProcessing::process _processingtype{CaloWaveformProcessing::NONE};
0137 std::string m_detector{"CEMC"};
0138 std::string m_inputNodePrefix{"WAVEFORM_"};
0139 std::string m_outputNodePrefix{"TOWERS_"};
0140 std::string TowerNodeName;
0141 bool m_setTimeLim{false};
0142 float m_timeLim_low{-3.0};
0143 float m_timeLim_high{4.0};
0144 bool m_dobitfliprecovery{false};
0145
0146 int m_saturation{16383};
0147 std::string calibdir;
0148 std::string m_fieldname;
0149 std::string m_calibName;
0150 std::string m_directURL;
0151 std::string m_zsURL;
0152 std::string m_zs_fieldname{"zs_threshold"};
0153 };
0154
0155 #endif