16 bool passesQuality(
const reco::Track& trk,
const std::vector<reco::TrackBase::TrackQuality>& allowedQuals) {
17 for (
const auto& qual : allowedQuals) {
78 iConfig.getParameter<
edm::InputTag>(
"packedPFCandidates"))),
85 minPt_(iConfig.getParameter<double>(
"minPt")),
86 minHits_(iConfig.getParameter<uint32_t>(
"minHits")),
87 minPixelHits_(iConfig.getParameter<uint32_t>(
"minPixelHits")),
95 iConfig.getParameter<
edm::
ParameterSet>(
"pvAssignment").getParameter<double>(
"maxDzForPrimaryAssignment")),
97 iConfig.getParameter<
edm::
ParameterSet>(
"pvAssignment").getParameter<double>(
"maxDzSigForPrimaryAssignment")),
99 .getParameter<double>(
"maxDzErrorForPrimaryAssignment")),
101 .getParameter<double>(
"maxDxyForNotReconstructedPrimary")),
103 .getParameter<double>(
"maxDxySigForNotReconstructedPrimary")),
106 std::vector<std::string> trkQuals(iConfig.
getParameter<std::vector<std::string>>(
"qualsToAutoAccept"));
112 std::ostringstream
msg;
113 msg <<
" PATLostTracks has a quality requirement which resolves to undefQuality. This usually means a typo and is " 114 "therefore treated a config error\nquality requirements:\n ";
115 for (
const auto& trkQual : trkQuals)
116 msg << trkQual <<
" ";
120 produces<std::vector<reco::Track>>();
121 produces<std::vector<pat::PackedCandidate>>();
122 produces<std::vector<pat::PackedCandidate>>(
"eleTracks");
123 produces<edm::Association<pat::PackedCandidateCollection>>();
156 auto outPtrTrks = std::make_unique<std::vector<reco::Track>>();
157 auto outPtrTrksAsCands = std::make_unique<std::vector<pat::PackedCandidate>>();
158 auto outPtrEleTrksAsCands = std::make_unique<std::vector<pat::PackedCandidate>>();
165 for (
unsigned int ic = 0, nc = cands->size(); ic < nc; ++ic) {
169 if (cand.
pdgId() == 11)
171 else if (cand.
pdgId() == -11)
173 else if ((*pf2pc)[r]->numberOfHits() > 0)
181 for (
const auto& secVert : *vertices) {
182 for (
auto trkIt = secVert.tracks_begin(); trkIt != secVert.tracks_end(); trkIt++) {
187 for (
const auto& v0 : *kshorts) {
188 for (
size_t dIdx = 0; dIdx < v0.numberOfDaughters(); dIdx++) {
194 for (
const auto& v0 : *lambdas) {
195 for (
size_t dIdx = 0; dIdx < v0.numberOfDaughters(); dIdx++) {
201 std::vector<int>
mapping(tracks->size(), -1);
203 for (
unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) {
206 outPtrTrks->emplace_back(*trk);
208 std::pair<int, pat::PackedCandidate::PVAssociationQuality> pvAsso =
associateTrkToVtx(*pvOrigs, trk);
212 }
else if (!pvs->empty()) {
215 addPackedCandidate(*outPtrTrksAsCands, trk,
pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons);
219 mapping[trkIndx] = lostTrkIndx;
224 std::pair<int, pat::PackedCandidate::PVAssociationQuality> pvAsso =
associateTrkToVtx(*pvOrigs, trk);
228 }
else if (!pvs->empty()) {
231 addPackedCandidate(*outPtrEleTrksAsCands, trk,
pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons);
236 iEvent.
put(
std::move(outPtrEleTrksAsCands),
"eleTracks");
238 auto tk2pc = std::make_unique<edm::Association<pat::PackedCandidateCollection>>(oh);
260 const float mass = 0.13957018;
262 int id = 211 * trk->charge();
270 for (
auto&
mu : *muons) {
272 id = -13 * trk->charge();
292 cands.back().setLostInnerHits(lostHits);
301 if (trk->hitPattern().numberOfValidPixelHits() > 0) {
302 cands.back().setTrackProperties(
305 cands.back().setTrackProperties(
310 if (trk->hitPattern().numberOfValidPixelHits() > 0) {
311 cands.back().setTrackProperties(
314 cands.back().setTrackProperties(
318 cands.back().setAssociationQuality(pvAssocQuality);
327 float w = vertices[0].trackWeight(trk);
331 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(0,
334 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(-1,
342 int iVtxMaxWeight = -1;
343 int iVtxMinDzDist = -1;
348 for (
auto const&
vtx : vertices) {
349 float w =
vtx.trackWeight(trk);
351 double dzSig = dz / trk->dzError();
356 if (dzSig < minDzSig) {
364 if (iVtxMaxWeight >= 0) {
365 if (maxWeight > 0.5) {
366 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMaxWeight,
369 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMaxWeight,
375 const double add_cov = vertices[iVtxMinDzDist].covariance(2, 2);
376 const double dzErr =
sqrt(trk->dzError() * trk->dzError() + add_cov);
378 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMinDzDist,
386 return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMinDzDist,
T getParameter(std::string const &) const
int pdgId() const final
PDG identifier.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< VertexCompositeCandidate > VertexCompositeCandidateCollection
collection of Candidate objects
bool isNonnull() const
Checks for non-null.
const double minPtToStoreProps_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~PATLostTracks() override
std::vector< pat::PackedCandidate > PackedCandidateCollection
const double maxDzSigForPrimaryAssignment_
std::vector< Track > TrackCollection
collection of Tracks
std::vector< Vertex > VertexCollection
collection of Vertex objects
int charge() const final
electric charge
key_type key() const
Accessor for product key.
PATLostTracks(const edm::ParameterSet &)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
const double maxDxyForNotReconstructedPrimary_
const int covarianceVersion_
ProductID id() const
Accessor for product ID.
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
reco::TrackRef trackRef() const
const edm::EDGetTokenT< reco::PFCandidateCollection > cands_
#define DEFINE_FWK_MODULE(type)
const double maxDzErrorForPrimaryAssignment_
const edm::EDGetTokenT< reco::MuonCollection > muons_
const bool useLegacySetup_
double pt() const
track transverse momentum
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > lambdas_
Abs< T >::type abs(const T &t)
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
unsigned short numberOfValidHits() const
number of valid hits found
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
std::pair< int, pat::PackedCandidate::PVAssociationQuality > associateTrkToVtx(const reco::VertexCollection &vertices, const reco::TrackRef &trk) const
const double maxDzForPrimaryAssignment_
const double maxDxySigForNotReconstructedPrimary_
LostInnerHits
Enumerator specifying the.
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
static TrackQuality qualityByName(const std::string &name)
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > map_
void addPackedCandidate(std::vector< pat::PackedCandidate > &cands, const reco::TrackRef &trk, const reco::VertexRef &pvSlimmed, const reco::VertexRefProd &pvSlimmedColl, const TrkStatus &trkStatus, const pat::PackedCandidate::PVAssociationQuality &pvAssocQuality, edm::Handle< reco::MuonCollection > muons) const
bool passTrkCuts(const reco::Track &tr) const
const edm::EDGetTokenT< reco::TrackCollection > tracks_
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
const edm::EDGetTokenT< reco::VertexCollection > vertices_
const bool fillLostInnerHits_
const std::vector< int > covariancePackingSchemas_
bool quality(const TrackQuality) const
Track quality.
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > kshorts_
std::vector< Muon > MuonCollection
std::vector< reco::TrackBase::TrackQuality > qualsToAutoAccept_
StringCutObjectSelector< reco::Track, false > passThroughCut_
Particle reconstructed by the particle flow algorithm.
int numberOfValidPixelHits() const
const double minPixelHits_
const edm::EDGetTokenT< reco::VertexCollection > pv_
const edm::EDGetTokenT< reco::VertexCollection > pvOrigs_
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.