CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
pat::PATLostTracks Class Reference
Inheritance diagram for pat::PATLostTracks:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 PATLostTracks (const edm::ParameterSet &)
 
void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 
 ~PATLostTracks () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

enum  TrkStatus {
  TrkStatus::NOTUSED = 0, TrkStatus::PFCAND, TrkStatus::PFCANDNOTRKPROPS, TrkStatus::PFELECTRON,
  TrkStatus::PFPOSITRON, TrkStatus::VTX
}
 

Private Member Functions

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
 
std::pair< int, pat::PackedCandidate::PVAssociationQualityassociateTrkToVtx (const reco::VertexCollection &vertices, const reco::TrackRef &trk) const
 
bool passTrkCuts (const reco::Track &tr) const
 

Private Attributes

const edm::EDGetTokenT< reco::PFCandidateCollectioncands_
 
const std::vector< int > covariancePackingSchemas_
 
const int covarianceVersion_
 
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollectionkshorts_
 
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollectionlambdas_
 
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > map_
 
const double maxDxyForNotReconstructedPrimary_
 
const double maxDxySigForNotReconstructedPrimary_
 
const double maxDzErrorForPrimaryAssignment_
 
const double maxDzForPrimaryAssignment_
 
const double maxDzSigForPrimaryAssignment_
 
const double minHits_
 
const double minPixelHits_
 
const double minPt_
 
const double minPtToStoreProps_
 
const edm::EDGetTokenT< reco::MuonCollectionmuons_
 
StringCutObjectSelector< reco::Track, false > passThroughCut_
 
const edm::EDGetTokenT< reco::VertexCollectionpv_
 
const edm::EDGetTokenT< reco::VertexCollectionpvOrigs_
 
std::vector< reco::TrackBase::TrackQualityqualsToAutoAccept_
 
const edm::EDGetTokenT< reco::TrackCollectiontracks_
 
const bool useLegacySetup_
 
const edm::EDGetTokenT< reco::VertexCollectionvertices_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

Definition at line 26 of file PATLostTracks.cc.

Member Enumeration Documentation

◆ TrkStatus

enum pat::PATLostTracks::TrkStatus
strongprivate
Enumerator
NOTUSED 
PFCAND 
PFCANDNOTRKPROPS 
PFELECTRON 
PFPOSITRON 
VTX 

Definition at line 34 of file PATLostTracks.cc.

34 { NOTUSED = 0, PFCAND, PFCANDNOTRKPROPS, PFELECTRON, PFPOSITRON, VTX };

Constructor & Destructor Documentation

◆ PATLostTracks()

pat::PATLostTracks::PATLostTracks ( const edm::ParameterSet iConfig)
explicit

Definition at line 73 of file PATLostTracks.cc.

74  : cands_(consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("inputCandidates"))),
76  iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
77  tracks_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("inputTracks"))),
78  vertices_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("secondaryVertices"))),
79  kshorts_(consumes<reco::VertexCompositeCandidateCollection>(iConfig.getParameter<edm::InputTag>("kshorts"))),
80  lambdas_(consumes<reco::VertexCompositeCandidateCollection>(iConfig.getParameter<edm::InputTag>("lambdas"))),
81  pv_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("primaryVertices"))),
82  pvOrigs_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("originalVertices"))),
83  minPt_(iConfig.getParameter<double>("minPt")),
84  minHits_(iConfig.getParameter<uint32_t>("minHits")),
85  minPixelHits_(iConfig.getParameter<uint32_t>("minPixelHits")),
86  minPtToStoreProps_(iConfig.getParameter<double>("minPtToStoreProps")),
87  covarianceVersion_(iConfig.getParameter<int>("covarianceVersion")),
88  covariancePackingSchemas_(iConfig.getParameter<std::vector<int>>("covariancePackingSchemas")),
89  muons_(consumes<reco::MuonCollection>(iConfig.getParameter<edm::InputTag>("muons"))),
90  passThroughCut_(iConfig.getParameter<std::string>("passThroughCut")),
92  iConfig.getParameter<edm::ParameterSet>("pvAssignment").getParameter<double>("maxDzForPrimaryAssignment")),
94  iConfig.getParameter<edm::ParameterSet>("pvAssignment").getParameter<double>("maxDzSigForPrimaryAssignment")),
96  .getParameter<double>("maxDzErrorForPrimaryAssignment")),
98  .getParameter<double>("maxDxyForNotReconstructedPrimary")),
100  .getParameter<double>("maxDxySigForNotReconstructedPrimary")),
101  useLegacySetup_(iConfig.getParameter<bool>("useLegacySetup")) {
102  std::vector<std::string> trkQuals(iConfig.getParameter<std::vector<std::string>>("qualsToAutoAccept"));
104  trkQuals.begin(), trkQuals.end(), std::back_inserter(qualsToAutoAccept_), reco::TrackBase::qualityByName);
105 
107  qualsToAutoAccept_.end()) {
108  std::ostringstream msg;
109  msg << " PATLostTracks has a quality requirement which resolves to undefQuality. This usually means a typo and is "
110  "therefore treated a config error\nquality requirements:\n ";
111  for (const auto& trkQual : trkQuals)
112  msg << trkQual << " ";
113  throw cms::Exception("Configuration") << msg.str();
114  }
115 
116  produces<std::vector<reco::Track>>();
117  produces<std::vector<pat::PackedCandidate>>();
118  produces<std::vector<pat::PackedCandidate>>("eleTracks");
119  produces<edm::Association<pat::PackedCandidateCollection>>();
120 }

References Exception, spr::find(), edm::ParameterSet::getParameter(), mps_check::msg, reco::TrackBase::qualityByName(), qualsToAutoAccept_, HcalDetIdTransform::transform(), and reco::TrackBase::undefQuality.

◆ ~PATLostTracks()

pat::PATLostTracks::~PATLostTracks ( )
override

Definition at line 122 of file PATLostTracks.cc.

122 {}

Member Function Documentation

◆ addPackedCandidate()

void pat::PATLostTracks::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
private

Definition at line 249 of file PATLostTracks.cc.

255  {
256  const float mass = 0.13957018;
257 
258  int id = 211 * trk->charge();
259  if (trkStatus == TrkStatus::PFELECTRON)
260  id = 11;
261  else if (trkStatus == TrkStatus::PFPOSITRON)
262  id = -11;
263 
264  // assign the proper pdgId for tracks that are reconstructed as a muon
265  for (auto& mu : *muons) {
266  if (reco::TrackRef(mu.innerTrack()) == trk) {
267  id = -13 * trk->charge();
268  break;
269  }
270  }
271 
273  int nlost = trk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
274  if (nlost == 0) {
275  if (trk->hitPattern().hasValidHitInPixelLayer(PixelSubdetector::SubDetector::PixelBarrel, 1)) {
277  }
278  } else {
280  }
281 
282  reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass);
283  cands.emplace_back(
284  pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key()));
285 
286  cands.back().setTrackHighPurity(trk->quality(reco::TrackBase::highPurity));
287 
288  cands.back().setLostInnerHits(lostHits);
289  if (trk->pt() > minPtToStoreProps_ || trkStatus == TrkStatus::VTX) {
290  if (useLegacySetup_ || std::abs(id) == 11 || trkStatus == TrkStatus::VTX) {
291  cands.back().setTrackProperties(*trk, covariancePackingSchemas_[4], covarianceVersion_);
292  } else {
293  if (trk->hitPattern().numberOfValidPixelHits() > 0) {
294  cands.back().setTrackProperties(
295  *trk, covariancePackingSchemas_[0], covarianceVersion_); // high quality with pixels
296  } else {
297  cands.back().setTrackProperties(
298  *trk, covariancePackingSchemas_[1], covarianceVersion_); // high quality without pixels
299  }
300  }
301  } else if (!useLegacySetup_ && trk->pt() > 0.5) {
302  if (trk->hitPattern().numberOfValidPixelHits() > 0) {
303  cands.back().setTrackProperties(
304  *trk, covariancePackingSchemas_[2], covarianceVersion_); // low quality with pixels
305  } else {
306  cands.back().setTrackProperties(
307  *trk, covariancePackingSchemas_[3], covarianceVersion_); // low quality without pixels
308  }
309  }
310  cands.back().setAssociationQuality(pvAssocQuality);
311 }

References funct::abs(), HLT_FULL_cff::cands, reco::TrackBase::highPurity, triggerObjects_cff::id, edm::Ref< C, T, F >::key(), electrons_cff::lostHits, EgHLTOffHistBins_cfi::mass, reco::HitPattern::MISSING_INNER_HITS, pat::PackedCandidate::moreLostInnerHits, amptDefaultParameters_cff::mu, PDWG_BPHSkim_cff::muons, pat::PackedCandidate::noLostInnerHits, pat::PackedCandidate::oneLostInnerHit, p4, GeomDetEnumerators::PixelBarrel, and pat::PackedCandidate::validHitInFirstPixelBarrelLayer.

◆ associateTrkToVtx()

std::pair< int, pat::PackedCandidate::PVAssociationQuality > pat::PATLostTracks::associateTrkToVtx ( const reco::VertexCollection vertices,
const reco::TrackRef trk 
) const
private

Definition at line 313 of file PATLostTracks.cc.

314  {
315  //For legacy setup check only if the track is used in fit of the PV, i.e. vertices[0],
316  //and associate quality if weight > 0.5. Otherwise return invalid vertex index (-1)
317  //and default quality flag (NotReconstructedPrimary = 0)
318  if (useLegacySetup_) {
319  float w = vertices[0].trackWeight(trk);
320  if (w > 0.5) {
321  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(0, pat::PackedCandidate::UsedInFitTight);
322  } else if (w > 0.) {
323  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(0,
325  } else {
326  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(-1,
328  }
329  }
330 
331  //Inspired by CommonTools/RecoAlgos/interface/PrimaryVertexAssignment.h
332  //but without specific association for secondaries in jets and option to use timing
333 
334  int iVtxMaxWeight = -1;
335  int iVtxMinDzDist = -1;
336  size_t idx = 0;
337  float maxWeight = 0;
339  double minDzSig = std::numeric_limits<double>::max();
340  for (auto const& vtx : vertices) {
341  float w = vtx.trackWeight(trk);
342  double dz = std::abs(trk->dz(vtx.position()));
343  double dzSig = dz / trk->dzError();
344  if (w > maxWeight) {
345  maxWeight = w;
346  iVtxMaxWeight = idx;
347  }
348  if (dzSig < minDzSig) {
349  minDzSig = dzSig;
350  minDz = dz;
351  iVtxMinDzDist = idx;
352  }
353  idx++;
354  }
355  // vertex in which fit the track was used
356  if (iVtxMaxWeight >= 0) {
357  if (maxWeight > 0.5) {
358  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMaxWeight,
360  } else {
361  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMaxWeight,
363  }
364  }
365  // vertex "closest in Z" with tight cuts (targetting primary particles)
367  const double add_cov = vertices[iVtxMinDzDist].covariance(2, 2);
368  const double dzErr = sqrt(trk->dzError() * trk->dzError() + add_cov);
369  if (minDz / dzErr < maxDzSigForPrimaryAssignment_ && trk->dzError() < maxDzErrorForPrimaryAssignment_) {
370  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMinDzDist,
372  }
373  }
374  // if the track is not compatible with other PVs but is compatible with the BeamSpot, we may simply have not reco'ed the PV!
375  // we still point it to the closest in Z, but flag it as possible orphan-primary
376  if (!vertices.empty() && std::abs(trk->dxy(vertices[0].position())) < maxDxyForNotReconstructedPrimary_ &&
377  std::abs(trk->dxy(vertices[0].position()) / trk->dxyError()) < maxDxySigForNotReconstructedPrimary_)
378  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMinDzDist,
380  // for tracks not associated to any PV return the closest in dz
381  return std::pair<int, pat::PackedCandidate::PVAssociationQuality>(iVtxMinDzDist, pat::PackedCandidate::OtherDeltaZ);
382 }

References funct::abs(), pat::PackedCandidate::CompatibilityDz, PVValHelper::dz, electrons_cff::dzErr, heavyIonCSV_trainingSettings::idx, SiStripPI::max, pfMETCorrectionType0_cfi::minDz, pat::PackedCandidate::NotReconstructedPrimary, pat::PackedCandidate::OtherDeltaZ, mathSSE::sqrt(), pat::PackedCandidate::UsedInFitLoose, pat::PackedCandidate::UsedInFitTight, pwdgSkimBPark_cfi::vertices, extraflags_cff::vtx, and w.

◆ passTrkCuts()

bool pat::PATLostTracks::passTrkCuts ( const reco::Track tr) const
private

Definition at line 241 of file PATLostTracks.cc.

241  {
242  const bool passTrkHits = tr.pt() > minPt_ && tr.numberOfValidHits() >= minHits_ &&
244  const bool passTrkQual = passesQuality(tr, qualsToAutoAccept_);
245 
246  return passTrkHits || passTrkQual || passThroughCut_(tr);
247 }

References reco::TrackBase::hitPattern(), reco::TrackBase::numberOfValidHits(), reco::HitPattern::numberOfValidPixelHits(), and reco::TrackBase::pt().

◆ produce()

void pat::PATLostTracks::produce ( edm::StreamID  ,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overridevirtual

Implements edm::global::EDProducerBase.

Definition at line 124 of file PATLostTracks.cc.

124  {
126  iEvent.getByToken(cands_, cands);
127 
129  iEvent.getByToken(map_, pf2pc);
130 
132  iEvent.getByToken(tracks_, tracks);
133 
135  iEvent.getByToken(vertices_, vertices);
136 
138  iEvent.getByToken(muons_, muons);
139 
141  iEvent.getByToken(kshorts_, kshorts);
143  iEvent.getByToken(lambdas_, lambdas);
144 
146  iEvent.getByToken(pv_, pvs);
147  reco::VertexRef pv(pvs.id());
148  reco::VertexRefProd pvRefProd(pvs);
150  iEvent.getByToken(pvOrigs_, pvOrigs);
151 
152  auto outPtrTrks = std::make_unique<std::vector<reco::Track>>();
153  auto outPtrTrksAsCands = std::make_unique<std::vector<pat::PackedCandidate>>();
154  auto outPtrEleTrksAsCands = std::make_unique<std::vector<pat::PackedCandidate>>();
155 
156  std::vector<TrkStatus> trkStatus(tracks->size(), TrkStatus::NOTUSED);
157  //Mark all tracks used in candidates
158  //check if packed candidates are storing the tracks by seeing if number of hits >0
159  //currently we dont use that information though
160  //electrons will never store their track (they store the GSF track)
161  for (unsigned int ic = 0, nc = cands->size(); ic < nc; ++ic) {
163  const reco::PFCandidate& cand = (*cands)[ic];
164  if (cand.charge() && cand.trackRef().isNonnull() && cand.trackRef().id() == tracks.id()) {
165  if (cand.pdgId() == 11)
166  trkStatus[cand.trackRef().key()] = TrkStatus::PFELECTRON;
167  else if (cand.pdgId() == -11)
168  trkStatus[cand.trackRef().key()] = TrkStatus::PFPOSITRON;
169  else if ((*pf2pc)[r]->numberOfHits() > 0)
170  trkStatus[cand.trackRef().key()] = TrkStatus::PFCAND;
171  else
172  trkStatus[cand.trackRef().key()] = TrkStatus::PFCANDNOTRKPROPS;
173  }
174  }
175 
176  //Mark all tracks used in secondary vertices
177  for (const auto& secVert : *vertices) {
178  for (auto trkIt = secVert.tracks_begin(); trkIt != secVert.tracks_end(); trkIt++) {
179  if (trkStatus[trkIt->key()] == TrkStatus::NOTUSED)
180  trkStatus[trkIt->key()] = TrkStatus::VTX;
181  }
182  }
183  for (const auto& v0 : *kshorts) {
184  for (size_t dIdx = 0; dIdx < v0.numberOfDaughters(); dIdx++) {
185  size_t key = (dynamic_cast<const reco::RecoChargedCandidate*>(v0.daughter(dIdx)))->track().key();
186  if (trkStatus[key] == TrkStatus::NOTUSED)
187  trkStatus[key] = TrkStatus::VTX;
188  }
189  }
190  for (const auto& v0 : *lambdas) {
191  for (size_t dIdx = 0; dIdx < v0.numberOfDaughters(); dIdx++) {
192  size_t key = (dynamic_cast<const reco::RecoChargedCandidate*>(v0.daughter(dIdx)))->track().key();
193  if (trkStatus[key] == TrkStatus::NOTUSED)
194  trkStatus[key] = TrkStatus::VTX;
195  }
196  }
197  std::vector<int> mapping(tracks->size(), -1);
198  int lostTrkIndx = 0;
199  for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) {
200  reco::TrackRef trk(tracks, trkIndx);
201  if (trkStatus[trkIndx] == TrkStatus::VTX || (trkStatus[trkIndx] == TrkStatus::NOTUSED && passTrkCuts(*trk))) {
202  outPtrTrks->emplace_back(*trk);
203  //association to PV
204  std::pair<int, pat::PackedCandidate::PVAssociationQuality> pvAsso = associateTrkToVtx(*pvOrigs, trk);
205  const reco::VertexRef& pvOrigRef = reco::VertexRef(pvOrigs, pvAsso.first);
206  if (pvOrigRef.isNonnull()) {
207  pv = reco::VertexRef(pvs, pvOrigRef.key()); // WARNING: assume the PV slimmer is keeping same order
208  } else if (!pvs->empty()) {
209  pv = reco::VertexRef(pvs, 0);
210  }
211  addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons);
212 
213  //for creating the reco::Track -> pat::PackedCandidate map
214  //not done for the lostTrack:eleTracks collection
215  mapping[trkIndx] = lostTrkIndx;
216  lostTrkIndx++;
217  } else if ((trkStatus[trkIndx] == TrkStatus::PFELECTRON || trkStatus[trkIndx] == TrkStatus::PFPOSITRON) &&
218  passTrkCuts(*trk)) {
219  //association to PV
220  std::pair<int, pat::PackedCandidate::PVAssociationQuality> pvAsso = associateTrkToVtx(*pvOrigs, trk);
221  const reco::VertexRef& pvOrigRef = reco::VertexRef(pvOrigs, pvAsso.first);
222  if (pvOrigRef.isNonnull()) {
223  pv = reco::VertexRef(pvs, pvOrigRef.key()); // WARNING: assume the PV slimmer is keeping same order
224  } else if (!pvs->empty()) {
225  pv = reco::VertexRef(pvs, 0);
226  }
227  addPackedCandidate(*outPtrEleTrksAsCands, trk, pv, pvRefProd, trkStatus[trkIndx], pvAsso.second, muons);
228  }
229  }
230 
231  iEvent.put(std::move(outPtrTrks));
232  iEvent.put(std::move(outPtrEleTrksAsCands), "eleTracks");
234  auto tk2pc = std::make_unique<edm::Association<pat::PackedCandidateCollection>>(oh);
236  tk2pcFiller.insert(tracks, mapping.begin(), mapping.end());
237  tk2pcFiller.fill();
238  iEvent.put(std::move(tk2pc));
239 }

References HLT_FULL_cff::cands, iEvent, edm::Ref< C, T, F >::isNonnull(), crabWrapper::key, edm::Ref< C, T, F >::key(), lostTracks_cfi::kshorts, lostTracks_cfi::lambdas, taus_updatedMVAIds_cff::mapping, eostools::move(), PDWG_BPHSkim_cff::muons, MetAnalyzer::pv(), FSQDQM_cfi::pvs, alignCSCRings::r, tracks, V0Monitor_cff::v0, and pwdgSkimBPark_cfi::vertices.

Member Data Documentation

◆ cands_

const edm::EDGetTokenT<reco::PFCandidateCollection> pat::PATLostTracks::cands_
private

Definition at line 47 of file PATLostTracks.cc.

◆ covariancePackingSchemas_

const std::vector<int> pat::PATLostTracks::covariancePackingSchemas_
private

Definition at line 60 of file PATLostTracks.cc.

◆ covarianceVersion_

const int pat::PATLostTracks::covarianceVersion_
private

Definition at line 59 of file PATLostTracks.cc.

◆ kshorts_

const edm::EDGetTokenT<reco::VertexCompositeCandidateCollection> pat::PATLostTracks::kshorts_
private

Definition at line 51 of file PATLostTracks.cc.

◆ lambdas_

const edm::EDGetTokenT<reco::VertexCompositeCandidateCollection> pat::PATLostTracks::lambdas_
private

Definition at line 52 of file PATLostTracks.cc.

◆ map_

const edm::EDGetTokenT<edm::Association<pat::PackedCandidateCollection> > pat::PATLostTracks::map_
private

Definition at line 48 of file PATLostTracks.cc.

◆ maxDxyForNotReconstructedPrimary_

const double pat::PATLostTracks::maxDxyForNotReconstructedPrimary_
private

Definition at line 67 of file PATLostTracks.cc.

◆ maxDxySigForNotReconstructedPrimary_

const double pat::PATLostTracks::maxDxySigForNotReconstructedPrimary_
private

Definition at line 68 of file PATLostTracks.cc.

◆ maxDzErrorForPrimaryAssignment_

const double pat::PATLostTracks::maxDzErrorForPrimaryAssignment_
private

Definition at line 66 of file PATLostTracks.cc.

◆ maxDzForPrimaryAssignment_

const double pat::PATLostTracks::maxDzForPrimaryAssignment_
private

Definition at line 64 of file PATLostTracks.cc.

◆ maxDzSigForPrimaryAssignment_

const double pat::PATLostTracks::maxDzSigForPrimaryAssignment_
private

Definition at line 65 of file PATLostTracks.cc.

◆ minHits_

const double pat::PATLostTracks::minHits_
private

Definition at line 56 of file PATLostTracks.cc.

◆ minPixelHits_

const double pat::PATLostTracks::minPixelHits_
private

Definition at line 57 of file PATLostTracks.cc.

◆ minPt_

const double pat::PATLostTracks::minPt_
private

Definition at line 55 of file PATLostTracks.cc.

◆ minPtToStoreProps_

const double pat::PATLostTracks::minPtToStoreProps_
private

Definition at line 58 of file PATLostTracks.cc.

◆ muons_

const edm::EDGetTokenT<reco::MuonCollection> pat::PATLostTracks::muons_
private

Definition at line 62 of file PATLostTracks.cc.

◆ passThroughCut_

StringCutObjectSelector<reco::Track, false> pat::PATLostTracks::passThroughCut_
private

Definition at line 63 of file PATLostTracks.cc.

◆ pv_

const edm::EDGetTokenT<reco::VertexCollection> pat::PATLostTracks::pv_
private

Definition at line 53 of file PATLostTracks.cc.

◆ pvOrigs_

const edm::EDGetTokenT<reco::VertexCollection> pat::PATLostTracks::pvOrigs_
private

Definition at line 54 of file PATLostTracks.cc.

◆ qualsToAutoAccept_

std::vector<reco::TrackBase::TrackQuality> pat::PATLostTracks::qualsToAutoAccept_
private

Definition at line 61 of file PATLostTracks.cc.

Referenced by PATLostTracks().

◆ tracks_

const edm::EDGetTokenT<reco::TrackCollection> pat::PATLostTracks::tracks_
private

Definition at line 49 of file PATLostTracks.cc.

◆ useLegacySetup_

const bool pat::PATLostTracks::useLegacySetup_
private

Definition at line 69 of file PATLostTracks.cc.

◆ vertices_

const edm::EDGetTokenT<reco::VertexCollection> pat::PATLostTracks::vertices_
private

Definition at line 50 of file PATLostTracks.cc.

edm::RefProd< VertexCollection >
electrons_cff.dzErr
dzErr
Definition: electrons_cff.py:354
PDWG_BPHSkim_cff.muons
muons
Definition: PDWG_BPHSkim_cff.py:47
V0Monitor_cff.v0
v0
Definition: V0Monitor_cff.py:7
edm::Association::Filler
Definition: Association.h:78
pat::PATLostTracks::TrkStatus::PFCAND
pat::PATLostTracks::maxDzForPrimaryAssignment_
const double maxDzForPrimaryAssignment_
Definition: PATLostTracks.cc:64
pat::PATLostTracks::minPtToStoreProps_
const double minPtToStoreProps_
Definition: PATLostTracks.cc:58
pat::PATLostTracks::tracks_
const edm::EDGetTokenT< reco::TrackCollection > tracks_
Definition: PATLostTracks.cc:49
amptDefaultParameters_cff.mu
mu
Definition: amptDefaultParameters_cff.py:16
pat::PATLostTracks::TrkStatus::PFPOSITRON
pat::PackedCandidate::oneLostInnerHit
Definition: PackedCandidate.h:803
reco::TrackBase::undefQuality
Definition: TrackBase.h:151
reco::Candidate::PolarLorentzVector
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:38
lostTracks_cfi.lambdas
lambdas
Definition: lostTracks_cfi.py:11
pat::PATLostTracks::pv_
const edm::EDGetTokenT< reco::VertexCollection > pv_
Definition: PATLostTracks.cc:53
pat::PackedCandidate::moreLostInnerHits
Definition: PackedCandidate.h:804
pat::PATLostTracks::passThroughCut_
StringCutObjectSelector< reco::Track, false > passThroughCut_
Definition: PATLostTracks.cc:63
mps_check.msg
tuple msg
Definition: mps_check.py:285
pat::PATLostTracks::addPackedCandidate
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
Definition: PATLostTracks.cc:249
pat::PATLostTracks::covariancePackingSchemas_
const std::vector< int > covariancePackingSchemas_
Definition: PATLostTracks.cc:60
pat::PATLostTracks::covarianceVersion_
const int covarianceVersion_
Definition: PATLostTracks.cc:59
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::Handle
Definition: AssociativeIterator.h:50
pat::PATLostTracks::maxDxyForNotReconstructedPrimary_
const double maxDxyForNotReconstructedPrimary_
Definition: PATLostTracks.cc:67
reco::TrackBase::numberOfValidHits
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:798
pat::PATLostTracks::minHits_
const double minHits_
Definition: PATLostTracks.cc:56
pat::PackedCandidate::UsedInFitLoose
Definition: PackedCandidate.h:727
edm::Ref< TrackCollection >
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
pat::PackedCandidate::validHitInFirstPixelBarrelLayer
Definition: PackedCandidate.h:800
reco::TrackBase::pt
double pt() const
track transverse momentum
Definition: TrackBase.h:637
GeomDetEnumerators::PixelBarrel
Definition: GeomDetEnumerators.h:11
pat::PATLostTracks::maxDxySigForNotReconstructedPrimary_
const double maxDxySigForNotReconstructedPrimary_
Definition: PATLostTracks.cc:68
pat::PATLostTracks::maxDzSigForPrimaryAssignment_
const double maxDzSigForPrimaryAssignment_
Definition: PATLostTracks.cc:65
w
const double w
Definition: UKUtility.cc:23
pat::PATLostTracks::maxDzErrorForPrimaryAssignment_
const double maxDzErrorForPrimaryAssignment_
Definition: PATLostTracks.cc:66
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
pat::PATLostTracks::TrkStatus::VTX
pat::PATLostTracks::minPixelHits_
const double minPixelHits_
Definition: PATLostTracks.cc:57
HcalDetIdTransform::transform
unsigned transform(const HcalDetId &id, unsigned transformCode)
Definition: HcalDetIdTransform.cc:7
pat::PATLostTracks::minPt_
const double minPt_
Definition: PATLostTracks.cc:55
pat::PackedCandidate::noLostInnerHits
Definition: PackedCandidate.h:801
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
pat::PATLostTracks::muons_
const edm::EDGetTokenT< reco::MuonCollection > muons_
Definition: PATLostTracks.cc:62
HLT_FULL_cff.cands
cands
Definition: HLT_FULL_cff.py:15146
pat::PackedCandidate::CompatibilityDz
Definition: PackedCandidate.h:726
edm::ParameterSet
Definition: ParameterSet.h:47
pat::PackedCandidate::OtherDeltaZ
Definition: PackedCandidate.h:724
tracks
const uint32_t *__restrict__ const HitContainer *__restrict__ TkSoA *__restrict__ tracks
Definition: CAHitNtupletGeneratorKernelsImpl.h:159
pat::PackedCandidate::LostInnerHits
LostInnerHits
Enumerator specifying the.
Definition: PackedCandidate.h:799
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
pat::PackedCandidate
Definition: PackedCandidate.h:22
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
reco::VertexRef
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
Definition: VertexFwd.h:13
lostTracks_cfi.kshorts
kshorts
Definition: lostTracks_cfi.py:10
cand
Definition: decayParser.h:32
pat::PATLostTracks::qualsToAutoAccept_
std::vector< reco::TrackBase::TrackQuality > qualsToAutoAccept_
Definition: PATLostTracks.cc:61
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
iEvent
int iEvent
Definition: GenABIO.cc:224
pat::PATLostTracks::pvOrigs_
const edm::EDGetTokenT< reco::VertexCollection > pvOrigs_
Definition: PATLostTracks.cc:54
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::Association
Definition: Association.h:18
FSQDQM_cfi.pvs
pvs
Definition: FSQDQM_cfi.py:12
pat::PATLostTracks::lambdas_
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > lambdas_
Definition: PATLostTracks.cc:52
alignCSCRings.r
r
Definition: alignCSCRings.py:93
pat::PATLostTracks::TrkStatus::PFCANDNOTRKPROPS
reco::TrackBase::qualityByName
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:126
pat::PATLostTracks::TrkStatus::NOTUSED
reco::TrackBase::hitPattern
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:504
pat::PATLostTracks::vertices_
const edm::EDGetTokenT< reco::VertexCollection > vertices_
Definition: PATLostTracks.cc:50
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::OrphanHandle
Definition: EDProductfwd.h:39
extraflags_cff.vtx
vtx
Definition: extraflags_cff.py:18
PVValHelper::dz
Definition: PVValidationHelpers.h:51
pat::PATLostTracks::TrkStatus::PFELECTRON
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
electrons_cff.lostHits
lostHits
Definition: electrons_cff.py:401
pat::PATLostTracks::kshorts_
const edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > kshorts_
Definition: PATLostTracks.cc:51
Exception
Definition: hltDiff.cc:245
reco::HitPattern::MISSING_INNER_HITS
Definition: HitPattern.h:155
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
pat::PackedCandidate::NotReconstructedPrimary
Definition: PackedCandidate.h:723
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
reco::HitPattern::numberOfValidPixelHits
int numberOfValidPixelHits() const
Definition: HitPattern.h:800
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
pat::PATLostTracks::useLegacySetup_
const bool useLegacySetup_
Definition: PATLostTracks.cc:69
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
pat::PATLostTracks::associateTrkToVtx
std::pair< int, pat::PackedCandidate::PVAssociationQuality > associateTrkToVtx(const reco::VertexCollection &vertices, const reco::TrackRef &trk) const
Definition: PATLostTracks.cc:313
edm::EDConsumerBase::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: EDConsumerBase.h:155
pat::PATLostTracks::cands_
const edm::EDGetTokenT< reco::PFCandidateCollection > cands_
Definition: PATLostTracks.cc:47
pat::PackedCandidate::UsedInFitTight
Definition: PackedCandidate.h:728
crabWrapper.key
key
Definition: crabWrapper.py:19
pat::PATLostTracks::passTrkCuts
bool passTrkCuts(const reco::Track &tr) const
Definition: PATLostTracks.cc:241
taus_updatedMVAIds_cff.mapping
mapping
Definition: taus_updatedMVAIds_cff.py:29
edm::InputTag
Definition: InputTag.h:15
pat::PATLostTracks::map_
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > map_
Definition: PATLostTracks.cc:48
pfMETCorrectionType0_cfi.minDz
minDz
Definition: pfMETCorrectionType0_cfi.py:52
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7
reco::TrackBase::highPurity
Definition: TrackBase.h:154