CMS 3D CMS Logo

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::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_, create_idmaps::n, Njets_, routine_, selectors_, runBasic_cfi::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())
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
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
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
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

◆ fillDescriptions()

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

Definition at line 137 of file ECFAdder.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), ProducerED_cfi::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)

◆ getECF()

float ECFAdder::getECF ( unsigned  index,
const edm::Ptr< reco::Jet > &  object 
) const

Definition at line 92 of file ECFAdder.cc.

References Options::const, Calorimetry_cff::dp, input_weights_token_, edm::EDGetTokenT< T >::isUninitialized(), join(), isotrackApplyRegressor::k, MainPageGenerator::l, Njets_, default_text_conditions_cfi::object, 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 w() const
Base class for all types of Jets.
Definition: Jet.h:20
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:98
std::vector< std::shared_ptr< fastjet::FunctionOfPseudoJet< double > > > routine_
Definition: ECFAdder.h:34
std::vector< unsigned > Njets_
Definition: ECFAdder.h:27
static std::string join(char **cmd)
Definition: RemoteFile.cc:21
Log< level::Warning, false > LogWarning

◆ produce()

void ECFAdder::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 57 of file ECFAdder.cc.

References getECF(), mps_fire::i, iEvent, input_weights_token_, edm::EDGetTokenT< T >::isUninitialized(), PDWG_EXODelayedJetMET_cff::jets, eostools::move(), create_idmaps::n, Njets_, 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
edm::ValueMap< float > const * weightsHandle_
Definition: ECFAdder.h:37
float getECF(unsigned index, const edm::Ptr< reco::Jet > &object) const
Definition: ECFAdder.cc:92
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:98
std::vector< std::string > variables_
Definition: ECFAdder.h:30
int iEvent
Definition: GenABIO.cc:224
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:88
std::vector< StringCutObjectSelector< reco::Jet > > selectors_
Definition: ECFAdder.h:35
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ alpha_

double ECFAdder::alpha_
private

Definition at line 31 of file ECFAdder.h.

Referenced by ECFAdder().

◆ beta_

double ECFAdder::beta_
private

Definition at line 32 of file ECFAdder.h.

Referenced by ECFAdder().

◆ cuts_

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

Definition at line 28 of file ECFAdder.h.

Referenced by ECFAdder().

◆ ecftype_

std::string ECFAdder::ecftype_
private

Definition at line 29 of file ECFAdder.h.

Referenced by ECFAdder().

◆ input_weights_token_

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

Definition at line 36 of file ECFAdder.h.

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

◆ Njets_

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

Definition at line 27 of file ECFAdder.h.

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

◆ routine_

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

Definition at line 34 of file ECFAdder.h.

Referenced by ECFAdder(), and getECF().

◆ selectors_

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

Definition at line 35 of file ECFAdder.h.

Referenced by ECFAdder(), and produce().

◆ src_

edm::InputTag ECFAdder::src_
private

Definition at line 25 of file ECFAdder.h.

◆ src_token_

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

Definition at line 26 of file ECFAdder.h.

Referenced by produce().

◆ variables_

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

Definition at line 30 of file ECFAdder.h.

Referenced by ECFAdder(), and produce().

◆ weightsHandle_

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

Definition at line 37 of file ECFAdder.h.

Referenced by produce().