CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
JetTracksAssociationToTrackRefs.cc
Go to the documentation of this file.
7 
13 
15 
16 #include <unordered_set>
17 
24 public:
26 
27  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
28 
29  void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
30 
31 private:
35  const double ptMin_;
36 };
37 
39  : associationToken_(
40  consumes<reco::JetTracksAssociation::Container>(iConfig.getParameter<edm::InputTag>("association"))),
41  jetToken_(consumes<edm::View<reco::Jet>>(iConfig.getParameter<edm::InputTag>("jets"))),
42  correctorToken_(consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("corrector"))),
43  ptMin_(iConfig.getParameter<double>("correctedPtMin")) {
44  produces<reco::TrackRefVector>();
45 }
46 
49  desc.add<edm::InputTag>("association", edm::InputTag("ak4JetTracksAssociatorAtVertexPF"));
50  desc.add<edm::InputTag>("jets", edm::InputTag("ak4PFJetsCHS"));
51  desc.add<edm::InputTag>("corrector", edm::InputTag("ak4PFL1FastL2L3Corrector"));
52  desc.add<double>("correctedPtMin", 0);
53  descriptions.add("jetTracksAssociationToTrackRefs", desc);
54 }
55 
58  iEvent.getByToken(associationToken_, h_assoc);
60 
62  iEvent.getByToken(jetToken_, h_jets);
63  const edm::View<reco::Jet>& jets = *h_jets;
64 
66  iEvent.getByToken(correctorToken_, h_corrector);
67  const reco::JetCorrector& corrector = *h_corrector;
68 
69  auto ret = std::make_unique<reco::TrackRefVector>();
70  std::unordered_set<reco::TrackRefVector::key_type> alreadyAdded;
71 
72  // Exctract tracks only for jets passing certain pT threshold after
73  // correction
74  for (size_t i = 0; i < jets.size(); ++i) {
75  edm::RefToBase<reco::Jet> jetRef = jets.refAt(i);
76  const reco::Jet& jet = *jetRef;
77 
78  auto p4 = jet.p4();
79 
80  // Energy correction in the most general way
81  if (!corrector.vectorialCorrection()) {
82  double scale = 1;
83  if (!corrector.refRequired()) {
84  scale = corrector.correction(jet);
85  } else {
86  scale = corrector.correction(jet, jetRef);
87  }
88  p4 = p4 * scale;
89  } else {
90  corrector.correction(jet, jetRef, p4);
91  }
92 
93  if (p4.pt() <= ptMin_)
94  continue;
95 
96  for (const auto& trackRef : association[jetRef]) {
97  if (alreadyAdded.find(trackRef.key()) == alreadyAdded.end()) {
98  ret->push_back(trackRef);
99  alreadyAdded.insert(trackRef.key());
100  }
101  }
102  }
103 
104  iEvent.put(std::move(ret));
105 }
106 
edm::EDGetTokenT< edm::View< reco::Jet > > jetToken_
tuple ret
prodAgent to be discontinued
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
void produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Base class for all types of Jets.
Definition: Jet.h:20
bool refRequired() const
if correction needs the jet reference
Definition: JetCorrector.h:62
size_type size() const
double correction(const LorentzVector &fJet) const
get correction using Jet information only
Definition: JetCorrector.h:46
JetTracksAssociationToTrackRefs(const edm::ParameterSet &iConfig)
edm::EDGetTokenT< reco::JetCorrector > correctorToken_
const LorentzVector & p4() const final
four-momentum Lorentz vector
RefToBase< value_type > refAt(size_type i) const
ptMin_(conf.getParameter< double >("ptMin"))
int iEvent
Definition: GenABIO.cc:224
std::tuple< layerClusterToCaloParticle, caloParticleToLayerCluster > association
vector< PseudoJet > jets
def move
Definition: eostools.py:511
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< reco::JetTracksAssociation::Container > associationToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
constexpr char Jet[]
Definition: modules.cc:9
Association between jets and float value.
bool vectorialCorrection() const
if vectorial correction is provided
Definition: JetCorrector.h:65
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::AssociationVector< reco::JetRefBaseProd, Values > Container