File indexing completed on 2024-04-06 12:32:42
0001 #include "Validation/L1T/interface/L1ValidatorHists.h"
0002
0003
0004
0005 #include "DataFormats/Math/interface/deltaR.h"
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 L1ValidatorHists::L1ValidatorHists() {
0016
0017
0018
0019
0020
0021
0022 Name[0] = "Egamma";
0023 Name[1] = "Jet";
0024 Name[2] = "Tau";
0025 Name[3] = "Muon";
0026 }
0027 L1ValidatorHists::~L1ValidatorHists() {}
0028
0029 void L1ValidatorHists::Book(DQMStore::IBooker &iBooker, std::string dirname) {
0030 NEvents = 0;
0031
0032 float ptbins[14] = {0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 120, 160};
0033 int Nptbin = 13;
0034
0035 iBooker.setCurrentFolder(dirname + "/numerators_denominators");
0036 for (int i = 0; i < Type::Number; i++) {
0037 Eff_Pt_Denom[i] = iBooker.book1D((Name[i] + "_Eff_Pt_Denom").c_str(),
0038 (Name[i] + " Efficiency vs Pt Denom; Gen p_{T} [GeV]; Entries").c_str(),
0039 Nptbin,
0040 ptbins);
0041 Eff_Pt_Nomin[i] = iBooker.book1D((Name[i] + "_Eff_Pt_Nomin").c_str(),
0042 (Name[i] + " Efficiency vs Pt Nomin; Gen p_{T} [GeV]; Entries").c_str(),
0043 Nptbin,
0044 ptbins);
0045 Eff_Eta_Denom[i] = iBooker.book1D((Name[i] + "_Eff_Eta_Denom").c_str(),
0046 (Name[i] + " Efficiency vs #eta Denom; Gen #eta; Entries").c_str(),
0047 80,
0048 -4,
0049 4);
0050 Eff_Eta_Nomin[i] = iBooker.book1D((Name[i] + "_Eff_Eta_Nomin").c_str(),
0051 (Name[i] + " Efficiency vs #eta Nomin; Gen #eta; Entries").c_str(),
0052 80,
0053 -4,
0054 4);
0055 TurnOn_15_Denom[i] = iBooker.book1D((Name[i] + "_TurnOn_15_Denom").c_str(),
0056 (Name[i] + " Turn On (15 GeV) Denom; Gen p_{T} [GeV]; Entries").c_str(),
0057 Nptbin,
0058 ptbins);
0059 TurnOn_15_Nomin[i] = iBooker.book1D((Name[i] + "_TurnOn_15_Nomin").c_str(),
0060 (Name[i] + " Turn On (15 GeV) Nomin; Gen p_{T} [GeV]; Entries").c_str(),
0061 Nptbin,
0062 ptbins);
0063 TurnOn_30_Denom[i] = iBooker.book1D((Name[i] + "_TurnOn_30_Denom").c_str(),
0064 (Name[i] + " Turn On (30 GeV) Denom; Gen p_{T} [GeV]; Entries").c_str(),
0065 Nptbin,
0066 ptbins);
0067 TurnOn_30_Nomin[i] = iBooker.book1D((Name[i] + "_TurnOn_30_Nomin").c_str(),
0068 (Name[i] + " Turn On (30 GeV) Nomin; Gen p_{T} [GeV]; Entries").c_str(),
0069 Nptbin,
0070 ptbins);
0071 }
0072
0073 iBooker.setCurrentFolder(dirname);
0074 for (int i = 0; i < Type::Number; i++) {
0075 N[i] = iBooker.book1D((Name[i] + "_N").c_str(), ("L1 " + Name[i] + " Number with BX=0").c_str(), 16, -0.5, 15.5);
0076
0077 Eff_Pt[i] = iBooker.book1D((Name[i] + "_Eff_Pt").c_str(),
0078 (Name[i] + " Efficiency vs Pt; Gen p_{T} [GeV]; L1T Efficiency").c_str(),
0079 Nptbin,
0080 ptbins);
0081 Eff_Pt[i]->setEfficiencyFlag();
0082 Eff_Eta[i] = iBooker.book1D((Name[i] + "_Eff_Eta").c_str(),
0083 (Name[i] + " Efficiency vs #eta (Gen p_{T} > 10GeV); Gen #eta; L1T Efficiency").c_str(),
0084 80,
0085 -4,
0086 4);
0087 Eff_Eta[i]->setEfficiencyFlag();
0088 TurnOn_15[i] = iBooker.book1D((Name[i] + "_TurnOn_15").c_str(),
0089 (Name[i] + " Turn On (15 GeV); Gen p_{T} [GeV]; L1T Efficiency").c_str(),
0090 Nptbin,
0091 ptbins);
0092 TurnOn_15[i]->setEfficiencyFlag();
0093 TurnOn_30[i] = iBooker.book1D((Name[i] + "_TurnOn_30").c_str(),
0094 (Name[i] + " Turn On (30 GeV); Gen p_{T} [GeV]; L1T Efficiency").c_str(),
0095 Nptbin,
0096 ptbins);
0097 TurnOn_30[i]->setEfficiencyFlag();
0098 dR[i] = iBooker.book1D(
0099 (Name[i] + "_dR").c_str(), (Name[i] + " #DeltaR; #DeltaR(L1 object, Gen object); Entries").c_str(), 40, 0, 1);
0100 dR_vs_Pt[i] = iBooker.book2D((Name[i] + "_dR_vs_Pt").c_str(),
0101 (Name[i] + " #DeltaR vs p_{T}; Gen p_{T} [GeV]; "
0102 "#DeltaR(L1 object, Gen object); Entries")
0103 .c_str(),
0104 12,
0105 0,
0106 120,
0107 40,
0108 0,
0109 1);
0110 dPt[i] = iBooker.book1D((Name[i] + "_dPt").c_str(),
0111 (Name[i] + " #Deltap_{T}; (p_{T}^{L1}-p_{T}^{Gen})/p_{T}^{Gen}; Entries").c_str(),
0112 100,
0113 -2,
0114 2);
0115 dPt_vs_Pt[i] = iBooker.book2D((Name[i] + "_dPt_vs_Pt").c_str(),
0116 (Name[i] + " #Deltap_{T} vs p_{T}; Gen p_{T} [GeV]; "
0117 "(p_{T}^{L1}-p_{T}^{Gen})/p_{T}^{Gen}; Entries")
0118 .c_str(),
0119 12,
0120 0,
0121 120,
0122 40,
0123 -2,
0124 2);
0125 }
0126 }
0127
0128 void L1ValidatorHists::Fill(int i, const reco::LeafCandidate *GenPart, const reco::LeafCandidate *L1Part) {
0129 double GenPartPt = GenPart->pt();
0130
0131 if (GenPart->pt() >= 160.0)
0132 GenPartPt = 159.0;
0133 if (L1Part == nullptr) {
0134 Eff_Pt_Denom[i]->Fill(GenPartPt);
0135 if (GenPart->pt() > 10)
0136 Eff_Eta_Denom[i]->Fill(GenPart->eta());
0137 TurnOn_15_Denom[i]->Fill(GenPartPt);
0138 TurnOn_30_Denom[i]->Fill(GenPartPt);
0139 } else {
0140 double idR = reco::deltaR(GenPart->eta(), GenPart->phi(), L1Part->eta(), L1Part->phi());
0141 bool matched = idR < 0.15;
0142 Eff_Pt_Denom[i]->Fill(GenPartPt);
0143 if (GenPart->pt() > 10)
0144 Eff_Eta_Denom[i]->Fill(GenPart->eta());
0145 if (matched)
0146 Eff_Pt_Nomin[i]->Fill(GenPartPt);
0147 if (matched && GenPart->pt() > 10)
0148 Eff_Eta_Nomin[i]->Fill(GenPart->eta());
0149 TurnOn_15_Denom[i]->Fill(GenPartPt);
0150 TurnOn_30_Denom[i]->Fill(GenPartPt);
0151 if (L1Part->pt() > 15 && matched)
0152 TurnOn_15_Nomin[i]->Fill(GenPartPt);
0153 if (L1Part->pt() > 30 && matched)
0154 TurnOn_30_Nomin[i]->Fill(GenPartPt);
0155 dR[i]->Fill(idR);
0156 dPt[i]->Fill((L1Part->pt() - GenPart->pt()) / GenPart->pt());
0157 dR_vs_Pt[i]->Fill(GenPart->pt(), idR);
0158 dPt_vs_Pt[i]->Fill(GenPart->pt(), (L1Part->pt() - GenPart->pt()) / GenPart->pt());
0159 }
0160 }
0161
0162 void L1ValidatorHists::FillNumber(int i, int Number) { N[i]->Fill(Number); }
0163
0164 void L1ValidatorHists::Write() {
0165 for (int i = 0; i < Type::Number; i++) {
0166 N[i]->getTH1()->Write();
0167 Eff_Pt[i]->getTH1()->Write();
0168 Eff_Pt_Denom[i]->getTH1()->Write();
0169 Eff_Pt_Nomin[i]->getTH1()->Write();
0170 Eff_Eta[i]->getTH1()->Write();
0171 Eff_Eta_Denom[i]->getTH1()->Write();
0172 Eff_Eta_Nomin[i]->getTH1()->Write();
0173 TurnOn_15[i]->getTH1()->Write();
0174 TurnOn_15_Denom[i]->getTH1()->Write();
0175 TurnOn_15_Nomin[i]->getTH1()->Write();
0176 TurnOn_30[i]->getTH1()->Write();
0177 TurnOn_30_Denom[i]->getTH1()->Write();
0178 TurnOn_30_Nomin[i]->getTH1()->Write();
0179 dR[i]->getTH1()->Write();
0180 dPt[i]->getTH1()->Write();
0181 dR_vs_Pt[i]->getTH2F()->Write();
0182 dPt_vs_Pt[i]->getTH2F()->Write();
0183 }
0184 }
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197