File indexing completed on 2023-03-17 11:25:53
0001
0002 #include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h"
0003 #include "SimDataFormats/Associations/interface/VertexToTrackingVertexAssociator.h"
0004 #include "SimTracker/TrackHistory/interface/VertexHistory.h"
0005
0006 VertexHistory::VertexHistory(const edm::ParameterSet &config, edm::ConsumesCollector collector) : HistoryBase() {
0007
0008 vertexProducer_ = config.getUntrackedParameter<edm::InputTag>("vertexProducer");
0009
0010
0011 trackingTruth_ = config.getUntrackedParameter<edm::InputTag>("trackingTruth");
0012
0013
0014 vertexAssociator_ = config.getUntrackedParameter<edm::InputTag>("vertexAssociator");
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<edm::View<reco::Vertex>>(vertexProducer_);
0027 collector.consumes<TrackingVertexCollection>(trackingTruth_);
0028 collector.consumes<reco::VertexToTrackingVertexAssociator>(vertexAssociator_);
0029 }
0030
0031 quality_ = 0.;
0032 }
0033
0034 void VertexHistory::newEvent(const edm::Event &event, const edm::EventSetup &setup) {
0035 if (enableRecoToSim_ || enableSimToReco_) {
0036
0037 edm::Handle<edm::View<reco::Vertex>> vertexCollection;
0038 event.getByLabel(vertexProducer_, vertexCollection);
0039
0040
0041 edm::Handle<TrackingVertexCollection> TVCollection;
0042 event.getByLabel(trackingTruth_, TVCollection);
0043
0044
0045 edm::Handle<reco::VertexToTrackingVertexAssociator> vertexAssociator;
0046 event.getByLabel(vertexAssociator_, vertexAssociator);
0047
0048 if (enableRecoToSim_) {
0049
0050 recoToSim_ = vertexAssociator->associateRecoToSim(vertexCollection, TVCollection);
0051 }
0052
0053 if (enableSimToReco_) {
0054
0055 simToReco_ = vertexAssociator->associateSimToReco(vertexCollection, TVCollection);
0056 }
0057 }
0058 }
0059
0060 bool VertexHistory::evaluate(reco::VertexBaseRef tv) {
0061 if (!enableRecoToSim_)
0062 return false;
0063
0064 std::pair<TrackingVertexRef, double> result = match(tv, recoToSim_, bestMatchByMaxValue_);
0065
0066 TrackingVertexRef tvr(result.first);
0067 quality_ = result.second;
0068
0069 if (!tvr.isNull()) {
0070 HistoryBase::evaluate(tvr);
0071
0072 recovertex_ = tv;
0073
0074 return true;
0075 }
0076
0077 return false;
0078 }