CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
PileupJetIdAlgo Class Reference

#include <PileupJetIdAlgo.h>

Classes

class  AlgoGBRForestsAndConstants
 

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)
 
float getMVAval (const std::vector< std::string > &, const std::unique_ptr< const GBRForest > &)
 
const variables_list_tgetVariables () const
 const PileupJetIdentifier::variables_list_t & getVariables() const { return variables_; }; More...
 
const std::string method () const
 
 PileupJetIdAlgo (AlgoGBRForestsAndConstants const *cache)
 
void set (const PileupJetIdentifier &)
 
 ~PileupJetIdAlgo ()
 

Protected Member Functions

void initVariables ()
 
void resetVariables ()
 
void runMva ()
 

Protected Attributes

AlgoGBRForestsAndConstants const * cache_
 
PileupJetIdentifier internalId_
 
variables_list_t variables_
 

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 46 of file PileupJetIdAlgo.h.

Member Enumeration Documentation

Enumerator
USER 
PHILv0 

Definition at line 29 of file PileupJetIdAlgo.h.

Constructor & Destructor Documentation

PileupJetIdAlgo::PileupJetIdAlgo ( AlgoGBRForestsAndConstants const *  cache)

Definition at line 134 of file PileupJetIdAlgo.cc.

References initVariables().

134  :
135  cache_(cache) {
136 
137  initVariables();
138 }
AlgoGBRForestsAndConstants const * cache_
def cache(function)
PileupJetIdAlgo::~PileupJetIdAlgo ( )

Definition at line 141 of file PileupJetIdAlgo.cc.

142 {
143 }

Member Function Documentation

int PileupJetIdAlgo::computeCutIDflag ( float  betaStarClassic,
float  dR2Mean,
float  nvtx,
float  jetPt,
float  jetEta 
)

Definition at line 223 of file PileupJetIdAlgo.cc.

References getJetIdKey(), PileupJetIdentifier::kLoose, PileupJetIdentifier::kMedium, PileupJetIdentifier::kTight, and cmsBatch::log.

Referenced by runMva().

224 {
225  std::pair<int,int> jetIdKey = getJetIdKey(jetPt,jetEta);
226  float betaStarModified = betaStarClassic/log(nvtx-0.64);
227  int idFlag(0);
228  if(betaStarModified < cache_->betaStarCut()[PileupJetIdentifier::kTight ][jetIdKey.first][jetIdKey.second] &&
229  dR2Mean < cache_->rmsCut() [PileupJetIdentifier::kTight ][jetIdKey.first][jetIdKey.second]
230  ) idFlag += 1 << PileupJetIdentifier::kTight;
231 
232  if(betaStarModified < cache_->betaStarCut()[PileupJetIdentifier::kMedium ][jetIdKey.first][jetIdKey.second] &&
233  dR2Mean < cache_->rmsCut() [PileupJetIdentifier::kMedium ][jetIdKey.first][jetIdKey.second]
234  ) idFlag += 1 << PileupJetIdentifier::kMedium;
235 
236  if(betaStarModified < cache_->betaStarCut()[PileupJetIdentifier::kLoose ][jetIdKey.first][jetIdKey.second] &&
237  dR2Mean < cache_->rmsCut() [PileupJetIdentifier::kLoose ][jetIdKey.first][jetIdKey.second]
238  ) idFlag += 1 << PileupJetIdentifier::kLoose;
239  return idFlag;
240 }
std::pair< int, int > getJetIdKey(float jetPt, float jetEta)
int PileupJetIdAlgo::computeIDflag ( float  mva,
float  jetPt,
float  jetEta 
)

Definition at line 242 of file PileupJetIdAlgo.cc.

References getJetIdKey().

Referenced by runMva().

243 {
244  std::pair<int,int> jetIdKey = getJetIdKey(jetPt,jetEta);
245  return computeIDflag(mva,jetIdKey.first,jetIdKey.second);
246 }
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 267 of file PileupJetIdAlgo.cc.

References funct::abs(), assign(), reco::Muon::bestTrack(), reco::Candidate::bestTrack(), cache_, 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(), pat::PackedCandidate::dxy(), reco::TrackBase::dz(), pat::PackedCandidate::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(), mps_fire::i, internalId_, reco::Vertex::isFake(), edm::Ref< C, T, F >::isNonnull(), 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(), jetUpdater_cfi::printWarning, 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(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::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_, TtFullHadEvtBuilder_cfi::sumPt, PileupJetIdentifier::sumPt_, std::swap(), PileupJetIdentifier::thirdChFrac_, PileupJetIdentifier::thirdEmFrac_, PileupJetIdentifier::thirdFrac_, PileupJetIdentifier::thirdNeutFrac_, reco::PFCandidate::trackRef(), reco::Vertex::trackWeight(), and mps_merge::weight.

Referenced by PileupJetIdProducer::produce().

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

Definition at line 260 of file PileupJetIdAlgo.cc.

References internalId_, and runMva().

Referenced by PileupJetIdProducer::produce().

261 {
262  runMva();
264 }
PileupJetIdentifier internalId_
std::string PileupJetIdAlgo::dumpVariables ( ) const

Definition at line 647 of file PileupJetIdAlgo.cc.

References MillePedeFileConverter_cfg::out, and variables_.

Referenced by method().

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

Definition at line 208 of file PileupJetIdAlgo.cc.

References funct::abs().

Referenced by computeCutIDflag(), and computeIDflag().

209 {
210  int ptId = 0;
211  if(jetPt >= 10 && jetPt < 20) ptId = 1;
212  if(jetPt >= 20 && jetPt < 30) ptId = 2;
213  if(jetPt >= 30 ) ptId = 3;
214 
215  int etaId = 0;
216  if(std::abs(jetEta) >= 2.5 && std::abs(jetEta) < 2.75) etaId = 1;
217  if(std::abs(jetEta) >= 2.75 && std::abs(jetEta) < 3.0 ) etaId = 2;
218  if(std::abs(jetEta) >= 3.0 && std::abs(jetEta) < 5.0 ) etaId = 3;
219 
220  return std::pair<int,int>(ptId,etaId);
221 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float PileupJetIdAlgo::getMVAval ( const std::vector< std::string > &  varList,
const std::unique_ptr< const GBRForest > &  reader 
)

Definition at line 170 of file PileupJetIdAlgo.cc.

References JetChargeProducer_cfi::var, and variables_.

Referenced by runMva().

171 {
172  std::vector<float> vars;
173  for(std::vector<std::string>::const_iterator it=varList.begin(); it!=varList.end(); ++it) {
174  std::pair<float *,float> var = variables_.at(*it);
175  vars.push_back( *var.first );
176  }
177  return reader->GetClassifier(vars.data());
178 }
variables_list_t variables_
const variables_list_t& PileupJetIdAlgo::getVariables ( ) const
inline

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

Definition at line 54 of file PileupJetIdAlgo.h.

References variables_.

Referenced by PileupJetIdAlgo::AlgoGBRForestsAndConstants::getMVA().

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

Definition at line 675 of file PileupJetIdAlgo.cc.

References pfBoostedDoubleSVAK8TagInfos_cfi::beta, BeamSpotFakeParameters_cfi::betaStar, allConversions_cfi::d0, METSignificanceParams_cfi::dRMatch, PileupJetIdentifier::idFlag_, INIT_VARIABLE, internalId_, reco::btau::jetEta, reco::btau::jetPhi, reco::btau::jetPt, large_val, DetachedQuadStep_cff::mva, hpstanc_transforms::nCharged, jets_cff::ptD, rho, and TtFullHadEvtBuilder_cfi::sumPt.

Referenced by PileupJetIdAlgo().

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

Definition at line 42 of file PileupJetIdAlgo.h.

References cache_, dumpVariables(), AlCaHLTBitMon_QueryRunRegistry::string, and PileupJetIdAlgo::AlgoGBRForestsAndConstants::tmvaMethod().

42 { return cache_->tmvaMethod(); }
AlgoGBRForestsAndConstants const * cache_
std::string const & tmvaMethod() const
void PileupJetIdAlgo::resetVariables ( )
protected

Definition at line 660 of file PileupJetIdAlgo.cc.

References PileupJetIdentifier::idFlag_, internalId_, and variables_.

Referenced by computeIdVariables().

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

Definition at line 180 of file PileupJetIdAlgo.cc.

References funct::abs(), cache_, computeCutIDflag(), computeIDflag(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::cutBased(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::etaBinnedWeights(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::etaReader(), getMVAval(), PileupJetIdentifier::idFlag_, internalId_, PileupJetIdAlgo::AlgoGBRForestsAndConstants::jEtaMax(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::jEtaMin(), PileupJetIdentifier::mva_, PileupJetIdAlgo::AlgoGBRForestsAndConstants::nEtaBins(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::reader(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::tmvaEtaVariables(), PileupJetIdAlgo::AlgoGBRForestsAndConstants::tmvaVariables(), and findQualityFiles::v.

Referenced by computeIdVariables(), and computeMva().

181 {
182  if( cache_->cutBased() ) {
183  internalId_.idFlag_ = computeCutIDflag(internalId_.betaStarClassic_,internalId_.dR2Mean_,internalId_.nvtx_,internalId_.jetPt_,internalId_.jetEta_);
184  } else {
185  if(std::abs(internalId_.jetEta_) >= 5.0) {
186  internalId_.mva_ = -2.;
187  } else {
188  if(cache_->etaBinnedWeights()){
189  if(std::abs(internalId_.jetEta_) > cache_->jEtaMax().at(cache_->nEtaBins() - 1)) {
190  internalId_.mva_ = -2.;
191  } else {
192  for(int v = 0; v < cache_->nEtaBins(); v++){
193  if(std::abs(internalId_.jetEta_) >= cache_->jEtaMin().at(v) && std::abs(internalId_.jetEta_) < cache_->jEtaMax().at(v)) {
195  break;
196  }
197  }
198  }
199  } else {
201  }
202  }
204  }
205 }
AlgoGBRForestsAndConstants const * cache_
std::vector< double > const & jEtaMin() const
int computeCutIDflag(float betaStarClassic, float dR2Mean, float nvtx, float jetPt, float jetEta)
std::vector< double > const & jEtaMax() const
PileupJetIdentifier internalId_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::unique_ptr< const GBRForest > const & reader() const
int computeIDflag(float mva, float jetPt, float jetEta)
std::vector< std::unique_ptr< const GBRForest > > const & etaReader() const
std::vector< std::vector< std::string > > const & tmvaEtaVariables() const
std::vector< std::string > const & tmvaVariables() const
float getMVAval(const std::vector< std::string > &, const std::unique_ptr< const GBRForest > &)
void PileupJetIdAlgo::set ( const PileupJetIdentifier id)

Definition at line 163 of file PileupJetIdAlgo.cc.

References triggerObjects_cff::id, and internalId_.

Referenced by PileupJetIdProducer::produce().

164 {
165  internalId_ = id;
166 }
PileupJetIdentifier internalId_

Member Data Documentation

AlgoGBRForestsAndConstants const* PileupJetIdAlgo::cache_
protected

Definition at line 118 of file PileupJetIdAlgo.h.

Referenced by computeIDflag(), computeIdVariables(), method(), and runMva().

PileupJetIdentifier PileupJetIdAlgo::internalId_
protected
variables_list_t PileupJetIdAlgo::variables_
protected

Definition at line 117 of file PileupJetIdAlgo.h.

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