Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
Validation
RecoTrack
plugins
TrackerSeedValidator.cc
Go to the documentation of this file.
1
/*
2
#include "Validation/RecoTrack/interface/TrackerSeedValidator.h"
3
#include "DQMServices/ClientConfig/interface/FitSlicesYTool.h"
4
5
#include "FWCore/Framework/interface/MakerMacros.h"
6
7
#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
8
#include "SimDataFormats/Track/interface/SimTrackContainer.h"
9
#include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
10
#include "SimTracker/TrackAssociation/interface/TrackAssociatorByChi2.h"
11
#include "SimTracker/TrackAssociation/interface/QuickTrackAssociatorByHits.h"
12
#include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
13
#include "SimTracker/Records/interface/TrackAssociatorRecord.h"
14
15
#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
16
17
#include "FWCore/MessageLogger/interface/MessageLogger.h"
18
#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
19
#include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h"
20
#include "TrackingTools/TrajectoryState/interface/PerigeeConversions.h"
21
#include <TF1.h>
22
#include "TrackingTools/Records/interface/TransientRecHitRecord.h"
23
#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
24
25
using namespace std;
26
using namespace edm;
27
28
void TrackerSeedValidator::beginRun(edm::Run const&, edm::EventSetup const& setup) {
29
setup.get<IdealMagneticFieldRecord>().get(theMF);
30
setup.get<TransientRecHitRecord>().get(builderName,theTTRHBuilder);
31
32
int j=0;
33
for (unsigned int ww=0;ww<associators.size();ww++){
34
for (unsigned int www=0;www<label.size();www++){
35
36
dbe_->cd();
37
InputTag algo = label[www];
38
string dirName="Tracking/Seed/";
39
if (algo.process()!="")
40
dirName+=algo.process()+"_";
41
if(algo.label()!="")
42
dirName+=algo.label()+"_";
43
if(algo.instance()!="")
44
dirName+=algo.instance()+"_";
45
// if (dirName.find("Seeds")<dirName.length()){
46
// dirName.replace(dirName.find("Seeds"),6,"");
47
// }
48
string assoc= associators[ww];
49
if (assoc.find("Track")<assoc.length()){
50
assoc.replace(assoc.find("Track"),5,"");
51
}
52
dirName+=assoc;
53
dbe_->setCurrentFolder(dirName.c_str());
54
55
setUpVectors();
56
57
dbe_->goUp();
58
string subDirName = dirName + "/simulation";
59
dbe_->setCurrentFolder(subDirName.c_str());
60
h_ptSIM.push_back( dbe_->book1D("ptSIM", "generated p_{t}", 5500, 0, 110 ) );
61
h_etaSIM.push_back( dbe_->book1D("etaSIM", "generated pseudorapidity", 500, -2.5, 2.5 ) );
62
h_tracksSIM.push_back( dbe_->book1D("tracksSIM","number of simluated tracks",100,-0.5,99.5) );
63
h_vertposSIM.push_back( dbe_->book1D("vertposSIM","Transverse position of sim vertices",1000,-0.5,10000.5) );
64
65
dbe_->cd();
66
dbe_->setCurrentFolder(dirName.c_str());
67
h_tracks.push_back( dbe_->book1D("seeds","number of reconstructed seeds",20,-0.5,19.5) );
68
h_fakes.push_back( dbe_->book1D("fakes","number of fake reco seeds",20,-0.5,19.5) );
69
h_charge.push_back( dbe_->book1D("charge","charge",3,-1.5,1.5) );
70
h_hits.push_back( dbe_->book1D("hits", "number of hits per seed", 30, -0.5, 29.5 ) );
71
72
h_effic.push_back( dbe_->book1D("effic","efficiency vs #eta",nint,min,max) );
73
h_efficPt.push_back( dbe_->book1D("efficPt","efficiency vs pT",nintpT,minpT,maxpT) );
74
h_fakerate.push_back( dbe_->book1D("fakerate","fake rate vs #eta",nint,min,max) );
75
h_fakeratePt.push_back( dbe_->book1D("fakeratePt","fake rate vs pT",nintpT,minpT,maxpT) );
76
h_effic_vs_hit.push_back( dbe_->book1D("effic_vs_hit","effic vs hit",nintHit,minHit,maxHit) );
77
h_fake_vs_hit.push_back( dbe_->book1D("fakerate_vs_hit","fake rate vs hit",nintHit,minHit,maxHit) );
78
79
h_recoeta.push_back( dbe_->book1D("num_reco_eta","N of reco seed vs eta",nint,min,max) );
80
h_assoceta.push_back( dbe_->book1D("num_assoc(simToReco)_eta","N of associated seeds (simToReco) vs eta",nint,min,max) );
81
h_assoc2eta.push_back( dbe_->book1D("num_assoc(recoToSim)_eta","N of associated (recoToSim) seeds vs eta",nint,min,max) );
82
h_simuleta.push_back( dbe_->book1D("num_simul_eta","N of simulated tracks vs eta",nint,min,max) );
83
h_recopT.push_back( dbe_->book1D("num_reco_pT","N of reco seed vs pT",nintpT,minpT,maxpT) );
84
h_assocpT.push_back( dbe_->book1D("num_assoc(simToReco)_pT","N of associated seeds (simToReco) vs pT",nintpT,minpT,maxpT) );
85
h_assoc2pT.push_back( dbe_->book1D("num_assoc(recoToSim)_pT","N of associated (recoToSim) seeds vs pT",nintpT,minpT,maxpT) );
86
h_simulpT.push_back( dbe_->book1D("num_simul_pT","N of simulated tracks vs pT",nintpT,minpT,maxpT) );
87
88
h_eta.push_back( dbe_->book1D("eta", "pseudorapidity residue", 1000, -0.1, 0.1 ) );
89
h_pt.push_back( dbe_->book1D("pullPt", "pull of p_{t}", 100, -10, 10 ) );
90
h_pullTheta.push_back( dbe_->book1D("pullTheta","pull of #theta parameter",250,-25,25) );
91
h_pullPhi.push_back( dbe_->book1D("pullPhi","pull of #phi parameter",250,-25,25) );
92
h_pullDxy.push_back( dbe_->book1D("pullDxy","pull of dxy parameter",250,-25,25) );
93
h_pullDz.push_back( dbe_->book1D("pullDz","pull of dz parameter",250,-25,25) );
94
h_pullQoverp.push_back( dbe_->book1D("pullQoverp","pull of qoverp parameter",250,-25,25) );
95
96
if (associators[ww]=="quickTrackAssociatorByHits"){
97
h_assocFraction.push_back( dbe_->book1D("assocFraction","fraction of shared hits",200,0,2) );
98
h_assocSharedHit.push_back(dbe_->book1D("assocSharedHit","number of shared hits",20,0,20));
99
}
100
101
//chi2_vs_nhits.push_back( dbe_->book2D("chi2_vs_nhits","#chi^{2} vs nhits",25,0,25,100,0,10) );
102
nrec_vs_nsim.push_back( dbe_->book2D("nrec_vs_nsim","nrec vs nsim",20,-0.5,19.5,20,-0.5,19.5) );
103
104
nhits_vs_eta.push_back( dbe_->book2D("nhits_vs_eta","nhits vs eta",nint,min,max,nintHit,minHit,maxHit) );
105
h_hits_eta.push_back( dbe_->bookProfile("hits_eta","mean #hits vs eta",nint,min,max,nintHit,minHit,maxHit) );
106
107
if(useLogPt){
108
BinLogX(h_efficPt[j]->getTH1F());
109
BinLogX(h_fakeratePt[j]->getTH1F());
110
BinLogX(h_recopT[j]->getTH1F());
111
BinLogX(h_assocpT[j]->getTH1F());
112
BinLogX(h_assoc2pT[j]->getTH1F());
113
BinLogX(h_simulpT[j]->getTH1F());
114
}
115
j++;
116
}
117
}
118
edm::ESHandle<TrackAssociatorBase> theAssociator;
119
for (unsigned int w=0;w<associators.size();w++) {
120
setup.get<TrackAssociatorRecord>().get(associators[w],theAssociator);
121
associator.push_back( theAssociator.product() );
122
}
123
}
124
125
void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetup& setup){
126
127
edm::LogInfo("TrackValidator") << "\n====================================================" << "\n"
128
<< "Analyzing new event" << "\n"
129
<< "====================================================\n" << "\n";
130
131
edm::Handle<TrackingParticleCollection> TPCollectionHeff ;
132
event.getByLabel(label_tp_effic,TPCollectionHeff);
133
const TrackingParticleCollection tPCeff = *(TPCollectionHeff.product());
134
135
edm::Handle<TrackingParticleCollection> TPCollectionHfake ;
136
event.getByLabel(label_tp_fake,TPCollectionHfake);
137
const TrackingParticleCollection tPCfake = *(TPCollectionHfake.product());
138
139
if (tPCeff.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for efficiency studies has size = 0! Skipping Event." ; return;}
140
if (tPCfake.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for fake rate studies has size = 0! Skipping Event." ; return;}
141
142
edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
143
event.getByLabel(bsSrc,recoBeamSpotHandle);
144
reco::BeamSpot bs = *recoBeamSpotHandle;
145
146
int w=0;
147
for (unsigned int ww=0;ww<associators.size();ww++){
148
for (unsigned int www=0;www<label.size();www++){
149
edm::LogVerbatim("TrackValidator") << "Analyzing "
150
<< label[www].process()<<":"
151
<< label[www].label()<<":"
152
<< label[www].instance()<<" with "
153
<< associators[ww].c_str() <<"\n";
154
//
155
//get collections from the event
156
//
157
edm::Handle<edm::View<TrajectorySeed> > seedCollection;
158
event.getByLabel(label[www], seedCollection);
159
if (seedCollection->size()==0) {
160
edm::LogInfo("TrackValidator") << "SeedCollection size = 0!" ;
161
continue;
162
}
163
164
//associate seeds
165
LogTrace("TrackValidator") << "Calling associateRecoToSim method" << "\n";
166
reco::RecoToSimCollectionSeed recSimColl=associator[ww]->associateRecoToSim(seedCollection,
167
TPCollectionHfake,
168
&event);
169
LogTrace("TrackValidator") << "Calling associateSimToReco method" << "\n";
170
reco::SimToRecoCollectionSeed simRecColl=associator[ww]->associateSimToReco(seedCollection,
171
TPCollectionHeff,
172
&event);
173
174
//
175
//fill simulation histograms
176
//compute number of seeds per eta interval
177
//
178
edm::LogVerbatim("TrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
179
int ats = 0;
180
int st=0;
181
for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
182
TrackingParticleRef tp(TPCollectionHeff, i);
183
if (tp->charge()==0) continue;
184
st++;
185
h_ptSIM[w]->Fill(sqrt(tp->momentum().perp2()));
186
h_etaSIM[w]->Fill(tp->momentum().eta());
187
h_vertposSIM[w]->Fill(sqrt(tp->vertex().perp2()));
188
189
std::vector<std::pair<edm::RefToBase<TrajectorySeed>, double> > rt;
190
if(simRecColl.find(tp) != simRecColl.end()){
191
rt = simRecColl[tp];
192
if (rt.size()!=0) {
193
ats++;
194
edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
195
<< " with pt=" << sqrt(tp->momentum().perp2())
196
<< " associated with quality:" << rt.begin()->second <<"\n";
197
}
198
}else{
199
edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
200
<< " with pt=" << sqrt(tp->momentum().perp2())
201
<< " NOT associated to any TrajectorySeed" << "\n";
202
}
203
double tpeta=getEta(tp->momentum().eta());
204
for (unsigned int f=0; f<etaintervals[w].size()-1; f++){
205
if (tpeta>etaintervals[w][f]&&
206
tpeta<etaintervals[w][f+1]) {
207
totSIMeta[w][f]++;
208
if (rt.size()!=0) {
209
totASSeta[w][f]++;
210
}
211
}
212
} // END for (unsigned int f=0; f<etaintervals[w].size()-1; f++){
213
double tppt=getPt(sqrt(tp->momentum().perp2()));
214
for (unsigned int f=0; f<pTintervals[w].size()-1; f++){
215
if (tppt>pTintervals[w][f]&&
216
tppt<pTintervals[w][f+1]) {
217
totSIMpT[w][f]++;
218
if (rt.size()!=0) {
219
totASSpT[w][f]++;
220
}
221
}
222
} // END for (unsigned int f=0; f<pTintervals[w].size()-1; f++){
223
224
totSIM_hit[w][tp->matchedHit()]++;//FIXME
225
if (rt.size()!=0) totASS_hit[w][tp->matchedHit()]++;
226
}
227
if (st!=0) h_tracksSIM[w]->Fill(st);
228
229
230
//
231
//fill reconstructed seed histograms
232
//
233
edm::LogVerbatim("TrackValidator") << "\n# of TrajectorySeeds with "
234
<< label[www].process()<<":"
235
<< label[www].label()<<":"
236
<< label[www].instance()
237
<< ": " << seedCollection->size() << "\n";
238
int at=0;
239
int rT=0;
240
241
TSCBLBuilderNoMaterial tscblBuilder;
242
PerigeeConversions tspConverter;
243
for(TrajectorySeedCollection::size_type i=0; i<seedCollection->size(); ++i){
244
edm::RefToBase<TrajectorySeed> seed(seedCollection, i);
245
rT++;
246
247
//get parameters and errors from the seed state
248
TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(seed->recHits().second-1));
249
TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( seed->startingState(), recHit->surface(), theMF.product());
250
TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm
251
if(!(tsAtClosestApproachSeed.isValid())){
252
edm::LogVerbatim("SeedValidator")<<"TrajectoryStateClosestToBeamLine not valid";
253
continue;
254
}
255
GlobalPoint vSeed1 = tsAtClosestApproachSeed.trackStateAtPCA().position();
256
GlobalVector pSeed = tsAtClosestApproachSeed.trackStateAtPCA().momentum();
257
GlobalPoint vSeed(vSeed1.x()-bs.x0(),vSeed1.y()-bs.y0(),vSeed1.z()-bs.z0());
258
259
double etaSeed = state.globalMomentum().eta();
260
double ptSeed = sqrt(state.globalMomentum().perp2());
261
double pmSeed = sqrt(state.globalMomentum().mag2());
262
double pzSeed = state.globalMomentum().z();
263
double numberOfHitsSeed = seed->recHits().second-seed->recHits().first;
264
double qoverpSeed = tsAtClosestApproachSeed.trackStateAtPCA().charge()/pSeed.mag();
265
double thetaSeed = pSeed.theta();
266
double lambdaSeed = M_PI/2-thetaSeed;
267
double phiSeed = pSeed.phi();
268
double dxySeed = (-vSeed.x()*sin(pSeed.phi())+vSeed.y()*cos(pSeed.phi()));
269
double dzSeed = vSeed.z() - (vSeed.x()*pSeed.x()+vSeed.y()*pSeed.y())/pSeed.perp() * pSeed.z()/pSeed.perp();
270
271
PerigeeTrajectoryError seedPerigeeErrors = tspConverter.ftsToPerigeeError(tsAtClosestApproachSeed.trackStateAtPCA());
272
double qoverpErrorSeed = tsAtClosestApproachSeed.trackStateAtPCA().curvilinearError().matrix().At(0,0);
273
double lambdaErrorSeed = seedPerigeeErrors.thetaError();//=theta error
274
double phiErrorSeed = seedPerigeeErrors.phiError();
275
double dxyErrorSeed = seedPerigeeErrors.transverseImpactParameterError();
276
double dzErrorSeed = seedPerigeeErrors.longitudinalImpactParameterError();
277
double ptErrorSeed = (state.charge()!=0) ? sqrt(
278
ptSeed*ptSeed*pmSeed*pmSeed/state.charge()/state.charge() * tsAtClosestApproachSeed.trackStateAtPCA().curvilinearError().matrix().At(0,0)
279
+ 2*ptSeed*pmSeed/state.charge()*pzSeed * tsAtClosestApproachSeed.trackStateAtPCA().curvilinearError().matrix().At(0,1)
280
+ pzSeed*pzSeed * tsAtClosestApproachSeed.trackStateAtPCA().curvilinearError().matrix().At(1,1) ) : 1.e6;
281
282
std::vector<std::pair<TrackingParticleRef, double> > tp;
283
if(recSimColl.find(seed) != recSimColl.end()) {
284
tp = recSimColl[seed];
285
if (tp.size()!=0) {
286
at++;
287
edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " associated with quality:" << tp.begin()->second <<"\n";
288
}
289
} else {
290
edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " NOT associated to any TrackingParticle" << "\n";
291
}
292
293
//Compute fake rate vs eta
294
double seedeta=getEta(etaSeed);
295
for (unsigned int f=0; f<etaintervals[w].size()-1; f++){
296
if (seedeta>etaintervals[w][f]&&
297
seedeta<etaintervals[w][f+1]) {
298
totRECeta[w][f]++;
299
if (tp.size()!=0) {
300
totASS2eta[w][f]++;
301
}
302
}
303
}
304
double seedpt=getPt(ptSeed);
305
for (unsigned int f=0; f<pTintervals[w].size()-1; f++){
306
if (seedpt>pTintervals[w][f]&&
307
seedpt<pTintervals[w][f+1]) {
308
totRECpT[w][f]++;
309
if (tp.size()!=0) {
310
totASS2pT[w][f]++;
311
}
312
}
313
}
314
totREC_hit[w][seed->nHits()]++;
315
if (tp.size()!=0) totASS2_hit[w][seed->nHits()]++;
316
317
//Fill other histos
318
try{
319
if (tp.size()==0) continue;
320
321
TrackingParticleRef tpr = tp.begin()->first;
322
const SimTrack * assocTrack = &(*tpr->g4Track_begin());
323
324
if (associators[ww]=="quickTrackAssociatorByHits"){
325
double fraction = tp.begin()->second;
326
h_assocFraction[www]->Fill(fraction);
327
h_assocSharedHit[www]->Fill(fraction*numberOfHitsSeed);
328
}
329
330
h_hits[w]->Fill(numberOfHitsSeed);
331
h_charge[w]->Fill( state.charge() );
332
333
//compute tracking particle parameters at point of closest approach to the beamline
334
edm::ESHandle<MagneticField> theMF;
335
setup.get<IdealMagneticFieldRecord>().get(theMF);
336
FreeTrajectoryState
337
ftsAtProduction(GlobalPoint(tpr->vertex().x(),tpr->vertex().y(),tpr->vertex().z()),
338
GlobalVector(assocTrack->momentum().x(),assocTrack->momentum().y(),assocTrack->momentum().z()),
339
TrackCharge(tpr->charge()),
340
theMF.product());
341
TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,bs);//as in TrackProducerAlgorithm
342
GlobalPoint v1 = tsAtClosestApproach.trackStateAtPCA().position();
343
GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
344
GlobalPoint v(v1.x()-bs.x0(),v1.y()-bs.y0(),v1.z()-bs.z0());
345
346
double qoverpSim = tsAtClosestApproach.trackStateAtPCA().charge()/p.mag();
347
double lambdaSim = M_PI/2-p.theta();
348
double phiSim = p.phi();
349
double dxySim = (-v.x()*sin(p.phi())+v.y()*cos(p.phi()));
350
double dzSim = v.z() - (v.x()*p.x()+v.y()*p.y())/p.perp() * p.z()/p.perp();
351
352
// eta residue; pt, k, theta, phi, dxy, dz pulls
353
double qoverpPull=(qoverpSeed-qoverpSim)/qoverpErrorSeed;
354
double thetaPull=(lambdaSeed-lambdaSim)/lambdaErrorSeed;
355
double phiPull=(phiSeed-phiSim)/phiErrorSeed;
356
double dxyPull=(dxySeed-dxySim)/dxyErrorSeed;
357
double dzPull=(dzSeed-dzSim)/dzErrorSeed;
358
359
double contrib_Qoverp = ((qoverpSeed-qoverpSim)/qoverpErrorSeed)*
360
((qoverpSeed-qoverpSim)/qoverpErrorSeed)/5;
361
double contrib_dxy = ((dxySeed-dxySim)/dxyErrorSeed)*((dxySeed-dxySim)/dxyErrorSeed)/5;
362
double contrib_dz = ((dzSeed-dzSim)/dzErrorSeed)*((dzSeed-dzSim)/dzErrorSeed)/5;
363
double contrib_theta = ((lambdaSeed-lambdaSim)/lambdaErrorSeed)*
364
((lambdaSeed-lambdaSim)/lambdaErrorSeed)/5;
365
double contrib_phi = ((phiSeed-phiSim)/phiErrorSeed)*
366
((phiSeed-phiSim)/phiErrorSeed)/5;
367
LogTrace("SeedValidatorTEST") << "assocChi2=" << tp.begin()->second << "\n"
368
<< "" << "\n"
369
<< "ptREC=" << ptSeed << "\n"
370
<< "etaREC=" << etaSeed << "\n"
371
<< "qoverpREC=" << qoverpSeed << "\n"
372
<< "dxyREC=" << dxySeed << "\n"
373
<< "dzREC=" << dzSeed << "\n"
374
<< "thetaREC=" << thetaSeed << "\n"
375
<< "phiREC=" << phiSeed << "\n"
376
<< "" << "\n"
377
<< "qoverpError()=" << qoverpErrorSeed << "\n"
378
<< "dxyError()=" << dxyErrorSeed << "\n"
379
<< "dzError()=" << dzErrorSeed << "\n"
380
<< "thetaError()=" << lambdaErrorSeed << "\n"
381
<< "phiError()=" << phiErrorSeed << "\n"
382
<< "" << "\n"
383
<< "ptSIM=" << sqrt(assocTrack->momentum().perp2()) << "\n"
384
<< "etaSIM=" << assocTrack->momentum().Eta() << "\n"
385
<< "qoverpSIM=" << qoverpSim << "\n"
386
<< "dxySIM=" << dxySim << "\n"
387
<< "dzSIM=" << dzSim << "\n"
388
<< "thetaSIM=" << M_PI/2-lambdaSim << "\n"
389
<< "phiSIM=" << phiSim << "\n"
390
<< "" << "\n"
391
<< "contrib_Qoverp=" << contrib_Qoverp << "\n"
392
<< "contrib_dxy=" << contrib_dxy << "\n"
393
<< "contrib_dz=" << contrib_dz << "\n"
394
<< "contrib_theta=" << contrib_theta << "\n"
395
<< "contrib_phi=" << contrib_phi << "\n"
396
<< "" << "\n"
397
<<"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<"\n";
398
399
h_pullQoverp[w]->Fill(qoverpPull);
400
h_pullTheta[w]->Fill(thetaPull);
401
h_pullPhi[w]->Fill(phiPull);
402
h_pullDxy[w]->Fill(dxyPull);
403
h_pullDz[w]->Fill(dzPull);
404
405
double ptres=ptSeed-sqrt(assocTrack->momentum().perp2());
406
//double etares=etaSeed-assocTrack->momentum().pseudoRapidity();
407
double etares=etaSeed-assocTrack->momentum().Eta();
408
409
h_pt[w]->Fill(ptres/ptErrorSeed);
410
h_eta[w]->Fill(etares);
411
412
//#hit vs eta: fill 2D histos
413
nhits_vs_eta[w]->Fill(getEta(etaSeed),numberOfHitsSeed);
414
415
} catch (cms::Exception e){
416
LogTrace("SeedValidator") << "exception found: " << e.what() << "\n";
417
}
418
}
419
if (at!=0) h_tracks[w]->Fill(at);
420
h_fakes[w]->Fill(rT-at);
421
edm::LogVerbatim("SeedValidator") << "Total Simulated: " << st << "\n"
422
<< "Total Associated (simToReco): " << ats << "\n"
423
<< "Total Reconstructed: " << rT << "\n"
424
<< "Total Associated (recoToSim): " << at << "\n"
425
<< "Total Fakes: " << rT-at << "\n";
426
nrec_vs_nsim[w]->Fill(rT,st);
427
w++;
428
}
429
}
430
}
431
432
void TrackerSeedValidator::endRun(edm::Run const&, edm::EventSetup const&) {
433
LogTrace("SeedValidator") << "TrackerSeedValidator::endRun()";
434
int w=0;
435
for (unsigned int ww=0;ww<associators.size();ww++){
436
for (unsigned int www=0;www<label.size();www++){
437
438
doProfileX(nhits_vs_eta[w],h_hits_eta[w]);
439
440
//effic&fake
441
fillPlotFromVectors(h_effic[w],totASSeta[w],totSIMeta[w],"effic");
442
fillPlotFromVectors(h_fakerate[w],totASS2eta[w],totRECeta[w],"fakerate");
443
fillPlotFromVectors(h_efficPt[w],totASSpT[w],totSIMpT[w],"effic");
444
fillPlotFromVectors(h_fakeratePt[w],totASS2pT[w],totRECpT[w],"fakerate");
445
fillPlotFromVectors(h_effic_vs_hit[w],totASS_hit[w],totSIM_hit[w],"effic");
446
fillPlotFromVectors(h_fake_vs_hit[w],totASS2_hit[w],totREC_hit[w],"fakerate");
447
448
fillPlotFromVector(h_recoeta[w],totRECeta[w]);
449
fillPlotFromVector(h_simuleta[w],totSIMeta[w]);
450
fillPlotFromVector(h_assoceta[w],totASSeta[w]);
451
fillPlotFromVector(h_assoc2eta[w],totASS2eta[w]);
452
453
fillPlotFromVector(h_recopT[w],totRECpT[w]);
454
fillPlotFromVector(h_simulpT[w],totSIMpT[w]);
455
fillPlotFromVector(h_assocpT[w],totASSpT[w]);
456
fillPlotFromVector(h_assoc2pT[w],totASS2pT[w]);
457
458
w++;
459
}
460
}
461
if ( out.size() != 0 && dbe_ ) dbe_->save(out);
462
}
463
*/
464
465
466
Generated for CMSSW Reference Manual by
1.8.5