CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
HFJetShowerShape Class Reference

#include <HFJetShowerShape/HFJetShowerShape/plugins/HFJetShowerShape.cc>

Inheritance diagram for HFJetShowerShape:
edm::stream::EDProducer<>

Public Member Functions

 HFJetShowerShape (const edm::ParameterSet &)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 
template<typename T >
void putInEvent (const std::string &, const edm::Handle< edm::View< reco::Jet >> &, std::vector< T >, edm::Event &) const
 Function to put product into event. More...
 

Private Attributes

const double hfTowerEtaWidth_
 
const double hfTowerPhiWidth_
 
const double jetEtaThreshold_
 
const double jetPtThreshold_
 
const double jetReferenceRadius_
 
const edm::EDGetTokenT< edm::View< reco::Jet > > jets_token_
 
const double offsetPerPU_
 
const double stripPtThreshold_
 
const double vertexRecoEffcy_
 
const edm::EDGetTokenT< std::vector< reco::Vertex > > vertices_token_
 
const double widthPtThreshold_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 43 of file HFJetShowerShape.cc.

Constructor & Destructor Documentation

HFJetShowerShape::HFJetShowerShape ( const edm::ParameterSet iConfig)
explicit

Definition at line 78 of file HFJetShowerShape.cc.

79  : jets_token_(consumes<edm::View<reco::Jet>>(iConfig.getParameter<edm::InputTag>("jets"))),
80  vertices_token_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("vertices"))),
81  jetPtThreshold_(iConfig.getParameter<double>("jetPtThreshold")),
82  jetEtaThreshold_(iConfig.getParameter<double>("jetEtaThreshold")),
83  hfTowerEtaWidth_(iConfig.getParameter<double>("hfTowerEtaWidth")),
84  hfTowerPhiWidth_(iConfig.getParameter<double>("hfTowerPhiWidth")),
85  vertexRecoEffcy_(iConfig.getParameter<double>("vertexRecoEffcy")),
86  offsetPerPU_(iConfig.getParameter<double>("offsetPerPU")),
87  jetReferenceRadius_(iConfig.getParameter<double>("jetReferenceRadius")),
88  stripPtThreshold_(iConfig.getParameter<double>("stripPtThreshold")),
89  widthPtThreshold_(iConfig.getParameter<double>("widthPtThreshold")) {
90  produces<edm::ValueMap<float>>("sigmaEtaEta");
91  produces<edm::ValueMap<float>>("sigmaPhiPhi");
92  produces<edm::ValueMap<int>>("centralEtaStripSize");
93  produces<edm::ValueMap<int>>("adjacentEtaStripsSize");
94 }
T getParameter(std::string const &) const
const double jetReferenceRadius_
const double vertexRecoEffcy_
const double widthPtThreshold_
const double hfTowerPhiWidth_
const double jetPtThreshold_
const edm::EDGetTokenT< std::vector< reco::Vertex > > vertices_token_
const edm::EDGetTokenT< edm::View< reco::Jet > > jets_token_
const double offsetPerPU_
const double stripPtThreshold_
const double jetEtaThreshold_
const double hfTowerEtaWidth_

Member Function Documentation

void HFJetShowerShape::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 212 of file HFJetShowerShape.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and DEFINE_FWK_MODULE.

212  {
214  desc.add<edm::InputTag>("jets", edm::InputTag("ak4PFJetsCHS"));
215  desc.add<edm::InputTag>("vertices", edm::InputTag("offlineSlimmedPrimaryVertices"));
216  desc.add<double>("jetPtThreshold", 25.);
217  desc.add<double>("jetEtaThreshold", 2.9);
218  desc.add<double>("hfTowerEtaWidth", 0.175);
219  desc.add<double>("hfTowerPhiWidth", 0.175);
220  desc.add<double>("vertexRecoEffcy", 0.7);
221  desc.add<double>("offsetPerPU", 0.4);
222  desc.add<double>("jetReferenceRadius", 0.4);
223  desc.add<double>("stripPtThreshold", 10.);
224  desc.add<double>("widthPtThreshold", 3.);
225  descriptions.add("hfJetShowerShape", desc);
226 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void HFJetShowerShape::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 101 of file HFJetShowerShape.cc.

References funct::abs(), hiPixelPairStep_cff::deltaPhi, reco::Candidate::eta(), edm::Event::get(), edm::Event::getHandle(), hfTowerEtaWidth_, hfTowerPhiWidth_, mps_fire::i, metsig::jet, jetEtaThreshold_, jetPtThreshold_, jetReferenceRadius_, jets_token_, M_PI, offsetPerPU_, reco::Candidate::pdgId(), reco::Candidate::phi(), reco::Candidate::pt(), putInEvent(), mathSSE::sqrt(), stripPtThreshold_, vertexRecoEffcy_, vertices_token_, mps_merge::weight, and widthPtThreshold_.

101  {
102  using namespace edm;
103 
104  //Jets
105  auto theJets = iEvent.getHandle(jets_token_);
106 
107  //Vertices
108  int nPV = iEvent.get(vertices_token_).size();
109 
110  //Products
111  std::vector<float> v_sigmaEtaEta, v_sigmaPhiPhi;
112  v_sigmaEtaEta.reserve(theJets->size());
113  v_sigmaPhiPhi.reserve(theJets->size());
114  std::vector<int> v_size_CentralEtaStrip, v_size_AdjacentEtaStrips;
115  v_size_CentralEtaStrip.reserve(theJets->size());
116  v_size_AdjacentEtaStrips.reserve(theJets->size());
117 
118  //Et offset for HF PF candidates
119  double puoffset = offsetPerPU_ / (M_PI * jetReferenceRadius_ * jetReferenceRadius_) * nPV / vertexRecoEffcy_ *
121 
122  for (auto const& jet : *theJets) {
123  double pt_jet = jet.pt();
124  double eta_jet = jet.eta();
125 
126  //If central or low pt jets, fill with dummy variables
127  if (pt_jet <= jetPtThreshold_ || std::abs(eta_jet) <= jetEtaThreshold_) {
128  v_sigmaEtaEta.push_back(-1.);
129  v_sigmaPhiPhi.push_back(-1.);
130  v_size_CentralEtaStrip.push_back(0);
131  v_size_AdjacentEtaStrips.push_back(0);
132  } else {
133  //First loop over PF candidates to compute some global variables needed for shower shape calculations
134  double sumptPFcands = 0.;
135 
136  for (unsigned i = 0; i < jet.numberOfSourceCandidatePtrs(); ++i) {
137  const reco::Candidate* icand = jet.sourceCandidatePtr(i).get();
138  //Only look at pdgId =1,2 (HF PF cands)
139  if (std::abs(icand->pdgId()) > 2)
140  continue;
141  double pt_PUsub = icand->pt() - puoffset;
142  if (pt_PUsub < widthPtThreshold_)
143  continue;
144  sumptPFcands += pt_PUsub;
145  }
146 
147  //Second loop to compute the various shower shape variables
148  int size_CentralEtaStrip(0.), size_AdjacentEtaStrips(0.);
149  double sigmaEtaEtaSq(0.), sigmaPhiPhiSq(0.);
150  double sumweightsPFcands = 0;
151  for (unsigned i = 0; i < jet.numberOfSourceCandidatePtrs(); ++i) {
152  const reco::Candidate* icand = jet.sourceCandidatePtr(i).get();
153  //Only look at pdgId =1,2 (HF PF cands)
154  if (std::abs(icand->pdgId()) > 2)
155  continue;
156 
157  double deta = std::abs(icand->eta() - jet.eta());
158  double dphi = std::abs(deltaPhi(icand->phi(), jet.phi()));
159  double pt_PUsub = icand->pt() - puoffset;
160 
161  //This is simply the size of the central eta strip and the adjacent strips
162  if (pt_PUsub >= stripPtThreshold_) {
163  if (dphi <= hfTowerPhiWidth_ * 0.5)
164  size_CentralEtaStrip++;
165  else if (dphi <= hfTowerPhiWidth_ * 1.5)
166  size_AdjacentEtaStrips++;
167  }
168 
169  //Now computing sigmaEtaEta/PhiPhi
170  if (pt_PUsub >= widthPtThreshold_ && sumptPFcands > 0) {
171  double weight = pt_PUsub / sumptPFcands;
172  sigmaEtaEtaSq += deta * deta * weight;
173  sigmaPhiPhiSq += dphi * dphi * weight;
174  sumweightsPFcands += weight;
175  }
176  }
177 
178  v_size_CentralEtaStrip.push_back(size_CentralEtaStrip);
179  v_size_AdjacentEtaStrips.push_back(size_AdjacentEtaStrips);
180 
181  if (sumweightsPFcands > 0 && sigmaEtaEtaSq > 0 && sigmaPhiPhiSq > 0) {
182  v_sigmaEtaEta.push_back(sqrt(sigmaEtaEtaSq / sumweightsPFcands));
183  v_sigmaPhiPhi.push_back(sqrt(sigmaPhiPhiSq / sumweightsPFcands));
184  } else {
185  v_sigmaEtaEta.push_back(-1.);
186  v_sigmaPhiPhi.push_back(-1.);
187  }
188 
189  } //End loop over jets
190  }
191 
192  putInEvent("sigmaEtaEta", theJets, v_sigmaEtaEta, iEvent);
193  putInEvent("sigmaPhiPhi", theJets, v_sigmaPhiPhi, iEvent);
194  putInEvent("centralEtaStripSize", theJets, v_size_CentralEtaStrip, iEvent);
195  putInEvent("adjacentEtaStripsSize", theJets, v_size_AdjacentEtaStrips, iEvent);
196 }
void putInEvent(const std::string &, const edm::Handle< edm::View< reco::Jet >> &, std::vector< T >, edm::Event &) const
Function to put product into event.
const double jetReferenceRadius_
const double vertexRecoEffcy_
Definition: weight.py:1
const double widthPtThreshold_
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
Definition: Event.h:539
virtual int pdgId() const =0
PDG identifier.
T sqrt(T t)
Definition: SSEVec.h:18
const double hfTowerPhiWidth_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:326
const double jetPtThreshold_
const edm::EDGetTokenT< std::vector< reco::Vertex > > vertices_token_
const edm::EDGetTokenT< edm::View< reco::Jet > > jets_token_
const double offsetPerPU_
#define M_PI
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const =0
transverse momentum
HLT enums.
const double stripPtThreshold_
const double jetEtaThreshold_
const double hfTowerEtaWidth_
virtual double phi() const =0
momentum azimuthal angle
template<typename T >
void HFJetShowerShape::putInEvent ( const std::string &  name,
const edm::Handle< edm::View< reco::Jet >> &  jets,
std::vector< T product,
edm::Event iEvent 
) const
private

Function to put product into event.

Definition at line 200 of file HFJetShowerShape.cc.

References objects.autophobj::filler, fwrapper::jets, eostools::move(), MillePedeFileConverter_cfg::out, and edm::Event::put().

Referenced by produce().

203  {
204  auto out = std::make_unique<edm::ValueMap<T>>();
206  filler.insert(jets, product.begin(), product.end());
207  filler.fill();
208  iEvent.put(std::move(out), name);
209 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

const double HFJetShowerShape::hfTowerEtaWidth_
private

Definition at line 60 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::hfTowerPhiWidth_
private

Definition at line 60 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::jetEtaThreshold_
private

Definition at line 58 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::jetPtThreshold_
private

Definition at line 58 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::jetReferenceRadius_
private

Definition at line 62 of file HFJetShowerShape.cc.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Jet> > HFJetShowerShape::jets_token_
private

Definition at line 54 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::offsetPerPU_
private

Definition at line 62 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::stripPtThreshold_
private

Definition at line 64 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::vertexRecoEffcy_
private

Definition at line 62 of file HFJetShowerShape.cc.

Referenced by produce().

const edm::EDGetTokenT<std::vector<reco::Vertex> > HFJetShowerShape::vertices_token_
private

Definition at line 55 of file HFJetShowerShape.cc.

Referenced by produce().

const double HFJetShowerShape::widthPtThreshold_
private

Definition at line 64 of file HFJetShowerShape.cc.

Referenced by produce().