ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Morgan/src/LeptonAnalyzer.cc
Revision: 1.3
Committed: Tue Apr 21 13:01:56 2009 UTC (16 years ago) by lethuill
Content type: text/plain
Branch: MAIN
CVS Tags: JeSuisBeaucoupPlusGrosQunReco_2_2_7_01, RecoPhoton_2_2_7_02
Changes since 1.2: +19 -6 lines
Log Message:
Use beam spot in 3D impact parameter calculation - Not checked...

File Contents

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