Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:16:17

0001 #ifndef FUN4ALLRAW_SINGLESTREAMINGINPUT_H
0002 #define FUN4ALLRAW_SINGLESTREAMINGINPUT_H
0003 
0004 #include <fun4all/Fun4AllBase.h>
0005 #include <fun4all/InputFileHandler.h>
0006 
0007 #include <cstdint>  // for uint64_t
0008 #include <map>
0009 #include <set>
0010 #include <string>
0011 
0012 class Eventiterator;
0013 class Fun4AllEvtInputPoolManager;
0014 class Fun4AllStreamingInputManager;
0015 class PHCompositeNode;
0016 
0017 class SingleStreamingInput : public Fun4AllBase, public InputFileHandler
0018 {
0019  public:
0020   explicit SingleStreamingInput(const std::string &name);
0021   ~SingleStreamingInput() override;
0022   virtual Eventiterator *GetEventIterator() { return m_EventIterator; }
0023   virtual void FillPool(const uint64_t) { return; }
0024   virtual void FillPool(const unsigned int = 1) { return; }
0025   virtual void RunNumber(const int runno) { m_RunNumber = runno; }
0026   virtual int RunNumber() const { return m_RunNumber; }
0027   virtual int fileopen(const std::string &filename) override;
0028   virtual int fileclose() override;
0029   virtual int AllDone() const { return m_AllDone; }
0030   virtual void AllDone(const int i) { m_AllDone = i; }
0031   virtual void EventNumberOffset(const int i) { m_EventNumberOffset = i; }
0032   virtual void Print(const std::string &what = "ALL") const override;
0033 
0034   //! remove used packets matching a given BCO from internal container
0035   virtual void CleanupUsedPackets(const uint64_t /*BCO*/) {}
0036 
0037   //! remove used packets matching a given BCO from internal container
0038   /**
0039    * second parameter is to specify whether BCO has been
0040    * - succesfully processed or
0041    * - is dropped
0042    */
0043   virtual void CleanupUsedPackets(const uint64_t /*BCO*/ ,bool /*dropped*/) {}
0044 
0045   virtual bool CheckPoolDepth(const uint64_t bclk);
0046   virtual void ClearCurrentEvent();
0047   virtual Eventiterator *GetEventiterator() const { return m_EventIterator; }
0048   virtual Fun4AllStreamingInputManager *StreamingInputManager() { return m_StreamingInputMgr; }
0049   virtual void StreamingInputManager(Fun4AllStreamingInputManager *in) { m_StreamingInputMgr = in; }
0050   virtual void CreateDSTNode(PHCompositeNode *) { return; }
0051   virtual void ConfigureStreamingInputManager() { return; }
0052   virtual void SubsystemEnum(const int id) { m_SubsystemEnum = id; }
0053   virtual int SubsystemEnum() const { return m_SubsystemEnum; }
0054   void MaxBclkDiff(uint64_t ui) { m_MaxBclkSpread = ui; }
0055   uint64_t MaxBclkDiff() const { return m_MaxBclkSpread; }
0056   virtual const std::map<int, std::set<uint64_t>> &BclkStackMap() const { return m_BclkStackPacketMap; }
0057   virtual const std::set<uint64_t> &BclkStack() const { return m_BclkStack; }
0058   virtual const std::map<uint64_t, std::set<int>> &BeamClockFEE() const { return m_BeamClockFEE; }
0059   void setHitContainerName(const std::string &name) { m_rawHitContainerName = name; }
0060   const std::string &getHitContainerName() const { return m_rawHitContainerName; }
0061   const std::map<int, std::set<uint64_t>> &getFeeGTML1BCOMap() const { return m_FeeGTML1BCOMap; }
0062 
0063   void SetStandaloneMode(bool mode) { m_standalone_mode = mode; }
0064   bool IsStandaloneMode() const { return m_standalone_mode; }  
0065   //! event assembly QA histograms
0066   virtual void createQAHistos() {}
0067 
0068   //! event assembly QA for a given BCO
0069   /** TODO: check whether necessary */
0070   virtual void FillBcoQA(uint64_t /*gtm_bco*/) {};
0071 
0072   void clearPacketBClkStackMap(const uint64_t& bclk)
0073 
0074   {
0075     for(auto& [packetid, set] : m_BclkStackPacketMap)
0076     {
0077     
0078       for(auto it = set.begin(); it != set.end();)
0079     {
0080       if(*it <= bclk)
0081       {
0082         it = set.erase(it);
0083       }
0084       else
0085       {
0086         ++it;
0087       }
0088     }
0089     }
0090   }
0091   void clearFeeGTML1BCOMap(const uint64_t &bclk)
0092   {
0093     for (auto &[key, set] : m_FeeGTML1BCOMap)
0094     {
0095       for(auto it = set.begin(); it != set.end();)
0096       {
0097         if(*it <= bclk)
0098         {
0099           it = set.erase(it);
0100         }
0101         else
0102         {
0103           ++it;
0104         }
0105       }
0106       
0107     }
0108   }
0109 
0110  protected:
0111   std::map<int, std::set<uint64_t>> m_BclkStackPacketMap;
0112   std::map<int, std::set<uint64_t>> m_FeeGTML1BCOMap;
0113   std::string m_rawHitContainerName = "";
0114   bool m_standalone_mode = false;
0115 
0116  private:
0117   Eventiterator *m_EventIterator{nullptr};
0118   //  Fun4AllEvtInputPoolManager *m_InputMgr {nullptr};
0119   Fun4AllStreamingInputManager *m_StreamingInputMgr{nullptr};
0120   uint64_t m_MaxBclkSpread{1000000};
0121   unsigned int m_EventNumberOffset{1};  // packet event counters start at 0 but we start with event number 1
0122   int m_RunNumber{0};
0123   int m_EventsThisFile{0};
0124   int m_AllDone{0};
0125   int m_SubsystemEnum{0};
0126   std::map<uint64_t, std::set<int>> m_BeamClockFEE;
0127   std::map<int, uint64_t> m_FEEBclkMap;
0128   std::set<uint64_t> m_BclkStack;
0129 };
0130 
0131 #endif