CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
PileupJetIdAlgo Class Reference

#include <PileupJetIdAlgo.h>

Public Types

typedef std::map< std::string,
std::pair< float *, float > > 
variables_list_t
 
enum  version_t { USER =-1, PHILv0 =0 }
 

Public Member Functions

int computeCutIDflag (float betaStarClassic, float dR2Mean, float nvtx, float jetPt, float jetEta)
 
int computeIDflag (float mva, float jetPt, float jetEta)
 
int computeIDflag (float mva, int ptId, int etaId)
 
PileupJetIdentifier computeIdVariables (const reco::Jet *jet, float jec, const reco::Vertex *, const reco::VertexCollection &, double rho)
 
PileupJetIdentifier computeMva ()
 
std::string dumpVariables () const
 
std::pair< int, int > getJetIdKey (float jetPt, float jetEta)
 
const variables_list_tgetVariables () const
 const PileupJetIdentifier::variables_list_t & getVariables() const { return variables_; }; More...
 
const std::string method () const
 
 PileupJetIdAlgo (int version=PHILv0, const std::string &tmvaWeight="", const std::string &tmvaMethod="", Float_t impactParTkThreshod_=1., const std::vector< std::string > &tmvaVariables=std::vector< std::string >(), bool runMvas=true)
 
 PileupJetIdAlgo (const edm::ParameterSet &ps, bool runMvas)
 
void set (const PileupJetIdentifier &)
 
 ~PileupJetIdAlgo ()
 

Protected Member Functions

void bookReader ()
 
void initVariables ()
 
void resetVariables ()
 
void runMva ()
 
void setup ()
 

Protected Attributes

Float_t betaStarCut_ [3][4][4]
 
bool cutBased_
 
bool etaBinnedWeights_
 
Float_t impactParTkThreshod_
 
PileupJetIdentifier internalId_
 
Float_t mvacut_ [3][4][4]
 
std::unique_ptr< TMVA::Reader > reader_
 
std::unique_ptr< TMVA::Reader > reader_jteta_0_2p5_
 
std::unique_ptr< TMVA::Reader > reader_jteta_2p5_2p75_
 
std::unique_ptr< TMVA::Reader > reader_jteta_2p75_3_
 
std::unique_ptr< TMVA::Reader > reader_jteta_3_5_
 
Float_t rmsCut_ [3][4][4]
 
bool runMvas_
 
std::string tmvaMethod_
 
std::map< std::string,
std::string > 
tmvaNames_
 
std::vector< std::string > tmvaSpectators_
 
std::vector< std::string > tmvaVariables_
 
std::vector< std::string > tmvaVariables_jteta_0_3_
 
std::vector< std::string > tmvaVariables_jteta_3_5_
 
std::string tmvaWeights_
 
std::string tmvaWeights_jteta_0_2p5_
 
std::string tmvaWeights_jteta_2p5_2p75_
 
std::string tmvaWeights_jteta_2p75_3_
 
std::string tmvaWeights_jteta_3_5_
 
variables_list_t variables_
 
Int_t version_
 

Detailed Description

Definition at line 27 of file PileupJetIdAlgo.h.

Member Typedef Documentation

typedef std::map<std::string,std::pair<float *,float> > PileupJetIdAlgo::variables_list_t

Definition at line 45 of file PileupJetIdAlgo.h.

Member Enumeration Documentation

Enumerator
USER 
PHILv0 

Definition at line 29 of file PileupJetIdAlgo.h.

Constructor & Destructor Documentation

PileupJetIdAlgo::PileupJetIdAlgo ( int  version = PHILv0,
const std::string &  tmvaWeight = "",
const std::string &  tmvaMethod = "",
Float_t  impactParTkThreshod_ = 1.,
const std::vector< std::string > &  tmvaVariables = std::vector<std::string>(),
bool  runMvas = true 
)
PileupJetIdAlgo::PileupJetIdAlgo ( const edm::ParameterSet ps,
bool  runMvas 
)

ps.getParameter<double>("impactParTkThreshod");

Definition at line 18 of file PileupJetIdAlgo.cc.

References betaStarCut_, cutBased_, etaBinnedWeights_, edm::FileInPath::fullPath(), edm::ParameterSet::getParameter(), impactParTkThreshod_, PileupJetIdentifier::kLoose, PileupJetIdentifier::kMedium, mvacut_, rmsCut_, runMvas_, setup(), AlCaHLTBitMon_QueryRunRegistry::string, tmvaMethod_, tmvaSpectators_, tmvaVariables_, tmvaVariables_jteta_0_3_, tmvaVariables_jteta_3_5_, tmvaWeights_, tmvaWeights_jteta_0_2p5_, tmvaWeights_jteta_2p5_2p75_, tmvaWeights_jteta_2p75_3_, tmvaWeights_jteta_3_5_, USER, and version_.

19 {
21  cutBased_ = false;
22  etaBinnedWeights_ = false;
23  runMvas_=runMvas;
24  //std::string label = ps.getParameter<std::string>("label");
25  cutBased_ = ps.getParameter<bool>("cutBased");
26  if(!cutBased_)
27  {
28  etaBinnedWeights_ = ps.getParameter<bool>("etaBinnedWeights");
30  tmvaWeights_jteta_0_2p5_ = edm::FileInPath(ps.getParameter<std::string>("tmvaWeights_jteta_0_2p5")).fullPath();
31  tmvaWeights_jteta_2p5_2p75_ = edm::FileInPath(ps.getParameter<std::string>("tmvaWeights_jteta_2p5_2p75")).fullPath();
32  tmvaWeights_jteta_2p75_3_ = edm::FileInPath(ps.getParameter<std::string>("tmvaWeights_jteta_2p75_3")).fullPath();
34  }
35  else{
37  }
38  tmvaMethod_ = ps.getParameter<std::string>("tmvaMethod");
40  tmvaVariables_jteta_0_3_ = ps.getParameter<std::vector<std::string> >("tmvaVariables_jteta_0_3");
41  tmvaVariables_jteta_3_5_ = ps.getParameter<std::vector<std::string> >("tmvaVariables_jteta_3_5");
42  } else {
43  tmvaVariables_ = ps.getParameter<std::vector<std::string> >("tmvaVariables");
44  }
45  tmvaSpectators_ = ps.getParameter<std::vector<std::string> >("tmvaSpectators");
46  version_ = ps.getParameter<int>("version");
47  }
48  else version_ = USER;
49  edm::ParameterSet jetConfig = ps.getParameter<edm::ParameterSet>("JetIdParams");
50  for(int i0 = 0; i0 < 3; i0++) {
51  std::string lCutType = "Tight";
52  if(i0 == PileupJetIdentifier::kMedium) lCutType = "Medium";
53  if(i0 == PileupJetIdentifier::kLoose) lCutType = "Loose";
54  int nCut = 1;
55  if(cutBased_) nCut++;
56  for(int i1 = 0; i1 < nCut; i1++) {
57  std::string lFullCutType = lCutType;
58  if(cutBased_ && i1 == 0) lFullCutType = "BetaStar"+ lCutType;
59  if(cutBased_ && i1 == 1) lFullCutType = "RMS" + lCutType;
60  std::vector<double> pt010 = jetConfig.getParameter<std::vector<double> >(("Pt010_" +lFullCutType).c_str());
61  std::vector<double> pt1020 = jetConfig.getParameter<std::vector<double> >(("Pt1020_"+lFullCutType).c_str());
62  std::vector<double> pt2030 = jetConfig.getParameter<std::vector<double> >(("Pt2030_"+lFullCutType).c_str());
63  std::vector<double> pt3050 = jetConfig.getParameter<std::vector<double> >(("Pt3050_"+lFullCutType).c_str());
64  if(!cutBased_) {
65  for(int i2 = 0; i2 < 4; i2++) mvacut_[i0][0][i2] = pt010 [i2];
66  for(int i2 = 0; i2 < 4; i2++) mvacut_[i0][1][i2] = pt1020[i2];
67  for(int i2 = 0; i2 < 4; i2++) mvacut_[i0][2][i2] = pt2030[i2];
68  for(int i2 = 0; i2 < 4; i2++) mvacut_[i0][3][i2] = pt3050[i2];
69  }
70  if(cutBased_ && i1 == 0) {
71  for(int i2 = 0; i2 < 4; i2++) betaStarCut_[i0][0][i2] = pt010 [i2];
72  for(int i2 = 0; i2 < 4; i2++) betaStarCut_[i0][1][i2] = pt1020[i2];
73  for(int i2 = 0; i2 < 4; i2++) betaStarCut_[i0][2][i2] = pt2030[i2];
74  for(int i2 = 0; i2 < 4; i2++) betaStarCut_[i0][3][i2] = pt3050[i2];
75  }
76  if(cutBased_ && i1 == 1) {
77  for(int i2 = 0; i2 < 4; i2++) rmsCut_[i0][0][i2] = pt010 [i2];
78  for(int i2 = 0; i2 < 4; i2++) rmsCut_[i0][1][i2] = pt1020[i2];
79  for(int i2 = 0; i2 < 4; i2++) rmsCut_[i0][2][i2] = pt2030[i2];
80  for(int i2 = 0; i2 < 4; i2++) rmsCut_[i0][3][i2] = pt3050[i2];
81  }
82  }
83  }
84  setup();
85 }
T getParameter(std::string const &) const
Float_t impactParTkThreshod_
std::vector< std::string > tmvaVariables_
Float_t mvacut_[3][4][4]
std::string tmvaMethod_
Float_t betaStarCut_[3][4][4]
std::vector< std::string > tmvaVariables_jteta_0_3_
std::vector< std::string > tmvaVariables_jteta_3_5_
std::string tmvaWeights_jteta_2p75_3_
std::string tmvaWeights_jteta_3_5_
std::string tmvaWeights_jteta_0_2p5_
Float_t rmsCut_[3][4][4]
std::vector< std::string > tmvaSpectators_
std::string tmvaWeights_jteta_2p5_2p75_
std::string tmvaWeights_
std::string fullPath() const
Definition: FileInPath.cc:184
PileupJetIdAlgo::~PileupJetIdAlgo ( )

Definition at line 120 of file PileupJetIdAlgo.cc.

121 {
122 }

Member Function Documentation

void PileupJetIdAlgo::bookReader ( )
protected

Definition at line 142 of file PileupJetIdAlgo.cc.

References relativeConstraints::empty, etaBinnedWeights_, plotBeamSpotDB::first, reco::details::loadTMVAWeights(), reader_, reader_jteta_0_2p5_, reader_jteta_2p5_2p75_, reader_jteta_2p75_3_, reader_jteta_3_5_, tmvaMethod_, tmvaNames_, tmvaSpectators_, tmvaVariables_, tmvaVariables_jteta_0_3_, tmvaVariables_jteta_3_5_, tmvaWeights_, tmvaWeights_jteta_0_2p5_, tmvaWeights_jteta_2p5_2p75_, tmvaWeights_jteta_2p75_3_, tmvaWeights_jteta_3_5_, and variables_.

Referenced by setup().

143 {
144  if(etaBinnedWeights_){
145  reader_jteta_0_2p5_ = std::unique_ptr<TMVA::Reader>(new TMVA::Reader("!Color:Silent"));
146  reader_jteta_2p5_2p75_ = std::unique_ptr<TMVA::Reader>(new TMVA::Reader("!Color:Silent"));
147  reader_jteta_2p75_3_ = std::unique_ptr<TMVA::Reader>(new TMVA::Reader("!Color:Silent"));
148  reader_jteta_3_5_ = std::unique_ptr<TMVA::Reader>(new TMVA::Reader("!Color:Silent"));
149  } else {
150  reader_ = std::unique_ptr<TMVA::Reader>(new TMVA::Reader("!Color:Silent"));
151  }
152  if(etaBinnedWeights_){
153  for(std::vector<std::string>::iterator it=tmvaVariables_jteta_0_3_.begin(); it!=tmvaVariables_jteta_0_3_.end(); ++it) {
154  if( tmvaNames_[*it].empty() ) {
155  tmvaNames_[*it] = *it;
156  }
157  reader_jteta_0_2p5_->AddVariable( *it, variables_[ tmvaNames_[*it] ].first );
158  reader_jteta_2p5_2p75_->AddVariable( *it, variables_[ tmvaNames_[*it] ].first );
159  reader_jteta_2p75_3_->AddVariable( *it, variables_[ tmvaNames_[*it] ].first );
160  }
161  for(std::vector<std::string>::iterator it=tmvaVariables_jteta_3_5_.begin(); it!=tmvaVariables_jteta_3_5_.end(); ++it) {
162  if( tmvaNames_[*it].empty() ) {
163  tmvaNames_[*it] = *it;
164  }
165  reader_jteta_3_5_->AddVariable( *it, variables_[ tmvaNames_[*it] ].first );
166  }
167  } else {
168  for(std::vector<std::string>::iterator it=tmvaVariables_.begin(); it!=tmvaVariables_.end(); ++it) {
169  if( tmvaNames_[*it].empty() ) {
170  tmvaNames_[*it] = *it;
171  }
172  reader_->AddVariable( *it, variables_[ tmvaNames_[*it] ].first );
173  }
174  }
175  for(std::vector<std::string>::iterator it=tmvaSpectators_.begin(); it!=tmvaSpectators_.end(); ++it) {
176  if( tmvaNames_[*it].empty() ) {
177  tmvaNames_[*it] = *it;
178  }
179  if(etaBinnedWeights_){
180  reader_jteta_0_2p5_->AddSpectator( *it, variables_[ tmvaNames_[*it] ].first );
181  reader_jteta_2p5_2p75_->AddSpectator( *it, variables_[ tmvaNames_[*it] ].first );
182  reader_jteta_2p75_3_->AddSpectator( *it, variables_[ tmvaNames_[*it] ].first );
183  reader_jteta_3_5_->AddSpectator( *it, variables_[ tmvaNames_[*it] ].first );
184  } else {
185  reader_->AddSpectator( *it, variables_[ tmvaNames_[*it] ].first );
186  }
187  }
188  if(etaBinnedWeights_){
193  } else {
195  }
196 }
std::vector< std::string > tmvaVariables_
std::map< std::string, std::string > tmvaNames_
std::string tmvaMethod_
std::unique_ptr< TMVA::Reader > reader_jteta_3_5_
std::vector< std::string > tmvaVariables_jteta_0_3_
std::unique_ptr< TMVA::Reader > reader_jteta_0_2p5_
std::vector< std::string > tmvaVariables_jteta_3_5_
std::string tmvaWeights_jteta_2p75_3_
std::unique_ptr< TMVA::Reader > reader_jteta_2p5_2p75_
std::string tmvaWeights_jteta_3_5_
std::string tmvaWeights_jteta_0_2p5_
std::vector< std::string > tmvaSpectators_
TMVA::IMethod * loadTMVAWeights(TMVA::Reader *reader, const std::string &method, const std::string &weightFile, bool verbose=false)
std::string tmvaWeights_jteta_2p5_2p75_
std::unique_ptr< TMVA::Reader > reader_jteta_2p75_3_
std::unique_ptr< TMVA::Reader > reader_
std::string tmvaWeights_
variables_list_t variables_
int PileupJetIdAlgo::computeCutIDflag ( float  betaStarClassic,
float  dR2Mean,
float  nvtx,
float  jetPt,
float  jetEta 
)

Definition at line 242 of file PileupJetIdAlgo.cc.

References betaStarCut_, getJetIdKey(), PileupJetIdentifier::kLoose, PileupJetIdentifier::kMedium, PileupJetIdentifier::kTight, dqm-mbProfile::log, and rmsCut_.

Referenced by runMva().

243 {
244  std::pair<int,int> jetIdKey = getJetIdKey(jetPt,jetEta);
245  float betaStarModified = betaStarClassic/log(nvtx-0.64);
246  int idFlag(0);
247  if(betaStarModified < betaStarCut_[PileupJetIdentifier::kTight ][jetIdKey.first][jetIdKey.second] &&
248  dR2Mean < rmsCut_ [PileupJetIdentifier::kTight ][jetIdKey.first][jetIdKey.second]
249  ) idFlag += 1 << PileupJetIdentifier::kTight;
250 
251  if(betaStarModified < betaStarCut_[PileupJetIdentifier::kMedium ][jetIdKey.first][jetIdKey.second] &&
252  dR2Mean < rmsCut_ [PileupJetIdentifier::kMedium ][jetIdKey.first][jetIdKey.second]
253  ) idFlag += 1 << PileupJetIdentifier::kMedium;
254 
255  if(betaStarModified < betaStarCut_[PileupJetIdentifier::kLoose ][jetIdKey.first][jetIdKey.second] &&
256  dR2Mean < rmsCut_ [PileupJetIdentifier::kLoose ][jetIdKey.first][jetIdKey.second]
257  ) idFlag += 1 << PileupJetIdentifier::kLoose;
258  return idFlag;
259 }
std::pair< int, int > getJetIdKey(float jetPt, float jetEta)
Float_t betaStarCut_[3][4][4]
Float_t rmsCut_[3][4][4]
int PileupJetIdAlgo::computeIDflag ( float  mva,
float  jetPt,
float  jetEta 
)

Definition at line 261 of file PileupJetIdAlgo.cc.

References getJetIdKey().

Referenced by runMva().

262 {
263  std::pair<int,int> jetIdKey = getJetIdKey(jetPt,jetEta);
264  return computeIDflag(mva,jetIdKey.first,jetIdKey.second);
265 }
std::pair< int, int > getJetIdKey(float jetPt, float jetEta)
int computeIDflag(float mva, float jetPt, float jetEta)
int PileupJetIdAlgo::computeIDflag ( float  mva,
int  ptId,
int  etaId 
)
PileupJetIdentifier PileupJetIdAlgo::computeIdVariables ( const reco::Jet jet,
float  jec,
const reco::Vertex vtx,
const reco::VertexCollection allvtx,
double  rho 
)

Definition at line 286 of file PileupJetIdAlgo.cc.

References funct::abs(), assert(), assign(), reco::Muon::bestTrack(), reco::Candidate::bestTrack(), reco::Candidate::charge(), reco::PFJet::chargedEmEnergy(), pat::Jet::chargedEmEnergy(), reco::PFJet::chargedHadronEnergy(), pat::Jet::chargedHadronEnergy(), reco::PFJet::chargedMultiplicity(), pat::Jet::chargedMultiplicity(), PileupJetIdentifier::chFrac01_, PileupJetIdentifier::chFrac02_, PileupJetIdentifier::chFrac03_, PileupJetIdentifier::chFrac04_, PileupJetIdentifier::chFrac05_, PileupJetIdentifier::chFrac06_, PileupJetIdentifier::chFrac07_, PileupJetIdentifier::chgEMfrac_, PileupJetIdentifier::chgHadrfrac_, pat::Jet::correctedJet(), PileupJetIdentifier::d0_, reco::CompositePtrCandidate::daughterPtr(), reco::deltaPhi(), reco::deltaR(), PileupJetIdentifier::dRLead2nd_, PileupJetIdentifier::dRLeadCent_, PileupJetIdentifier::dRMeanCh_, PileupJetIdentifier::dRMeanEm_, PileupJetIdentifier::dRMeanNeut_, reco::TrackBase::dxy(), reco::TrackBase::dz(), PileupJetIdentifier::emFrac01_, PileupJetIdentifier::emFrac02_, PileupJetIdentifier::emFrac03_, PileupJetIdentifier::emFrac04_, PileupJetIdentifier::emFrac05_, PileupJetIdentifier::emFrac06_, PileupJetIdentifier::emFrac07_, reco::LeafCandidate::energy(), reco::Candidate::eta(), reco::LeafCandidate::eta(), PileupJetIdentifier::etaW_, PileupJetIdentifier::fourthChFrac_, PileupJetIdentifier::fourthEmFrac_, PileupJetIdentifier::fourthFrac_, PileupJetIdentifier::fourthNeutFrac_, cropTnPTrees::frac, pat::PackedCandidate::fromPV(), edm::Ptr< T >::get(), edm::Ref< C, T, F >::get(), reco::PFCandidate::gsfTrackRef(), i, internalId_, reco::Vertex::isFake(), edm::Ref< C, T, F >::isNonnull(), j, patTestJEC_cfi::jec, metsig::jet, PileupJetIdentifier::jetM_, PileupJetIdentifier::jetPhi_, reco::btau::jetPt, PileupJetIdentifier::jetW_, PileupJetIdentifier::leadChEta_, PileupJetIdentifier::leadChFrac_, PileupJetIdentifier::leadChPhi_, PileupJetIdentifier::leadChPt_, PileupJetIdentifier::leadEmEta_, PileupJetIdentifier::leadEmFrac_, PileupJetIdentifier::leadEmPhi_, PileupJetIdentifier::leadEmPt_, PileupJetIdentifier::leadEta_, PileupJetIdentifier::leadFrac_, PileupJetIdentifier::leadNeutEta_, PileupJetIdentifier::leadNeutFrac_, PileupJetIdentifier::leadNeutPhi_, PileupJetIdentifier::leadNeutPt_, PileupJetIdentifier::leadPhi_, PileupJetIdentifier::leadPt_, reco::LeafCandidate::mass(), min(), reco::PFCandidate::muonRef(), reco::Jet::nConstituents(), reco::Vertex::ndof(), PileupJetIdentifier::neuEMfrac_, PileupJetIdentifier::neuHadrfrac_, PileupJetIdentifier::neutFrac01_, PileupJetIdentifier::neutFrac02_, PileupJetIdentifier::neutFrac03_, PileupJetIdentifier::neutFrac04_, PileupJetIdentifier::neutFrac05_, PileupJetIdentifier::neutFrac06_, PileupJetIdentifier::neutFrac07_, reco::PFJet::neutralEmEnergy(), pat::Jet::neutralEmEnergy(), reco::PFJet::neutralHadronEnergy(), pat::Jet::neutralHadronEnergy(), reco::PFJet::neutralMultiplicity(), pat::Jet::neutralMultiplicity(), reco::CompositePtrCandidate::numberOfDaughters(), reco::CompositePtrCandidate::numberOfSourceCandidatePtrs(), reco::Candidate::pdgId(), PileupJetIdentifier::phiW_, reco::Vertex::position(), pat::PackedCandidate::pseudoTrack(), EnergyCorrector::pt, reco::Candidate::pt(), reco::LeafCandidate::pt(), PileupJetIdentifier::pt2A_, PileupJetIdentifier::ptDCh_, PileupJetIdentifier::ptDNe_, PileupJetIdentifier::ptMean_, PileupJetIdentifier::ptRMS_, pat::PackedCandidate::PVUsedInFit, alignCSCRings::r, resetVariables(), rho, runMva(), runMvas_, PileupJetIdentifier::secondChFrac_, PileupJetIdentifier::secondEmFrac_, PileupJetIdentifier::secondEta_, PileupJetIdentifier::secondFrac_, PileupJetIdentifier::secondNeutFrac_, PileupJetIdentifier::secondPhi_, PileupJetIdentifier::secondPt_, setPtEtaPhi(), reco::CompositePtrCandidate::sourceCandidatePtr(), mathSSE::sqrt(), PileupJetIdentifier::sumChPt_, PileupJetIdentifier::sumNePt_, PileupJetIdentifier::sumPt_, std::swap(), PileupJetIdentifier::thirdChFrac_, PileupJetIdentifier::thirdEmFrac_, PileupJetIdentifier::thirdFrac_, PileupJetIdentifier::thirdNeutFrac_, reco::PFCandidate::trackRef(), reco::Vertex::trackWeight(), and puppiForMET_cff::weight.

Referenced by PileupJetIdProducer::produce().

288 {
289 
290  static std::atomic<int> printWarning{10};
291 
292  // initialize all variables to 0
293  resetVariables();
294 
295  // loop over constituents, accumulate sums and find leading candidates
296  const pat::Jet * patjet = dynamic_cast<const pat::Jet *>(jet);
297  const reco::PFJet * pfjet = dynamic_cast<const reco::PFJet *>(jet);
298  assert( patjet != nullptr || pfjet != nullptr );
299  if( patjet != nullptr && jec == 0. ) { // if this is a pat jet and no jec has been passed take the jec from the object
300  jec = patjet->pt()/patjet->correctedJet(0).pt();
301  }
302  if( jec <= 0. ) {
303  jec = 1.;
304  }
305 
306  const reco::Candidate* lLead = nullptr, *lSecond = nullptr, *lLeadNeut = nullptr, *lLeadEm = nullptr, *lLeadCh = nullptr, *lTrail = nullptr;
307  std::vector<float> frac, fracCh, fracEm, fracNeut;
308  float cones[] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 };
309  size_t ncones = sizeof(cones)/sizeof(float);
310  float * coneFracs[] = { &internalId_.frac01_, &internalId_.frac02_, &internalId_.frac03_, &internalId_.frac04_,
311  &internalId_.frac05_, &internalId_.frac06_, &internalId_.frac07_ };
318  TMatrixDSym covMatrix(2); covMatrix = 0.;
319  float jetPt = jet->pt() / jec; // use uncorrected pt for shape variables
320  float sumPt = 0., sumPt2 = 0., sumTkPt = 0.,sumPtCh=0,sumPtNe = 0;
321  setPtEtaPhi(*jet,internalId_.jetPt_,internalId_.jetEta_,internalId_.jetPhi_); // use corrected pt for jet kinematics
322  internalId_.jetM_ = jet->mass();
323  internalId_.nvtx_ = allvtx.size();
324  internalId_.rho_ = rho;
325 
326  float dRmin(1000);
327 
328  for ( unsigned i = 0; i < jet->numberOfSourceCandidatePtrs(); ++i ) {
329  reco::CandidatePtr pfJetConstituent = jet->sourceCandidatePtr(i);
330 
331  const reco::Candidate* icand = pfJetConstituent.get();
332  const pat::PackedCandidate* lPack = dynamic_cast<const pat::PackedCandidate *>( icand );
333  const reco::PFCandidate *lPF=dynamic_cast<const reco::PFCandidate*>( icand );
334  bool isPacked = true;
335  if (lPack == nullptr){
336  isPacked = false;
337  }
338 
339  float candPt = icand->pt();
340  float candPtFrac = candPt/jetPt;
341  float candDr = reco::deltaR(*icand,*jet);
342  float candDeta = std::abs( icand->eta() - jet->eta() );
343  float candDphi = reco::deltaPhi(*icand,*jet);
344  float candPtDr = candPt * candDr;
345  size_t icone = std::lower_bound(&cones[0],&cones[ncones],candDr) - &cones[0];
346 
347  if(candDr < dRmin) dRmin = candDr;
348 
349  // // all particles
350  if( lLead == nullptr || candPt > lLead->pt() ) {
351  lSecond = lLead;
352  lLead = icand;
353  } else if( (lSecond == nullptr || candPt > lSecond->pt()) && (candPt < lLead->pt()) ) {
354  lSecond = icand;
355  }
356 
357  // // average shapes
358  internalId_.dRMean_ += candPtDr;
359  internalId_.dR2Mean_ += candPtDr*candPtDr;
360  covMatrix(0,0) += candPt*candPt*candDeta*candDeta;
361  covMatrix(0,1) += candPt*candPt*candDeta*candDphi;
362  covMatrix(1,1) += candPt*candPt*candDphi*candDphi;
363  internalId_.ptD_ += candPt*candPt;
364  sumPt += candPt;
365  sumPt2 += candPt*candPt;
366 
367  // single most energetic candiates and jet shape profiles
368  frac.push_back(candPtFrac);
369 
370  if( icone < ncones ) { *coneFracs[icone] += candPt; }
371 
372  // neutrals
373  if( abs(icand->pdgId()) == 130) {
374  if (lLeadNeut == nullptr || candPt > lLeadNeut->pt()) { lLeadNeut = icand; }
375  internalId_.dRMeanNeut_ += candPtDr;
376  fracNeut.push_back(candPtFrac);
377  if( icone < ncones ) { *coneNeutFracs[icone] += candPt; }
378  internalId_.ptDNe_ += candPt*candPt;
379  sumPtNe += candPt;
380  }
381  // EM candidated
382  if( icand->pdgId() == 22 ) {
383  if(lLeadEm == nullptr || candPt > lLeadEm->pt()) { lLeadEm = icand; }
384  internalId_.dRMeanEm_ += candPtDr;
385  fracEm.push_back(candPtFrac);
386  if( icone < ncones ) { *coneEmFracs[icone] += candPt; }
387  internalId_.ptDNe_ += candPt*candPt;
388  sumPtNe += candPt;
389  }
390  // Charged particles
391  if( icand->charge() != 0 ) {
392  if (lLeadCh == nullptr || candPt > lLeadCh->pt()) {
393  lLeadCh = icand;
394 
395  const reco::Track* pfTrk = icand->bestTrack();
396  if (lPF && std::abs(icand->pdgId()) == 13 && pfTrk == nullptr){
397  reco::MuonRef lmuRef = lPF->muonRef();
398  if (lmuRef.isNonnull()){
399  const reco::Muon& lmu = *lmuRef.get();
400  pfTrk = lmu.bestTrack();
401  edm::LogWarning("BadMuon")<<"Found a PFCandidate muon without a trackRef: falling back to Muon::bestTrack ";
402  }
403  }
404  if(pfTrk==nullptr) { //protection against empty pointers for the miniAOD case
405  //To handle the electron case
406  if(lPF!=nullptr) {
407  pfTrk=(lPF->trackRef().get()==nullptr)?lPF->gsfTrackRef().get():lPF->trackRef().get();
408  }
409  const reco::Track& impactTrack = (lPack==nullptr)?(*pfTrk):(lPack->pseudoTrack());
410  internalId_.d0_ = std::abs(impactTrack.dxy(vtx->position()));
411  internalId_.dZ_ = std::abs(impactTrack.dz(vtx->position()));
412  }
413  else {
414  internalId_.d0_ = std::abs(pfTrk->dxy(vtx->position()));
415  internalId_.dZ_ = std::abs(pfTrk->dz(vtx->position()));
416  }
417  }
418  internalId_.dRMeanCh_ += candPtDr;
419  internalId_.ptDCh_ += candPt*candPt;
420  fracCh.push_back(candPtFrac);
421  if( icone < ncones ) { *coneChFracs[icone] += candPt; }
422  sumPtCh += candPt;
423  }
424  // // beta and betastar
425  if( icand->charge() != 0 ) {
426  if (!isPacked){
427  if(lPF->trackRef().isNonnull() ) {
428  float tkpt = candPt;
429  sumTkPt += tkpt;
430  // 'classic' beta definition based on track-vertex association
431  bool inVtx0 = vtx->trackWeight ( lPF->trackRef()) > 0 ;
432 
433  bool inAnyOther = false;
434  // alternative beta definition based on track-vertex distance of closest approach
435  double dZ0 = std::abs(lPF->trackRef()->dz(vtx->position()));
436  double dZ = dZ0;
437  for(reco::VertexCollection::const_iterator vi=allvtx.begin(); vi!=allvtx.end(); ++vi ) {
438  const reco::Vertex & iv = *vi;
439  if( iv.isFake() || iv.ndof() < 4 ) { continue; }
440  // the primary vertex may have been copied by the user: check identity by position
441  bool isVtx0 = (iv.position() - vtx->position()).r() < 0.02;
442  // 'classic' beta definition: check if the track is associated with
443  // any vertex other than the primary one
444  if( ! isVtx0 && ! inAnyOther ) {
445  inAnyOther = vtx->trackWeight ( lPF->trackRef()) <= 0 ;
446  }
447  // alternative beta: find closest vertex to the track
448  dZ = std::min(dZ,std::abs(lPF->trackRef()->dz(iv.position())));
449  }
450  // classic beta/betaStar
451  if( inVtx0 && ! inAnyOther ) {
452  internalId_.betaClassic_ += tkpt;
453  } else if( ! inVtx0 && inAnyOther ) {
454  internalId_.betaStarClassic_ += tkpt;
455  }
456  // alternative beta/betaStar
457  if( dZ0 < 0.2 ) {
458  internalId_.beta_ += tkpt;
459  } else if( dZ < 0.2 ) {
460  internalId_.betaStar_ += tkpt;
461  }
462  }
463  }
464  else{
465  // setting classic and alternative to be the same for now
466  float tkpt = candPt;
467  sumTkPt += tkpt;
468  bool inVtx0 = false;
469  bool inVtxOther = false;
470  if (lPack->fromPV() == pat::PackedCandidate::PVUsedInFit) inVtx0 = true;
471  if (lPack->fromPV() == 0) inVtxOther = true;
472  if (inVtx0){
473  internalId_.betaClassic_ += tkpt;
474  internalId_.beta_ += tkpt;
475  }
476  if (inVtxOther){
477  internalId_.betaStarClassic_ += tkpt;
478  internalId_.betaStar_ += tkpt;
479  }
480  }
481  }
482  // trailing candidate
483  if( lTrail == nullptr || candPt < lTrail->pt() ) {
484  lTrail = icand;
485  }
486 
487  }
488 
489  // // Finalize all variables
490  assert( !(lLead == nullptr) );
491 
492  if ( lSecond == nullptr ) { lSecond = lTrail; }
493  if ( lLeadNeut == nullptr ) { lLeadNeut = lTrail; }
494  if ( lLeadEm == nullptr ) { lLeadEm = lTrail; }
495  if ( lLeadCh == nullptr ) { lLeadCh = lTrail; }
496 
497  if( patjet != nullptr ) { // to enable running on MiniAOD slimmedJets
498  internalId_.nCharged_ = patjet->chargedMultiplicity();
499  internalId_.nNeutrals_ = patjet->neutralMultiplicity();
500  internalId_.chgEMfrac_ = patjet->chargedEmEnergy() /jet->energy();
501  internalId_.neuEMfrac_ = patjet->neutralEmEnergy() /jet->energy();
504  } else {
505  internalId_.nCharged_ = pfjet->chargedMultiplicity();
506  internalId_.nNeutrals_ = pfjet->neutralMultiplicity();
507  internalId_.chgEMfrac_ = pfjet->chargedEmEnergy() /jet->energy();
508  internalId_.neuEMfrac_ = pfjet->neutralEmEnergy() /jet->energy();
511  }
512  internalId_.nParticles_ = jet->nConstituents();
513 
515  float sumW2(0.0);
516  float sum_deta(0.0),sum_dphi(0.0);
517  float ave_deta(0.0), ave_dphi(0.0);
518  for (size_t j = 0; j < jet->numberOfDaughters(); j++) {
519  const auto& part = jet->daughterPtr(j);
520  if (!(part.isAvailable() && part.isNonnull()) ){
521  continue;
522  }
523 
524  float weight = part->pt();
525  float weight2 = weight * weight;
526  sumW2 += weight2;
527  float deta = part->eta() - jet->eta();
528  float dphi = reco::deltaPhi(*part, *jet);
529  sum_deta += deta*weight2;
530  sum_dphi += dphi*weight2;
531  if (sumW2 > 0) {
532  ave_deta = sum_deta/sumW2;
533  ave_dphi = sum_dphi/sumW2;
534  }
535  }
536 
537  float ddetaR_sum(0.0), ddphiR_sum(0.0), pull_tmp(0.0);
538  for (size_t i = 0; i < jet->numberOfDaughters(); i++) {
539  const auto& part = jet->daughterPtr(i);
540  if (!(part.isAvailable() && part.isNonnull()) ){
541  continue;
542  }
543  float weight =part->pt()*part->pt();
544  float deta = part->eta() - jet->eta();
545  float dphi = reco::deltaPhi(*part, *jet);
546  float ddeta, ddphi, ddR;
547  ddeta = deta - ave_deta ;
548  ddphi = dphi-ave_dphi;
549  ddR = sqrt(ddeta*ddeta + ddphi*ddphi);
550  ddetaR_sum += ddR*ddeta*weight;
551  ddphiR_sum += ddR*ddphi*weight;
552  }
553  if (sumW2 > 0) {
554  float ddetaR_ave = ddetaR_sum/sumW2;
555  float ddphiR_ave = ddphiR_sum/sumW2;
556  pull_tmp = sqrt(ddetaR_ave*ddetaR_ave+ddphiR_ave*ddphiR_ave);
557  }
558  internalId_.pull_ = pull_tmp;
560 
561 
567 
568  std::sort(frac.begin(),frac.end(),std::greater<float>());
569  std::sort(fracCh.begin(),fracCh.end(),std::greater<float>());
570  std::sort(fracEm.begin(),fracEm.end(),std::greater<float>());
571  std::sort(fracNeut.begin(),fracNeut.end(),std::greater<float>());
576 
577  covMatrix(0,0) /= sumPt2;
578  covMatrix(0,1) /= sumPt2;
579  covMatrix(1,1) /= sumPt2;
580  covMatrix(1,0) = covMatrix(0,1);
581  internalId_.etaW_ = sqrt(covMatrix(0,0));
582  internalId_.phiW_ = sqrt(covMatrix(1,1));
584  TVectorD eigVals(2); eigVals = TMatrixDSymEigen(covMatrix).GetEigenValues();
585  internalId_.majW_ = sqrt(std::abs(eigVals(0)));
586  internalId_.minW_ = sqrt(std::abs(eigVals(1)));
587  if( internalId_.majW_ < internalId_.minW_ ) { std::swap(internalId_.majW_,internalId_.minW_); }
588 
589  internalId_.dRLeadCent_ = reco::deltaR(*jet,*lLead);
590  if( lSecond == nullptr ) { internalId_.dRLead2nd_ = reco::deltaR(*jet,*lSecond); }
591  internalId_.dRMean_ /= jetPt;
595  internalId_.dR2Mean_ /= sumPt2;
596 
597  for(size_t ic=0; ic<ncones; ++ic){
598  *coneFracs[ic] /= jetPt;
599  *coneEmFracs[ic] /= jetPt;
600  *coneNeutFracs[ic] /= jetPt;
601  *coneChFracs[ic] /= jetPt;
602  }
603  //http://jets.physics.harvard.edu/qvg/
604  double ptMean = sumPt/internalId_.nParticles_;
605  double ptRMS = 0;
606  for(unsigned int i0 = 0; i0 < frac.size(); i0++) {ptRMS+=(frac[i0]-ptMean)*(frac[i0]-ptMean);}
607  ptRMS/=internalId_.nParticles_;
608  ptRMS=sqrt(ptRMS);
609 
610  internalId_.ptMean_ = ptMean;
611  internalId_.ptRMS_ = ptRMS/jetPt;
612  internalId_.pt2A_ = sqrt( internalId_.ptD_ /internalId_.nParticles_)/jetPt;
613  internalId_.ptD_ = sqrt( internalId_.ptD_) / sumPt;
614  internalId_.ptDCh_ = sqrt( internalId_.ptDCh_) / sumPtCh;
615  internalId_.ptDNe_ = sqrt( internalId_.ptDNe_) / sumPtNe;
616  internalId_.sumPt_ = sumPt;
617  internalId_.sumChPt_ = sumPtCh;
618  internalId_.sumNePt_ = sumPtNe;
619 
620  internalId_.jetR_ = lLead->pt()/sumPt;
621  internalId_.jetRchg_ = lLeadEm->pt()/sumPt;
622  internalId_.dRMatch_ = dRmin;
623 
624  if( sumTkPt != 0. ) {
625  internalId_.beta_ /= sumTkPt;
626  internalId_.betaStar_ /= sumTkPt;
627  internalId_.betaClassic_ /= sumTkPt;
628  internalId_.betaStarClassic_ /= sumTkPt;
629  } else {
630  assert( internalId_.beta_ == 0. && internalId_.betaStar_ == 0.&& internalId_.betaClassic_ == 0. && internalId_.betaStarClassic_ == 0. );
631  }
632 
633  if( runMvas_ ) {
634  runMva();
635  }
636 
638 }
int i
Definition: DBlmapReader.cc:9
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
float chargedHadronEnergy() const
chargedHadronEnergy
Definition: Jet.h:622
float chargedEmEnergy() const
chargedEmEnergy
Definition: PFJet.h:142
float neutralEmEnergy() const
neutralEmEnergy
Definition: Jet.h:643
virtual double energy() const final
energy
CandidatePtr daughterPtr(size_type i) const
reference to daughter at given position
virtual const Track * bestTrack() const
Definition: Candidate.h:247
virtual double pt() const =0
transverse momentum
T const * get() const
Returns C++ pointer to the item.
Definition: Ptr.h:160
assert(m_qm.get())
float neutralHadronEnergy() const
neutralHadronEnergy
Definition: Jet.h:629
int neutralMultiplicity() const
neutralMultiplicity
Definition: Jet.h:416
int chargedMultiplicity() const
chargedMultiplicity
Definition: PFJet.h:155
const Point & position() const
position
Definition: Vertex.h:99
Jets made from PFObjects.
Definition: PFJet.h:21
float neutralEmEnergy() const
neutralEmEnergy
Definition: PFJet.h:150
float chargedEmEnergy() const
chargedEmEnergy
Definition: Jet.h:636
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:433
virtual const Track * bestTrack() const
best track pointer
Definition: Muon.h:61
virtual size_t numberOfDaughters() const
number of daughters
virtual CandidatePtr sourceCandidatePtr(size_type i) const
PileupJetIdentifier internalId_
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
const PVAssoc fromPV(size_t ipv=0) const
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
virtual const reco::Track & pseudoTrack() const
Return reference to a pseudo track made with candidate kinematics, parameterized error for eta...
auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:28
void assign(const std::vector< float > &vec, float &a, float &b, float &c, float &d)
float trackWeight(const TREF &r) const
returns the weight with which a Track has contributed to the vertex-fit.
Definition: Vertex.h:73
virtual int charge() const =0
electric charge
virtual size_type numberOfSourceCandidatePtrs() const
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
T min(T a, T b)
Definition: MathUtil.h:58
virtual double mass() const final
mass
double ndof() const
Definition: Vertex.h:95
int neutralMultiplicity() const
neutralMultiplicity
Definition: PFJet.h:157
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:450
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:604
virtual int pdgId() const =0
PDG identifier.
void setPtEtaPhi(const reco::Candidate &p, float &pt, float &eta, float &phi)
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
bool isFake() const
Definition: Vertex.h:64
part
Definition: HCALResponse.h:20
Analysis-level calorimeter jet class.
Definition: Jet.h:77
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:39
virtual int nConstituents() const
of constituents
Definition: Jet.h:65
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:471
float neutralHadronEnergy() const
neutralHadronEnergy
Definition: PFJet.h:102
virtual double eta() const final
momentum pseudorapidity
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:586
Jet correctedJet(const std::string &level, const std::string &flavor="none", const std::string &set="") const
int chargedMultiplicity() const
chargedMultiplicity
Definition: Jet.h:657
float chargedHadronEnergy() const
chargedHadronEnergy
Definition: PFJet.h:98
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const final
transverse momentum
PileupJetIdentifier PileupJetIdAlgo::computeMva ( )

Definition at line 279 of file PileupJetIdAlgo.cc.

References internalId_, and runMva().

Referenced by PileupJetIdProducer::produce().

280 {
281  runMva();
283 }
PileupJetIdentifier internalId_
std::string PileupJetIdAlgo::dumpVariables ( ) const

Definition at line 643 of file PileupJetIdAlgo.cc.

References GenerateHcalLaserBadRunList::out, and variables_.

644 {
645  std::stringstream out;
646  for(variables_list_t::const_iterator it=variables_.begin();
647  it!=variables_.end(); ++it ) {
648  out << std::setw(15) << it->first << std::setw(3) << "="
649  << std::setw(5) << *it->second.first
650  << " (" << std::setw(5) << it->second.second << ")" << std::endl;
651  }
652  return out.str();
653 }
variables_list_t variables_
std::pair< int, int > PileupJetIdAlgo::getJetIdKey ( float  jetPt,
float  jetEta 
)

Definition at line 227 of file PileupJetIdAlgo.cc.

References funct::abs().

Referenced by computeCutIDflag(), and computeIDflag().

228 {
229  int ptId = 0;
230  if(jetPt >= 10 && jetPt < 20) ptId = 1;
231  if(jetPt >= 20 && jetPt < 30) ptId = 2;
232  if(jetPt >= 30 ) ptId = 3;
233 
234  int etaId = 0;
235  if(std::abs(jetEta) >= 2.5 && std::abs(jetEta) < 2.75) etaId = 1;
236  if(std::abs(jetEta) >= 2.75 && std::abs(jetEta) < 3.0 ) etaId = 2;
237  if(std::abs(jetEta) >= 3.0 && std::abs(jetEta) < 5.0 ) etaId = 3;
238 
239  return std::pair<int,int>(ptId,etaId);
240 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const variables_list_t& PileupJetIdAlgo::getVariables ( ) const
inline

const PileupJetIdentifier::variables_list_t & getVariables() const { return variables_; };

Definition at line 53 of file PileupJetIdAlgo.h.

References variables_.

53 { return variables_; };
variables_list_t variables_
void PileupJetIdAlgo::initVariables ( )
protected

Definition at line 671 of file PileupJetIdAlgo.cc.

References beta, puppiForMET_cff::dRMatch, PileupJetIdentifier::idFlag_, INIT_VARIABLE, internalId_, reco::btau::jetEta, reco::btau::jetPhi, reco::btau::jetPt, large_val, HLT_25ns10e33_v2_cff::mva, reco::tau::helpers::nCharged(), and rho.

Referenced by setup().

672 {
673  internalId_.idFlag_ = 0;
674  INIT_VARIABLE(mva , "", -100.);
675  //INIT_VARIABLE(jetPt , "jspt_1", 0.);
676  //INIT_VARIABLE(jetEta , "jseta_1", large_val);
677  INIT_VARIABLE(jetPt , "", 0.);
679  INIT_VARIABLE(jetPhi , "jsphi_1", large_val);
680  INIT_VARIABLE(jetM , "jm_1", 0.);
681 
682  INIT_VARIABLE(nCharged , "", 0.);
683  INIT_VARIABLE(nNeutrals , "", 0.);
684 
685  INIT_VARIABLE(chgEMfrac , "", 0.);
686  INIT_VARIABLE(neuEMfrac , "", 0.);
687  INIT_VARIABLE(chgHadrfrac, "", 0.);
688  INIT_VARIABLE(neuHadrfrac, "", 0.);
689 
690  INIT_VARIABLE(d0 , "jd0_1" , -1000.);
691  INIT_VARIABLE(dZ , "jdZ_1" , -1000.);
692  //INIT_VARIABLE(nParticles , "npart_1" , 0.);
693  INIT_VARIABLE(nParticles , "" , 0.);
694 
695  INIT_VARIABLE(leadPt , "lpt_1" , 0.);
696  INIT_VARIABLE(leadEta , "leta_1" , large_val);
697  INIT_VARIABLE(leadPhi , "lphi_1" , large_val);
698  INIT_VARIABLE(secondPt , "spt_1" , 0.);
699  INIT_VARIABLE(secondEta , "seta_1" , large_val);
700  INIT_VARIABLE(secondPhi , "sphi_1" , large_val);
701  INIT_VARIABLE(leadNeutPt , "lnept_1" , 0.);
702  INIT_VARIABLE(leadNeutEta, "lneeta_1" , large_val);
703  INIT_VARIABLE(leadNeutPhi, "lnephi_1" , large_val);
704  INIT_VARIABLE(leadEmPt , "lempt_1" , 0.);
705  INIT_VARIABLE(leadEmEta , "lemeta_1" , large_val);
706  INIT_VARIABLE(leadEmPhi , "lemphi_1" , large_val);
707  INIT_VARIABLE(leadChPt , "lchpt_1" , 0.);
708  INIT_VARIABLE(leadChEta , "lcheta_1" , large_val);
709  INIT_VARIABLE(leadChPhi , "lchphi_1" , large_val);
710  INIT_VARIABLE(leadFrac , "lLfr_1" , 0.);
711 
712  INIT_VARIABLE(dRLeadCent , "drlc_1" , 0.);
713  INIT_VARIABLE(dRLead2nd , "drls_1" , 0.);
714  INIT_VARIABLE(dRMean , "drm_1" , 0.);
715  INIT_VARIABLE(dRMean , "" , 0.);
716  INIT_VARIABLE(pull , "" , 0.);
717  INIT_VARIABLE(dRMeanNeut , "drmne_1" , 0.);
718  INIT_VARIABLE(dRMeanEm , "drem_1" , 0.);
719  INIT_VARIABLE(dRMeanCh , "drch_1" , 0.);
720  INIT_VARIABLE(dR2Mean , "" , 0.);
721 
722  INIT_VARIABLE(ptD , "", 0.);
723  INIT_VARIABLE(ptMean , "", 0.);
724  INIT_VARIABLE(ptRMS , "", 0.);
725  INIT_VARIABLE(pt2A , "", 0.);
726  INIT_VARIABLE(ptDCh , "", 0.);
727  INIT_VARIABLE(ptDNe , "", 0.);
728  INIT_VARIABLE(sumPt , "", 0.);
729  INIT_VARIABLE(sumChPt , "", 0.);
730  INIT_VARIABLE(sumNePt , "", 0.);
731 
732  INIT_VARIABLE(secondFrac ,"" ,0.);
733  INIT_VARIABLE(thirdFrac ,"" ,0.);
734  INIT_VARIABLE(fourthFrac ,"" ,0.);
735 
736  INIT_VARIABLE(leadChFrac ,"" ,0.);
737  INIT_VARIABLE(secondChFrac ,"" ,0.);
738  INIT_VARIABLE(thirdChFrac ,"" ,0.);
739  INIT_VARIABLE(fourthChFrac ,"" ,0.);
740 
741  INIT_VARIABLE(leadNeutFrac ,"" ,0.);
742  INIT_VARIABLE(secondNeutFrac ,"" ,0.);
743  INIT_VARIABLE(thirdNeutFrac ,"" ,0.);
744  INIT_VARIABLE(fourthNeutFrac ,"" ,0.);
745 
746  INIT_VARIABLE(leadEmFrac ,"" ,0.);
747  INIT_VARIABLE(secondEmFrac ,"" ,0.);
748  INIT_VARIABLE(thirdEmFrac ,"" ,0.);
749  INIT_VARIABLE(fourthEmFrac ,"" ,0.);
750 
751  INIT_VARIABLE(jetW ,"" ,1.);
752  INIT_VARIABLE(etaW ,"" ,1.);
753  INIT_VARIABLE(phiW ,"" ,1.);
754 
755  INIT_VARIABLE(majW ,"" ,1.);
756  INIT_VARIABLE(minW ,"" ,1.);
757 
758  INIT_VARIABLE(frac01 ,"" ,0.);
759  INIT_VARIABLE(frac02 ,"" ,0.);
760  INIT_VARIABLE(frac03 ,"" ,0.);
761  INIT_VARIABLE(frac04 ,"" ,0.);
762  INIT_VARIABLE(frac05 ,"" ,0.);
763  INIT_VARIABLE(frac06 ,"" ,0.);
764  INIT_VARIABLE(frac07 ,"" ,0.);
765 
766  INIT_VARIABLE(chFrac01 ,"" ,0.);
767  INIT_VARIABLE(chFrac02 ,"" ,0.);
768  INIT_VARIABLE(chFrac03 ,"" ,0.);
769  INIT_VARIABLE(chFrac04 ,"" ,0.);
770  INIT_VARIABLE(chFrac05 ,"" ,0.);
771  INIT_VARIABLE(chFrac06 ,"" ,0.);
772  INIT_VARIABLE(chFrac07 ,"" ,0.);
773 
774  INIT_VARIABLE(neutFrac01 ,"" ,0.);
775  INIT_VARIABLE(neutFrac02 ,"" ,0.);
776  INIT_VARIABLE(neutFrac03 ,"" ,0.);
777  INIT_VARIABLE(neutFrac04 ,"" ,0.);
778  INIT_VARIABLE(neutFrac05 ,"" ,0.);
779  INIT_VARIABLE(neutFrac06 ,"" ,0.);
780  INIT_VARIABLE(neutFrac07 ,"" ,0.);
781 
782  INIT_VARIABLE(emFrac01 ,"" ,0.);
783  INIT_VARIABLE(emFrac02 ,"" ,0.);
784  INIT_VARIABLE(emFrac03 ,"" ,0.);
785  INIT_VARIABLE(emFrac04 ,"" ,0.);
786  INIT_VARIABLE(emFrac05 ,"" ,0.);
787  INIT_VARIABLE(emFrac06 ,"" ,0.);
788  INIT_VARIABLE(emFrac07 ,"" ,0.);
789 
790  INIT_VARIABLE(beta ,"" ,0.);
791  INIT_VARIABLE(betaStar ,"" ,0.);
792  INIT_VARIABLE(betaClassic ,"" ,0.);
793  INIT_VARIABLE(betaStarClassic ,"" ,0.);
794 
795  INIT_VARIABLE(nvtx ,"" ,0.);
796  INIT_VARIABLE(rho ,"" ,0.);
797  INIT_VARIABLE(nTrueInt ,"" ,0.);
798 
799  INIT_VARIABLE(jetR , "", 0.);
800  INIT_VARIABLE(jetRchg , "", 0.);
801  INIT_VARIABLE(dRMatch , "", 0.);
802 
803 }
const double beta
#define INIT_VARIABLE(NAME, TMVANAME, VAL)
PileupJetIdentifier internalId_
unsigned int nCharged(const GenJet &jet)
const float large_val
Definition: MVAJetPuId.cc:14
const std::string PileupJetIdAlgo::method ( ) const
inline

Definition at line 41 of file PileupJetIdAlgo.h.

References tmvaMethod_.

41 { return tmvaMethod_; }
std::string tmvaMethod_
void PileupJetIdAlgo::resetVariables ( )
protected

Definition at line 656 of file PileupJetIdAlgo.cc.

References PileupJetIdentifier::idFlag_, internalId_, and variables_.

Referenced by computeIdVariables().

657 {
658  internalId_.idFlag_ = 0;
659  for(variables_list_t::iterator it=variables_.begin();
660  it!=variables_.end(); ++it ) {
661  *it->second.first = it->second.second;
662  }
663 }
PileupJetIdentifier internalId_
variables_list_t variables_
void PileupJetIdAlgo::runMva ( )
protected

Definition at line 205 of file PileupJetIdAlgo.cc.

References funct::abs(), computeCutIDflag(), computeIDflag(), cutBased_, etaBinnedWeights_, PileupJetIdentifier::idFlag_, internalId_, PileupJetIdentifier::mva_, reader_, reader_jteta_0_2p5_, reader_jteta_2p5_2p75_, reader_jteta_2p75_3_, reader_jteta_3_5_, and tmvaMethod_.

Referenced by computeIdVariables(), and computeMva().

206 {
207  if( cutBased_ ) {
208  internalId_.idFlag_ = computeCutIDflag(internalId_.betaStarClassic_,internalId_.dR2Mean_,internalId_.nvtx_,internalId_.jetPt_,internalId_.jetEta_);
209  } else {
210  if(std::abs(internalId_.jetEta_) >= 5.0) {
211  internalId_.mva_ = -2.;
212  } else {
213  if(etaBinnedWeights_){
214  if(std::abs(internalId_.jetEta_)<=2.5) internalId_.mva_ = reader_jteta_0_2p5_->EvaluateMVA( tmvaMethod_.c_str() );
215  else if(std::abs(internalId_.jetEta_)>2.5 && std::abs(internalId_.jetEta_)<=2.75) internalId_.mva_ = reader_jteta_2p5_2p75_->EvaluateMVA( tmvaMethod_.c_str() );
216  else if(std::abs(internalId_.jetEta_)>2.75 && std::abs(internalId_.jetEta_)<=3.) internalId_.mva_ = reader_jteta_2p75_3_->EvaluateMVA( tmvaMethod_.c_str() );
217  else internalId_.mva_ = reader_jteta_3_5_->EvaluateMVA( tmvaMethod_.c_str() );
218  } else {
219  internalId_.mva_ = reader_->EvaluateMVA( tmvaMethod_.c_str() );
220  }
221  }
223  }
224 }
std::string tmvaMethod_
int computeCutIDflag(float betaStarClassic, float dR2Mean, float nvtx, float jetPt, float jetEta)
std::unique_ptr< TMVA::Reader > reader_jteta_3_5_
std::unique_ptr< TMVA::Reader > reader_jteta_0_2p5_
PileupJetIdentifier internalId_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::unique_ptr< TMVA::Reader > reader_jteta_2p5_2p75_
int computeIDflag(float mva, float jetPt, float jetEta)
std::unique_ptr< TMVA::Reader > reader_jteta_2p75_3_
std::unique_ptr< TMVA::Reader > reader_
void PileupJetIdAlgo::set ( const PileupJetIdentifier id)

Definition at line 199 of file PileupJetIdAlgo.cc.

References internalId_.

Referenced by betterConfigParser.BetterConfigParser::getGeneral(), and PileupJetIdProducer::produce().

200 {
201  internalId_ = id;
202 }
PileupJetIdentifier internalId_
void PileupJetIdAlgo::setup ( void  )
protected

Definition at line 109 of file PileupJetIdAlgo.cc.

References assert(), bookReader(), cutBased_, initVariables(), runMvas_, tmvaMethod_, tmvaVariables_, tmvaVariables_jteta_0_3_, tmvaVariables_jteta_3_5_, USER, and version_.

Referenced by PileupJetIdAlgo().

110 {
111  initVariables();
112 
113  if( ! cutBased_ ){
114  assert( tmvaMethod_.empty() || ((! tmvaVariables_.empty() || ( !tmvaVariables_jteta_0_3_.empty() && !tmvaVariables_jteta_3_5_.empty() )) && version_ == USER) );
115  }
116  if(( ! cutBased_ ) && (runMvas_)) { bookReader();}
117 }
std::vector< std::string > tmvaVariables_
assert(m_qm.get())
std::string tmvaMethod_
std::vector< std::string > tmvaVariables_jteta_0_3_
std::vector< std::string > tmvaVariables_jteta_3_5_

Member Data Documentation

Float_t PileupJetIdAlgo::betaStarCut_[3][4][4]
protected

Definition at line 80 of file PileupJetIdAlgo.h.

Referenced by computeCutIDflag(), and PileupJetIdAlgo().

bool PileupJetIdAlgo::cutBased_
protected

Definition at line 75 of file PileupJetIdAlgo.h.

Referenced by PileupJetIdAlgo(), runMva(), and setup().

bool PileupJetIdAlgo::etaBinnedWeights_
protected

Definition at line 76 of file PileupJetIdAlgo.h.

Referenced by bookReader(), PileupJetIdAlgo(), and runMva().

Float_t PileupJetIdAlgo::impactParTkThreshod_
protected

Definition at line 74 of file PileupJetIdAlgo.h.

Referenced by PileupJetIdAlgo().

PileupJetIdentifier PileupJetIdAlgo::internalId_
protected
Float_t PileupJetIdAlgo::mvacut_[3][4][4]
protected

Definition at line 78 of file PileupJetIdAlgo.h.

Referenced by computeIDflag(), and PileupJetIdAlgo().

std::unique_ptr<TMVA::Reader> PileupJetIdAlgo::reader_
protected

Definition at line 67 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and runMva().

std::unique_ptr<TMVA::Reader> PileupJetIdAlgo::reader_jteta_0_2p5_
protected

Definition at line 67 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and runMva().

std::unique_ptr<TMVA::Reader> PileupJetIdAlgo::reader_jteta_2p5_2p75_
protected

Definition at line 67 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and runMva().

std::unique_ptr<TMVA::Reader> PileupJetIdAlgo::reader_jteta_2p75_3_
protected

Definition at line 67 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and runMva().

std::unique_ptr<TMVA::Reader> PileupJetIdAlgo::reader_jteta_3_5_
protected

Definition at line 67 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and runMva().

Float_t PileupJetIdAlgo::rmsCut_[3][4][4]
protected

Definition at line 79 of file PileupJetIdAlgo.h.

Referenced by computeCutIDflag(), and PileupJetIdAlgo().

bool PileupJetIdAlgo::runMvas_
protected

Definition at line 77 of file PileupJetIdAlgo.h.

Referenced by computeIdVariables(), PileupJetIdAlgo(), and setup().

std::string PileupJetIdAlgo::tmvaMethod_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), method(), PileupJetIdAlgo(), runMva(), and setup().

std::map<std::string,std::string> PileupJetIdAlgo::tmvaNames_
protected

Definition at line 71 of file PileupJetIdAlgo.h.

Referenced by bookReader().

std::vector<std::string> PileupJetIdAlgo::tmvaSpectators_
protected

Definition at line 70 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

std::vector<std::string> PileupJetIdAlgo::tmvaVariables_
protected

Definition at line 69 of file PileupJetIdAlgo.h.

Referenced by bookReader(), PileupJetIdAlgo(), and setup().

std::vector<std::string> PileupJetIdAlgo::tmvaVariables_jteta_0_3_
protected

Definition at line 69 of file PileupJetIdAlgo.h.

Referenced by bookReader(), PileupJetIdAlgo(), and setup().

std::vector<std::string> PileupJetIdAlgo::tmvaVariables_jteta_3_5_
protected

Definition at line 69 of file PileupJetIdAlgo.h.

Referenced by bookReader(), PileupJetIdAlgo(), and setup().

std::string PileupJetIdAlgo::tmvaWeights_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

std::string PileupJetIdAlgo::tmvaWeights_jteta_0_2p5_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

std::string PileupJetIdAlgo::tmvaWeights_jteta_2p5_2p75_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

std::string PileupJetIdAlgo::tmvaWeights_jteta_2p75_3_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

std::string PileupJetIdAlgo::tmvaWeights_jteta_3_5_
protected

Definition at line 68 of file PileupJetIdAlgo.h.

Referenced by bookReader(), and PileupJetIdAlgo().

variables_list_t PileupJetIdAlgo::variables_
protected

Definition at line 65 of file PileupJetIdAlgo.h.

Referenced by bookReader(), dumpVariables(), getVariables(), and resetVariables().

Int_t PileupJetIdAlgo::version_
protected

Definition at line 73 of file PileupJetIdAlgo.h.

Referenced by PileupJetIdAlgo(), and setup().