Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#include "DQM/EcalMonitorClient/interface/RawDataClient.h"

#include "DQM/EcalCommon/interface/EcalDQMCommonUtils.h"
#include "DQM/EcalCommon/interface/FEFlags.h"

#include "CondFormats/EcalObjects/interface/EcalDQMStatusHelper.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include <cmath>

namespace ecaldqm {

  RawDataClient::RawDataClient() : DQWorkerClient(), minEvents_(0), synchErrThresholdFactor_(0.) {
    qualitySummaries_.insert("QualitySummary");
  }

  void RawDataClient::setParams(edm::ParameterSet const& _params) {
    minEvents_ = _params.getUntrackedParameter<int>("minEvents");
    synchErrThresholdFactor_ = _params.getUntrackedParameter<double>("synchErrThresholdFactor");
  }

  void RawDataClient::producePlots(ProcessType) {
    MESet& meQualitySummary(MEs_.at("QualitySummary"));
    MESet& meErrorsSummary(MEs_.at("ErrorsSummary"));

    MESet const& sEntries(sources_.at("Entries"));
    MESet const& sL1ADCC(sources_.at("L1ADCC"));
    MESet const& sFEStatus(sources_.at("FEStatus"));

    uint32_t mask(1 << EcalDQMStatusHelper::STATUS_FLAG_ERROR);

    std::vector<int> dccStatus(nDCC, 1);

    for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) {
      double entries(sEntries.getBinContent(getEcalDQMSetupObjects(), iDCC + 1));
      if (entries > 1. && sL1ADCC.getBinContent(getEcalDQMSetupObjects(), iDCC + 1) >
                              synchErrThresholdFactor_ * std::log(entries) / std::log(10.))
        dccStatus[iDCC] = 0;
    }

    MESet::iterator meEnd(meQualitySummary.end(GetElectronicsMap()));
    for (MESet::iterator meItr(meQualitySummary.beginChannel(GetElectronicsMap())); meItr != meEnd;
         meItr.toNextChannel(GetElectronicsMap())) {
      DetId id(meItr->getId());

      bool doMask(meQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap()));

      int dccid(dccId(id, GetElectronicsMap()));

      if (dccStatus[dccid - 1] == 0) {
        meItr->setBinContent(doMask ? kMUnknown : kUnknown);
        continue;
      }

      int towerStatus(doMask ? kMGood : kGood);
      float towerEntries(0.);
      for (unsigned iS(0); iS < nFEFlags; iS++) {
        float entries(sFEStatus.getBinContent(getEcalDQMSetupObjects(), id, iS + 1));
        towerEntries += entries;
        if (entries > minEvents_ && iS != Enabled && iS != Suppressed && iS != ForcedFullSupp && iS != FIFOFull &&
            iS != ForcedZS)
          towerStatus = doMask ? kMBad : kBad;
      }

      if (towerEntries < 1.)
        towerStatus = doMask ? kMUnknown : kUnknown;

      meItr->setBinContent(towerStatus);
      if (towerStatus == kBad)
        meErrorsSummary.fill(getEcalDQMSetupObjects(), dccid);
    }
  }

  DEFINE_ECALDQM_WORKER(RawDataClient);
}  // namespace ecaldqm