16 #include <type_traits> 37 produces<std::vector<T>>();
49 desc.add<
bool>(
"computeMiniIso",
false)->setComment(
"Recompute miniIsolation");
50 desc.add<
bool>(
"fixDxySign",
false)->setComment(
"Fix the IP sign");
52 ->setComment(
"PackedCandidate collection used for miniIso");
54 desc.add<
bool>(
"recomputeMuonBasicSelectors",
false)
55 ->setComment(
"Recompute basic cut-based muon selector flags");
56 desc.addOptional<std::vector<double>>(
"miniIsoParams")
57 ->setComment(
"Parameters used for miniIso (as in PATMuonProducer)");
58 descriptions.
add(
"muonsUpdated",
desc);
60 desc.addOptional<std::vector<double>>(
"miniIsoParamsB")
61 ->setComment(
"Parameters used for miniIso in the barrel (as in PATElectronProducer)");
62 desc.addOptional<std::vector<double>>(
"miniIsoParamsE")
63 ->setComment(
"Parameters used for miniIso in the endcap (as in PATElectronProducer)");
64 descriptions.
add(
"electronsUpdated",
desc);
73 throw cms::Exception(
"ParameterError",
"miniIsoParams must have exactly 9 elements.\n");
107 miniIsoParams_[0] = iConfig.
getParameter<std::vector<double>>(
"miniIsoParamsB");
108 miniIsoParams_[1] = iConfig.
getParameter<std::vector<double>>(
"miniIsoParamsE");
109 if (miniIsoParams_[0].size() != 9)
110 throw cms::Exception(
"ParameterError",
"miniIsoParamsB must have exactly 9 elements.\n");
111 if (miniIsoParams_[1].size() != 9)
112 throw cms::Exception(
"ParameterError",
"miniIsoParamsE must have exactly 9 elements.\n");
116 return miniIsoParams_[lep.
isEE()];
119 template <
typename T>
122 const bool do_hip_mitigation_2016)
const {}
127 const bool do_hip_mitigation_2016)
const {
133 template <
typename T>
144 iEvent.getByToken(pcToken_, pc);
147 iEvent.getByToken(beamLineToken_, beamSpotHandle);
149 bool beamSpotIsValid =
false;
150 if (beamSpotHandle.
isValid()) {
152 beamSpotIsValid =
true;
154 edm::LogError(
"DataNotAvailable") <<
"No beam spot available \n";
157 std::unique_ptr<std::vector<T>>
out(
new std::vector<T>(*
src));
159 const bool do_hip_mitigation_2016 =
160 recomputeMuonBasicSelectors_ && (272728 <=
iEvent.run() &&
iEvent.run() <= 278808);
162 for (
unsigned int i = 0,
n =
src->size();
i <
n; ++
i) {
165 if (computeMiniIso_) {
178 lep.setMiniPFIsolation(miniiso);
180 if (recomputeMuonBasicSelectors_)
186 if (beamSpotIsValid) {
187 if constexpr (std::is_same_v<T, pat::Electron>)
188 signBS = copysign(1., lep.gsfTrack()->dxy(
beamSpot));
190 signBS = copysign(1., lep.bestTrack()->dxy(
beamSpot));
192 if constexpr (std::is_same_v<T, pat::Electron>)
193 signPV = copysign(1., lep.gsfTrack()->dxy(
pv.position()));
195 signPV = copysign(1., lep.bestTrack()->dxy(
pv.position()));
196 lep.setDB(
abs(lep.dB(T::PV2D)) * signPV, lep.edB(T::PV2D), T::PV2D);
197 lep.setDB(
abs(lep.dB(T::BS2D)) * signBS, lep.edB(T::BS2D), T::BS2D);
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override
T getParameter(std::string const &) const
void setDZ(T &lep, const reco::Vertex &pv) const
MPlex< T, D1, D2, N > hypot(const MPlex< T, D1, D2, N > &a, const MPlex< T, D1, D2, N > &b)
pat::LeptonUpdater< pat::Electron > PATElectronUpdater
T const * product() const
LeptonUpdater(const edm::ParameterSet &iConfig)
reco::GsfTrackRef gsfTrack() const override
override the reco::GsfElectron::gsfTrack method, to access the internal storage of the supercluster ...
Log< level::Error, false > LogError
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=nullptr, bool run2016_hip_mitigation=false)
edm::EDGetTokenT< std::vector< T > > src_
pat::LeptonUpdater< pat::Muon > PATMuonUpdater
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
void setDB(double dB, double edB, IPTYPE type)
Set impact parameter of a certain type and its uncertainty.
void setDB(double dB, double edB, IPTYPE type=PV2D)
bool recomputeMuonBasicSelectors_
void setSelectors(uint64_t selectors)
~LeptonUpdater() override
recomputeMuonBasicSelectors
Abs< T >::type abs(const T &t)
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
void recomputeMuonBasicSelectors(T &, const reco::Vertex &, const bool) const
Analysis-level electron class.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void readMiniIsoParams(const edm::ParameterSet &iConfig)
const std::vector< double > & miniIsoParams(const T &lep) const
std::vector< double > miniIsoParams_[2]
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)
reco::TrackRef muonBestTrack() const override
Track selected to be the best measurement of the muon parameters (including PFlow global information)...
Analysis-level muon class.
edm::EDGetTokenT< std::vector< reco::Vertex > > vertices_