CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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 
19 #include "CSCDQM_Dispatcher.h"
20 
21 namespace cscdqm {
22 
30  : collection(p_config), processor(p_config), processorFract(p_config) {
31  commonConstruct(p_config, p_provider);
32  }
33 
34 #ifdef DQMGLOBAL
35 
44  Dispatcher::Dispatcher(Configuration* const p_config,
45  MonitorObjectProvider* p_provider,
46  const edm::InputTag& itag,
48  : collection(p_config), processor(p_config, itag, coco), processorFract(p_config) {
49  commonConstruct(p_config, p_provider);
50  }
51 
52 #endif
53 
56  config = p_config;
57  provider = p_provider;
58 
60  config->fnGetCacheEMUHisto = std::bind(&Cache::getEMU, &cache, std::placeholders::_1, std::placeholders::_2);
62  std::bind(&Cache::getFED, &cache, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
64  std::bind(&Cache::getDDU, &cache, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
66  &cache,
67  std::placeholders::_1,
68  std::placeholders::_2,
69  std::placeholders::_3,
70  std::placeholders::_4,
71  std::placeholders::_5);
72  config->fnGetCacheParHisto = std::bind(&Cache::getPar, &cache, std::placeholders::_1, std::placeholders::_2);
73  config->fnPutHisto = std::bind(&Cache::put, &cache, std::placeholders::_1, std::placeholders::_2);
75  std::bind(&Cache::nextBookedCSC, &cache, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
76  config->fnIsBookedCSC = std::bind(&Cache::isBookedCSC, &cache, std::placeholders::_1, std::placeholders::_2);
77  config->fnIsBookedDDU = std::bind(&Cache::isBookedDDU, &cache, std::placeholders::_1);
78  config->fnIsBookedFED = std::bind(&Cache::isBookedFED, &cache, std::placeholders::_1);
79 
81  config->fnGetHisto = std::bind(&Dispatcher::getHisto, this, std::placeholders::_1, std::placeholders::_2);
82 
85  provider,
86  std::placeholders::_1,
87  std::placeholders::_2,
88  std::placeholders::_3);
89 
91  config->fnBook = std::bind(&MonitorObjectProvider::bookMonitorObject, provider, std::placeholders::_1);
92  }
93 
99  collection.load();
100  // collection.bookEMUHistos();
101  // processor.init();
102  }
103 
106 
107  /*** FOr multi-threading pre-book all FED, DDU, CSC histograms ***/
108  if (config->getPREBOOK_ALL_HISTOS()) {
110  for (HwId FEDId = 750; FEDId < 758; FEDId++) {
111  if (!cache.isBookedFED(FEDId)) {
112  collection.bookFEDHistos(FEDId);
113  }
114  }
115 
116  if (config->getPROCESS_DDU()) {
118  for (HwId DDUId = 1; DDUId <= 36; DDUId++) {
119  if (!cache.isBookedDDU(DDUId)) {
120  collection.bookDDUHistos(DDUId);
121  }
122  }
123  }
124 
125  if (config->getPROCESS_CSC()) {
127  for (HwId CrateId = 1; CrateId <= 60; CrateId++) {
128  for (HwId DMBId = 1; DMBId <= 10; DMBId++) {
129  if (DMBId == 6)
130  continue;
131  if (!cache.isBookedCSC(CrateId, DMBId)) {
132  collection.bookCSCHistos(CrateId, DMBId);
133  }
134  }
135  }
136  }
137 
138  if (config->getPROCESS_EFF_PARAMETERS()) {
141  std::vector<HistoId> parameters;
142  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING01);
143  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING02);
144  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING03);
145  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01);
146  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING01);
147  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING02);
148  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02);
149  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING01);
150  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING02);
151  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03);
152  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING01);
153  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING02);
154  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04);
155  parameters.push_back(h::PAR_CSC_SIDEPLUS);
156  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING01);
157  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING02);
158  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING03);
159  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01);
160  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING01);
161  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING02);
162  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02);
163  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING01);
164  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING02);
165  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03);
166  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING01);
167  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING02);
168  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04);
169  parameters.push_back(h::PAR_CSC_SIDEMINUS);
170  parameters.push_back(h::PAR_REPORT_SUMMARY);
171 
172  for (size_t i = 0; i < parameters.size(); i++) {
173  ParHistoDef histoD(parameters[i]);
174  auto histodef = HistoDef(parameters[i]);
175  HistoBookRequest req(histodef, config->getFOLDER_PAR(), -1.0f);
177  cache.put(histoD, me);
178  }
179  }
180  }
181 
182  processor.init();
183  }
184 
190  unsigned int Dispatcher::maskHWElements(std::vector<std::string>& tokens) {
191  return processorFract.maskHWElements(tokens);
192  }
193 
200  const bool Dispatcher::getHisto(const HistoDef& histoD, MonitorObject*& me) {
202  if (typeid(histoD) == FEDHistoDefT && !cache.isBookedFED(histoD.getFEDId())) {
204  if (cache.get(histoD, me))
205  return true;
206  }
207 
209  if (typeid(histoD) == DDUHistoDefT && !cache.isBookedDDU(histoD.getDDUId())) {
211  if (cache.get(histoD, me))
212  return true;
213  }
214 
216  if (typeid(histoD) == CSCHistoDefT) {
217  if (!cache.isBookedCSC(histoD.getCrateId(), histoD.getDMBId())) {
218  collection.bookCSCHistos(histoD.getCrateId(), histoD.getDMBId());
220  }
221  if (collection.isOnDemand(histoD.getHistoName())) {
222  collection.bookCSCHistos(histoD.getId(), histoD.getCrateId(), histoD.getDMBId(), histoD.getAddId());
223  }
224  if (cache.get(histoD, me))
225  return true;
226  }
227 
229  if (typeid(histoD) == ParHistoDefT) {
230  HistoBookRequest req(histoD, config->getFOLDER_PAR(), -1.0f);
231  me = provider->bookMonitorObject(req);
232  cache.put(histoD, me);
233  return true;
234  }
235 
237  cache.put(histoD, nullptr);
238 
239  return false;
240  }
241 
247  if (config->getFRAEFF_AUTO_UPDATE() && (config->getNEventsCSC() >= config->getFRAEFF_AUTO_UPDATE_START()) &&
248  (config->getNEventsCSC() % config->getFRAEFF_AUTO_UPDATE_FREQ()) == 0) {
250  }
251  }
252 
259  if (config->getFRAEFF_SEPARATE_THREAD()) {
260  std::function<void()> fnUpdate =
262 #ifdef DQMMT
263  threads.create_thread(std::ref(fnUpdate));
264 #else
265  fnUpdate();
266 #endif
267  } else {
269  }
270  }
271 
278  if (config->getFRAEFF_SEPARATE_THREAD()) {
279  std::function<void(HWStandbyType&)> fnUpdate =
280  std::bind(&EventProcessorMutex::processStandby, &processorFract, std::placeholders::_1);
281 #ifdef DQMMT
282  threads.create_thread(std::ref(fnUpdate));
283 #else
284  fnUpdate(standby);
285 #endif
286  } else {
288  }
289  }
290 
291 #ifdef DQMLOCAL
292 
301  void Dispatcher::processEvent(const char* data,
302  const int32_t dataSize,
303  const uint32_t errorStat,
304  const int32_t nodeNumber) {
305  config->eventProcessTimer(true);
306  processor.processEvent(data, dataSize, errorStat, nodeNumber);
307  config->eventProcessTimer(false);
309  }
310 
311 #endif
312 
313 #ifdef DQMGLOBAL
314 
321  void Dispatcher::processEvent(const edm::Event& e, const edm::InputTag& inputTag, HWStandbyType& standby) {
322  config->eventProcessTimer(true);
323 
324  // Consider standby information
325  if (standby.process) {
326  // Set in full standby once at the start. Afterwards - no!
327  // i.e. if we ever in the run have gone off standby - this value is false
328  config->setIN_FULL_STANDBY(config->getIN_FULL_STANDBY() && standby.fullStandby());
329 
330  //std::cout << "standby.MeP = " << standby.MeP << "\n";
331  //std::cout << "standby.MeM = " << standby.MeM << "\n";
332  //std::cout << "standby.fullStandby() = " << standby.fullStandby() << "\n";
333  //std::cout << "config->getIN_FULL_STANDBY = " << config->getIN_FULL_STANDBY() << "\n";
334 
335  processStandby(standby);
336 
337  // We do not fill histograms in full standby!
338  if (standby.fullStandby()) {
339  return;
340  }
341  }
342 
343  processor.processEvent(e, inputTag);
344 
345  config->eventProcessTimer(false);
346 
348  }
349 
350 #endif
351 
352 } // namespace cscdqm
const bool getFED(const HistoId &id, const HwId &fedId, MonitorObject *&mo)
Get FED MO on Histogram Id and FED Id.
Definition: CSCDQM_Cache.cc:66
void init()
Initialize Dispatcher: book histograms, init processor, etc.
unsigned int HwId
static const std::type_info & FEDHistoDefT
const bool isBookedDDU(const HwId &dduId) const
Check if DDU was booked on given identifier.
const HistoName & getHistoName() const
Get raw histogram name.
std::function< MonitorObject *(const HistoBookRequest &)> fnBook
virtual const HwId getCrateId() const
Get CSC Crate ID.
const bool getEMU(const HistoId &id, MonitorObject *&mo)
Get EMU MO on Histogram Id.
Definition: CSCDQM_Cache.cc:51
std::function< void(const HistoDef &histoT, MonitorObject *&)> fnPutHisto
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 ...
std::function< bool(const HistoId id, const HwId &id1, MonitorObject *&mo)> fnGetCacheDDUHisto
dispatcher processEvent(e, inputTag, standby)
std::function< bool(const HistoId id, MonitorObject *&mo)> fnGetCacheParHisto
std::function< bool(const unsigned int, const unsigned int, CSCDetId &)> fnGetCSCDetId
Abstract Base Histogram Definition.
std::function< bool(unsigned int &)> fnIsBookedDDU
void eventProcessTimer(const bool start)
Switch on/off event processing timer.
Parameter Histogram Definition.
std::function< bool(unsigned int &, unsigned int &, unsigned int &)> fnNextBookedCSC
EventProcessorMutex processorFract
std::function< bool(const HistoId id, const HwId &id1, const HwId &id2, const HwId &id3, MonitorObject *&mo)> fnGetCacheCSCHisto
const bool isOnDemand(const HistoName &name) const
Check if the histogram is on demand (by histogram name)
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.
std::function< bool(const HistoDef &histoT, MonitorObject *&)> fnGetHisto
const HistoId getId() const
Get Histogram ID.
const bool getPar(const HistoId &id, MonitorObject *&mo)
Get Parameter MO on Histogram Id.
std::function< bool(const HistoId id, MonitorObject *&mo)> fnGetCacheEMUHisto
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
virtual bool getCSCDetId(const unsigned int crateId, const unsigned int dmbId, CSCDetId &detId) const =0
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
Configuration * config
std::function< bool(unsigned int &)> fnIsBookedFED
void bookFEDHistos(const HwId fedId) const
Book FED histograms.
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:92
static const std::type_info & DDUHistoDefT
void bookDDUHistos(const HwId dduId) const
Book DDU histograms.
void put(const HistoDef &histo, MonitorObject *mo)
Put Monitoring Object into cache.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
std::function< bool(const HistoId id, const HwId &id1, MonitorObject *&mo)> fnGetCacheFEDHisto
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
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.
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.
const bool isBookedFED(const HwId &fedId) const
Check if FED was booked on given identifier.
std::function< bool(unsigned int &, unsigned int &)> fnIsBookedCSC
virtual const HwId getFEDId() const
Get FED ID.
void commonConstruct(Configuration *const p_config, MonitorObjectProvider *const p_provider)