ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Morgan/src/LeptonAnalyzer.cc
Revision: 1.1
Committed: Fri Apr 17 15:17:38 2009 UTC (16 years ago) by lethuill
Content type: text/plain
Branch: MAIN
Log Message:
Add significance of the 3D impact parameter for leptons.
Calculation done in new LeptonAnalyzer class (Base for MuonAnalyzer and ElectronAnalyzer)

File Contents

# User Rev Content
1 lethuill 1.1 #include "../interface/LeptonAnalyzer.h"
2    
3    
4    
5     using namespace std;
6     using namespace reco;
7     using namespace edm;
8    
9     LeptonAnalyzer::LeptonAnalyzer(const edm::ParameterSet& producersNames):verbosity_(0),dummyVertex_(false),trackBuilder_(),primaryVertex_(0),vertexPoint_(0)
10     {
11     dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown");
12     vertexProducer_ = producersNames.getParameter<edm::InputTag>("primaryVertexProducer");
13     }
14    
15    
16     LeptonAnalyzer::LeptonAnalyzer(const edm::ParameterSet& producersNames, int verbosity):verbosity_(verbosity),dummyVertex_(false),trackBuilder_(),primaryVertex_(0),vertexPoint_(0)
17     {
18     dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown");
19     vertexProducer_ = producersNames.getParameter<edm::InputTag>("primaryVertexProducer");
20     }
21    
22    
23     LeptonAnalyzer::~LeptonAnalyzer()
24     {
25     if (dummyVertex_) delete primaryVertex_;
26     if (vertexPoint_ != 0) delete vertexPoint_;
27     }
28    
29    
30     void LeptonAnalyzer::initIPCalculator(const edm::Event& iEvent, const edm::EventSetup& iSetup, TRootEvent* rootEvent)
31     {
32     // Get the B-field
33     edm::ESHandle<MagneticField> B;
34     iSetup.get<IdealMagneticFieldRecord>().get( B );
35    
36     // Get the geometry
37     edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry;
38     iSetup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry);
39    
40     // get the track builder
41     iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",trackBuilder_);
42    
43     // Get primary vertex collection
44     edm::Handle< reco::VertexCollection > recoPVCollection;
45     iEvent.getByLabel(vertexProducer_, recoPVCollection);
46    
47     if ( recoPVCollection->size()==0 )
48     {
49     cout << "***** ERROR in LeptonAnalyzer::initIPCalculator() - No reco::Vertex for this event - Will use dummy vertex *****" << endl;
50     reco::Vertex::Point point(0,0,0);
51     reco::Vertex::Error error;
52     error(0,0) = 0.0015*0.0015;
53     error(1,1) = 0.0015*0.0015;
54     error(2,2) = 15.*15.;
55     primaryVertex_ = new reco::Vertex(point,error,1,1,1);
56     dummyVertex_ = true;
57     }
58     else if ( rootEvent->primaryVertexIndex()>=int(recoPVCollection->size()) )
59     {
60     cout << "***** ERROR in LeptonAnalyzer::initIPCalculator() - Selected primary vertex not found in reco::Vertex collection - Will use first reco::Vertex *****" << endl;
61     primaryVertex_ = & ((*recoPVCollection)[0]);
62     }
63     else if ( rootEvent->primaryVertexIndex()<0 )
64     {
65     cout << "***** ERROR in LeptonAnalyzer::initIPCalculator() - No Primary vertex was selected in reco::Vertex collection - Will use first reco::Vertex *****" << endl;
66     primaryVertex_ = & ((*recoPVCollection)[0]);
67     }
68     else
69     {
70     primaryVertex_ = & ((*recoPVCollection)[rootEvent->primaryVertexIndex()]);
71     }
72    
73     vertexPoint_ = new GlobalPoint(primaryVertex_->position().x(),primaryVertex_->position().y(),primaryVertex_->position().z());
74     }
75    
76    
77     float LeptonAnalyzer::IP3DSignificance(const reco::TransientTrack& track)
78     {
79    
80     // FIXME - transtrack passee en argument
81     //reco::TrackRef mutrack;
82     //reco::TransientTrack transtrack = trackBuilder_->build( mutrack ) ;
83    
84     const TrajectoryStateOnSurface tsos = track.stateOnSurface(*vertexPoint_);
85     float significance = -9999.;
86     if (!tsos.isValid())
87     {
88     significance = -8888.;
89     }
90     else
91     {
92     std::pair<bool,Measurement1D> muIPpair;
93     muIPpair = IPTools::signedImpactParameter3D(tsos, tsos.globalDirection(), *primaryVertex_);
94    
95     if (muIPpair.first)
96     {
97     significance = muIPpair.second.significance();
98     //cout << "3DIP Significance = " << significance << endl;
99     }
100     else
101     {
102     significance = -7777.;
103     }
104     }
105    
106    
107     return significance;
108     }