ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatUtils/src/LeptonVertexSignificance.cc
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: ANA
CVS Tags: start
Changes since 1.1: +0 -0 lines
Error occurred while calculating annotation data.
Log Message:
version CMSSW_2_2_10

File Contents

# Content
1 //
2 // $Id: LeptonVertexSignificance.cc,v 1.2 2008/02/28 14:54:25 llista Exp $
3 //
4
5 #include "PhysicsTools/PatUtils/interface/LeptonVertexSignificance.h"
6 #include "FWCore/MessageLogger/interface/MessageLogger.h"
7 #include "FWCore/Utilities/interface/Exception.h"
8 #include "FWCore/Framework/interface/ESHandle.h"
9 #include "DataFormats/Common/interface/Handle.h"
10 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
11 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
12 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
13 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
14 #include "DataFormats/VertexReco/interface/Vertex.h"
15 #include "DataFormats/VertexReco/interface/VertexFwd.h"
16 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
17 #include "FWCore/Framework/interface/EventSetup.h"
18 #include "FWCore/Framework/interface/Event.h"
19 #include "DataFormats/PatCandidates/interface/Electron.h"
20 #include "DataFormats/PatCandidates/interface/Muon.h"
21
22 using namespace pat;
23
24 // constructor
25 LeptonVertexSignificance::LeptonVertexSignificance(const edm::EventSetup & iSetup) {
26 // instantiate the transient-track builder
27 edm::ESHandle<TransientTrackBuilder> builder;
28 iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
29 theTrackBuilder_ = new TransientTrackBuilder(*builder.product());
30 }
31
32 // destructor
33 LeptonVertexSignificance::~LeptonVertexSignificance() {
34 delete theTrackBuilder_;
35 }
36
37 // calculate the TrackIsoPt for the lepton object
38 float LeptonVertexSignificance::calculate(const Electron & theElectron, const edm::Event & iEvent) {
39 return this->calculate(*theElectron.gsfTrack(), iEvent);
40 }
41
42 float LeptonVertexSignificance::calculate(const Muon & theMuon, const edm::Event & iEvent) {
43 return this->calculate(*theMuon.track(), iEvent);
44 }
45
46 // calculate the TrackIsoPt for the lepton's track
47 float LeptonVertexSignificance::calculate(const reco::Track & theTrack, const edm::Event & iEvent) {
48 // FIXME: think more about how to handle events without vertices
49 // lepton LR calculation should have nothing to do with event selection
50 edm::Handle<reco::VertexCollection> vertexHandle;
51 iEvent.getByLabel("offlinePrimaryVerticesFromCTFTracks", vertexHandle);
52 if (vertexHandle.product()->size() == 0) return 0;
53 reco::Vertex theVertex = vertexHandle.product()->front();
54 // calculate the track-vertex association significance
55 reco::TransientTrack theTrTrack = theTrackBuilder_->build(&theTrack);
56 GlobalPoint theVertexPoint(theVertex.position().x(), theVertex.position().y(), theVertex.position().z());
57 FreeTrajectoryState theLeptonNearVertex = theTrTrack.trajectoryStateClosestToPoint(theVertexPoint).theState();
58 return fabs(theVertex.position().z() - theLeptonNearVertex.position().z())
59 / sqrt(pow(theVertex.zError(), 2) + theLeptonNearVertex.cartesianError().position().czz());
60 }
61