2 #include "fastjet/PseudoJet.hh" 3 #include "fastjet/ClusterSequence.hh" 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")) {
18 throw cms::Exception(
"ConfigurationError") <<
"cuts and Njets must be the same size in ECFAdder" << std::endl;
21 for (std::vector<unsigned>::const_iterator
n =
Njets_.begin();
n !=
Njets_.end(); ++
n) {
22 std::ostringstream ecfN_str;
23 std::shared_ptr<fastjet::FunctionOfPseudoJet<double>> pfunc;
26 ecfN_str <<
"ecf" << *
n;
27 pfunc.reset(
new fastjet::contrib::EnergyCorrelator(*n,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
29 ecfN_str <<
"ecfC" << *
n;
30 pfunc.reset(
new fastjet::contrib::EnergyCorrelatorCseries(*n,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
32 ecfN_str <<
"ecfD" << *
n;
34 new fastjet::contrib::EnergyCorrelatorGeneralizedD2(
alpha_,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
36 ecfN_str <<
"ecfN" << *
n;
37 pfunc.reset(
new fastjet::contrib::EnergyCorrelatorNseries(*n,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
39 ecfN_str <<
"ecfM" << *
n;
40 pfunc.reset(
new fastjet::contrib::EnergyCorrelatorMseries(*n,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
42 ecfN_str <<
"ecfU" << *
n;
43 pfunc.reset(
new fastjet::contrib::EnergyCorrelatorUseries(*n,
beta_, fastjet::contrib::EnergyCorrelator::pt_R));
46 produces<edm::ValueMap<float>>(ecfN_str.str());
59 for (std::vector<unsigned>::const_iterator
n =
Njets_.begin();
n !=
Njets_.end(); ++
n) {
61 std::vector<float> ecfN;
62 ecfN.reserve(jets->size());
74 auto outT = std::make_unique<edm::ValueMap<float>>();
76 fillerT.insert(jets, ecfN.begin(), ecfN.end());
85 std::vector<fastjet::PseudoJet> FJparticles;
86 for (
unsigned k = 0;
k <
object->numberOfDaughters(); ++
k) {
90 if (dp->numberOfDaughters() == 0) {
91 FJparticles.push_back(fastjet::PseudoJet(dp->px(), dp->py(), dp->pz(), dp->energy()));
94 for (
unsigned l = 0;
l < subjet->numberOfDaughters(); ++
l) {
95 if (subjet !=
nullptr) {
97 FJparticles.push_back(fastjet::PseudoJet(ddp->px(), ddp->py(), ddp->pz(), ddp->energy()));
99 edm::LogWarning(
"MissingJetConstituent") <<
"BasicJet constituent required for ECF computation is missing!";
105 edm::LogWarning(
"MissingJetConstituent") <<
"Jet constituent required for ECF computation is missing!";
117 iDesc.
setComment(
"Energy Correlation Functions adder");
120 iDesc.
add<std::vector<unsigned>>(
"Njets", {1, 2, 3})->setComment(
"Number of jets to emulate");
121 iDesc.
add<std::vector<std::string>>(
"cuts", {
"",
"",
""})
122 ->setComment(
"Jet selections for each N value. Size must match Njets.");
123 iDesc.
add<
double>(
"alpha", 1.0)->
setComment(
"alpha factor, only valid for N2");
124 iDesc.
add<
double>(
"beta", 1.0)->
setComment(
"angularity factor");
125 iDesc.
add<
std::string>(
"ecftype",
"")->setComment(
"ECF type: ECF or empty; C; D; N; M; U;");
126 descriptions.
add(
"ECFAdder", iDesc);
void setComment(std::string const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ECFAdder(const edm::ParameterSet &iConfig)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
T const * get() const
Returns C++ pointer to the item.
Base class for all types of Jets.
float getECF(unsigned index, const edm::Ptr< reco::Jet > &object) const
std::vector< std::string > variables_
std::vector< std::string > cuts_
std::vector< std::shared_ptr< fastjet::FunctionOfPseudoJet< double > > > routine_
void setComment(std::string const &value)
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< unsigned > Njets_
bool isNonnull() const
Checks for non-null.
static std::string join(char **cmd)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
std::vector< StringCutObjectSelector< reco::Jet > > selectors_