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