Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:09:21

0001 #include "DQMOffline/EGamma/plugins/ElectronAnalyzer.h"
0002 
0003 #include "DQMServices/Core/interface/DQMStore.h"
0004 
0005 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
0006 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0007 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
0008 #include "DataFormats/Common/interface/Handle.h"
0009 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0010 #include "DataFormats/Common/interface/TriggerResults.h"
0011 
0012 #include "FWCore/Common/interface/TriggerNames.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "FWCore/ServiceRegistry/interface/Service.h"
0018 
0019 #include "CLHEP/Units/GlobalPhysicalConstants.h"
0020 #include "TMath.h"
0021 
0022 #include <iostream>
0023 
0024 using namespace reco;
0025 
0026 ElectronAnalyzer::ElectronAnalyzer(const edm::ParameterSet& conf) : ElectronDqmAnalyzerBase(conf) {
0027   // general, collections
0028   Selection_ = conf.getParameter<int>("Selection");
0029   electronCollection_ = consumes<GsfElectronCollection>(conf.getParameter<edm::InputTag>("ElectronCollection"));
0030   matchingObjectCollection_ =
0031       consumes<SuperClusterCollection>(conf.getParameter<edm::InputTag>("MatchingObjectCollection"));
0032   trackCollection_ = consumes<TrackCollection>(conf.getParameter<edm::InputTag>("TrackCollection"));
0033   vertexCollection_ = consumes<VertexCollection>(conf.getParameter<edm::InputTag>("VertexCollection"));
0034   gsftrackCollection_ = consumes<GsfTrackCollection>(conf.getParameter<edm::InputTag>("GsfTrackCollection"));
0035   beamSpotTag_ = consumes<BeamSpot>(conf.getParameter<edm::InputTag>("BeamSpot"));
0036   readAOD_ = conf.getParameter<bool>("ReadAOD");
0037 
0038   // matching
0039   matchingCondition_ = conf.getParameter<std::string>("MatchingCondition");
0040   assert(matchingCondition_ == "Cone");
0041   maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
0042   maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
0043   deltaR_ = conf.getParameter<double>("DeltaR");
0044 
0045   // electron selection
0046   minEt_ = conf.getParameter<double>("MinEt");
0047   minPt_ = conf.getParameter<double>("MinPt");
0048   maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
0049   isEB_ = conf.getParameter<bool>("SelectEb");
0050   isEE_ = conf.getParameter<bool>("SelectEe");
0051   isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEbEeGap");
0052   isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
0053   isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
0054   eOverPMinBarrel_ = conf.getParameter<double>("MinEopBarrel");
0055   eOverPMaxBarrel_ = conf.getParameter<double>("MaxEopBarrel");
0056   eOverPMinEndcaps_ = conf.getParameter<double>("MinEopEndcaps");
0057   eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEopEndcaps");
0058   dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
0059   dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
0060   dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
0061   dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
0062   dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
0063   dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
0064   dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
0065   dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
0066   sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
0067   sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
0068   sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
0069   sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
0070   hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoeBarrel");
0071   hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoeEndcaps");
0072   mvaMin_ = conf.getParameter<double>("MinMva");
0073   tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
0074   tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
0075   tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
0076   hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
0077   hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
0078   hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
0079   ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
0080   ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
0081 
0082   // for trigger
0083   triggerResults_ = conf.getParameter<edm::InputTag>("TriggerResults");
0084 
0085   // histos limits and binning
0086   //  edm::ParameterSet histosSet = conf.getParameter<edm::ParameterSet>("histosCfg") ;
0087 
0088   nbineta = conf.getParameter<int>("NbinEta");
0089   nbineta2D = conf.getParameter<int>("NbinEta2D");
0090   etamin = conf.getParameter<double>("EtaMin");
0091   etamax = conf.getParameter<double>("EtaMax");
0092   //
0093   nbinphi = conf.getParameter<int>("NbinPhi");
0094   nbinphi2D = conf.getParameter<int>("NbinPhi2D");
0095   phimin = conf.getParameter<double>("PhiMin");
0096   phimax = conf.getParameter<double>("PhiMax");
0097   //
0098   nbinpt = conf.getParameter<int>("NbinPt");
0099   nbinpteff = conf.getParameter<int>("NbinPtEff");
0100   nbinpt2D = conf.getParameter<int>("NbinPt2D");
0101   ptmax = conf.getParameter<double>("PtMax");
0102   //
0103   nbinp = conf.getParameter<int>("NbinP");
0104   nbinp2D = conf.getParameter<int>("NbinP2D");
0105   pmax = conf.getParameter<double>("PMax");
0106   //
0107   nbineop = conf.getParameter<int>("NbinEop");
0108   nbineop2D = conf.getParameter<int>("NbinEop2D");
0109   eopmax = conf.getParameter<double>("EopMax");
0110   eopmaxsht = conf.getParameter<double>("EopMaxSht");
0111   //
0112   nbindeta = conf.getParameter<int>("NbinDeta");
0113   detamin = conf.getParameter<double>("DetaMin");
0114   detamax = conf.getParameter<double>("DetaMax");
0115   //
0116   nbindphi = conf.getParameter<int>("NbinDphi");
0117   dphimin = conf.getParameter<double>("DphiMin");
0118   dphimax = conf.getParameter<double>("DphiMax");
0119   //
0120   nbindetamatch = conf.getParameter<int>("NbinDetaMatch");
0121   nbindetamatch2D = conf.getParameter<int>("NbinDetaMatch2D");
0122   detamatchmin = conf.getParameter<double>("DetaMatchMin");
0123   detamatchmax = conf.getParameter<double>("DetaMatchMax");
0124   //
0125   nbindphimatch = conf.getParameter<int>("NbinDphiMatch");
0126   nbindphimatch2D = conf.getParameter<int>("NbinDphiMatch2D");
0127   dphimatchmin = conf.getParameter<double>("DphiMatchMin");
0128   dphimatchmax = conf.getParameter<double>("DphiMatchMax");
0129   //
0130   nbinfhits = conf.getParameter<int>("NbinFhits");
0131   fhitsmax = conf.getParameter<double>("FhitsMax");
0132   //
0133   nbinlhits = conf.getParameter<int>("NbinLhits");
0134   lhitsmax = conf.getParameter<double>("LhitsMax");
0135   //
0136   nbinxyz = conf.getParameter<int>("NbinXyz");
0137   nbinxyz2D = conf.getParameter<int>("NbinXyz2D");
0138   //
0139   nbinpoptrue = conf.getParameter<int>("NbinPopTrue");
0140   poptruemin = conf.getParameter<double>("PopTrueMin");
0141   poptruemax = conf.getParameter<double>("PopTrueMax");
0142   //
0143   nbinmee = conf.getParameter<int>("NbinMee");
0144   meemin = conf.getParameter<double>("MeeMin");
0145   meemax = conf.getParameter<double>("MeeMax");
0146   //
0147   nbinhoe = conf.getParameter<int>("NbinHoe");
0148   hoemin = conf.getParameter<double>("HoeMin");
0149   hoemax = conf.getParameter<double>("HoeMax");
0150 
0151   //  set_EfficiencyFlag=histosSet.getParameter<bool>("EfficiencyFlag");
0152   //  set_StatOverflowFlag=histosSet.getParameter<bool>("StatOverflowFlag");
0153 }
0154 
0155 ElectronAnalyzer::~ElectronAnalyzer() {}
0156 
0157 void ElectronAnalyzer::bookHistograms(DQMStore::IBooker& iBooker, edm::Run const&, edm::EventSetup const&) {
0158   iBooker.setCurrentFolder(outputInternalPath_);
0159 
0160   nEvents_ = 0;
0161 
0162   // basic quantities
0163   h1_vertexPt_barrel = bookH1(
0164       iBooker, "vertexPt_barrel", "ele transverse momentum in barrel", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
0165   h1_vertexPt_endcaps = bookH1(
0166       iBooker, "vertexPt_endcaps", "ele transverse momentum in endcaps", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
0167   h1_vertexEta = bookH1(iBooker, "vertexEta", "ele momentum #eta", nbineta, etamin, etamax, "#eta");
0168   h2_vertexEtaVsPhi = bookH2(iBooker,
0169                              "vertexEtaVsPhi",
0170                              "ele momentum #eta vs #phi",
0171                              nbineta2D,
0172                              etamin,
0173                              etamax,
0174                              nbinphi2D,
0175                              phimin,
0176                              phimax,
0177                              "#eta",
0178                              "#phi (rad)");
0179   h2_vertexXvsY = bookH2(
0180       iBooker, "vertexXvsY", "ele vertex x vs y", nbinxyz2D, -0.1, 0.1, nbinxyz2D, -0.1, 0.1, "x (cm)", "y (cm)");
0181   h1_vertexZ = bookH1(iBooker, "vertexZ", "ele vertex z", nbinxyz, -25, 25, "z (cm)");
0182 
0183   // super-clusters
0184   h1_sclEt = bookH1(iBooker, "sclEt", "ele supercluster transverse energy", nbinpt, 0., ptmax, "E_{T} (GeV)");
0185 
0186   // electron track
0187   h1_chi2 = bookH1(iBooker, "chi2", "ele track #chi^{2}", 100, 0., 15., "#Chi^{2}");
0188   py_chi2VsEta = bookP1(
0189       iBooker, "chi2VsEta", "ele track #chi^{2} vs #eta", nbineta2D, etamin, etamax, 0., 15., "#eta", "<#chi^{2}>");
0190   py_chi2VsPhi = bookP1(iBooker,
0191                         "chi2VsPhi",
0192                         "ele track #chi^{2} vs #phi",
0193                         nbinphi2D,
0194                         phimin,
0195                         phimax,
0196                         0.,
0197                         15.,
0198                         "#phi (rad)",
0199                         "<#chi^{2}>");
0200   h1_foundHits = bookH1(iBooker, "foundHits", "ele track # found hits", nbinfhits, 0., fhitsmax, "N_{hits}");
0201   py_foundHitsVsEta = bookP1(iBooker,
0202                              "foundHitsVsEta",
0203                              "ele track # found hits vs #eta",
0204                              nbineta2D,
0205                              etamin,
0206                              etamax,
0207                              0.,
0208                              fhitsmax,
0209                              "#eta",
0210                              "<# hits>");
0211   py_foundHitsVsPhi = bookP1(iBooker,
0212                              "foundHitsVsPhi",
0213                              "ele track # found hits vs #phi",
0214                              nbinphi2D,
0215                              phimin,
0216                              phimax,
0217                              0.,
0218                              fhitsmax,
0219                              "#phi (rad)",
0220                              "<# hits>");
0221   h1_lostHits = bookH1(iBooker, "lostHits", "ele track # lost hits", 5, 0., 5., "N_{lost hits}");
0222   py_lostHitsVsEta = bookP1(iBooker,
0223                             "lostHitsVsEta",
0224                             "ele track # lost hits vs #eta",
0225                             nbineta2D,
0226                             etamin,
0227                             etamax,
0228                             0.,
0229                             lhitsmax,
0230                             "#eta",
0231                             "<# hits>");
0232   py_lostHitsVsPhi = bookP1(iBooker,
0233                             "lostHitsVsPhi",
0234                             "ele track # lost hits vs #eta",
0235                             nbinphi2D,
0236                             phimin,
0237                             phimax,
0238                             0.,
0239                             lhitsmax,
0240                             "#phi (rad)",
0241                             "<# hits>");
0242 
0243   // electron matching and ID
0244   h1_Eop_barrel = bookH1(iBooker, "Eop_barrel", "ele E/P_{vertex} in barrel", nbineop, 0., eopmax, "E/P_{vertex}");
0245   h1_Eop_endcaps = bookH1(iBooker, "Eop_endcaps", "ele E/P_{vertex} in endcaps", nbineop, 0., eopmax, "E/P_{vertex}");
0246   py_EopVsPhi = bookP1(iBooker,
0247                        "EopVsPhi",
0248                        "ele E/P_{vertex} vs #phi",
0249                        nbinphi2D,
0250                        phimin,
0251                        phimax,
0252                        0.,
0253                        eopmax,
0254                        "#phi (rad)",
0255                        "<E/P_{vertex}>");
0256   h1_EeleOPout_barrel =
0257       bookH1(iBooker, "EeleOPout_barrel", "ele E_{ele}/P_{out} in barrel", nbineop, 0., eopmax, "E_{ele}/P_{out}");
0258   h1_EeleOPout_endcaps =
0259       bookH1(iBooker, "EeleOPout_endcaps", "ele E_{ele}/P_{out} in endcaps", nbineop, 0., eopmax, "E_{ele}/P_{out}");
0260   h1_dEtaSc_propVtx_barrel = bookH1(iBooker,
0261                                     "dEtaSc_propVtx_barrel",
0262                                     "ele #eta_{sc} - #eta_{tr}, prop from vertex, in barrel",
0263                                     nbindetamatch,
0264                                     detamatchmin,
0265                                     detamatchmax,
0266                                     "#eta_{sc} - #eta_{tr}");
0267   h1_dEtaSc_propVtx_endcapsPos = bookH1(iBooker,
0268                                         "dEtaSc_propVtx_endcapsPos",
0269                                         "ele #eta_{sc} - #eta_{tr}, prop from vertex, in positive endcap",
0270                                         nbindetamatch,
0271                                         detamatchmin,
0272                                         detamatchmax,
0273                                         "#eta_{sc} - #eta_{tr}");
0274   h1_dEtaSc_propVtx_endcapsNeg = bookH1(iBooker,
0275                                         "dEtaSc_propVtx_endcapsNeg",
0276                                         "ele #eta_{sc} - #eta_{tr}, prop from vertex, in negative endcap",
0277                                         nbindetamatch,
0278                                         detamatchmin,
0279                                         detamatchmax,
0280                                         "#eta_{sc} - #eta_{tr}");
0281   py_dEtaSc_propVtxVsPhi = bookP1(iBooker,
0282                                   "dEtaSc_propVtxVsPhi",
0283                                   "ele #eta_{sc} - #eta_{tr}, prop from vertex vs #phi",
0284                                   nbinphi2D,
0285                                   phimin,
0286                                   phimax,
0287                                   detamatchmin,
0288                                   detamatchmax,
0289                                   "#phi (rad)",
0290                                   "<#eta_{sc} - #eta_{tr}>");
0291   h1_dEtaEleCl_propOut_barrel = bookH1(iBooker,
0292                                        "dEtaEleCl_propOut_barrel",
0293                                        "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in barrel",
0294                                        nbindetamatch,
0295                                        detamatchmin,
0296                                        detamatchmax,
0297                                        "#eta_{elecl} - #eta_{tr}");
0298   h1_dEtaEleCl_propOut_endcapsPos = bookH1(iBooker,
0299                                            "dEtaEleCl_propOut_endcapsPos",
0300                                            "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in positive endcap",
0301                                            nbindetamatch,
0302                                            detamatchmin,
0303                                            detamatchmax,
0304                                            "#eta_{elecl} - #eta_{tr}");
0305   h1_dEtaEleCl_propOut_endcapsNeg = bookH1(iBooker,
0306                                            "dEtaEleCl_propOut_endcapsNeg",
0307                                            "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in negative endcap",
0308                                            nbindetamatch,
0309                                            detamatchmin,
0310                                            detamatchmax,
0311                                            "#eta_{elecl} - #eta_{tr}");
0312   h1_dPhiSc_propVtx_barrel = bookH1(iBooker,
0313                                     "dPhiSc_propVtx_barrel",
0314                                     "ele #phi_{sc} - #phi_{tr}, prop from vertex, in barrel",
0315                                     nbindphimatch,
0316                                     dphimatchmin,
0317                                     dphimatchmax,
0318                                     "#phi_{sc} - #phi_{tr} (rad)");
0319   h1_dPhiSc_propVtx_endcapsPos = bookH1(iBooker,
0320                                         "dPhiSc_propVtx_endcapsPos",
0321                                         "ele #phi_{sc} - #phi_{tr}, prop from vertex, in positive endcap",
0322                                         nbindphimatch,
0323                                         dphimatchmin,
0324                                         dphimatchmax,
0325                                         "#phi_{sc} - #phi_{tr} (rad)");
0326   h1_dPhiSc_propVtx_endcapsNeg = bookH1(iBooker,
0327                                         "dPhiSc_propVtx_endcapsNeg",
0328                                         "ele #phi_{sc} - #phi_{tr}, prop from vertex, in negative endcap",
0329                                         nbindphimatch,
0330                                         dphimatchmin,
0331                                         dphimatchmax,
0332                                         "#phi_{sc} - #phi_{tr} (rad)");
0333   py_dPhiSc_propVtxVsPhi = bookP1(iBooker,
0334                                   "dPhiSc_propVtxVsPhi",
0335                                   "ele #phi_{sc} - #phi_{tr}, prop from vertex vs #phi",
0336                                   nbinphi2D,
0337                                   phimin,
0338                                   phimax,
0339                                   dphimatchmin,
0340                                   dphimatchmax,
0341                                   "#phi (rad)",
0342                                   "<#phi_{sc} - #phi_{tr}> (rad)");
0343   h1_dPhiEleCl_propOut_barrel = bookH1(iBooker,
0344                                        "dPhiEleCl_propOut_barrel",
0345                                        "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in barrel",
0346                                        nbindphimatch,
0347                                        dphimatchmin,
0348                                        dphimatchmax,
0349                                        "#phi_{elecl} - #phi_{tr} (rad)");
0350   h1_dPhiEleCl_propOut_endcapsPos = bookH1(iBooker,
0351                                            "dPhiEleCl_propOut_endcapsPos",
0352                                            "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in positive endcap",
0353                                            nbindphimatch,
0354                                            dphimatchmin,
0355                                            dphimatchmax,
0356                                            "#phi_{elecl} - #phi_{tr} (rad)");
0357   h1_dPhiEleCl_propOut_endcapsNeg = bookH1(iBooker,
0358                                            "dPhiEleCl_propOut_endcapsNeg",
0359                                            "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in negative endcap",
0360                                            nbindphimatch,
0361                                            dphimatchmin,
0362                                            dphimatchmax,
0363                                            "#phi_{elecl} - #phi_{tr} (rad)");
0364   h1_Hoe_barrel = bookH1(iBooker,
0365                          "Hoe_barrel",
0366                          "ele hadronic energy / em energy, in barrel",
0367                          nbinhoe,
0368                          hoemin,
0369                          hoemax,
0370                          "H/E",
0371                          "Events",
0372                          "ELE_LOGY E1 P");
0373   h1_Hoe_endcaps = bookH1(iBooker,
0374                           "Hoe_endcaps",
0375                           "ele hadronic energy / em energy, in endcaps",
0376                           nbinhoe,
0377                           hoemin,
0378                           hoemax,
0379                           "H/E",
0380                           "Events",
0381                           "ELE_LOGY E1 P");
0382   py_HoeVsPhi = bookP1(iBooker,
0383                        "HoeVsPhi",
0384                        "ele hadronic energy / em energy vs #phi",
0385                        nbinphi2D,
0386                        phimin,
0387                        phimax,
0388                        hoemin,
0389                        hoemax,
0390                        "#phi (rad)",
0391                        "<H/E>",
0392                        "E1 P");
0393   h1_sclSigEtaEta_barrel =
0394       bookH1(iBooker, "sclSigEtaEta_barrel", "ele sigma eta eta in barrel", 100, 0., 0.05, "sietaieta");
0395   h1_sclSigEtaEta_endcaps =
0396       bookH1(iBooker, "sclSigEtaEta_endcaps", "ele sigma eta eta in endcaps", 100, 0., 0.05, "sietaieta");
0397   h1_sigIEtaIEta5x5_barrel =
0398       bookH1(iBooker, "sigIEtaIEta5x5_barrel", "ele sigma ieta ieta 5x5 in barrel", 100, 0., 0.05, "sietaieta5x5");
0399   h1_sigIEtaIEta5x5_endcaps =
0400       bookH1(iBooker, "sigIEtaIEta5x5_endcaps", "ele sigma ieta ieta 5x5 in endcaps", 100, 0., 0.05, "sietaieta5x5");
0401 
0402   // fbrem
0403   h1_fbrem = bookH1(iBooker, "fbrem", "ele brem fraction", 100, 0., 1., "P_{in} - P_{out} / P_{in}");
0404   py_fbremVsEta = bookP1(iBooker,
0405                          "fbremVsEta",
0406                          "ele brem fraction vs #eta",
0407                          nbineta2D,
0408                          etamin,
0409                          etamax,
0410                          0.,
0411                          1.,
0412                          "#eta",
0413                          "<P_{in} - P_{out} / P_{in}>");
0414   py_fbremVsPhi = bookP1(iBooker,
0415                          "fbremVsPhi",
0416                          "ele brem fraction vs #phi",
0417                          nbinphi2D,
0418                          phimin,
0419                          phimax,
0420                          0.,
0421                          1.,
0422                          "#phi (rad)",
0423                          "<P_{in} - P_{out} / P_{in}>");
0424   h1_classes = bookH1(iBooker, "classes", "ele electron classes", 10, 0.0, 10.);
0425 
0426   // pflow
0427   h1_mva = bookH1(iBooker, "mva", "ele identification mva", 100, -1., 1., "mva");
0428   h1_provenance = bookH1(iBooker, "provenance", "ele provenance", 5, -2., 3., "provenance");
0429 
0430   // isolation
0431   h1_tkSumPt_dr03 = bookH1(
0432       iBooker, "tkSumPt_dr03", "tk isolation sum, dR=0.3", 100, 0.0, 20., "TkIsoSum (GeV/c)", "Events", "ELE_LOGY E1 P");
0433   h1_ecalRecHitSumEt_dr03 = bookH1(iBooker,
0434                                    "ecalRecHitSumEt_dr03",
0435                                    "ecal isolation sum, dR=0.3",
0436                                    100,
0437                                    0.0,
0438                                    20.,
0439                                    "EcalIsoSum (GeV)",
0440                                    "Events",
0441                                    "ELE_LOGY E1 P");
0442   h1_hcalTowerSumEt_dr03 = bookH1(iBooker,
0443                                   "hcalTowerSumEt_dr03",
0444                                   "hcal isolation sum, dR=0.3",
0445                                   100,
0446                                   0.0,
0447                                   20.,
0448                                   "HcalIsoSum (GeV)",
0449                                   "Events",
0450                                   "ELE_LOGY E1 P");
0451 
0452   // pf isolation
0453   h1_PFch_dr03 = bookH1(iBooker,
0454                         "PFch_dr03",
0455                         "Charged PF candidate sum, dR=0.3",
0456                         100,
0457                         0.0,
0458                         20.,
0459                         "PF charged (GeV/c)",
0460                         "Events",
0461                         "ELE_LOGY E1 P");
0462   h1_PFem_dr03 = bookH1(iBooker,
0463                         "PFem_dr03",
0464                         "Neutral EM PF candidate sum, dR=0.3",
0465                         100,
0466                         0.0,
0467                         20.,
0468                         "PF neutral EM (GeV)",
0469                         "Events",
0470                         "ELE_LOGY E1 P");
0471   h1_PFnh_dr03 = bookH1(iBooker,
0472                         "PFnh_dr03",
0473                         "Neutral Had PF candidate sum, dR=0.3",
0474                         100,
0475                         0.0,
0476                         20.,
0477                         "PF neutral Had (GeV)",
0478                         "Events",
0479                         "ELE_LOGY E1 P");
0480 
0481   // di-electron mass
0482   setBookIndex(200);
0483   h1_mee = bookH1(iBooker, "mee", "ele pairs invariant mass", nbinmee, meemin, meemax, "m_{ee} (GeV/c^{2})");
0484   h1_mee_os = bookH1(iBooker,
0485                      "mee_os",
0486                      "ele pairs invariant mass, opposite sign",
0487                      nbinmee,
0488                      meemin,
0489                      meemax,
0490                      "m_{e^{+}e^{-}} (GeV/c^{2})");
0491   h1_mee_os_bb = bookH1(iBooker,
0492                         "mee_os_bb",
0493                         "ele pairs invariant mass, opposite sign, barrel-barrel",
0494                         nbinmee,
0495                         meemin,
0496                         meemax,
0497                         "m_{e^{+}e^{-}} (GeV/c^{2})");
0498   h1_mee_os_ee = bookH1(iBooker,
0499                         "mee_os_ee",
0500                         "ele pairs invariant mass, opposite sign, endcap-endcap",
0501                         nbinmee,
0502                         meemin,
0503                         meemax,
0504                         "m_{e^{+}e^{-}} (GeV/c^{2})");
0505   h1_mee_os_eb = bookH1(iBooker,
0506                         "mee_os_eb",
0507                         "ele pairs invariant mass, opposite sign, barrel-endcap",
0508                         nbinmee,
0509                         meemin,
0510                         meemax,
0511                         "m_{e^{+}e^{-}} (GeV/c^{2})");
0512 
0513   //===========================
0514   // histos for matching and matched matched objects
0515   //===========================
0516 
0517   // matching object
0518   std::string matchingObjectType;
0519   Labels l;
0520   labelsForToken(matchingObjectCollection_, l);
0521   if (std::string::npos != std::string(l.module).find("SuperCluster", 0)) {
0522     matchingObjectType = "SC";
0523   }
0524   if (matchingObjectType.empty()) {
0525     edm::LogError("ElectronMcFakeValidator::beginJob") << "Unknown matching object type !";
0526   } else {
0527     edm::LogInfo("ElectronMcFakeValidator::beginJob") << "Matching object type: " << matchingObjectType;
0528   }
0529 
0530   // matching object distributions
0531   h1_matchingObject_Eta = bookH1withSumw2(
0532       iBooker, "matchingObject_Eta", matchingObjectType + " #eta", nbineta, etamin, etamax, "#eta_{SC}");
0533 
0534   h1_matchingObject_Pt = bookH1withSumw2(
0535       iBooker, "matchingObject_Pt", matchingObjectType + " pt", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
0536   h1_matchingObject_Phi = bookH1withSumw2(
0537       iBooker, "matchingObject_Phi", matchingObjectType + " #phi", nbinphi, phimin, phimax, "#phi (rad)");
0538 
0539   h1_matchedObject_Eta = bookH1withSumw2(
0540       iBooker, "matchedObject_Eta", "Efficiency vs matching SC #eta", nbineta, etamin, etamax, "#eta_{SC}");
0541   h1_matchedObject_Pt = bookH1withSumw2(
0542       iBooker, "matchedObject_Pt", "Efficiency vs matching SC E_{T}", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
0543   h1_matchedObject_Phi = bookH1withSumw2(
0544       iBooker, "matchedObject_Phi", "Efficiency vs matching SC #phi", nbinphi, phimin, phimax, "#phi (rad)");
0545   /**/
0546 }
0547 
0548 void ElectronAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0549   nEvents_++;
0550 
0551   edm::Handle<GsfElectronCollection> gsfElectrons;
0552   iEvent.getByToken(electronCollection_, gsfElectrons);
0553   edm::Handle<reco::SuperClusterCollection> recoClusters;
0554   iEvent.getByToken(matchingObjectCollection_, recoClusters);
0555   edm::Handle<reco::TrackCollection> tracks;
0556   iEvent.getByToken(trackCollection_, tracks);
0557   edm::Handle<reco::GsfTrackCollection> gsfTracks;
0558   iEvent.getByToken(gsftrackCollection_, gsfTracks);
0559   edm::Handle<reco::VertexCollection> vertices;
0560   iEvent.getByToken(vertexCollection_, vertices);
0561   edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
0562   iEvent.getByToken(beamSpotTag_, recoBeamSpotHandle);
0563   const BeamSpot bs = *recoBeamSpotHandle;
0564 
0565   edm::EventNumber_t ievt = iEvent.id().event();
0566   edm::RunNumber_t irun = iEvent.id().run();
0567   edm::LuminosityBlockNumber_t ils = iEvent.luminosityBlock();
0568 
0569   edm::LogInfo("ElectronAnalyzer::analyze") << "Treating " << gsfElectrons.product()->size() << " electrons"
0570                                             << " from event " << ievt << " in run " << irun << " and lumiblock " << ils;
0571   //h1_num_->Fill((*gsfElectrons).size()) ;
0572 
0573   // selected rec electrons
0574   reco::GsfElectronCollection::const_iterator gsfIter;
0575   for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
0576     // vertex TIP
0577     double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
0578                        (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
0579     vertexTIP = sqrt(vertexTIP);
0580 
0581     // select electrons
0582     if (!selected(gsfIter, vertexTIP))
0583       continue;
0584 
0585     // invariant mass of 2 selected electrons
0586     reco::GsfElectronCollection::const_iterator gsfIter2;
0587     for (gsfIter2 = gsfIter + 1; gsfIter2 != gsfElectrons->end(); gsfIter2++) {
0588       if (!selected(gsfIter2, vertexTIP))
0589         continue;
0590       float invMass = computeInvMass(*gsfIter, *gsfIter2);
0591       h1_mee->Fill(invMass);
0592       if (((gsfIter->charge()) * (gsfIter2->charge())) < 0.) {
0593         h1_mee_os->Fill(invMass);
0594         if (gsfIter->isEB() && gsfIter2->isEB())
0595           h1_mee_os_bb->Fill(invMass);
0596         else if (gsfIter->isEE() && gsfIter2->isEE())
0597           h1_mee_os_ee->Fill(invMass);
0598         else
0599           h1_mee_os_eb->Fill(invMass);
0600       }
0601     }
0602 
0603     // basic quantities
0604     if (gsfIter->isEB())
0605       h1_vertexPt_barrel->Fill(gsfIter->pt());
0606     if (gsfIter->isEE())
0607       h1_vertexPt_endcaps->Fill(gsfIter->pt());
0608     h1_vertexEta->Fill(gsfIter->eta());
0609     h2_vertexEtaVsPhi->Fill(gsfIter->eta(), gsfIter->phi());
0610     h2_vertexXvsY->Fill(gsfIter->vertex().x(), gsfIter->vertex().y());
0611     h1_vertexZ->Fill(gsfIter->vertex().z());
0612 
0613     // supercluster related distributions
0614     reco::SuperClusterRef sclRef = gsfIter->superCluster();
0615     // ALREADY DONE IN GSF ELECTRON CORE
0616     double R = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y() + sclRef->z() * sclRef->z());
0617     double Rt = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y());
0618     h1_sclEt->Fill(sclRef->energy() * (Rt / R));
0619 
0620     // track related distributions
0621     if (!readAOD_) {  // track extra does not exist in AOD
0622       h1_foundHits->Fill(gsfIter->gsfTrack()->numberOfValidHits());
0623       py_foundHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits());
0624       py_foundHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits());
0625       h1_lostHits->Fill(gsfIter->gsfTrack()->numberOfLostHits());
0626       py_lostHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits());
0627       py_lostHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits());
0628       h1_chi2->Fill(gsfIter->gsfTrack()->normalizedChi2());
0629       py_chi2VsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2());
0630       py_chi2VsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2());
0631     }
0632 
0633     // match distributions
0634     if (gsfIter->isEB()) {
0635       h1_Eop_barrel->Fill(gsfIter->eSuperClusterOverP());
0636       h1_EeleOPout_barrel->Fill(gsfIter->eEleClusterOverPout());
0637       h1_dEtaSc_propVtx_barrel->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0638       h1_dEtaEleCl_propOut_barrel->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0639       h1_dPhiSc_propVtx_barrel->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0640       h1_dPhiEleCl_propOut_barrel->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0641       h1_Hoe_barrel->Fill(gsfIter->hadronicOverEm());
0642       h1_sclSigEtaEta_barrel->Fill(gsfIter->scSigmaEtaEta());
0643       h1_sigIEtaIEta5x5_barrel->Fill(gsfIter->full5x5_sigmaIetaIeta());
0644     }
0645     if (gsfIter->isEE()) {
0646       h1_Eop_endcaps->Fill(gsfIter->eSuperClusterOverP());
0647       h1_EeleOPout_endcaps->Fill(gsfIter->eEleClusterOverPout());
0648       if (gsfIter->eta() > 0) {
0649         h1_dEtaSc_propVtx_endcapsPos->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0650         h1_dEtaEleCl_propOut_endcapsPos->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0651         h1_dPhiSc_propVtx_endcapsPos->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0652         h1_dPhiEleCl_propOut_endcapsPos->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0653       } else {
0654         h1_dEtaSc_propVtx_endcapsNeg->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0655         h1_dEtaEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0656         h1_dPhiSc_propVtx_endcapsNeg->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0657         h1_dPhiEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0658       }
0659       h1_Hoe_endcaps->Fill(gsfIter->hadronicOverEm());
0660       h1_sclSigEtaEta_endcaps->Fill(gsfIter->scSigmaEtaEta());
0661       h1_sigIEtaIEta5x5_endcaps->Fill(gsfIter->full5x5_sigmaIetaIeta());
0662     }
0663     py_EopVsPhi->Fill(gsfIter->phi(), gsfIter->eSuperClusterOverP());
0664     py_dEtaSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
0665     py_dPhiSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
0666     py_HoeVsPhi->Fill(gsfIter->phi(), gsfIter->hadronicOverEm());
0667 
0668     // fbrem, classes
0669     h1_fbrem->Fill(gsfIter->fbrem());
0670     py_fbremVsEta->Fill(gsfIter->eta(), gsfIter->fbrem());
0671     py_fbremVsPhi->Fill(gsfIter->phi(), gsfIter->fbrem());
0672     int eleClass = gsfIter->classification();
0673     if (gsfIter->isEE())
0674       eleClass += 5;
0675     h1_classes->Fill(eleClass);
0676 
0677     // pflow
0678     h1_mva->Fill(gsfIter->mva_e_pi());
0679     if (gsfIter->ecalDrivenSeed())
0680       h1_provenance->Fill(1.);
0681     if (gsfIter->trackerDrivenSeed())
0682       h1_provenance->Fill(-1.);
0683     if (gsfIter->trackerDrivenSeed() || gsfIter->ecalDrivenSeed())
0684       h1_provenance->Fill(0.);
0685     if (gsfIter->trackerDrivenSeed() && !gsfIter->ecalDrivenSeed())
0686       h1_provenance->Fill(-2.);
0687     if (!gsfIter->trackerDrivenSeed() && gsfIter->ecalDrivenSeed())
0688       h1_provenance->Fill(2.);
0689 
0690     // isolation
0691     h1_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
0692     h1_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
0693     h1_hcalTowerSumEt_dr03->Fill(gsfIter->dr03HcalTowerSumEt());
0694 
0695     // PF isolation
0696     GsfElectron::PflowIsolationVariables pfIso = gsfIter->pfIsolationVariables();
0697     h1_PFch_dr03->Fill(pfIso.sumChargedHadronPt);
0698     h1_PFem_dr03->Fill(pfIso.sumPhotonEt);
0699     h1_PFnh_dr03->Fill(pfIso.sumNeutralHadronEt);
0700   }
0701 
0702   // association matching object-reco electrons
0703   reco::SuperClusterCollection::const_iterator moIter;
0704   for (moIter = recoClusters->begin(); moIter != recoClusters->end(); moIter++) {
0705     //    // number of matching objects
0706 
0707     if (moIter->energy() / cosh(moIter->eta()) > maxPtMatchingObject_ ||
0708         std::abs(moIter->eta()) > maxAbsEtaMatchingObject_) {
0709       continue;
0710     }
0711 
0712     //    // suppress the endcaps
0713     h1_matchingObject_Eta->Fill(moIter->eta());
0714     h1_matchingObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
0715     h1_matchingObject_Phi->Fill(moIter->phi());
0716 
0717     bool okGsfFound = false;
0718     double gsfOkRatio = 999999999.;
0719     reco::GsfElectron bestGsfElectron;
0720     reco::GsfElectronCollection::const_iterator gsfIter;
0721     for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
0722       double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
0723                          (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
0724       vertexTIP = sqrt(vertexTIP);
0725 
0726       // select electrons
0727       if (!selected(gsfIter, vertexTIP))
0728         continue;
0729 
0730       // matching with a cone in eta phi
0731       if (matchingCondition_ == "Cone") {
0732         double dphi = gsfIter->phi() - moIter->phi();
0733         if (std::abs(dphi) > CLHEP::pi) {
0734           dphi = dphi < 0 ? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi;
0735         }
0736         double deltaR = sqrt(pow((moIter->eta() - gsfIter->eta()), 2) + pow(dphi, 2));
0737         if (deltaR < deltaR_) {
0738           double tmpGsfRatio = gsfIter->p() / moIter->energy();
0739           if (std::abs(tmpGsfRatio - 1) < std::abs(gsfOkRatio - 1)) {
0740             gsfOkRatio = tmpGsfRatio;
0741             bestGsfElectron = *gsfIter;
0742             okGsfFound = true;
0743           }
0744         }
0745       }
0746     }  // loop over rec ele to look for the best one
0747     if (okGsfFound) {
0748       // generated distributions for matched electrons
0749       h1_matchedObject_Eta->Fill(moIter->eta());
0750       h1_matchedObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
0751       h1_matchedObject_Phi->Fill(moIter->phi());
0752 
0753       //classes
0754     }
0755 
0756   }  // loop overmatching object
0757 }
0758 
0759 float ElectronAnalyzer::computeInvMass(const reco::GsfElectron& e1, const reco::GsfElectron& e2) {
0760   math::XYZTLorentzVector p12 = e1.p4() + e2.p4();
0761   float mee2 = p12.Dot(p12);
0762   float invMass = mee2 > 0. ? sqrt(mee2) : 0;
0763   return invMass;
0764 }
0765 
0766 bool ElectronAnalyzer::selected(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
0767   if ((Selection_ > 0) && generalCut(gsfIter))
0768     return false;
0769   if ((Selection_ >= 1) && etCut(gsfIter))
0770     return false;
0771   if ((Selection_ >= 2) && isolationCut(gsfIter, vertexTIP))
0772     return false;
0773   if ((Selection_ >= 3) && idCut(gsfIter))
0774     return false;
0775   return true;
0776 }
0777 
0778 bool ElectronAnalyzer::generalCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0779   if (std::abs(gsfIter->eta()) > maxAbsEta_)
0780     return true;
0781   if (gsfIter->pt() < minPt_)
0782     return true;
0783 
0784   if (gsfIter->isEB() && isEE_)
0785     return true;
0786   if (gsfIter->isEE() && isEB_)
0787     return true;
0788   if (gsfIter->isEBEEGap() && isNotEBEEGap_)
0789     return true;
0790 
0791   if (gsfIter->ecalDrivenSeed() && isTrackerDriven_)
0792     return true;
0793   if (gsfIter->trackerDrivenSeed() && isEcalDriven_)
0794     return true;
0795 
0796   return false;
0797 }
0798 
0799 bool ElectronAnalyzer::etCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0800   if (gsfIter->superCluster()->energy() / cosh(gsfIter->superCluster()->eta()) < minEt_)
0801     return true;
0802 
0803   return false;
0804 }
0805 
0806 bool ElectronAnalyzer::isolationCut(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
0807   if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_)
0808     return true;
0809   if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_)
0810     return true;
0811 
0812   if (gsfIter->dr03TkSumPt() > tkIso03Max_)
0813     return true;
0814   if (gsfIter->isEB() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxBarrel_)
0815     return true;
0816   if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxEndcaps_)
0817     return true;
0818   if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(2) > hcalIso03Depth2MaxEndcaps_)
0819     return true;
0820   if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_)
0821     return true;
0822   if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_)
0823     return true;
0824 
0825   return false;
0826 }
0827 
0828 bool ElectronAnalyzer::idCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0829   if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_)
0830     return true;
0831   if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_)
0832     return true;
0833   if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_)
0834     return true;
0835   if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_)
0836     return true;
0837   if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_)
0838     return true;
0839   if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_)
0840     return true;
0841   if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_)
0842     return true;
0843   if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_)
0844     return true;
0845   if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_)
0846     return true;
0847   if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_)
0848     return true;
0849   if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_)
0850     return true;
0851   if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_)
0852     return true;
0853   if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_)
0854     return true;
0855   if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_)
0856     return true;
0857   if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_)
0858     return true;
0859   if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_)
0860     return true;
0861   if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_)
0862     return true;
0863   if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_)
0864     return true;
0865 
0866   return false;
0867 }