00001 /* 00002 * ===================================================================================== 00003 * 00004 * Filename: CSCDQM_Dispatcher.h 00005 * 00006 * Description: Framework frontend and Histogram Cache controller 00007 * 00008 * Version: 1.0 00009 * Created: 10/03/2008 10:26:04 AM 00010 * Revision: none 00011 * Compiler: gcc 00012 * 00013 * Author: Valdas Rapsevicius, valdas.rapsevicius@cern.ch 00014 * Company: CERN, CH 00015 * 00016 * ===================================================================================== 00017 */ 00018 00019 #ifndef CSCDQM_Dispatcher_H 00020 #define CSCDQM_Dispatcher_H 00021 00022 #include <typeinfo> 00023 00024 #include <boost/thread.hpp> 00025 #include <boost/thread/recursive_mutex.hpp> 00026 00027 #include "DQM/CSCMonitorModule/interface/CSCDQM_Configuration.h" 00028 #include "DQM/CSCMonitorModule/interface/CSCDQM_EventProcessor.h" 00029 #include "DQM/CSCMonitorModule/interface/CSCDQM_Collection.h" 00030 #include "DQM/CSCMonitorModule/interface/CSCDQM_Cache.h" 00031 #include "DQM/CSCMonitorModule/interface/CSCDQM_Logger.h" 00032 #include "DQM/CSCMonitorModule/interface/CSCDQM_Lock.h" 00033 00034 namespace cscdqm { 00035 00036 class EventProcessorMutex : public Lock { 00037 00038 private: 00039 00040 EventProcessor processor; 00041 Configuration *config; 00042 00043 public: 00044 00045 EventProcessorMutex(Configuration* const p_config) : processor(p_config) { 00046 config = p_config; 00047 } 00048 void updateFractionAndEfficiencyHistos(); 00049 00050 }; 00051 00056 class Dispatcher { 00057 00058 public: 00059 00060 Dispatcher(Configuration* const p_config, MonitorObjectProvider* const p_provider); 00061 ~Dispatcher() { threads.join_all(); } 00062 00063 void init(); 00064 00065 void updateFractionAndEfficiencyHistos(); 00066 const bool nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const; 00067 00068 Collection* getCollection() { return &collection; } 00069 00070 const bool getHisto(const HistoDef& histoD, MonitorObject*& me); 00071 00072 private: 00073 00074 void updateFractionAndEfficiencyHistosAuto(); 00075 00076 Configuration *config; 00077 MonitorObjectProvider *provider; 00078 Collection collection; 00079 EventProcessor processor; 00080 Cache cache; 00081 00082 EventProcessorMutex processorFract; 00083 boost::thread_group threads; 00084 boost::function<void ()> fnUpdate; 00085 00086 #ifdef DQMLOCAL 00087 00088 public: 00089 00090 void processEvent(const char* data, const int32_t dataSize, const uint32_t errorStat, const int32_t nodeNumber); 00091 00092 #endif 00093 00094 #ifdef DQMGLOBAL 00095 00096 public: 00097 00098 void processEvent(const edm::Event& e, const edm::InputTag& inputTag); 00099 00100 #endif 00101 00102 }; 00103 00104 } 00105 00106 #endif