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 
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 
45  const edm::InputTag& itag, edm::ConsumesCollector&& coco) :
46  collection(p_config), processor(p_config, itag, coco), processorFract(p_config) {
47  commonConstruct( p_config, p_provider );
48 }
49 
50 #endif
51 
52 void Dispatcher::commonConstruct( Configuration* const p_config, MonitorObjectProvider* p_provider ) {
53 
55  config = p_config;
56  provider = p_provider;
57 
59  config->fnGetCacheEMUHisto = boost::bind(&Cache::getEMU, &cache, _1, _2);
60  config->fnGetCacheFEDHisto = boost::bind(&Cache::getFED, &cache, _1, _2, _3);
61  config->fnGetCacheDDUHisto = boost::bind(&Cache::getDDU, &cache, _1, _2, _3);
62  config->fnGetCacheCSCHisto = boost::bind(&Cache::getCSC, &cache, _1, _2, _3, _4, _5);
63  config->fnGetCacheParHisto = boost::bind(&Cache::getPar, &cache, _1, _2);
64  config->fnPutHisto = boost::bind(&Cache::put, &cache, _1, _2);
65  config->fnNextBookedCSC = boost::bind(&Cache::nextBookedCSC, &cache, _1, _2, _3);
66  config->fnIsBookedCSC = boost::bind(&Cache::isBookedCSC, &cache, _1, _2);
67  config->fnIsBookedDDU = boost::bind(&Cache::isBookedDDU, &cache, _1);
68  config->fnIsBookedFED = boost::bind(&Cache::isBookedFED, &cache, _1);
69 
71  config->fnGetHisto = boost::bind(&Dispatcher::getHisto, this, _1, _2);
72 
75 
78 
79 }
80 
86  collection.load();
87  // collection.bookEMUHistos();
88  // processor.init();
89 }
90 
92 
94 
95  /*** FOr multi-threading pre-book all FED, DDU, CSC histograms ***/
96  if ( config->getPREBOOK_ALL_HISTOS()) {
97 
99  for (HwId FEDId = 750; FEDId < 758; FEDId++) {
100  if (!cache.isBookedFED(FEDId)) {
101  collection.bookFEDHistos(FEDId);
102  }
103  }
104 
105  if (config->getPROCESS_DDU()) {
107  for (HwId DDUId = 1; DDUId <= 36; DDUId++) {
108  if (!cache.isBookedDDU(DDUId)) {
109  collection.bookDDUHistos(DDUId);
110  }
111  }
112  }
113 
114  if (config->getPROCESS_CSC()) {
116  for (HwId CrateId = 1; CrateId <= 60; CrateId++) {
117  for (HwId DMBId = 1; DMBId <=10; DMBId++) {
118  if (DMBId == 6) continue;
119  if (!cache.isBookedCSC(CrateId, DMBId)) {
120  collection.bookCSCHistos(CrateId, DMBId);
121  }
122  }
123  }
124  }
125 
126  if (config->getPROCESS_EFF_PARAMETERS()) {
129  std::vector<HistoId> parameters;
130  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING01);
131  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING02);
132  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING03);
133  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01);
134  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING01);
135  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING02);
136  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02);
137  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING01);
138  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING02);
139  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03);
140  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING01);
141  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING02);
142  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04);
143  parameters.push_back(h::PAR_CSC_SIDEPLUS);
144  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING01);
145  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING02);
146  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING03);
147  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01);
148  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING01);
149  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING02);
150  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02);
151  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING01);
152  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING02);
153  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03);
154  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING01);
155  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING02);
156  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04);
157  parameters.push_back(h::PAR_CSC_SIDEMINUS);
158  parameters.push_back(h::PAR_REPORT_SUMMARY);
159 
160 
161  for (size_t i = 0; i < parameters.size(); i++) {
162  ParHistoDef histoD(parameters[i]);
163  HistoBookRequest req(parameters[i], config->getFOLDER_PAR(), -1.0f);
165  cache.put(histoD, me);
166  }
167  }
168 
169  }
170 
171  processor.init();
172 
173 }
174 
180 unsigned int Dispatcher::maskHWElements(std::vector<std::string>& tokens) {
181  return processorFract.maskHWElements(tokens);
182 }
183 
190 const bool Dispatcher::getHisto(const HistoDef& histoD, MonitorObject*& me) {
191 
193  if (typeid(histoD) == FEDHistoDefT && !cache.isBookedFED(histoD.getFEDId())) {
195  if (cache.get(histoD, me)) return true;
196  }
197 
199  if (typeid(histoD) == DDUHistoDefT && !cache.isBookedDDU(histoD.getDDUId())) {
201  if (cache.get(histoD, me)) return true;
202  }
203 
205  if (typeid(histoD) == CSCHistoDefT) {
206  if (!cache.isBookedCSC(histoD.getCrateId(), histoD.getDMBId())) {
207  collection.bookCSCHistos(histoD.getCrateId(), histoD.getDMBId());
209  }
210  if (collection.isOnDemand(histoD.getHistoName())) {
211  collection.bookCSCHistos(histoD.getId(), histoD.getCrateId(), histoD.getDMBId(), histoD.getAddId());
212  }
213  if (cache.get(histoD, me)) return true;
214  }
215 
217  if (typeid(histoD) == ParHistoDefT) {
218  HistoBookRequest req(histoD, config->getFOLDER_PAR(), -1.0f);
219  me = provider->bookMonitorObject(req);
220  cache.put(histoD, me);
221  return true;
222  }
223 
225  cache.put(histoD, NULL);
226 
227  return false;
228 }
229 
235  if ( config->getFRAEFF_AUTO_UPDATE() &&
236  (config->getNEventsCSC() >= config->getFRAEFF_AUTO_UPDATE_START()) &&
237  (config->getNEventsCSC() % config->getFRAEFF_AUTO_UPDATE_FREQ()) == 0) {
239  }
240 }
241 
248  if (config->getFRAEFF_SEPARATE_THREAD()) {
249  boost::function<void ()> fnUpdate = boost::bind(&EventProcessorMutex::updateFractionAndEfficiencyHistos, &processorFract);
250 #ifdef DQMMT
251  threads.create_thread(boost::ref(fnUpdate));
252 #else
253  fnUpdate();
254 #endif
255  } else {
257  }
258 }
259 
266  if (config->getFRAEFF_SEPARATE_THREAD()) {
267  boost::function<void (HWStandbyType&)> fnUpdate = boost::bind(&EventProcessorMutex::processStandby, &processorFract, _1);
268 #ifdef DQMMT
269  threads.create_thread(boost::ref(fnUpdate));
270 #else
271  fnUpdate(standby);
272 #endif
273  } else {
275  }
276 }
277 
278 #ifdef DQMLOCAL
279 
288 void Dispatcher::processEvent(const char* data, const int32_t dataSize, const uint32_t errorStat, const int32_t nodeNumber) {
289  config->eventProcessTimer(true);
290  processor.processEvent(data, dataSize, errorStat, nodeNumber);
291  config->eventProcessTimer(false);
293 }
294 
295 #endif
296 
297 #ifdef DQMGLOBAL
298 
305 void Dispatcher::processEvent(const edm::Event& e, const edm::InputTag& inputTag, HWStandbyType& standby) {
306  config->eventProcessTimer(true);
307 
308  // Consider standby information
309  if (standby.process) {
310 
311  // Set in full standby once at the start. Afterwards - no!
312  // i.e. if we ever in the run have gone off standby - this value is false
313  config->setIN_FULL_STANDBY(config->getIN_FULL_STANDBY() && standby.fullStandby());
314 
315  //std::cout << "standby.MeP = " << standby.MeP << "\n";
316  //std::cout << "standby.MeM = " << standby.MeM << "\n";
317  //std::cout << "standby.fullStandby() = " << standby.fullStandby() << "\n";
318  //std::cout << "config->getIN_FULL_STANDBY = " << config->getIN_FULL_STANDBY() << "\n";
319 
320  processStandby(standby);
321 
322  // We do not fill histograms in full standby!
323  if (standby.fullStandby()) {
324  return;
325  }
326 
327  }
328 
329  processor.processEvent(e, inputTag);
330 
331  config->eventProcessTimer(false);
332 
334 
335 }
336 
337 #endif
338 
339 }
const bool getFED(const HistoId &id, const HwId &fedId, MonitorObject *&mo)
Get FED MO on Histogram Id and FED Id.
Definition: CSCDQM_Cache.cc:71
void init()
Initialize Dispatcher: book histograms, init processor, etc.
int i
Definition: DBlmapReader.cc:9
unsigned int HwId
boost::function< bool(unsigned int &, unsigned int &) > fnIsBookedCSC
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.
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:56
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 ...
dispatcher processEvent(e, inputTag, standby)
Abstract Base Histogram Definition.
void eventProcessTimer(const bool start)
Switch on/off event processing timer.
Parameter Histogram Definition.
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
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.
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< bool(unsigned int &) > fnIsBookedFED
boost::function< bool(const HistoId id, const HwId &id1, MonitorObject *&mo) > fnGetCacheFEDHisto
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.
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.
virtual const HwId getFEDId() const
Get FED ID.
void commonConstruct(Configuration *const p_config, MonitorObjectProvider *const p_provider)
boost::function< bool(const HistoId id, MonitorObject *&mo) > fnGetCacheEMUHisto