File indexing completed on 2025-08-06 08:17:22
0001 #include "SingleGl1TriggeredInput.h"
0002
0003 #include "Fun4AllPrdfInputTriggerManager.h"
0004 #include "InputManagerType.h"
0005
0006 #include <ffarawobjects/Gl1Packetv3.h>
0007
0008 #include <fun4all/Fun4AllReturnCodes.h>
0009
0010 #include <phool/PHCompositeNode.h>
0011 #include <phool/PHIODataNode.h> // for PHIODataNode
0012 #include <phool/PHNode.h> // for PHNode
0013 #include <phool/PHNodeIterator.h> // for PHNodeIterator
0014 #include <phool/PHObject.h> // for PHObject
0015 #include <phool/getClass.h>
0016 #include <phool/phool.h>
0017
0018 #include <Event/Event.h>
0019 #include <Event/EventTypes.h>
0020 #include <Event/Eventiterator.h>
0021 #include <Event/packet.h> // for Packet
0022
0023 #include <TSystem.h>
0024
0025 #include <cstdint> // for uint64_t
0026 #include <iostream> // for operator<<, basic_ostream<...
0027 #include <iterator> // for reverse_iterator
0028 #include <limits> // for numeric_limits
0029 #include <memory>
0030 #include <set>
0031 #include <utility> // for pair
0032
0033 SingleGl1TriggeredInput::SingleGl1TriggeredInput(const std::string &name)
0034 : SingleTriggeredInput(name)
0035 {
0036 }
0037
0038 void SingleGl1TriggeredInput::FillPool()
0039 {
0040 if (AllDone())
0041 {
0042 return;
0043 }
0044 if (!FilesDone())
0045 {
0046 FillEventVector();
0047 }
0048 return;
0049 }
0050
0051 void SingleGl1TriggeredInput::Print(const std::string &what) const
0052 {
0053 std::cout << "what: " << what << std::endl;
0054 }
0055
0056 void SingleGl1TriggeredInput::CreateDSTNodes(Event *evt)
0057 {
0058 std::string CompositeNodeName = "Packets";
0059 if (KeepMyPackets())
0060 {
0061 CompositeNodeName = "PacketsKeep";
0062 }
0063 PHNodeIterator iter(m_topNode);
0064 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0065 if (!dstNode)
0066 {
0067 dstNode = new PHCompositeNode("DST");
0068 m_topNode->addNode(dstNode);
0069 }
0070 PHNodeIterator iterDst(dstNode);
0071 PHCompositeNode *detNode = dynamic_cast<PHCompositeNode *>(iterDst.findFirst("PHCompositeNode", CompositeNodeName));
0072 if (!detNode)
0073 {
0074 detNode = new PHCompositeNode(CompositeNodeName);
0075 dstNode->addNode(detNode);
0076 }
0077 std::vector<Packet *> pktvec = evt->getPacketVector();
0078 for (auto *piter : pktvec)
0079 {
0080 int packet_id = piter->getIdentifier();
0081 m_PacketSet.insert(packet_id);
0082 std::string PacketNodeName = std::to_string(packet_id);
0083 OfflinePacket *gl1hitcont = findNode::getClass<OfflinePacket>(detNode, PacketNodeName);
0084 if (!gl1hitcont)
0085 {
0086 gl1hitcont = new Gl1Packetv3();
0087 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(gl1hitcont, PacketNodeName, "PHObject");
0088 detNode->addNode(newNode);
0089 }
0090 delete piter;
0091 }
0092 }
0093
0094 uint64_t SingleGl1TriggeredInput::GetClock(Event *evt, int pid)
0095 {
0096 Packet *packet = evt->getPacket(pid);
0097 if (!packet)
0098 {
0099 std::cout << Name()
0100 << " no packet 14001 for event, possible corrupt data event before EOR"
0101 << std::endl;
0102 std::cout << Name() << ": ";
0103 evt->identify();
0104 return std::numeric_limits<uint64_t>::max();
0105 }
0106 uint64_t clock = packet->lValue(0, "BCO");
0107
0108 delete packet;
0109 return clock;
0110 }
0111
0112 int SingleGl1TriggeredInput::ReadEvent()
0113 {
0114 int gl1pid = 14001;
0115 if (m_PacketEventDeque[gl1pid].empty())
0116 {
0117 std::cout << Name() << ": GL1 deque is empty — all events done" << std::endl;
0118 AllDone(1);
0119 return -1;
0120 }
0121
0122 Event* gl1evt = m_PacketEventDeque[gl1pid].front();
0123 m_PacketEventDeque[gl1pid].pop_front();
0124 RunNumber(gl1evt->getRunNumber());
0125 int EventSequence = gl1evt->getEvtSequence();
0126 EventNumber(gl1evt->getEvtSequence());
0127
0128 Packet *packet = gl1evt->getPacket(gl1pid);
0129 if (packet)
0130 {
0131 Gl1Packet *gl1packet = findNode::getClass<Gl1Packet>(topNode(), gl1pid);
0132 int packetnumber = packet->iValue(0);
0133 uint64_t gtm_bco = packet->lValue(0, "BCO");
0134
0135 gl1packet->setBCO(packet->lValue(0, "BCO"));
0136 gl1packet->setHitFormat(packet->getHitFormat());
0137 gl1packet->setIdentifier(packet->getIdentifier());
0138 gl1packet->setEvtSequence(EventSequence);
0139 gl1packet->setPacketNumber(packetnumber);
0140
0141 gl1packet->setBunchNumber(packet->lValue(0, "BunchNumber"));
0142 gl1packet->setTriggerInput(packet->lValue(0, "TriggerInput"));
0143 gl1packet->setLiveVector(packet->lValue(0, "LiveVector"));
0144 gl1packet->setScaledVector(packet->lValue(0, "ScaledVector"));
0145 gl1packet->setGTMBusyVector(packet->lValue(0, "GTMBusyVector"));
0146 gl1packet->setGTMAllBusyVector(packet->lValue(0, "GTMAllBusyVector"));
0147 for (int i = 0; i < 64; i++)
0148 {
0149 for (int j = 0; j < 3; j++)
0150 {
0151 gl1packet->setScaler(i, j, packet->lValue(i, j));
0152 }
0153 }
0154 for (int i = 0; i < 12; i++)
0155 {
0156 gl1packet->setGl1pScaler(i, 0, packet->lValue(i, "GL1PRAW"));
0157 gl1packet->setGl1pScaler(i, 1, packet->lValue(i, "GL1PLIVE"));
0158 gl1packet->setGl1pScaler(i, 2, packet->lValue(i, "GL1PSCALED"));
0159 }
0160 if (Verbosity() > 2)
0161 {
0162 std::cout << PHWHERE << " Packet: " << packet->getIdentifier()
0163 << " evtno: " << EventSequence
0164 << ", bco: 0x" << std::hex << gtm_bco << std::dec
0165 << ", bunch no: " << packet->lValue(0, "BunchNumber")
0166 << std::endl;
0167 std::cout << PHWHERE << " RB Packet: " << gl1packet->getIdentifier()
0168 << " evtno: " << gl1packet->getEvtSequence()
0169 << ", bco: 0x" << std::hex << gl1packet->getBCO() << std::dec
0170 << ", bunch no: " << +gl1packet->getBunchNumber()
0171 << std::endl;
0172 }
0173 delete packet;
0174 }
0175 delete gl1evt;
0176 return Fun4AllReturnCodes::EVENT_OK;
0177 }