Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:16:07

0001 #include "InttBcoDump.h"
0002 
0003 #include <fun4all/Fun4AllReturnCodes.h>
0004 #include <fun4all/SubsysReco.h>  // for SubsysReco
0005 
0006 #include <fun4all/Fun4AllHistoManager.h>
0007 
0008 #include <phool/PHCompositeNode.h>
0009 #include <phool/PHDataNode.h>
0010 #include <phool/PHNode.h>          // for PHNode
0011 #include <phool/PHNodeIterator.h>  // for PHNodeIterator
0012 #include <phool/getClass.h>
0013 
0014 #include <Event/Event.h>
0015 #include <Event/EventTypes.h>
0016 #include <Event/packet.h>
0017 
0018 #include <TFile.h>
0019 #include <TSystem.h>
0020 #include <TTree.h>
0021 
0022 #include <iostream>  // for operator<<, endl, basic_ost...
0023 #include <set>
0024 #include <utility>  // for pair
0025 #include <vector>   // for vector
0026 
0027 //____________________________________________________________________________..
0028 InttBcoDump::InttBcoDump(const std::string &name)
0029   : SubsysReco(name)
0030 {
0031 }
0032 //____________________________________________________________________________..
0033 int InttBcoDump::InitRun(PHCompositeNode * /*topNode*/)
0034 {
0035   if (outfilename.empty())
0036   {
0037     std::cout << "no output filename given" << std::endl;
0038     gSystem->Exit(1);
0039   }
0040 
0041   outfile = new TFile(outfilename.c_str(), "RECREATE");
0042   outfile->SetCompressionSettings(505);  // ZSTD
0043   ttree = new TTree("bco", "bco");
0044   ttree->Branch("id", &m_id);
0045   ttree->Branch("evt", &m_evt);
0046   ttree->Branch("nfees", &m_nfees);
0047   ttree->Branch("bco", &m_bco);
0048   ttree->Branch("bcodiff", &m_bcodiff);
0049   ttree->SetAutoFlush(100000);
0050   return Fun4AllReturnCodes::EVENT_OK;
0051 }
0052 
0053 //____________________________________________________________________________..
0054 int InttBcoDump::process_event(PHCompositeNode *topNode)
0055 {
0056   Event *evt = findNode::getClass<Event>(topNode, "PRDF");
0057   if (!evt)
0058   {
0059     std::cout << "No Event found" << std::endl;
0060     exit(1);
0061   }
0062   if (evt->getEvtType() == ENDRUNEVENT)
0063   {
0064     std::cout << "End run flag for INTT found, remaining INTT data is corrupted" << std::endl;
0065     delete evt;
0066     return Fun4AllReturnCodes::ABORTRUN;
0067   }
0068   //  evt->identify();
0069   int EventSequence = evt->getEvtSequence();
0070   std::vector<Packet *> pktvec = evt->getPacketVector();
0071   std::map<int, std::set<uint64_t>> bcoset;
0072   for (auto *packet : pktvec)
0073   {
0074     int nbcos = packet->iValue(0, "NR_BCOS");
0075     for (int i = 0; i < nbcos; i++)
0076     {
0077       uint64_t bco = packet->lValue(i, "BCOLIST");
0078       int nfees = packet->iValue(i, "NR_FEES");
0079       bcoTaggedFees[bco] = nfees;
0080       for (int j = 0; j < nfees; j++)
0081       {
0082         int fee = packet->iValue(i, j, "FEELIST");
0083         lastbco.insert(std::make_pair(fee, 0));
0084 
0085         bcoset[fee].insert(bco);
0086       }
0087     }
0088 
0089     delete packet;
0090   }
0091   pktvec.clear();
0092 
0093   for (auto &mapiter : bcoset)
0094   {
0095     if (!mapiter.second.empty())
0096     {
0097       for (const auto &bco : mapiter.second)
0098       {
0099         uint64_t prevbco = lastbco[mapiter.first];
0100         if (prevbco > 0 && prevbco != bco)
0101         {
0102           int64_t diffbco = bco - prevbco;
0103 
0104           m_id = mapiter.first;
0105           m_evt = EventSequence;
0106           m_bco = bco;
0107           m_nfees = bcoTaggedFees[bco];
0108           m_bcodiff = diffbco;
0109 
0110           ttree->Fill();
0111         }
0112         lastbco[mapiter.first] = bco;
0113       }
0114       mapiter.second.clear();
0115     }
0116   }
0117   bcoset.clear();
0118   bcoTaggedFees.clear();
0119   lastbco.clear();
0120   return Fun4AllReturnCodes::EVENT_OK;
0121 }
0122 
0123 //____________________________________________________________________________..
0124 int InttBcoDump::End(PHCompositeNode * /*topNode*/)
0125 {
0126   outfile->cd();
0127   ttree->Write();
0128   outfile->Close();
0129   delete outfile;
0130   return Fun4AllReturnCodes::EVENT_OK;
0131 }