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 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
#include "DQMOffline/PFTau/interface/Matchers.h"
#include "DataFormats/METReco/interface/MET.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "DQMOffline/PFTau/interface/PFMETMonitor.h"

#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
#include <TROOT.h>

#include <TProfile.h>

//
// -- Constructor
//
PFMETMonitor::PFMETMonitor(Benchmark::Mode mode) : Benchmark(mode), candBench_(mode), matchCandBench_(mode) {
  setRange(0.0, 10e10, -10.0, 10.0, -3.14, 3.14);

  px_ = nullptr;
  sumEt_ = nullptr;
  delta_ex_ = nullptr;
  delta_ex_VS_set_ = nullptr;
  delta_set_VS_set_ = nullptr;
  delta_set_Over_set_VS_set_ = nullptr;

  profile_delta_ex_VS_set_ = nullptr;
  profile_delta_set_VS_set_ = nullptr;
  profile_delta_set_Over_set_VS_set_ = nullptr;
  profileRMS_delta_ex_VS_set_ = nullptr;
  profileRMS_delta_set_VS_set_ = nullptr;
  profileRMS_delta_set_Over_set_VS_set_ = nullptr;

  createMETSpecificHistos_ = false;
  histogramBooked_ = false;
}

//
// -- Destructor
//
PFMETMonitor::~PFMETMonitor() {}

//
// -- Set Parameters accessing them from ParameterSet
//
void PFMETMonitor::setParameters(const edm::ParameterSet &parameterSet) {
  mode_ = (Benchmark::Mode)parameterSet.getParameter<int>("mode");
  createMETSpecificHistos_ = parameterSet.getParameter<bool>("CreateMETSpecificHistos");
  setRange(parameterSet.getParameter<double>("ptMin"),
           parameterSet.getParameter<double>("ptMax"),
           parameterSet.getParameter<double>("etaMin"),
           parameterSet.getParameter<double>("etaMax"),
           parameterSet.getParameter<double>("phiMin"),
           parameterSet.getParameter<double>("phiMax"));

  candBench_.setParameters(mode_);
  matchCandBench_.setParameters(mode_);
}

//
// -- Set Parameters
//
void PFMETMonitor::setParameters(Benchmark::Mode mode,
                                 float ptmin,
                                 float ptmax,
                                 float etamin,
                                 float etamax,
                                 float phimin,
                                 float phimax,
                                 bool metSpHistos) {
  mode_ = mode;
  createMETSpecificHistos_ = metSpHistos;

  setRange(ptmin, ptmax, etamin, etamax, phimin, phimax);

  candBench_.setParameters(mode_);
  matchCandBench_.setParameters(mode_);
}

//
// -- Create histograms accessing parameters from ParameterSet
//
void PFMETMonitor::setup(DQMStore::IBooker &b, const edm::ParameterSet &parameterSet) {
  candBench_.setup(b, parameterSet);
  matchCandBench_.setup(b, parameterSet);

  if (createMETSpecificHistos_ && !histogramBooked_) {
    edm::ParameterSet pxPS = parameterSet.getParameter<edm::ParameterSet>("DeltaPxHistoParameter");
    edm::ParameterSet dpxPS = parameterSet.getParameter<edm::ParameterSet>("DeltaPxHistoParameter");
    edm::ParameterSet dptPS = parameterSet.getParameter<edm::ParameterSet>("DeltaPtHistoParameter");
    edm::ParameterSet setPS = parameterSet.getParameter<edm::ParameterSet>("SumEtHistoParameter");
    edm::ParameterSet dsetPS = parameterSet.getParameter<edm::ParameterSet>("DeltaSumEtHistoParameter");
    edm::ParameterSet setOvsetPS = parameterSet.getParameter<edm::ParameterSet>("DeltaSumEtOvSumEtHistoParameter");

    if (pxPS.getParameter<bool>("switchOn")) {
      px_ = book1D(b,
                   "px_",
                   "px_;p_{X} (GeV)",
                   pxPS.getParameter<int32_t>("nBin"),
                   pxPS.getParameter<double>("xMin"),
                   pxPS.getParameter<double>("xMax"));
    }
    if (setPS.getParameter<bool>("switchOn")) {
      sumEt_ = book1D(b,
                      "sumEt_",
                      "sumEt_;#sumE_{T}",
                      setPS.getParameter<int32_t>("nBin"),
                      setPS.getParameter<double>("xMin"),
                      setPS.getParameter<double>("xMax"));
    }
    if (dpxPS.getParameter<bool>("switchOn")) {
      delta_ex_ = book1D(b,
                         "delta_ex_",
                         "#DeltaME_{X}",
                         dpxPS.getParameter<int32_t>("nBin"),
                         dpxPS.getParameter<double>("xMin"),
                         dpxPS.getParameter<double>("xMax"));
    }

    if (dpxPS.getParameter<bool>("switchOn")) {
      delta_ex_VS_set_ = book2D(b,
                                "delta_ex_VS_set_",
                                ";SE_{T, true} (GeV);#DeltaE_{X}",
                                setPS.getParameter<int32_t>("nBin"),
                                setPS.getParameter<double>("xMin"),
                                setPS.getParameter<double>("xMax"),
                                dptPS.getParameter<int32_t>("nBin"),
                                dptPS.getParameter<double>("xMin"),
                                dptPS.getParameter<double>("xMax"));
    }
    if (dsetPS.getParameter<bool>("switchOn")) {
      delta_set_VS_set_ = book2D(b,
                                 "delta_set_VS_set_",
                                 ";SE_{T, true} (GeV);#DeltaSE_{T}",
                                 setPS.getParameter<int32_t>("nBin"),
                                 setPS.getParameter<double>("xMin"),
                                 setPS.getParameter<double>("xMax"),
                                 dsetPS.getParameter<int32_t>("nBin"),
                                 dsetPS.getParameter<double>("xMin"),
                                 dsetPS.getParameter<double>("xMax"));
    }
    if (setOvsetPS.getParameter<bool>("switchOn")) {
      delta_set_Over_set_VS_set_ = book2D(b,
                                          "delta_set_Over_set_VS_set_",
                                          ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                          setPS.getParameter<int32_t>("nBin"),
                                          setPS.getParameter<double>("xMin"),
                                          setPS.getParameter<double>("xMax"),
                                          setOvsetPS.getParameter<int32_t>("nBin"),
                                          setOvsetPS.getParameter<double>("xMin"),
                                          setOvsetPS.getParameter<double>("xMax"));
    }

    // TProfile
    if (dpxPS.getParameter<bool>("switchOn")) {
      profile_delta_ex_VS_set_ = bookProfile(b,
                                             "profile_delta_ex_VS_set_",
                                             ";SE_{T, true} (GeV);#DeltaE_{X}",
                                             setPS.getParameter<int32_t>("nBin"),
                                             setPS.getParameter<double>("xMin"),
                                             setPS.getParameter<double>("xMax"),
                                             dptPS.getParameter<double>("xMin"),
                                             dptPS.getParameter<double>("xMax"),
                                             "");
      profileRMS_delta_ex_VS_set_ = bookProfile(b,
                                                "profileRMS_delta_ex_VS_set_",
                                                ";SE_{T, true} (GeV);#DeltaE_{X}",
                                                setPS.getParameter<int32_t>("nBin"),
                                                setPS.getParameter<double>("xMin"),
                                                setPS.getParameter<double>("xMax"),
                                                dptPS.getParameter<double>("xMin"),
                                                dptPS.getParameter<double>("xMax"),
                                                "s");
    }
    if (dsetPS.getParameter<bool>("switchOn")) {
      profile_delta_set_VS_set_ = bookProfile(b,
                                              "profile_delta_set_VS_set_",
                                              ";SE_{T, true} (GeV);#DeltaSE_{T}",
                                              setPS.getParameter<int32_t>("nBin"),
                                              setPS.getParameter<double>("xMin"),
                                              setPS.getParameter<double>("xMax"),
                                              dsetPS.getParameter<double>("xMin"),
                                              dsetPS.getParameter<double>("xMax"),
                                              "");
      profileRMS_delta_set_VS_set_ = bookProfile(b,
                                                 "profileRMS_delta_set_VS_set_",
                                                 ";SE_{T, true} (GeV);#DeltaSE_{T}",
                                                 setPS.getParameter<int32_t>("nBin"),
                                                 setPS.getParameter<double>("xMin"),
                                                 setPS.getParameter<double>("xMax"),
                                                 dsetPS.getParameter<double>("xMin"),
                                                 dsetPS.getParameter<double>("xMax"),
                                                 "s");
    }
    if (setOvsetPS.getParameter<bool>("switchOn")) {
      profile_delta_set_Over_set_VS_set_ = bookProfile(b,
                                                       "profile_delta_set_Over_set_VS_set_",
                                                       ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                                       setPS.getParameter<int32_t>("nBin"),
                                                       setPS.getParameter<double>("xMin"),
                                                       setPS.getParameter<double>("xMax"),
                                                       setOvsetPS.getParameter<double>("xMin"),
                                                       setOvsetPS.getParameter<double>("xMax"),
                                                       "");
      profileRMS_delta_set_Over_set_VS_set_ = bookProfile(b,
                                                          "profileRMS_delta_set_Over_set_VS_set_",
                                                          ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                                          setPS.getParameter<int32_t>("nBin"),
                                                          setPS.getParameter<double>("xMin"),
                                                          setPS.getParameter<double>("xMax"),
                                                          setOvsetPS.getParameter<double>("xMin"),
                                                          setOvsetPS.getParameter<double>("xMax"),
                                                          "s");
    }
    histogramBooked_ = true;
  }
}

//
// -- Create histograms using local parameters
//
void PFMETMonitor::setup(DQMStore::IBooker &b) {
  candBench_.setup(b);
  matchCandBench_.setup(b);

  if (createMETSpecificHistos_ && !histogramBooked_) {
    PhaseSpace pxPS = PhaseSpace(50, 0, 200);
    PhaseSpace dpxPS = PhaseSpace(50, -500, 500);
    PhaseSpace setPS = PhaseSpace(50, 0.0, 3000);
    PhaseSpace dsetPS = PhaseSpace(50, -1000.0, 1000);
    PhaseSpace setOvsetPS = PhaseSpace(100, 0., 2.);

    px_ = book1D(b, "px_", "px_;p_{X} (GeV)", pxPS.n, pxPS.m, pxPS.M);
    sumEt_ = book1D(b, "sumEt_", "sumEt_;#sumE_{T}", setPS.n, setPS.m, setPS.M);
    delta_ex_ = book1D(b, "delta_ex_", "#DeltaME_{X}", dpxPS.n, dpxPS.m, dpxPS.M);
    delta_ex_VS_set_ = book2D(
        b, "delta_ex_VS_set_", ";SE_{T, true} (GeV);#DeltaE_{X}", setPS.n, setPS.m, setPS.M, dpxPS.n, dpxPS.m, dpxPS.M);
    delta_set_VS_set_ = book2D(b,
                               "delta_set_VS_set_",
                               ";SE_{T, true} (GeV);#DeltaSE_{T}",
                               setPS.n,
                               setPS.m,
                               setPS.M,
                               dsetPS.n,
                               dsetPS.m,
                               dsetPS.M);

    delta_set_Over_set_VS_set_ = book2D(b,
                                        "delta_set_Over_set_VS_set_",
                                        ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                        setPS.n,
                                        setPS.m,
                                        setPS.M,
                                        setOvsetPS.n,
                                        setOvsetPS.m,
                                        setOvsetPS.M);

    // TProfile
    profile_delta_ex_VS_set_ = bookProfile(b,
                                           "profile_delta_ex_VS_set_",
                                           ";SE_{T, true} (GeV);#DeltaE_{X}",
                                           setPS.n,
                                           setPS.m,
                                           setPS.M,
                                           setOvsetPS.m,
                                           setOvsetPS.M,
                                           "");

    profile_delta_set_VS_set_ = bookProfile(b,
                                            "profile_delta_set_VS_set_",
                                            ";SE_{T, true} (GeV);#DeltaSE_{T}",
                                            setPS.n,
                                            setPS.m,
                                            setPS.M,
                                            setOvsetPS.m,
                                            setOvsetPS.M,
                                            "");

    profile_delta_set_Over_set_VS_set_ = bookProfile(b,
                                                     "profile_delta_set_Over_set_VS_set_",
                                                     ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                                     setPS.n,
                                                     setPS.m,
                                                     setPS.M,
                                                     setOvsetPS.m,
                                                     setOvsetPS.M,
                                                     "");

    // TProfile RMS
    profileRMS_delta_ex_VS_set_ = bookProfile(b,
                                              "profileRMS_delta_ex_VS_set_",
                                              ";SE_{T, true} (GeV);#DeltaE_{X}",
                                              setPS.n,
                                              setPS.m,
                                              setPS.M,
                                              setOvsetPS.m,
                                              setOvsetPS.M,
                                              "s");

    profileRMS_delta_set_VS_set_ = bookProfile(b,
                                               "profileRMS_delta_set_VS_set_",
                                               ";SE_{T, true} (GeV);#DeltaSE_{T}",
                                               setPS.n,
                                               setPS.m,
                                               setPS.M,
                                               setOvsetPS.m,
                                               setOvsetPS.M,
                                               "s");

    profileRMS_delta_set_Over_set_VS_set_ = bookProfile(b,
                                                        "profileRMS_delta_set_Over_set_VS_set_",
                                                        ";SE_{T, true} (GeV);#DeltaSE_{T}/SE_{T}",
                                                        setPS.n,
                                                        setPS.m,
                                                        setPS.M,
                                                        setOvsetPS.m,
                                                        setOvsetPS.M,
                                                        "s");
    histogramBooked_ = true;
  }
}

void PFMETMonitor::setDirectory(TDirectory *dir) {
  Benchmark::setDirectory(dir);

  candBench_.setDirectory(dir);
  matchCandBench_.setDirectory(dir);
}

void PFMETMonitor::fillOne(const reco::MET &met, const reco::MET &matchedMet, float &minVal, float &maxVal) {
  candBench_.fillOne(met);                   // std::cout <<"\nfillone MET candBench" <<std::endl;
  matchCandBench_.fillOne(met, matchedMet);  // std::cout <<"\nfillone MET
                                             // MatchCandBench done" <<std::endl;

  if (createMETSpecificHistos_ && histogramBooked_) {
    if (!isInRange(met.pt(), met.eta(), met.phi()))
      return;

    if (px_)
      px_->Fill(met.px());
    if (delta_ex_) {
      delta_ex_->Fill(met.px() - matchedMet.px());
      delta_ex_->Fill(met.py() - matchedMet.py());
    }
    if (sumEt_)
      sumEt_->Fill(met.sumEt());

    if (delta_ex_VS_set_) {
      delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.px() - matchedMet.px());
      delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.py() - matchedMet.py());
      profile_delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.px() - matchedMet.px());
      profile_delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.py() - matchedMet.py());
      profileRMS_delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.px() - matchedMet.px());
      profileRMS_delta_ex_VS_set_->Fill(matchedMet.sumEt(), met.py() - matchedMet.py());
    }
    if (delta_set_VS_set_) {
      delta_set_VS_set_->Fill(matchedMet.sumEt(), met.sumEt() - matchedMet.sumEt());
      profile_delta_set_VS_set_->Fill(matchedMet.sumEt(), met.sumEt() - matchedMet.sumEt());
      profileRMS_delta_set_VS_set_->Fill(matchedMet.sumEt(), met.sumEt() - matchedMet.sumEt());
    }
    if (delta_set_Over_set_VS_set_ && matchedMet.sumEt() > 0.001) {
      float setRes = (met.sumEt() - matchedMet.sumEt()) / matchedMet.sumEt();
      if (setRes > maxVal)
        maxVal = setRes;
      if (setRes < minVal)
        minVal = setRes;
      delta_set_Over_set_VS_set_->Fill(matchedMet.sumEt(), setRes);
      profile_delta_set_Over_set_VS_set_->Fill(matchedMet.sumEt(), setRes);
      profileRMS_delta_set_Over_set_VS_set_->Fill(matchedMet.sumEt(), setRes);
    }
  }
}