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
Error occurred while calculating annotation data.
Log Message:
Adding PV refit

File Contents

# Content
1 //--------
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 }