27 produces<nanoaod::FlatTable>();
35 desc.add<
std::string>(
"name")->setComment(
"name of the Jet FlatTable we are extending with energy rings");
36 descriptions.
add(
"EnergyRingsTable",
desc);
51 float cone_boundaries[] = {0.05, 0.1, 0.2, 0.3, 0.4};
52 size_t ncone_boundaries =
sizeof(cone_boundaries) /
sizeof(
float);
53 unsigned int nJet =
srcJet->size();
54 unsigned int ncand = 0;
55 std::vector<float> numdaughterspt03;
56 std::vector<std::vector<float>> EmFractionEnergyRings(ncone_boundaries + 1, std::vector<float>(nJet, 0.));
57 std::vector<std::vector<float>> ChFractionEnergyRings(ncone_boundaries + 1, std::vector<float>(nJet, 0.));
58 std::vector<std::vector<float>> NeFractionEnergyRings(ncone_boundaries + 1, std::vector<float>(nJet, 0.));
59 std::vector<std::vector<float>> MuFractionEnergyRings(ncone_boundaries + 1, std::vector<float>(nJet, 0.));
61 for (
unsigned int ij = 0; ij < nJet; ij++) {
64 int numDaughtersPt03 = 0;
65 for (
unsigned int ijcone = 0; ijcone < ncone_boundaries; ijcone++) {
66 EmFractionEnergyRings[ijcone][ij] = 0;
67 MuFractionEnergyRings[ijcone][ij] = 0;
68 ChFractionEnergyRings[ijcone][ij] = 0;
69 NeFractionEnergyRings[ijcone][ij] = 0;
71 for (
const auto&
d :
jet->daughterPtrVector()) {
74 std::lower_bound(&cone_boundaries[0], &cone_boundaries[ncone_boundaries], candDr) - &cone_boundaries[0];
75 float candEnergy =
d->energy();
78 EmFractionEnergyRings[icone][ij] += candEnergy;
79 }
else if (
pdgid == 13) {
80 MuFractionEnergyRings[icone][ij] += candEnergy;
81 }
else if (
d->charge() != 0) {
82 ChFractionEnergyRings[icone][ij] += candEnergy;
84 NeFractionEnergyRings[icone][ij] += candEnergy;
87 numDaughtersPt03 += 1;
89 numdaughterspt03.push_back(numDaughtersPt03);
91 auto tab = std::make_unique<nanoaod::FlatTable>(ncand,
name_,
false,
true);
92 tab->addColumn<
int>(
"numDaughtersPt03", numdaughterspt03,
"number of jet daughters with pT>0.3 GeV");
94 tab->addColumn<
float>(
"EmFractionEnergyRing0", EmFractionEnergyRings[0],
"Em energy fraction in ring in dR 0-0.05");
95 tab->addColumn<
float>(
"EmFractionEnergyRing1", EmFractionEnergyRings[1],
"Em energy fraction in ring in dR 0.05-0.1");
96 tab->addColumn<
float>(
"EmFractionEnergyRing2", EmFractionEnergyRings[2],
"Em energy fraction in ring in dR 0.1-0.2");
97 tab->addColumn<
float>(
"EmFractionEnergyRing3", EmFractionEnergyRings[3],
"Em energy fraction in ring in dR 0.2-0.3");
98 tab->addColumn<
float>(
"EmFractionEnergyRing4", EmFractionEnergyRings[4],
"Em energy fraction in ring in dR 0.3-0.4");
99 tab->addColumn<
float>(
100 "EmFractionEnergyRing5", EmFractionEnergyRings[5],
"Em energy fraction in ring in dR 0.4 overflow");
102 tab->addColumn<
float>(
"ChFractionEnergyRing0", ChFractionEnergyRings[0],
"Ch energy fraction in ring in dR 0-0.05");
103 tab->addColumn<
float>(
"ChFractionEnergyRing1", ChFractionEnergyRings[1],
"Ch energy fraction in ring in dR 0.05-0.1");
104 tab->addColumn<
float>(
"ChFractionEnergyRing2", ChFractionEnergyRings[2],
"Ch energy fraction in ring in dR 0.1-0.2");
105 tab->addColumn<
float>(
"ChFractionEnergyRing3", ChFractionEnergyRings[3],
"Ch energy fraction in ring in dR 0.2-0.3");
106 tab->addColumn<
float>(
"ChFractionEnergyRing4", ChFractionEnergyRings[4],
"Ch energy fraction in ring in dR 0.3-0.4");
107 tab->addColumn<
float>(
108 "ChFractionEnergyRing5", ChFractionEnergyRings[5],
"Ch energy fraction in ring in dR 0.4 overflow");
110 tab->addColumn<
float>(
"MuFractionEnergyRing0", MuFractionEnergyRings[0],
"Mu energy fraction in ring in dR 0-0.05");
111 tab->addColumn<
float>(
"MuFractionEnergyRing1", MuFractionEnergyRings[1],
"Mu energy fraction in ring in dR 0.05-0.1");
112 tab->addColumn<
float>(
"MuFractionEnergyRing2", MuFractionEnergyRings[2],
"Mu energy fraction in ring in dR 0.1-0.2");
113 tab->addColumn<
float>(
"MuFractionEnergyRing3", MuFractionEnergyRings[3],
"Mu energy fraction in ring in dR 0.2-0.3");
114 tab->addColumn<
float>(
"MuFractionEnergyRing4", MuFractionEnergyRings[4],
"Mu energy fraction in ring in dR 0.3-0.4");
115 tab->addColumn<
float>(
116 "MuFractionEnergyRing5", MuFractionEnergyRings[5],
"Mu energy fraction in ring in dR 0.4 overflow");
118 tab->addColumn<
float>(
"NeFractionEnergyRing0", NeFractionEnergyRings[0],
"Ne energy fraction in ring in dR 0-0.05");
119 tab->addColumn<
float>(
"NeFractionEnergyRing1", NeFractionEnergyRings[1],
"Ne energy fraction in ring in dR 0.05-0.1");
120 tab->addColumn<
float>(
"NeFractionEnergyRing2", NeFractionEnergyRings[2],
"Ne energy fraction in ring in dR 0.1-0.2");
121 tab->addColumn<
float>(
"NeFractionEnergyRing3", NeFractionEnergyRings[3],
"Ne energy fraction in ring in dR 0.2-0.3");
122 tab->addColumn<
float>(
"NeFractionEnergyRing4", NeFractionEnergyRings[4],
"Ne energy fraction in ring in dR 0.3-0.4");
123 tab->addColumn<
float>(
124 "NeFractionEnergyRing5", NeFractionEnergyRings[5],
"Ne energy fraction in ring in dR 0.4 overflow");
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define DEFINE_FWK_MODULE(type)
~EnergyRingsTableProducer() override
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
Abs< T >::type abs(const T &t)
EnergyRingsTableProducer(const edm::ParameterSet &iConfig)
void produce(edm::Event &, edm::EventSetup const &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)