CMS 3D CMS Logo

InitMessage.cc

Go to the documentation of this file.
00001 #include "IOPool/Streamer/interface/InitMessage.h"
00002 #include "FWCore/Utilities/interface/Exception.h"
00003 #include <iostream>
00004 #include <iterator>
00005 
00006 InitMsgView::InitMsgView(void* buf):
00007   buf_((uint8*)buf),head_(buf)
00008 {
00009   if (protocolVersion() == 2) {
00010       std::cout << "Protocol Version 2 encountered" << std::endl; 
00011       release_start_ = buf_ + sizeof(InitHeader) - (sizeof(uint32)*2);
00012       // Minus the size for Init and Event Header size fileds
00013       // in the InitHeader
00014   } else { //For version 3 
00015       release_start_ = buf_ + sizeof(InitHeader);
00016   }
00017   release_len_ = *release_start_;
00018   release_start_ += sizeof(uint8);
00019   uint8* pos = release_start_ + release_len_;
00020 
00021   //Lets get Process Name from right after Release Name  
00022   if (protocolVersion() > 3) {
00023         //std::cout << "Protocol Version > 3 encountered" << std::endl;
00024         processName_len_ = *pos;
00025         processName_start_ = (uint8*)(pos + sizeof(uint8));
00026         pos = processName_start_ + processName_len_;
00027 
00028         // Output Module Label
00029         if (protocolVersion() > 4) {
00030             outputModuleLabel_len_ = *pos;
00031             outputModuleLabel_start_ = (uint8*)(pos + sizeof(uint8));
00032             pos = outputModuleLabel_start_ + outputModuleLabel_len_;
00033 
00034             // Output Module Id
00035             if (protocolVersion() > 5) {
00036               outputModuleId_ = convert32(pos);
00037               pos += sizeof(char_uint32);
00038             }
00039         }
00040   }
00041 
00042 
00043   hlt_trig_start_ = pos;
00044   hlt_trig_count_ = convert32(hlt_trig_start_);
00045   hlt_trig_start_ += sizeof(char_uint32);
00046   hlt_trig_len_ = convert32(hlt_trig_start_);
00047   hlt_trig_start_ += sizeof(char_uint32);
00048   pos = hlt_trig_start_ + hlt_trig_len_;
00049 
00050   if (protocolVersion() > 4) {
00051       hlt_select_start_ = pos;
00052       hlt_select_count_ = convert32(hlt_select_start_);
00053       hlt_select_start_ += sizeof(char_uint32);
00054       hlt_select_len_ = convert32(hlt_select_start_);
00055       hlt_select_start_ += sizeof(char_uint32);
00056       pos = hlt_select_start_ + hlt_select_len_;
00057   }
00058 
00059   l1_trig_start_ = pos;
00060   l1_trig_count_ = convert32(l1_trig_start_);
00061   l1_trig_start_ += sizeof(char_uint32);
00062   l1_trig_len_ = convert32(l1_trig_start_);
00063   l1_trig_start_ += sizeof(char_uint32);
00064   pos = l1_trig_start_ + l1_trig_len_;
00065 
00066   desc_start_ = pos;
00067   desc_len_ = convert32(desc_start_);
00068   desc_start_ += sizeof(char_uint32);
00069 }
00070 
00071 uint32 InitMsgView::run() const
00072 {
00073   InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
00074   return convert32(h->run_);
00075 }
00076 
00077 uint32 InitMsgView::protocolVersion() const
00078 {
00079   InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
00080   return h->version_.protocol_;
00081 }
00082 
00083 void InitMsgView::pset(uint8* put_here) const
00084 {
00085   InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
00086   memcpy(put_here,h->version_.pset_id_,sizeof(h->version_.pset_id_));
00087 }
00088 
00089 std::string InitMsgView::releaseTag() const
00090 {
00091   return std::string(reinterpret_cast<char *>(release_start_),release_len_);
00092 }
00093 
00094 std::string InitMsgView::processName() const
00095 {
00096    if (protocolVersion() < 4)
00097       throw cms::Exception("Invalid Message Version", "InitMsgView")
00098         << "Process Name is only supported in Protocol Version 4 and above" << ".\n";
00099 
00100    return std::string(reinterpret_cast<char *>(processName_start_),processName_len_);
00101 }
00102 
00103 std::string InitMsgView::outputModuleLabel() const
00104 {
00105    if (protocolVersion() < 5)
00106       throw cms::Exception("Invalid Message Version", "InitMsgView")
00107         << "Output Module Label is only supported in Protocol Version 5 and above" << ".\n";
00108 
00109    return std::string(reinterpret_cast<char *>(outputModuleLabel_start_),outputModuleLabel_len_);
00110 }
00111 
00112 
00113 void InitMsgView::hltTriggerNames(Strings& save_here) const
00114 {
00115   MsgTools::getNames(hlt_trig_start_,hlt_trig_len_,save_here);
00116 }
00117 
00118 void InitMsgView::hltTriggerSelections(Strings& save_here) const
00119 {
00120   if (protocolVersion() < 5)
00121     throw cms::Exception("Invalid Message Version", "InitMsgView")
00122       << "HLT trigger selections are only supported in Protocol Version 5 and above" << ".\n";
00123 
00124   MsgTools::getNames(hlt_select_start_,hlt_select_len_,save_here);
00125 }
00126 
00127 void InitMsgView::l1TriggerNames(Strings& save_here) const
00128 {
00129   MsgTools::getNames(l1_trig_start_,l1_trig_len_,save_here);
00130 }
00131 
00132 uint32 InitMsgView::eventHeaderSize() const
00133 {
00134   if (protocolVersion() == 2) {
00137        uint32 hlt_sz = get_hlt_bit_cnt();
00138        if (hlt_sz != 0 ) hlt_sz = 1+ ((hlt_sz-1)/4);
00139 
00140        uint32 l1_sz = get_l1_bit_cnt();
00141        if (l1_sz != 0) l1_sz = 1 + ((l1_sz-1)/8);
00142 
00143        return 1 + (4*8) + hlt_sz+l1_sz; 
00144    }
00145 
00146    InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
00147    return convert32(h->event_header_size_);
00148 }
00149 
00150 /***
00151 uint32 InitMsgView::initHeaderSize() const
00152 {
00153   InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
00154   return convert32(h->init_header_size_);
00155 } **/
00156 
00157 

Generated on Tue Jun 9 17:39:18 2009 for CMSSW by  doxygen 1.5.4