Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 10:06:48

0001 #include <string>
0002 
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/ServiceRegistry/interface/Service.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 
0008 #include "DQMServices/Core/interface/DQMEDHarvester.h"
0009 #include "DQMServices/Core/interface/DQMStore.h"
0010 
0011 #include "DataFormats/ForwardDetId/interface/ETLDetId.h"
0012 
0013 class MtdTracksHarvester : public DQMEDHarvester {
0014 public:
0015   explicit MtdTracksHarvester(const edm::ParameterSet& iConfig);
0016   ~MtdTracksHarvester() override;
0017 
0018   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0019 
0020 protected:
0021   void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override;
0022 
0023 private:
0024   void computeEfficiency1D(MonitorElement* num, MonitorElement* den, MonitorElement* result);
0025   void normalize(MonitorElement* h, double scale);
0026 
0027   const std::string folder_;
0028 
0029   // --- Histograms
0030   MonitorElement* meBtlEtaEff_;
0031   MonitorElement* meBtlPhiEff_;
0032   MonitorElement* meBtlPtEff_;
0033   MonitorElement* meEtlEtaEff_[2];
0034   MonitorElement* meEtlPhiEff_[2];
0035   MonitorElement* meEtlPtEff_[2];
0036   MonitorElement* meEtlEtaEff2_[2];
0037   MonitorElement* meEtlPhiEff2_[2];
0038   MonitorElement* meEtlPtEff2_[2];
0039   MonitorElement* meMVAPtSelEff_;
0040   MonitorElement* meMVAEtaSelEff_;
0041   MonitorElement* meMVAPtMatchEff_;
0042   MonitorElement* meMVAEtaMatchEff_;
0043   MonitorElement* meTPPtSelEff_;
0044   MonitorElement* meTPEtaSelEff_;
0045   MonitorElement* meTPPtMatchEff_;
0046   MonitorElement* meTPEtaMatchEff_;
0047   MonitorElement* meTPPtMatchEtl2Eff_;
0048   MonitorElement* meTPEtaMatchEtl2Eff_;
0049   MonitorElement* meTPmtdPtSelEff_;
0050   MonitorElement* meTPmtdEtaSelEff_;
0051   MonitorElement* meTPmtdPtMatchEff_;
0052   MonitorElement* meTPmtdEtaMatchEff_;
0053   MonitorElement* meNoTimeFraction_;
0054   MonitorElement* meExtraPtEff_;
0055   MonitorElement* meExtraPtEtl2Eff_;
0056   MonitorElement* meExtraEtaEff_;
0057   MonitorElement* meExtraEtaEtl2Eff_;
0058   MonitorElement* meExtraPhiAtBTLEff_;
0059   MonitorElement* meExtraMTDfailExtenderEtaEff_;
0060   MonitorElement* meExtraMTDfailExtenderPtEff_;
0061 };
0062 
0063 // ------------ constructor and destructor --------------
0064 MtdTracksHarvester::MtdTracksHarvester(const edm::ParameterSet& iConfig)
0065     : folder_(iConfig.getParameter<std::string>("folder")) {}
0066 
0067 MtdTracksHarvester::~MtdTracksHarvester() {}
0068 
0069 // auxiliary method to compute efficiency from the ratio of two 1D MonitorElement
0070 void MtdTracksHarvester::computeEfficiency1D(MonitorElement* num, MonitorElement* den, MonitorElement* result) {
0071   for (int ibin = 1; ibin <= den->getNbinsX(); ibin++) {
0072     double eff = num->getBinContent(ibin) / den->getBinContent(ibin);
0073     double bin_err = sqrt((num->getBinContent(ibin) * (den->getBinContent(ibin) - num->getBinContent(ibin))) /
0074                           pow(den->getBinContent(ibin), 3));
0075     if (den->getBinContent(ibin) == 0) {
0076       eff = 0;
0077       bin_err = 0;
0078     }
0079     result->setBinContent(ibin, eff);
0080     result->setBinError(ibin, bin_err);
0081   }
0082 }
0083 
0084 void MtdTracksHarvester::normalize(MonitorElement* h, double scale) {
0085   double integral = h->getTH1F()->Integral();
0086   double norma = (integral > 0.) ? scale / integral : 0.;
0087   for (int ibin = 1; ibin <= h->getNbinsX(); ibin++) {
0088     double eff = h->getBinContent(ibin) * norma;
0089     double bin_err = h->getBinError(ibin) * norma;
0090     h->setBinContent(ibin, eff);
0091     h->setBinError(ibin, bin_err);
0092   }
0093 }
0094 
0095 // ------------ endjob tasks ----------------------------
0096 void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) {
0097   // --- Get the monitoring histograms
0098   MonitorElement* meBTLTrackEffEtaTot = igetter.get(folder_ + "TrackBTLEffEtaTot");
0099   MonitorElement* meBTLTrackEffPhiTot = igetter.get(folder_ + "TrackBTLEffPhiTot");
0100   MonitorElement* meBTLTrackEffPtTot = igetter.get(folder_ + "TrackBTLEffPtTot");
0101   MonitorElement* meBTLTrackEffEtaMtd = igetter.get(folder_ + "TrackBTLEffEtaMtd");
0102   MonitorElement* meBTLTrackEffPhiMtd = igetter.get(folder_ + "TrackBTLEffPhiMtd");
0103   MonitorElement* meBTLTrackEffPtMtd = igetter.get(folder_ + "TrackBTLEffPtMtd");
0104   MonitorElement* meETLTrackEffEtaTotZneg = igetter.get(folder_ + "TrackETLEffEtaTotZneg");
0105   MonitorElement* meETLTrackEffPhiTotZneg = igetter.get(folder_ + "TrackETLEffPhiTotZneg");
0106   MonitorElement* meETLTrackEffPtTotZneg = igetter.get(folder_ + "TrackETLEffPtTotZneg");
0107   MonitorElement* meETLTrackEffEtaMtdZneg = igetter.get(folder_ + "TrackETLEffEtaMtdZneg");
0108   MonitorElement* meETLTrackEffPhiMtdZneg = igetter.get(folder_ + "TrackETLEffPhiMtdZneg");
0109   MonitorElement* meETLTrackEffPtMtdZneg = igetter.get(folder_ + "TrackETLEffPtMtdZneg");
0110   MonitorElement* meETLTrackEffEta2MtdZneg = igetter.get(folder_ + "TrackETLEffEta2MtdZneg");
0111   MonitorElement* meETLTrackEffPhi2MtdZneg = igetter.get(folder_ + "TrackETLEffPhi2MtdZneg");
0112   MonitorElement* meETLTrackEffPt2MtdZneg = igetter.get(folder_ + "TrackETLEffPt2MtdZneg");
0113   MonitorElement* meETLTrackEffEtaTotZpos = igetter.get(folder_ + "TrackETLEffEtaTotZpos");
0114   MonitorElement* meETLTrackEffPhiTotZpos = igetter.get(folder_ + "TrackETLEffPhiTotZpos");
0115   MonitorElement* meETLTrackEffPtTotZpos = igetter.get(folder_ + "TrackETLEffPtTotZpos");
0116   MonitorElement* meETLTrackEffEtaMtdZpos = igetter.get(folder_ + "TrackETLEffEtaMtdZpos");
0117   MonitorElement* meETLTrackEffPhiMtdZpos = igetter.get(folder_ + "TrackETLEffPhiMtdZpos");
0118   MonitorElement* meETLTrackEffPtMtdZpos = igetter.get(folder_ + "TrackETLEffPtMtdZpos");
0119   MonitorElement* meETLTrackEffEta2MtdZpos = igetter.get(folder_ + "TrackETLEffEta2MtdZpos");
0120   MonitorElement* meETLTrackEffPhi2MtdZpos = igetter.get(folder_ + "TrackETLEffPhi2MtdZpos");
0121   MonitorElement* meETLTrackEffPt2MtdZpos = igetter.get(folder_ + "TrackETLEffPt2MtdZpos");
0122   MonitorElement* meTrackPtTot = igetter.get(folder_ + "TrackPtTot");
0123   MonitorElement* meMVATrackEffPtTot = igetter.get(folder_ + "MVAEffPtTot");
0124   MonitorElement* meMVATrackMatchedEffPtTot = igetter.get(folder_ + "MVAMatchedEffPtTot");
0125   MonitorElement* meMVATrackMatchedEffPtMtd = igetter.get(folder_ + "MVAMatchedEffPtMtd");
0126   MonitorElement* meExtraPtMtd = igetter.get(folder_ + "ExtraPtMtd");
0127   MonitorElement* meExtraPtEtl2Mtd = igetter.get(folder_ + "ExtraPtEtl2Mtd");
0128   MonitorElement* meTrackMatchedTPEffPtTot = igetter.get(folder_ + "MatchedTPEffPtTot");
0129   MonitorElement* meTrackMatchedTPEffPtMtd = igetter.get(folder_ + "MatchedTPEffPtMtd");
0130   MonitorElement* meTrackMatchedTPEffPtEtl2Mtd = igetter.get(folder_ + "MatchedTPEffPtEtl2Mtd");
0131   MonitorElement* meTrackMatchedTPmtdEffPtTot = igetter.get(folder_ + "MatchedTPmtdEffPtTot");
0132   MonitorElement* meTrackMatchedTPmtdEffPtMtd = igetter.get(folder_ + "MatchedTPmtdEffPtMtd");
0133   MonitorElement* meTrackEtaTot = igetter.get(folder_ + "TrackEtaTot");
0134   MonitorElement* meMVATrackEffEtaTot = igetter.get(folder_ + "MVAEffEtaTot");
0135   MonitorElement* meMVATrackMatchedEffEtaTot = igetter.get(folder_ + "MVAMatchedEffEtaTot");
0136   MonitorElement* meMVATrackMatchedEffEtaMtd = igetter.get(folder_ + "MVAMatchedEffEtaMtd");
0137   MonitorElement* meExtraEtaMtd = igetter.get(folder_ + "ExtraEtaMtd");
0138   MonitorElement* meExtraEtaEtl2Mtd = igetter.get(folder_ + "ExtraEtaEtl2Mtd");
0139   MonitorElement* meTrackMatchedTPEffEtaTot = igetter.get(folder_ + "MatchedTPEffEtaTot");
0140   MonitorElement* meTrackMatchedTPEffEtaMtd = igetter.get(folder_ + "MatchedTPEffEtaMtd");
0141   MonitorElement* meTrackMatchedTPEffEtaEtl2Mtd = igetter.get(folder_ + "MatchedTPEffEtaEtl2Mtd");
0142   MonitorElement* meTrackMatchedTPmtdEffEtaTot = igetter.get(folder_ + "MatchedTPmtdEffEtaTot");
0143   MonitorElement* meTrackMatchedTPmtdEffEtaMtd = igetter.get(folder_ + "MatchedTPmtdEffEtaMtd");
0144   MonitorElement* meTrackNumHits = igetter.get(folder_ + "TrackNumHits");
0145   MonitorElement* meTrackNumHitsNT = igetter.get(folder_ + "TrackNumHitsNT");
0146   MonitorElement* meExtraPhiAtBTL = igetter.get(folder_ + "ExtraPhiAtBTL");
0147   MonitorElement* meExtraPhiAtBTLmatched = igetter.get(folder_ + "ExtraPhiAtBTLmatched");
0148   MonitorElement* meExtraBTLeneInCone = igetter.get(folder_ + "ExtraBTLeneInCone");
0149   MonitorElement* meExtraMTDfailExtenderEta = igetter.get(folder_ + "ExtraMTDfailExtenderEta");
0150   MonitorElement* meExtraMTDfailExtenderPt = igetter.get(folder_ + "ExtraMTDfailExtenderPt");
0151 
0152   if (!meBTLTrackEffEtaTot || !meBTLTrackEffPhiTot || !meBTLTrackEffPtTot || !meBTLTrackEffEtaMtd ||
0153       !meBTLTrackEffPhiMtd || !meBTLTrackEffPtMtd || !meETLTrackEffEtaTotZneg || !meETLTrackEffPhiTotZneg ||
0154       !meETLTrackEffPtTotZneg || !meETLTrackEffEtaMtdZneg || !meETLTrackEffPhiMtdZneg || !meETLTrackEffPtMtdZneg ||
0155       !meETLTrackEffEta2MtdZneg || !meETLTrackEffPhi2MtdZneg || !meETLTrackEffPt2MtdZneg || !meETLTrackEffEtaTotZpos ||
0156       !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || !meETLTrackEffEtaMtdZpos || !meETLTrackEffPhiMtdZpos ||
0157       !meETLTrackEffPtMtdZpos || !meETLTrackEffEta2MtdZpos || !meETLTrackEffPhi2MtdZpos || !meETLTrackEffPt2MtdZpos ||
0158       !meMVATrackEffPtTot || !meMVATrackMatchedEffPtTot || !meMVATrackMatchedEffPtMtd || !meMVATrackEffEtaTot ||
0159       !meMVATrackMatchedEffEtaTot || !meMVATrackMatchedEffEtaMtd || !meTrackMatchedTPEffPtTot ||
0160       !meTrackMatchedTPEffPtMtd || !meTrackMatchedTPEffPtEtl2Mtd || !meTrackMatchedTPmtdEffPtTot ||
0161       !meTrackMatchedTPmtdEffPtMtd || !meTrackMatchedTPEffEtaTot || !meTrackMatchedTPEffEtaMtd ||
0162       !meTrackMatchedTPEffEtaEtl2Mtd || !meTrackMatchedTPmtdEffEtaTot || !meTrackMatchedTPmtdEffEtaMtd ||
0163       !meTrackNumHits || !meTrackNumHitsNT || !meTrackPtTot || !meTrackEtaTot || !meExtraPtMtd || !meExtraPtEtl2Mtd ||
0164       !meExtraEtaMtd || !meExtraEtaEtl2Mtd || !meExtraPhiAtBTL || !meExtraPhiAtBTLmatched || !meExtraBTLeneInCone ||
0165       !meExtraMTDfailExtenderEta || !meExtraMTDfailExtenderPt) {
0166     edm::LogError("MtdTracksHarvester") << "Monitoring histograms not found!" << std::endl;
0167     return;
0168   }
0169 
0170   // --- Book  histograms
0171   ibook.cd(folder_);
0172   meBtlEtaEff_ = ibook.book1D("BtlEtaEff",
0173                               " Track Efficiency VS Eta;#eta;Efficiency",
0174                               meBTLTrackEffEtaTot->getNbinsX(),
0175                               meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0176                               meBTLTrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0177   meBtlEtaEff_->getTH1()->SetMinimum(0.);
0178   computeEfficiency1D(meBTLTrackEffEtaMtd, meBTLTrackEffEtaTot, meBtlEtaEff_);
0179 
0180   meBtlPhiEff_ = ibook.book1D("BtlPhiEff",
0181                               "Track Efficiency VS Phi;#phi [rad];Efficiency",
0182                               meBTLTrackEffPhiTot->getNbinsX(),
0183                               meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmin(),
0184                               meBTLTrackEffPhiTot->getTH1()->GetXaxis()->GetXmax());
0185   meBtlPhiEff_->getTH1()->SetMinimum(0.);
0186   computeEfficiency1D(meBTLTrackEffPhiMtd, meBTLTrackEffPhiTot, meBtlPhiEff_);
0187 
0188   meBtlPtEff_ = ibook.book1D("BtlPtEff",
0189                              "Track Efficiency VS Pt;Pt [GeV];Efficiency",
0190                              meBTLTrackEffPtTot->getNbinsX(),
0191                              meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0192                              meBTLTrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0193   meBtlPtEff_->getTH1()->SetMinimum(0.);
0194   computeEfficiency1D(meBTLTrackEffPtMtd, meBTLTrackEffPtTot, meBtlPtEff_);
0195 
0196   meEtlEtaEff_[0] = ibook.book1D("EtlEtaEffZneg",
0197                                  " Track Efficiency VS Eta (-Z);#eta;Efficiency",
0198                                  meETLTrackEffEtaTotZneg->getNbinsX(),
0199                                  meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(),
0200                                  meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax());
0201   meEtlEtaEff_[0]->getTH1()->SetMinimum(0.);
0202   computeEfficiency1D(meETLTrackEffEtaMtdZneg, meETLTrackEffEtaTotZneg, meEtlEtaEff_[0]);
0203 
0204   meEtlPhiEff_[0] = ibook.book1D("EtlPhiEffZneg",
0205                                  "Track Efficiency VS Phi (-Z);#phi [rad];Efficiency",
0206                                  meETLTrackEffPhiTotZneg->getNbinsX(),
0207                                  meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmin(),
0208                                  meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmax());
0209   meEtlPhiEff_[0]->getTH1()->SetMinimum(0.);
0210   computeEfficiency1D(meETLTrackEffPhiMtdZneg, meETLTrackEffPhiTotZneg, meEtlPhiEff_[0]);
0211 
0212   meEtlPtEff_[0] = ibook.book1D("EtlPtEffZneg",
0213                                 "Track Efficiency VS Pt (-Z);Pt [GeV];Efficiency",
0214                                 meETLTrackEffPtTotZneg->getNbinsX(),
0215                                 meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(),
0216                                 meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax());
0217   meEtlPtEff_[0]->getTH1()->SetMinimum(0.);
0218   computeEfficiency1D(meETLTrackEffPtMtdZneg, meETLTrackEffPtTotZneg, meEtlPtEff_[0]);
0219 
0220   meEtlEtaEff_[1] = ibook.book1D("EtlEtaEffZpos",
0221                                  " Track Efficiency VS Eta (+Z);#eta;Efficiency",
0222                                  meETLTrackEffEtaTotZpos->getNbinsX(),
0223                                  meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(),
0224                                  meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax());
0225   meEtlEtaEff_[1]->getTH1()->SetMinimum(0.);
0226   computeEfficiency1D(meETLTrackEffEtaMtdZpos, meETLTrackEffEtaTotZpos, meEtlEtaEff_[1]);
0227 
0228   meEtlPhiEff_[1] = ibook.book1D("EtlPhiEffZpos",
0229                                  "Track Efficiency VS Phi (+Z);#phi [rad];Efficiency",
0230                                  meETLTrackEffPhiTotZpos->getNbinsX(),
0231                                  meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(),
0232                                  meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax());
0233   meEtlPhiEff_[1]->getTH1()->SetMinimum(0.);
0234   computeEfficiency1D(meETLTrackEffPhiMtdZpos, meETLTrackEffPhiTotZpos, meEtlPhiEff_[1]);
0235 
0236   meEtlPtEff_[1] = ibook.book1D("EtlPtEffZpos",
0237                                 "Track Efficiency VS Pt (+Z);Pt [GeV];Efficiency",
0238                                 meETLTrackEffPtTotZpos->getNbinsX(),
0239                                 meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmin(),
0240                                 meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmax());
0241   meEtlPtEff_[1]->getTH1()->SetMinimum(0.);
0242   computeEfficiency1D(meETLTrackEffPtMtdZpos, meETLTrackEffPtTotZpos, meEtlPtEff_[1]);
0243 
0244   meEtlEtaEff2_[0] = ibook.book1D("EtlEtaEff2Zneg",
0245                                   " Track Efficiency VS Eta (-Z, 2 hit);#eta;Efficiency",
0246                                   meETLTrackEffEtaTotZneg->getNbinsX(),
0247                                   meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmin(),
0248                                   meETLTrackEffEtaTotZneg->getTH1()->GetXaxis()->GetXmax());
0249   meEtlEtaEff2_[0]->getTH1()->SetMinimum(0.);
0250   computeEfficiency1D(meETLTrackEffEta2MtdZneg, meETLTrackEffEtaTotZneg, meEtlEtaEff2_[0]);
0251 
0252   meEtlPhiEff2_[0] = ibook.book1D("EtlPhiEff2Zneg",
0253                                   "Track Efficiency VS Phi (-Z, 2 hit);#phi [rad];Efficiency",
0254                                   meETLTrackEffPhiTotZneg->getNbinsX(),
0255                                   meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmin(),
0256                                   meETLTrackEffPhiTotZneg->getTH1()->GetXaxis()->GetXmax());
0257   meEtlPhiEff2_[0]->getTH1()->SetMinimum(0.);
0258   computeEfficiency1D(meETLTrackEffPhi2MtdZneg, meETLTrackEffPhiTotZneg, meEtlPhiEff2_[0]);
0259 
0260   meEtlPtEff2_[0] = ibook.book1D("EtlPtEff2Zneg",
0261                                  "Track Efficiency VS Pt (-Z, 2 hit);Pt [GeV];Efficiency",
0262                                  meETLTrackEffPtTotZneg->getNbinsX(),
0263                                  meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmin(),
0264                                  meETLTrackEffPtTotZneg->getTH1()->GetXaxis()->GetXmax());
0265   meEtlPtEff2_[0]->getTH1()->SetMinimum(0.);
0266   computeEfficiency1D(meETLTrackEffPt2MtdZneg, meETLTrackEffPtTotZneg, meEtlPtEff2_[0]);
0267 
0268   meEtlEtaEff2_[1] = ibook.book1D("EtlEtaEff2Zpos",
0269                                   "Track Efficiency VS Eta (+Z, 2 hit);#eta;Efficiency",
0270                                   meETLTrackEffEtaTotZpos->getNbinsX(),
0271                                   meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmin(),
0272                                   meETLTrackEffEtaTotZpos->getTH1()->GetXaxis()->GetXmax());
0273   meEtlEtaEff2_[1]->getTH1()->SetMinimum(0.);
0274   computeEfficiency1D(meETLTrackEffEta2MtdZpos, meETLTrackEffEtaTotZpos, meEtlEtaEff2_[1]);
0275 
0276   meEtlPhiEff2_[1] = ibook.book1D("EtlPhiEff2Zpos",
0277                                   "Track Efficiency VS Phi (+Z, 2 hit);#phi [rad];Efficiency",
0278                                   meETLTrackEffPhiTotZpos->getNbinsX(),
0279                                   meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmin(),
0280                                   meETLTrackEffPhiTotZpos->getTH1()->GetXaxis()->GetXmax());
0281   meEtlPhiEff2_[1]->getTH1()->SetMinimum(0.);
0282   computeEfficiency1D(meETLTrackEffPhi2MtdZpos, meETLTrackEffPhiTotZpos, meEtlPhiEff2_[1]);
0283 
0284   meEtlPtEff2_[1] = ibook.book1D("EtlPtEff2Zpos",
0285                                  "Track Efficiency VS Pt (+Z, 2 hit);Pt [GeV];Efficiency",
0286                                  meETLTrackEffPtTotZpos->getNbinsX(),
0287                                  meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmin(),
0288                                  meETLTrackEffPtTotZpos->getTH1()->GetXaxis()->GetXmax());
0289   meEtlPtEff2_[1]->getTH1()->SetMinimum(0.);
0290   computeEfficiency1D(meETLTrackEffPt2MtdZpos, meETLTrackEffPtTotZpos, meEtlPtEff2_[1]);
0291 
0292   meExtraPtEff_ = ibook.book1D("ExtraPtEff",
0293                                "MTD matching efficiency wrt extrapolated track VS Pt;Pt [GeV];Efficiency",
0294                                meMVATrackEffPtTot->getNbinsX(),
0295                                meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0296                                meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0297   meExtraPtEff_->getTH1()->SetMinimum(0.);
0298   computeEfficiency1D(meExtraPtMtd, meTrackMatchedTPEffPtTot, meExtraPtEff_);
0299 
0300   meExtraPtEtl2Eff_ = ibook.book1D("ExtraPtEtl2Eff",
0301                                    "MTD matching efficiency (2 ETL) wrt extrapolated track VS Pt;Pt [GeV];Efficiency",
0302                                    meMVATrackEffPtTot->getNbinsX(),
0303                                    meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0304                                    meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0305   meExtraPtEtl2Eff_->getTH1()->SetMinimum(0.);
0306   computeEfficiency1D(meExtraPtEtl2Mtd, meTrackMatchedTPEffPtTot, meExtraPtEtl2Eff_);
0307 
0308   meExtraEtaEff_ = ibook.book1D("ExtraEtaEff",
0309                                 "MTD matching efficiency wrt extrapolated track VS Eta;Eta;Efficiency",
0310                                 meMVATrackEffEtaTot->getNbinsX(),
0311                                 meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0312                                 meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0313   meExtraEtaEff_->getTH1()->SetMinimum(0.);
0314   computeEfficiency1D(meExtraEtaMtd, meTrackMatchedTPEffEtaTot, meExtraEtaEff_);
0315 
0316   meExtraEtaEtl2Eff_ = ibook.book1D("ExtraEtaEtl2Eff",
0317                                     "MTD matching efficiency (2 ETL) wrt extrapolated track VS Eta;Eta;Efficiency",
0318                                     meMVATrackEffEtaTot->getNbinsX(),
0319                                     meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0320                                     meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0321   meExtraEtaEtl2Eff_->getTH1()->SetMinimum(0.);
0322   computeEfficiency1D(meExtraEtaEtl2Mtd, meTrackMatchedTPEffEtaTot, meExtraEtaEtl2Eff_);
0323 
0324   meMVAPtSelEff_ = ibook.book1D("MVAPtSelEff",
0325                                 "Track selected efficiency VS Pt;Pt [GeV];Efficiency",
0326                                 meMVATrackEffPtTot->getNbinsX(),
0327                                 meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0328                                 meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0329   meMVAPtSelEff_->getTH1()->SetMinimum(0.);
0330   computeEfficiency1D(meMVATrackMatchedEffPtTot, meMVATrackEffPtTot, meMVAPtSelEff_);
0331 
0332   meMVAEtaSelEff_ = ibook.book1D("MVAEtaSelEff",
0333                                  "Track selected efficiency VS Eta;Eta;Efficiency",
0334                                  meMVATrackEffEtaTot->getNbinsX(),
0335                                  meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0336                                  meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0337   meMVAEtaSelEff_->getTH1()->SetMinimum(0.);
0338   computeEfficiency1D(meMVATrackMatchedEffEtaTot, meMVATrackEffEtaTot, meMVAEtaSelEff_);
0339 
0340   meMVAPtMatchEff_ = ibook.book1D("MVAPtMatchEff",
0341                                   "Track matched to GEN efficiency VS Pt;Pt [GeV];Efficiency",
0342                                   meMVATrackMatchedEffPtTot->getNbinsX(),
0343                                   meMVATrackMatchedEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0344                                   meMVATrackMatchedEffPtTot->getTH1()->GetXaxis()->GetXmax());
0345   meMVAPtMatchEff_->getTH1()->SetMinimum(0.);
0346   computeEfficiency1D(meMVATrackMatchedEffPtMtd, meMVATrackMatchedEffPtTot, meMVAPtMatchEff_);
0347 
0348   meMVAEtaMatchEff_ = ibook.book1D("MVAEtaMatchEff",
0349                                    "Track matched to GEN efficiency VS Eta;Eta;Efficiency",
0350                                    meMVATrackMatchedEffEtaTot->getNbinsX(),
0351                                    meMVATrackMatchedEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0352                                    meMVATrackMatchedEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0353   meMVAEtaMatchEff_->getTH1()->SetMinimum(0.);
0354   computeEfficiency1D(meMVATrackMatchedEffEtaMtd, meMVATrackMatchedEffEtaTot, meMVAEtaMatchEff_);
0355 
0356   meTPPtSelEff_ = ibook.book1D("TPPtSelEff",
0357                                "Track selected efficiency TP VS Pt;Pt [GeV];Efficiency",
0358                                meMVATrackEffPtTot->getNbinsX(),
0359                                meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0360                                meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0361   meTPPtSelEff_->getTH1()->SetMinimum(0.);
0362   computeEfficiency1D(meTrackMatchedTPEffPtTot, meTrackPtTot, meTPPtSelEff_);
0363 
0364   meTPEtaSelEff_ = ibook.book1D("TPEtaSelEff",
0365                                 "Track selected efficiency TP VS Eta;Eta;Efficiency",
0366                                 meMVATrackEffEtaTot->getNbinsX(),
0367                                 meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0368                                 meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0369   meTPEtaSelEff_->getTH1()->SetMinimum(0.);
0370   computeEfficiency1D(meTrackMatchedTPEffEtaTot, meTrackEtaTot, meTPEtaSelEff_);
0371 
0372   meTPPtMatchEff_ = ibook.book1D("TPPtMatchEff",
0373                                  "Track matched to TP efficiency VS Pt;Pt [GeV];Efficiency",
0374                                  meTrackMatchedTPEffPtTot->getNbinsX(),
0375                                  meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0376                                  meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmax());
0377   meTPPtMatchEff_->getTH1()->SetMinimum(0.);
0378   computeEfficiency1D(meTrackMatchedTPEffPtMtd, meTrackMatchedTPEffPtTot, meTPPtMatchEff_);
0379 
0380   meTPEtaMatchEff_ = ibook.book1D("TPEtaMatchEff",
0381                                   "Track matched to TP efficiency VS Eta;Eta;Efficiency",
0382                                   meTrackMatchedTPEffEtaTot->getNbinsX(),
0383                                   meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0384                                   meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0385   meTPEtaMatchEff_->getTH1()->SetMinimum(0.);
0386   computeEfficiency1D(meTrackMatchedTPEffEtaMtd, meTrackMatchedTPEffEtaTot, meTPEtaMatchEff_);
0387 
0388   meTPPtMatchEtl2Eff_ = ibook.book1D("TPPtMatchEtl2Eff",
0389                                      "Track matched to TP efficiency VS Pt, 2 ETL hits;Pt [GeV];Efficiency",
0390                                      meTrackMatchedTPEffPtTot->getNbinsX(),
0391                                      meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0392                                      meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmax());
0393   meTPPtMatchEtl2Eff_->getTH1()->SetMinimum(0.);
0394   computeEfficiency1D(meTrackMatchedTPEffPtEtl2Mtd, meTrackMatchedTPEffPtTot, meTPPtMatchEtl2Eff_);
0395 
0396   meTPEtaMatchEtl2Eff_ = ibook.book1D("TPEtaMatchEtl2Eff",
0397                                       "Track matched to TP efficiency VS Eta, 2 ETL hits;Eta;Efficiency",
0398                                       meTrackMatchedTPEffEtaTot->getNbinsX(),
0399                                       meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0400                                       meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0401   meTPEtaMatchEtl2Eff_->getTH1()->SetMinimum(0.);
0402   computeEfficiency1D(meTrackMatchedTPEffEtaEtl2Mtd, meTrackMatchedTPEffEtaTot, meTPEtaMatchEtl2Eff_);
0403 
0404   meTPmtdPtSelEff_ = ibook.book1D("TPmtdPtSelEff",
0405                                   "Track selected efficiency TP-mtd hit VS Pt;Pt [GeV];Efficiency",
0406                                   meMVATrackEffPtTot->getNbinsX(),
0407                                   meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0408                                   meMVATrackEffPtTot->getTH1()->GetXaxis()->GetXmax());
0409   meTPmtdPtSelEff_->getTH1()->SetMinimum(0.);
0410   computeEfficiency1D(meTrackMatchedTPmtdEffPtTot, meTrackPtTot, meTPmtdPtSelEff_);
0411 
0412   meTPmtdEtaSelEff_ = ibook.book1D("TPmtdEtaSelEff",
0413                                    "Track selected efficiency TPmtd hit VS Eta;Eta;Efficiency",
0414                                    meMVATrackEffEtaTot->getNbinsX(),
0415                                    meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0416                                    meMVATrackEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0417   meTPmtdEtaSelEff_->getTH1()->SetMinimum(0.);
0418   computeEfficiency1D(meTrackMatchedTPmtdEffEtaTot, meTrackEtaTot, meTPmtdEtaSelEff_);
0419 
0420   meTPmtdPtMatchEff_ = ibook.book1D("TPmtdPtMatchEff",
0421                                     "Track matched to TP-mtd hit efficiency VS Pt;Pt [GeV];Efficiency",
0422                                     meTrackMatchedTPmtdEffPtTot->getNbinsX(),
0423                                     meTrackMatchedTPmtdEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0424                                     meTrackMatchedTPmtdEffPtTot->getTH1()->GetXaxis()->GetXmax());
0425   meTPmtdPtMatchEff_->getTH1()->SetMinimum(0.);
0426   computeEfficiency1D(meTrackMatchedTPmtdEffPtMtd, meTrackMatchedTPmtdEffPtTot, meTPmtdPtMatchEff_);
0427 
0428   meTPmtdEtaMatchEff_ = ibook.book1D("TPmtdEtaMatchEff",
0429                                      "Track matched to TP-mtd hit efficiency VS Eta;Eta;Efficiency",
0430                                      meTrackMatchedTPmtdEffEtaTot->getNbinsX(),
0431                                      meTrackMatchedTPmtdEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0432                                      meTrackMatchedTPmtdEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0433   meTPmtdEtaMatchEff_->getTH1()->SetMinimum(0.);
0434   computeEfficiency1D(meTrackMatchedTPmtdEffEtaMtd, meTrackMatchedTPmtdEffEtaTot, meTPmtdEtaMatchEff_);
0435 
0436   meNoTimeFraction_ = ibook.book1D("NoTimeFraction",
0437                                    "Fraction of tracks with MTD hits and no time associated; Num. of hits",
0438                                    meTrackNumHits->getNbinsX(),
0439                                    meTrackNumHits->getTH1()->GetXaxis()->GetXmin(),
0440                                    meTrackNumHits->getTH1()->GetXaxis()->GetXmax());
0441   meNoTimeFraction_->getTH1()->SetMinimum(0.);
0442   computeEfficiency1D(meTrackNumHitsNT, meTrackNumHits, meNoTimeFraction_);
0443 
0444   meBtlEtaEff_->getTH1()->SetMinimum(0.);
0445   meBtlPhiEff_->getTH1()->SetMinimum(0.);
0446   meBtlPtEff_->getTH1()->SetMinimum(0.);
0447   for (int i = 0; i < 2; i++) {
0448     meEtlEtaEff_[i]->getTH1()->SetMinimum(0.);
0449     meEtlPhiEff_[i]->getTH1()->SetMinimum(0.);
0450     meEtlPtEff_[i]->getTH1()->SetMinimum(0.);
0451     meEtlEtaEff2_[i]->getTH1()->SetMinimum(0.);
0452     meEtlPhiEff2_[i]->getTH1()->SetMinimum(0.);
0453     meEtlPtEff2_[i]->getTH1()->SetMinimum(0.);
0454   }
0455   meMVAPtSelEff_->getTH1()->SetMinimum(0.);
0456   meMVAEtaSelEff_->getTH1()->SetMinimum(0.);
0457   meMVAPtMatchEff_->getTH1()->SetMinimum(0.);
0458   meMVAEtaMatchEff_->getTH1()->SetMinimum(0.);
0459 
0460   meExtraPhiAtBTLEff_ = ibook.book1D("ExtraPhiAtBTLEff",
0461                                      "Efficiency to match hits at BTL surface",
0462                                      meExtraPhiAtBTL->getNbinsX(),
0463                                      meExtraPhiAtBTL->getTH1()->GetXaxis()->GetXmin(),
0464                                      meExtraPhiAtBTL->getTH1()->GetXaxis()->GetXmax());
0465   meExtraPhiAtBTLEff_->getTH1()->SetMinimum(0.);
0466   computeEfficiency1D(meExtraPhiAtBTLmatched, meExtraPhiAtBTL, meExtraPhiAtBTLEff_);
0467 
0468   normalize(meExtraBTLeneInCone, 1.);
0469 
0470   meExtraMTDfailExtenderEtaEff_ =
0471       ibook.book1D("ExtraMTDfailExtenderEtaEff",
0472                    "Track extrapolated at MTD surface no extender efficiency VS Eta;Eta;Efficiency",
0473                    meTrackMatchedTPEffEtaTot->getNbinsX(),
0474                    meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmin(),
0475                    meTrackMatchedTPEffEtaTot->getTH1()->GetXaxis()->GetXmax());
0476   meExtraMTDfailExtenderEtaEff_->getTH1()->SetMinimum(0.);
0477   computeEfficiency1D(meExtraMTDfailExtenderEta, meTrackMatchedTPEffEtaTot, meExtraMTDfailExtenderEtaEff_);
0478 
0479   meExtraMTDfailExtenderPtEff_ =
0480       ibook.book1D("ExtraMTDfailExtenderPtEff",
0481                    "Track extrapolated at MTD surface no extender efficiency VS Pt;Pt [GeV];Efficiency",
0482                    meTrackMatchedTPEffPtTot->getNbinsX(),
0483                    meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmin(),
0484                    meTrackMatchedTPEffPtTot->getTH1()->GetXaxis()->GetXmax());
0485   meExtraMTDfailExtenderPtEff_->getTH1()->SetMinimum(0.);
0486   computeEfficiency1D(meExtraMTDfailExtenderPt, meTrackMatchedTPEffPtTot, meExtraMTDfailExtenderPtEff_);
0487 }
0488 
0489 // ------------ method fills 'descriptions' with the allowed parameters for the module  ----------
0490 void MtdTracksHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0491   edm::ParameterSetDescription desc;
0492 
0493   desc.add<std::string>("folder", "MTD/Tracks/");
0494 
0495   descriptions.add("MtdTracksPostProcessor", desc);
0496 }
0497 
0498 DEFINE_FWK_MODULE(MtdTracksHarvester);