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 |
|
|
}
|