ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatUtils/src/LeptonVertexSignificance.cc
Revision: 1.1
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: MAIN
Branch point for: ANA
Log Message:
Initial revision

File Contents

# User Rev Content
1 dgele 1.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