Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Name of the track collection
0007   vertexProducer_ = config.getUntrackedParameter<edm::InputTag>("vertexProducer");
0008 
0009   // Name of the traking pariticle collection
0010   trackingTruth_ = config.getUntrackedParameter<edm::InputTag>("trackingTruth");
0011 
0012   // Vertex association record
0013   vertexAssociator_ = config.getUntrackedParameter<edm::InputTag>("vertexAssociator");
0014 
0015   // Association by max. value
0016   bestMatchByMaxValue_ = config.getUntrackedParameter<bool>("bestMatchByMaxValue");
0017 
0018   // Enable RecoToSim association
0019   enableRecoToSim_ = config.getUntrackedParameter<bool>("enableRecoToSim");
0020 
0021   // Enable SimToReco association
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     // Vertex collection
0044     edm::Handle<edm::View<reco::Vertex>> vertexCollection;
0045     event.getByLabel(vertexProducer_, vertexCollection);
0046 
0047     // Tracking particle information
0048     edm::Handle<TrackingVertexCollection> TVCollection;
0049     event.getByLabel(trackingTruth_, TVCollection);
0050 
0051     // Get the track associator
0052     edm::Handle<reco::VertexToTrackingVertexAssociator> vertexAssociator;
0053     event.getByLabel(vertexAssociator_, vertexAssociator);
0054 
0055     if (enableRecoToSim_) {
0056       // Calculate the map between recovertex -> simvertex
0057       recoToSim_ = vertexAssociator->associateRecoToSim(vertexCollection, TVCollection);
0058     }
0059 
0060     if (enableSimToReco_) {
0061       // Calculate the map between recovertex <- simvertex
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 }