File indexing completed on 2024-04-06 12:10:04
0001 #include <cmath>
0002
0003 #include "DQMOffline/Trigger/interface/EgHLTOffEgSel.h"
0004
0005 #include "DQMOffline/Trigger/interface/EgHLTEgCutCodes.h"
0006 #include "DQMOffline/Trigger/interface/EgHLTOffEle.h"
0007 #include "DQMOffline/Trigger/interface/EgHLTOffPho.h"
0008
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010
0011 using namespace egHLT;
0012
0013 void OffEgSel::setup(const edm::ParameterSet& iConfig) {
0014 ebCutValues_.setup(iConfig.getParameter<edm::ParameterSet>("barrel"));
0015 eeCutValues_.setup(iConfig.getParameter<edm::ParameterSet>("endcap"));
0016 }
0017
0018 int OffEgSel::getCutCode(const OffEle& ele, int cutMask) const {
0019 if (std::fabs(ele.detEta()) < 1.5)
0020 return getCutCode(ele, ebCutValues_, cutMask);
0021 else
0022 return getCutCode(ele, eeCutValues_, cutMask);
0023 }
0024
0025 int OffEgSel::getCutCode(const OffEle& ele, const EgCutValues& cuts, int cutMask) {
0026 int cutCode = 0x0;
0027
0028 if (ele.et() < cuts.minEt)
0029 cutCode |= EgCutCodes::ET;
0030 if (std::fabs(ele.etaSC()) < cuts.minEta || std::fabs(ele.etaSC()) > cuts.maxEta)
0031 cutCode |= EgCutCodes::DETETA;
0032 if (ele.isGap())
0033 cutCode |= EgCutCodes::CRACK;
0034
0035 if (std::fabs(ele.dEtaIn()) > cuts.maxDEtaIn)
0036 cutCode |= EgCutCodes::DETAIN;
0037 if (std::fabs(ele.dPhiIn()) > cuts.maxDPhiIn)
0038 cutCode |= EgCutCodes::DPHIIN;
0039 if (ele.invEInvP() > cuts.maxInvEInvP)
0040 cutCode |= EgCutCodes::INVEINVP;
0041
0042 if (ele.hOverE() > cuts.maxHadem && ele.hOverE() * ele.caloEnergy() > cuts.maxHadEnergy)
0043 cutCode |= EgCutCodes::HADEM;
0044 if (ele.sigmaIEtaIEta() > cuts.maxSigmaIEtaIEta)
0045 cutCode |= EgCutCodes::SIGMAIETAIETA;
0046 if (ele.sigmaEtaEta() > cuts.maxSigmaEtaEta)
0047 cutCode |= EgCutCodes::SIGMAETAETA;
0048
0049
0050 if (ele.r9() < cuts.minR9)
0051 cutCode |= EgCutCodes::MINR9;
0052 if (ele.r9() > cuts.maxR9)
0053 cutCode |= EgCutCodes::MAXR9;
0054
0055
0056
0057 if (ele.isolEm() > (cuts.isolEmConstTerm +
0058 cuts.isolEmGradTerm * (ele.et() < cuts.isolEmGradStart ? 0. : (ele.et() - cuts.isolEmGradStart))))
0059 cutCode |= EgCutCodes::ISOLEM;
0060 if (ele.isolHad() >
0061 (cuts.isolHadConstTerm +
0062 cuts.isolHadGradTerm * (ele.et() < cuts.isolHadGradStart ? 0. : (ele.et() - cuts.isolHadGradStart))))
0063 cutCode |= EgCutCodes::ISOLHAD;
0064 if (ele.isolPtTrks() >
0065 (cuts.isolPtTrksConstTerm +
0066 cuts.isolPtTrksGradTerm * (ele.et() < cuts.isolPtTrksGradStart ? 0. : (ele.et() - cuts.isolPtTrksGradStart))))
0067 cutCode |= EgCutCodes::ISOLPTTRKS;
0068
0069
0070 if (ele.et() <=
0071 0.) {
0072 if (ele.hltIsolTrksEle() > cuts.maxHLTIsolTrksEle)
0073 cutCode |= EgCutCodes::HLTISOLTRKSELE;
0074 if (ele.hltIsolTrksPho() > cuts.maxHLTIsolTrksPho)
0075 cutCode |= EgCutCodes::HLTISOLTRKSPHO;
0076 if (ele.hltIsolHad() > cuts.maxHLTIsolHad)
0077 cutCode |= EgCutCodes::HLTISOLHAD;
0078 if (ele.hltIsolEm() > cuts.maxHLTIsolEm)
0079 cutCode |= EgCutCodes::HLTISOLEM;
0080 } else {
0081 if (ele.hltIsolTrksEle() > cuts.maxHLTIsolTrksEle &&
0082 ele.hltIsolTrksEle() / ele.et() > cuts.maxHLTIsolTrksEleOverPt &&
0083 ele.hltIsolTrksEle() / ele.et() / ele.et() > cuts.maxHLTIsolTrksEleOverPt2)
0084 cutCode |= EgCutCodes::HLTISOLTRKSELE;
0085 if (ele.hltIsolTrksPho() > cuts.maxHLTIsolTrksPho &&
0086 ele.hltIsolTrksPho() / ele.et() > cuts.maxHLTIsolTrksPhoOverPt &&
0087 ele.hltIsolTrksPho() / ele.et() / ele.et() > cuts.maxHLTIsolTrksPhoOverPt2)
0088 cutCode |= EgCutCodes::HLTISOLTRKSPHO;
0089 if (ele.hltIsolHad() > cuts.maxHLTIsolHad && ele.hltIsolHad() / ele.et() > cuts.maxHLTIsolHadOverEt &&
0090 ele.hltIsolHad() / ele.et() / ele.et() > cuts.maxHLTIsolHadOverEt2)
0091 cutCode |= EgCutCodes::HLTISOLHAD;
0092 if (ele.hltIsolEm() > cuts.maxHLTIsolEm && ele.hltIsolEm() / ele.et() > cuts.maxHLTIsolEmOverEt &&
0093 ele.hltIsolEm() / ele.et() / ele.et() > cuts.maxHLTIsolEmOverEt2)
0094 cutCode |= EgCutCodes::HLTISOLEM;
0095 }
0096
0097
0098 if (ele.validCTFTrack()) {
0099 if (!(ele.ctfTrkOuterRadius() >= cuts.minCTFTrkOuterRadius &&
0100 ele.ctfTrkInnerRadius() <= cuts.maxCTFTrkInnerRadius &&
0101
0102 ele.ctfTrkHitsFound() >= cuts.minNrCTFTrkHits && ele.ctfTrkHitsLost() <= cuts.maxNrCTFTrkHitsLost))
0103 cutCode |= EgCutCodes::CTFTRACK;
0104 if (cuts.requirePixelHitsIfOuterInOuter) {
0105 DetId innerDetId(ele.ctfTrack()->extra()->innerDetId());
0106 DetId outerDetId(ele.ctfTrack()->extra()->outerDetId());
0107
0108 if (outerDetId.subdetId() >= 5 && innerDetId.subdetId() >= 3)
0109 cutCode |= EgCutCodes::CTFTRACK;
0110 }
0111
0112 } else
0113 cutCode |= EgCutCodes::CTFTRACK;
0114
0115 if (std::fabs(ele.hltDEtaIn()) > cuts.maxHLTDEtaIn)
0116 cutCode |= EgCutCodes::HLTDETAIN;
0117 if (std::fabs(ele.hltDPhiIn()) > cuts.maxHLTDPhiIn)
0118 cutCode |= EgCutCodes::HLTDPHIIN;
0119 if (std::fabs(ele.hltInvEInvP()) > cuts.maxHLTInvEInvP)
0120 cutCode |= EgCutCodes::HLTINVEINVP;
0121
0122 return (cutCode & cuts.cutMask & cutMask);
0123 }
0124
0125 int OffEgSel::getCutCode(const OffPho& pho, int cutMask) const {
0126 if (std::fabs(pho.detEta()) < 1.5)
0127 return getCutCode(pho, ebCutValues_, cutMask);
0128 else
0129 return getCutCode(pho, eeCutValues_, cutMask);
0130 }
0131
0132
0133 int OffEgSel::getCutCode(const OffPho& pho, const EgCutValues& cuts, int cutMask) {
0134 int cutCode = 0x0;
0135
0136 if (pho.et() < cuts.minEt)
0137 cutCode |= EgCutCodes::ET;
0138 if (std::fabs(pho.etaSC()) < cuts.minEta || std::fabs(pho.etaSC()) > cuts.maxEta)
0139 cutCode |= EgCutCodes::DETETA;
0140 if (pho.isGap())
0141 cutCode |= EgCutCodes::CRACK;
0142
0143 cutCode |= EgCutCodes::DETAIN;
0144 cutCode |= EgCutCodes::DPHIIN;
0145 cutCode |= EgCutCodes::INVEINVP;
0146
0147 if (pho.hOverE() > cuts.maxHadem && pho.hOverE() * pho.energy() > cuts.maxHadEnergy)
0148 cutCode |= EgCutCodes::HADEM;
0149 if (pho.sigmaIEtaIEta() > cuts.maxSigmaIEtaIEta)
0150 cutCode |= EgCutCodes::SIGMAIETAIETA;
0151 if (pho.sigmaEtaEta() > cuts.maxSigmaEtaEta)
0152 cutCode |= EgCutCodes::SIGMAETAETA;
0153
0154
0155 if (pho.r9() < cuts.minR9)
0156 cutCode |= EgCutCodes::MINR9;
0157 if (pho.r9() > cuts.maxR9)
0158 cutCode |= EgCutCodes::MAXR9;
0159
0160
0161 if (pho.isolEm() > (cuts.isolEmConstTerm +
0162 cuts.isolEmGradTerm * (pho.et() < cuts.isolEmGradStart ? 0. : (pho.et() - cuts.isolEmGradStart))))
0163 cutCode |= EgCutCodes::ISOLEM;
0164 if (pho.isolHad() >
0165 (cuts.isolHadConstTerm +
0166 cuts.isolHadGradTerm * (pho.et() < cuts.isolHadGradStart ? 0. : (pho.et() - cuts.isolHadGradStart))))
0167 cutCode |= EgCutCodes::ISOLHAD;
0168 if (pho.isolPtTrks() >
0169 (cuts.isolPtTrksConstTerm +
0170 cuts.isolPtTrksGradTerm * (pho.et() < cuts.isolPtTrksGradStart ? 0. : (pho.et() - cuts.isolPtTrksGradStart))))
0171 cutCode |= EgCutCodes::ISOLPTTRKS;
0172 if (pho.isolNrTrks() > cuts.isolNrTrksConstTerm)
0173 cutCode |= EgCutCodes::ISOLNRTRKS;
0174
0175
0176 cutCode |= EgCutCodes::HLTISOLTRKSELE;
0177 if (pho.et() <=
0178 0.) {
0179 if (pho.hltIsolTrks() > cuts.maxHLTIsolTrksPho)
0180 cutCode |= EgCutCodes::HLTISOLTRKSPHO;
0181 if (pho.hltIsolHad() > cuts.maxHLTIsolHad)
0182 cutCode |= EgCutCodes::HLTISOLHAD;
0183 if (pho.hltIsolEm() > cuts.maxHLTIsolEm)
0184 cutCode |= EgCutCodes::HLTISOLEM;
0185 } else {
0186 if (pho.hltIsolTrks() > cuts.maxHLTIsolTrksPho && pho.hltIsolTrks() / pho.et() > cuts.maxHLTIsolTrksPhoOverPt &&
0187 pho.hltIsolTrks() / pho.et() / pho.et() > cuts.maxHLTIsolTrksPhoOverPt2)
0188 cutCode |= EgCutCodes::HLTISOLTRKSPHO;
0189 if (pho.hltIsolHad() > cuts.maxHLTIsolHad && pho.hltIsolHad() / pho.et() > cuts.maxHLTIsolHadOverEt &&
0190 pho.hltIsolHad() / pho.et() / pho.et() > cuts.maxHLTIsolHadOverEt2)
0191 cutCode |= EgCutCodes::HLTISOLHAD;
0192 if (pho.hltIsolEm() > cuts.maxHLTIsolEm && pho.hltIsolEm() / pho.et() > cuts.maxHLTIsolEmOverEt &&
0193 pho.hltIsolEm() / pho.et() / pho.et() > cuts.maxHLTIsolEmOverEt2)
0194 cutCode |= EgCutCodes::HLTISOLEM;
0195 }
0196
0197
0198 cutCode |= EgCutCodes::CTFTRACK;
0199 cutCode |= EgCutCodes::HLTDETAIN;
0200 cutCode |= EgCutCodes::HLTDPHIIN;
0201 cutCode |= EgCutCodes::HLTINVEINVP;
0202
0203 return (cutCode & cuts.cutMask & cutMask);
0204 }