-
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.
- Loading branch information
Showing
5 changed files
with
480 additions
and
0 deletions.
There are no files selected for viewing
234 changes: 234 additions & 0 deletions
234
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,234 @@ | ||
// -*- C++ -*- | ||
// | ||
// Package: JetPlusTracks | ||
// Class: JetPlusTrackProducer | ||
// | ||
/**\class JetPlusTrackProducer JetPlusTrackProducer.cc JetPlusTrackProducer.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/MakerMacros.h" | ||
|
||
#include "FWCore/ParameterSet/interface/ParameterSet.h" | ||
|
||
#include "RecoJets/JetPlusTracks/plugins/JetPlusTrackAddonSeedProducer.h" | ||
#include "DataFormats/JetReco/interface/CaloJetCollection.h" | ||
#include "DataFormats/JetReco/interface/CaloJet.h" | ||
#include "DataFormats/JetReco/interface/JPTJetCollection.h" | ||
#include "DataFormats/JetReco/interface/JPTJet.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/JetReco/interface/Jet.h" | ||
#include "DataFormats/VertexReco/interface/VertexFwd.h" | ||
#include "DataFormats/VertexReco/interface/Vertex.h" | ||
#include "DataFormats/Math/interface/deltaPhi.h" | ||
#include "DataFormats/Math/interface/deltaR.h" | ||
|
||
#include <string> | ||
|
||
using namespace std; | ||
|
||
// | ||
// constants, enums and typedefs | ||
// | ||
|
||
|
||
// | ||
// static data member definitions | ||
// | ||
|
||
// | ||
// constructors and destructor | ||
// | ||
JetPlusTrackAddonSeedProducer::JetPlusTrackAddonSeedProducer(const edm::ParameterSet& iConfig) | ||
{ | ||
//register your products | ||
srcCaloJets = iConfig.getParameter<edm::InputTag>("srcCaloJets"); | ||
srcTrackJets = iConfig.getParameter<edm::InputTag>("srcTrackJets"); | ||
srcPVs_ = iConfig.getParameter<edm::InputTag>("srcPVs"); | ||
ptCUT = iConfig.getParameter<double>("ptCUT"); | ||
usePAT = iConfig.getParameter<bool>("UsePAT"); | ||
|
||
produces<reco::CaloJetCollection>("ak4CaloJetsJPTSeed"); | ||
|
||
input_jets_token_ = consumes<edm::View<reco::CaloJet> >(srcCaloJets); | ||
input_trackjets_token_ = consumes<edm::View<reco::TrackJet> >(srcTrackJets); | ||
input_vertex_token_ = consumes<reco::VertexCollection>(srcPVs_); | ||
tokenPFCandidates_ = consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("PFCandidates")); | ||
input_ctw_token_ = consumes<CaloTowerCollection>(iConfig.getParameter<edm::InputTag>("towerMaker")); | ||
} | ||
|
||
|
||
JetPlusTrackAddonSeedProducer::~JetPlusTrackAddonSeedProducer() | ||
{ | ||
|
||
// do anything here that needs to be done at desctruction time | ||
// (e.g. close files, deallocate resources etc.) | ||
|
||
} | ||
|
||
|
||
// | ||
// member functions | ||
// | ||
|
||
// ------------ method called to produce the data ------------ | ||
void | ||
JetPlusTrackAddonSeedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) | ||
{ | ||
using namespace edm; | ||
|
||
|
||
// std::cout<<" RecoJets::JetPlusTrackAddonSeedProducer::produce "<<std::endl; | ||
|
||
|
||
// get stuff from Event | ||
edm::Handle <edm::View <reco::CaloJet> > jets_h; | ||
iEvent.getByToken (input_jets_token_, jets_h); | ||
|
||
edm::Handle<edm::View <reco::TrackJet> > jetsTrackJets; | ||
iEvent.getByToken(input_trackjets_token_, jetsTrackJets); | ||
|
||
auto pCaloOut = std::make_unique<reco::CaloJetCollection>(); | ||
|
||
if (jetsTrackJets.isValid()) { | ||
if(jetsTrackJets->size() > 0 ) { | ||
// std::cout<<" AddonSeed::The size of trackjets "<<jetsTrackJets->size()<<" "<<jets_h->size()<<std::endl; | ||
for (unsigned ijet = 0; ijet < jetsTrackJets->size(); ++ijet) { | ||
const reco::TrackJet* jet = &(*(jetsTrackJets->refAt(ijet))); | ||
int iflag = 0; | ||
for (unsigned i = 0; i < jets_h->size(); ++i) { | ||
const reco::CaloJet* oldjet = &(*(jets_h->refAt(i))); | ||
double deta = fabs(jet->eta()-oldjet->eta()); | ||
double dphi = fabs(jet->phi()-oldjet->phi()); | ||
if(dphi>4.*atan(1.)) dphi = 8.*atan(1.) - dphi; | ||
double dr = sqrt(dphi*dphi+deta*deta); | ||
if(dr<0.4) iflag = 1; | ||
} // Calojets | ||
|
||
if(iflag == 1) continue; | ||
// std::cout<<" AddonSeed::There is the additional trackjet seed "<<jet->pt()<<" "<<jet->eta()<< | ||
// " "<<jet->phi()<<std::endl; | ||
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) { | ||
edm::Handle<pat::PackedCandidateCollection> pfCandidates; | ||
iEvent.getByToken( tokenPFCandidates_, pfCandidates); | ||
if(!pfCandidates.isValid()) { | ||
// std::cout<<" No PFCandidate collection "<<std::endl; | ||
return; | ||
} else { | ||
for(unsigned int i = 0, n = pfCandidates->size(); i < n; ++i) { | ||
const pat::PackedCandidate &pf = (*pfCandidates)[i]; | ||
double deta=(*jet).eta()-pf.eta(); | ||
double dphi=(*jet).phi()-pf.phi(); | ||
|
||
if(dphi > 4.*atan(1.) ) dphi = dphi-8.*atan(1.); | ||
if(dphi < -1.*4.*atan(1.) ) dphi = dphi+8.*atan(1.); | ||
double dr = sqrt(dphi*dphi+deta*deta); | ||
if(dr>0.4) continue; | ||
// jetconstit | ||
caloen = caloen + pf.energy()*pf.caloFraction(); | ||
hadinho += 0.; | ||
if(fabs(pf.eta())<=1.4) hadinhb += pf.energy()*pf.caloFraction()*pf.hcalFraction(); | ||
if(fabs(pf.eta())<3.&&(fabs(pf.eta())>3.)>1.4) hadinhe += pf.energy()*pf.caloFraction()*pf.hcalFraction(); | ||
if(fabs(pf.eta())>=3.) hadinhf += pf.energy()*pf.caloFraction()*pf.hcalFraction(); | ||
if(fabs(pf.eta())<=1.4) emineb += pf.energy()*pf.caloFraction()*(1.-pf.hcalFraction()); | ||
if(fabs(pf.eta())<3.&&(fabs(pf.eta())>3.)>1.4) eminee += pf.energy()*pf.caloFraction()*(1.-pf.hcalFraction()); | ||
if(fabs(pf.eta())>=3.) eminhf += pf.energy()*pf.caloFraction()*(1.-pf.hcalFraction()); | ||
ncand++; | ||
} // Calojet | ||
} | ||
} else { | ||
// std::cout<<" RECO "<<std::endl; | ||
edm::Handle<CaloTowerCollection> ct; | ||
bool getFromFwdPtr = iEvent.getByToken(input_ctw_token_, ct); | ||
for(CaloTowerCollection::const_iterator it = ct->begin();it != ct->end(); it++) { | ||
double deta=(*jet).eta()-(*it).eta(); | ||
double dphi=(*jet).phi()-(*it).phi(); | ||
if(dphi > 4.*atan(1.) ) dphi = dphi-8.*atan(1.); | ||
if(dphi < -1.*4.*atan(1.) ) dphi = dphi+8.*atan(1.); | ||
double dr = sqrt(dphi*dphi+deta*deta); | ||
if(dr>0.4) continue; | ||
caloen = caloen + (*it).energy(); | ||
hadinho += (*it).energyInHO(); | ||
hadinhb += (*it).energyInHB(); | ||
hadinhe += (*it).energyInHE(); | ||
hadinhf += 0.5*(*it).energyInHF(); | ||
emineb += (*it).energy()-(*it).energyInHB(); | ||
eminee += (*it).energy()-(*it).energyInHE(); | ||
eminhf += 0.5*(*it).energyInHF(); | ||
double eeen = 2.*(*it).energy()-(*it).energyInHB()-(*it).energyInHE(); | ||
double hcen = (*it).energyInHB()+(*it).energyInHE()+(*it).energyInHO()+0.5*(*it).energyInHF(); | ||
ncand++; | ||
} | ||
} | ||
eefraction = (emineb+eminee)/caloen; | ||
hhfraction = (hadinhb+hadinhe+hadinhf+hadinho)/caloen; | ||
|
||
double trackp = sqrt(pow(jet->pt(),2)+pow(jet->pz(),2)); | ||
// std::cout<<" Caloenergy "<<caloen<<"area"<<jet->jetArea()<<std::endl; | ||
if(caloen <= 0.) caloen = 0.001; | ||
math::XYZTLorentzVector pcalo4(caloen*jet->px()/trackp, | ||
caloen*jet->py()/trackp, | ||
caloen*jet->pz()/trackp, | ||
caloen); | ||
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(0.5024); | ||
|
||
//std::cout<<" AddonSeed::New Calojet "<<mycalo.pt()<<std::endl; | ||
// std::cout<<" Caloenergy "<<caloen<<"area"<<jet->jetArea()<<std::endl; | ||
// std::cout<<" CaloJetArea "<<mycalo.jetArea()<<std::endl; | ||
|
||
pCaloOut->push_back(mycalo); | ||
|
||
} // trackjets | ||
} // jets | ||
} // There is trackjet collection | ||
|
||
// std::cout<<" AddonSeed::size of collection "<<pCaloOut->size()<<std::endl; | ||
iEvent.put(std::move(pCaloOut),"ak4CaloJetsJPTSeed"); | ||
// theEvent.put(std::move(outputTColl),"tracksFromPF" | ||
} | ||
|
||
//define this as a plug-in | ||
DEFINE_FWK_MODULE(JetPlusTrackAddonSeedProducer); |
69 changes: 69 additions & 0 deletions
69
RecoJets/JetPlusTracks/plugins/JetPlusTrackAddonSeedProducer.h
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,69 @@ | ||
// -*- C++ -*- | ||
// | ||
// Package: JetPlusTracks | ||
// Class: JetPlusTrackProducer | ||
// | ||
/**\class JetPlusTrackProducer JetPlusTrackProducer.cc JetPlusTrackProducer.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/stream/EDProducer.h" | ||
#include "FWCore/Framework/interface/Event.h" | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
#include "FWCore/ParameterSet/interface/ParameterSet.h" | ||
|
||
#include "DataFormats/JetReco/interface/CaloJet.h" | ||
#include "DataFormats/JetReco/interface/TrackJet.h" | ||
#include "DataFormats/VertexReco/interface/Vertex.h" | ||
#include "DataFormats/JetReco/interface/TrackExtrapolation.h" | ||
#include "DataFormats/PatCandidates/interface/Electron.h" | ||
#include "DataFormats/PatCandidates/interface/Jet.h" | ||
#include "DataFormats/PatCandidates/interface/PackedCandidate.h" | ||
#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" | ||
#include "DataFormats/PatCandidates/interface/VIDCutFlowResult.h" | ||
#include "DataFormats/PatCandidates/interface/Muon.h" | ||
|
||
#include <string> | ||
|
||
// | ||
// class declaration | ||
// | ||
|
||
class JetPlusTrackAddonSeedProducer : public edm::stream::EDProducer<> { | ||
public: | ||
explicit JetPlusTrackAddonSeedProducer(const edm::ParameterSet&); | ||
~JetPlusTrackAddonSeedProducer() override; | ||
void produce(edm::Event&, const edm::EventSetup&) override; | ||
|
||
// ---------- private data members --------------------------- | ||
private: | ||
|
||
edm::InputTag srcCaloJets; | ||
edm::InputTag srcTrackJets; | ||
edm::InputTag srcPVs_; | ||
|
||
std::string alias; | ||
double ptCUT; | ||
bool usePAT; | ||
edm::EDGetTokenT<edm::View<reco::CaloJet> > input_jets_token_; | ||
edm::EDGetTokenT<edm::View<reco::TrackJet> > input_trackjets_token_; | ||
edm::EDGetTokenT<reco::VertexCollection> input_vertex_token_; | ||
edm::EDGetTokenT<std::vector<pat::PackedCandidate> > tokenPFCandidates_; | ||
edm::EDGetTokenT<CaloTowerCollection> input_ctw_token_; | ||
|
||
}; |
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,62 @@ | ||
#include "RecoJets/JetPlusTracks/plugins/TrackFromPFProducer.h" | ||
// system include files | ||
#include <memory> | ||
// user include files | ||
#include "FWCore/Framework/interface/Frameworkfwd.h" | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "TrackingTools/GeomPropagators/interface/Propagator.h" | ||
#include "TrackingTools/PatternTools/interface/Trajectory.h" | ||
|
||
#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" | ||
|
||
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" | ||
|
||
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" | ||
#include "Geometry/Records/interface/TrackerTopologyRcd.h" | ||
#include "DataFormats/PatCandidates/interface/PackedCandidate.h" | ||
|
||
TrackFromPFProducer::TrackFromPFProducer(const edm::ParameterSet& iConfig) | ||
{ | ||
tokenPFCandidates_=consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>( "PFCandidates" )); | ||
tokenPFCandidatesLostTracks_=consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>( "PFCandidatesLostTracks" )); | ||
produces<reco::TrackCollection>("tracksFromPF"); | ||
} | ||
|
||
|
||
void TrackFromPFProducer::produce(edm::Event& theEvent, const edm::EventSetup& setup) | ||
{ | ||
// | ||
// create empty output collections | ||
// | ||
auto outputTColl = std::make_unique<reco::TrackCollection>(); | ||
|
||
// std::cout<<" TrackFromPFProducer::produce "<<std::endl; | ||
edm::Handle<pat::PackedCandidateCollection> pfCandidates; | ||
theEvent.getByToken( tokenPFCandidates_, pfCandidates); | ||
|
||
for(unsigned int i = 0, n = pfCandidates->size(); i < n; ++i) { | ||
const pat::PackedCandidate &pf = (*pfCandidates)[i]; | ||
if(pf.hasTrackDetails()){ | ||
reco::Track mytrack = pf.pseudoTrack(); | ||
|
||
// std::cout<<" Track "<<std::isfinite(mytrack.pt())<<" "<< | ||
// isnan(mytrack.eta())<<" "<<pf.ptTrk()<<" "<<pf.etaAtVtx()<<" "<< | ||
// mytrack.found()<<" "<<mytrack.pt()<<" "<<mytrack.eta()<<" "<<mytrack.phi()<<" "<< | ||
// mytrack.vx()<<" "<<mytrack.vy()<<" "<< | ||
// mytrack.vz()<<std::endl; | ||
if(isnan(mytrack.pt())||isnan(mytrack.eta())||isnan(mytrack.phi())) continue; | ||
if(!std::isfinite(mytrack.pt()) || !std::isfinite(mytrack.eta()) || !std::isfinite(mytrack.phi())) continue; | ||
// std::cout<<" Accept "<<std::endl; | ||
outputTColl->push_back(mytrack); | ||
} | ||
//else { | ||
// if(pf.charge()>0) std::cout<<pf.vx()<<" "<<pf.pt() <<std::endl; | ||
// } | ||
} | ||
|
||
//put everything in the event | ||
theEvent.put(std::move(outputTColl),"tracksFromPF"); | ||
|
||
} | ||
DEFINE_FWK_MODULE(TrackFromPFProducer); |
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,28 @@ | ||
#ifndef TrackProducer_h | ||
#define TrackProducer_h | ||
|
||
/** \class TrackProducer | ||
* Produce Tracks from TrackCandidates | ||
* | ||
* \author cerati | ||
*/ | ||
|
||
#include "FWCore/Framework/interface/stream/EDProducer.h" | ||
#include "DataFormats/PatCandidates/interface/PackedCandidate.h" | ||
|
||
class TrackFromPFProducer : public edm::stream::EDProducer<> { | ||
public: | ||
|
||
/// Constructor | ||
explicit TrackFromPFProducer(const edm::ParameterSet& iConfig); | ||
|
||
/// Implementation of produce method | ||
void produce(edm::Event&, const edm::EventSetup&) override; | ||
|
||
private: | ||
edm::EDGetTokenT<std::vector<pat::PackedCandidate> > tokenPFCandidates_; | ||
edm::EDGetTokenT<std::vector<pat::PackedCandidate> > tokenPFCandidatesLostTracks_; | ||
|
||
}; | ||
|
||
#endif |
Oops, something went wrong.