diff --git a/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py b/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py new file mode 100644 index 0000000000000..a0de47eaf56d5 --- /dev/null +++ b/Configuration/ProcessModifiers/python/enableSonicTriton_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +enableSonicTriton = cms.Modifier() \ No newline at end of file diff --git a/Configuration/ProcessModifiers/python/photonDRN_cff.py b/Configuration/ProcessModifiers/python/photonDRN_cff.py new file mode 100644 index 0000000000000..f9db4c8461bea --- /dev/null +++ b/Configuration/ProcessModifiers/python/photonDRN_cff.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.ProcessModifiers.enableSonicTriton_cff import enableSonicTriton + +#behind-the-scenes modifier that only turns on the DRN photon regression +_photonDRN = cms.Modifier() + +#modifier to enable DRN energy regression for photons +#requires also having enableSonicTriton +photonDRN = cms.ModifierChain(_photonDRN, enableSonicTriton) \ No newline at end of file diff --git a/Configuration/ProcessModifiers/python/pp_on_AA_cff.py b/Configuration/ProcessModifiers/python/pp_on_AA_cff.py new file mode 100644 index 0000000000000..b1f9d315fc955 --- /dev/null +++ b/Configuration/ProcessModifiers/python/pp_on_AA_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +pp_on_AA = cms.Modifier() \ No newline at end of file diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index aa5e3f0a65d21..988acaa2e63b5 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -35,7 +35,8 @@ run2_miniAOD_80XLegacy.toModify( slimmedElectronsUpdated, computeMiniIso = True ) #modify the past eras for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94X2016,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_102Xv1: - modifier.toModify(slimmedElectronsUpdated, src = cms.InputTag("slimmedElectronsTo106X")) + # modifier.toModify(slimmedElectronsUpdated, src = cms.InputTag("slimmedElectronsTo106X")) + modifier.toModify(slimmedElectronsUpdated, src = "slimmedElectronsTo106X") electron_id_modules_WorkingPoints_nanoAOD = cms.PSet( @@ -47,6 +48,10 @@ 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V1_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V2_cff', + '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_Winter22_HZZ_V1_cff', ), WorkingPoints = cms.vstring( "egmGsfElectronIDs:cutBasedElectronID-Fall17-94X-V2-veto", @@ -157,33 +162,36 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): #the second part is introduced to protect v8 since (run2_nanoAOD_106Xv1 & ~run2_nanoAOD_devel) is the v8 condition (run2_egamma_2016 & tracker_apv_vfp30_2016 & ~(run2_nanoAOD_106Xv1 & ~run2_nanoAOD_devel)).toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_preVFP_RunFineEtaR9Gain") + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_preVFP_RunFineEtaR9Gain") + correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_preVFP_RunFineEtaR9Gain" ) (run2_egamma_2016 & ~tracker_apv_vfp30_2016 & ~(run2_nanoAOD_106Xv1 & ~run2_nanoAOD_devel)).toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_postVFP_RunFineEtaR9Gain") + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_postVFP_RunFineEtaR9Gain") + correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2016_UltraLegacy_postVFP_RunFineEtaR9Gain" ) run2_egamma_2017.toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_24Feb2020_runEtaR9Gain_v2") -) + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_24Feb2020_runEtaR9Gain_v2") + correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_24Feb2020_runEtaR9Gain_v2") run2_egamma_2018.toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_29Sep2020_RunFineEtaR9Gain") -) + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_29Sep2020_RunFineEtaR9Gain") + correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_29Sep2020_RunFineEtaR9Gain") run2_miniAOD_80XLegacy.toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Legacy2016_07Aug2017_FineEtaR9_v3_ele_unc") + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Legacy2016_07Aug2017_FineEtaR9_v3_ele_unc") + correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Legacy2016_07Aug2017_FineEtaR9_v3_ele_unc" ) for modifier in run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2: modifier.toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_17Nov2017_v1_ele_unc") - ) + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_17Nov2017_v1_ele_unc") +correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_17Nov2017_v1_ele_unc" ) run2_nanoAOD_102Xv1.toModify(calibratedPatElectronsNano, - correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2") -) + # correctionFile = cms.string("EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2") +correctionFile = "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2") ##############################end calibratedPatElectronsNano############################ slimmedElectronsWithUserData = cms.EDProducer("PATElectronUserDataEmbedder", @@ -193,6 +201,9 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaFall17V1noIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV1Values"), mvaFall17V2Iso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2Values"), mvaFall17V2noIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2Values"), + # mvaIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1Values"), + # mvaNoIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Values"), + mvaHZZIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1Values"), miniIsoChg = cms.InputTag("isoForEle:miniIsoChg"), miniIsoAll = cms.InputTag("isoForEle:miniIsoAll"), PFIsoChg = cms.InputTag("isoForEle:PFIsoChg"), @@ -217,14 +228,19 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaFall17V1noIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wp90"), mvaFall17V1noIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wp80"), mvaFall17V1noIso_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V1-wpLoose"), - + # mvaIso_WPHZZ = cms.InputTag("egmGsfElectronIDs:mvaEleID-Winter22-HZZ-V1"), mvaFall17V2Iso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp90"), mvaFall17V2Iso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80"), mvaFall17V2Iso_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpLoose"), mvaFall17V2noIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp90"), mvaFall17V2noIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp80"), mvaFall17V2noIso_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wpLoose"), - + 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"), cutbasedID_Fall17_V1_veto = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Fall17-94X-V1-veto"), cutbasedID_Fall17_V1_loose = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Fall17-94X-V1-loose"), cutbasedID_Fall17_V1_medium = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Fall17-94X-V1-medium"), @@ -244,7 +260,18 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): jetForLepJetVar = cms.InputTag("ptRatioRelForEle:jetForLepJetVar") # warning: Ptr is null if no match is found ), ) - +(run2_egamma_2016).toModify( + slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer16ULIdIsoValues" +) +(run2_egamma_2017).toModify( + slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer17ULIdIsoValues" +) +(run2_egamma_2018).toModify( + slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer18ULIdIsoValues" +) ###Not to update with S+S vars as they already exist for run2_nanoAOD_94X2016 era run2_nanoAOD_94X2016.toModify(slimmedElectronsWithUserData.userFloats, ecalTrkEnergyErrPostCorrNew = None, @@ -301,7 +328,15 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): VIDNestedWPBitmapSpring15 = cms.InputTag("bitmapVIDForEleSpring15"), VIDNestedWPBitmapSum16 = cms.InputTag("bitmapVIDForEleSum16"), ) - +(~run2_nanoAOD_preUL & run2_egamma_2016).toModify(slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer16ULIdIsoValues", +) +(~run2_nanoAOD_preUL & run2_egamma_2017).toModify(slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer17ULIdIsoValues" , +) +(~run2_nanoAOD_preUL & run2_egamma_2018).toModify(slimmedElectronsWithUserData.userFloats, + mvaHZZIso = "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer18ULIdIsoValues", +) finalElectrons = cms.EDFilter("PATElectronRefSelector", src = cms.InputTag("slimmedElectronsWithUserData"), cut = cms.string("pt > 5 ") @@ -325,6 +360,8 @@ 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_Fall17V2')"), + # LepGood_mvaFall17V2noIso = cms.string("userFloat('mvaNoIso')"), LepGood_mvaFall17V2noIso = cms.string("userFloat('mvaFall17V2noIso')"), ) ) @@ -356,15 +393,24 @@ 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), - mvaFall17V2Iso = Var("userFloat('mvaFall17V2Iso')",float,doc="MVA Iso ID V2 score"), + # mvaFall17V2Iso = Var("userFloat('mvaFall17V2Iso')",float,doc="MVA Iso ID V2 score"), mvaFall17V2Iso_WP80 = Var("userInt('mvaFall17V2Iso_WP80')",bool,doc="MVA Iso ID V2 WP80"), mvaFall17V2Iso_WP90 = Var("userInt('mvaFall17V2Iso_WP90')",bool,doc="MVA Iso ID V2 WP90"), mvaFall17V2Iso_WPL = Var("userInt('mvaFall17V2Iso_WPL')",bool,doc="MVA Iso ID V2 loose WP"), - mvaFall17V2noIso = Var("userFloat('mvaFall17V2noIso')",float,doc="MVA noIso ID V2 score"), + # mvaFall17V2noIso = Var("userFloat('mvaFall17V2noIso')",float,doc="MVA noIso ID V2 score"), mvaFall17V2noIso_WP80 = Var("userInt('mvaFall17V2noIso_WP80')",bool,doc="MVA noIso ID V2 WP80"), mvaFall17V2noIso_WP90 = Var("userInt('mvaFall17V2noIso_WP90')",bool,doc="MVA noIso ID V2 WP90"), mvaFall17V2noIso_WPL = Var("userInt('mvaFall17V2noIso_WPL')",bool,doc="MVA noIso ID V2 loose WP"), - + # 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"), + mvaHZZIso = Var("userFloat('mvaHZZIso')", float,doc="HZZ MVA Iso ID score"), + cutBased = Var("userInt('cutbasedID_Fall17_V2_veto')+userInt('cutbasedID_Fall17_V2_loose')+userInt('cutbasedID_Fall17_V2_medium')+userInt('cutbasedID_Fall17_V2_tight')",int,doc="cut-based ID Fall17 V2 (0:fail, 1:veto, 2:loose, 3:medium, 4:tight)"), vidNestedWPBitmap = Var("userInt('VIDNestedWPBitmap')",int,doc=_bitmapVIDForEle_docstring), vidNestedWPBitmapHEEP = Var("userInt('VIDNestedWPBitmapHEEP')",int,doc=_bitmapVIDForEleHEEP_docstring), diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 26829a00419e7..b667cf94feafa 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -84,14 +84,24 @@ NoPlot('mass'), Plot1D('miniPFRelIso_all', 'miniPFRelIso_all', 20, 0, 1, 'mini PF relative isolation, total (with scaled rho*EA PU corrections)'), Plot1D('miniPFRelIso_chg', 'miniPFRelIso_chg', 20, 0, 1, 'mini PF relative isolation, charged component'), - Plot1D('mvaFall17V2Iso', 'mvaFall17V2Iso', 20, -1, 1, 'MVA Iso ID V2 score'), + # Plot1D('mvaFall17V2Iso', 'mvaFall17V2Iso', 20, -1, 1, 'MVA Iso ID V2 score'), Plot1D('mvaFall17V2Iso_WP80', 'mvaFall17V2Iso_WP80', 2, -0.5, 1.5, 'MVA Iso ID V2 WP80'), Plot1D('mvaFall17V2Iso_WP90', 'mvaFall17V2Iso_WP90', 2, -0.5, 1.5, 'MVA Iso ID V2 WP90'), Plot1D('mvaFall17V2Iso_WPL', 'mvaFall17V2Iso_WPL', 2, -0.5, 1.5, 'MVA Iso ID V2 loose WP'), - Plot1D('mvaFall17V2noIso', 'mvaFall17V2noIso', 20, -1, 1, 'MVA noIso ID V2 score'), + # Plot1D('mvaFall17V2noIso', 'mvaFall17V2noIso', 20, -1, 1, 'MVA noIso ID V2 score'), Plot1D('mvaFall17V2noIso_WP80', 'mvaFall17V2noIso_WP80', 2, -0.5, 1.5, 'MVA noIso ID V2 WP80'), Plot1D('mvaFall17V2noIso_WP90', 'mvaFall17V2noIso_WP90', 2, -0.5, 1.5, 'MVA noIso ID V2 WP90'), Plot1D('mvaFall17V2noIso_WPL', 'mvaFall17V2noIso_WPL', 2, -0.5, 1.5, 'MVA noIso ID V2 loose WP'), + 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('mvaHZZIso', 'mvaHZZIso', 20, -1, 1, 'HZZ MVA Iso ID score'), + Plot1D('mvaIso_WPHZZ', 'mvaIso_WPHZZ', 2, -0.5, 1.5, 'MVA Iso ID WPHZZ, Winter22V1'), 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('pfRelIso03_all', 'pfRelIso03_all', 20, 0, 2, 'PF relative isolation dR=0.3, total (with rho*EA PU corrections)'), @@ -610,6 +620,7 @@ NoPlot('jetIdx'), NoPlot('mass'), Plot1D('mvaID', 'mvaID', 20, -1, 1, 'MVA ID score'), + Plot1D('mvaID_modified', 'mvaID_modified', 20, -1, 1, 'MVA ID score, modified'), Plot1D('mvaID_Fall17V1p1', 'mvaID_Fall17V1p1', 20, -1, 1, 'MVA ID score, Fall17V1p1'), Plot1D('mvaID_WP80', 'mvaID_WP80', 2, -0.5, 1.5, 'MVA ID WP80'), Plot1D('mvaID_WP90', 'mvaID_WP90', 2, -0.5, 1.5, 'MVA ID WP90'), diff --git a/PhysicsTools/NanoAOD/python/nano_eras_cff.py b/PhysicsTools/NanoAOD/python/nano_eras_cff.py index 236ac4c99ff4b..03e6a35973426 100644 --- a/PhysicsTools/NanoAOD/python/nano_eras_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_eras_cff.py @@ -27,3 +27,9 @@ from Configuration.Eras.Modifier_run2_miniAOD_devel_cff import run2_miniAOD_devel from Configuration.Eras.Modifier_tracker_apv_vfp30_2016_cff import tracker_apv_vfp30_2016 +run2_nanoAOD_ANY = ( + run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 +) +run2_nanoAOD_preUL = ( + run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 +) \ No newline at end of file diff --git a/PhysicsTools/NanoAOD/python/photons_cff.py b/PhysicsTools/NanoAOD/python/photons_cff.py index 5fea7496ffc2b..7f90b7a55317d 100644 --- a/PhysicsTools/NanoAOD/python/photons_cff.py +++ b/PhysicsTools/NanoAOD/python/photons_cff.py @@ -114,6 +114,7 @@ def make_bitmapVID_docstring(id_modules_working_points_pset): src = cms.InputTag("slimmedPhotons"), userFloats = cms.PSet( mvaID = cms.InputTag("photonMVAValueMapProducer:PhotonMVAEstimatorRunIIFall17v2Values"), + mvaID_modified = cms.InputTag("photonMVAValueMapProducer:PhotonMVAEstimatorRunIIFall17v2modifiedValues"), mvaID_Fall17V1p1 = cms.InputTag("photonMVAValueMapProducer:PhotonMVAEstimatorRunIIFall17v1p1Values"), mvaID_Spring16nonTrigV1 = cms.InputTag("photonMVAValueMapProducer:PhotonMVAEstimatorRun2Spring16NonTrigV1Values"), PFIsoChg = cms.InputTag("isoForPho:PFIsoChg"), @@ -203,6 +204,7 @@ def make_bitmapVID_docstring(id_modules_working_points_pset): electronVeto = Var("passElectronVeto()",bool,doc="pass electron veto"), pixelSeed = Var("hasPixelSeed()",bool,doc="has pixel seed"), mvaID = Var("userFloat('mvaID')",float,doc="MVA ID score, Fall17V2",precision=10), + mvaID_modified = Var("userFloat('mvaID_modified')",float,doc="MVA ID score, Fall17V2, modified",precision=10), mvaID_Fall17V1p1 = Var("userFloat('mvaID_Fall17V1p1')",float,doc="MVA ID score, Fall17V1p1",precision=10), mvaID_WP90 = Var("userInt('mvaID_WP90')",bool,doc="MVA ID WP90, Fall17V2"), mvaID_WP80 = Var("userInt('mvaID_WP80')",bool,doc="MVA ID WP80, Fall17V2"), diff --git a/RecoEgamma/EgammaTools/interface/GBRForestTools.h b/RecoEgamma/EgammaTools/interface/GBRForestTools.h new file mode 100644 index 0000000000000..8be7727d4ec9d --- /dev/null +++ b/RecoEgamma/EgammaTools/interface/GBRForestTools.h @@ -0,0 +1,35 @@ +//-------------------------------------------------------------------------------------------------- +// +// GRBForestTools +// +// Utility to read a TMVA weights file with a BDT into a GRBForest. +// +// Author: Jonas Rembser +//-------------------------------------------------------------------------------------------------- + + +#ifndef RecoEgamma_EgammaTools_GBRForestTools_h +#define RecoEgamma_EgammaTools_GBRForestTools_h + +#include +#include + +#include "CondFormats/EgammaObjects/interface/GBRForest.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" + +#include "TMVA/MethodBDT.h" +#include "TMVA/Reader.h" + +#include "CommonTools/Utils/interface/TMVAZipReader.h" + +class GBRForestTools +{ + public: + GBRForestTools() {} + + static std::unique_ptr createGBRForest(const std::string &weightFile); + static std::unique_ptr createGBRForest(const edm::FileInPath &weightFile); + +}; + +#endif \ No newline at end of file diff --git a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py index 1f74dd1e3103f..92c30b127686a 100644 --- a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py +++ b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py @@ -7,12 +7,17 @@ import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V1_cff as ele_fall17_noIso_v1 import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff as ele_fall17_iso_v2 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 +# import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff as ele_Winter22_HZZ_V1 #photon mva ids import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring16_nonTrig_V1_cff as pho_spring16_nt_v1 import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Fall17_94X_V1p1_cff as pho_fall17_94X_v1p1 import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Fall17_94X_V2_cff as pho_fall17_94X_v2 +# import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Winter22_122X_V1_cff as pho_winter22_122X_v1 ele_mva_prod_name = 'electronMVAValueMapProducer' @@ -43,6 +48,10 @@ 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_RunIIIWinter22_iso_v1, + # ele_RunIIIWinter22_noIso_v1, + # ele_Winter22_HZZ_V1 ]: setup_mva(egamma_modifications[0].electron_config, @@ -53,7 +62,8 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name): for pho_mva_cff in [ pho_spring16_nt_v1, pho_fall17_94X_v1p1, - pho_fall17_94X_v2 + pho_fall17_94X_v2, + # pho_winter22_122X_v1 ]: setup_mva(egamma_modifications[0].photon_config, @@ -136,6 +146,25 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name): ) ) +# modifier for photon isolation used in heavy ions +egammaHIPhotonIsolationModifier = cms.PSet( + modifierName = cms.string('EGExtraInfoModifierFromHIPhotonIsolationValueMaps'), + electron_config = cms.PSet(), + photon_config = cms.PSet( + photonIsolationHI = cms.InputTag("reducedEgamma:photonIsolationHIProducerppGED") + ) + ) + +photonDRNModifier = cms.PSet( + modifierName = cms.string("EGRegressionModifierDRN"), + patPhotons = cms.PSet( + source = cms.InputTag("selectedPatPhotons"), + correctionsSource = cms.InputTag('patPhotonsDRN'), + energyFloat = cms.string("energyDRN"), + resFloat = cms.string("resolutionDRN") + ) + ) + def appendReducedEgammaEnergyScaleAndSmearingModifier(modifiers): modifiers.append(reducedEgammaEnergyScaleAndSmearingModifier) @@ -146,12 +175,24 @@ def appendEgamma8XLegacyAppendableModifiers (modifiers): modifiers.append(reducedEgammaEnergyScaleAndSmearingModifier) modifiers.append(egamma8XLegacyEtScaleSysModifier) +def appendEgammaHIPhotonIsolationModifier(modifiers): + modifiers.append(egammaHIPhotonIsolationModifier) + +def appendPhotonDRNModifier(modifiers): + modifiers.append(photonDRNModifier) + from Configuration.Eras.Modifier_run2_miniAOD_94XFall17_cff import run2_miniAOD_94XFall17 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL (run2_miniAOD_94XFall17 | run2_miniAOD_UL).toModify(egamma_modifications,appendReducedEgammaEnergyScaleAndSmearingModifier) - + from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy #80X doesnt have the bug which prevents GsfTracks used to match conversions so set true run2_miniAOD_80XLegacy.toModify(egamma9X105XUpdateModifier,allowGsfTrackForConvs = True) run2_miniAOD_80XLegacy.toModify(egamma_modifications,appendEgamma8XLegacyAppendableModifiers) run2_miniAOD_80XLegacy.toModify(egamma_modifications,prependEgamma8XObjectUpdateModifier) + +from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA +pp_on_AA.toModify(egamma_modifications, appendEgammaHIPhotonIsolationModifier) + +from Configuration.ProcessModifiers.photonDRN_cff import _photonDRN +_photonDRN.toModify(egamma_modifications, appendPhotonDRNModifier) \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3NonIso.txt b/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3NonIso.txt new file mode 100644 index 0000000000000..97c643a8c5511 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/data/ElectronIDVariablesRun3NonIso.txt @@ -0,0 +1,38 @@ +# File: ElectronIDVariablesRun3NonIso.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 \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/data/Run3_Winter22/effAreaElectrons_cone03_pfNeuHadronsAndPhotons_122X.txt b/RecoEgamma/ElectronIdentification/data/Run3_Winter22/effAreaElectrons_cone03_pfNeuHadronsAndPhotons_122X.txt new file mode 100644 index 0000000000000..5e75201d5960c --- /dev/null +++ b/RecoEgamma/ElectronIdentification/data/Run3_Winter22/effAreaElectrons_cone03_pfNeuHadronsAndPhotons_122X.txt @@ -0,0 +1,18 @@ +# This file contains Effective Area constants for +# computing pile-up corrections for the neutral hadron and photon +# isolation for an electron object. +# Documentation: +# +#https://indico.cern.ch/event/1204275/contributions/5064343/attachments/2529616/4353987/Electron_cutbasedID_preliminaryID.pdf +# (slides 4 to 7) +# +# The effective areas are based on 90% efficient contours +# +# |eta| min |eta| max effective area +0.000 1.000 0.1243 +1.000 1.479 0.1458 +1.479 2.000 0.0992 +2.000 2.200 0.0794 +2.200 2.300 0.0762 +2.300 2.400 0.0766 +2.400 2.500 0.1003 \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py index 269e0875d4f6d..1f4de7ecd6285 100644 --- a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py +++ b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py @@ -27,6 +27,14 @@ 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 \ import mvaEleID_Summer16UL_ID_ISO_producer_config @@ -40,18 +48,11 @@ import mvaEleID_Summer18UL_ID_ISO_producer_config mvaConfigsForEleProducer.append( mvaEleID_Summer18UL_ID_ISO_producer_config ) +# from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ +# import mvaEleID_Winter22_HZZ_V1_producer_config +# mvaConfigsForEleProducer.append( mvaEleID_Winter22_HZZ_V1_producer_config ) + electronMVAValueMapProducer = cms.EDProducer('ElectronMVAValueMapProducer', - # The module automatically detects AOD vs miniAOD, so we configure both - # - # AOD case - # - src = cms.InputTag('gedGsfElectrons'), - # - # miniAOD case - # - srcMiniAOD = cms.InputTag('slimmedElectrons',processName=cms.InputTag.skipCurrentProcess()), - # - # MVA configurations - # + src = cms.InputTag('slimmedElectrons'), mvaConfigurations = mvaConfigsForEleProducer - ) + ) \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/python/FWLite.py b/RecoEgamma/ElectronIdentification/python/FWLite.py index 9ee170a0d5241..537dcbb82e805 100644 --- a/RecoEgamma/ElectronIdentification/python/FWLite.py +++ b/RecoEgamma/ElectronIdentification/python/FWLite.py @@ -20,7 +20,7 @@ def __init__(self, name, tag, categoryCuts, xmls, variablesFile, debug=False): self._init = False self._debug = debug - def __call__(self, ele, convs, beam_spot, rho, debug=False): + def __call__(self, ele, rho, debug=False): '''returns a tuple mva_value, category ele: a reco::GsfElectron convs: conversions @@ -30,20 +30,17 @@ def __call__(self, ele, convs, beam_spot, rho, debug=False): example: - event.getByLabel(('slimmedElectrons'), ele_handle) - event.getByLabel(('fixedGridRhoFastjetAll'), rho_handle) - event.getByLabel(('reducedEgamma:reducedConversions'), conv_handle) - event.getByLabel(('offlineBeamSpot'), bs_handle) + event.getByLabel(('slimmedElectrons'), ele_handle) + event.getByLabel(('fixedGridRhoFastjetAll'), rho_handle) electrons = ele_handle.product() - convs = conv_handle.product() - beam_spot = bs_handle.product() rho = rho_handle.product() - mva, category = electron_mva_id(electron[0], convs, beam_spot, rho) + mva, category = electron_mva_id(electron[0], rho) ''' if not self._init: print('Initializing ' + self.name + self.tag) + ROOT.gInterpreter.Declare('#include "RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimatorRun2.h"') ROOT.gSystem.Load("libRecoEgammaElectronIdentification") categoryCutStrings = ROOT.vector(ROOT.string)() for x in self.categoryCuts : @@ -52,9 +49,8 @@ def __call__(self, ele, convs, beam_spot, rho, debug=False): self.tag, self.name, len(self.xmls), self.variablesFile, categoryCutStrings, self.xmls, self._debug) self._init = True - extra_vars = self.estimator.getExtraVars(ele, convs, beam_spot, rho[0]) category = ctypes.c_int(0) - mva = self.estimator.mvaValue(ele, extra_vars, category) + mva = self.estimator.mvaValue(ele, rho[0], category) return mva, category.value @@ -70,9 +66,9 @@ def __init__(self, name, tag, working_points, logistic_transform=False): def _reformat_cut_definitions(self, working_points): new_definitions = dict() - for wpname, definitions in working_points.iteritems(): + for wpname, definitions in working_points.items(): new_definitions[wpname] = dict() - for name, cut in definitions.cuts.iteritems(): + for name, cut in definitions.cuts.items(): categ_id = int(name.lstrip('cutCategory')) cut = cut.replace('pt','x') formula = ROOT.TFormula('_'.join([self.name, wpname, name]), cut) @@ -90,16 +86,22 @@ 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, mvaVariablesFileRun3NonIso, 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 \ import mvaSpring16WeightFiles_V1 as mvaSpring16HZZWeightFiles_V1 +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ + import mvaWeightFiles as mvaWinter22HZZWeightFiles_V1 from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff \ import workingPoints as mvaSpring16GP_V1_workingPoints @@ -109,10 +111,20 @@ 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 +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ + import workingPoints as Winter22_HZZ_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, mvaVariablesFileRun3NonIso), "Fall17IsoV2" : ElectronMVAID("ElectronMVAEstimatorRun2","Fall17IsoV2", EleMVA_6CategoriesCuts, Fall17_iso_V2_weightFiles, mvaVariablesFile), "Fall17NoIsoV2" : ElectronMVAID("ElectronMVAEstimatorRun2","Fall17NoIsoV2", @@ -121,9 +133,15 @@ def passed(self, ele, mva, category, wp): EleMVA_6CategoriesCuts, mvaSpring16HZZWeightFiles_V1, mvaVariablesFile), "Spring16GPV1" : ElectronMVAID("ElectronMVAEstimatorRun2","Spring16GeneralPurposeV1", EleMVA_3CategoriesCuts, mvaSpring16GPWeightFiles_V1, mvaVariablesFile), + "Winter22HZZV1" : ElectronMVAID("ElectronMVAEstimatorRun2","Winter22HZZV1", + EleMVA_6CategoriesCuts, mvaWinter22HZZWeightFiles_V1, mvaVariablesFileRun3), } 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", @@ -132,5 +150,7 @@ def passed(self, ele, mva, category, wp): mvaSpring16HZZ_V1_workingPoints, logistic_transform=True), "Spring16GPV1" : WorkingPoints("ElectronMVAEstimatorRun2","Spring16GeneralPurposeV1", mvaSpring16GP_V1_workingPoints, logistic_transform=True), + "Winter22HZZV1" : WorkingPoints("ElectronMVAEstimatorRun2","Winter22HZZV1", + Winter22_HZZ_V1_workingPoints), - } + } \ No newline at end of file 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..6500f7a67dc7b --- /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) \ No newline at end of file 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..05bf34eb3ed50 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_RunIIIWinter22_noIso_V1_cff.py @@ -0,0 +1,61 @@ +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.9806578295496566", # EB1_5 + cutCategory1 = "0.9413641904670094", # EB2_5 + cutCategory2 = "0.89762967983679642", # EE_5 + cutCategory3 = "0.9997826058686308", # EB1_10 + cutCategory4 = "0.9993177946586951", # 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.8774784815007495", # EB1_5 + cutCategory1 = "0.6755302215938275", # EB2_5 + cutCategory2 = "0.4195020250389494", # EE_5 + cutCategory3 = "0.9981164732135666", # EB1_10 + cutCategory4 = "0.9926206339419237", # 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(mvaVariablesFileRun3NonIso) + ) + +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) \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py new file mode 100644 index 0000000000000..cf008c2e4cf53 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py @@ -0,0 +1,49 @@ +import FWCore.ParameterSet.Config as cms +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_tools import * +from os import path + +mvaTag = "Winter22HZZV1" + +weightFileDir = "RecoEgamma/ElectronIdentification/data/MVAWeightFiles/Winter22HZZV1" + +mvaWeightFiles = cms.vstring( + path.join(weightFileDir, "EB1_5.weights.xml.gz"), # EB1_5 + path.join(weightFileDir, "EB2_5.weights.xml.gz"), # EB2_5 + path.join(weightFileDir, "EE_5.weights.xml.gz"), # EE_5 + path.join(weightFileDir, "EB1_10.weights.xml.gz"), # EB1_10 + path.join(weightFileDir, "EB2_10.weights.xml.gz"), # EB2_10 + path.join(weightFileDir, "EE_10.weights.xml.gz"), # EE_10 + ) + +categoryCuts = cms.vstring( + "pt < 10. && abs(superCluster.eta) < 0.800", + "pt < 10. && abs(superCluster.eta) >= 0.800 && abs(superCluster.eta) < 1.479", + "pt < 10. && abs(superCluster.eta) >= 1.479", + "pt >= 10. && abs(superCluster.eta) < 0.800", + "pt >= 10. && abs(superCluster.eta) >= 0.800 && abs(superCluster.eta) < 1.479", + "pt >= 10. && abs(superCluster.eta) >= 1.479", +) + +mvaEleID_Winter22_HZZ_V1_container = EleMVARaw_WP( + idName = "mvaEleID-Winter22-HZZ-V1", mvaTag = mvaTag, + cutCategory0 = "1.633973689084034", # EB1_5 + cutCategory1 = "1.5499076306249353", # EB2_5 + cutCategory2 = "2.0629564440753247", # EE_5 + cutCategory3 = "0.3685228146685872", # EB1_10 + cutCategory4 = "0.2662407818935475", # EB2_10 + cutCategory5 = "-0.5444837363886459", # EE_10 + ) + + +mvaEleID_Winter22_HZZ_V1_producer_config = cms.PSet( + mvaName = cms.string(mvaClassName), + mvaTag = cms.string(mvaTag), + nCategories = cms.int32(6), + categoryCuts = categoryCuts, + weightFileNames = mvaWeightFiles, + variableDefinition = cms.string(mvaVariablesFileRun3) + ) + +mvaEleID_Winter22_HZZ_V1 = configureVIDMVAEleID( mvaEleID_Winter22_HZZ_V1_container ) + +mvaEleID_Winter22_HZZ_V1.isPOGApproved = cms.untracked.bool(False) \ No newline at end of file diff --git a/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py new file mode 100644 index 0000000000000..647327c4c4d27 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py @@ -0,0 +1,190 @@ +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', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_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-Winter22-HZZ-V1", + #"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", + "Winter22isoV1wpHZZ", + ), + 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", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1Values", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1RawValues", + ), + eleMVAValMapLabels = cms.vstring( + #"Spring16GPV1Vals", + #"Spring16GPV1RawVals", + #"Spring16HZZV1Vals", + #"Spring16HZZV1RawVals", + #"Fall17NoIsoV2Vals", + #"Fall17NoIsoV2RawVals", + #"Fall17IsoV2Vals", + #"Fall17IsoV2RawVals", + #"Fall17IsoV1Vals", + "RunIIIWinter22NoIsoV1Vals", + "RunIIIWinter22NoIsoV1RawVals", + "RunIIIWinter22IsoV1Vals", + "RunIIIWinter22IsoV1RawVals", + "Winter22HZZV1Vals", + "Winter22HZZV1RawVals", + ), + 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) \ No newline at end of file diff --git a/RecoEgamma/PhotonIdentification/data/PhotonMVAEstimatorRun2VariablesFall17V1p1_modified.txt b/RecoEgamma/PhotonIdentification/data/PhotonMVAEstimatorRun2VariablesFall17V1p1_modified.txt new file mode 100644 index 0000000000000..bed6e2314f9b1 --- /dev/null +++ b/RecoEgamma/PhotonIdentification/data/PhotonMVAEstimatorRun2VariablesFall17V1p1_modified.txt @@ -0,0 +1,28 @@ +# +# File: PhotonMVAEstimatorRun2VariablesFall17V1p1.txt +# +# This file is to be read by the MVAVariableManager class. Lists all the +# variables which appear in the xml files for the MVA based Photon 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 photon 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. +# + +SCRawE superCluster.rawEnergy None None +r9 r9 None None +sigmaIetaIeta full5x5_showerShapeVariables.sigmaIetaIeta None None +etaWidth superCluster.etaWidth None None +phiWidth superCluster.phiWidth None None +covIEtaIPhi full5x5_showerShapeVariables.sigmaIetaIphi None None +s4 full5x5_showerShapeVariables.e2x2/full5x5_showerShapeVariables.e5x5 None None +scEta superCluster.eta None None +rho fixedGridRhoAll None None +esEffSigmaRR full5x5_showerShapeVariables.effSigmaRR None None +esEnergyOverRawE superCluster.preshowerEnergy/superCluster.rawEnergy None None +phoIso03 photonIso*0 None None +chgIsoWrtChosenVtx chargedHadronIso None None +chgIsoWrtWorstVtx chargedHadronWorstVtxIso None None diff --git a/RecoEgamma/PhotonIdentification/python/Identification/mvaPhotonID_Fall17_94X_V2_cff.py b/RecoEgamma/PhotonIdentification/python/Identification/mvaPhotonID_Fall17_94X_V2_cff.py index 31f963ffd16b5..d7f9179bed1c2 100644 --- a/RecoEgamma/PhotonIdentification/python/Identification/mvaPhotonID_Fall17_94X_V2_cff.py +++ b/RecoEgamma/PhotonIdentification/python/Identification/mvaPhotonID_Fall17_94X_V2_cff.py @@ -9,7 +9,9 @@ # https://indico.cern.ch/event/697079/contributions/2968123/attachments/1632966/2604131/PhotonID_EGM_13.04.2018.pdf # mvaTag = "RunIIFall17v2" +modifiedmvaTag = "RunIIFall17v2modified" mvaVariablesFile = "RecoEgamma/PhotonIdentification/data/PhotonMVAEstimatorRun2VariablesFall17V1p1.txt" +modified_mvaVariablesFile = "RecoEgamma/PhotonIdentification/data/PhotonMVAEstimatorRun2VariablesFall17V1p1_modified.txt" mvaWeightFiles = [ path.join(weightFileBaseDir, "Fall17/EB_V2.weights.xml.gz"), path.join(weightFileBaseDir, "Fall17/EE_V2.weights.xml.gz"), @@ -39,6 +41,14 @@ nCategories = cms.int32(2), categoryCuts = category_cuts) mvaPhoID_RunIIFall17_v2_producer_config = configs["producer_config"] +modified_configs = configureFullVIDMVAPhoID(mvaTag=modifiedmvaTag, + variablesFile=modified_mvaVariablesFile, + weightFiles=mvaWeightFiles, + wpConfig=wpConfig, + # Category parameters + nCategories = cms.int32(2), + categoryCuts = category_cuts) +modifiedmvaPhoID_RunIIFall17_v2_producer_config = modified_configs["producer_config"] mvaPhoID_RunIIFall17_v2_wp90 = configs["VID_config"]["mvaPhoID-RunIIFall17-v2-wp90"] mvaPhoID_RunIIFall17_v2_wp80 = configs["VID_config"]["mvaPhoID-RunIIFall17-v2-wp80"] # The MD5 sum numbers below reflect the exact set of cut variables diff --git a/RecoEgamma/PhotonIdentification/python/PhotonMVAValueMapProducer_cfi.py b/RecoEgamma/PhotonIdentification/python/PhotonMVAValueMapProducer_cfi.py index 255a1a29dc41d..2a1f2f9f39c9c 100644 --- a/RecoEgamma/PhotonIdentification/python/PhotonMVAValueMapProducer_cfi.py +++ b/RecoEgamma/PhotonIdentification/python/PhotonMVAValueMapProducer_cfi.py @@ -13,7 +13,9 @@ from RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Fall17_94X_V2_cff import * mvaConfigsForPhoProducer.append( mvaPhoID_RunIIFall17_v2_producer_config ) - +mvaConfigsForPhoProducer.append( modifiedmvaPhoID_RunIIFall17_v2_producer_config ) +print("Registering MVA Photon ID for Fall17") +print(mvaPhoID_RunIIFall17_v2_producer_config) photonMVAValueMapProducer = cms.EDProducer('PhotonMVAValueMapProducer', # The module automatically detects AOD vs miniAOD, so we configure both # @@ -29,3 +31,6 @@ # mvaConfigurations = mvaConfigsForPhoProducer ) + + +print("we are here in PhotonMVAValueMapProducer_cfi.py") \ No newline at end of file