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