Skip to content

Commit

Permalink
Merge pull request #11738 from lgray/egm_id_7.4.12v1_port_76X
Browse files Browse the repository at this point in the history
EGM ID Updates from recipes (76X)
  • Loading branch information
davidlange6 committed Oct 20, 2015
2 parents b0396f0 + 2f1cf60 commit 3e46e44
Show file tree
Hide file tree
Showing 13 changed files with 1,237 additions and 10 deletions.
6 changes: 4 additions & 2 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
Expand Up @@ -165,9 +165,11 @@ def miniAOD_customizeCommon(process):
#VID Electron IDs
electron_ids = ['RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_PHYS14_PU20bx25_V2_cff',
'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_25ns_V1_cff',
'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_50ns_V1_cff',
'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_50ns_V2_cff',
'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV60_cff',
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff']
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff',
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_Trig_V1_cff',
'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_50ns_Trig_V1_cff']
switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD)
process.egmGsfElectronIDs.physicsObjectSrc = \
cms.InputTag("reducedEgamma","reducedGedGsfElectrons")
Expand Down
Expand Up @@ -2,6 +2,9 @@

#electron mva ids
import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff as ele_spring15_nt
import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_50ns_Trig_V1_cff as ele_spring15_50_t

import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_Trig_V1_cff as ele_spring15_25_t

#photon mva ids
import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring15_25ns_nonTrig_V2p1_cff as pho_spring15_25_nt
Expand Down Expand Up @@ -37,6 +40,16 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name):
ele_mva_prod_name,
ele_spring15_nt.mvaSpring15NonTrigClassName+ele_spring15_nt.mvaTag)

setup_mva(egamma_modifications[0].electron_config,
egamma_modifications[1].electron_config,
ele_mva_prod_name,
ele_spring15_50_t.mvaSpring15TrigClassName+ele_spring15_50_t.mvaTag)

setup_mva(egamma_modifications[0].electron_config,
egamma_modifications[1].electron_config,
ele_mva_prod_name,
ele_spring15_25_t.mvaSpring15TrigClassName+ele_spring15_25_t.mvaTag)

setup_mva(egamma_modifications[0].photon_config,
egamma_modifications[1].photon_config,
pho_mva_prod_name,
Expand Down
@@ -0,0 +1,147 @@
#ifndef RecoEgamma_ElectronIdentification_ElectronMVAEstimatorRun2Spring15Trig_H
#define RecoEgamma_ElectronIdentification_ElectronMVAEstimatorRun2Spring15Trig_H

#include "RecoEgamma/EgammaTools/interface/AnyMVAEstimatorRun2Base.h"

#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"

#include "DataFormats/BeamSpot/interface/BeamSpot.h"

#include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
#include "DataFormats/EgammaCandidates/interface/Conversion.h"
#include "RecoEgamma/EgammaTools/interface/ConversionTools.h"

#include "CondFormats/EgammaObjects/interface/GBRForest.h"

#include <vector>
#include <string>
#include <TROOT.h>
#include "TMVA/Factory.h"
#include "TMVA/Tools.h"
#include "TMVA/Reader.h"

class ElectronMVAEstimatorRun2Spring15Trig : public AnyMVAEstimatorRun2Base{

public:

// Define here the number and the meaning of the categories
// for this specific MVA
const int nCategories = 3;
enum mvaCategories {
UNDEFINED = -1,
CAT_EB1 = 0,
CAT_EB2 = 1,
CAT_EE = 2
};

// Define the struct that contains all necessary for MVA variables
// Note: all variables have to be floats for TMVA Reader, even if
// the training was done with ints.
struct AllVariables {
// Pure ECAL -> shower shapes
float see; // 0
float spp; // 1
float OneMinusE1x5E5x5; // 2
float R9; // 3
float etawidth; // 4
float phiwidth; // 5
float HoE; // 6

// Endcap only variables
float PreShowerOverRaw; // 7

//Pure tracking variables
float kfhits; // 8
float kfchi2; // 9
float gsfchi2; // 10
// Energy matching
float fbrem; // 11

float gsfhits; // 12
float expectedMissingInnerHits; // 13
float convVtxFitProbability; // 14

float EoP; // 15
float eleEoPout; // 16
float IoEmIoP; // 17
// Geometrical matchings
float deta; // 18
float dphi; // 19
float detacalo; // 20

// Spectator variables
// ... none in this version ...

// Other variables. These ones are not needed for this version
// of MVA, but kept in this data structure for convenience.
float pt; // 21
float SCeta; //22


};

// Constructor and destructor
ElectronMVAEstimatorRun2Spring15Trig(const edm::ParameterSet& conf);
~ElectronMVAEstimatorRun2Spring15Trig();

// Calculation of the MVA value
float mvaValue( const edm::Ptr<reco::Candidate>& particle, const edm::Event&) const override;

// Utility functions
std::unique_ptr<const GBRForest> createSingleReader(const int iCategory,
const edm::FileInPath &weightFile);

virtual int getNCategories() const override { return nCategories; }
bool isEndcapCategory( int category ) const;
virtual const std::string& getName() const override final { return _name; }
virtual const std::string& getTag() const override final { return _tag; }

// Functions that should work on both pat and reco electrons
// (use the fact that pat::Electron inherits from reco::GsfElectron)
std::vector<float> fillMVAVariables(const edm::Ptr<reco::Candidate>& particle, const edm::Event&) const override;
int findCategory( const edm::Ptr<reco::Candidate>& particle) const override;
// The function below ensures that the variables passed to MVA are
// within reasonable bounds
void constrainMVAVariables(AllVariables&) const;

// Call this function once after the constructor to declare
// the needed event content pieces to the framework
void setConsumes(edm::ConsumesCollector&&) const override final;
// Call this function once per event to retrieve all needed
// event content pices

private:

// MVA name. This is a unique name for this MVA implementation.
// It will be used as part of ValueMap names.
// For simplicity, keep it set to the class name.
const std::string _name = "ElectronMVAEstimatorRun2Spring15Trig";
// MVA tag. This is an additional string variable to distinguish
// instances of the estimator of this class configured with different
// weight files.
const std::string _tag;

// Data members
std::vector< std::unique_ptr<const GBRForest> > _gbrForests;

// All variables needed by this MVA
const std::string _MethodName;
AllVariables _allMVAVars;

//
// Declare all tokens that will be needed to retrieve misc
// data from the event content required by this MVA
//
const edm::InputTag _beamSpotLabel;
// Conversions in AOD and miniAOD have different names
const edm::InputTag _conversionsLabelAOD;
const edm::InputTag _conversionsLabelMiniAOD;


};

DEFINE_EDM_PLUGIN(AnyMVAEstimatorRun2Factory,
ElectronMVAEstimatorRun2Spring15Trig,
"ElectronMVAEstimatorRun2Spring15Trig");

#endif

0 comments on commit 3e46e44

Please sign in to comment.