CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
ECFAdder Class Reference

#include <ECFAdder.h>

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

Public Member Functions

 ECFAdder (const edm::ParameterSet &iConfig)
 
float getECF (unsigned index, const edm::Ptr< reco::Jet > &object) const
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

double alpha_
 
double beta_
 
std::vector< std::string > cuts_
 
std::string ecftype_
 
edm::EDGetTokenT
< edm::ValueMap< float > > 
input_weights_token_
 
std::vector< unsigned > Njets_
 
std::vector< std::shared_ptr
< fastjet::FunctionOfPseudoJet
< double > > > 
routine_
 
std::vector
< StringCutObjectSelector
< reco::Jet > > 
selectors_
 
edm::InputTag src_
 
edm::EDGetTokenT< edm::View
< reco::Jet > > 
src_token_
 
std::vector< std::string > variables_
 
edm::ValueMap< float > const * weightsHandle_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 15 of file ECFAdder.h.

Constructor & Destructor Documentation

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

Definition at line 9 of file ECFAdder.cc.

References alpha_, beta_, cuts_, ecftype_, Exception, edm::ParameterSet::getParameter(), input_weights_token_, edm::InputTag::label(), dqmiodumpmetadata::n, Njets_, routine_, selectors_, HLT_FULL_cff::srcWeights, and variables_.

10  : src_(iConfig.getParameter<edm::InputTag>("src")),
12  Njets_(iConfig.getParameter<std::vector<unsigned>>("Njets")),
13  cuts_(iConfig.getParameter<std::vector<std::string>>("cuts")),
14  ecftype_(iConfig.getParameter<std::string>("ecftype")),
15  alpha_(iConfig.getParameter<double>("alpha")),
16  beta_(iConfig.getParameter<double>("beta")) {
17  if (cuts_.size() != Njets_.size()) {
18  throw cms::Exception("ConfigurationError") << "cuts and Njets must be the same size in ECFAdder" << std::endl;
19  }
20 
21  edm::InputTag srcWeights = iConfig.getParameter<edm::InputTag>("srcWeights");
22  if (!srcWeights.label().empty())
23  input_weights_token_ = consumes<edm::ValueMap<float>>(srcWeights);
24 
25  for (std::vector<unsigned>::const_iterator n = Njets_.begin(); n != Njets_.end(); ++n) {
26  std::ostringstream ecfN_str;
27  std::shared_ptr<fastjet::FunctionOfPseudoJet<double>> pfunc;
28 
29  if (ecftype_ == "ECF" || ecftype_.empty()) {
30  ecfN_str << "ecf" << *n;
31  pfunc.reset(new fastjet::contrib::EnergyCorrelator(*n, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
32  } else if (ecftype_ == "C") {
33  ecfN_str << "ecfC" << *n;
34  pfunc.reset(new fastjet::contrib::EnergyCorrelatorCseries(*n, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
35  } else if (ecftype_ == "D") {
36  ecfN_str << "ecfD" << *n;
37  pfunc.reset(
38  new fastjet::contrib::EnergyCorrelatorGeneralizedD2(alpha_, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
39  } else if (ecftype_ == "N") {
40  ecfN_str << "ecfN" << *n;
41  pfunc.reset(new fastjet::contrib::EnergyCorrelatorNseries(*n, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
42  } else if (ecftype_ == "M") {
43  ecfN_str << "ecfM" << *n;
44  pfunc.reset(new fastjet::contrib::EnergyCorrelatorMseries(*n, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
45  } else if (ecftype_ == "U") {
46  ecfN_str << "ecfU" << *n;
47  pfunc.reset(new fastjet::contrib::EnergyCorrelatorUseries(*n, beta_, fastjet::contrib::EnergyCorrelator::pt_R));
48  }
49  variables_.push_back(ecfN_str.str());
50  produces<edm::ValueMap<float>>(ecfN_str.str());
51  routine_.push_back(pfunc);
52 
54  }
55 }
edm::EDGetTokenT< edm::ValueMap< float > > input_weights_token_
Definition: ECFAdder.h:36
std::string ecftype_
Definition: ECFAdder.h:29
std::vector< std::string > variables_
Definition: ECFAdder.h:30
std::vector< std::string > cuts_
Definition: ECFAdder.h:28
std::vector< std::shared_ptr< fastjet::FunctionOfPseudoJet< double > > > routine_
Definition: ECFAdder.h:34
double beta_
Definition: ECFAdder.h:32
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
Definition: ECFAdder.h:26
std::vector< unsigned > Njets_
Definition: ECFAdder.h:27
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::string const & label() const
Definition: InputTag.h:36
double alpha_
Definition: ECFAdder.h:31
std::vector< StringCutObjectSelector< reco::Jet > > selectors_
Definition: ECFAdder.h:35
edm::InputTag src_
Definition: ECFAdder.h:25

Member Function Documentation

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

Definition at line 137 of file ECFAdder.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), HLT_FULL_cff::InputTag, edm::ParameterSetDescription::setComment(), edm::ParameterDescriptionNode::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

137  {
139  iDesc.setComment("Energy Correlation Functions adder");
140 
141  iDesc.add<edm::InputTag>("src", edm::InputTag("no default"))->setComment("input collection");
142  iDesc.add<std::vector<unsigned>>("Njets", {1, 2, 3})->setComment("Number of jets to emulate");
143  iDesc.add<std::vector<std::string>>("cuts", {"", "", ""})
144  ->setComment("Jet selections for each N value. Size must match Njets.");
145  iDesc.add<double>("alpha", 1.0)->setComment("alpha factor, only valid for N2");
146  iDesc.add<double>("beta", 1.0)->setComment("angularity factor");
147  iDesc.add<std::string>("ecftype", "")->setComment("ECF type: ECF or empty; C; D; N; M; U;");
148  iDesc.add<edm::InputTag>("srcWeights", edm::InputTag("puppi"));
149  descriptions.add("ECFAdder", iDesc);
150 }
void setComment(std::string const &value)
void setComment(std::string const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
float ECFAdder::getECF ( unsigned  index,
const edm::Ptr< reco::Jet > &  object 
) const

Definition at line 92 of file ECFAdder.cc.

References runTheMatrix::const, edm::Ptr< T >::get(), input_weights_token_, edm::Ptr< T >::isAvailable(), edm::Ptr< T >::isNonnull(), edm::EDGetTokenT< T >::isUninitialized(), join(), isotrackApplyRegressor::k, cmsLHEtoEOSManager::l, Njets_, routine_, and w().

Referenced by produce().

92  {
93  std::vector<fastjet::PseudoJet> fjParticles;
94  for (unsigned k = 0; k < object->numberOfDaughters(); ++k) {
95  const reco::CandidatePtr& dp = object->daughterPtr(k);
96  if (dp.isNonnull() && dp.isAvailable()) {
97  // Here, the daughters are the "end" node, so this is a PFJet
98  if (dp->numberOfDaughters() == 0) {
99  if (object->isWeighted()) {
101  throw cms::Exception("MissingConstituentWeight")
102  << "ECFAdder: No weights (e.g. PUPPI) given for weighted jet collection" << std::endl;
103  float w = (*weightsHandle_)[dp];
104  fjParticles.push_back(fastjet::PseudoJet(dp->px() * w, dp->py() * w, dp->pz() * w, dp->energy() * w));
105  } else
106  fjParticles.push_back(fastjet::PseudoJet(dp->px(), dp->py(), dp->pz(), dp->energy()));
107  } else { // Otherwise, this is a BasicJet, so you need to descend further.
108  auto subjet = dynamic_cast<reco::Jet const*>(dp.get());
109  for (unsigned l = 0; l < subjet->numberOfDaughters(); ++l) {
110  if (subjet != nullptr) {
111  const reco::CandidatePtr& ddp = subjet->daughterPtr(l);
112  if (subjet->isWeighted()) {
114  throw cms::Exception("MissingConstituentWeight")
115  << "ECFAdder: No weights (e.g. PUPPI) given for weighted jet collection" << std::endl;
116  float w = (*weightsHandle_)[ddp];
117  fjParticles.push_back(fastjet::PseudoJet(ddp->px() * w, ddp->py() * w, ddp->pz() * w, ddp->energy() * w));
118  } else
119  fjParticles.push_back(fastjet::PseudoJet(ddp->px(), ddp->py(), ddp->pz(), ddp->energy()));
120  } else {
121  edm::LogWarning("MissingJetConstituent") << "BasicJet constituent required for ECF computation is missing!";
122  }
123  }
124  } // end if basic jet
125  } // end if daughter pointer is nonnull and available
126  else
127  edm::LogWarning("MissingJetConstituent") << "Jet constituent required for ECF computation is missing!";
128  }
129  if (fjParticles.size() > Njets_[index]) {
130  return routine_[index]->result(join(fjParticles));
131  } else {
132  return -1.0;
133  }
134 }
edm::EDGetTokenT< edm::ValueMap< float > > input_weights_token_
Definition: ECFAdder.h:36
T const * get() const
Returns C++ pointer to the item.
Definition: Ptr.h:139
Base class for all types of Jets.
Definition: Jet.h:20
bool isAvailable() const
Definition: Ptr.h:230
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:99
std::vector< std::shared_ptr< fastjet::FunctionOfPseudoJet< double > > > routine_
Definition: ECFAdder.h:34
std::vector< unsigned > Njets_
Definition: ECFAdder.h:27
bool isNonnull() const
Checks for non-null.
Definition: Ptr.h:146
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
T w() const
Log< level::Warning, false > LogWarning
void ECFAdder::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 57 of file ECFAdder.cc.

References edm::Event::get(), edm::Event::getByToken(), getECF(), mps_fire::i, input_weights_token_, edm::EDGetTokenT< T >::isUninitialized(), fwrapper::jets, eostools::move(), dqmiodumpmetadata::n, Njets_, edm::Event::put(), selectors_, src_token_, submitPVValidationJobs::t, variables_, and weightsHandle_.

57  {
58  // read input collection
60  iEvent.getByToken(src_token_, jets);
61 
62  // Get Weights Collection
65 
66  unsigned i = 0;
67  for (std::vector<unsigned>::const_iterator n = Njets_.begin(); n != Njets_.end(); ++n) {
68  // prepare room for output
69  std::vector<float> ecfN;
70  ecfN.reserve(jets->size());
71 
72  for (typename edm::View<reco::Jet>::const_iterator jetIt = jets->begin(); jetIt != jets->end(); ++jetIt) {
73  edm::Ptr<reco::Jet> jetPtr = jets->ptrAt(jetIt - jets->begin());
74 
75  float t = -1.0;
76  if (selectors_[n - Njets_.begin()](*jetIt))
77  t = getECF(i, jetPtr);
78 
79  ecfN.push_back(t);
80  }
81 
82  auto outT = std::make_unique<edm::ValueMap<float>>();
83  edm::ValueMap<float>::Filler fillerT(*outT);
84  fillerT.insert(jets, ecfN.begin(), ecfN.end());
85  fillerT.fill();
86 
87  iEvent.put(std::move(outT), variables_[i]);
88  ++i;
89  }
90 }
edm::EDGetTokenT< edm::ValueMap< float > > input_weights_token_
Definition: ECFAdder.h:36
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
edm::ValueMap< float > const * weightsHandle_
Definition: ECFAdder.h:37
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:99
float getECF(unsigned index, const edm::Ptr< reco::Jet > &object) const
Definition: ECFAdder.cc:92
std::vector< std::string > variables_
Definition: ECFAdder.h:30
vector< PseudoJet > jets
def move
Definition: eostools.py:511
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
Definition: ECFAdder.h:26
std::vector< unsigned > Njets_
Definition: ECFAdder.h:27
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
std::vector< StringCutObjectSelector< reco::Jet > > selectors_
Definition: ECFAdder.h:35

Member Data Documentation

double ECFAdder::alpha_
private

Definition at line 31 of file ECFAdder.h.

Referenced by ECFAdder().

double ECFAdder::beta_
private

Definition at line 32 of file ECFAdder.h.

Referenced by ECFAdder().

std::vector<std::string> ECFAdder::cuts_
private

Definition at line 28 of file ECFAdder.h.

Referenced by ECFAdder().

std::string ECFAdder::ecftype_
private

Definition at line 29 of file ECFAdder.h.

Referenced by ECFAdder().

edm::EDGetTokenT<edm::ValueMap<float> > ECFAdder::input_weights_token_
private

Definition at line 36 of file ECFAdder.h.

Referenced by ECFAdder(), getECF(), and produce().

std::vector<unsigned> ECFAdder::Njets_
private

Definition at line 27 of file ECFAdder.h.

Referenced by ECFAdder(), getECF(), and produce().

std::vector<std::shared_ptr<fastjet::FunctionOfPseudoJet<double> > > ECFAdder::routine_
private

Definition at line 34 of file ECFAdder.h.

Referenced by ECFAdder(), and getECF().

std::vector<StringCutObjectSelector<reco::Jet> > ECFAdder::selectors_
private

Definition at line 35 of file ECFAdder.h.

Referenced by ECFAdder(), and produce().

edm::InputTag ECFAdder::src_
private

Definition at line 25 of file ECFAdder.h.

edm::EDGetTokenT<edm::View<reco::Jet> > ECFAdder::src_token_
private

Definition at line 26 of file ECFAdder.h.

Referenced by produce().

std::vector<std::string> ECFAdder::variables_
private

Definition at line 30 of file ECFAdder.h.

Referenced by ECFAdder(), and produce().

edm::ValueMap<float> const* ECFAdder::weightsHandle_
private

Definition at line 37 of file ECFAdder.h.

Referenced by produce().