1 #ifndef PAT_SMEAREDJETPRODUCERT_H
2 #define PAT_SMEAREDJETPRODUCERT_H
44 m_dR_max(cfg.getParameter<double>(
"dRMax")),
51 desc.
add<
double>(
"dRMax");
52 desc.
add<
double>(
"dPtMaxFactor");
70 for (
const auto& genJet: genJets) {
77 double dPt =
std::abs(genJet.pt() - jet.pt());
82 matched_genJet = &genJet;
86 return matched_genJet;
105 m_enabled(cfg.getParameter<bool>(
"enabled")),
106 m_debug(cfg.getUntrackedParameter<bool>(
"debug",
false)) {
129 bool skipGenMatching = cfg.
getParameter<
bool>(
"skipGenMatching");
130 if (! skipGenMatching)
133 std::int32_t variation = cfg.getParameter<std::int32_t>(
"variation");
136 else if (variation == 1)
138 else if (variation == -1)
144 produces<JetCollection>();
151 desc.
add<
bool>(
"enabled");
153 desc.
add<std::int32_t>(
"variation", 0);
154 desc.
add<std::uint32_t>(
"seed", 37428479);
155 desc.
add<
bool>(
"skipGenMatching",
false);
201 std::unique_ptr<JetCollection> smearedJets(
new JetCollection());
203 for (
const auto&
jet: jets) {
207 smearedJets->push_back(
jet);
216 std::cout <<
"jet: pt: " <<
jet.pt() <<
" eta: " <<
jet.eta() <<
" phi: " <<
jet.phi() <<
" e: " <<
jet.energy() << std::endl;
217 std::cout <<
"resolution: " << jet_resolution << std::endl;
218 std::cout <<
"resolution scale factor: " << jer_sf << std::endl;
225 double smearFactor = 1.;
233 std::cout <<
"gen jet: pt: " << genJet->
pt() <<
" eta: " << genJet->
eta() <<
" phi: " << genJet->
phi() <<
" e: " << genJet->
energy() << std::endl;
236 double dPt =
jet.pt() - genJet->
pt();
237 smearFactor = 1 + (jer_sf - 1.) * dPt /
jet.pt();
239 }
else if (jer_sf > 1) {
244 double sigma = jet_resolution *
std::sqrt(jer_sf * jer_sf - 1);
246 std::cout <<
"gaussian width: " << sigma << std::endl;
249 std::normal_distribution<>
d(0, sigma);
252 std::cout <<
"Impossible to smear this jet" << std::endl;
256 smearedJet.scaleEnergy(smearFactor);
259 std::cout <<
"smeared jet (" << smearFactor <<
"): pt: " << smearedJet.pt() <<
" eta: " << smearedJet.eta() <<
" phi: " << smearedJet.phi() <<
" e: " << smearedJet.energy() << std::endl;
262 smearedJets->push_back(smearedJet);
edm::EDGetTokenT< JetCollection > m_jets_token
T getParameter(std::string const &) const
float getResolution(const JetParameters ¶meters) const
void getTokens(const edm::Event &event)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
virtual double energy() const final
energy
static const JetResolution get(const edm::EventSetup &, const std::string &)
edm::Handle< reco::GenJetCollection > m_genJets
std::vector< GenJet > GenJetCollection
collection of GenJet objects
virtual void produce(edm::Event &event, const edm::EventSetup &setup) override
GenJetMatcher(const edm::ParameterSet &cfg, edm::ConsumesCollector &&collector)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
SmearedJetProducerT(const edm::ParameterSet &cfg)
virtual double phi() const final
momentum azimuthal angle
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
GreaterByPt< T > jetPtComparator
const reco::GenJet * match(const T &jet, double resolution)
std::unique_ptr< JME::JetResolution > m_resolution_from_file
static void fillDescriptions(edm::ParameterSetDescription &desc)
void addDefault(ParameterSetDescription const &psetDescription)
std::vector< T > JetCollection
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::string m_jets_algo_pt
Abs< T >::type abs(const T &t)
Jets made from MC generator particles.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
edm::EDGetTokenT< double > m_rho_token
double deltaR(double eta1, double eta2, double phi1, double phi2)
std::mt19937 m_random_generator
float getScaleFactor(const JetParameters ¶meters, Variation variation=Variation::NOMINAL) const
Variation m_systematic_variation
static const JetResolutionScaleFactor get(const edm::EventSetup &, const std::string &)
std::shared_ptr< pat::GenJetMatcher > m_genJetMatcher
std::unique_ptr< JME::JetResolutionScaleFactor > m_scale_factor_from_file
edm::EDGetTokenT< reco::GenJetCollection > m_genJetsToken
virtual double eta() const final
momentum pseudorapidity
volatile std::atomic< bool > shutdown_flag false
static std::string const source
virtual double pt() const final
transverse momentum