CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
MultShiftMETcorrInputProducer Class Reference

#include <MultShiftMETcorrInputProducer.h>

Inheritance diagram for MultShiftMETcorrInputProducer:
edm::stream::EDProducer<>

Public Member Functions

 MultShiftMETcorrInputProducer (const edm::ParameterSet &)
 
 ~MultShiftMETcorrInputProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Static Private Member Functions

static int translateTypeToAbsPdgId (reco::PFCandidate::ParticleType type)
 

Private Attributes

std::vector< edm::ParameterSetcfgCorrParameters_
 
std::vector< int > counts_
 
std::vector< double > etaMax_
 
std::vector< double > etaMin_
 
std::vector< std::unique_ptr< TF1 > > formula_x_
 
std::vector< std::unique_ptr< TF1 > > formula_y_
 
std::string moduleLabel_
 
edm::EDGetTokenT< edm::View< reco::Candidate > > pflow_
 
std::vector< double > sumPt_
 
std::vector< int > type_
 
std::vector< int > varType_
 
edm::EDGetTokenT< edm::View< reco::Vertex > > vertices_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Compute MET correction to compensate systematic shift of MET in x/y-direction (cf. https://indico.cern.ch/getFile.py/access?contribId=1&resId=0&materialId=slides&confId=174318 )

Authors
Robert Schoefbeck, Vienna

Definition at line 31 of file MultShiftMETcorrInputProducer.h.

Constructor & Destructor Documentation

MultShiftMETcorrInputProducer::MultShiftMETcorrInputProducer ( const edm::ParameterSet cfg)
explicit

Definition at line 34 of file MultShiftMETcorrInputProducer.cc.

References mps_setup::append, cfgCorrParameters_, counts_, etaMax_, etaMin_, formula_x_, formula_y_, edm::ParameterSet::getParameter(), mps_fire::i, moduleLabel_, pflow_, AlCaHLTBitMon_QueryRunRegistry::string, sumPt_, type_, findQualityFiles::v, varType_, and vertices_.

35  : moduleLabel_(cfg.getParameter<std::string>("@module_label")) {
36  pflow_ = consumes<edm::View<reco::Candidate> >(cfg.getParameter<edm::InputTag>("srcPFlow"));
37  vertices_ = consumes<edm::View<reco::Vertex> >(cfg.getParameter<edm::InputTag>("vertexCollection"));
38 
39  cfgCorrParameters_ = cfg.getParameter<std::vector<edm::ParameterSet> >("parameters");
40  etaMin_.clear();
41  etaMax_.clear();
42  type_.clear();
43  varType_.clear();
44 
45  produces<CorrMETData>();
46 
47  for (std::vector<edm::ParameterSet>::const_iterator v = cfgCorrParameters_.begin(); v != cfgCorrParameters_.end();
48  v++) {
49  TString corrPxFormula = v->getParameter<std::string>("fx");
50  TString corrPyFormula = v->getParameter<std::string>("fy");
51  std::vector<double> corrPxParams = v->getParameter<std::vector<double> >("px");
52  std::vector<double> corrPyParams = v->getParameter<std::vector<double> >("py");
53 
54  formula_x_.push_back(std::unique_ptr<TF1>(new TF1(
55  std::string(moduleLabel_).append("_").append(v->getParameter<std::string>("name")).append("_corrPx").c_str(),
56  v->getParameter<std::string>("fx").c_str())));
57  formula_y_.push_back(std::unique_ptr<TF1>(new TF1(
58  std::string(moduleLabel_).append("_").append(v->getParameter<std::string>("name")).append("_corrPy").c_str(),
59  v->getParameter<std::string>("fy").c_str())));
60 
61  for (unsigned i = 0; i < corrPxParams.size(); i++)
62  formula_x_.back()->SetParameter(i, corrPxParams[i]);
63  for (unsigned i = 0; i < corrPyParams.size(); i++)
64  formula_y_.back()->SetParameter(i, corrPyParams[i]);
65 
66  counts_.push_back(0);
67  sumPt_.push_back(0.);
68  etaMin_.push_back(v->getParameter<double>("etaMin"));
69  etaMax_.push_back(v->getParameter<double>("etaMax"));
70  type_.push_back(v->getParameter<int>("type"));
71  varType_.push_back(v->getParameter<int>("varType"));
72  }
73 }
T getParameter(std::string const &) const
edm::EDGetTokenT< edm::View< reco::Vertex > > vertices_
std::vector< edm::ParameterSet > cfgCorrParameters_
std::vector< std::unique_ptr< TF1 > > formula_x_
std::vector< std::unique_ptr< TF1 > > formula_y_
edm::EDGetTokenT< edm::View< reco::Candidate > > pflow_
MultShiftMETcorrInputProducer::~MultShiftMETcorrInputProducer ( )
override

Definition at line 75 of file MultShiftMETcorrInputProducer.cc.

75 {}

Member Function Documentation

void MultShiftMETcorrInputProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
overrideprivate

Definition at line 77 of file MultShiftMETcorrInputProducer.cc.

References funct::abs(), HltBtagPostValidation_cff::c, cfgCorrParameters_, counts_, DEFINE_FWK_MODULE, reco::Candidate::eta(), etaMax_, etaMin_, formula_x_, formula_y_, edm::Event::getByToken(), metFilters_cff::goodVertices, mps_fire::i, edm::HandleBase::isValid(), dqmiolumiharvest::j, eostools::move(), pfLinker_cff::particleFlow, reco::Candidate::pdgId(), pflow_, position, reco::Candidate::pt(), edm::Event::put(), rho, sumPt_, translateTypeToAbsPdgId(), type_, findQualityFiles::v, heppy_batch::val, varType_, vertices_, and z.

77  {
78  //get primary vertices
80  evt.getByToken(vertices_, hpv);
81  if (!hpv.isValid()) {
82  edm::LogError("MultShiftMETcorrInputProducer::produce") << "could not find vertex collection ";
83  }
84  std::vector<reco::Vertex> goodVertices;
85  for (unsigned i = 0; i < hpv->size(); i++) {
86  if ((*hpv)[i].ndof() > 4 && (fabs((*hpv)[i].z()) <= 24.) && (fabs((*hpv)[i].position().rho()) <= 2.0))
87  goodVertices.push_back((*hpv)[i]);
88  }
89  int ngoodVertices = goodVertices.size();
90 
91  for (unsigned i = 0; i < counts_.size(); i++)
92  counts_[i] = 0;
93  for (unsigned i = 0; i < sumPt_.size(); i++)
94  sumPt_[i] = 0.;
95 
97  evt.getByToken(pflow_, particleFlow);
98  for (unsigned i = 0; i < particleFlow->size(); ++i) {
99  const reco::Candidate& c = particleFlow->at(i);
100  for (unsigned j = 0; j < type_.size(); j++) {
102  if ((c.eta() > etaMin_[j]) and (c.eta() < etaMax_[j])) {
103  counts_[j] += 1;
104  sumPt_[j] += c.pt();
105  continue;
106  }
107  }
108  }
109  }
110 
111  //MM: loop over all constituent types and sum each correction
112  std::unique_ptr<CorrMETData> metCorr(new CorrMETData());
113 
114  double corx = 0.;
115  double cory = 0.;
116 
117  for (std::vector<edm::ParameterSet>::const_iterator v = cfgCorrParameters_.begin(); v != cfgCorrParameters_.end();
118  v++) {
119  unsigned j = v - cfgCorrParameters_.begin();
120 
121  double val(0.);
122  if (varType_[j] == 0) {
123  val = counts_[j];
124  }
125  if (varType_[j] == 1) {
126  val = ngoodVertices;
127  }
128  if (varType_[j] == 2) {
129  val = sumPt_[j];
130  }
131 
132  corx -= formula_x_[j]->Eval(val);
133  cory -= formula_y_[j]->Eval(val);
134 
135  } //end loop over corrections
136 
137  metCorr->mex = corx;
138  metCorr->mey = cory;
139  evt.put(std::move(metCorr), "");
140 }
edm::EDGetTokenT< edm::View< reco::Vertex > > vertices_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
ParticleType
particle types
Definition: PFCandidate.h:43
std::vector< edm::ParameterSet > cfgCorrParameters_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
goodVertices
The Good vertices collection needed by the tracking failure filter ________||.
static int translateTypeToAbsPdgId(reco::PFCandidate::ParticleType type)
virtual int pdgId() const =0
PDG identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isValid() const
Definition: HandleBase.h:70
virtual double eta() const =0
momentum pseudorapidity
virtual double pt() const =0
transverse momentum
a MET correction term
Definition: CorrMETData.h:14
static int position[264][3]
Definition: ReadPGInfo.cc:289
std::vector< std::unique_ptr< TF1 > > formula_x_
std::vector< std::unique_ptr< TF1 > > formula_y_
def move(src, dest)
Definition: eostools.py:511
edm::EDGetTokenT< edm::View< reco::Candidate > > pflow_
int MultShiftMETcorrInputProducer::translateTypeToAbsPdgId ( reco::PFCandidate::ParticleType  type)
staticprivate

Definition at line 12 of file MultShiftMETcorrInputProducer.cc.

References MillePedeFileConverter_cfg::e, CustomPhysics_cfi::gamma, h, amptDefaultParameters_cff::mu, and X.

Referenced by produce().

12  {
13  switch (type) {
15  return 211; // pi+
17  return 11;
19  return 13;
21  return 22;
22  case reco::PFCandidate::ParticleType::h0:
23  return 130; // K_L0
24  case reco::PFCandidate::ParticleType::h_HF:
25  return 1; // dummy pdg code
26  case reco::PFCandidate::ParticleType::egamma_HF:
27  return 2; // dummy pdg code
29  default:
30  return 0;
31  }
32 }
type
Definition: HCALResponse.h:21
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
#define X(str)
Definition: MuonsGrabber.cc:38

Member Data Documentation

std::vector<edm::ParameterSet> MultShiftMETcorrInputProducer::cfgCorrParameters_
private

Definition at line 44 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<int> MultShiftMETcorrInputProducer::counts_
private

Definition at line 47 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<double> MultShiftMETcorrInputProducer::etaMax_
private

Definition at line 46 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<double> MultShiftMETcorrInputProducer::etaMin_
private

Definition at line 46 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<std::unique_ptr<TF1> > MultShiftMETcorrInputProducer::formula_x_
private

Definition at line 49 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<std::unique_ptr<TF1> > MultShiftMETcorrInputProducer::formula_y_
private

Definition at line 50 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::string MultShiftMETcorrInputProducer::moduleLabel_
private
edm::EDGetTokenT<edm::View<reco::Candidate> > MultShiftMETcorrInputProducer::pflow_
private

Definition at line 40 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<double> MultShiftMETcorrInputProducer::sumPt_
private

Definition at line 48 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

std::vector<int> MultShiftMETcorrInputProducer::type_
private
std::vector<int> MultShiftMETcorrInputProducer::varType_
private

Definition at line 47 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().

edm::EDGetTokenT<edm::View<reco::Vertex> > MultShiftMETcorrInputProducer::vertices_
private

Definition at line 41 of file MultShiftMETcorrInputProducer.h.

Referenced by MultShiftMETcorrInputProducer(), and produce().