17 std::array<float,2> &
out)
21 << name <<
" does not contain exactly 2 values (EB, EE)\n";
30 ph_Et_(cfg.getParameter<double>(
"photon_MinEt")),
31 ph_combIso_(cfg.getParameter<double>(
"photon_combIso")),
32 ph_loose_hoe_(cfg.getParameter<double>(
"photon_HoE")),
33 ph_sietaieta_eb_(cfg.getParameter<double>(
"photon_SigmaiEtaiEta_barrel")),
34 ph_sietaieta_ee_(cfg.getParameter<double>(
"photon_SigmaiEtaiEta_endcap")),
35 ele_iso_pt_(cfg.getParameter<double>(
"electron_iso_pt")),
36 ele_iso_mva_eb_(cfg.getParameter<double>(
"electron_iso_mva_barrel")),
37 ele_iso_mva_ee_(cfg.getParameter<double>(
"electron_iso_mva_endcap")),
38 ele_iso_combIso_eb_(cfg.getParameter<double>(
"electron_iso_combIso_barrel")),
39 ele_iso_combIso_ee_(cfg.getParameter<double>(
"electron_iso_combIso_endcap")),
40 ele_noniso_mva_(cfg.getParameter<double>(
"electron_noniso_mvaCut")),
41 ele_missinghits_(cfg.getParameter<unsigned
int>(
"electron_missinghits")),
42 ele_ecalDrivenHademPreselCut_(cfg.getParameter<double>(
"electron_ecalDrivenHademPreselCut")),
43 ele_maxElePtForOnlyMVAPresel_(cfg.getParameter<double>(
"electron_maxElePtForOnlyMVAPresel"))
69 readEBEEParams_(eleProtectionsForBadHcal,
"dEta",
badHcal_dEta_);
70 readEBEEParams_(eleProtectionsForBadHcal,
"dPhi",
badHcal_dPhi_);
84 if(photon.
pt() <
ph_Et_ )
return false;
87 <<
" eta, phi " << photon.
eta() <<
", " << photon.
phi()
122 const int & nVtx)
const {
127 <<
" eta, phi " << electron.
eta() <<
", " << electron.
phi()
128 <<
" charge " << electron.
charge()
131 <<
" mva_e_pi " << electron.
mva_e_pi()
132 <<
" H/E_valid " << validHoverE
140 bool passEleSelection =
false;
143 float electronPt = electron.
pt();
148 double eleEta = fabs(electron.
eta());
151 passEleSelection =
true;
155 passEleSelection =
true;
163 passEleSelection =
true;
170 passEleSelection =
true;
192 bool& lockTracks)
const {
194 bool debugSafeForJetMET =
false;
195 bool isSafeForJetMET =
true;
214 unsigned int iextratrack = 0;
215 unsigned int itrackHcalLinked = 0;
216 float SumExtraKfP = 0.;
230 float Ene_hcalgsf = pfcandextra->hadEnergy();
231 float HOverHE = Ene_hcalgsf/(Ene_hcalgsf + Ene_ecalgsf);
236 float HOverPin = Ene_hcalgsf / electron.
gsfTrack()->pMode();
241 for (PFCandidate::ElementsInBlocks::const_iterator itrk = extraTracks.begin();
242 itrk<extraTracks.end(); ++itrk) {
247 if(debugSafeForJetMET)
248 cout <<
" My track element number " << itrk->second << endl;
257 bool trackIsFromPrimaryVertex =
false;
259 if ( (*trackIt).castTo<
TrackRef>() == trackref ) {
260 trackIsFromPrimaryVertex =
true;
266 if(goodTrack && nexhits == 0 && trackIsFromPrimaryVertex) {
267 float p_trk = trackref->p();
268 SumExtraKfP += p_trk;
271 std::multimap<double, unsigned int> hcalKfElems;
277 if(!hcalKfElems.empty()) {
280 if(debugSafeForJetMET)
281 cout <<
" The ecalGsf cluster is not isolated: >0 KF extra with algo < 3" 282 <<
" Algo " << trackref->algo()
283 <<
" nexhits " << nexhits
284 <<
" trackIsFromPrimaryVertex " << trackIsFromPrimaryVertex << endl;
285 if(debugSafeForJetMET)
286 cout <<
" My track PT " << trackref->pt() << endl;
290 if(debugSafeForJetMET)
291 cout <<
" Tracks from PU " 292 <<
" Algo " << trackref->algo()
293 <<
" nexhits " << nexhits
294 <<
" trackIsFromPrimaryVertex " << trackIsFromPrimaryVertex << endl;
295 if(debugSafeForJetMET)
296 cout <<
" My track PT " << trackref->pt() << endl;
300 if( iextratrack > 0) {
303 if(debugSafeForJetMET)
304 cout <<
" *****This electron candidate is discarded: Non isolated # tracks " 305 << iextratrack <<
" HOverHE " << HOverHE
306 <<
" SumExtraKfP/Ene_ecalgsf " << SumExtraKfP/Ene_ecalgsf
307 <<
" SumExtraKfP " << SumExtraKfP
308 <<
" Ene_ecalgsf " << Ene_ecalgsf
309 <<
" ETtotal " << ETtotal
310 <<
" Ene_hcalgsf/Ene_ecalgsf " << Ene_hcalgsf/Ene_ecalgsf
313 isSafeForJetMET =
false;
317 ((EtotPinMode < 1.1 && EtotPinMode > 0.6) && (fabs(electron.
eta()) >= 1.0 && fabs(electron.
eta()) <= 2.0))) {
319 (itrackHcalLinked == iextratrack)) {
323 if(debugSafeForJetMET)
324 cout <<
" *****This electron is reactivated # tracks " 325 << iextratrack <<
" #tracks hcal linked " << itrackHcalLinked
326 <<
" SumExtraKfP/Ene_ecalgsf " << SumExtraKfP/Ene_ecalgsf
327 <<
" EtotPinMode " << EtotPinMode <<
" EGsfPoutMode " << EGsfPoutMode
328 <<
" eta gsf " << electron.
eta() <<endl;
334 if(debugSafeForJetMET)
335 cout <<
" *****This electron candidate is discarded HCAL ENERGY " 336 <<
" HOverPin " << HOverPin <<
" HOverHE " << HOverHE <<
" EtotPinMode" << EtotPinMode << endl;
337 isSafeForJetMET =
false;
344 if(debugSafeForJetMET)
345 cout <<
" *****This electron candidate is discarded Low ETOTPIN " 346 <<
" EtotPinMode " << EtotPinMode <<
" EGsfPoutMode " << EGsfPoutMode << endl;
347 isSafeForJetMET =
false;
352 if(debugSafeForJetMET)
353 cout <<
" *****This electron candidate is discarded Large ANGLE " 354 <<
" ETtotal " << ETtotal <<
" EGsfPoutMode " << dphi_normalsc << endl;
355 isSafeForJetMET =
false;
360 return isSafeForJetMET;
364 bool isSafeForJetMET =
true;
365 bool debugSafeForJetMET =
false;
370 float sum_track_pt = 0.;
374 for (PFCandidate::ElementsInBlocks::const_iterator itrk = extraTracks.begin();
375 itrk<extraTracks.end(); ++itrk) {
385 if(debugSafeForJetMET)
386 cout <<
"PFEGammaFilters::isPhotonSafeForJetMET photon track:pt " << trackref->pt() <<
" SingleLegSize " << pfcandextra->singleLegConvTrackRefMva().size() << endl;
390 bool singleLegConv =
false;
391 for(
unsigned int iconv =0; iconv<pfcandextra->singleLegConvTrackRefMva().size(); iconv++) {
392 if(debugSafeForJetMET)
393 cout <<
"PFEGammaFilters::SingleLeg track:pt " << (pfcandextra->singleLegConvTrackRefMva()[iconv].first)->
pt() << endl;
395 if(pfcandextra->singleLegConvTrackRefMva()[iconv].first == trackref) {
396 singleLegConv =
true;
397 if(debugSafeForJetMET)
398 cout <<
"PFEGammaFilters::isPhotonSafeForJetMET: SingleLeg conv track " << endl;
406 sum_track_pt += trackref->pt();
412 if(debugSafeForJetMET)
413 cout <<
" PFEGammaFilters::isPhotonSafeForJetMET: SumPt " << sum_track_pt << endl;
416 isSafeForJetMET =
false;
417 if(debugSafeForJetMET)
418 cout <<
"************************************!!!! PFEGammaFilters::isPhotonSafeForJetMET: Photon Discaded !!! " << endl;
421 return isSafeForJetMET;
437 }
else return passCutBased || passMVA;
CaloClusterPtr electronCluster() const
T getParameter(std::string const &) const
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Abstract base class for a PFBlock element (track, cluster...)
float ele_maxHcalEOverEcalE_
float trkSumPtSolidConeDR03() const
PFEGammaFilters(const edm::ParameterSet &iConfig)
double eta() const final
momentum pseudorapidity
const float ele_iso_mva_eb_
float eSuperClusterOverP() const
trackRef_iterator tracks_end() const
last iterator over tracks
float hcalTowerSumEtConeDR03() const
Hcal isolation sum.
std::map< unsigned int, Link > LinkData
const float ele_iso_mva_ee_
const float ele_ecalDrivenHademPreselCut_
float badHcal_phoTrkSolidConeIso_offs_
double pt() const final
transverse momentum
const edm::OwnVector< reco::PFBlockElement > & elements() const
int charge() const final
electric charge
bool passingCutBasedPreselection() const
bool passingMvaPreselection() const
const LinkData & linkData() const
float hcalOverEcalValid() const
float trkSumPtHollowConeDR03() const
const unsigned int ele_missinghits_
std::vector< ElementInBlock > ElementsInBlocks
std::array< float, 2 > badHcal_full5x5_sigmaIetaIeta_
bool isPhotonSafeForJetMET(const reco::Photon &, const reco::PFCandidate &) const
float full5x5_sigmaIetaIeta() const
bool isElectron(const reco::GsfElectron &) const
float hadronicOverEm() const
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
std::array< float, 2 > badHcal_dPhi_
float deltaPhiSuperClusterTrackAtVtx() const
float sigmaIetaIeta() const
float hadTowOverEmValid() const
returns false if hadTowOverEm is not reliably estimated (e.g. because hcal was off or masked) ...
float hcalOverEcal() const
float dr03TkSumPt() const
Abs< T >::type abs(const T &t)
const float ph_loose_hoe_
double energy() const
cluster energy
float eEleClusterOverPout() const
float hadTowOverEm() const
the ration of hadronic energy in towers behind the BCs in the SC and the SC energy ...
bool isElectronSafeForJetMET(const reco::GsfElectron &, const reco::PFCandidate &, const reco::Vertex &, bool &lockTracks) const
bool passPhotonSelection(const reco::Photon &) const
float badHcal_phoTrkSolidConeIso_slope_
bool passGsfElePreSelWithOnlyConeHadem(const reco::GsfElectron &) const
const float ele_iso_combIso_ee_
const float ele_iso_combIso_eb_
std::array< float, 2 > badHcal_dEta_
float ele_maxEeleOverPout_
float deltaEtaSeedClusterTrackAtVtx() const
const float ele_noniso_mva_
float ele_maxEcalEOverP_2_
void associatedElements(unsigned i, const LinkData &linkData, std::multimap< double, unsigned > &sortedAssociates, reco::PFBlockElement::Type type=PFBlockElement::NONE, LinkTest test=LINKTEST_RECHIT) const
float ele_maxEeleOverPoutRes_
const float ph_sietaieta_ee_
float ele_maxEcalEOverPRes_
float mva_Isolated() const
float dr03EcalRecHitSumEt() const
const float ph_sietaieta_eb_
bool passElectronSelection(const reco::GsfElectron &, const reco::PFCandidate &, const int &) const
float ele_maxEcalEOverP_1_
float ecalRecHitSumEtConeDR03() const
Isolation variables in cone dR=0.3.
Particle reconstructed by the particle flow algorithm.
const float ele_maxElePtForOnlyMVAPresel_
reco::PFCandidateEGammaExtraRef egammaExtraRef() const
return a reference to the EGamma extra
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
float ele_maxEleHcalEOverEcalE_
float dr03HcalTowerSumEt() const
float ele_maxTrackPOverEele_
trackRef_iterator tracks_begin() const
first iterator over tracks
float pho_sumPtTrackIsoSlope_
virtual const reco::TrackRef & trackRef() const
double phi() const final
momentum azimuthal angle
std::array< float, 2 > badHcal_eInvPInv_
bool ecalDrivenSeed() const