Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Updates to MiniAOD to satisfy JME/SMP/B2G requests for NanoAOD #20638

Merged
merged 7 commits into from Oct 5, 2017
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc
Expand Up @@ -17,6 +17,7 @@
#include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h"
#include "DataFormats/JetReco/interface/Jet.h"
#include "DataFormats/JetReco/interface/PFJet.h"
#include "DataFormats/JetReco/interface/GenJet.h"
#include "DataFormats/PatCandidates/interface/Jet.h"
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
#include "DataFormats/JetReco/interface/CaloJet.h"
Expand Down Expand Up @@ -85,9 +86,11 @@ class JetConstituentSelector : public edm::stream::EDProducer<> {
};

using PFJetConstituentSelector = JetConstituentSelector<reco::PFJet>;
using GenJetConstituentSelector = JetConstituentSelector<reco::GenJet, std::vector<edm::FwdPtr<reco::GenParticle>>>;
using PatJetConstituentSelector = JetConstituentSelector<pat::Jet, std::vector<edm::FwdPtr<pat::PackedCandidate>>>;
using MiniAODJetConstituentSelector = JetConstituentSelector<reco::PFJet, std::vector<edm::FwdPtr<pat::PackedCandidate>>>;

DEFINE_FWK_MODULE(PFJetConstituentSelector);
DEFINE_FWK_MODULE(GenJetConstituentSelector);
DEFINE_FWK_MODULE(PatJetConstituentSelector);
DEFINE_FWK_MODULE(MiniAODJetConstituentSelector);
5 changes: 5 additions & 0 deletions DataFormats/HepMCCandidate/src/classes.h
Expand Up @@ -5,6 +5,7 @@
#include "DataFormats/Common/interface/RefVectorHolder.h"
#include "DataFormats/Common/interface/VectorHolder.h"
#include "DataFormats/Common/interface/ValueMap.h"
#include "DataFormats/Common/interface/FwdPtr.h"
#include "DataFormats/HepMCCandidate/interface/PdfInfo.h"
#include "DataFormats/HepMCCandidate/interface/FlavorHistory.h"
#include "DataFormats/HepMCCandidate/interface/FlavorHistoryEvent.h"
Expand Down Expand Up @@ -40,6 +41,10 @@ namespace DataFormats_HepMCCandidate {
edm::RefVectorIterator<std::vector<reco::GenParticle>,reco::GenParticle,edm::refhelper::FindUsingAdvance<std::vector<reco::GenParticle>,reco::GenParticle> > rvigp;
edm::ValueMap<edm::Ref<std::vector<reco::GenParticle>,reco::GenParticle,edm::refhelper::FindUsingAdvance<std::vector<reco::GenParticle>,reco::GenParticle> > > vmgr;
edm::Wrapper<edm::ValueMap<edm::Ref<std::vector<reco::GenParticle>,reco::GenParticle,edm::refhelper::FindUsingAdvance<std::vector<reco::GenParticle>,reco::GenParticle> > > > wvmgr;
edm::Ptr<reco::GenParticle> gpptr;
edm::FwdPtr<reco::GenParticle> gpfp;
std::vector<edm::FwdPtr<reco::GenParticle>> vgpfp;
edm::Wrapper<std::vector<edm::FwdPtr<reco::GenParticle>>> wvgpfp;
};
}

5 changes: 5 additions & 0 deletions DataFormats/HepMCCandidate/src/classes_def.xml
Expand Up @@ -11,12 +11,17 @@
<class name="edm::Association<std::vector<reco::GenParticle> >" />
<class name="edm::Wrapper<edm::Association<std::vector<reco::GenParticle> > >" />


<class name="reco::GenParticleRef" />
<class name="reco::GenParticleRefProd" />
<class name="reco::GenParticleRefVector" />
<class name="std::vector<std::vector<reco::GenParticleRef> >"/>
<class name="std::vector<reco::GenParticleRef>" />
<class name="edm::Wrapper<reco::GenParticleRefVector>" />
<class name="edm::Ptr<reco::GenParticle>" />
<class name="edm::FwdPtr<reco::GenParticle>" />
<class name="std::vector<edm::FwdPtr<reco::GenParticle> >" />
<class name="edm::Wrapper<std::vector<edm::FwdPtr<reco::GenParticle> > >" />
<class name="edm::reftobase::Holder<reco::Candidate, reco::GenParticleRef>" />
<class name="edm::reftobase::RefHolder<reco::GenParticleRef>" />
<class name="edm::reftobase::VectorHolder<reco::Candidate, reco::GenParticleRefVector>" />
Expand Down
4 changes: 4 additions & 0 deletions DataFormats/PatCandidates/src/classes_def_objects.xml
Expand Up @@ -416,6 +416,10 @@
<class name="edm::Wrapper<edm::FwdPtr<pat::PackedCandidate> >" />
<class name="edm::Wrapper<std::vector<edm::FwdPtr<pat::PackedCandidate> > >" />

<class name="edm::FwdPtr<pat::PackedGenParticle>" />
<class name="std::vector<edm::FwdPtr<pat::PackedGenParticle> >" />
<class name="edm::Wrapper<edm::FwdPtr<pat::PackedGenParticle> >" />
<class name="edm::Wrapper<std::vector<edm::FwdPtr<pat::PackedGenParticle> > >" />

<!-- PAT Object Collections -->
<class name="std::vector<pat::Electron>" />
Expand Down
6 changes: 6 additions & 0 deletions DataFormats/PatCandidates/src/classes_objects.h
Expand Up @@ -175,6 +175,12 @@ namespace DataFormats_PatCandidates {
std::vector< edm::FwdPtr<pat::PackedCandidate> > v_fwdptr_pc;
edm::Wrapper< std::vector< edm::FwdPtr<pat::PackedCandidate> > > wv_fwdptr_pc;

edm::FwdPtr<pat::PackedGenParticle> fwdptr_pgp;
edm::Wrapper< edm::FwdPtr<pat::PackedGenParticle> > w_fwdptr_pgp;
std::vector< edm::FwdPtr<pat::PackedGenParticle> > v_fwdptr_pgp;
edm::Wrapper< std::vector< edm::FwdPtr<pat::PackedGenParticle> > > wv_fwdptr_pgp;


edm::Wrapper<edm::Association<pat::PackedCandidateCollection > > w_asso_pc;
edm::Wrapper<edm::Association<reco::PFCandidateCollection > > w_asso_pfc;
edm::Wrapper<edm::Association<std::vector<pat::PackedGenParticle> > > asso_pgp;
Expand Down
19 changes: 16 additions & 3 deletions PhysicsTools/PatAlgos/plugins/PATGenJetSlimmer.cc
Expand Up @@ -25,15 +25,17 @@ namespace pat {
class PATGenJetSlimmer : public edm::stream::EDProducer<> {
public:
explicit PATGenJetSlimmer(const edm::ParameterSet & iConfig);
virtual ~PATGenJetSlimmer() { }
~PATGenJetSlimmer() override { }

virtual void produce(edm::Event & iEvent, const edm::EventSetup & iSetup);
void produce(edm::Event & iEvent, const edm::EventSetup & iSetup) override;

private:
const edm::EDGetTokenT<edm::View<reco::GenJet> > src_;
const edm::EDGetTokenT<edm::Association<std::vector<pat::PackedGenParticle> > > gp2pgp_;

const StringCutObjectSelector<reco::GenJet> cut_;
const StringCutObjectSelector<reco::GenJet> cutLoose_;
const unsigned nLoose_;

/// reset daughters to an empty vector
const bool clearDaughters_;
Expand All @@ -48,6 +50,8 @@ pat::PATGenJetSlimmer::PATGenJetSlimmer(const edm::ParameterSet & iConfig) :
src_(consumes<edm::View<reco::GenJet> >(iConfig.getParameter<edm::InputTag>("src"))),
gp2pgp_(consumes<edm::Association<std::vector<pat::PackedGenParticle> > >(iConfig.getParameter<edm::InputTag>("packedGenParticles"))),
cut_(iConfig.getParameter<std::string>("cut")),
cutLoose_(iConfig.getParameter<std::string>("cutLoose")),
nLoose_(iConfig.getParameter<unsigned>("nLoose")),
clearDaughters_(iConfig.getParameter<bool>("clearDaughters")),
dropSpecific_(iConfig.getParameter<bool>("dropSpecific"))
{
Expand All @@ -74,8 +78,17 @@ pat::PATGenJetSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iSet
auto mapping = std::make_unique<std::vector<int> >();
mapping->reserve(src->size());

unsigned nl = 0; // number of loose jets
for (View<reco::GenJet>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
if (!cut_(*it)) {

bool selectedLoose = false;
if ( nLoose_ > 0 && cutLoose_(*it) ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

No reason to compute it when nl>nLoose:

unsigned nl = nLoose; // number of remaining loose jets to consider
...
bool selectedLoose = false;
if (nl>0) { selectedLoose = true; --nl; }
bool pass = cut_(*it) || selectedLoose

selectedLoose = true;
++nl;
}

bool pass = cut_(*it) || ( nl <= nLoose_ && selectedLoose );
if (!pass ) {
mapping->push_back(-1);
continue;
}
Expand Down
45 changes: 38 additions & 7 deletions PhysicsTools/PatAlgos/plugins/PATJetSelector.h
Expand Up @@ -28,8 +28,11 @@ namespace pat {
PATJetSelector( edm::ParameterSet const & params ) :
srcToken_(consumes<edm::View<pat::Jet> >( params.getParameter<edm::InputTag>("src") )),
cut_( params.getParameter<std::string>("cut") ),
cutLoose_( params.getParameter<std::string>("cutLoose") ),
filter_( params.exists("filter") ? params.getParameter<bool>("filter") : false ),
selector_( cut_ )
nLoose_( params.getParameter<unsigned>("nLoose") ),
selector_( cut_ ),
selectorLoose_( cutLoose_ )
{
produces< std::vector<pat::Jet> >();
produces<reco::GenJetCollection> ("genJets");
Expand All @@ -38,7 +41,7 @@ namespace pat {
produces<edm::OwnVector<reco::BaseTagInfo> > ("tagInfos");
}

virtual ~PATJetSelector() {}
~PATJetSelector() override {}

virtual void beginJob() {}
virtual void endJob() {}
Expand All @@ -61,13 +64,20 @@ namespace pat {
edm::Handle< edm::View<pat::Jet> > h_jets;
iEvent.getByToken( srcToken_, h_jets );

unsigned nl = 0; // number of loose jets
// First loop over the products and make the secondary output collections
for ( edm::View<pat::Jet>::const_iterator ibegin = h_jets->begin(),
iend = h_jets->end(), ijet = ibegin;
ijet != iend; ++ijet ) {

// Check the selection
if ( selector_(*ijet) ) {
bool selectedLoose = false;
if ( nLoose_ > 0 && selectorLoose_(*ijet) ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

No reason to compute it when nl>nLoose:

unsigned nl = nLoose; // number of remaining loose jets to consider
...
bool selectedLoose = false;
if (nl>0) { selectedLoose = true; --nl; }
bool pass = cut_(*it) || selectedLoose

selectedLoose = true;
++nl;
}

if ( selector_(*ijet) || ( nl <= nLoose_ && selectedLoose ) ) {
// Copy over the calo towers
for ( CaloTowerFwdPtrVector::const_iterator itowerBegin = ijet->caloTowersFwdPtr().begin(),
itowerEnd = ijet->caloTowersFwdPtr().end(), itower = itowerBegin;
Expand Down Expand Up @@ -117,15 +127,21 @@ namespace pat {
unsigned int tagInfoIndex = 0;
unsigned int genJetIndex = 0;
// Now set the Ptrs with the orphan handles.
nl = 0; // Reset number of loose jets
for ( edm::View<pat::Jet>::const_iterator ibegin = h_jets->begin(),
iend = h_jets->end(), ijet = ibegin;
ijet != iend; ++ijet ) {

// Check the selection
if ( selector_(*ijet) ) {
bool selectedLoose = false;
if ( nLoose_ > 0 && selectorLoose_(*ijet) ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

No reason to compute it when nl>nLoose:

unsigned nl = nLoose; // number of remaining loose jets to consider
...
bool selectedLoose = false;
if (nl>0) { selectedLoose = true; --nl; }
bool pass = cut_(*it) || selectedLoose

selectedLoose = true;
++nl;
}
if ( selector_(*ijet) || (nl <= nLoose_ && selectedLoose ) ) {
// Add the jets that pass to the output collection
patJets->push_back( *ijet );

// Copy over the calo towers
for ( CaloTowerFwdPtrVector::const_iterator itowerBegin = ijet->caloTowersFwdPtr().begin(),
itowerEnd = ijet->caloTowersFwdPtr().end(), itower = itowerBegin;
Expand Down Expand Up @@ -190,11 +206,26 @@ namespace pat {
return true;
}


static void fillDescriptions(edm::ConfigurationDescriptions & descriptions) {
edm::ParameterSetDescription iDesc;
iDesc.setComment("Energy Correlation Functions adder");
iDesc.add<edm::InputTag>("src", edm::InputTag("no default"))->setComment("input collection");
iDesc.add<std::string> ("cut", "")->setComment("Jet selection.");
iDesc.add<std::string> ("cutLoose", "")->setComment("Loose jet selection. Will keep nLoose loose jets.");
iDesc.add<bool> ("filter", false)->setComment("Filter selection?");
iDesc.add<unsigned>("nLoose", 0)->setComment("Keep nLoose loose jets that satisfy cutLoose");
descriptions.add("PATJetSelector", iDesc);
}

protected:
const edm::EDGetTokenT<edm::View<pat::Jet> > srcToken_;
const std::string cut_;
const bool filter_;
const StringCutObjectSelector<Jet> selector_;
const std::string cutLoose_; // Cut to define loose jets.
const bool filter_;
const unsigned nLoose_; // If desired, keep nLoose loose jets.
const StringCutObjectSelector<Jet> selector_;
const StringCutObjectSelector<Jet> selectorLoose_; // Selector for loose jets.
};

}
Expand Down
Expand Up @@ -6,7 +6,9 @@
#
selectedPatJets = cms.EDFilter("PATJetSelector",
src = cms.InputTag("patJets"),
cut = cms.string("")
cut = cms.string(""),
cutLoose = cms.string(""),
nLoose = cms.uint32(0),
)


Expand Up @@ -90,6 +90,7 @@
'keep *_slimmedGenJetsFlavourInfos_*_*',
'keep *_slimmedGenJets__*',
'keep *_slimmedGenJetsAK8__*',
'keep *_slimmedGenJetsAK8SoftDropSubJets__*',
'keep *_genMetTrue_*_*',
# RUN
'keep LHERunInfoProduct_*_*_*',
Expand Down