Back to home page

sPhenix code displayed by LXR

 
 

    


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())  // no more files and all events read
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   //  evt->identify();
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     //    std::cout << "saving bco 0x" << std::hex << gtm_bco << std::dec << std::endl;
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 }