diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index 71907cd8d1270..e8863a1d8b8a2 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -6,8 +6,7 @@ ############################FOR bitmapVIDForEle main defn############################# electron_id_modules_WorkingPoints_nanoAOD = cms.PSet( - modules = cms.vstring( - 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Winter22_122X_V1_cff', + modules = cms.vstring( 'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV70_cff', # HZZ ID 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer16UL_ID_ISO_cff', @@ -17,6 +16,10 @@ 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Fall17_94X_V2_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff', + # Run3Winter22: + 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Winter22_122X_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff', ), WorkingPoints = cms.vstring( "egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-veto", @@ -147,9 +150,11 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): slimmedElectronsWithUserData = cms.EDProducer("PATElectronUserDataEmbedder", src = cms.InputTag("slimmedElectrons"), parentSrcs = cms.VInputTag("reducedEgamma:reducedGedGsfElectrons"), - userFloats = cms.PSet( - mvaIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2Values"), - mvaNoIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2Values"), + userFloats = cms.PSet( + mvaIso_Fall17V2 = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2Values"), + mvaNoIso_Fall17V2 = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2Values"), + mvaIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1Values"), + mvaNoIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Values"), mvaHZZIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer18ULIdIsoValues"), miniIsoChg = cms.InputTag("isoForEle:miniIsoChg"), @@ -168,14 +173,18 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): ptRel = cms.InputTag("ptRatioRelForEle:ptRel"), jetNDauChargedMVASel = cms.InputTag("ptRatioRelForEle:jetNDauChargedMVASel"), ), - userIntFromBools = cms.PSet( - mvaIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp90"), - mvaIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80"), - mvaIso_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpLoose"), - mvaNoIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp90"), - mvaNoIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp80"), - mvaNoIso_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wpLoose"), - + userIntFromBools = cms.PSet( + mvaIso_Fall17V2_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp90"), + mvaIso_Fall17V2_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80"), + mvaIso_Fall17V2_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpLoose"), + mvaIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-iso-V1-wp90"), + mvaIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-iso-V1-wp80"), + mvaNoIso_Fall17V2_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp90"), + mvaNoIso_Fall17V2_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp80"), + mvaNoIso_Fall17V2_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wpLoose"), + mvaNoIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp90"), + mvaNoIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp80"), + cutBasedID_veto = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-veto"), cutBasedID_loose = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-loose"), cutBasedID_medium = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-medium"), @@ -199,12 +208,18 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): # no need for the Run3 IDs in Run2 run2_egamma.toModify(slimmedElectronsWithUserData.userFloats, + mvaIso = None, + mvaNoIso = None, miniIsoChg = None, miniIsoAll = None, PFIsoChg = None, PFIsoAll = None, PFIsoAll04 = None).\ toModify(slimmedElectronsWithUserData.userIntFromBools, + mvaIso_WP90 = None, + mvaIso_WP80 = None, + mvaNoIso_WP90 = None, + mvaNoIso_WP80 = None, cutBasedID_veto = None, cutBasedID_loose = None, cutBasedID_medium = None, @@ -264,7 +279,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): LepGood_dxy = cms.string("log(abs(dB('PV2D')))"), LepGood_sip3d = cms.string("abs(dB('PV3D')/edB('PV3D'))"), LepGood_dz = cms.string("log(abs(dB('PVDZ')))"), - LepGood_mvaFall17V2noIso = cms.string("userFloat('mvaNoIso')"), + LepGood_mvaFall17V2noIso = cms.string("userFloat('mvaNoIso_Fall17V2')"), ) ) run2_egamma_2016.toModify( @@ -294,14 +309,20 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): eInvMinusPInv = Var("(1-eSuperClusterOverP())/ecalEnergy()",float,doc="1/E_SC - 1/p_trk",precision=10), scEtOverPt = Var("(superCluster().energy()/(pt*cosh(superCluster().eta())))-1",float,doc="(supercluster transverse energy)/pt-1",precision=8), - mvaIso = Var("userFloat('mvaIso')",float,doc="MVA Iso ID V2 score"), - mvaIso_WP80 = Var("userInt('mvaIso_WP80')",bool,doc="MVA Iso ID V2 WP80"), - mvaIso_WP90 = Var("userInt('mvaIso_WP90')",bool,doc="MVA Iso ID V2 WP90"), - mvaIso_WPL = Var("userInt('mvaIso_WPL')",bool,doc="MVA Iso ID V2 loose WP"), - mvaNoIso = Var("userFloat('mvaNoIso')",float,doc="MVA noIso ID V2 score"), - mvaNoIso_WP80 = Var("userInt('mvaNoIso_WP80')",bool,doc="MVA noIso ID V2 WP80"), - mvaNoIso_WP90 = Var("userInt('mvaNoIso_WP90')",bool,doc="MVA noIso ID V2 WP90"), - mvaNoIso_WPL = Var("userInt('mvaNoIso_WPL')",bool,doc="MVA noIso ID V2 loose WP"), + mvaIso = Var("userFloat('mvaIso')",float,doc="MVA Iso ID score, Winter22V1"), + mvaIso_WP80 = Var("userInt('mvaIso_WP80')",bool,doc="MVA Iso ID WP80, Winter22V1"), + mvaIso_WP90 = Var("userInt('mvaIso_WP90')",bool,doc="MVA Iso ID WP90, Winter22V1"), + mvaNoIso = Var("userFloat('mvaNoIso')",float,doc="MVA noIso ID score, Winter22V1"), + mvaNoIso_WP80 = Var("userInt('mvaNoIso_WP80')",bool,doc="MVA noIso ID WP80, Winter22V1"), + mvaNoIso_WP90 = Var("userInt('mvaNoIso_WP90')",bool,doc="MVA noIso ID WP90, Winter22V1"), + mvaIso_Fall17V2 = Var("userFloat('mvaIso_Fall17V2')",float,doc="MVA Iso ID score, Fall17V2"), + mvaIso_Fall17V2_WP80 = Var("userInt('mvaIso_Fall17V2_WP80')",bool,doc="MVA Iso ID WP80, Fall17V2"), + mvaIso_Fall17V2_WP90 = Var("userInt('mvaIso_Fall17V2_WP90')",bool,doc="MVA Iso ID WP90, Fall17V2"), + mvaIso_Fall17V2_WPL = Var("userInt('mvaIso_Fall17V2_WPL')",bool,doc="MVA Iso ID loose WP, Fall17V2"), + mvaNoIso_Fall17V2 = Var("userFloat('mvaNoIso_Fall17V2')",float,doc="MVA noIso ID score, Fall17V2"), + mvaNoIso_Fall17V2_WP80 = Var("userInt('mvaNoIso_Fall17V2_WP80')",bool,doc="MVA noIso ID WP80, Fall17V2"), + mvaNoIso_Fall17V2_WP90 = Var("userInt('mvaNoIso_Fall17V2_WP90')",bool,doc="MVA noIso ID WP90, Fall17V2"), + mvaNoIso_Fall17V2_WPL = Var("userInt('mvaNoIso_Fall17V2_WPL')",bool,doc="MVA noIso ID loose WP, Fall17V2"), mvaHZZIso = Var("userFloat('mvaHZZIso')", float,doc="HZZ MVA Iso ID score"), cutBased = Var("userInt('cutBasedID_veto')+userInt('cutBasedID_loose')+userInt('cutBasedID_medium')+userInt('cutBasedID_tight')",int,doc="cut-based ID RunIII Winter22 (0:fail, 1:veto, 2:loose, 3:medium, 4:tight)"), @@ -354,7 +375,23 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): # switch default IDs back to Fall17V2 in Run2, remove Winter22V1 and quadratic iso cutBased = electronTable.variables.cutBased_Fall17V2, cutBased_Fall17V2 = None, - vidNestedWPBitmap = electronTable.variables.cutBased_Fall17V2 , + mvaIso = electronTable.variables.mvaIso_Fall17V2, + mvaIso_Fall17V2 = None, + mvaIso_WP80 = electronTable.variables.mvaIso_Fall17V2_WP80, + mvaIso_Fall17V2_WP80 = None, + mvaIso_WP90 = electronTable.variables.mvaIso_Fall17V2_WP90, + mvaIso_Fall17V2_WP90 = None, + mvaIso_WPL = electronTable.variables.mvaIso_Fall17V2_WPL, + mvaIso_Fall17V2_WPL = None, + mvaNoIso = electronTable.variables.mvaNoIso_Fall17V2, + mvaNoIso_Fall17V2 = None, + mvaNoIso_WP80 = electronTable.variables.mvaNoIso_Fall17V2_WP80, + mvaNoIso_Fall17V2_WP80 = None, + mvaNoIso_WP90 = electronTable.variables.mvaNoIso_Fall17V2_WP90, + mvaNoIso_Fall17V2_WP90 = None, + mvaNoIso_WPL = electronTable.variables.mvaNoIso_Fall17V2_WPL, + mvaNoIso_Fall17V2_WPL = None, + vidNestedWPBitmap = electronTable.variables.cutBased_Fall17V2, vidNestedWPBitmap_Fall17V2 = None, miniPFRelIso_chg = electronTable.variables.miniPFRelIso_chg_Fall17V2, miniPFRelIso_chg_Fall17V2 = None, diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 62e5faa5af190..d3df507c9e7c6 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -82,14 +82,20 @@ Plot1D('lostHits', 'lostHits', 4, -0.5, 3.5, 'number of missing inner hits'), Plot1D('jetNDauCharged', 'jetNDauCharged', 20, -0.5, 19.5, 'number of charged daughters of the closest jet'), NoPlot('mass'), - Plot1D('mvaIso', 'mvaIso', 20, -1, 1, 'MVA Iso ID V2 score'), - Plot1D('mvaIso_WP80', 'mvaIso_WP80', 2, -0.5, 1.5, 'MVA Iso ID V2 WP80'), - Plot1D('mvaIso_WP90', 'mvaIso_WP90', 2, -0.5, 1.5, 'MVA Iso ID V2 WP90'), - Plot1D('mvaIso_WPL', 'mvaIso_WPL', 2, -0.5, 1.5, 'MVA Iso ID V2 loose WP'), - Plot1D('mvaNoIso', 'mvaNoIso', 20, -1, 1, 'MVA noIso ID V2 score'), - Plot1D('mvaNoIso_WP80', 'mvaNoIso_WP80', 2, -0.5, 1.5, 'MVA noIso ID V2 WP80'), - Plot1D('mvaNoIso_WP90', 'mvaNoIso_WP90', 2, -0.5, 1.5, 'MVA noIso ID V2 WP90'), - Plot1D('mvaNoIso_WPL', 'mvaNoIso_WPL', 2, -0.5, 1.5, 'MVA noIso ID V2 loose WP'), + Plot1D('mvaIso_Fall17V2', 'mvaIso_Fall17V2', 20, -1, 1, 'MVA Iso ID score, Fall17V2'), + Plot1D('mvaIso_Fall17V2_WP80', 'mvaIso_Fall17V2_WP80', 2, -0.5, 1.5, 'MVA Iso ID WP80, Fall17V2'), + Plot1D('mvaIso_Fall17V2_WP90', 'mvaIso_Fall17V2_WP90', 2, -0.5, 1.5, 'MVA Iso ID WP90, Fall17V2'), + Plot1D('mvaIso_Fall17V2_WPL', 'mvaIso_Fall17V2_WPL', 2, -0.5, 1.5, 'MVA Iso ID loose WP, Fall17V2'), + Plot1D('mvaIso', 'mvaIso', 20, -1, 1, 'MVA Iso ID score, Winter22V1'), + Plot1D('mvaIso_WP80', 'mvaIso_WP80', 2, -0.5, 1.5, 'MVA Iso ID WP80, Winter22V1'), + Plot1D('mvaIso_WP90', 'mvaIso_WP90', 2, -0.5, 1.5, 'MVA Iso ID WP90, Winter22V1'), + Plot1D('mvaNoIso', 'mvaNoIso', 20, -1, 1, 'MVA noIso ID score, Winter22V1'), + Plot1D('mvaNoIso_WP80', 'mvaNoIso_WP80', 2, -0.5, 1.5, 'MVA noIso ID WP80, Winter22V1'), + Plot1D('mvaNoIso_WP90', 'mvaNoIso_WP90', 2, -0.5, 1.5, 'MVA noIso ID WP90, Winter22V1'), + Plot1D('mvaNoIso_Fall17V2', 'mvaNoIso_Fall17V2', 20, -1, 1, 'MVA noIso ID score, Fall17V2'), + Plot1D('mvaNoIso_Fall17V2_WP80', 'mvaNoIso_Fall17V2_WP80', 2, -0.5, 1.5, 'MVA noIso ID WP80, Fall17V2'), + Plot1D('mvaNoIso_Fall17V2_WP90', 'mvaNoIso_Fall17V2_WP90', 2, -0.5, 1.5, 'MVA noIso ID WP90, Fall17V2'), + Plot1D('mvaNoIso_Fall17V2_WPL', 'mvaNoIso_Fall17V2_WPL', 2, -0.5, 1.5, 'MVA noIso ID loose WP, Fall17V2'), Plot1D('mvaTTH', 'mvaTTH', 20, -1, 1, 'TTH MVA lepton ID score'), Plot1D('pdgId', 'pdgId', 27, -13.5, 13.5, 'PDG code assigned by the event reconstruction (not by MC truth)'), Plot1D('miniPFRelIso_all', 'miniPFRelIso_all', 20, 0, 1, 'mini PF relative isolation, total (with scaled rho*EA PU corrections)'), @@ -598,7 +604,7 @@ Plot1D('charge', 'charge', 1, -0.5, 0.5, 'electric charge'), Plot1D('cleanmask', 'cleanmask', 1, 0.5, 1.5, 'simple cleaning mask with priority to leptons'), Plot1D('cutBased', 'cutBased', 4, -0.5, 3.5,'cut-based ID bitmap, (0:fail, 1:loose, 2:medium, 3:tight)'), - Plot1D('cutBased_Fall17V2', 'cutBased_Fall17V2', 4, -0.5, 3.5, 'cut-based ID bitmap, Fall17V2, (0:fail, 1:loose, 2:medium, 3:tight)'), + Plot1D('cutBased_Fall17V2', 'cutBased_Fall17V2', 4, -0.5, 3.5, 'cut-based ID bitmap, Fall17V2, (0:fail, 1:loose, 2:medium, 3:tight)'), NoPlot('electronIdx'), Plot1D('electronVeto', 'electronVeto', 2, -0.5, 1.5, 'pass electron veto'), Plot1D('energyErr', 'energyErr', 20, 0, 300, 'energy error of the cluster from regression'), diff --git a/PhysicsTools/NanoAOD/python/photons_cff.py b/PhysicsTools/NanoAOD/python/photons_cff.py index f2e4abbad5b52..ac261304f2906 100644 --- a/PhysicsTools/NanoAOD/python/photons_cff.py +++ b/PhysicsTools/NanoAOD/python/photons_cff.py @@ -166,7 +166,6 @@ def make_bitmapVID_docstring(id_modules_working_points_pset): toModify(slimmedPhotonsWithUserData.userInts, VIDNestedWPBitmap = None) - run2_egamma.toModify( slimmedPhotonsWithUserData.userFloats, ecalEnergyErrPostCorrNew = cms.InputTag("calibratedPatPhotonsNano","ecalEnergyErrPostCorr"), @@ -271,7 +270,6 @@ def make_bitmapVID_docstring(id_modules_working_points_pset): pfRelIso03_all_quadratic=None, hoe_PUcorr=None) - #these eras need to make the energy correction, hence the "New" run2_egamma.toModify( photonTable.variables, diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 6550fbc64b165..6013ac7b7ffec 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -306,6 +306,8 @@ def _add_deepFlavour(process): 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer16UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer17UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer18UL_ID_ISO_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff' ] switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD, task) process.egmGsfElectronIDs.physicsObjectSrc = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") diff --git a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py index 49e2a4225c8aa..92b3c3339d8b0 100644 --- a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py +++ b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py @@ -9,6 +9,8 @@ import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff as ele_fall17_noIso_v2 import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer18UL_ID_ISO_cff as ele_summer18UL_hzz +import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff as ele_RunIIIWinter22_iso_v1 +import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff as ele_RunIIIWinter22_noIso_v1 #photon mva ids import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring16_nonTrig_V1_cff as pho_spring16_nt_v1 @@ -45,7 +47,9 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name): ele_fall17_noIso_v1, ele_fall17_iso_v2, ele_fall17_noIso_v2, - ele_summer18UL_hzz + ele_summer18UL_hzz, + ele_RunIIIWinter22_iso_v1, + ele_RunIIIWinter22_noIso_v1 ]: setup_mva(egamma_modifications[0].electron_config, diff --git a/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3.txt b/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3.txt new file mode 100644 index 0000000000000..1c987b7d53bdb --- /dev/null +++ b/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3.txt @@ -0,0 +1,44 @@ +# File: ElectronIDVariablesRun3.txt +# +# This file is to be read by the MVAVariableHelper class. Lists all the +# variables which appear in the xml files for the MVA based Electron IDs for Run2. +# Variables are given line by line. The columns of each entry correspond to: +# +# 1. The name under which the variable appears in the weight files. +# 2. How to get this variable from the electron with the cut parser (NO SPACES!) +# or if not available, how to get the variables elsewhere. +# 3. The lower clip value for the variable to avoid crazy values. "None" if no clip. +# 4. The upper clip value. +# + +# This selection of ID variables is rather large and not intended to be used by a real ID, +# but by an ntuplizer which dumps all possible ID variables. + +rho fixedGridRhoFastjetAll None None +ele_oldsigmaietaieta full5x5_sigmaIetaIeta None None +ele_oldsigmaiphiiphi full5x5_sigmaIphiIphi None None +ele_oldcircularity 1.-full5x5_e1x5/full5x5_e5x5 -1. 2. +ele_oldr9 full5x5_r9 None 5. +ele_scletawidth superCluster.etaWidth None None +ele_sclphiwidth superCluster.phiWidth None None +ele_oldhe full5x5_hcalOverEcal None None +ele_kfhits closestCtfTrackNLayers None None +ele_kfchi2 closestCtfTrackNormChi2 None 10. +ele_gsfchi2 gsfTrack.normalizedChi2 None 200. +ele_fbrem fbrem -1. None +ele_gsfhits gsfTrack.hitPattern.trackerLayersWithMeasurement None None +ele_expected_inner_hits gsfTrack.hitPattern.numberOfLostHits('MISSING_INNER_HITS') None None +ele_conversionVertexFitProbability convVtxFitProb None None +ele_ep eSuperClusterOverP None 20. +ele_eelepout eEleClusterOverPout None 20. +ele_IoEmIop 1.0/ecalEnergy-1.0/trackMomentumAtVtx.R None None +ele_deltaetain abs(deltaEtaSuperClusterTrackAtVtx) -0.06 0.06 +ele_deltaphiin abs(deltaPhiSuperClusterTrackAtVtx) -0.6 0.6 +ele_deltaetaseed abs(deltaEtaSeedClusterTrackAtCalo) -0.2 0.2 +ele_psEoverEraw superCluster.preshowerEnergy/superCluster.rawEnergy None None +ele_pfPhotonIso pfIsolationVariables.sumPhotonEt None None +ele_pfChargedHadIso pfIsolationVariables.sumChargedHadronPt None None +ele_pfNeutralHadIso pfIsolationVariables.sumNeutralHadronEt None None +ele_ecalPFClusterIso ecalPFClusterIso None None +ele_hcalPFClusterIso hcalPFClusterIso None None +ele_dr03TkSumPt dr03TkSumPt None None diff --git a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py index 0f033a38a50b5..991e11b123d3a 100644 --- a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py +++ b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py @@ -27,6 +27,13 @@ import mvaEleID_Fall17_iso_V2_producer_config mvaConfigsForEleProducer.append( mvaEleID_Fall17_iso_V2_producer_config ) +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff \ + import mvaEleID_RunIIIWinter22_noIso_V1_producer_config +mvaConfigsForEleProducer.append( mvaEleID_RunIIIWinter22_noIso_V1_producer_config ) + +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff \ + import mvaEleID_RunIIIWinter22_iso_V1_producer_config +mvaConfigsForEleProducer.append( mvaEleID_RunIIIWinter22_iso_V1_producer_config ) # HZZ4l Run2 (Ultra)Legacy from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer16UL_ID_ISO_cff \ diff --git a/RecoEgamma/ElectronIdentification/python/FWLite.py b/RecoEgamma/ElectronIdentification/python/FWLite.py index 087a71d743836..49206f7c67742 100644 --- a/RecoEgamma/ElectronIdentification/python/FWLite.py +++ b/RecoEgamma/ElectronIdentification/python/FWLite.py @@ -86,12 +86,16 @@ def passed(self, ele, mva, category, wp): # Import information needed to construct the e/gamma MVAs from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_tools \ - import EleMVA_6CategoriesCuts, mvaVariablesFile, EleMVA_3CategoriesCuts + import EleMVA_6CategoriesCuts, mvaVariablesFile, mvaVariablesFileRun3, EleMVA_3CategoriesCuts from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff \ import mvaWeightFiles as Fall17_iso_V2_weightFiles from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff \ import mvaWeightFiles as Fall17_noIso_V2_weightFiles +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff \ + import mvaWeightFiles as RunIIIWinter22_iso_V1_weightFiles +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff \ + import mvaWeightFiles as RunIIIWinter22_noIso_V1_weightFiles from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff \ import mvaSpring16WeightFiles_V1 as mvaSpring16GPWeightFiles_V1 from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_HZZ_V1_cff \ @@ -105,10 +109,18 @@ def passed(self, ele, mva, category, wp): import workingPoints as Fall17_iso_V2_workingPoints from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff \ import workingPoints as Fall17_noIso_V2_workingPoints +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff \ + import workingPoints as RunIIIWinter22_iso_V1_workingPoints +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff \ + import workingPoints as RunIIIWinter22_noIso_V1_workingPoints # Dictionary with the relecant e/gmma MVAs electron_mvas = { + "RunIIIWinter22IsoV1" : ElectronMVAID("ElectronMVAEstimatorRun2","RunIIIWinter22IsoV1", + EleMVA_6CategoriesCuts, RunIIIWinter22_iso_V1_weightFiles, mvaVariablesFileRun3), + "RunIIIWinter22NoIsoV1" : ElectronMVAID("ElectronMVAEstimatorRun2","RunIIIWinter22NoIsoV1", + EleMVA_6CategoriesCuts, RunIIIWinter22_noIso_V1_weightFiles, mvaVariablesFileRun3), "Fall17IsoV2" : ElectronMVAID("ElectronMVAEstimatorRun2","Fall17IsoV2", EleMVA_6CategoriesCuts, Fall17_iso_V2_weightFiles, mvaVariablesFile), "Fall17NoIsoV2" : ElectronMVAID("ElectronMVAEstimatorRun2","Fall17NoIsoV2", @@ -120,6 +132,10 @@ def passed(self, ele, mva, category, wp): } working_points = { + "RunIIIWinter22IsoV1" : WorkingPoints("ElectronMVAEstimatorRun2","RunIIIWinter22IsoV1", + RunIIIWinter22_iso_V1_workingPoints), + "RunIIIWinter22NoIsoV1" : WorkingPoints("ElectronMVAEstimatorRun2","RunIIIWinter22NoIsoV1", + RunIIIWinter22_noIso_V1_workingPoints), "Fall17IsoV2" : WorkingPoints("ElectronMVAEstimatorRun2","Fall17IsoV2", Fall17_iso_V2_workingPoints), "Fall17NoIsoV2" : WorkingPoints("ElectronMVAEstimatorRun2","Fall17NoIsoV2", diff --git a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_iso_V1_cff.py b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_iso_V1_cff.py new file mode 100644 index 0000000000000..321e5ea25eea2 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_iso_V1_cff.py @@ -0,0 +1,63 @@ +import FWCore.ParameterSet.Config as cms +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_tools import * +from os import path + +# Egamma presentation on this ID for Run3 +# https://indico.cern.ch/event/1220628/contributions/5134878/attachments/2546114/4384580/Run%203%20Electron%20MVA%20based%20ID%20training.pdf + +mvaTag = "RunIIIWinter22IsoV1" + +weightFileDir = "RecoEgamma/ElectronIdentification/data/MVAWeightFiles/Winter22IsoV1" + +mvaWeightFiles = [ + path.join(weightFileDir, "EB1_5.weights.root"), # EB1_5 + path.join(weightFileDir, "EB2_5.weights.root"), # EB2_5 + path.join(weightFileDir, "EE_5.weights.root"), # EE_5 + path.join(weightFileDir, "EB1_10.weights.root"), # EB1_10 + path.join(weightFileDir, "EB2_10.weights.root"), # EB2_10 + path.join(weightFileDir, "EE_10.weights.root"), # EE_10 + ] + +mvaEleID_RunIIIWinter22_iso_V1_wp80_container = EleMVA_WP( + idName = "mvaEleID-RunIIIWinter22-iso-V1-wp80", mvaTag = mvaTag, + cutCategory0 = "0.99776583820026143", # EB1_5 + cutCategory1 = "0.99399710641666705", # EB2_5 + cutCategory2 = "0.97627554114737425", # EE_5 + cutCategory3 = "0.99997133733482069", # EB1_10 + cutCategory4 = "0.99991566148661426", # EB2_10 + cutCategory5 = "0.99932288865775143", # EE_10 + ) + + +mvaEleID_RunIIIWinter22_iso_V1_wp90_container = EleMVA_WP( + idName = "mvaEleID-RunIIIWinter22-iso-V1-wp90", mvaTag = mvaTag, + cutCategory0 = "0.9870981346957135", # EB1_5 + cutCategory1 = "0.95756807831082225", # EB2_5 + cutCategory2 = "0.81079745560696059", # EE_5 + cutCategory3 = "0.99981763428587134", # EB1_10 + cutCategory4 = "0.99936974968805936", # EB2_10 + cutCategory5 = "0.99293135832977431", # EE_10 + ) + + +workingPoints = dict( + wp80 = mvaEleID_RunIIIWinter22_iso_V1_wp80_container, + wp90 = mvaEleID_RunIIIWinter22_iso_V1_wp90_container +) + +mvaEleID_RunIIIWinter22_iso_V1_producer_config = cms.PSet( + mvaName = cms.string(mvaClassName), + mvaTag = cms.string(mvaTag), + nCategories = cms.int32(6), + categoryCuts = cms.vstring(*EleMVA_6CategoriesCuts), + weightFileNames = cms.vstring(*mvaWeightFiles), + variableDefinition = cms.string(mvaVariablesFileRun3) + ) + + +mvaEleID_RunIIIWinter22_iso_V1_wp80 = configureVIDMVAEleID( mvaEleID_RunIIIWinter22_iso_V1_wp80_container ) +mvaEleID_RunIIIWinter22_iso_V1_wp90 = configureVIDMVAEleID( mvaEleID_RunIIIWinter22_iso_V1_wp90_container ) + + +mvaEleID_RunIIIWinter22_iso_V1_wp80.isPOGApproved = cms.untracked.bool(True) +mvaEleID_RunIIIWinter22_iso_V1_wp90.isPOGApproved = cms.untracked.bool(True) diff --git a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_noIso_V1_cff.py b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_noIso_V1_cff.py new file mode 100644 index 0000000000000..63635e232ca04 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_noIso_V1_cff.py @@ -0,0 +1,62 @@ +import FWCore.ParameterSet.Config as cms +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_tools import * +from os import path + +#Egamma presentation on this ID for Run3: +#https://indico.cern.ch/event/1220628/contributions/5134878/attachments/2546114/4384580/Run%203%20Electron%20MVA%20based%20ID%20training.pdf + +mvaTag = "RunIIIWinter22NoIsoV1" + +weightFileDir = "RecoEgamma/ElectronIdentification/data/MVAWeightFiles/Winter22NoIsoV1" + + +mvaWeightFiles = cms.vstring( + path.join(weightFileDir, "EB1_5.weights.root"), # EB1_5 + path.join(weightFileDir, "EB2_5.weights.root"), # EB2_5 + path.join(weightFileDir, "EE_5.weights.root"), # EE_5 + path.join(weightFileDir, "EB1_10.weights.root"), # EB1_10 + path.join(weightFileDir, "EB2_10.weights.root"), # EB2_10 + path.join(weightFileDir, "EE_10.weights.root"), # EE_10 + ) + +mvaEleID_RunIIIWinter22_noIso_V1_wp80_container = EleMVA_WP( + idName = "mvaEleID-RunIIIWinter22-noIso-V1-wp80", mvaTag = mvaTag, + cutCategory0 = "0.99776583820026143", # EB1_5 + cutCategory1 = "0.99399710641666705", # EB2_5 + cutCategory2 = "0.89762967983679642", # EE_5 + cutCategory3 = "0.99997133733482069", # EB1_10 + cutCategory4 = "0.99991566148661426", # EB2_10 + cutCategory5 = "0.99712023523348758", # EE_10 + ) + + + +mvaEleID_RunIIIWinter22_noIso_V1_wp90_container = EleMVA_WP( + idName = "mvaEleID-RunIIIWinter22-noIso-V1-wp90", mvaTag = mvaTag, + cutCategory0 = "0.9870981346957135", # EB1_5 + cutCategory1 = "0.95756807831082225", # EB2_5 + cutCategory2 = "0.4195020250389494", # EE_5 + cutCategory3 = "0.99981763428587134", # EB1_10 + cutCategory4 = "0.99936974968805936", # EB2_10 + cutCategory5 = "0.96553633326857091", # EE_10 + ) + +workingPoints = dict( + wp80 = mvaEleID_RunIIIWinter22_noIso_V1_wp80_container, + wp90 = mvaEleID_RunIIIWinter22_noIso_V1_wp90_container +) + +mvaEleID_RunIIIWinter22_noIso_V1_producer_config = cms.PSet( + mvaName = cms.string(mvaClassName), + mvaTag = cms.string(mvaTag), + nCategories = cms.int32(6), + categoryCuts = cms.vstring(*EleMVA_6CategoriesCuts), + weightFileNames = mvaWeightFiles, + variableDefinition = cms.string(mvaVariablesFileRun3) + ) + +mvaEleID_RunIIIWinter22_noIso_V1_wp80 = configureVIDMVAEleID( mvaEleID_RunIIIWinter22_noIso_V1_wp80_container ) +mvaEleID_RunIIIWinter22_noIso_V1_wp90 = configureVIDMVAEleID( mvaEleID_RunIIIWinter22_noIso_V1_wp90_container ) + +mvaEleID_RunIIIWinter22_noIso_V1_wp80.isPOGApproved = cms.untracked.bool(True) +mvaEleID_RunIIIWinter22_noIso_V1_wp90.isPOGApproved = cms.untracked.bool(True) diff --git a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_tools.py b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_tools.py index 7a6cd76f34757..0f82bf2165140 100644 --- a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_tools.py +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_tools.py @@ -15,6 +15,7 @@ # The files with the variable definitions mvaVariablesFile = "RecoEgamma/ElectronIdentification/data/ElectronMVAEstimatorRun2Variables.txt" +mvaVariablesFileRun3 = "RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3.txt" # ======================================= # Define some commonly used category cuts diff --git a/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py new file mode 100644 index 0000000000000..21c837a167eaf --- /dev/null +++ b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py @@ -0,0 +1,183 @@ +import FWCore.ParameterSet.Config as cms +from PhysicsTools.SelectorUtils.tools.vid_id_tools import * +from Configuration.AlCa.GlobalTag import GlobalTag + +process = cms.Process("ElectronMVANtuplizer") + +process.load("Configuration.StandardSequences.GeometryDB_cff") +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") + +process.GlobalTag = GlobalTag(process.GlobalTag, '122X_mcRun3_2021_realistic_v9', '') + +# File with the ID variables to include in the Ntuplizer +mvaVariablesFile = "RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3.txt" + +outputFile = "electron_ntuple.root" + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring( + #'/store/mc/Run3Winter22MiniAOD/DYJetsToLL_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/MINIAODSIM/122X_mcRun3_2021_realistic_v9_ext1-v1/2830000/009dec29-88c9-4721-bb6f-135a7005e281.root', + '/store/mc/Run3Winter22MiniAOD/DYJetsToLL_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/MINIAODSIM/122X_mcRun3_2021_realistic_v9_ext2-v2/40000/004dd361-f49c-43fe-8344-f18aa036e286.root' + ) +) + +useAOD = False + +from PhysicsTools.SelectorUtils.tools.vid_id_tools import * +# turn on VID producer, indicate data format to be +# DataFormat.AOD or DataFormat.MiniAOD, as appropriate +if useAOD == True : + dataFormat = DataFormat.AOD + input_tags = dict( + src = cms.InputTag("gedGsfElectrons"), + vertices = cms.InputTag("offlinePrimaryVertices"), + pileup = cms.InputTag("addPileupInfo"), + genParticles = cms.InputTag("genParticles"), + ebReducedRecHitCollection = cms.InputTag("reducedEcalRecHitsEB"), + eeReducedRecHitCollection = cms.InputTag("reducedEcalRecHitsEE"), + ) +else : + dataFormat = DataFormat.MiniAOD + input_tags = dict() + +switchOnVIDElectronIdProducer(process, dataFormat) + +# define which IDs we want to produce +my_id_modules = [ + #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff', + #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_HZZ_V1_cff', + #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V1_cff', + #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff', + ] + +#add them to the VID producer +for idmod in my_id_modules: + setupAllVIDIdsInModule(process,idmod,setupVIDElectronSelection) + +process.ntuplizer = cms.EDAnalyzer('ElectronMVANtuplizer', + # + eleMVAs = cms.vstring( + #"egmGsfElectronIDs:mvaEleID-Spring16-GeneralPurpose-V1-wp80", + #"egmGsfElectronIDs:mvaEleID-Spring16-GeneralPurpose-V1-wp90", + #"egmGsfElectronIDs:mvaEleID-Spring16-HZZ-V1-wpLoose", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp80", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wpLoose", + "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-iso-V1-wp80", + "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-iso-V1-wp90", + "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp80", + "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp90", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp90", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpHZZ", + # "egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpLoose", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp90", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wp90", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wp80", + #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wpLoose", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V1-wp90", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V1-wp80", + #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V1-wpLoose", + ), + eleMVALabels = cms.vstring( + #"Spring16GPV1wp80", + #"Spring16GPV1wp90", + #"Spring16HZZV1wpLoose", + #"Fall17noIsoV2wp80", + #"Fall17noIsoV2wpLoose", + #"Fall17noIsoV2wp90", + #"Fall17isoV2wpHZZ", + #"Fall17isoV2wp80", + #"Fall17isoV2wpLoose", + #"Fall17isoV2wp90", + #"Fall17noIsoV1wp90", + #"Fall17noIsoV1wp80", + #"Fall17noIsoV1wpLoose", + #"Fall17isoV1wp90", + #"Fall17isoV1wp80", + #"Fall17isoV1wpLoose", + "RunIIIWinter22isoV1wp80", + "RunIIIWinter22isoV1wp90", + "RunIIIWinter22noIsoV1wp80", + "RunIIIWinter22noIsoV1wp90", + ), + eleMVAValMaps = cms.vstring( + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16GeneralPurposeV1Values", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16GeneralPurposeV1RawValues", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16HZZV1Values", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16HZZV1RawValues", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2Values", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2RawValues", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2Values", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2RawValues", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV1Values", + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV1Values", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1Values", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1RawValues", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Values", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1RawValues", + ), + eleMVAValMapLabels = cms.vstring( + #"Spring16GPV1Vals", + #"Spring16GPV1RawVals", + #"Spring16HZZV1Vals", + #"Spring16HZZV1RawVals", + #"Fall17NoIsoV2Vals", + #"Fall17NoIsoV2RawVals", + #"Fall17IsoV2Vals", + #"Fall17IsoV2RawVals", + #"Fall17IsoV1Vals", + "RunIIIWinter22NoIsoV1Vals", + "RunIIIWinter22NoIsoV1RawVals", + "RunIIIWinter22IsoV1Vals", + "RunIIIWinter22IsoV1RawVals", + ), + eleMVACats = cms.vstring( + #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV1Categories", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Categories", + ), + eleMVACatLabels = cms.vstring( + "EleMVACats", + ), + # + variableDefinition = cms.string(mvaVariablesFile), + ptThreshold = cms.double(5.0), + # + doEnergyMatrix = cms.bool(False), # disabled by default due to large size + energyMatrixSize = cms.int32(2), # corresponding to 5x5 + # + **input_tags + ) +""" +The energy matrix is for ecal driven electrons the n x n of raw +rec-hit energies around the seed crystal. + +The size of the energy matrix is controlled with the parameter +"energyMatrixSize", which controlls the extension of crystals in each +direction away from the seed, in other words n = 2 * energyMatrixSize + 1. + +The energy matrix gets saved as a vector but you can easily unroll it +to a two dimensional numpy array later, for example like that: + +>>> import uproot +>>> import numpy as np +>>> import matplotlib.pyplot as plt + +>>> tree = uproot.open("electron_ntuple.root")["ntuplizer/tree"] +>>> n = 5 + +>>> for a in tree.array("ele_energyMatrix"): +>>> a = a.reshape((n,n)) +>>> plt.imshow(np.log10(a)) +>>> plt.colorbar() +>>> plt.show() +""" + +process.TFileService = cms.Service("TFileService", fileName = cms.string(outputFile)) + +process.p = cms.Path(process.egmGsfElectronIDSequence * process.ntuplizer)