CMS 3D CMS Logo

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 = boost::bind(&Cache::getEMU, &cache, _1, _2);
61  config->fnGetCacheFEDHisto = boost::bind(&Cache::getFED, &cache, _1, _2, _3);
62  config->fnGetCacheDDUHisto = boost::bind(&Cache::getDDU, &cache, _1, _2, _3);
63  config->fnGetCacheCSCHisto = boost::bind(&Cache::getCSC, &cache, _1, _2, _3, _4, _5);
64  config->fnGetCacheParHisto = boost::bind(&Cache::getPar, &cache, _1, _2);
65  config->fnPutHisto = boost::bind(&Cache::put, &cache, _1, _2);
66  config->fnNextBookedCSC = boost::bind(&Cache::nextBookedCSC, &cache, _1, _2, _3);
67  config->fnIsBookedCSC = boost::bind(&Cache::isBookedCSC, &cache, _1, _2);
68  config->fnIsBookedDDU = boost::bind(&Cache::isBookedDDU, &cache, _1);
69  config->fnIsBookedFED = boost::bind(&Cache::isBookedFED, &cache, _1);
70 
72  config->fnGetHisto = boost::bind(&Dispatcher::getHisto, this, _1, _2);
73 
75  config->fnGetCSCDetId = boost::bind(&MonitorObjectProvider::getCSCDetId, provider, _1, _2, _3);
76 
78  config->fnBook = boost::bind(&MonitorObjectProvider::bookMonitorObject, provider, _1);
79  }
80 
86  collection.load();
87  // collection.bookEMUHistos();
88  // processor.init();
89  }
90 
93 
94  /*** FOr multi-threading pre-book all FED, DDU, CSC histograms ***/
95  if (config->getPREBOOK_ALL_HISTOS()) {
97  for (HwId FEDId = 750; FEDId < 758; FEDId++) {
98  if (!cache.isBookedFED(FEDId)) {
100  }
101  }
102 
103  if (config->getPROCESS_DDU()) {
105  for (HwId DDUId = 1; DDUId <= 36; DDUId++) {
106  if (!cache.isBookedDDU(DDUId)) {
107  collection.bookDDUHistos(DDUId);
108  }
109  }
110  }
111 
112  if (config->getPROCESS_CSC()) {
114  for (HwId CrateId = 1; CrateId <= 60; CrateId++) {
115  for (HwId DMBId = 1; DMBId <= 10; DMBId++) {
116  if (DMBId == 6)
117  continue;
118  if (!cache.isBookedCSC(CrateId, DMBId)) {
119  collection.bookCSCHistos(CrateId, DMBId);
120  }
121  }
122  }
123  }
124 
125  if (config->getPROCESS_EFF_PARAMETERS()) {
128  std::vector<HistoId> parameters;
129  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING01);
130  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING02);
131  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01_RING03);
132  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION01);
133  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING01);
134  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02_RING02);
135  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION02);
136  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING01);
137  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03_RING02);
138  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION03);
139  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING01);
140  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04_RING02);
141  parameters.push_back(h::PAR_CSC_SIDEPLUS_STATION04);
142  parameters.push_back(h::PAR_CSC_SIDEPLUS);
143  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING01);
144  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING02);
145  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01_RING03);
146  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION01);
147  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING01);
148  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02_RING02);
149  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION02);
150  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING01);
151  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03_RING02);
152  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION03);
153  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING01);
154  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04_RING02);
155  parameters.push_back(h::PAR_CSC_SIDEMINUS_STATION04);
156  parameters.push_back(h::PAR_CSC_SIDEMINUS);
157  parameters.push_back(h::PAR_REPORT_SUMMARY);
158 
159  for (size_t i = 0; i < parameters.size(); i++) {
160  ParHistoDef histoD(parameters[i]);
161  auto histodef = HistoDef(parameters[i]);
162  HistoBookRequest req(histodef, config->getFOLDER_PAR(), -1.0f);
164  cache.put(histoD, me);
165  }
166  }
167  }
168 
169  processor.init();
170  }
171 
177  unsigned int Dispatcher::maskHWElements(std::vector<std::string>& tokens) {
178  return processorFract.maskHWElements(tokens);
179  }
180 
187  const bool Dispatcher::getHisto(const HistoDef& histoD, MonitorObject*& me) {
189  if (typeid(histoD) == FEDHistoDefT && !cache.isBookedFED(histoD.getFEDId())) {
191  if (cache.get(histoD, me))
192  return true;
193  }
194 
196  if (typeid(histoD) == DDUHistoDefT && !cache.isBookedDDU(histoD.getDDUId())) {
198  if (cache.get(histoD, me))
199  return true;
200  }
201 
203  if (typeid(histoD) == CSCHistoDefT) {
204  if (!cache.isBookedCSC(histoD.getCrateId(), histoD.getDMBId())) {
205  collection.bookCSCHistos(histoD.getCrateId(), histoD.getDMBId());
207  }
208  if (collection.isOnDemand(histoD.getHistoName())) {
209  collection.bookCSCHistos(histoD.getId(), histoD.getCrateId(), histoD.getDMBId(), histoD.getAddId());
210  }
211  if (cache.get(histoD, me))
212  return true;
213  }
214 
216  if (typeid(histoD) == ParHistoDefT) {
217  HistoBookRequest req(histoD, config->getFOLDER_PAR(), -1.0f);
218  me = provider->bookMonitorObject(req);
219  cache.put(histoD, me);
220  return true;
221  }
222 
224  cache.put(histoD, nullptr);
225 
226  return false;
227  }
228 
234  if (config->getFRAEFF_AUTO_UPDATE() && (config->getNEventsCSC() >= config->getFRAEFF_AUTO_UPDATE_START()) &&
235  (config->getNEventsCSC() % config->getFRAEFF_AUTO_UPDATE_FREQ()) == 0) {
237  }
238  }
239 
246  if (config->getFRAEFF_SEPARATE_THREAD()) {
247  boost::function<void()> fnUpdate =
249 #ifdef DQMMT
250  threads.create_thread(boost::ref(fnUpdate));
251 #else
252  fnUpdate();
253 #endif
254  } else {
256  }
257  }
258 
265  if (config->getFRAEFF_SEPARATE_THREAD()) {
266  boost::function<void(HWStandbyType&)> fnUpdate =
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,
289  const int32_t dataSize,
290  const uint32_t errorStat,
291  const int32_t nodeNumber) {
292  config->eventProcessTimer(true);
293  processor.processEvent(data, dataSize, errorStat, nodeNumber);
294  config->eventProcessTimer(false);
296  }
297 
298 #endif
299 
300 #ifdef DQMGLOBAL
301 
309  config->eventProcessTimer(true);
310 
311  // Consider standby information
312  if (standby.process) {
313  // Set in full standby once at the start. Afterwards - no!
314  // i.e. if we ever in the run have gone off standby - this value is false
315  config->setIN_FULL_STANDBY(config->getIN_FULL_STANDBY() && standby.fullStandby());
316 
317  //std::cout << "standby.MeP = " << standby.MeP << "\n";
318  //std::cout << "standby.MeM = " << standby.MeM << "\n";
319  //std::cout << "standby.fullStandby() = " << standby.fullStandby() << "\n";
320  //std::cout << "config->getIN_FULL_STANDBY = " << config->getIN_FULL_STANDBY() << "\n";
321 
322  processStandby(standby);
323 
324  // We do not fill histograms in full standby!
325  if (standby.fullStandby()) {
326  return;
327  }
328  }
329 
330  processor.processEvent(e, inputTag);
331 
332  config->eventProcessTimer(false);
333 
335  }
336 
337 #endif
338 
339 } // 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.
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
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.
Parameter Histogram Definition.
EventProcessorMutex processorFract
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.
Definition: config.py:1
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.
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.
virtual bool getCSCDetId(const unsigned int crateId, const unsigned int dmbId, CSCDetId &detId) const =0
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.
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
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
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
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.
virtual const HwId getFEDId() const
Get FED ID.
void commonConstruct(Configuration *const p_config, MonitorObjectProvider *const p_provider)