ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitEdm/Tools/src/VertexReProducer.cc
Revision: 1.2
Committed: Fri May 20 16:22:23 2011 UTC (13 years, 11 months ago) by ksung
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_021, HEAD
Branch point for: Mit_025c_branch
Changes since 1.1: +75 -0 lines
Log Message:
Adding PV refit

File Contents

# User Rev Content
1 ksung 1.2 //--------
2     // Code copied from /UserCode/Mangano/WWAnalysis/Tools/src/VertexReProducer.cc
3     //--------
4    
5     #include "MitEdm/Tools/interface/VertexReProducer.h"
6     #include "FWCore/Framework/interface/ESHandle.h"
7     #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
8     #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
9     #include "TrackingTools/Records/interface/TransientTrackRecord.h"
10     #include "FWCore/ParameterSet/interface/Registry.h"
11     #include "DataFormats/Provenance/interface/Provenance.h"
12     #include "FWCore/MessageLogger/interface/MessageLogger.h"
13    
14     VertexReProducer::VertexReProducer(const edm::Handle<reco::VertexCollection> &handle, const edm::Event &iEvent)
15     {
16     const edm::Provenance *prov = handle.provenance();
17     if (prov == 0) throw cms::Exception("CorruptData") << "Vertex handle doesn't have provenance.";
18     edm::ParameterSetID psid = prov->psetID();
19    
20     edm::pset::Registry *psregistry = edm::pset::Registry::instance();
21     edm::ParameterSet psetFromProvenance;
22     if (!psregistry->getMapped(psid, psetFromProvenance))
23     throw cms::Exception("CorruptData") << "Vertex handle parameter set ID id = " << psid;
24    
25     if (prov->moduleName() != "PrimaryVertexProducer")
26     throw cms::Exception("Configuration") << "Vertices to re-produce don't come from a PrimaryVertexProducer, but from a " << prov->moduleName() <<".\n";
27    
28     configure(psetFromProvenance);
29    
30     // Now we also dig out the ProcessName used for the reco::Tracks and reco::Vertices
31     std::vector<edm::BranchID> parents = prov->parents();
32     bool foundTracks = false;
33     bool foundBeamSpot = false;
34     for (std::vector<edm::BranchID>::const_iterator it = parents.begin(), ed = parents.end(); it != ed; ++it) {
35     edm::Provenance parprov = iEvent.getProvenance(*it);
36     if (parprov.friendlyClassName() == "recoTracks") {
37     tracksTag_ = edm::InputTag(parprov.moduleLabel(), parprov.productInstanceName(), parprov.processName());
38     foundTracks = true;
39     } else if (parprov.friendlyClassName() == "recoBeamSpot") {
40     beamSpotTag_ = edm::InputTag(parprov.moduleLabel(), parprov.productInstanceName(), parprov.processName());
41     foundBeamSpot = true;
42     }
43     }
44     if (!foundTracks || !foundBeamSpot) {
45     edm::LogWarning("VertexReProducer_MissingParentage") <<
46     "Can't find parentage info for vertex collection inputs: " <<
47     (foundTracks ? "" : "tracks ") << (foundBeamSpot ? "" : "beamSpot") << "\n";
48     }
49     }
50    
51     void
52     VertexReProducer::configure(const edm::ParameterSet &iConfig)
53     {
54     config_ = iConfig;
55     tracksTag_ = iConfig.getParameter<edm::InputTag>("TrackLabel");
56     beamSpotTag_ = iConfig.getParameter<edm::InputTag>("beamSpotLabel");
57     algo_.reset(new PrimaryVertexProducerAlgorithm(iConfig));
58     }
59    
60     std::vector<TransientVertex>
61     VertexReProducer::makeVertices(const reco::TrackCollection &tracks,
62     const reco::BeamSpot &bs,
63     const edm::EventSetup &iSetup) const
64     {
65     edm::ESHandle<TransientTrackBuilder> theB;
66     iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
67    
68     std::vector<reco::TransientTrack> t_tks; t_tks.reserve(tracks.size());
69     for (reco::TrackCollection::const_iterator it = tracks.begin(), ed = tracks.end(); it != ed; ++it) {
70     t_tks.push_back((*theB).build(*it));
71     t_tks.back().setBeamSpot(bs);
72     }
73    
74     return algo_->vertices(t_tks, bs);
75     }