Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-31 04:19:42

0001 /** File contains simple tools to dump Init and Event 
0002     Messages on screen.
0003 */
0004 
0005 #include "IOPool/Streamer/interface/DumpTools.h"
0006 #include "FWCore/Utilities/interface/Digest.h"
0007 #include "FWCore/Utilities/interface/Algorithms.h"
0008 #include <iostream>
0009 #include <iterator>
0010 #include "DataFormats/Streamer/interface/StreamedProducts.h"
0011 #include "IOPool/Streamer/interface/ClassFiller.h"
0012 
0013 #include "TBufferFile.h"
0014 
0015 #include <memory>
0016 
0017 using namespace edm;
0018 
0019 namespace edm::streamer {
0020   void dumpInitHeader(const InitMsgView* view) {
0021     std::cout << "code = " << view->code() << ", "
0022               << "size = " << view->size() << "\n"
0023               << "run = " << view->run() << ", "
0024               << "proto = " << view->protocolVersion() << "\n"
0025               << "release = " << view->releaseTag() << "\n"
0026               << "processName = " << view->processName() << "\n";
0027     if (view->protocolVersion() >= 5) {
0028       std::cout << "outModuleLabel = " << view->outputModuleLabel() << "\n";
0029     }
0030     if (view->protocolVersion() >= 6) {
0031       std::cout << "outputModuleId=0x" << std::hex << view->outputModuleId() << std::dec << std::endl;
0032     }
0033     if (view->protocolVersion() >= 8) {
0034       std::cout << "Checksum for Registry data = " << view->adler32_chksum() << " Hostname = " << view->hostName()
0035                 << std::endl;
0036     }
0037 
0038     //PSet 16 byte non-printable representation, stored in message.
0039     uint8 vpset[16];
0040     view->pset(vpset);
0041 
0042     //Lets convert it to printable hex form
0043     std::string pset_str(vpset, vpset + sizeof(vpset));
0044     pset_str += '\0';
0045     cms::Digest dig(pset_str);
0046     cms::MD5Result r1 = dig.digest();
0047     std::string hexy = r1.toString();
0048     std::cout << "PSetID= " << hexy << std::endl;
0049 
0050     Strings vhltnames, vhltselections, vl1names;
0051     view->hltTriggerNames(vhltnames);
0052     if (view->protocolVersion() >= 5) {
0053       view->hltTriggerSelections(vhltselections);
0054     }
0055     view->l1TriggerNames(vl1names);
0056 
0057     std::cout << "HLT names :- \n ";
0058     edm::copy_all(vhltnames, std::ostream_iterator<std::string>(std::cout, "\n"));
0059 
0060     if (view->protocolVersion() >= 5) {
0061       std::cout << "HLT selections :- \n ";
0062       edm::copy_all(vhltselections, std::ostream_iterator<std::string>(std::cout, "\n"));
0063     }
0064 
0065     std::cout << "L1 names :- \n ";
0066     edm::copy_all(vl1names, std::ostream_iterator<std::string>(std::cout, "\n"));
0067     std::cout << "\n";
0068     std::cout.flush();
0069   }
0070 
0071   void dumpInitView(const InitMsgView* view) {
0072     dumpInitHeader(view);
0073     std::cout << "desc len = " << view->descLength() << "\n";
0074     //const uint8* pos = view->descData();
0075     //std::copy(pos,pos+view->descLength(),std::ostream_iterator<uint8>(std::cout,""));
0076     //std::cout << "\n";
0077     std::cout.flush();
0078   }
0079 
0080   void dumpStartMsg(const InitMsgView* view) {
0081     dumpInitHeader(view);
0082     std::cout.flush();
0083   }
0084 
0085   void dumpInitVerbose(const InitMsgView* view) {
0086     std::cout << ">>>>> INIT Message Dump (begin) >>>>>" << std::endl;
0087     dumpInitHeader(view);
0088 
0089     TClass* desc = getTClass(typeid(SendJobHeader));
0090     TBufferFile xbuf(TBuffer::kRead, view->descLength(), (char*)view->descData(), kFALSE);
0091     std::unique_ptr<SendJobHeader> sd((SendJobHeader*)xbuf.ReadObjectAny(desc));
0092 
0093     if (sd.get() == nullptr) {
0094       std::cout << "Unable to determine the product registry - "
0095                 << "Registry deserialization error." << std::endl;
0096     } else {
0097       std::cout << "Branch Descriptions:" << std::endl;
0098       SendDescs const& descs = sd->descs();
0099       SendDescs::const_iterator iDesc(descs.begin()), eDesc(descs.end());
0100       while (iDesc != eDesc) {
0101         BranchDescription branchDesc = *iDesc;
0102         branchDesc.init();
0103         //branchDesc.write(std::cout);
0104         std::cout << branchDesc.branchName() << std::endl;
0105         iDesc++;
0106       }
0107     }
0108 
0109     std::cout << "<<<<< INIT Message Dump (end) <<<<<" << std::endl;
0110     std::cout.flush();
0111   }
0112 
0113   void dumpInit(uint8* buf) {
0114     InitMsgView view(buf);
0115     dumpInitHeader(&view);
0116 
0117     std::cout << "desc len = " << view.descLength() << "\n";
0118     //const uint8* pos = view.descData();
0119     //std::copy(pos,pos+view.descLength(),std::ostream_iterator<uint8>(std::cout,""));
0120     //std::cout << "\n";
0121     std::cout.flush();
0122   }
0123 
0124   void printBits(unsigned char c) {
0125     for (int i = 7; i >= 0; --i) {
0126       int bit = ((c >> i) & 1);
0127       std::cout << " " << bit;
0128     }
0129   }
0130 
0131   void dumpEventHeader(const EventMsgView* eview) {
0132     std::cout << "code=" << eview->code() << "\n"
0133               << "size=" << eview->size() << "\n"
0134               << "protocolVersion=" << eview->protocolVersion() << "\n"
0135               << "run=" << eview->run() << "\n"
0136               << "event=" << eview->event() << "\n"
0137               << "lumi=" << eview->lumi() << "\n"
0138               << "origDataSize=" << eview->origDataSize() << "\n"
0139               << "outModId=0x" << std::hex << eview->outModId() << std::dec << "\n"
0140               << "adler32 chksum= " << eview->adler32_chksum() << "\n"
0141               << "host name= " << eview->hostName() << "\n"
0142               << "event length=" << eview->eventLength() << "\n"
0143               << "droppedEventsCount=" << eview->droppedEventsCount() << "\n";
0144 
0145     std::vector<bool> l1_out;
0146     eview->l1TriggerBits(l1_out);
0147 
0148     std::cout << "\nl1 size= " << l1_out.size() << "\n l1 bits=\n";
0149     edm::copy_all(l1_out, std::ostream_iterator<bool>(std::cout, " "));
0150 
0151     std::vector<unsigned char> hlt_out;
0152     if (eview->hltCount() > 0) {
0153       hlt_out.resize(1 + (eview->hltCount() - 1) / 4);
0154     }
0155     eview->hltTriggerBits(&hlt_out[0]);
0156 
0157     std::cout << "\nhlt Count:" << eview->hltCount();
0158     std::cout << "\nhlt bits=\n(";
0159     for (int i = (hlt_out.size() - 1); i != -1; --i)
0160       printBits(hlt_out[i]);
0161     std::cout << ")\n";
0162     std::cout.flush();
0163   }
0164 
0165   void dumpEventView(const EventMsgView* eview) {
0166     dumpEventHeader(eview);
0167     //const uint8* edata = eview->eventData();
0168     //std::cout << "\nevent data=\n(";
0169     //std::copy(&edata[0],&edata[0]+eview->eventLength(),
0170     //     std::ostream_iterator<char>(std::cout,""));
0171     //std::cout << ")\n";
0172     std::cout.flush();
0173   }
0174 
0175   void dumpEventIndex(const EventMsgView* eview) {
0176     dumpEventHeader(eview);
0177     std::cout.flush();
0178   }
0179 
0180   void dumpEvent(uint8* buf) {
0181     EventMsgView eview(buf);
0182 
0183     dumpEventHeader(&eview);
0184 
0185     //const uint8* edata = eview.eventData();
0186     //std::cout << "\nevent data=\n(";
0187     //std::copy(&edata[0],&edata[0]+eview.eventLength(),
0188     //     std::ostream_iterator<char>(std::cout,""));
0189     //std::cout << ")\n";
0190     std::cout.flush();
0191   }
0192 
0193   void dumpFRDEventView(const FRDEventMsgView* fview) {
0194     std::cout << "\n>>>>> FRDEvent Message Dump (begin) >>>>>" << std::endl;
0195     std::cout.flush();
0196 
0197     std::cout << "size = " << fview->size() << "\n"
0198               << "version = " << fview->version() << "\n"
0199               << "run = " << fview->run() << "\n"
0200               << "lumi = " << fview->lumi() << "\n"
0201               << "event = " << fview->event() << "\n";
0202     std::cout.flush();
0203 
0204     std::cout << ">>>>> FRDEvent Message Dump (end) >>>>>" << std::endl;
0205     std::cout.flush();
0206   }
0207 }  // namespace edm::streamer