00001 #ifndef FUShmDQMOutputService_H 00002 #define FUShmDQMOutputService_H 00003 00015 #include "DQMServices/Core/interface/DQMStore.h" 00016 #include "DQMServices/Core/interface/MonitorElement.h" 00017 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00018 #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h" 00019 #include "FWCore/Framework/interface/Event.h" 00020 #include "FWCore/Framework/interface/EventSetup.h" 00021 #include "IOPool/Streamer/interface/DQMEventMessage.h" 00022 #include "IOPool/Streamer/interface/DQMEventMsgBuilder.h" 00023 #include "DataFormats/Provenance/interface/LuminosityBlockID.h" 00024 #include "IOPool/Streamer/interface/StreamDQMSerializer.h" 00025 #include "IOPool/Streamer/interface/StreamDQMDeserializer.h" 00026 #include "EventFilter/ShmBuffer/interface/FUShmBuffer.h" 00027 00028 class FUShmDQMOutputService 00029 { 00030 public: 00031 FUShmDQMOutputService(const edm::ParameterSet &pset, 00032 edm::ActivityRegistry &actReg); 00033 ~FUShmDQMOutputService(void); 00034 00035 void postEventProcessing(const edm::Event &event, 00036 const edm::EventSetup &eventSetup); 00037 00038 // test routines to check on timing of various signals 00039 void postBeginJobProcessing(); 00040 void postEndJobProcessing(); 00041 void preSourceProcessing(); 00042 void postSourceProcessing(); 00043 void preModuleProcessing(const edm::ModuleDescription &modDesc); 00044 void postModuleProcessing(const edm::ModuleDescription &modDesc); 00045 void preSourceConstructionProcessing(const edm::ModuleDescription &modDesc); 00046 void postSourceConstructionProcessing(const edm::ModuleDescription &modDesc); 00047 void preModuleConstructionProcessing(const edm::ModuleDescription &modDesc); 00048 void postModuleConstructionProcessing(const edm::ModuleDescription &modDesc); 00049 void preBeginRun(const edm::RunID &runID, const edm::Timestamp ×tamp); 00050 00051 bool attachToShm(); 00052 bool detachFromShm(); 00053 00054 protected: 00055 DQMStore *bei; 00056 00057 void findMonitorElements(DQMEvent::TObjectTable &toTable, 00058 std::string folderPath); 00059 00060 private: 00061 void writeShmDQMData(DQMEventMsgBuilder const& dqmMsgBuilder); 00062 00063 std::vector<char> messageBuffer_; 00064 int lumiSectionInterval_; 00065 double lumiSectionsPerUpdate_; 00066 //edm::LuminosityBlockID lumiSectionOfPreviousUpdate_; 00067 //edm::LuminosityBlockID firstLumiSectionSeen_; 00068 unsigned int lumiSectionOfPreviousUpdate_; 00069 unsigned int firstLumiSectionSeen_; 00070 double timeInSecSinceUTC_; 00071 bool initializationIsNeeded_; 00072 bool useCompression_; 00073 int compressionLevel_; 00074 edm::StreamDQMSerializer serializeWorker_; 00075 edm::StreamDQMDeserializer deserializeWorker_; 00076 00077 evf::FUShmBuffer* shmBuffer_; 00078 00079 static bool fuIdsInitialized_; 00080 static uint32 fuProcId_; 00081 static uint32 fuGuidValue_; 00082 }; 00083 00084 #endif