File indexing completed on 2025-08-06 08:17:20
0001
0002
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 & ) override { return 0; }
0035
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
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