Skip to content

Commit

Permalink
Merge pull request #34446 from AdrianoDee/lutCandidates
Browse files Browse the repository at this point in the history
Adding LUT approach for PackedCandidates
  • Loading branch information
cmsbuild authored Aug 12, 2021
2 parents 4edd3d6 + fc256e5 commit 506661f
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
16 changes: 15 additions & 1 deletion DataFormats/PatCandidates/interface/PackedCandidate.h
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,16 @@ namespace pat {
setTrackProperties(tk, tk.covariance(), quality, covarianceVersion);
}

void setTrackPropertiesLite(unsigned int covSchema,
unsigned int covarianceVersion,
unsigned int nHits,
unsigned int nPixelHits) {
covarianceVersion_ = covarianceVersion;
covarianceSchema_ = covSchema;
packedHits_ =
(nPixelHits & trackPixelHitsMask) | (((nHits - nPixelHits) & trackStripHitsMask) << trackStripHitsShift);
}

int numberOfPixelHits() const { return (packedHits_ & trackPixelHitsMask) + pixelLayersWithMeasurement(); }
int numberOfHits() const {
return (packedHits_ >> trackStripHitsShift) + stripLayersWithMeasurement() + numberOfPixelHits();
Expand Down Expand Up @@ -742,6 +752,7 @@ namespace pat {
maybeUnpackBoth();
return dxy_;
}

/// dz with respect to the PV[ipv]
virtual float dz(size_t ipv = 0) const {
maybeUnpackBoth();
Expand All @@ -752,6 +763,7 @@ namespace pat {
maybeUnpackBoth();
return dz_;
}

/// dxy with respect to another point
virtual float dxy(const Point &p) const;
/// dz with respect to another point
Expand Down Expand Up @@ -786,7 +798,9 @@ namespace pat {
}
/// Return true if a bestTrack can be extracted from this Candidate
bool hasTrackDetails() const { return (packedHits_ != 0 || packedLayers_ != 0); }

/// Return true if the original candidate had a track associated
/// even if the PackedCandidate has no track
bool fromTrackCandidate() const { return (packedDz_ != 0 || (packedDxy_ != 0 && packedDxy_ != 32768)); }
/// true if the track had the highPurity quality bit
bool trackHighPurity() const { return (qualityFlags_ & trackHighPurityMask) >> trackHighPurityShift; }
/// set to true if the track had the highPurity quality bit
Expand Down
72 changes: 72 additions & 0 deletions PhysicsTools/PatUtils/plugins/PackedCandidatesTrackLiteModifier.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#include "FWCore/Framework/interface/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/Framework/interface/global/EDProducer.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"

#include "DataFormats/PatCandidates/interface/PackedCandidate.h"

#include <vector>

class PackedCandidatesTrackLiteModifier : public edm::global::EDProducer<> {
public:
explicit PackedCandidatesTrackLiteModifier(const edm::ParameterSet &);
~PackedCandidatesTrackLiteModifier() override = default;

void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);

private:
const edm::EDGetTokenT<pat::PackedCandidateCollection> inputCandidates_;
const edm::EDPutTokenT<pat::PackedCandidateCollection> outputCandidates_;
const unsigned int covSchema_;
const unsigned int covVersion_;
const unsigned int nHits_;
const unsigned int nPixelHits_;
};

//____________________________________________________________________________||
PackedCandidatesTrackLiteModifier::PackedCandidatesTrackLiteModifier(const edm::ParameterSet &iConfig)
: inputCandidates_(
consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("inputCandidates"))),
outputCandidates_(produces<pat::PackedCandidateCollection>("")),
covSchema_(iConfig.getParameter<unsigned int>("covSchema")),
covVersion_(iConfig.getParameter<unsigned int>("covVersion")),
nHits_(iConfig.getParameter<unsigned int>("nHits")),
nPixelHits_(iConfig.getParameter<unsigned int>("nPixelHits")) {}

void PackedCandidatesTrackLiteModifier::produce(edm::StreamID,
edm::Event &iEvent,
const edm::EventSetup &iSetup) const {
auto const &packedCandidates = iEvent.get(inputCandidates_);

pat::PackedCandidateCollection output;
output.reserve(packedCandidates.size());
for (auto const &cand : packedCandidates) {
output.push_back(pat::PackedCandidate(cand));

if (!output.back().hasTrackDetails() && output.back().fromTrackCandidate())
output.back().setTrackPropertiesLite(covSchema_, covVersion_, nHits_, nPixelHits_);
}

iEvent.emplace(outputCandidates_, std::move(output));
};

void PackedCandidatesTrackLiteModifier::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
edm::ParameterSetDescription desc;

desc.add<edm::InputTag>("inputCandidates", edm::InputTag("packedPFCandidates"));
desc.add<unsigned int>("covSchema", 1025);
desc.add<unsigned int>("covVersion", 1);
desc.add<unsigned int>("nHits", 8);
desc.add<unsigned int>("nPixelHits", 3);

descriptions.addWithDefaultLabel(desc);
}

//____________________________________________________________________________||
#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(PackedCandidatesTrackLiteModifier);

0 comments on commit 506661f

Please sign in to comment.