CMS 3D CMS Logo

EnergyRingsTableProducer.cc
Go to the documentation of this file.
1 // system include files
2 #include <memory>
3 
4 // user include files
7 
9 
13 
16 
18 
21 
23 public:
25  : name_(iConfig.getParameter<std::string>("name")),
26  srcJet_(consumes<edm::View<pat::Jet>>(iConfig.getParameter<edm::InputTag>("src"))) {
27  produces<nanoaod::FlatTable>();
28  }
29 
31 
32  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
34  desc.add<edm::InputTag>("src")->setComment("input Jet collection");
35  desc.add<std::string>("name")->setComment("name of the Jet FlatTable we are extending with energy rings");
36  descriptions.add("EnergyRingsTable", desc);
37  }
38 
39 private:
40  void produce(edm::Event&, edm::EventSetup const&) override;
41 
44 };
45 
46 // ------------ method called to produce the data ------------
49  iEvent.getByToken(srcJet_, srcJet);
50 
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.));
60 
61  for (unsigned int ij = 0; ij < nJet; ij++) {
62  ++ncand;
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;
70  }
71  for (const auto& d : jet->daughterPtrVector()) {
72  float candDr = Geom::deltaR(d->p4(), jet->p4());
73  size_t icone =
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;
83  } else {
84  NeFractionEnergyRings[icone][ij] += candEnergy;
85  }
86  if (d->pt() > 0.3)
87  numDaughtersPt03 += 1;
88  } // end of jet daughters loop
89  numdaughterspt03.push_back(numDaughtersPt03);
90  } //end of jet loop
91  auto tab = std::make_unique<nanoaod::FlatTable>(ncand, name_, false, true); //extension to Jet collection set to true
92  tab->addColumn<int>(
93  "numDaughtersPt03", numdaughterspt03, "number of jet daughters with pT>0.3 GeV", nanoaod::FlatTable::IntColumn);
94 
95  tab->addColumn<float>("EmFractionEnergyRing0",
96  EmFractionEnergyRings[0],
97  "Em energy fraction in ring in dR 0-0.05",
99  tab->addColumn<float>("EmFractionEnergyRing1",
100  EmFractionEnergyRings[1],
101  "Em energy fraction in ring in dR 0.05-0.1",
103  tab->addColumn<float>("EmFractionEnergyRing2",
104  EmFractionEnergyRings[2],
105  "Em energy fraction in ring in dR 0.1-0.2",
107  tab->addColumn<float>("EmFractionEnergyRing3",
108  EmFractionEnergyRings[3],
109  "Em energy fraction in ring in dR 0.2-0.3",
111  tab->addColumn<float>("EmFractionEnergyRing4",
112  EmFractionEnergyRings[4],
113  "Em energy fraction in ring in dR 0.3-0.4",
115  tab->addColumn<float>("EmFractionEnergyRing5",
116  EmFractionEnergyRings[5],
117  "Em energy fraction in ring in dR 0.4 overflow",
119 
120  tab->addColumn<float>("ChFractionEnergyRing0",
121  ChFractionEnergyRings[0],
122  "Ch energy fraction in ring in dR 0-0.05",
124  tab->addColumn<float>("ChFractionEnergyRing1",
125  ChFractionEnergyRings[1],
126  "Ch energy fraction in ring in dR 0.05-0.1",
128  tab->addColumn<float>("ChFractionEnergyRing2",
129  ChFractionEnergyRings[2],
130  "Ch energy fraction in ring in dR 0.1-0.2",
132  tab->addColumn<float>("ChFractionEnergyRing3",
133  ChFractionEnergyRings[3],
134  "Ch energy fraction in ring in dR 0.2-0.3",
136  tab->addColumn<float>("ChFractionEnergyRing4",
137  ChFractionEnergyRings[4],
138  "Ch energy fraction in ring in dR 0.3-0.4",
140  tab->addColumn<float>("ChFractionEnergyRing5",
141  ChFractionEnergyRings[5],
142  "Ch energy fraction in ring in dR 0.4 overflow",
144 
145  tab->addColumn<float>("MuFractionEnergyRing0",
146  MuFractionEnergyRings[0],
147  "Mu energy fraction in ring in dR 0-0.05",
149  tab->addColumn<float>("MuFractionEnergyRing1",
150  MuFractionEnergyRings[1],
151  "Mu energy fraction in ring in dR 0.05-0.1",
153  tab->addColumn<float>("MuFractionEnergyRing2",
154  MuFractionEnergyRings[2],
155  "Mu energy fraction in ring in dR 0.1-0.2",
157  tab->addColumn<float>("MuFractionEnergyRing3",
158  MuFractionEnergyRings[3],
159  "Mu energy fraction in ring in dR 0.2-0.3",
161  tab->addColumn<float>("MuFractionEnergyRing4",
162  MuFractionEnergyRings[4],
163  "Mu energy fraction in ring in dR 0.3-0.4",
165  tab->addColumn<float>("MuFractionEnergyRing5",
166  MuFractionEnergyRings[5],
167  "Mu energy fraction in ring in dR 0.4 overflow",
169 
170  tab->addColumn<float>("NeFractionEnergyRing0",
171  NeFractionEnergyRings[0],
172  "Ne energy fraction in ring in dR 0-0.05",
174  tab->addColumn<float>("NeFractionEnergyRing1",
175  NeFractionEnergyRings[1],
176  "Ne energy fraction in ring in dR 0.05-0.1",
178  tab->addColumn<float>("NeFractionEnergyRing2",
179  NeFractionEnergyRings[2],
180  "Ne energy fraction in ring in dR 0.1-0.2",
182  tab->addColumn<float>("NeFractionEnergyRing3",
183  NeFractionEnergyRings[3],
184  "Ne energy fraction in ring in dR 0.2-0.3",
186  tab->addColumn<float>("NeFractionEnergyRing4",
187  NeFractionEnergyRings[4],
188  "Ne energy fraction in ring in dR 0.3-0.4",
190  tab->addColumn<float>("NeFractionEnergyRing5",
191  NeFractionEnergyRings[5],
192  "Ne energy fraction in ring in dR 0.4 overflow",
194 
195  iEvent.put(std::move(tab));
196 }
197 
199 //define this as a plug-in
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
Definition: HeavyIon.h:7
edm::EDGetTokenT< edm::View< pat::Jet > > srcJet_
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Definition: Jet.py:1
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterDescriptionBase * add(U const &iLabel, T const &value)
d
Definition: ztail.py:151
EnergyRingsTableProducer(const edm::ParameterSet &iConfig)
void produce(edm::Event &, edm::EventSetup const &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLT enums.
def move(src, dest)
Definition: eostools.py:511