CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
FUShmDQMOutputService Class Reference

#include <FUShmDQMOutputService.h>

Inheritance diagram for FUShmDQMOutputService:
evf::ServiceWeb

Public Member Functions

bool attachToShm ()
 
void defaultWebPage (xgi::Input *in, xgi::Output *out)
 
bool detachFromShm ()
 
 FUShmDQMOutputService (const edm::ParameterSet &pset, edm::ActivityRegistry &actReg)
 
void postEndJobProcessing ()
 
void postEndLumi (edm::LuminosityBlock const &, edm::EventSetup const &)
 
void postEventProcessing (const edm::Event &event, const edm::EventSetup &eventSetup)
 
void postSourceConstructionProcessing (const edm::ModuleDescription &modDesc)
 
void preBeginRun (const edm::RunID &runID, const edm::Timestamp &timestamp)
 
void publish (xdata::InfoSpace *)
 
void reset ()
 
void setAttachToShm ()
 
 ~FUShmDQMOutputService (void)
 
- Public Member Functions inherited from evf::ServiceWeb
std::string const & name () const
 
virtual void publishToXmas (xdata::InfoSpace *)
 
 ServiceWeb (const std::string &)
 
virtual ~ServiceWeb ()
 

Protected Member Functions

void findMonitorElements (DQMEvent::TObjectTable &toTable, std::string folderPath)
 

Protected Attributes

DQMStorebei
 
- Protected Attributes inherited from evf::ServiceWeb
std::string serviceName_
 

Private Member Functions

void writeShmDQMData (DQMEventMsgBuilder const &dqmMsgBuilder)
 

Private Attributes

bool attach_
 
int compressionLevel_
 
edm::StreamDQMDeserializer deserializeWorker_
 
const std::string dqm
 
unsigned int firstLumiSectionSeen_
 
char host_name_ [255]
 
bool initializationIsNeeded_
 
const std::string input
 
int lumiSectionInterval_
 
unsigned int lumiSectionOfPreviousUpdate_
 
double lumiSectionsPerUpdate_
 
std::vector< char > messageBuffer_
 
xdata::UnsignedInteger32 nbUpdates_
 
edm::StreamDQMSerializer serializeWorker_
 
evf::FUShmBuffershmBuffer_
 
double timeInSecSinceUTC_
 
uint32 updateNumber_
 
bool useCompression_
 

Static Private Attributes

static uint32 fuGuidValue_ = 0
 
static bool fuIdsInitialized_ = false
 

Detailed Description

This class is responsible for collecting data quality monitoring (DQM) information, packaging it in DQMEvent objects, and writing out the data to shared memory for the Resource Broker to send to the Storage Manager

27-Dec-2006 - KAB - Initial Implementation 31-Mar-2007 - HWKC - modification for shared memory usage

Id:
FUShmDQMOutputService.h,v 1.13 2012/05/02 15:02:19 smorovic Exp

Definition at line 32 of file FUShmDQMOutputService.h.

Constructor & Destructor Documentation

FUShmDQMOutputService::FUShmDQMOutputService ( const edm::ParameterSet pset,
edm::ActivityRegistry actReg 
)

FUShmDQMOutputService constructor.

Definition at line 56 of file FUShmDQMOutputService.cc.

References compressionLevel_, fuGuidValue_, fuIdsInitialized_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), host_name_, initializationIsNeeded_, dttmaxenums::L, lumiSectionInterval_, lumiSectionsPerUpdate_, messageBuffer_, postEndJobProcessing(), postEndLumi(), postSourceConstructionProcessing(), preBeginRun(), AlCaHLTBitMon_QueryRunRegistry::string, timeInSecSinceUTC_, edm::Guid::toString(), useCompression_, edm::ActivityRegistry::watchPostEndJob(), edm::ActivityRegistry::watchPostEndLumi(), edm::ActivityRegistry::watchPostSourceConstruction(), and edm::ActivityRegistry::watchPreBeginRun().

58  : evf::ServiceWeb("FUShmDQMOutputService")
59  , updateNumber_(0)
60  , shmBuffer_(0)
61  , nbUpdates_(0)
62  , input("INPUT")
63  , dqm("DQM")
64  , attach_(false)
65 {
66 
67  // specify the routine to be called after event processing. This routine
68  // will be used to periodically fetch monitor elements from the DQM
69  // backend and write out to shared memory for sending to the storage manager.
71 
72  // specify the routine to be called after the input source has been
73  // constructed. This routine will be used to initialize our connection
74  // to the storage manager and any other needed setup.??
75  actReg.watchPostSourceConstruction(this,
77 
78  // specify the routine to be called when a run begins
80 
81  // specify the routine to be called when the job has finished. It will
82  // be used to disconnect from the SM, if needed, and any other shutdown
83  // tasks that are needed.??
85 
86  // set internal values from the parameter set
87  int initialSize =
88  pset.getUntrackedParameter<int>("initialMessageBufferSize", 1000000);
89  messageBuffer_.resize(initialSize);
90  lumiSectionsPerUpdate_ = pset.getParameter<double>("lumiSectionsPerUpdate");
91  // for the moment, only support a number of lumi sections per update >= 1
94  useCompression_ = pset.getParameter<bool>("useCompression");
95  compressionLevel_ = pset.getParameter<int>("compressionLevel");
96  // the default for lumiSectionInterval_ is 0, meaning get it from the event
97  // otherwise we get a fake one that should match the fake lumi block
98  // for events (if any) as long as the time between lumi blocks is larger
99  // than the time difference between creating this service and the
100  // FUShmOutputModule event output module
102  pset.getUntrackedParameter<int>("lumiSectionInterval", 0); // seconds
103  if (lumiSectionInterval_ < 1) {lumiSectionInterval_ = 0;}
104 
105  // for fake test luminosity sections
106  struct timeval now;
107  struct timezone dummyTZ;
108  gettimeofday(&now, &dummyTZ);
109  // we will count lumi section numbers from this time
110  timeInSecSinceUTC_ = static_cast<double>(now.tv_sec) + (static_cast<double>(now.tv_usec)/1000000.0);
111 
112  int got_host = gethostname(host_name_, sizeof(host_name_));
113  if(got_host != 0) strcpy(host_name_, "noHostNameFoundOrTooLong");
114 
115  if (! fuIdsInitialized_) {
116  fuIdsInitialized_ = true;
117 
118  edm::Guid guidObj(true);
119  std::string guidString = guidObj.toString();
120  //std::cout << "DQMOutput GUID string = " << guidString << std::endl;
121 
122  uLong crc = crc32(0L, Z_NULL, 0);
123  Bytef* buf = (Bytef*)guidString.data();
124  crc = crc32(crc, buf, guidString.length());
125  fuGuidValue_ = crc;
126 
127  //std::cout << "DQMOutput GUID value = 0x" << std::hex << fuGuidValue_ << std::endl;
128  }
129 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void postEndLumi(edm::LuminosityBlock const &, edm::EventSetup const &)
void watchPostSourceConstruction(PostSourceConstruction::slot_type const &iSlot)
void watchPostEndLumi(PostEndLumi::slot_type const &iSlot)
std::vector< char > messageBuffer_
Definition: Guid.h:23
evf::FUShmBuffer * shmBuffer_
xdata::UnsignedInteger32 nbUpdates_
void preBeginRun(const edm::RunID &runID, const edm::Timestamp &timestamp)
void postSourceConstructionProcessing(const edm::ModuleDescription &modDesc)
void watchPreBeginRun(PreBeginRun::slot_type const &iSlot)
FUShmDQMOutputService::~FUShmDQMOutputService ( void  )

FUShmDQMOutputService destructor.

Definition at line 134 of file FUShmDQMOutputService.cc.

References shmBuffer_.

135 {
136  shmdt(shmBuffer_);
137 }
evf::FUShmBuffer * shmBuffer_

Member Function Documentation

bool FUShmDQMOutputService::attachToShm ( )

Definition at line 421 of file FUShmDQMOutputService.cc.

References evf::FUShmBuffer::getShmBuffer(), and shmBuffer_.

Referenced by postEndLumi().

422 {
423  if(0==shmBuffer_) {
425  if (0==shmBuffer_) {
426  edm::LogError("FUDQMShmOutputService")<<"Failed to attach to shared memory";
427  return false;
428  }
429  return true;
430  }
431  return false;
432 
433 }
static FUShmBuffer * getShmBuffer()
Definition: FUShmBuffer.cc:986
evf::FUShmBuffer * shmBuffer_
void FUShmDQMOutputService::defaultWebPage ( xgi::Input in,
xgi::Output out 
)
virtual

Reimplemented from evf::ServiceWeb.

Definition at line 139 of file FUShmDQMOutputService.cc.

140 {
141 }
bool FUShmDQMOutputService::detachFromShm ( )

Definition at line 437 of file FUShmDQMOutputService.cc.

References shmBuffer_.

438 {
439  if(0!=shmBuffer_) {
440  shmdt(shmBuffer_);
441  shmBuffer_ = 0;
442  }
443  return true;
444 }
evf::FUShmBuffer * shmBuffer_
void FUShmDQMOutputService::findMonitorElements ( DQMEvent::TObjectTable toTable,
std::string  folderPath 
)
protected

Finds all of the monitor elements under the specified folder, including those in subdirectories.

Definition at line 348 of file FUShmDQMOutputService.cc.

References bei, DQMStore::dirExists(), DQMStore::getContents(), MonitorElement::getRootObject(), DQMStore::getSubdirs(), customizeTrackingMonitorSeedNumber::idx, NULL, DQMStore::setCurrentFolder(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by postEndLumi().

350 {
351  if (bei == NULL) {return;}
352 
353  // fetch the monitor elements in the specified directory
354  std::vector<MonitorElement *> localMEList = bei->getContents(folderPath);
355  //MonitorElementRootFolder* folderPtr = bei->getDirectory(folderPath);
356 
357  // add the MEs that should be updated to the table
358  std::vector<TObject *> updateTOList;
359  for (int idx = 0; idx < (int) localMEList.size(); idx++) {
360  MonitorElement *mePtr = localMEList[idx];
361  // if (mePtr->wasUpdated()) { // @@EM send updated and not (to be revised)
362  updateTOList.push_back(mePtr->getRootObject());
363  // }
364  }
365  if (updateTOList.size() > 0) {
366  toTable[folderPath] = updateTOList;
367  }
368 
369  // find the subdirectories in this folder
370  // (checking if the directory exists is probably overkill,
371  // but we really don't want to create new folders using
372  // setCurrentFolder())
373  if (bei->dirExists(folderPath)) {
374  bei->setCurrentFolder(folderPath);
375  std::vector<std::string> subDirList = bei->getSubdirs();
376 
377  // loop over the subdirectories, find the MEs in each one
378  std::vector<std::string>::const_iterator dirIter;
379  for (dirIter = subDirList.begin(); dirIter != subDirList.end(); dirIter++) {
380  std::string subDirPath = (*dirIter);
381  findMonitorElements(toTable, subDirPath);
382  }
383  }
384 }
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1424
#define NULL
Definition: scimark2.h:8
std::vector< MonitorElement * > getContents(const std::string &path) const
Definition: DQMStore.cc:1502
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:498
TObject * getRootObject(void) const
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
void findMonitorElements(DQMEvent::TObjectTable &toTable, std::string folderPath)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:434
void FUShmDQMOutputService::postEndJobProcessing ( )

Callback to be used after the end job operation has finished. It takes care of any necessary cleanup.

Definition at line 338 of file FUShmDQMOutputService.cc.

References initializationIsNeeded_.

Referenced by FUShmDQMOutputService().

339 {
340  // since the service is not destroyed we need to take care of endjob items here
342 }
void FUShmDQMOutputService::postEndLumi ( edm::LuminosityBlock const &  lb,
edm::EventSetup const &  es 
)

Definition at line 154 of file FUShmDQMOutputService.cc.

References edm::StreamDQMSerializer::adler32_chksum(), attach_, attachToShm(), bei, edm::StreamDQMSerializer::bufferPointer(), DQMStore::cd(), compressionLevel_, filterCSVwithJSON::copy, edm::StreamDQMSerializer::currentEventSize(), edm::StreamDQMSerializer::currentSpaceUsed(), TrackerOfflineValidation_Dqm_cff::dirName, dqm, edm::LuminosityBlockBase::endTime(), edm::hlt::Exception, findMonitorElements(), firstLumiSectionSeen_, fuGuidValue_, edm::getReleaseVersion(), DQMStore::getSubdirs(), host_name_, initializationIsNeeded_, input, edm::LuminosityBlockBase::luminosityBlock(), lumiSectionInterval_, lumiSectionOfPreviousUpdate_, messageBuffer_, nbUpdates_, NULL, cppFunctionSkipper::operator, edm::LuminosityBlockBase::run(), edm::StreamDQMSerializer::serializeDQMEvent(), serializeWorker_, evf::MicroStateService::setMicroState(), alcazmumu_cfi::src, AlCaHLTBitMon_QueryRunRegistry::string, timeInSecSinceUTC_, updateNumber_, useCompression_, and writeShmDQMData().

Referenced by FUShmDQMOutputService().

155 {
156  if (attach_) attachToShm();
157  attach_=false;
158 
159  evf::MicroStateService *mss = 0;
160  try{
162  if(mss) mss->setMicroState(&dqm);
163  }
164  catch(...) {
165  edm::LogError("FUShmDQMOutputService")<< "exception when trying to get service MicroStateService";
166  }
167 
168 
169  // fake the luminosity section if we don't want to use the real one
170  unsigned int thisLumiSection = 0;
171  if(lumiSectionInterval_ == 0)
172  thisLumiSection = lb.luminosityBlock();
173  else {
174  // match the code in Event output module to get the same (almost) lumi number
175  struct timeval now;
176  struct timezone dummyTZ;
177  gettimeofday(&now, &dummyTZ);
178  double timeInSec = static_cast<double>(now.tv_sec) + (static_cast<double>(now.tv_usec)/1000000.0) - timeInSecSinceUTC_;
179  // what about overflows?
180  if(lumiSectionInterval_ > 0) thisLumiSection = static_cast<uint32>(timeInSec/lumiSectionInterval_);
181  }
182 
183  // special handling for the first event
185  initializationIsNeeded_ = false;
186  lumiSectionOfPreviousUpdate_ = thisLumiSection;
187  firstLumiSectionSeen_ = thisLumiSection;
188 
189  // for when a run(job) had ended and we start a new run(job)
190  // for fake test luminosity sections
191  struct timeval now;
192  struct timezone dummyTZ;
193  gettimeofday(&now, &dummyTZ);
194  // we will count lumi section numbers from this time
195  timeInSecSinceUTC_ = static_cast<double>(now.tv_sec) + (static_cast<double>(now.tv_usec)/1000000.0);
196  }
197 
198  // std::cout << getpid() << ": :" //<< gettid()
199  // << ":DQMOutputService check if have to send update for lumiSection " << thisLumiSection << std::endl;
200  if(thisLumiSection%4!=0)
201  {
202 // std::cout << getpid() << ": :" //<< gettid()
203 // << ":DQMOutputService skipping update for lumiSection " << thisLumiSection << std::endl;
204  if(mss) mss->setMicroState(&input);
205  return;
206  }
207 // std::cout << getpid() << ": :" //<< gettid()
208 // << ":DQMOutputService sending update for lumiSection " << thisLumiSection << std::endl;
209  // Calculate the update ID and lumi ID for this update
210  // fullUpdateRatio and fullLsDelta are unused. comment out the calculation.
211  //int fullLsDelta = (int) (thisLumiSection - firstLumiSectionSeen_);
212  //double fullUpdateRatio = ((double) fullLsDelta) / lumiSectionsPerUpdate_;
213  // this is the update number starting from zero
214 
215  // this is the actual luminosity section number for the beginning lumi section of this update
216  unsigned int lumiSectionTag = thisLumiSection;
217 
218  // retry the lookup of the backend interface, if needed
219  if (bei == NULL) {
221  }
222 
223  // to go any further, a backend interface pointer is crucial
224  if (bei == NULL) {
225  throw cms::Exception("postEventProcessing", "FUShmDQMOutputService")
226  << "Unable to lookup the DQMStore service!\n";
227  }
228 
229  // determine the top level folders (these will be used for grouping
230  // monitor elements into DQM Events)
231  std::vector<std::string> topLevelFolderList;
232  //std::cout << "### SenderService, pwd = " << bei->pwd() << std::endl;
233  bei->cd();
234  //std::cout << "### SenderService, pwd = " << bei->pwd() << std::endl;
235  topLevelFolderList = bei->getSubdirs();
236 
237  // find the monitor elements under each top level folder (including
238  // subdirectories)
239  std::map< std::string, DQMEvent::TObjectTable > toMap;
240  std::vector<std::string>::const_iterator dirIter;
241  for (dirIter = topLevelFolderList.begin();
242  dirIter != topLevelFolderList.end();
243  dirIter++) {
244  std::string dirName = *dirIter;
245  DQMEvent::TObjectTable toTable;
246 
247  // find the MEs
248  findMonitorElements(toTable, dirName);
249 
250  // store the list in the map
251  toMap[dirName] = toTable;
252  }
253 
254  // create a DQMEvent message for each top-level folder
255  // and write each to the shared memory
256  for (dirIter = topLevelFolderList.begin();
257  dirIter != topLevelFolderList.end();
258  dirIter++) {
259  std::string dirName = *dirIter;
260  DQMEvent::TObjectTable toTable = toMap[dirName];
261  if (toTable.size() == 0) {continue;}
262 
263  // serialize the monitor element data
266 
267  // resize the message buffer, if needed
268  unsigned int srcSize = serializeWorker_.currentSpaceUsed();
269  unsigned int newSize = srcSize + 50000; // allow for header
270  if (messageBuffer_.size() < newSize) messageBuffer_.resize(newSize);
271 
272  // create the message
273  DQMEventMsgBuilder dqmMsgBuilder(&messageBuffer_[0], messageBuffer_.size(),
274  lb.run(), lb.luminosityBlock(),
275  lb.endTime(),
276  lumiSectionTag, updateNumber_,
278  host_name_,
280  toTable);
281 
282  // copy the serialized data into the message
283  unsigned char* src = serializeWorker_.bufferPointer();
284  std::copy(src,src + srcSize, dqmMsgBuilder.eventAddress());
285  dqmMsgBuilder.setEventLength(srcSize);
286  if (useCompression_) {
287  dqmMsgBuilder.setCompressionFlag(serializeWorker_.currentEventSize());
288  }
289 
290  // write the filter unit UUID and PID into the message
291  dqmMsgBuilder.setFUProcessId(getpid());
292  dqmMsgBuilder.setFUGuid(fuGuidValue_);
293 
294  // send the message
295  writeShmDQMData(dqmMsgBuilder);
296 // std::cout << getpid() << ": :" // << gettid()
297 // << ":DQMOutputService DONE sending update for lumiSection " << thisLumiSection << std::endl;
298  if(mss) mss->setMicroState(&input);
299 
300  }
301 
302  // reset monitor elements that have requested it
303  // TODO - enable this
304  //bei->doneSending(true, true);
305 
306  // update the "previous" lumi section
307  lumiSectionOfPreviousUpdate_ = thisLumiSection;
308  nbUpdates_++;
309  updateNumber_++;
310 }
uint32_t adler32_chksum() const
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1424
void writeShmDQMData(DQMEventMsgBuilder const &dqmMsgBuilder)
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:411
#define NULL
Definition: scimark2.h:8
int serializeDQMEvent(DQMEvent::TObjectTable &toTable, bool use_compression, int compression_level)
void setMicroState(std::string const *)
unsigned int currentEventSize() const
std::vector< char > messageBuffer_
edm::StreamDQMSerializer serializeWorker_
unsigned int lumiSectionOfPreviousUpdate_
unsigned int currentSpaceUsed() const
unsigned char * bufferPointer() const
unsigned int uint32
Definition: MsgTools.h:13
std::string getReleaseVersion()
xdata::UnsignedInteger32 nbUpdates_
void findMonitorElements(DQMEvent::TObjectTable &toTable, std::string folderPath)
std::map< std::string, std::vector< TObject * > > TObjectTable
void FUShmDQMOutputService::postEventProcessing ( const edm::Event event,
const edm::EventSetup eventSetup 
)
void FUShmDQMOutputService::postSourceConstructionProcessing ( const edm::ModuleDescription moduleDesc)

Callback to be used after the input source has been constructed. It takes care of any intialization that is needed by this service.

Definition at line 316 of file FUShmDQMOutputService.cc.

References bei, and cppFunctionSkipper::operator.

Referenced by FUShmDQMOutputService().

void FUShmDQMOutputService::preBeginRun ( const edm::RunID runID,
const edm::Timestamp timestamp 
)

Callback to be used after the Run has been created by the InputSource but before any modules have seen the Run

Definition at line 326 of file FUShmDQMOutputService.cc.

References initializationIsNeeded_, nbUpdates_, and updateNumber_.

Referenced by FUShmDQMOutputService().

328 {
329  nbUpdates_ = 0;
330  updateNumber_ = 0;
332 }
xdata::UnsignedInteger32 nbUpdates_
void FUShmDQMOutputService::publish ( xdata::InfoSpace *  is)
virtual

Implements evf::ServiceWeb.

Definition at line 143 of file FUShmDQMOutputService.cc.

References alignCSCRings::e, edm::hlt::Exception, and nbUpdates_.

144 {
145  try{
146  is->fireItemAvailable("nbDqmUpdates",&nbUpdates_);
147  }
149  edm::LogInfo("FUShmDQMOutputService")
150  << " exception when publishing to InfoSpace ";
151  }
152 }
xdata::UnsignedInteger32 nbUpdates_
void FUShmDQMOutputService::reset ( void  )
inline

Definition at line 53 of file FUShmDQMOutputService.h.

References initializationIsNeeded_, and nbUpdates_.

53  {
54  nbUpdates_ = 0;
56  }
xdata::UnsignedInteger32 nbUpdates_
void FUShmDQMOutputService::setAttachToShm ( )

Definition at line 417 of file FUShmDQMOutputService.cc.

References attach_.

417  {
418  attach_=true;
419 }
void FUShmDQMOutputService::writeShmDQMData ( DQMEventMsgBuilder const &  dqmMsgBuilder)
private

Writes the specified DQM event message to shared memory.

Definition at line 389 of file FUShmDQMOutputService.cc.

References DQMEventMsgView::eventNumberAtUpdate(), fuGuidValue_, dttmaxenums::L, run_regression::ret, DQMEventMsgView::runNumber(), shmBuffer_, DQMEventMsgBuilder::size(), findQualityFiles::size, DQMEventMsgBuilder::startAddress(), AlCaHLTBitMon_QueryRunRegistry::string, DQMEventMsgView::topFolderName(), and evf::FUShmBuffer::writeDqmEventData().

Referenced by postEndLumi().

390 {
391  // fetch the location and size of the message buffer
392  unsigned char* buffer = (unsigned char*) dqmMsgBuilder.startAddress();
393  unsigned int size = dqmMsgBuilder.size();
394 
395  // fetch the run, event, and folder number for addition to the I2O fragments
396  DQMEventMsgView dqmMsgView(buffer);
397  unsigned int runid = dqmMsgView.runNumber();
398  unsigned int eventid = dqmMsgView.eventNumberAtUpdate();
399 
400  // We need to generate an unique 32 bit ID from the top folder name
401  std::string topFolder = dqmMsgView.topFolderName();
402  uLong crc = crc32(0L, Z_NULL, 0);
403  Bytef* buf = (Bytef*)topFolder.data();
404  crc = crc32(crc, buf, topFolder.length());
405 
406  if(!shmBuffer_) {
407  edm::LogError("FUDQMShmOutputService")
408  << " Error writing to shared memory as shm is not available";
409  } else {
410  bool ret = shmBuffer_->writeDqmEventData(runid, eventid, (unsigned int)crc,
411  getpid(), fuGuidValue_, buffer, size);
412  if(!ret) edm::LogError("FUShmDQMOutputService") << " Error with writing data to ShmBuffer";
413  }
414 
415 }
bool writeDqmEventData(unsigned int runNumber, unsigned int evtAtUpdate, unsigned int folderId, unsigned int fuProcessId, unsigned int fuGuid, unsigned char *data, unsigned int dataSize)
Definition: FUShmBuffer.cc:820
evf::FUShmBuffer * shmBuffer_
tuple size
Write out results.

Member Data Documentation

bool FUShmDQMOutputService::attach_
private

Definition at line 90 of file FUShmDQMOutputService.h.

Referenced by postEndLumi(), and setAttachToShm().

DQMStore* FUShmDQMOutputService::bei
protected
int FUShmDQMOutputService::compressionLevel_
private

Definition at line 75 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().

edm::StreamDQMDeserializer FUShmDQMOutputService::deserializeWorker_
private

Definition at line 77 of file FUShmDQMOutputService.h.

const std::string FUShmDQMOutputService::dqm
private

Definition at line 85 of file FUShmDQMOutputService.h.

Referenced by postEndLumi().

unsigned int FUShmDQMOutputService::firstLumiSectionSeen_
private

Definition at line 71 of file FUShmDQMOutputService.h.

Referenced by postEndLumi().

uint32 FUShmDQMOutputService::fuGuidValue_ = 0
staticprivate

Definition at line 88 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), postEndLumi(), and writeShmDQMData().

bool FUShmDQMOutputService::fuIdsInitialized_ = false
staticprivate

Initialize the static variables for the filter unit indentifiers.

Definition at line 87 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService().

char FUShmDQMOutputService::host_name_[255]
private

Definition at line 82 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().

bool FUShmDQMOutputService::initializationIsNeeded_
private
const std::string FUShmDQMOutputService::input
private

Definition at line 84 of file FUShmDQMOutputService.h.

Referenced by postEndLumi().

int FUShmDQMOutputService::lumiSectionInterval_
private

Definition at line 67 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().

unsigned int FUShmDQMOutputService::lumiSectionOfPreviousUpdate_
private

Definition at line 70 of file FUShmDQMOutputService.h.

Referenced by postEndLumi().

double FUShmDQMOutputService::lumiSectionsPerUpdate_
private

Definition at line 68 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService().

std::vector<char> FUShmDQMOutputService::messageBuffer_
private

Definition at line 66 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().

xdata::UnsignedInteger32 FUShmDQMOutputService::nbUpdates_
private

Definition at line 81 of file FUShmDQMOutputService.h.

Referenced by postEndLumi(), preBeginRun(), publish(), and reset().

edm::StreamDQMSerializer FUShmDQMOutputService::serializeWorker_
private

Definition at line 76 of file FUShmDQMOutputService.h.

Referenced by postEndLumi().

evf::FUShmBuffer* FUShmDQMOutputService::shmBuffer_
private
double FUShmDQMOutputService::timeInSecSinceUTC_
private

Definition at line 72 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().

uint32 FUShmDQMOutputService::updateNumber_
private

Definition at line 69 of file FUShmDQMOutputService.h.

Referenced by postEndLumi(), and preBeginRun().

bool FUShmDQMOutputService::useCompression_
private

Definition at line 74 of file FUShmDQMOutputService.h.

Referenced by FUShmDQMOutputService(), and postEndLumi().