Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:19:47

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