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
#include "DQM/EcalMonitorClient/interface/PNIntegrityClient.h"

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

#include "DataFormats/EcalDetId/interface/EcalPnDiodeDetId.h"

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

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

namespace ecaldqm {
  PNIntegrityClient::PNIntegrityClient() : DQWorkerClient(), errFractionThreshold_(0.) {
    qualitySummaries_.insert("QualitySummary");
  }

  void PNIntegrityClient::setParams(edm::ParameterSet const& _params) {
    errFractionThreshold_ = _params.getUntrackedParameter<double>("errFractionThreshold");
  }

  void PNIntegrityClient::producePlots(ProcessType) {
    uint32_t mask(0x1 << EcalDQMStatusHelper::TT_SIZE_ERROR | 0x1 << EcalDQMStatusHelper::TT_ID_ERROR |
                  0x1 << EcalDQMStatusHelper::CH_ID_ERROR | 0x1 << EcalDQMStatusHelper::CH_GAIN_ZERO_ERROR);

    MESet& meQualitySummary(MEs_.at("QualitySummary"));

    MESet const& sOccupancy(sources_.at("Occupancy"));
    MESet const& sMEMChId(sources_.at("MEMChId"));
    MESet const& sMEMGain(sources_.at("MEMGain"));
    MESet const& sMEMBlockSize(sources_.at("MEMBlockSize"));
    MESet const& sMEMTowerId(sources_.at("MEMTowerId"));

    for (unsigned iDCC(0); iDCC < nDCC; ++iDCC) {
      if (memDCCIndex(iDCC + 1) == unsigned(-1))
        continue;
      for (unsigned iPN(0); iPN < 10; ++iPN) {
        int subdet(0);
        if (iDCC >= kEBmLow && iDCC <= kEBpHigh)
          subdet = EcalBarrel;
        else
          subdet = EcalEndcap;

        EcalPnDiodeDetId id(subdet, iDCC + 1, iPN + 1);

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

        float entries(sOccupancy.getBinContent(getEcalDQMSetupObjects(), id));

        float chid(sMEMChId.getBinContent(getEcalDQMSetupObjects(), id));
        float gain(sMEMGain.getBinContent(getEcalDQMSetupObjects(), id));

        float blocksize(sMEMBlockSize.getBinContent(getEcalDQMSetupObjects(), id));
        float towerid(sMEMTowerId.getBinContent(getEcalDQMSetupObjects(), id));

        if (entries + gain + chid + blocksize + towerid < 1.) {
          meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMUnknown : kUnknown);
          continue;
        }

        float chErr((gain + chid + blocksize + towerid) / (entries + gain + chid + blocksize + towerid));

        if (chErr > errFractionThreshold_)
          meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMBad : kBad);
        else
          meQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, doMask ? kMGood : kGood);
      }
    }
  }

  DEFINE_ECALDQM_WORKER(PNIntegrityClient);
}  // namespace ecaldqm