Go to the documentation of this file.00001
00005 #include "IOPool/Streamer/interface/DumpTools.h"
00006 #include "FWCore/Utilities/interface/Digest.h"
00007 #include "FWCore/Utilities/interface/Algorithms.h"
00008 #include <iostream>
00009 #include <iterator>
00010 #include "DataFormats/Streamer/interface/StreamedProducts.h"
00011 #include "IOPool/Streamer/interface/ClassFiller.h"
00012
00013 #include "TBufferFile.h"
00014
00015 using namespace edm;
00016
00017 void dumpInitHeader(const InitMsgView* view)
00018 {
00019 std::cout
00020 << "code = " << view->code() << ", "
00021 << "size = " << view->size() << "\n"
00022 << "run = " << view->run() << ", "
00023 << "proto = " << view->protocolVersion() << "\n"
00024 << "release = " << view->releaseTag() << "\n"
00025 << "processName = " << view->processName() << "\n";
00026 if (view->protocolVersion() >= 5) {
00027 std::cout << "outModuleLabel = " << view->outputModuleLabel() << "\n";
00028 }
00029 if (view->protocolVersion() >= 6) {
00030 std::cout << "outputModuleId=0x" << std::hex << view->outputModuleId()
00031 << std::dec << std::endl;
00032 }
00033 if (view->protocolVersion() >= 8) {
00034 std::cout << "Checksum for Registry data = " << view->adler32_chksum()
00035 << " Hostname = " << view->hostName() << std::endl;
00036 }
00037
00038
00039 uint8 vpset[16];
00040 view->pset(vpset);
00041
00042
00043 std::string pset_str(vpset, vpset+sizeof(vpset));
00044 pset_str += '\0';
00045 cms::Digest dig(pset_str);
00046 cms::MD5Result r1 = dig.digest();
00047 std::string hexy = r1.toString();
00048 std::cout << "PSetID= " << hexy << std::endl;
00049
00050 Strings vhltnames,vhltselections,vl1names;
00051 view->hltTriggerNames(vhltnames);
00052 if (view->protocolVersion() >= 5) {
00053 view->hltTriggerSelections(vhltselections);
00054 }
00055 view->l1TriggerNames(vl1names);
00056
00057 std::cout << "HLT names :- \n ";
00058 edm::copy_all(vhltnames,std::ostream_iterator<std::string>(std::cout,"\n"));
00059
00060 if (view->protocolVersion() >= 5) {
00061 std::cout << "HLT selections :- \n ";
00062 edm::copy_all(vhltselections,std::ostream_iterator<std::string>(std::cout,"\n"));
00063 }
00064
00065 std::cout << "L1 names :- \n ";
00066 edm::copy_all(vl1names,std::ostream_iterator<std::string>(std::cout,"\n"));
00067 std::cout << "\n";
00068 std::cout.flush();
00069
00070 }
00071
00072 void dumpInitView(const InitMsgView* view)
00073 {
00074
00075
00076 dumpInitHeader(view);
00077 std::cout << "desc len = " << view->descLength() << "\n";
00078
00079
00080
00081 std::cout.flush();
00082
00083 }
00084
00085 void dumpStartMsg(const InitMsgView* view)
00086 {
00087 dumpInitHeader(view);
00088 std::cout.flush();
00089 }
00090
00091 void dumpInitVerbose(const InitMsgView* view)
00092 {
00093 std::cout << ">>>>> INIT Message Dump (begin) >>>>>" << std::endl;
00094 dumpInitHeader(view);
00095
00096 TClass* desc = getTClass(typeid(SendJobHeader));
00097 TBufferFile xbuf(TBuffer::kRead, view->descLength(),
00098 (char*)view->descData(), kFALSE);
00099 std::auto_ptr<SendJobHeader> sd((SendJobHeader*)xbuf.ReadObjectAny(desc));
00100
00101 if (sd.get() == 0) {
00102 std::cout << "Unable to determine the product registry - "
00103 << "Registry deserialization error." << std::endl;
00104 }
00105 else {
00106 std::cout << "Branch Descriptions:" << std::endl;
00107 SendDescs const& descs = sd->descs();
00108 SendDescs::const_iterator iDesc(descs.begin()), eDesc(descs.end());
00109 while (iDesc != eDesc) {
00110 BranchDescription branchDesc = *iDesc;
00111 branchDesc.init();
00112
00113 std::cout << branchDesc.branchName() << std::endl;
00114 iDesc++;
00115 }
00116 }
00117
00118 std::cout << "<<<<< INIT Message Dump (end) <<<<<" << std::endl;
00119 std::cout.flush();
00120 }
00121
00122 void dumpInit(uint8* buf)
00123 {
00124 InitMsgView view(buf);
00125 dumpInitHeader(&view);
00126
00127 std::cout << "desc len = " << view.descLength() << "\n";
00128
00129
00130
00131 std::cout.flush();
00132 }
00133
00134 void printBits(unsigned char c){
00135
00136 for (int i = 7; i >= 0; --i) {
00137 int bit = ((c >> i) & 1);
00138 std::cout << " "<<bit;
00139 }
00140 }
00141
00142 void dumpEventHeader(const EventMsgView* eview)
00143 {
00144 std::cout << "code=" << eview->code() << "\n"
00145 << "size=" << eview->size() << "\n"
00146 << "protocolVersion=" << eview->protocolVersion() << "\n"
00147 << "run=" << eview->run() << "\n"
00148 << "event=" << eview->event() << "\n"
00149 << "lumi=" << eview->lumi() << "\n"
00150 << "origDataSize=" << eview->origDataSize() << "\n"
00151 << "outModId=0x" << std::hex << eview->outModId() << std::dec << "\n"
00152 << "adler32 chksum= " << eview->adler32_chksum() << "\n"
00153 << "host name= " << eview->hostName() << "\n"
00154 << "event length=" << eview->eventLength() << "\n"
00155 << "droppedEventsCount=" << eview->droppedEventsCount() << "\n";
00156
00157 std::vector<bool> l1_out;
00158 eview->l1TriggerBits(l1_out);
00159
00160 std::cout << "\nl1 size= " << l1_out.size() << "\n l1 bits=\n";
00161 edm::copy_all(l1_out,std::ostream_iterator<bool>(std::cout," "));
00162
00163 std::vector<unsigned char> hlt_out;
00164 if (eview->hltCount() > 0) {hlt_out.resize(1 + (eview->hltCount()-1)/4);}
00165 eview->hltTriggerBits(&hlt_out[0]);
00166
00167 std::cout << "\nhlt Count:" << eview->hltCount();
00168 std::cout << "\nhlt bits=\n(";
00169 for(int i=(hlt_out.size()-1); i != -1 ; --i)
00170 printBits(hlt_out[i]);
00171 std::cout << ")\n";
00172 std::cout.flush();
00173 }
00174
00175 void dumpEventView(const EventMsgView* eview)
00176 {
00177 dumpEventHeader(eview);
00178
00179
00180
00181
00182
00183 std::cout.flush();
00184
00185 }
00186
00187 void dumpEventIndex(const EventMsgView* eview)
00188 {
00189 dumpEventHeader(eview);
00190 std::cout.flush();
00191 }
00192
00193 void dumpEvent(uint8* buf)
00194 {
00195 EventMsgView eview(buf);
00196
00197 dumpEventHeader(&eview);
00198
00199
00200
00201
00202
00203
00204 std::cout.flush();
00205
00206 }
00207
00208 void dumpDQMEventHeader(const DQMEventMsgView* dview)
00209 {
00210 std::cout << "code = " << dview->code() << "\n"
00211 << "size = " << dview->size() << "\n"
00212 << "protocolVersion = " << dview->protocolVersion() << "\n"
00213 << "run = " << dview->runNumber() << "\n"
00214 << "event = " << dview->eventNumberAtUpdate() << "\n"
00215 << "lumi = " << dview->lumiSection() << "\n"
00216 << "update = " << dview->updateNumber() << "\n"
00217 << "checksum = " << dview->adler32_chksum() << "\n"
00218 << "host name= " << dview->hostName() << "\n"
00219 << "compressionFlag = " << dview->compressionFlag() << "\n"
00220 << "fuProcessId = " << dview->fuProcessId() << "\n"
00221 << "fuGuid = 0x" << std::hex << dview->fuGuid() << std::dec << "\n"
00222 << "mergeCount = " << dview->mergeCount() << "\n"
00223 << "release = " << dview->releaseTag() << "\n"
00224 << "topFolder = " << dview->topFolderName() << "\n"
00225 << "event length = " << dview->eventLength() << "\n";
00226 std::cout.flush();
00227 }
00228
00229 void dumpDQMEventView(const DQMEventMsgView* dview)
00230 {
00231 std::cout << "\n>>>>> DQMEvent Message Dump (begin) >>>>>" << std::endl;
00232 dumpDQMEventHeader(dview);
00233
00234 boost::shared_ptr< std::vector<std::string> > subFolders =
00235 dview->subFolderNames();
00236 for (uint32 idx = 0; idx < subFolders->size(); idx++) {
00237 std::string name = subFolders->at(idx);
00238 uint32 count = dview->meCount(name);
00239 std::cout << "Subfolder " << name << " has " << count
00240 << " monitor elements." << std::endl;
00241 }
00242
00243 std::cout << ">>>>> DQMEvent Message Dump (end) >>>>>" << std::endl;
00244 std::cout.flush();
00245 }
00246
00247 void dumpFRDEventView(const FRDEventMsgView* fview)
00248 {
00249 std::cout << "\n>>>>> FRDEvent Message Dump (begin) >>>>>" << std::endl;
00250 std::cout.flush();
00251
00252 std::cout << "size = " << fview->size() << "\n"
00253 << "version = " << fview->version() << "\n"
00254 << "run = " << fview->run() << "\n"
00255 << "lumi = " << fview->lumi() << "\n"
00256 << "event = " << fview->event() << "\n";
00257 std::cout.flush();
00258
00259 std::cout << ">>>>> FRDEvent Message Dump (end) >>>>>" << std::endl;
00260 std::cout.flush();
00261 }