-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Trackjets as seeds of JetPlusTrack at RECO and MINIAOD (#30430)
* TrackJet seeds adding * TrackJet seeds adding * TrackJet seeds adding * TrackJet seeds adding * TrackJet seeding * Make cleaning, i.e. change comaprison of collection size with 0 to empty() clean Buildfile.xml * Applied patch https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-30160/15988/code-format.patch e.g. curl https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-30160/15988/code-format.patch | patch -p1 You can also run scram build code-format Provide some additional clean-up: introduce variable dRcone instead of 0.4 * Add missed flag in configurator * Remove *.orig *.rej * Add deltaR method, change hardcoded cuts to configurable * Changes proposed by code-format * Chnage to deltaR and deltaPhi * Code-formatting after changes * Changes according new rules * Removing RecoJets/JetPlusTracks/plugins/TrackFromPFProducer * code-format * Change to auto for variables, code format, changes in python * Add PAT libraries * Make changes in PATJetPlusTrackCorrections_cff.py and additional cleaning * Code-formatting * Format changes * Adding missing configurator * Add test configurator * Change output root file * Change in PAT JetPlusTrackProducer python
- Loading branch information
Showing
16 changed files
with
801 additions
and
503 deletions.
There are no files selected for viewing
76 changes: 76 additions & 0 deletions
76
CommonTools/RecoAlgos/plugins/TrackFromPackedCandidateProducer.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/** \class TrackProducer | ||
* Produce Tracks from TrackCandidates | ||
* | ||
*/ | ||
// | ||
// Original Author: Olga Kodolova,40 R-A12,+41227671273, | ||
// Created: Fri Feb 19 10:14:02 CET 2010 | ||
// | ||
// | ||
|
||
// system include files | ||
#include <memory> | ||
// user include files | ||
#include "FWCore/Framework/interface/Frameworkfwd.h" | ||
#include "FWCore/Framework/interface/Event.h" | ||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "FWCore/Utilities/interface/isFinite.h" | ||
#include "FWCore/Framework/interface/global/EDProducer.h" | ||
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" | ||
#include "DataFormats/PatCandidates/interface/PackedCandidate.h" | ||
#include "DataFormats/TrackReco/interface/TrackFwd.h" | ||
#include "DataFormats/TrackReco/interface/Track.h" | ||
|
||
class TrackFromPackedCandidateProducer : public edm::global::EDProducer<> { | ||
public: | ||
/// Constructor | ||
explicit TrackFromPackedCandidateProducer(const edm::ParameterSet& iConfig); | ||
|
||
/// fill descriptions | ||
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); | ||
|
||
/// Implementation of produce method | ||
void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; | ||
|
||
private: | ||
const edm::EDGetTokenT<std::vector<pat::PackedCandidate> > tokenPFCandidates_; | ||
}; | ||
|
||
TrackFromPackedCandidateProducer::TrackFromPackedCandidateProducer(const edm::ParameterSet& iConfig) | ||
: tokenPFCandidates_( | ||
consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("PFCandidates"))) { | ||
produces<reco::TrackCollection>(); | ||
} | ||
|
||
void TrackFromPackedCandidateProducer::fillDescriptions(edm::ConfigurationDescriptions& iDescriptions) { | ||
edm::ParameterSetDescription desc; | ||
desc.add<edm::InputTag>("PFCandidates"); | ||
iDescriptions.addWithDefaultLabel(desc); | ||
} | ||
|
||
void TrackFromPackedCandidateProducer::produce(edm::StreamID theStreamID, | ||
edm::Event& theEvent, | ||
const edm::EventSetup& setup) const { | ||
// | ||
// create empty output collections | ||
// | ||
auto outputTColl = std::make_unique<reco::TrackCollection>(); | ||
auto const pfCandidates = theEvent.get(tokenPFCandidates_); | ||
outputTColl->reserve(pfCandidates.size()); | ||
|
||
for (auto const& pf : pfCandidates) { | ||
if (pf.hasTrackDetails()) { | ||
const reco::Track& mytrack = pf.pseudoTrack(); | ||
using namespace edm; | ||
if (isNotFinite(mytrack.pt()) || isNotFinite(mytrack.eta()) || isNotFinite(mytrack.phi())) | ||
continue; | ||
outputTColl->push_back(mytrack); | ||
} | ||
} | ||
//put everything in the event | ||
theEvent.put(std::move(outputTColl)); | ||
} | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
DEFINE_FWK_MODULE(TrackFromPackedCandidateProducer); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
187 changes: 187 additions & 0 deletions
187
RecoJets/JetPlusTracks/plugins/JetPlusTrackAddonSeedProducer.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
// -*- C++ -*- | ||
// | ||
// Package: JetPlusTracks | ||
// Class: JetPlusTrackAddonSeedProducer | ||
// | ||
/**\class JetPlusTrackAddonSeedProducer JetPlusTrackAddonSeedProducer.cc | ||
Description: [one line class summary] | ||
Implementation: | ||
[Notes on implementation] | ||
*/ | ||
// | ||
// Original Author: Olga Kodolova,40 R-A12,+41227671273, | ||
// Created: Fri Feb 19 10:14:02 CET 2010 | ||
// | ||
// | ||
|
||
// system include files | ||
#include <memory> | ||
|
||
// user include files | ||
|
||
#include "FWCore/Framework/interface/Frameworkfwd.h" | ||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "FWCore/Framework/interface/Event.h" | ||
#include "FWCore/Framework/interface/stream/EDProducer.h" | ||
#include "FWCore/ParameterSet/interface/ParameterSet.h" | ||
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" | ||
#include "FWCore/Utilities/interface/InputTag.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
|
||
#include "DataFormats/JetReco/interface/CaloJetCollection.h" | ||
#include "DataFormats/JetReco/interface/CaloJet.h" | ||
#include "DataFormats/JetReco/interface/TrackJetCollection.h" | ||
#include "DataFormats/JetReco/interface/TrackJet.h" | ||
#include "DataFormats/TrackReco/interface/TrackFwd.h" | ||
#include "DataFormats/TrackReco/interface/Track.h" | ||
#include "DataFormats/PatCandidates/interface/PackedCandidate.h" | ||
#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" | ||
|
||
#include "DataFormats/Math/interface/deltaPhi.h" | ||
#include "DataFormats/Math/interface/deltaR.h" | ||
|
||
#include <string> | ||
|
||
using namespace std; | ||
class JetPlusTrackAddonSeedProducer : public edm::stream::EDProducer<> { | ||
public: | ||
explicit JetPlusTrackAddonSeedProducer(const edm::ParameterSet&); | ||
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); | ||
void produce(edm::Event&, const edm::EventSetup&) override; | ||
|
||
private: | ||
const double dRcone_; | ||
const bool usePAT_; | ||
const edm::EDGetTokenT<edm::View<reco::CaloJet> > input_jets_token_; | ||
const edm::EDGetTokenT<edm::View<reco::TrackJet> > input_trackjets_token_; | ||
const edm::EDGetTokenT<reco::VertexCollection> input_vertex_token_; | ||
const edm::EDGetTokenT<std::vector<pat::PackedCandidate> > tokenPFCandidates_; | ||
const edm::EDGetTokenT<CaloTowerCollection> input_ctw_token_; | ||
}; | ||
|
||
JetPlusTrackAddonSeedProducer::JetPlusTrackAddonSeedProducer(const edm::ParameterSet& iConfig) | ||
: dRcone_(iConfig.getParameter<double>("dRcone")), | ||
usePAT_(iConfig.getParameter<bool>("UsePAT")), | ||
input_jets_token_(consumes<edm::View<reco::CaloJet> >(iConfig.getParameter<edm::InputTag>("srcCaloJets"))), | ||
input_trackjets_token_(consumes<edm::View<reco::TrackJet> >(iConfig.getParameter<edm::InputTag>("srcTrackJets"))), | ||
input_vertex_token_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("srcPVs"))), | ||
tokenPFCandidates_(consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("PFCandidates"))), | ||
input_ctw_token_(consumes<CaloTowerCollection>(iConfig.getParameter<edm::InputTag>("towerMaker"))) { | ||
//register your products | ||
produces<reco::CaloJetCollection>(); | ||
} | ||
|
||
void JetPlusTrackAddonSeedProducer::fillDescriptions(edm::ConfigurationDescriptions& iDescriptions) { | ||
edm::ParameterSetDescription desc; | ||
desc.add<double>("dRcone", 0.4); | ||
desc.add<bool>("UsePAT", false); | ||
desc.add<edm::InputTag>("srcCaloJets", edm::InputTag("ak4CaloJets")); | ||
desc.add<edm::InputTag>("srcTrackJets", edm::InputTag("ak4TrackJets")); | ||
desc.add<edm::InputTag>("srcPVs", edm::InputTag("primaryVertex")); | ||
desc.add<edm::InputTag>("PFCandidates", edm::InputTag("PFCandidates")); | ||
desc.add<edm::InputTag>("towerMaker", edm::InputTag("towerMaker")); | ||
iDescriptions.addWithDefaultLabel(desc); | ||
} | ||
|
||
// ------------ method called to produce the data ------------ | ||
void JetPlusTrackAddonSeedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { | ||
using namespace edm; | ||
// get stuff from Event | ||
auto const& jets = iEvent.get(input_jets_token_); | ||
auto const& jetsTrackJets = iEvent.get(input_trackjets_token_); | ||
auto pCaloOut = std::make_unique<reco::CaloJetCollection>(); | ||
|
||
for (auto const& jet : jetsTrackJets) { | ||
int iflag = 0; | ||
for (auto const& oldjet : jets) { | ||
double dr2 = deltaR2(jet, oldjet); | ||
if (dr2 < dRcone_ * dRcone_) { | ||
iflag = 1; | ||
} | ||
} // Calojets | ||
|
||
if (iflag == 1) | ||
continue; | ||
double caloen = 0.; | ||
double hadinho = 0.; | ||
double hadinhb = 0.; | ||
double hadinhe = 0.; | ||
double hadinhf = 0.; | ||
double emineb = 0.; | ||
double eminee = 0.; | ||
double eminhf = 0.; | ||
double eefraction = 0.; | ||
double hhfraction = 0.; | ||
int ncand = 0; | ||
|
||
if (usePAT_) { | ||
auto const& pfCandidates = iEvent.get(tokenPFCandidates_); | ||
for (auto const& pf : pfCandidates) { | ||
double dr2 = deltaR2(jet, pf); | ||
if (dr2 > dRcone_ * dRcone_) | ||
continue; | ||
// jetconstit | ||
caloen = caloen + pf.energy() * pf.caloFraction(); | ||
hadinho += 0.; | ||
if (std::abs(pf.eta()) <= 1.4) { | ||
hadinhb += pf.energy() * pf.caloFraction() * pf.hcalFraction(); | ||
emineb += pf.energy() * pf.caloFraction() * (1. - pf.hcalFraction()); | ||
} else if (std::abs(pf.eta()) < 3.) { | ||
hadinhe += pf.energy() * pf.caloFraction() * pf.hcalFraction(); | ||
eminee += pf.energy() * pf.caloFraction() * (1. - pf.hcalFraction()); | ||
} else { | ||
hadinhf += pf.energy() * pf.caloFraction() * pf.hcalFraction(); | ||
eminhf += pf.energy() * pf.caloFraction() * (1. - pf.hcalFraction()); | ||
} | ||
ncand++; | ||
} // pfcandidates | ||
} else { | ||
auto const& cts = iEvent.get(input_ctw_token_); | ||
for (auto const& ct : cts) { | ||
double dr2 = deltaR2(jet, ct); | ||
if (dr2 > dRcone_ * dRcone_) | ||
continue; | ||
caloen = caloen + ct.energy(); | ||
hadinho += ct.energyInHO(); | ||
hadinhb += ct.energyInHB(); | ||
hadinhe += ct.energyInHE(); | ||
hadinhf += 0.5 * ct.energyInHF(); | ||
emineb += ct.energy() - ct.energyInHB() - ct.energyInHO(); | ||
eminee += ct.energy() - ct.energyInHE(); | ||
eminhf += 0.5 * ct.energyInHF(); | ||
ncand++; | ||
} | ||
} | ||
eefraction = (emineb + eminee) / caloen; | ||
hhfraction = (hadinhb + hadinhe + hadinhf + hadinho) / caloen; | ||
|
||
double trackp = jet.p(); | ||
if (caloen <= 0.) | ||
caloen = 0.001; | ||
math::XYZTLorentzVector pcalo4(caloen * jet.p4() / trackp); | ||
reco::CaloJet::Specific calospe; | ||
calospe.mTowersArea = -1 * ncand; | ||
calospe.mHadEnergyInHO = hadinho; | ||
calospe.mHadEnergyInHB = hadinhb; | ||
calospe.mHadEnergyInHE = hadinhe; | ||
calospe.mHadEnergyInHF = hadinhf; | ||
calospe.mEmEnergyInEB = emineb; | ||
calospe.mEmEnergyInEE = eminee; | ||
calospe.mEmEnergyInHF = eminhf; | ||
calospe.mEnergyFractionEm = eefraction / caloen; | ||
calospe.mEnergyFractionHadronic = hhfraction / caloen; | ||
|
||
reco::CaloJet mycalo(pcalo4, jet.primaryVertex()->position(), calospe); | ||
mycalo.setJetArea(M_PI * dRcone_ * dRcone_); | ||
pCaloOut->push_back(mycalo); | ||
|
||
} // trackjets | ||
iEvent.put(std::move(pCaloOut)); | ||
} | ||
|
||
//define this as a plug-in | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
|
||
DEFINE_FWK_MODULE(JetPlusTrackAddonSeedProducer); |
Oops, something went wrong.