File indexing completed on 2025-02-05 23:51:52
0001
0002 #include "SimTracker/TrackHistory/interface/TrackHistory.h"
0003
0004 TrackHistory::TrackHistory(const edm::ParameterSet &config, edm::ConsumesCollector &&collector) : HistoryBase() {
0005
0006 trackProducer_ = config.getUntrackedParameter<edm::InputTag>("trackProducer");
0007 collector.consumes<edm::View<reco::Track>>(trackProducer_);
0008
0009
0010 trackingTruth_ = config.getUntrackedParameter<edm::InputTag>("trackingTruth");
0011 collector.consumes<TrackingParticleCollection>(trackingTruth_);
0012
0013
0014 trackAssociator_ = config.getUntrackedParameter<edm::InputTag>("trackAssociator");
0015
0016
0017 bestMatchByMaxValue_ = config.getUntrackedParameter<bool>("bestMatchByMaxValue");
0018
0019
0020 enableRecoToSim_ = config.getUntrackedParameter<bool>("enableRecoToSim");
0021
0022
0023 enableSimToReco_ = config.getUntrackedParameter<bool>("enableSimToReco");
0024
0025 if (enableRecoToSim_ or enableSimToReco_) {
0026 collector.consumes<reco::TrackToTrackingParticleAssociator>(trackAssociator_);
0027 }
0028
0029 quality_ = 0.;
0030 }
0031
0032 void TrackHistory::fillPSetDescription(edm::ParameterSetDescription &desc) {
0033 desc.addUntracked<edm::InputTag>("trackProducer", edm::InputTag("generalTracks"));
0034 desc.addUntracked<edm::InputTag>("trackingTruth", edm::InputTag("mix", "MergedTrackTruth"));
0035 desc.addUntracked<edm::InputTag>("trackAssociator", edm::InputTag("quickTrackAssociatorByHits"));
0036 desc.addUntracked<bool>("bestMatchByMaxValue", true);
0037 desc.addUntracked<bool>("enableRecoToSim", true);
0038 desc.addUntracked<bool>("enableSimToReco", false);
0039 }
0040
0041 void TrackHistory::newEvent(const edm::Event &event, const edm::EventSetup &setup) {
0042 if (enableRecoToSim_ || enableSimToReco_) {
0043
0044 edm::Handle<edm::View<reco::Track>> trackCollection;
0045 event.getByLabel(trackProducer_, trackCollection);
0046
0047
0048 edm::Handle<TrackingParticleCollection> TPCollection;
0049 event.getByLabel(trackingTruth_, TPCollection);
0050
0051
0052 edm::Handle<reco::TrackToTrackingParticleAssociator> associator;
0053 event.getByLabel(trackAssociator_, associator);
0054
0055
0056 if (enableRecoToSim_)
0057 recoToSim_ = associator->associateRecoToSim(trackCollection, TPCollection);
0058
0059
0060 if (enableSimToReco_)
0061 simToReco_ = associator->associateSimToReco(trackCollection, TPCollection);
0062 }
0063 }
0064
0065 bool TrackHistory::evaluate(reco::TrackBaseRef tr) {
0066 if (!enableRecoToSim_)
0067 return false;
0068
0069 std::pair<TrackingParticleRef, double> result = match(tr, recoToSim_, bestMatchByMaxValue_);
0070
0071 TrackingParticleRef tpr(result.first);
0072 quality_ = result.second;
0073 trackingParticle_ = tpr;
0074
0075 if (!tpr.isNull()) {
0076 HistoryBase::evaluate(tpr);
0077
0078 recotrack_ = tr;
0079
0080 return true;
0081 }
0082
0083 return false;
0084 }