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++) {
63 auto jet = srcJet->ptrAt(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();
76 int pdgid =
abs(
d->pdgId());
77 if (pdgid == 22 || pdgid == 11) {
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");
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
Abs< T >::type abs(const T &t)
__host__ __device__ constexpr RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})