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 
308  void Dispatcher::processEvent(const edm::Event& e, const edm::InputTag& inputTag, HWStandbyType& standby) {
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
mps_fire.i
i
Definition: mps_fire.py:355
cscdqm::HistoDef
Abstract Base Histogram Definition.
Definition: CSCDQM_HistoDef.h:62
cscdqm::HWStandbyType
Definition: CSCDQM_EventProcessor.h:59
cscdqm::Dispatcher::cache
Cache cache
Definition: CSCDQM_Dispatcher.h:161
CSCDQM_Dispatcher.h
cscdqm::Cache::getFED
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
cscdqm::Collection::bookCSCHistos
void bookCSCHistos(const HwId crateId, const HwId dmbId) const
Book Chamber Histograms.
Definition: CSCDQM_Collection.cc:372
cscdqm::Dispatcher::Dispatcher
Dispatcher(Configuration *const p_config, MonitorObjectProvider *const p_provider)
Constructor.
Definition: CSCDQM_Dispatcher.cc:29
cscdqm::Dispatcher::updateFractionAndEfficiencyHistos
void updateFractionAndEfficiencyHistos()
On demand update fraction and efficiency MOs.
Definition: CSCDQM_Dispatcher.cc:244
cscdqm::Cache::nextBookedCSC
const bool nextBookedCSC(unsigned int &n, unsigned int &crateId, unsigned int &dmbId) const
Iterator to get booked CSC identifiers on enumerator.
Definition: CSCDQM_Cache.cc:244
cscdqm::Cache::isBookedDDU
const bool isBookedDDU(const HwId &dduId) const
Check if DDU was booked on given identifier.
Definition: CSCDQM_Cache.cc:322
cscdqm::CSCHistoDefT
static const std::type_info & CSCHistoDefT
Definition: CSCDQM_HistoDef.h:453
cscdqm::ParHistoDef
Parameter Histogram Definition.
Definition: CSCDQM_HistoDef.h:425
cscdqm::Dispatcher::processorFract
EventProcessorMutex processorFract
Definition: CSCDQM_Dispatcher.h:164
cscdqm::HistoDef::getAddId
virtual const HwId getAddId() const
Get CSC Additional ID (used to store Layer, CLCT, ALCT and other identifiers.
Definition: CSCDQM_HistoDef.h:196
parameters
parameters
Definition: BeamSpot_PayloadInspector.cc:14
cscdqm::Cache::isBookedCSC
const bool isBookedCSC(const HwId &crateId, const HwId &dmbId) const
Check if CSC was booked on given identifiers.
Definition: CSCDQM_Cache.cc:299
config
Definition: config.py:1
cscdqm::EventProcessor::init
void init()
Initialize EventProcessor: reading out config information.
Definition: CSCDQM_EventProcessor.cc:58
cscdqm::Cache::get
const bool get(const HistoDef &histo, MonitorObject *&mo)
Get Monitoring Object on Histogram Definition.
Definition: CSCDQM_Cache.cc:29
cscdqm::HwId
unsigned int HwId
Definition: CSCDQM_HistoDef.h:38
cscdqm::DDUHistoDefT
static const std::type_info & DDUHistoDefT
Definition: CSCDQM_HistoDef.h:452
cscdqm::Dispatcher::updateFractionAndEfficiencyHistosAuto
void updateFractionAndEfficiencyHistosAuto()
Automatically called fraction and efficiency MOs update function.
Definition: CSCDQM_Dispatcher.cc:233
processEvent
dispatcher processEvent(e, inputTag, standby)
cscdqm::HistoDef::getCrateId
virtual const HwId getCrateId() const
Get CSC Crate ID.
Definition: CSCDQM_HistoDef.h:183
cscdqm::EventProcessorMutex::processStandby
void processStandby(HWStandbyType &standby)
Process standby information.
Definition: CSCDQM_Dispatcher.h:95
cscdqm::HistoBookRequest
Definition: CSCDQM_MonitorObjectProvider.h:31
cscdqm::HistoDef::getDDUId
virtual const HwId getDDUId() const
Get DDU ID.
Definition: CSCDQM_HistoDef.h:208
cscdqm::Cache::getPar
const bool getPar(const HistoId &id, MonitorObject *&mo)
Get Parameter MO on Histogram Id.
Definition: CSCDQM_Cache.cc:143
cscdqm::Collection::bookDDUHistos
void bookDDUHistos(const HwId dduId) const
Book DDU histograms.
Definition: CSCDQM_Collection.cc:349
CommonMethods.lock
def lock()
Definition: CommonMethods.py:82
cscdqm
Definition: CSCDQM_DCSBase.h:29
cscdqm::Cache::getDDU
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
cscdqm::Dispatcher::maskHWElements
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
Definition: CSCDQM_Dispatcher.cc:177
cscdqm::Dispatcher::commonConstruct
void commonConstruct(Configuration *const p_config, MonitorObjectProvider *const p_provider)
Definition: CSCDQM_Dispatcher.cc:54
universalConfigTemplate.collection
collection
Definition: universalConfigTemplate.py:81
cscdqm::HistoDef::getId
const HistoId getId() const
Get Histogram ID.
Definition: CSCDQM_HistoDef.h:84
cscdqm::Dispatcher::collection
Collection collection
Definition: CSCDQM_Dispatcher.h:155
cscdqm::EventProcessorMutex::maskHWElements
unsigned int maskHWElements(std::vector< std::string > &tokens)
Mask HW elements from the efficiency calculations. Can be applied on runtime!
Definition: CSCDQM_Dispatcher.h:89
cscdqm::Collection::bookFEDHistos
void bookFEDHistos(const HwId fedId) const
Book FED histograms.
Definition: CSCDQM_Collection.cc:327
cscdqm::Collection::load
void load()
Load XML file and fill definition map(s)
Definition: CSCDQM_Collection.cc:37
cscdqm::Dispatcher::processor
EventProcessor processor
Definition: CSCDQM_Dispatcher.h:158
cscdqm::ParHistoDefT
static const std::type_info & ParHistoDefT
Definition: CSCDQM_HistoDef.h:454
cscdqm::Dispatcher::processStandby
void processStandby(HWStandbyType &standby)
Set HW Standby modes.
Definition: CSCDQM_Dispatcher.cc:263
cscdqm::FEDHistoDefT
static const std::type_info & FEDHistoDefT
Definition: CSCDQM_HistoDef.h:451
cscdqm::Configuration
CSCDQM Framework Global Configuration.
Definition: CSCDQM_Configuration.h:233
cscdqm::Collection::isOnDemand
const bool isOnDemand(const HistoName &name) const
Check if the histogram is on demand (by histogram name)
Definition: CSCDQM_Collection.cc:625
cscdqm::HistoDef::getHistoName
const HistoName & getHistoName() const
Get raw histogram name.
Definition: CSCDQM_HistoDef.h:90
cscdqm::Dispatcher::provider
MonitorObjectProvider * provider
Definition: CSCDQM_Dispatcher.h:152
cscdqm::Cache::isBookedFED
const bool isBookedFED(const HwId &fedId) const
Check if FED was booked on given identifier.
Definition: CSCDQM_Cache.cc:312
cscdqm::LockType
Definition: CSCDQM_Lock.h:31
cscdqm::Cache::put
void put(const HistoDef &histo, MonitorObject *mo)
Put Monitoring Object into cache.
Definition: CSCDQM_Cache.cc:157
cscdqm::Dispatcher::init
void init()
Initialize Dispatcher: book histograms, init processor, etc.
Definition: CSCDQM_Dispatcher.cc:85
cscdqm::Dispatcher::getHisto
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!
Definition: CSCDQM_Dispatcher.cc:187
cscdqm::Collection::bookEMUHistos
void bookEMUHistos() const
Book EMU histograms.
Definition: CSCDQM_Collection.cc:305
cscdqm::Cache::getEMU
const bool getEMU(const HistoId &id, MonitorObject *&mo)
Get EMU MO on Histogram Id.
Definition: CSCDQM_Cache.cc:51
HiBiasedCentrality_cfi.function
function
Definition: HiBiasedCentrality_cfi.py:4
cscdqm::MonitorObject
Monitoring Object interface used to cover Root object and provide common interface to EventProcessor ...
Definition: CSCDQM_MonitorObject.h:35
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
funct::void
TEMPL(T2) struct Divides void
Definition: Factorize.h:29
cscdqm::HistoDef::getFEDId
virtual const HwId getFEDId() const
Get FED ID.
Definition: CSCDQM_HistoDef.h:202
cscdqm::Lock::mutex
bool mutex
Definition: CSCDQM_Lock.h:48
cscdqm::MonitorObjectProvider::bookMonitorObject
virtual MonitorObject * bookMonitorObject(const HistoBookRequest &p_req)=0
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
SimL1EmulatorRepack_Full_cff.inputTag
inputTag
Definition: SimL1EmulatorRepack_Full_cff.py:56
cscdqm::Dispatcher::book
void book()
Definition: CSCDQM_Dispatcher.cc:91
edm::Event
Definition: Event.h:73
cscdqm::EventProcessorMutex::updateFractionAndEfficiencyHistos
void updateFractionAndEfficiencyHistos()
Update Fraction and Efficiency histograms.
Definition: CSCDQM_Dispatcher.h:72
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
cscdqm::HistoDef::getDMBId
virtual const HwId getDMBId() const
Get CSC DMB ID.
Definition: CSCDQM_HistoDef.h:189
cscdqm::Cache::getCSC
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:119
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
cscdqm::MonitorObjectProvider
Interface for Histogram providing objects. Used by Event Processor to retrieve MonitorObject 's and b...
Definition: CSCDQM_MonitorObjectProvider.h:124
cscdqm::MonitorObjectProvider::getCSCDetId
virtual bool getCSCDetId(const unsigned int crateId, const unsigned int dmbId, CSCDetId &detId) const =0