Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:20

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef FUN4ALLRAW_FUN4ALLPRDFINPUTTRIGGERMANAGER_H
0004 #define FUN4ALLRAW_FUN4ALLPRDFINPUTTRIGGERMANAGER_H
0005 
0006 #include "InputManagerType.h"
0007 
0008 #include <fun4all/Fun4AllInputManager.h>
0009 
0010 #include <Event/phenixTypes.h>
0011 
0012 #include <map>
0013 #include <set>
0014 #include <string>
0015 #include <utility>
0016 #include <vector>
0017 
0018 class Event;
0019 class SinglePrdfInput;
0020 class CaloPacket;
0021 class Gl1Packet;
0022 class LL1Packet;
0023 class PHCompositeNode;
0024 class SingleTriggerInput;
0025 class SyncObject;
0026 class OfflinePacket;
0027 
0028 class Fun4AllPrdfInputTriggerManager : public Fun4AllInputManager
0029 {
0030  public:
0031   Fun4AllPrdfInputTriggerManager(const std::string &name = "DUMMY", const std::string &prdfnodename = "PRDF", const std::string &topnodename = "TOP");
0032   ~Fun4AllPrdfInputTriggerManager() override;
0033 
0034   int fileopen(const std::string & /* filenam */) override { return 0; }
0035   // cppcheck-suppress virtualCallInConstructor
0036   int fileclose() override;
0037   int run(const int nevents = 0) override;
0038 
0039   void Print(const std::string &what = "ALL") const override;
0040   int ResetEvent() override;
0041   int PushBackEvents(const int i) override;
0042   int GetSyncObject(SyncObject **mastersync) override;
0043   int SyncIt(const SyncObject *mastersync) override;
0044   int HasSyncObject() const override { return 1; }
0045   std::string GetString(const std::string &what) const override;
0046   void registerTriggerInput(SingleTriggerInput *prdfin, InputManagerType::enu_subsystem system);
0047   void UpdateEventFoundCounter(const int evtno);
0048   void UpdateDroppedPacket(const int packetid);
0049   void AddBeamClock(const int evtno, const int bclk, SinglePrdfInput *prdfin);
0050   void SetReferenceClock(const int evtno, const int bclk);
0051   void DitchEvent(const int eventno);
0052   void ClearAllEvents(const int eventno);
0053   void SetPoolDepth(unsigned int d) { m_DefaultPoolDepth = d; }
0054   int FillCemc(const unsigned int nEvents = 2);
0055   int MoveCemcToNodeTree();
0056   void AddCemcPacket(int eventno, CaloPacket *pkt);
0057   int FillGl1(const unsigned int nEvents = 2);
0058   int MoveGl1ToNodeTree();
0059   void AddGl1Packet(int eventno, Gl1Packet *gl1pkt);
0060   int FillLL1(const unsigned int nEvents = 2);
0061   int MoveLL1ToNodeTree();
0062   void AddLL1Packet(int eventno, LL1Packet *pkt);
0063   int FillMbd(const unsigned int nEvents = 2);
0064   int MoveMbdToNodeTree();
0065   void AddMbdPacket(int eventno, CaloPacket *mbdpkt);
0066   int FillHcal(const unsigned int nEvents = 2);
0067   int MoveHcalToNodeTree();
0068   void AddHcalPacket(int eventno, CaloPacket *pkt);
0069   int FillZdc(const unsigned int nEvents = 2);
0070   int MoveZdcToNodeTree();
0071   void AddZdcPacket(int eventno, CaloPacket *pkt);
0072   // the sepd is read together with the zdc in the FillZdc method
0073   int MoveSEpdToNodeTree();
0074   void AddSEpdPacket(int eventno, CaloPacket *pkt);
0075   void InitialPoolDepth(unsigned int n)
0076   {
0077     m_InitialPoolDepth = n;
0078     m_PoolDepth = n;
0079   }
0080   void DetermineReferenceEventNumber();
0081   void ClockDiffFill();
0082   int ClockDiffCheck();
0083   void Resync(bool b = true) { m_resync_flag = b; }
0084   void AddGl1DroppedEvent(int iev) { m_Gl1DroppedEvent.insert(iev); }
0085   void AddFEMProblemPacket(int i) { m_FEMClockPackets.insert(i); }
0086 
0087  private:
0088   struct Gl1PacketInfo
0089   {
0090     std::map<int, Gl1Packet *> Gl1SinglePacketMap;
0091     std::map<int, uint64_t> BcoDiffMap;
0092     unsigned int EventFoundCounter{0};
0093   };
0094 
0095   struct CaloPacketInfo
0096   {
0097     std::map<int, CaloPacket *> CaloSinglePacketMap;
0098     std::map<int, uint64_t> BcoDiffMap;
0099     unsigned int EventFoundCounter{0};
0100   };
0101   int FillNeedle(std::map<int, CaloPacketInfo>::iterator begin, std::map<int, CaloPacketInfo>::iterator end, const std::string &name = "NONE");
0102   int ShiftEvents(std::map<int, CaloPacketInfo> &PacketInfoMap, std::map<int, int> &eventoffset, const std::string &name = "NONE");
0103   int AdjustBcoDiff(std::map<int, CaloPacketInfo> &PacketInfoMap, int packetid, uint64_t bcodiff);
0104   int DropFirstEvent(std::map<int, CaloPacketInfo> &PacketInfoMap);
0105 
0106   struct LL1PacketInfo
0107   {
0108     std::map<int, LL1Packet *> LL1SinglePacketMap;
0109     std::map<int, uint64_t> BcoDiffMap;
0110     unsigned int EventFoundCounter{0};
0111   };
0112   int FillNeedleLL1(std::map<int, LL1PacketInfo>::iterator begin, std::map<int, LL1PacketInfo>::iterator end, const std::string &name = "NONE");
0113   int ShiftEventsLL1(std::map<int, LL1PacketInfo> &PacketInfoMap, std::map<int, int> &eventoffset, const std::string &name = "NONE");
0114   int AdjustBcoDiffLL1(std::map<int, LL1PacketInfo> &PacketInfoMap, int packetid, uint64_t bcodiff);
0115   int DropFirstEventLL1(std::map<int, LL1PacketInfo> &PacketInfoMap);
0116 
0117   int m_RunNumber{0};
0118   int m_RefEventNo{std::numeric_limits<int>::min()};
0119   bool m_gl1_registered_flag{false};
0120   bool m_mbd_registered_flag{false};
0121   bool m_cemc_registered_flag{false};
0122   bool m_hcal_registered_flag{false};
0123   bool m_ll1_registered_flag{false};
0124   bool m_zdc_registered_flag{false};
0125   bool m_resync_flag{false};
0126   unsigned int m_InitialPoolDepth = 10;
0127   unsigned int m_DefaultPoolDepth = 10;
0128   unsigned int m_PoolDepth{m_InitialPoolDepth};
0129   std::set<int> m_Gl1DroppedEvent;
0130   std::vector<SingleTriggerInput *> m_TriggerInputVector;
0131   std::vector<SingleTriggerInput *> m_NoGl1InputVector;
0132   std::vector<SingleTriggerInput *> m_Gl1InputVector;
0133   std::vector<SingleTriggerInput *> m_CemcInputVector;
0134   std::vector<SingleTriggerInput *> m_HcalInputVector;
0135   std::vector<SingleTriggerInput *> m_LL1InputVector;
0136   std::vector<SingleTriggerInput *> m_MbdInputVector;
0137   std::vector<SingleTriggerInput *> m_SEpdInputVector;
0138   std::vector<SingleTriggerInput *> m_ZdcInputVector;
0139   SyncObject *m_SyncObject{nullptr};
0140   PHCompositeNode *m_topNode{nullptr};
0141   std::map<int, Gl1PacketInfo> m_Gl1PacketMap;
0142   std::map<int, CaloPacketInfo> m_MbdPacketMap;
0143   std::map<int, CaloPacketInfo> m_CemcPacketMap;
0144   std::map<int, CaloPacketInfo> m_HcalPacketMap;
0145   std::map<int, LL1PacketInfo> m_LL1PacketMap;
0146   std::map<int, CaloPacketInfo> m_SEpdPacketMap;
0147   std::map<int, CaloPacketInfo> m_ZdcPacketMap;
0148   std::map<int, int> m_DroppedPacketMap;
0149   std::map<int, std::vector<std::pair<int, SinglePrdfInput *>>> m_ClockCounters;
0150   std::map<int, int> m_RefClockCounters;
0151   std::vector<uint64_t> m_HayStack;
0152   std::map<int, std::vector<uint64_t>> m_NeedleMap;
0153   std::set<int> m_FEMClockPackets;
0154 };
0155 
0156 #endif /* FUN4ALL_FUN4ALLPRDFINPUTPOOLMANAGER_H */