CMS 3D CMS Logo

LeptonUpdater.cc
Go to the documentation of this file.
10 
15 
16 namespace pat {
17 
18  template <typename T>
20  public:
21  explicit LeptonUpdater(const edm::ParameterSet &iConfig)
22  : src_(consumes<std::vector<T>>(iConfig.getParameter<edm::InputTag>("src"))),
23  vertices_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("vertices"))),
24  beamLineToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamspot"))),
25  computeMiniIso_(iConfig.getParameter<bool>("computeMiniIso")),
26  fixDxySign_(iConfig.getParameter<bool>("fixDxySign")) {
27  //for mini-isolation calculation
28  if (computeMiniIso_) {
29  readMiniIsoParams(iConfig);
30  pcToken_ = consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfCandsForMiniIso"));
31  }
33  if (typeid(T) == typeid(pat::Muon))
34  recomputeMuonBasicSelectors_ = iConfig.getParameter<bool>("recomputeMuonBasicSelectors");
35  produces<std::vector<T>>();
36  }
37 
38  ~LeptonUpdater() override {}
39 
40  void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override;
41 
42  static void fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
44  desc.add<edm::InputTag>("src")->setComment("Lepton collection");
45  desc.add<edm::InputTag>("vertices")->setComment("Vertex collection");
46  desc.add<edm::InputTag>("beamspot", edm::InputTag("offlineBeamSpot"))->setComment("Beam spot");
47  desc.add<bool>("computeMiniIso", false)->setComment("Recompute miniIsolation");
48  desc.add<bool>("fixDxySign", false)->setComment("Fix the IP sign");
49  desc.addOptional<edm::InputTag>("pfCandsForMiniIso", edm::InputTag("packedPFCandidates"))
50  ->setComment("PackedCandidate collection used for miniIso");
51  if (typeid(T) == typeid(pat::Muon)) {
52  desc.add<bool>("recomputeMuonBasicSelectors", false)
53  ->setComment("Recompute basic cut-based muon selector flags");
54  desc.addOptional<std::vector<double>>("miniIsoParams")
55  ->setComment("Parameters used for miniIso (as in PATMuonProducer)");
56  descriptions.add("muonsUpdated", desc);
57  } else if (typeid(T) == typeid(pat::Electron)) {
58  desc.addOptional<std::vector<double>>("miniIsoParamsB")
59  ->setComment("Parameters used for miniIso in the barrel (as in PATElectronProducer)");
60  desc.addOptional<std::vector<double>>("miniIsoParamsE")
61  ->setComment("Parameters used for miniIso in the endcap (as in PATElectronProducer)");
62  descriptions.add("electronsUpdated", desc);
63  }
64  }
65 
66  void setDZ(T &lep, const reco::Vertex &pv) const {}
67 
68  void readMiniIsoParams(const edm::ParameterSet &iConfig) {
69  miniIsoParams_[0] = iConfig.getParameter<std::vector<double>>("miniIsoParams");
70  if (miniIsoParams_[0].size() != 9)
71  throw cms::Exception("ParameterError", "miniIsoParams must have exactly 9 elements.\n");
72  }
73  const std::vector<double> &miniIsoParams(const T &lep) const { return miniIsoParams_[0]; }
74 
75  void recomputeMuonBasicSelectors(T &, const reco::Vertex &, const bool) const;
76 
77  private:
78  // configurables
85  std::vector<double> miniIsoParams_[2];
87  };
88 
89  // must do the specialization within the namespace otherwise gcc complains
90  //
91  template <>
93  auto track = anElectron.gsfTrack();
94  anElectron.setDB(track->dz(pv.position()), std::hypot(track->dzError(), pv.zError()), pat::Electron::PVDZ);
95  }
96 
97  template <>
99  auto track = aMuon.muonBestTrack();
100  aMuon.setDB(track->dz(pv.position()), std::hypot(track->dzError(), pv.zError()), pat::Muon::PVDZ);
101  }
102 
103  template <>
105  miniIsoParams_[0] = iConfig.getParameter<std::vector<double>>("miniIsoParamsB");
106  miniIsoParams_[1] = iConfig.getParameter<std::vector<double>>("miniIsoParamsE");
107  if (miniIsoParams_[0].size() != 9)
108  throw cms::Exception("ParameterError", "miniIsoParamsB must have exactly 9 elements.\n");
109  if (miniIsoParams_[1].size() != 9)
110  throw cms::Exception("ParameterError", "miniIsoParamsE must have exactly 9 elements.\n");
111  }
112  template <>
113  const std::vector<double> &LeptonUpdater<pat::Electron>::miniIsoParams(const pat::Electron &lep) const {
114  return miniIsoParams_[lep.isEE()];
115  }
116 
117  template <typename T>
119  const reco::Vertex &pv,
120  const bool do_hip_mitigation_2016) const {}
121 
122  template <>
124  const reco::Vertex &pv,
125  const bool do_hip_mitigation_2016) const {
126  lep.setSelectors(muon::makeSelectorBitset(lep, &pv, do_hip_mitigation_2016));
127  }
128 
129 } // namespace pat
130 
131 template <typename T>
134  iEvent.getByToken(src_, src);
135 
137  iEvent.getByToken(vertices_, vertices);
138  const reco::Vertex &pv = vertices->front();
139 
141  if (computeMiniIso_)
142  iEvent.getByToken(pcToken_, pc);
143 
144  edm::Handle<reco::BeamSpot> beamSpotHandle;
145  iEvent.getByToken(beamLineToken_, beamSpotHandle);
147  bool beamSpotIsValid = false;
148  if (beamSpotHandle.isValid()) {
149  beamSpot = *beamSpotHandle;
150  beamSpotIsValid = true;
151  } else {
152  edm::LogError("DataNotAvailable") << "No beam spot available \n";
153  }
154 
155  std::unique_ptr<std::vector<T>> out(new std::vector<T>(*src));
156 
157  const bool do_hip_mitigation_2016 =
158  recomputeMuonBasicSelectors_ && (272728 <= iEvent.run() && iEvent.run() <= 278808);
159 
160  for (unsigned int i = 0, n = src->size(); i < n; ++i) {
161  T &lep = (*out)[i];
162  setDZ(lep, pv);
163  if (computeMiniIso_) {
164  const auto &params = miniIsoParams(lep);
166  lep.polarP4(),
167  params[0],
168  params[1],
169  params[2],
170  params[3],
171  params[4],
172  params[5],
173  params[6],
174  params[7],
175  params[8]);
176  lep.setMiniPFIsolation(miniiso);
177  }
178  if (recomputeMuonBasicSelectors_)
179  recomputeMuonBasicSelectors(lep, pv, do_hip_mitigation_2016);
180  //Fixing the sign of impact parameters
181  if (fixDxySign_) {
182  float signPV = 1.;
183  float signBS = 1.;
184  if (beamSpotIsValid) {
185  if constexpr (std::is_same_v<T, pat::Electron>)
186  signBS = copysign(1., lep.gsfTrack()->dxy(beamSpot));
187  else
188  signBS = copysign(1., lep.bestTrack()->dxy(beamSpot));
189  }
190  if constexpr (std::is_same_v<T, pat::Electron>)
191  signPV = copysign(1., lep.gsfTrack()->dxy(pv.position()));
192  else
193  signPV = copysign(1., lep.bestTrack()->dxy(pv.position()));
194  lep.setDB(abs(lep.dB(T::PV2D)) * signPV, lep.edB(T::PV2D), T::PV2D);
195  lep.setDB(abs(lep.dB(T::BS2D)) * signBS, lep.edB(T::BS2D), T::BS2D);
196  }
197  }
198 
199  iEvent.put(std::move(out));
200 }
201 
204 
pat::LeptonUpdater::src_
edm::EDGetTokenT< std::vector< T > > src_
Definition: LeptonUpdater.cc:79
ConfigurationDescriptions.h
pat::LeptonUpdater::vertices_
edm::EDGetTokenT< std::vector< reco::Vertex > > vertices_
Definition: LeptonUpdater.cc:80
edm::StreamID
Definition: StreamID.h:30
reco::GsfElectron::isEE
bool isEE() const
Definition: GsfElectron.h:336
electrons_cff.bool
bool
Definition: electrons_cff.py:366
mps_fire.i
i
Definition: mps_fire.py:428
pat::Muon::muonBestTrack
reco::TrackRef muonBestTrack() const override
Track selected to be the best measurement of the muon parameters (including PFlow global information)
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
MessageLogger.h
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
pat::LeptonUpdater::miniIsoParams
const std::vector< double > & miniIsoParams(const T &lep) const
Definition: LeptonUpdater.cc:73
edm::Handle::product
T const * product() const
Definition: Handle.h:70
pat::Muon::PVDZ
Definition: Muon.h:237
align::BeamSpot
Definition: StructureType.h:95
pat::LeptonUpdater
Definition: LeptonUpdater.cc:19
pat::LeptonUpdater::~LeptonUpdater
~LeptonUpdater() override
Definition: LeptonUpdater.cc:38
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
edm::EDGetTokenT
Definition: EDGetToken.h:33
pat::LeptonUpdater::computeMiniIso_
bool computeMiniIso_
Definition: LeptonUpdater.cc:82
edm
HLT enums.
Definition: AlignableModifier.h:19
muons_cff.recomputeMuonBasicSelectors
recomputeMuonBasicSelectors
Definition: muons_cff.py:15
pat::LeptonUpdater::miniIsoParams_
std::vector< double > miniIsoParams_[2]
Definition: LeptonUpdater.cc:85
Muon.h
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
pat::Electron::gsfTrack
reco::GsfTrackRef gsfTrack() const override
override the reco::GsfElectron::gsfTrack method, to access the internal storage of the supercluster
muons_cff.miniIsoParams
miniIsoParams
Definition: muons_cff.py:14
pat::LeptonUpdater::produce
void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override
Definition: LeptonUpdater.cc:132
pat::LeptonUpdater::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: LeptonUpdater.cc:42
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
pat::Muon
Analysis-level muon class.
Definition: Muon.h:51
edm::Handle
Definition: AssociativeIterator.h:50
pat::Electron::setDB
void setDB(double dB, double edB, IPTYPE type)
Set impact parameter of a certain type and its uncertainty.
MakerMacros.h
pat::LeptonUpdater::fixDxySign_
bool fixDxySign_
Definition: LeptonUpdater.cc:83
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
pat::getMiniPFIsolation
PFIsolation getMiniPFIsolation(const pat::PackedCandidateCollection *pfcands, const reco::Candidate::PolarLorentzVector &p4, float mindr=0.05, float maxdr=0.2, float kt_scale=10.0, float ptthresh=0.5, float deadcone_ch=0.0001, float deadcone_pu=0.01, float deadcone_ph=0.01, float deadcone_nh=0.01, float dZ_cut=0.0)
Definition: MiniIsolation.cc:19
MuonSelectors.h
reco::BeamSpot
Definition: BeamSpot.h:21
PATMuonUpdater
pat::LeptonUpdater< pat::Muon > PATMuonUpdater
Definition: LeptonUpdater.cc:203
MiniIsolation.h
ParameterSetDescription.h
pat::Muon::setDB
void setDB(double dB, double edB, IPTYPE type=PV2D)
Definition: Muon.h:247
edm::global::EDProducer
Definition: EDProducer.h:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
edm::ParameterSet
Definition: ParameterSet.h:47
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
pat::LeptonUpdater::LeptonUpdater
LeptonUpdater(const edm::ParameterSet &iConfig)
Definition: LeptonUpdater.cc:21
Event.h
PackedCandidate.h
pat::LeptonUpdater::recomputeMuonBasicSelectors
void recomputeMuonBasicSelectors(T &, const reco::Vertex &, const bool) const
Definition: LeptonUpdater.cc:118
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
iEvent
int iEvent
Definition: GenABIO.cc:224
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::EventSetup
Definition: EventSetup.h:58
pat
Definition: HeavyIon.h:7
pat::LeptonUpdater::beamLineToken_
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
Definition: LeptonUpdater.cc:81
pat::LeptonUpdater::recomputeMuonBasicSelectors_
bool recomputeMuonBasicSelectors_
Definition: LeptonUpdater.cc:84
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
pat::LeptonUpdater::pcToken_
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
Definition: LeptonUpdater.cc:86
InputTag.h
muon::makeSelectorBitset
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=nullptr, bool run2016_hip_mitigation=false)
Definition: MuonSelectors.cc:1033
pat::PFIsolation
Definition: PFIsolation.h:12
pat::LeptonUpdater::setDZ
void setDZ(T &lep, const reco::Vertex &pv) const
Definition: LeptonUpdater.cc:66
pat::LeptonUpdater::readMiniIsoParams
void readMiniIsoParams(const edm::ParameterSet &iConfig)
Definition: LeptonUpdater.cc:68
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
T
long double T
Definition: Basic3DVectorLD.h:48
pat::Electron::PVDZ
Definition: Electron.h:190
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Electron.h
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
cms::Exception
Definition: Exception.h:70
pat::Electron
Analysis-level electron class.
Definition: Electron.h:51
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
View.h
PATElectronUpdater
pat::LeptonUpdater< pat::Electron > PATElectronUpdater
Definition: LeptonUpdater.cc:202
ParameterSet.h
edm::EDConsumerBase::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: EDConsumerBase.h:155
EDProducer.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
reco::Muon::setSelectors
void setSelectors(uint64_t selectors)
Definition: Muon.h:241
reco::Vertex
Definition: Vertex.h:35
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7