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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
#include "DQM/L1TMonitorClient/interface/L1TGCTClient.h"

#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "DQMServices/Core/interface/DQMStore.h"

using namespace edm;
using namespace std;

// Define statics for bins etc.
const unsigned int ETABINS = 22;
const float ETAMIN = -0.5;
const float ETAMAX = 21.5;

const unsigned int PHIBINS = 18;
const float PHIMIN = -0.5;
const float PHIMAX = 17.5;

L1TGCTClient::L1TGCTClient(const edm::ParameterSet& ps)
    : monitorDir_(ps.getUntrackedParameter<string>("monitorDir", "")),
      counterLS_(0),
      counterEvt_(0),
      prescaleLS_(ps.getUntrackedParameter<int>("prescaleLS", -1)),
      prescaleEvt_(ps.getUntrackedParameter<int>("prescaleEvt", -1)),
      m_runInEventLoop(ps.getUntrackedParameter<bool>("runInEventLoop", false)),
      m_runInEndLumi(ps.getUntrackedParameter<bool>("runInEndLumi", false)),
      m_runInEndRun(ps.getUntrackedParameter<bool>("runInEndRun", false)),
      m_runInEndJob(ps.getUntrackedParameter<bool>("runInEndJob", false)),
      m_stage1_layer2_(ps.getUntrackedParameter<bool>("stage1_layer2_"))

{}

L1TGCTClient::~L1TGCTClient() {}

void L1TGCTClient::book(DQMStore::IBooker& ibooker) {
  // Set to directory with ME in
  ibooker.setCurrentFolder(monitorDir_);

  l1GctIsoEmOccEta_ = ibooker.book1D("IsoEmOccEta", "ISO EM  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctIsoEmOccPhi_ = ibooker.book1D("IsoEmOccPhi", "ISO EM  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  l1GctNonIsoEmOccEta_ = ibooker.book1D("NonIsoEmOccEta", "NON-ISO EM  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctNonIsoEmOccPhi_ = ibooker.book1D("NonIsoEmOccPhi", "NON-ISO EM  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  l1GctAllJetsOccEta_ =
      ibooker.book1D("AllJetsOccEta", "CENTRAL AND FORWARD JET  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctAllJetsOccPhi_ =
      ibooker.book1D("AllJetsOccPhi", "CENTRAL AND FORWARD JET  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  l1GctCenJetsOccEta_ = ibooker.book1D("CenJetsOccEta", "CENTRAL JET  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctCenJetsOccPhi_ = ibooker.book1D("CenJetsOccPhi", "CENTRAL JET  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  l1GctForJetsOccEta_ = ibooker.book1D("ForJetsOccEta", "FORWARD JET  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctForJetsOccPhi_ = ibooker.book1D("ForJetsOccPhi", "FORWARD JET  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  l1GctTauJetsOccEta_ = ibooker.book1D("TauJetsOccEta", "TAU JET  #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
  l1GctTauJetsOccPhi_ = ibooker.book1D("TauJetsOccPhi", "TAU JET  #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  if (m_stage1_layer2_ == true) {
    l1GctIsoTauJetsOccEta_ = ibooker.book1D("IsoTauJetsOccEta", "TAU JET #eta OCCUPANCY", ETABINS, ETAMIN, ETAMAX);
    l1GctIsoTauJetsOccPhi_ = ibooker.book1D("IsoTauJetsOccPhi", "TAU JET #phi OCCUPANCY", PHIBINS, PHIMIN, PHIMAX);
  }
}

void L1TGCTClient::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker,
                                         DQMStore::IGetter& igetter,
                                         const edm::LuminosityBlock& lumiSeg,
                                         const edm::EventSetup& c) {
  if (m_runInEndLumi) {
    book(ibooker);
    processHistograms(igetter);
  }
}

void L1TGCTClient::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
  if (m_runInEndRun) {
    book(ibooker);
    processHistograms(igetter);
  }
}

void L1TGCTClient::processHistograms(DQMStore::IGetter& igetter) {
  MonitorElement* Input;

  if (m_stage1_layer2_ == false) {
    InputDir = "L1T/L1TGCT/";
  } else {
    InputDir = "L1T/L1TStage1Layer2/";
  }

  Input = igetter.get(InputDir + "IsoEmOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctIsoEmOccEta_);
    makeYProjection(Input->getTH2F(), l1GctIsoEmOccPhi_);
  }

  Input = igetter.get(InputDir + "NonIsoEmOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctNonIsoEmOccEta_);
    makeYProjection(Input->getTH2F(), l1GctNonIsoEmOccPhi_);
  }

  Input = igetter.get(InputDir + "AllJetsOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctAllJetsOccEta_);
    makeYProjection(Input->getTH2F(), l1GctAllJetsOccPhi_);
  }

  Input = igetter.get(InputDir + "CenJetsOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctCenJetsOccEta_);
    makeYProjection(Input->getTH2F(), l1GctCenJetsOccPhi_);
  }

  Input = igetter.get(InputDir + "ForJetsOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctForJetsOccEta_);
    makeYProjection(Input->getTH2F(), l1GctForJetsOccPhi_);
  }

  Input = igetter.get(InputDir + "TauJetsOccEtaPhi");
  if (Input != nullptr) {
    makeXProjection(Input->getTH2F(), l1GctTauJetsOccEta_);
    makeYProjection(Input->getTH2F(), l1GctTauJetsOccPhi_);
  }

  if (m_stage1_layer2_ == true) {
    Input = igetter.get(InputDir + "IsoTauJetsOccEtaPhi");
    if (Input != nullptr) {
      makeXProjection(Input->getTH2F(), l1GctIsoTauJetsOccEta_);
      makeYProjection(Input->getTH2F(), l1GctIsoTauJetsOccPhi_);
    }
  }
}

void L1TGCTClient::makeXProjection(TH2F* input, MonitorElement* output) {
  // Are the provided input and output consistent
  if (input->GetNbinsX() != output->getNbinsX())
    return;

  // Make the projection
  TH1D* projX = input->ProjectionX();

  for (Int_t i = 0; i < projX->GetNbinsX(); i++) {
    output->setBinContent(i + 1, projX->GetBinContent(i + 1));
  }
  delete projX;
}

void L1TGCTClient::makeYProjection(TH2F* input, MonitorElement* output) {
  // Are the provided input and output consistent
  if (input->GetNbinsY() != output->getNbinsX())
    return;

  // Make the projection
  TH1D* projY = input->ProjectionY();

  for (Int_t i = 0; i < projY->GetNbinsX(); i++) {
    output->setBinContent(i + 1, projY->GetBinContent(i + 1));
  }
  delete projY;
}