Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EGM IDs for MiniAOD Reprocessing (76X) #10619

Merged
merged 31 commits into from
Aug 15, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2086e1e
New MVA IDs from Rong-Shyang for Spring15: V1 for 50ns and V0 for 25ns
ikrav Jul 20, 2015
e996ba4
Added the mvaTag field to the MVA estimator, plus dependencies, to di…
ikrav Jul 20, 2015
f1a120b
Added the new mvaTag field to the most recent MVA configuratoins
ikrav Jul 20, 2015
2da2fc0
Create effAreaNeutralHadrons_cone03_pf_50ns.txt
skyriacoCMS Jul 29, 2015
741e2da
Create effAreaPhotons_cone03_pfPhotons_50ns.txt
skyriacoCMS Jul 29, 2015
9466895
Create effAreaPhotons_cone03_pfChargedHadrons_50ns.txt
skyriacoCMS Jul 29, 2015
1924ecc
Rename effAreaNeutralHadrons_cone03_pf_50ns.txt to effAreaPhotons_con…
skyriacoCMS Jul 29, 2015
1a8a545
Create cutBasedPhotonID_Spring15_50ns_V1_cff.py
skyriacoCMS Jul 29, 2015
79d0aff
New effective areas for electrons for Spring15 25ns abd 50ns
ikrav Jul 31, 2015
e95543c
The implementation of the new 25ns non-triggering MVA tuned by P.Piga…
ikrav Jul 31, 2015
f816829
Renamed the two files of the new Spring15 electron non-trig MVA into …
ikrav Jul 31, 2015
cd64007
Weights and new python configuration for the new non-trig 25ns Spring…
ikrav Jul 31, 2015
4dc31fa
A few fixes
ikrav Aug 1, 2015
49a174f
a change to the Reader options
ikrav Aug 1, 2015
a73b3f9
update Spring15NonTrig for electrons to threadsafe base class
lgray Aug 4, 2015
60422e0
Spring15 50ns ID from 31072015 presentation (Rami)
lgray Aug 4, 2015
f9241dc
Set Spring15_25ns MVA to actual values for WP90 from P. Pigard
lgray Aug 4, 2015
198e4fe
add 50ns mva Photon ID V2
lgray Aug 4, 2015
be687e5
Fix implementation of @skyriacoCMS photon ID, fix bug in lower level …
lgray Aug 4, 2015
9570aa1
update MiniAOD tools to the latest EGM-blessed IDs
lgray Aug 4, 2015
4c5b513
invalidate deprecated IDs
lgray Aug 4, 2015
f47d04a
fix typos in Spring15 ID cutbased, validation now checks out
lgray Aug 4, 2015
a4f6e1d
remove HEEP51 from MiniAOD and deprecate it
lgray Aug 4, 2015
ae12245
turn off embedding of vid::CutFlowResult in MiniAOD pat candidates
lgray Aug 5, 2015
00d738d
EGM Object Modifiers for MiniAOD reprocessing
lgray Aug 6, 2015
9a476f2
add wp80 to Spring15 electron mva ID
lgray Aug 6, 2015
c5e0dba
add in embedding control from 74X to 75X to vid tools
lgray Aug 6, 2015
474e386
correct the ID MD5 hashes
lgray Aug 12, 2015
fd940bb
use constants instead of magic numbers eta cut
lgray Aug 12, 2015
6a6336a
fix semicolon;
lgray Aug 13, 2015
6b8b134
reduce copy/pasta in IsolationModifier
lgray Aug 13, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions DataFormats/EgammaCandidates/interface/Photon.h
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,9 @@ namespace reco {
float sumPhotonEtHighThreshold() const {return pfIsolation_.sumPhotonEtHighThreshold;}
float sumPUPt() const {return pfIsolation_.sumPUPt;}

/// Get Particle Flow Isolation variables block
const PflowIsolationVariables& getPflowIsolationVariables() const { return pfIsolation_; }

/// Set Particle Flow Isolation variables
void setPflowIsolationVariables ( const PflowIsolationVariables& pfisol ) { pfIsolation_ = pfisol;}

Expand Down
15 changes: 8 additions & 7 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,21 +176,22 @@ def miniAOD_customizeCommon(process):

#VID Electron IDs
electron_ids = ['RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_PHYS14_PU20bx25_V2_cff',
'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV51_cff',
'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_50ns_V1_cff',
'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV60_cff',
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_PHYS14_PU20bx25_nonTrig_V1_cff']
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff']
switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD)
process.egmGsfElectronIDs.physicsObjectSrc = \
cms.InputTag("reducedEgamma","reducedGedGsfElectrons")
process.electronMVAValueMapProducer.src = \
cms.InputTag('reducedEgamma','reducedGedGsfElectrons')
for idmod in electron_ids:
setupAllVIDIdsInModule(process,idmod,setupVIDElectronSelection)
setupAllVIDIdsInModule(process,idmod,setupVIDElectronSelection,None,False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False means not to add to UserData? Where do these values go then? just empty space or are they consumed somewhere (lazy to parse the underlying code)


#VID Photon IDs
photon_ids = ['RecoEgamma.PhotonIdentification.Identification.cutBasedPhotonID_PHYS14_PU20bx25_V2_cff',
'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_PHYS14_PU20bx25_nonTrig_V1_cff',
'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring15_50ns_nonTrig_V0_cff']
'RecoEgamma.PhotonIdentification.Identification.cutBasedPhotonID_Spring15_50ns_V1_cff',
'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring15_25ns_nonTrig_V0_cff',
'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring15_50ns_nonTrig_V2_cff']
switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD)
process.egmPhotonIDs.physicsObjectSrc = \
cms.InputTag("reducedEgamma","reducedGedPhotons")
Expand All @@ -201,8 +202,8 @@ def miniAOD_customizeCommon(process):
process.photonMVAValueMapProducer.src = \
cms.InputTag('reducedEgamma','reducedGedPhotons')
for idmod in photon_ids:
setupAllVIDIdsInModule(process,idmod,setupVIDPhotonSelection)

setupAllVIDIdsInModule(process,idmod,setupVIDPhotonSelection,None,False)
# Adding puppi jets
process.load('CommonTools.PileupAlgos.Puppi_cff')
process.load('RecoJets.JetProducers.ak4PFJetsPuppi_cfi')
Expand Down
31 changes: 16 additions & 15 deletions PhysicsTools/SelectorUtils/python/tools/vid_id_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def setupVIDSelection(vidproducer,cutflow):
)
sys.stderr.write('Added ID \'%s\' to %s\n'%(cutflow.idName.value(),vidproducer.label()))

def addVIDSelectionToPATProducer(patProducer,idProducer,idName):
def addVIDSelectionToPATProducer(patProducer,idProducer,idName,addUserData=True):
patProducerIDs = None
userDatas = None
for key in patProducer.__dict__.keys():
Expand All @@ -38,21 +38,22 @@ def addVIDSelectionToPATProducer(patProducer,idProducer,idName):
if userDatas is None:
raise Exception('StrangePatModule','%s does not have UserData sources!'%patProducer.label())
setattr(patProducerIDs,idName,cms.InputTag('%s:%s'%(idProducer,idName)))
if( len(userDatas.userClasses.src) == 1 and
type(userDatas.userClasses.src[0]) is str and
userDatas.userClasses.src[0] == '' ):
userDatas.userClasses.src = cms.VInputTag(cms.InputTag('%s:%s'%(idProducer,idName)))
else:
userDatas.userClasses.src.append(cms.InputTag('%s:%s'%(idProducer,idName)))
sys.stderr.write('\t--- %s:%s added to %s\n'%(idProducer,idName,patProducer.label()))

def setupAllVIDIdsInModule(process,id_module_name,setupFunction,patProducer=None):
if( addUserData ):
if( len(userDatas.userClasses.src) == 1 and
type(userDatas.userClasses.src[0]) is str and
userDatas.userClasses.src[0] == '' ):
userDatas.userClasses.src = cms.VInputTag(cms.InputTag('%s:%s'%(idProducer,idName)))
else:
userDatas.userClasses.src.append(cms.InputTag('%s:%s'%(idProducer,idName)))
sys.stderr.write('\t--- %s:%s added to %s\n'%(idProducer,idName,patProducer.label()))

def setupAllVIDIdsInModule(process,id_module_name,setupFunction,patProducer=None,addUserData=True):
# idmod = importlib.import_module(id_module_name)
idmod= __import__(id_module_name, globals(), locals(), ['idName','cutFlow'])
for name in dir(idmod):
item = getattr(idmod,name)
if hasattr(item,'idName') and hasattr(item,'cutFlow'):
setupFunction(process,item,patProducer)
setupFunction(process,item,patProducer,addUserData)

# Supported data formats defined via "enum"
class DataFormat:
Expand Down Expand Up @@ -84,7 +85,7 @@ def switchOnVIDElectronIdProducer(process, dataFormat):
#
sys.stderr.write('Added \'egmGsfElectronIDs\' to process definition (%s format)!\n' % dataFormatString)

def setupVIDElectronSelection(process,cutflow,patProducer=None):
def setupVIDElectronSelection(process,cutflow,patProducer=None,addUserData=True):
if not hasattr(process,'egmGsfElectronIDs'):
raise Exception('VIDProducerNotAvailable','egmGsfElectronIDs producer not available in process!')
setupVIDSelection(process.egmGsfElectronIDs,cutflow)
Expand All @@ -93,7 +94,7 @@ def setupVIDElectronSelection(process,cutflow,patProducer=None):
if patProducer is None:
patProducer = process.patElectrons
idName = cutflow.idName.value()
addVIDSelectionToPATProducer(patProducer,'egmGsfElectronIDs',idName)
addVIDSelectionToPATProducer(patProducer,'egmGsfElectronIDs',idName,addUserData)

####
# Muons
Expand Down Expand Up @@ -157,7 +158,7 @@ def switchOnVIDPhotonIdProducer(process, dataFormat):
#
sys.stderr.write('Added \'egmPhotonIDs\' to process definition (%s format)!\n' % dataFormatString)

def setupVIDPhotonSelection(process,cutflow,patProducer=None):
def setupVIDPhotonSelection(process,cutflow,patProducer=None,addUserData=True):
if not hasattr(process,'egmPhotonIDs'):
raise Exception('VIDProducerNotAvailable','egmPhotonIDs producer not available in process!\n')
setupVIDSelection(process.egmPhotonIDs,cutflow)
Expand All @@ -166,6 +167,6 @@ def setupVIDPhotonSelection(process,cutflow,patProducer=None):
if patProducer is None:
patProducer = process.patPhotons
idName = cutflow.idName.value()
addVIDSelectionToPATProducer(patProducer,'egmPhotonIDs',idName)
addVIDSelectionToPATProducer(patProducer,'egmPhotonIDs',idName,addUserData)


4 changes: 4 additions & 0 deletions RecoEgamma/EgammaTools/interface/AnyMVAEstimatorRun2Base.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ class AnyMVAEstimatorRun2Base {
// The name is a unique name associated with a particular MVA implementation,
// it is found as a const data member in a derived class.
virtual const std::string& getName() const = 0;
// An extra variable string set during construction that can be used
// to distinguish different instances of the estimator configured with
// different weight files. The tag can be used to construct names of ValueMaps, etc.
virtual const std::string& getTag() const = 0;

// fills a vector of floats in the order that arguments are provided
template<typename... Args>
Expand Down
8 changes: 5 additions & 3 deletions RecoEgamma/EgammaTools/interface/MVAValueMapProducer.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@ MVAValueMapProducer<ParticleType>::MVAValueMapProducer(const edm::ParameterSet&
//
// Compose and save the names of the value maps to be produced
//
//const auto& currentEstimator = mvaItr->second;
const std::string thisValueMapName = mvaItr->first + "Values";
const std::string thisCategoriesMapName = mvaItr->first + "Categories";
const auto& currentEstimator = mvaItr->second;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, that's where it was needed ...

const std::string full_name = ( currentEstimator->getName() +
currentEstimator->getTag() );
std::string thisValueMapName = full_name + "Values";
std::string thisCategoriesMapName = full_name + "Categories";
mvaValueMapNames_.push_back( thisValueMapName );
mvaCategoriesMapNames_.push_back( thisCategoriesMapName );

Expand Down