File indexing completed on 2024-04-06 12:09:50
0001 #ifndef DQMOFFLINE_TRIGGER_EGHLTOFFELE
0002 #define DQMOFFLINE_TRIGGER_EGHLTOFFELE
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0020 #include "DataFormats/EgammaReco/interface/ClusterShapeFwd.h"
0021 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0022 #include "DataFormats/EgammaReco/interface/ClusterShape.h"
0023 #include "DataFormats/TrackReco/interface/Track.h"
0024
0025 #include "DQMOffline/Trigger/interface/EgHLTEgCutCodes.h"
0026 #include "DQMOffline/Trigger/interface/EgHLTTrigCodes.h"
0027
0028 namespace egHLT {
0029 class OffEle {
0030 public:
0031
0032 struct IsolData {
0033 float em;
0034 float hadDepth1;
0035 float hadDepth2;
0036 float ptTrks;
0037 int nrTrks;
0038
0039 float hltHad;
0040 float hltTrksEle;
0041 float hltTrksPho;
0042 float hltEm;
0043 };
0044
0045 public:
0046
0047 struct ClusShapeData {
0048 float sigmaEtaEta;
0049 float sigmaIEtaIEta;
0050 float sigmaPhiPhi;
0051 float sigmaIPhiIPhi;
0052 float e1x5Over5x5;
0053 float e2x5MaxOver5x5;
0054 float r9;
0055 };
0056
0057 public:
0058
0059 struct HLTData {
0060 float dEtaIn;
0061 float dPhiIn;
0062 float invEInvP;
0063
0064 float HLTeta;
0065 float HLTphi;
0066 float HLTenergy;
0067 };
0068
0069 public:
0070
0071 struct EventData {
0072 int NVertex;
0073 };
0074
0075 private:
0076 const reco::GsfElectron* gsfEle_;
0077
0078 ClusShapeData clusShapeData_;
0079 IsolData isolData_;
0080 HLTData hltData_;
0081 EventData eventData_;
0082
0083
0084 int cutCode_;
0085 int looseCutCode_;
0086
0087
0088 std::vector<std::pair<TrigCodes::TrigBitSet, int> >
0089 trigCutsCutCodes_;
0090
0091
0092
0093
0094 TrigCodes::TrigBitSet trigBits_;
0095
0096 public:
0097 OffEle(const reco::GsfElectron& ele,
0098 const ClusShapeData& shapeData,
0099 const IsolData& isolData,
0100 const HLTData& hltData,
0101 const EventData& eventData)
0102 : gsfEle_(&ele),
0103 clusShapeData_(shapeData),
0104 isolData_(isolData),
0105 hltData_(hltData),
0106 eventData_(eventData),
0107 cutCode_(int(EgCutCodes::INVALID)),
0108 looseCutCode_(int(EgCutCodes::INVALID)) {}
0109 ~OffEle() = default;
0110
0111
0112 int NVertex() const { return eventData_.NVertex; }
0113 void setCutCode(int code) { cutCode_ = code; }
0114 void setLooseCutCode(int code) { looseCutCode_ = code; }
0115
0116 void setTrigCutsCutCodes(const std::vector<std::pair<TrigCodes::TrigBitSet, int> >& trigCutsCutCodes) {
0117 trigCutsCutCodes_ = trigCutsCutCodes;
0118 }
0119 void setTrigBits(TrigCodes::TrigBitSet bits) { trigBits_ = bits; }
0120
0121 const reco::GsfElectron* gsfEle() const { return gsfEle_; }
0122
0123
0124 float et() const { return gsfEle_->et(); }
0125
0126 float energy() const { return gsfEle_->energy(); }
0127 float eta() const { return gsfEle_->eta(); }
0128 float phi() const { return gsfEle_->phi(); }
0129 float etSC() const {
0130 return gsfEle_->superCluster()->position().rho() / gsfEle_->superCluster()->position().r() * caloEnergy();
0131 }
0132 float caloEnergy() const { return gsfEle_->caloEnergy(); }
0133 float etaSC() const { return gsfEle_->superCluster()->eta(); }
0134 float detEta() const { return etaSC(); }
0135 float phiSC() const { return gsfEle_->superCluster()->phi(); }
0136 float zVtx() const { return gsfEle_->TrackPositionAtVtx().z(); }
0137 const math::XYZTLorentzVector& p4() const { return gsfEle_->p4(); }
0138
0139
0140 int classification() const { return gsfEle_->classification(); }
0141 bool isGap() const { return gsfEle_->isEBGap() || gsfEle_->isEEGap() || gsfEle_->isEBEEGap(); }
0142
0143
0144 int charge() const { return gsfEle_->charge(); }
0145 float pVtx() const { return gsfEle_->trackMomentumAtVtx().R(); }
0146 float pCalo() const { return gsfEle_->trackMomentumAtCalo().R(); }
0147 float ptVtx() const { return gsfEle_->trackMomentumAtVtx().rho(); }
0148 float ptCalo() const { return gsfEle_->trackMomentumAtCalo().rho(); }
0149
0150
0151 float hOverE() const { return gsfEle_->hadronicOverEm(); }
0152 float dEtaIn() const { return gsfEle_->deltaEtaSuperClusterTrackAtVtx(); }
0153 float dPhiIn() const { return gsfEle_->deltaPhiSuperClusterTrackAtVtx(); }
0154 float dPhiOut() const { return gsfEle_->deltaPhiSeedClusterTrackAtCalo(); }
0155 float dEtaOut() const { return gsfEle_->deltaEtaSeedClusterTrackAtCalo(); }
0156 float epIn() const { return gsfEle_->eSuperClusterOverP(); }
0157 float epOut() const { return gsfEle_->eSeedClusterOverPout(); }
0158
0159
0160 float sigmaEtaEta() const;
0161 float sigmaEtaEtaUnCorr() const { return clusShapeData_.sigmaEtaEta; }
0162 float sigmaIEtaIEta() const { return clusShapeData_.sigmaIEtaIEta; }
0163 float sigmaPhiPhi() const { return clusShapeData_.sigmaPhiPhi; }
0164
0165 float e2x5MaxOver5x5() const { return clusShapeData_.e2x5MaxOver5x5; }
0166 float e1x5Over5x5() const { return clusShapeData_.e1x5Over5x5; }
0167
0168 float r9() const { return clusShapeData_.r9; }
0169
0170 float bremFrac() const { return (pVtx() - pCalo()) / pVtx(); }
0171 float invEInvP() const {
0172 return gsfEle_->caloEnergy() != 0 && gsfEle_->trackMomentumAtVtx().R() != 0.
0173 ? 1. / gsfEle_->caloEnergy() - 1. / gsfEle_->trackMomentumAtVtx().R()
0174 : -999;
0175 }
0176
0177
0178
0179 float isolEm() const { return isolData_.em; }
0180 float isolHad() const { return isolHadDepth1() + isolHadDepth2(); }
0181 float isolHadDepth1() const { return isolData_.hadDepth1; }
0182 float isolHadDepth2() const { return isolData_.hadDepth2; }
0183 float isolPtTrks() const { return isolData_.ptTrks; }
0184 int isolNrTrks() const { return isolData_.nrTrks; }
0185 float hltIsolTrksEle() const { return isolData_.hltTrksEle; }
0186 float hltIsolTrksPho() const { return isolData_.hltTrksPho; }
0187 float hltIsolHad() const { return isolData_.hltHad; }
0188 float hltIsolEm() const { return isolData_.hltEm; }
0189
0190
0191 float hltDEtaIn() const { return hltData_.dEtaIn; }
0192 float hltDPhiIn() const { return hltData_.dPhiIn; }
0193 float hltInvEInvP() const { return hltData_.invEInvP; }
0194
0195
0196 float hltPhi() const { return hltData_.HLTphi; }
0197 float hltEta() const { return hltData_.HLTeta; }
0198 float hltEnergy() const { return hltData_.HLTenergy; }
0199
0200 float DeltaE() const { return (hltEnergy() - caloEnergy()); }
0201
0202
0203 reco::TrackRef ctfTrack() const {
0204 return gsfEle_->closestCtfTrackRef();
0205 }
0206
0207 bool validCTFTrack() const {
0208 return gsfEle_->closestCtfTrackRef().isNonnull() && gsfEle_->closestCtfTrackRef()->extra().isNonnull();
0209 }
0210
0211
0212 float ctfTrkP() const { return validCTFTrack() ? ctfTrack()->p() : -999.; }
0213 float ctfTrkPt() const { return validCTFTrack() ? ctfTrack()->pt() : -999.; }
0214 float ctfTrkEta() const { return validCTFTrack() ? ctfTrack()->eta() : -999.; }
0215 float ctfTrkChi2() const { return validCTFTrack() ? ctfTrack()->chi2() : 999.; }
0216 float ctfTrkNDof() const {
0217 return validCTFTrack() ? ctfTrack()->ndof() : 999.;
0218 }
0219 float ctfTrkPtOuter() const { return validCTFTrack() ? ctfTrack()->outerMomentum().Perp2() : -999.; }
0220 float ctfTrkPtInner() const { return validCTFTrack() ? ctfTrack()->innerMomentum().Perp2() : -999.; }
0221 float ctfTrkInnerRadius() const { return validCTFTrack() ? ctfTrack()->innerPosition().Rho() : 999.; }
0222 float ctfTrkOuterRadius() const { return validCTFTrack() ? ctfTrack()->outerPosition().Rho() : -999.; }
0223 int ctfTrkHitsFound() const { return validCTFTrack() ? static_cast<int>(ctfTrack()->found()) : -999; }
0224 int ctfTrkHitsLost() const { return validCTFTrack() ? static_cast<int>(ctfTrack()->lost()) : -999; }
0225 int ctfTrkNrHits() const { return validCTFTrack() ? static_cast<int>(ctfTrack()->recHitsSize()) : -999; }
0226
0227
0228 int cutCode() const { return cutCode_; }
0229 int looseCutCode() const { return looseCutCode_; }
0230
0231
0232
0233 int trigCutsCutCode(const TrigCodes::TrigBitSet& trigger) const;
0234
0235 TrigCodes::TrigBitSet trigBits() const { return trigBits_; }
0236 };
0237
0238 }
0239
0240 #endif