CMS 3D CMS Logo

PNDiodeTask.cc
Go to the documentation of this file.
2 
5 
6 namespace ecaldqm {
7 
8  PNDiodeTask::PNDiodeTask() : DQWorkerTask() { std::fill_n(enable_, nDCC, false); }
9 
10  bool PNDiodeTask::filterRunType(short const* _runType) {
11  bool enable(false);
12 
13  for (int iDCC(0); iDCC < 54; iDCC++) {
14  if (_runType[iDCC] == EcalDCCHeaderBlock::LASER_STD || _runType[iDCC] == EcalDCCHeaderBlock::LASER_GAP ||
15  _runType[iDCC] == EcalDCCHeaderBlock::LED_STD || _runType[iDCC] == EcalDCCHeaderBlock::LED_GAP ||
16  _runType[iDCC] == EcalDCCHeaderBlock::TESTPULSE_MGPA || _runType[iDCC] == EcalDCCHeaderBlock::TESTPULSE_GAP ||
17  _runType[iDCC] == EcalDCCHeaderBlock::PEDESTAL_STD || _runType[iDCC] == EcalDCCHeaderBlock::PEDESTAL_GAP) {
18  enable = true;
19  enable_[iDCC] = true;
20  } else
21  enable_[iDCC] = false;
22  }
23 
24  return enable;
25  }
26 
28  if (_ids.empty())
29  return;
30 
31  MESet* set(nullptr);
32 
33  switch (_collection) {
34  case kMEMTowerIdErrors:
35  set = &MEs_.at("MEMTowerId");
36  break;
38  set = &MEs_.at("MEMBlockSize");
39  break;
40  case kMEMChIdErrors:
41  set = &MEs_.at("MEMChId");
42  break;
43  case kMEMGainErrors:
44  set = &MEs_.at("MEMGain");
45  break;
46  default:
47  return;
48  }
49 
50  std::for_each(_ids.begin(), _ids.end(), [&](EcalElectronicsIdCollection::value_type const& id) {
51  if (id.towerId() == 69) {
52  edm::LogWarning("EcalDQM")
53  << "PNDiodeTask::runOnErrors : one of the ids in the electronics ID collection is unphysical in lumi "
54  "number "
55  << timestamp_.iLumi << ", event number "
56  << timestamp_
57  .iEvt; // Added March 2018 because some events have this unphysical tower ID and cause the ECAL calibration application to crash.
58  } else {
59  set->fill(EcalElectronicsId(id.dccId(), id.towerId(), 1, id.xtalId()));
60  }
61  });
62  }
63 
65  MESet& meOccupancy(MEs_.at("Occupancy"));
66  MESet& meOccupancySummary(MEs_.at("OccupancySummary"));
67  MESet& mePedestal(MEs_.at("Pedestal"));
68 
69  std::for_each(_digis.begin(), _digis.end(), [&](EcalPnDiodeDigiCollection::value_type const& digi) {
70  const EcalPnDiodeDetId& id(digi.id());
71 
72  if (!enable_[dccId(id) - 1])
73  return;
74 
75  meOccupancy.fill(id);
76  meOccupancySummary.fill(id);
77 
78  for (int iSample(0); iSample < 4; iSample++) {
79  if (digi.sample(iSample).gainId() != 1)
80  break;
81  mePedestal.fill(id, double(digi.sample(iSample).adc()));
82  }
83  });
84  }
85 
87 } // namespace ecaldqm
void runOnErrors(EcalElectronicsIdCollection const &, Collections)
Definition: PNDiodeTask.cc:27
bool enable_[ecaldqm::nDCC]
Definition: PNDiodeTask.h:26
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:112
edm::LuminosityBlockNumber_t iLumi
Definition: DQWorker.h:35
const_iterator end() const
Definition: EDCollection.h:122
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
bool filterRunType(short const *) override
Definition: PNDiodeTask.cc:10
bool empty() const
Definition: EDCollection.h:77
void runOnPnDigis(EcalPnDiodeDigiCollection const &)
Definition: PNDiodeTask.cc:64
unsigned towerId(DetId const &)
const_iterator end() const
Timestamp timestamp_
Definition: DQWorker.h:81
const_iterator begin() const
Definition: EDCollection.h:117
edm::EventNumber_t iEvt
Definition: DQWorker.h:36
MESetCollection MEs_
Definition: DQWorker.h:78
unsigned dccId(DetId const &)
const_iterator begin() const