CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSCDQM_Dispatcher.cc
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: CSCDQM_Dispatcher.cc
5  *
6  * Description: CSCDQM Dispatcher implementation
7  *
8  * Version: 1.0
9  * Created: 12/01/2008 10:32:38 AM
10  * Revision: none
11  * Compiler: gcc
12  *
13  * Author: Valdas Rapsevicius (VR), valdas.rapsevicius@cern.ch
14  * Company: CERN, CH
15  *
16  * =====================================================================================
17  */
18 
20 
21 namespace cscdqm {
22 
30  collection(p_config), processor(p_config), processorFract(p_config) {
31 
33  config = p_config;
34  provider = p_provider;
35 
37  config->fnGetCacheEMUHisto = boost::bind(&Cache::getEMU, &cache, _1, _2);
38  config->fnGetCacheDDUHisto = boost::bind(&Cache::getDDU, &cache, _1, _2, _3);
39  config->fnGetCacheCSCHisto = boost::bind(&Cache::getCSC, &cache, _1, _2, _3, _4, _5);
40  config->fnGetCacheParHisto = boost::bind(&Cache::getPar, &cache, _1, _2);
41  config->fnPutHisto = boost::bind(&Cache::put, &cache, _1, _2);
42  config->fnNextBookedCSC = boost::bind(&Cache::nextBookedCSC, &cache, _1, _2, _3);
43  config->fnIsBookedCSC = boost::bind(&Cache::isBookedCSC, &cache, _1, _2);
44  config->fnIsBookedDDU = boost::bind(&Cache::isBookedDDU, &cache, _1);
45 
47  config->fnGetHisto = boost::bind(&Dispatcher::getHisto, this, _1, _2);
48 
51 
54 
55  }
56 
62  collection.load();
64  processor.init();
65  }
66 
72  unsigned int Dispatcher::maskHWElements(std::vector<std::string>& tokens) {
73  return processorFract.maskHWElements(tokens);
74  }
75 
82  const bool Dispatcher::getHisto(const HistoDef& histoD, MonitorObject*& me) {
83 
85  if (typeid(histoD) == DDUHistoDefT && !cache.isBookedDDU(histoD.getDDUId())) {
87  if (cache.get(histoD, me)) return true;
88  }
89 
91  if (typeid(histoD) == CSCHistoDefT) {
92  if (!cache.isBookedCSC(histoD.getCrateId(), histoD.getDMBId())) {
93  collection.bookCSCHistos(histoD.getCrateId(), histoD.getDMBId());
95  }
96  if (collection.isOnDemand(histoD.getHistoName())) {
97  collection.bookCSCHistos(histoD.getId(), histoD.getCrateId(), histoD.getDMBId(), histoD.getAddId());
98  }
99  if (cache.get(histoD, me)) return true;
100  }
101 
103  if (typeid(histoD) == ParHistoDefT) {
104  HistoBookRequest req(histoD, config->getFOLDER_PAR(), -1.0f);
105  me = provider->bookMonitorObject(req);
106  cache.put(histoD, me);
107  return true;
108  }
109 
111  cache.put(histoD, NULL);
112 
113  return false;
114  }
115 
121  if ( config->getFRAEFF_AUTO_UPDATE() &&
122  (config->getNEventsCSC() >= config->getFRAEFF_AUTO_UPDATE_START()) &&
123  (config->getNEventsCSC() % config->getFRAEFF_AUTO_UPDATE_FREQ()) == 0) {
125  }
126  }
127 
134  if (config->getFRAEFF_SEPARATE_THREAD()) {
135  boost::function<void ()> fnUpdate = boost::bind(&EventProcessorMutex::updateFractionAndEfficiencyHistos, &processorFract);
136 #ifdef DQMMT
137  threads.create_thread(boost::ref(fnUpdate));
138 #else
139  fnUpdate();
140 #endif
141  } else {
143  }
144  }
145 
152  if (config->getFRAEFF_SEPARATE_THREAD()) {
153  boost::function<void (HWStandbyType&)> fnUpdate = boost::bind(&EventProcessorMutex::processStandby, &processorFract, _1);
154 #ifdef DQMMT
155  threads.create_thread(boost::ref(fnUpdate));
156 #else
157  fnUpdate(standby);
158 #endif
159  } else {
161  }
162  }
163 
164 #ifdef DQMLOCAL
165 
174  void Dispatcher::processEvent(const char* data, const int32_t dataSize, const uint32_t errorStat, const int32_t nodeNumber) {
175  config->eventProcessTimer(true);
176  processor.processEvent(data, dataSize, errorStat, nodeNumber);
177  config->eventProcessTimer(false);
179  }
180 
181 #endif
182 
183 #ifdef DQMGLOBAL
184 
191  void Dispatcher::processEvent(const edm::Event& e, const edm::InputTag& inputTag, HWStandbyType& standby) {
192  config->eventProcessTimer(true);
193 
194  // Consider standby information
195  if (standby.process) {
196 
197  // Set in full standby once at the start. Afterwards - no!
198  // i.e. if we ever in the run have gone off standby - this value is false
199  config->setIN_FULL_STANDBY(config->getIN_FULL_STANDBY() && standby.fullStandby());
200 
201  //std::cout << "standby.MeP = " << standby.MeP << "\n";
202  //std::cout << "standby.MeM = " << standby.MeM << "\n";
203  //std::cout << "standby.fullStandby() = " << standby.fullStandby() << "\n";
204  //std::cout << "config->getIN_FULL_STANDBY = " << config->getIN_FULL_STANDBY() << "\n";
205 
206  processStandby(standby);
207 
208  // We do not fill histograms in full standby!
209  if (standby.fullStandby()) {
210  return;
211  }
212 
213  }
214 
215  processor.processEvent(e, inputTag);
216 
217  config->eventProcessTimer(false);
218 
220 
221  }
222 
223 #endif
224 
225 }
void init()
Initialize Dispatcher: book histograms, init processor, etc.
boost::function< bool(unsigned int &, unsigned int &) > fnIsBookedCSC
const bool isBookedDDU(const HwId &dduId) const
Check if DDU was booked on given identifier.
const HistoName & getHistoName() const
Get raw histogram name.
virtual const HwId getCrateId() const
Get CSC Crate ID.
boost::function< bool(const HistoId id, MonitorObject *&mo) > fnGetCacheParHisto
const bool getEMU(const HistoId &id, MonitorObject *&mo)
Get EMU MO on Histogram Id.
Definition: CSCDQM_Cache.cc:53
void bookEMUHistos() const
Book EMU histograms.
void updateFractionAndEfficiencyHistos()
On demand update fraction and efficiency MOs.
const bool nextBookedCSC(unsigned int &n, unsigned int &crateId, unsigned int &dmbId) const
Iterator to get booked CSC identifiers on enumerator.
Monitoring Object interface used to cover Root object and provide common interface to EventProcessor ...
Abstract Base Histogram Definition.
void eventProcessTimer(const bool start)
Switch on/off event processing timer.
EventProcessorMutex processorFract
#define NULL
Definition: scimark2.h:8
const bool isOnDemand(const HistoName &name) const
Check if the histogram is on demand (by histogram name)
boost::function< bool(const HistoId id, const HwId &id1, const HwId &id2, const HwId &id3, MonitorObject *&mo) > fnGetCacheCSCHisto
virtual const HwId getDDUId() const
Get DDU ID.
void init()
Initialize EventProcessor: reading out config information.
void updateFractionAndEfficiencyHistosAuto()
Automatically called fraction and efficiency MOs update function.
void processStandby(HWStandbyType &standby)
Set HW Standby modes.
const unsigned long getNEventsCSC() const
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
virtual MonitorObject * bookMonitorObject(const HistoBookRequest &p_req)=0
Dispatcher(Configuration *const p_config, MonitorObjectProvider *const p_provider)
Constructor.
CSCDQM Framework Global Configuration.
const HistoId getId() const
Get Histogram ID.
const bool getPar(const HistoId &id, MonitorObject *&mo)
Get Parameter MO on Histogram Id.
boost::function< bool(unsigned int &, unsigned int &, unsigned int &) > fnNextBookedCSC
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
boost::function< bool(const HistoDef &histoT, MonitorObject *&) > fnGetHisto
virtual bool getCSCDetId(const unsigned int crateId, const unsigned int dmbId, CSCDetId &detId) const =0
boost::function< bool(const unsigned int, const unsigned int, CSCDetId &) > fnGetCSCDetId
static const std::type_info & CSCHistoDefT
void processStandby(HWStandbyType &standby)
Process standby information.
void load()
Load XML file and fill definition map(s)
EventProcessor processor
static const std::type_info & ParHistoDefT
boost::function< MonitorObject *(const HistoBookRequest &) > fnBook
Configuration * config
virtual const HwId getDMBId() const
Get CSC DMB ID.
const bool getHisto(const HistoDef &histoD, MonitorObject *&me)
Global get MO function. If request has reached this function it means that histo is not in cache! ...
const bool getDDU(const HistoId &id, const HwId &dduId, MonitorObject *&mo)
Get DDU MO on Histogram Id and DDU Id.
Definition: CSCDQM_Cache.cc:68
static const std::type_info & DDUHistoDefT
void bookDDUHistos(const HwId dduId) const
Book DDU histograms.
boost::function< bool(unsigned int &) > fnIsBookedDDU
void put(const HistoDef &histo, MonitorObject *mo)
Put Monitoring Object into cache.
boost::function< void(const HistoDef &histoT, MonitorObject *&) > fnPutHisto
const bool isBookedCSC(const HwId &crateId, const HwId &dmbId) const
Check if CSC was booked on given identifiers.
void bookCSCHistos(const HwId crateId, const HwId dmbId) const
Book Chamber Histograms.
const bool get(const HistoDef &histo, MonitorObject *&mo)
Get Monitoring Object on Histogram Definition.
Definition: CSCDQM_Cache.cc:29
MonitorObjectProvider * provider
boost::function< bool(const HistoId id, const HwId &id1, MonitorObject *&mo) > fnGetCacheDDUHisto
Interface for Histogram providing objects. Used by Event Processor to retrieve MonitorObject &#39;s and b...
const bool getCSC(const HistoId &id, const HwId &crateId, const HwId &dmbId, const HwId &addId, MonitorObject *&mo)
Get CSC MO on Histogram Id and CSC Crate and DMB Ids.
Definition: CSCDQM_Cache.cc:97
void updateFractionAndEfficiencyHistos()
Update Fraction and Efficiency histograms.
virtual const HwId getAddId() const
Get CSC Additional ID (used to store Layer, CLCT, ALCT and other identifiers.
boost::function< bool(const HistoId id, MonitorObject *&mo) > fnGetCacheEMUHisto