CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
InitMessage.cc
Go to the documentation of this file.
3 #include <iostream>
4 #include <iterator>
5 #include <cstring>
6 
8  buf_((uint8*)buf),
9  head_(buf),
10  release_start_(0),
11  release_len_(0),
12  processName_start_(0),
13  processName_len_(0),
14  outputModuleLabel_start_(0),
15  outputModuleLabel_len_(0),
16  outputModuleId_(0),
17  hlt_trig_start_(0),
18  hlt_trig_count_(0),
19  hlt_trig_len_(0),
20  hlt_select_start_(0),
21  hlt_select_count_(0),
22  hlt_select_len_(0),
23  l1_trig_start_(0),
24  l1_trig_count_(0),
25  l1_trig_len_(0),
26  adler32_chksum_(0),
27  host_name_start_(0),
28  host_name_len_(0),
29  desc_start_(0),
30  desc_len_(0) {
31  if (protocolVersion() == 2) {
32  std::cout << "Protocol Version 2 encountered" << std::endl;
33  release_start_ = buf_ + sizeof(InitHeader) - (sizeof(uint32)*2);
34  // Minus the size for Init and Event Header size fileds
35  // in the InitHeader
36  } else { //For version 3
37  release_start_ = buf_ + sizeof(InitHeader);
38  }
40  release_start_ += sizeof(uint8);
42 
43  //Lets get Process Name from right after Release Name
44  if (protocolVersion() > 3) {
45  //std::cout << "Protocol Version > 3 encountered" << std::endl;
47  processName_start_ = (uint8*)(pos + sizeof(uint8));
49 
50  // Output Module Label
51  if (protocolVersion() > 4) {
53  outputModuleLabel_start_ = (uint8*)(pos + sizeof(uint8));
55 
56  // Output Module Id
57  if (protocolVersion() > 5) {
59  pos += sizeof(char_uint32);
60  }
61  }
62  }
63 
66  hlt_trig_start_ += sizeof(char_uint32);
68  hlt_trig_start_ += sizeof(char_uint32);
70 
71  if (protocolVersion() > 4) {
74  hlt_select_start_ += sizeof(char_uint32);
76  hlt_select_start_ += sizeof(char_uint32);
78  }
79 
82  l1_trig_start_ += sizeof(char_uint32);
84  l1_trig_start_ += sizeof(char_uint32);
86 
87  if (protocolVersion() > 7) {
89  host_name_start_ = pos + sizeof(uint32);
91  host_name_start_ += sizeof(uint8);
93  }
94 
95  desc_start_ = pos;
97  desc_start_ += sizeof(char_uint32);
98 }
99 
101 {
102  InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
103  return convert32(h->run_);
104 }
105 
107 {
108  InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
109  return h->version_.protocol_;
110 }
111 
112 void InitMsgView::pset(uint8* put_here) const
113 {
114  InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
115  memcpy(put_here,h->version_.pset_id_,sizeof(h->version_.pset_id_));
116 }
117 
119 {
120  return std::string(reinterpret_cast<char *>(release_start_),release_len_);
121 }
122 
124 {
125  if (protocolVersion() < 4)
126  throw cms::Exception("Invalid Message Version", "InitMsgView")
127  << "Process Name is only supported in Protocol Version 4 and above" << ".\n";
128 
129  return std::string(reinterpret_cast<char *>(processName_start_),processName_len_);
130 }
131 
133 {
134  if (protocolVersion() < 5)
135  throw cms::Exception("Invalid Message Version", "InitMsgView")
136  << "Output Module Label is only supported in Protocol Version 5 and above" << ".\n";
137 
138  return std::string(reinterpret_cast<char *>(outputModuleLabel_start_),outputModuleLabel_len_);
139 }
140 
141 
142 void InitMsgView::hltTriggerNames(Strings& save_here) const
143 {
145 }
146 
148 {
149  if (protocolVersion() < 5)
150  throw cms::Exception("Invalid Message Version", "InitMsgView")
151  << "HLT trigger selections are only supported in Protocol Version 5 and above" << ".\n";
152 
154 }
155 
156 void InitMsgView::l1TriggerNames(Strings& save_here) const
157 {
159 }
160 
162 {
163  if (protocolVersion() == 2) {
166  uint32 hlt_sz = get_hlt_bit_cnt();
167  if (hlt_sz != 0 ) hlt_sz = 1+ ((hlt_sz-1)/4);
168 
169  uint32 l1_sz = get_l1_bit_cnt();
170  if (l1_sz != 0) l1_sz = 1 + ((l1_sz-1)/8);
171 
172  return 1 + (4*8) + hlt_sz+l1_sz;
173  }
174 
175  InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
176  return convert32(h->event_header_size_);
177 }
178 
179 /***
180 uint32 InitMsgView::initHeaderSize() const
181 {
182  InitHeader* h = reinterpret_cast<InitHeader*>(buf_);
183  return convert32(h->init_header_size_);
184 } **/
185 
187 {
188  //return std::string(reinterpret_cast<char *>(host_name_start_),host_name_len_);
189  std::string host_name(reinterpret_cast<char *>(host_name_start_),host_name_len_);
190  size_t found = host_name.find('\0');
191  if(found != std::string::npos) {
192  return std::string(host_name, 0, found);
193  } else {
194  return host_name;
195  }
196 }
std::vector< std::string > Strings
Definition: MsgTools.h:18
char_uint32 event_header_size_
Definition: InitMessage.h:57
uint32 hlt_select_count_
Definition: InitMessage.h:112
uint8 protocol_
Definition: InitMessage.h:38
void hltTriggerNames(Strings &save_here) const
Definition: InitMessage.cc:142
uint32 release_len_
Definition: InitMessage.h:99
uint8 * desc_start_
Definition: InitMessage.h:123
uint32 hlt_trig_len_
Definition: InitMessage.h:110
std::string releaseTag() const
Definition: InitMessage.cc:118
uint32 desc_len_
Definition: InitMessage.h:124
InitMsgView(void *buf)
Definition: InitMessage.cc:7
unsigned char pset_id_[16]
Definition: InitMessage.h:39
uint32 l1_trig_len_
Definition: InitMessage.h:116
std::string hostName() const
Definition: InitMessage.cc:186
uint8 * l1_trig_start_
Definition: InitMessage.h:114
Version version_
Definition: InitMessage.h:54
uint32 outputModuleLabel_len_
Definition: InitMessage.h:105
uint8 * outputModuleLabel_start_
Definition: InitMessage.h:104
void l1TriggerNames(Strings &save_here) const
Definition: InitMessage.cc:156
uint8 * release_start_
Definition: InitMessage.h:98
unsigned int uint32
Definition: MsgTools.h:13
uint32 host_name_len_
Definition: InitMessage.h:119
unsigned char char_uint32[sizeof(uint32)]
Definition: MsgTools.h:16
uint32 processName_len_
Definition: InitMessage.h:102
uint32 protocolVersion() const
Definition: InitMessage.cc:106
std::string outputModuleLabel() const
Definition: InitMessage.cc:132
uint32 outputModuleId_
Definition: InitMessage.h:106
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
uint32 eventHeaderSize() const
Definition: InitMessage.cc:161
uint8 * hlt_trig_start_
Definition: InitMessage.h:108
char_uint32 run_
Definition: InitMessage.h:55
uint8 * host_name_start_
Definition: InitMessage.h:118
uint8 * hlt_select_start_
Definition: InitMessage.h:111
uint32 convert32(char_uint32 v)
Definition: MsgTools.h:30
unsigned char uint8
Definition: MsgTools.h:11
uint8 * buf_
Definition: InitMessage.h:95
std::string processName() const
Definition: InitMessage.cc:123
uint32 get_hlt_bit_cnt() const
Definition: InitMessage.h:82
uint32 run() const
Definition: InitMessage.cc:100
tuple cout
Definition: gather_cfg.py:121
uint32 adler32_chksum_
Definition: InitMessage.h:117
uint32 hlt_trig_count_
Definition: InitMessage.h:109
void getNames(uint8 *from, uint32 from_len, Strings &to)
Definition: MsgTools.h:91
uint32 get_l1_bit_cnt() const
Definition: InitMessage.h:83
uint8 * processName_start_
Definition: InitMessage.h:101
uint32 l1_trig_count_
Definition: InitMessage.h:115
void hltTriggerSelections(Strings &save_here) const
Definition: InitMessage.cc:147
void pset(uint8 *put_here) const
Definition: InitMessage.cc:112
uint32 hlt_select_len_
Definition: InitMessage.h:113