Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:59

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
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};      //! Calo info
0118   TowerInfoContainer *m_CalowaveformContainer{nullptr};  // waveform from simulation
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  // CALOTOWERBUILDER_H