CMS 3D CMS Logo

BJetEnergyRegressionMVA.cc
Go to the documentation of this file.
1 //
2 // Original Author: Andre Rizzi
3 // Created: Mon, 07 Sep 2017 09:18:03 GMT
4 //
5 //
6 
9 
12 
15 
16 
20 
23 
27 
29 #include <vector>
30 
32  public:
33  explicit BJetEnergyRegressionMVA(const edm::ParameterSet &iConfig):
34  BaseMVAValueMapProducer<pat::Jet>(iConfig),
35  pvsrc_(edm::stream::EDProducer<>::consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("pvsrc"))),
36  svsrc_(edm::stream::EDProducer<>::consumes<edm::View<reco::VertexCompositePtrCandidate>> (iConfig.getParameter<edm::InputTag>("svsrc"))),
37  rhosrc_(edm::stream::EDProducer<>::consumes<double> (iConfig.getParameter<edm::InputTag>("rhosrc")))
38 
39  {
40 
41 
42  }
44  iEvent.getByToken(pvsrc_, pvs_);
45  iEvent.getByToken(svsrc_, svs_);
46  iEvent.getByToken(rhosrc_,rho_);
47 
48  }
49 
50  void fillAdditionalVariables(const pat::Jet&j) override {
51 
52  this->setValue("nPVs",pvs_->size());
53  this->setValue("rho",*(rho_.product()));
54 
55 
56  float cone_boundaries[] = { 0.05, 0.1, 0.2, 0.3,0.4 };
57  size_t ncone_boundaries = sizeof(cone_boundaries)/sizeof(float);
58  std::vector<float> emFractionEnergyRings(ncone_boundaries+1);
59  std::vector<float> chFractionEnergyRings(ncone_boundaries+1);
60  std::vector<float> neFractionEnergyRings(ncone_boundaries+1);
61  std::vector<float> muFractionEnergyRings(ncone_boundaries+1);
62  float jetRawEnergy=j.p4().E()*j.jecFactor("Uncorrected");
63  int numDaughtersPt03=0;
64  for (unsigned int ijcone = 0; ijcone<ncone_boundaries; ijcone++){
65  emFractionEnergyRings[ijcone] = 0;
66  muFractionEnergyRings[ijcone] = 0;
67  chFractionEnergyRings[ijcone] = 0;
68  neFractionEnergyRings[ijcone] = 0;
69  }
70  for(const auto & d : j.daughterPtrVector()){
71  float candDr = Geom::deltaR(d->p4(),j.p4());
72  size_t icone = std::lower_bound(&cone_boundaries[0],&cone_boundaries[ncone_boundaries],candDr) - &cone_boundaries[0];
73  float candEnergy = d->energy()/jetRawEnergy;
74  int pdgid = abs(d->pdgId()) ;
75  if( pdgid == 22 || pdgid == 11 ) {
76  emFractionEnergyRings[icone] += candEnergy;
77  } else if ( pdgid == 13 ) {
78  muFractionEnergyRings[icone] += candEnergy;
79  } else if ( d->charge() != 0 ) {
80  chFractionEnergyRings[icone] += candEnergy;
81  } else {
82  neFractionEnergyRings[icone] += candEnergy;
83  }
84  if(d->pt()>0.3) numDaughtersPt03+=1;
85  } // end of jet daughters loop
86 
87  this->setValue("Jet_energyRing_dR0_em_Jet_rawEnergy", emFractionEnergyRings[0]);
88  this->setValue("Jet_energyRing_dR1_em_Jet_rawEnergy", emFractionEnergyRings[1]);
89  this->setValue("Jet_energyRing_dR2_em_Jet_rawEnergy", emFractionEnergyRings[2]);
90  this->setValue("Jet_energyRing_dR3_em_Jet_rawEnergy", emFractionEnergyRings[3]);
91  this->setValue("Jet_energyRing_dR4_em_Jet_rawEnergy", emFractionEnergyRings[4]);
92  // this->setValue("Jet_energyRing_dR5_em_Jet_rawEnergy", emFractionEnergyRings[5]);
93 
94  this->setValue("Jet_energyRing_dR0_ch_Jet_rawEnergy", chFractionEnergyRings[0]);
95  this->setValue("Jet_energyRing_dR1_ch_Jet_rawEnergy", chFractionEnergyRings[1]);
96  this->setValue("Jet_energyRing_dR2_ch_Jet_rawEnergy", chFractionEnergyRings[2]);
97  this->setValue("Jet_energyRing_dR3_ch_Jet_rawEnergy", chFractionEnergyRings[3]);
98  this->setValue("Jet_energyRing_dR4_ch_Jet_rawEnergy", chFractionEnergyRings[4]);
99  // this->setValue("Jet_energyRing_dR5_ch_Jet_rawEnergy", chFractionEnergyRings[5]);
100 
101  this->setValue("Jet_energyRing_dR0_mu_Jet_rawEnergy", muFractionEnergyRings[0]);
102  this->setValue("Jet_energyRing_dR1_mu_Jet_rawEnergy", muFractionEnergyRings[1]);
103  this->setValue("Jet_energyRing_dR2_mu_Jet_rawEnergy", muFractionEnergyRings[2]);
104  this->setValue("Jet_energyRing_dR3_mu_Jet_rawEnergy", muFractionEnergyRings[3]);
105  this->setValue("Jet_energyRing_dR4_mu_Jet_rawEnergy", muFractionEnergyRings[4]);
106  // this->setValue("Jet_energyRing_dR5_mu_Jet_rawEnergy", muFractionEnergyRings[5]);
107 
108  this->setValue("Jet_energyRing_dR0_neut_Jet_rawEnergy", neFractionEnergyRings[0]);
109  this->setValue("Jet_energyRing_dR1_neut_Jet_rawEnergy", neFractionEnergyRings[1]);
110  this->setValue("Jet_energyRing_dR2_neut_Jet_rawEnergy", neFractionEnergyRings[2]);
111  this->setValue("Jet_energyRing_dR3_neut_Jet_rawEnergy", neFractionEnergyRings[3]);
112  this->setValue("Jet_energyRing_dR4_neut_Jet_rawEnergy", neFractionEnergyRings[4]);
113 // this->setValue("Jet_energyRing_dR5_neut_Jet_rawEnergy", neFractionEnergyRings[5]);
114 
115  this->setValue("Jet_numDaughters_pt03",numDaughtersPt03);
116 
117  }
118 
121  desc.add<edm::InputTag>("pvsrc")->setComment("primary vertices input collection");
122  desc.add<edm::InputTag>("svsrc")->setComment("secondary vertices input collection");
123  desc.add<edm::InputTag>("rhosrc")->setComment("rho input collection");
124  descriptions.add("BJetEnergyRegressionMVA",desc);
125  }
126 
127  private:
134 
135 
136 };
137 
138 //define this as a plug-in
140 
static edm::ParameterSetDescription getDescription()
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
void setValue(const std::string var, float val)
Definition: HeavyIon.h:7
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Definition: Jet.py:1
const edm::EDGetTokenT< edm::View< reco::VertexCompositePtrCandidate > > svsrc_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::Handle< std::vector< reco::Vertex > > pvs_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::Handle< edm::View< reco::VertexCompositePtrCandidate > > svs_
edm::EDGetTokenT< double > rhosrc_
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvsrc_
T const * product() const
Definition: Handle.h:74
Analysis-level calorimeter jet class.
Definition: Jet.h:80
void add(std::string const &label, ParameterSetDescription const &psetDescription)
BJetEnergyRegressionMVA(const edm::ParameterSet &iConfig)
void readAdditionalCollections(edm::Event &iEvent, const edm::EventSetup &) override
to be implemented in derived classes, filling values for additional variables
fixed size matrix
HLT enums.
float jecFactor(const std::string &level, const std::string &flavor="none", const std::string &set="") const
const reco::CompositePtrCandidate::daughters & daughterPtrVector() const override
references to daughtes
void fillAdditionalVariables(const pat::Jet &j) override