285{
286 if (
m_print ) std::cout <<
"PurityAnalysis::execute() \t " <<
name()
287 << "\tref " << reftracks.size()
288 << "\ttest " << testtracks.size() << std::endl;
289
290
291
292
293
294
295
296
297 static std::string
varName[10] = {
"pT",
"eta",
"phi",
"z0",
"d0",
"a0",
"nsct",
"npix",
"ntrt",
"nstraw" };
298
299
300
301 std::map<std::string, TH1F*>::iterator hmitr =
m_histos.find(
"ntracks");
302 if ( hmitr!=
m_histos.end() ) hmitr->second->Fill( reftracks.size() );
303
304 hmitr =
m_histos.find(
"ntracks_rec");
305 if ( hmitr!=
m_histos.end() ) hmitr->second->Fill( testtracks.size() );
306
308
310 m_Nref += reftracks.size();
311
312
313
315 for ( int i=reftracks.size() ; i-- ; ) {
316 double phit = reftracks[
i]->phi();
319 }
320
321
322
323 for ( int i=reftracks.size() ; i-- ; ) {
324
325 double pTt = reftracks[
i]->pT()/1000;
326 double etat = reftracks[
i]->eta();
327 double phit = reftracks[
i]->phi();
329 double d0t = reftracks[
i]->a0();
330
331
333
334 if ( std::fabs(a0t)>
a0 )
continue;
335
336 double chi2t = reftracks[
i]->chi2();
337
339
340 double nsctt = reftracks[
i]->sctHits();
341 double npixt = reftracks[
i]->pixelHits();
342
343 double ntrtt = reftracks[
i]->trHits();
344 double nstrawt = reftracks[
i]->strawHits();
345
346
347
348
349
350 const TIDA::Track* matchedreco = matcher->
matched(reftracks[i]);
351
352
353
354
355 double vpart[10] = { std::fabs(pTt), etat, phit, z0t, d0t, a0t, nsctt, npixt, ntrtt, nstrawt };
356 for (
int it=0 ;
it<10 ;
it++ ) {
357
358
359
360
361 if ( TH1F* hptr =
find( varName[it] ) ) hptr->Fill( vpart[it] );
362 else std::cerr <<
"hmmm histo " <<
varName[
it] <<
" not found" << std::endl;
363
364 }
365
366
367 if ( matchedreco ) {
368
369
376
377
378 if ( pTt<0 )
m_eff_ptm->Fill(std::fabs(pTt));
380
382
383
384 double pTr = matchedreco->
pT()/1000;
385 double etar = matchedreco->
eta();
386 double phir = matchedreco->
phi();
388 double d0r = matchedreco->
a0();
390
391
392
393
394
395
396
397#if 0
398
399 if (
m_print ) std::cout <<
"PurityAnalysis::execute() \t\t" <<
i <<
" "
400 << *reftracks[
i] <<
" -> " << *matchedreco <<
"\t"
401 << pTr << " " << pTt << " " << d0r << " " << d0t << std::endl;
402#endif
403
404 double vres[6] = { 1.0/std::fabs(pTr)-1.0/std::fabs(pTt), etar-etat, phir-phit, z0r-z0t, d0r-d0t, a0r-a0t };
405 for (
int it=0 ;
it<6 ;
it++ ) {
406 if ( it==0 ) {
407 find(
"ipT_res")->Fill( vres[0] );
408 find(
"spT_res")->Fill( 1.0/pTr-1.0/pTt );
409 }
410 if ( TH1F* hptr =
find(varName[it]+
"_res") ) hptr->Fill( vres[it] );
411 else std::cerr <<
"hmmm histo " <<
varName[
it]+
"_res" <<
" not found" << std::endl;
412 }
413
414 if ( TH1F* hptr =
find(
"etai_res") ) hptr->Fill( etat-etar );
415
416
417 double Delphi = phit-phir;
418 double Deleta = etat-etar;
419
422
423 double DeltaR = std::sqrt(Delphi*Delphi+Deleta*Deleta);
424
426
427
428
429
430
431
432
433
435
436#if 0
437
438 double vpart[10] = { std::fabs(pTr), etar, phir, z0r, d0r, a0r, nsctr, npixr, ntrtr, nstrawr };
439 for (
int it=0 ;
it<10 ;
it++ ) {
440
441
442
443
444
445 if ( TH1F* hptr =
find(varName[it]+
"_rec") ) hptr->Fill( vpart[it] );
446 else std::cerr <<
"hmmm histo " <<
varName[
it]+
"_rec" <<
" not found" << std::endl;
447 }
448#endif
449
450 }
451 else {
452
453
454 m_eff_pt->FillDenom(std::fabs(pTt));
460
461
462 if ( pTt<0 )
m_eff_ptm->FillDenom(std::fabs(pTt));
463 else m_eff_ptp->FillDenom(std::fabs(pTt));
464
466
467#if 0
468 if ( std::fabs(pTt)>4 ) {
470
472 std::cout << mname <<
"\tMISSING TRACK run " <<
r <<
"\tevent " <<
ev
473 <<
"\tlb " <<
lb <<
"\t" << *reftracks[
i];
474
475 if ( std::fabs(pTt)>=30 ) std::cout << "\tvery high pt";
476 if ( std::fabs(pTt)>4 &&
477 std::fabs(pTt)<30 ) std::cout << "\t high pt";
478
479 std::cout << std::endl;
480
481 }
482#endif
483
484
485
486
487
488 }
489
490 }
491
492
493
494
495
496 static int icount = 0;
497
498
499
500 if (
m_print ) std::cout <<
"PurityAnalysis::execute() \t " <<
name() <<
"\t " << icount <<
" events\t " << testtracks.size() <<
" tracks (" <<
m_Nreco <<
")" <<
"\n---------------" << std::endl;
501
502 icount++;
503
504 for ( int i=testtracks.size() ; i-- ; ) {
505
506
507
508
509 double pTr = testtracks[
i]->pT()/1000;
510 double etar = testtracks[
i]->eta();
511 double phir = testtracks[
i]->phi();
512 double z0r = testtracks[
i]->z0();
513 double d0r = testtracks[
i]->a0();
515
516
517
518
519 double nsctr = testtracks[
i]->sctHits();
520 double npixr = testtracks[
i]->pixelHits();
521
522 double ntrtr = testtracks[
i]->trHits();
523 double nstrawr = testtracks[
i]->strawHits();
524
525
526 const TIDA::Track* matchedref = matcher->
revmatched(testtracks[i]);
527
528
529
530
531#if 1
532
533 double vpart[10] = { std::fabs(pTr), etar, phir, z0r, d0r, a0r, nsctr, npixr, ntrtr, nstrawr };
534 for (
int it=0 ;
it<10 ;
it++ ) {
535
536
537
538
539
540 if ( TH1F* hptr =
find(varName[it]+
"_rec") ) hptr->Fill( vpart[it] );
541 else std::cerr <<
"hmmm histo " <<
varName[
it]+
"_rec" <<
" not found" << std::endl;
542 }
543#endif
544
545
546
547 if ( matchedref ) {
548
549
550
557
558
559
560 }
561 else {
562
569 }
570
571 }
572
574
575 std::cout << "PurityAnalysis::execute() missed a high pT track - dumping tracks" << std::endl;
576
577 for ( int i=reftracks.size() ; i-- ; ) {
578
579 if ( std::fabs( reftracks[i]->
pT() ) > 1000 ) {
580 std::cout <<
"\t dump " << *reftracks[
i];
581 const TIDA::Track* matchedreco = matcher->
matched(reftracks[i]);
582 if ( matchedreco ) std::cout << " <--> " << *matchedreco << std::endl;
583 else std::cout << std::endl;
584 }
585
586 }
587
588 for ( int i=testtracks.size() ; i-- ; ) {
589 const TIDA::Track* matchedref = matcher->
revmatched(testtracks[i]);
590 if ( matchedref==0 ) std::cout <<
"\t\t\t\t\t " << *testtracks[
i] << std::endl;
591 }
592
593 }
594
595 if (
m_print ) std::cout <<
"PurityAnalysis::execute() exiting" << std::endl;
596
597}
TH1F * find(const std::string &n)
Efficiency1D * m_purity_a0
Efficiency1D * m_purity_d0
virtual const T * revmatched(S *t)
virtual const S * matched(T *t)
std::ostream & dump(std::ostream &out, const I4MomIter iBeg, const I4MomIter iEnd)
Helper to stream out a range of I4Momentum objects.
str varName
end cluster ToT and charge