ATLAS Offline Software
Loading...
Searching...
No Matches
PurityAnalysis Class Reference

#include <PurityAnalysis.h>

Inheritance diagram for PurityAnalysis:
Collaboration diagram for PurityAnalysis:

Public Member Functions

 PurityAnalysis (const std::string &name)
 ~PurityAnalysis ()
virtual void initialise ()
 book all the histograms
virtual void execute (const std::vector< TIDA::Track * > &reftracks, const std::vector< TIDA::Track * > &testtracks, TrackAssociator *matcher)
 fill all the histograms - matched histograms, efficiencies etc
virtual void finalise ()
 calculate the efficiencies and write them out with all the histograms
void setprint (bool p)
virtual void execute (const std::vector< TIDA::Track * > &tracks1, const std::vector< TIDA::Track * > &tracks2, TrackAssociator *matcher, TrigObjectMatcher *)
virtual void execute (const std::vector< TIDA::Track * > &, const std::vector< TIDA::Track * > &, TrackAssociator *, const TIDA::Event *)
virtual void execute (const std::vector< TIDA::Track * > &tracks1, const std::vector< TIDA::Track * > &tracks2, TrackAssociator *matcher, const TIDA::Event *event, double *)
virtual void execute (const std::vector< TIDA::Track * > &, const std::vector< TIDA::Track * > &, TrackAssociator *, const TIDA::Event *, double *, TIDARoiDescriptor *)
const std::string & name () const
 return identifier
virtual void execute_vtx (const std::vector< TIDA::Vertex * > &, const std::vector< TIDA::Vertex * > &, const TIDA::Event *=0)
void addHistogram (TH1 *h)
const std::map< std::string, TH1 * > & getHistograms () const
 access the histograms
std::map< std::string, TH1 * >::const_iterator begin () const
std::map< std::string, TH1 * >::const_iterator end () const
void setBeamRef (double x, double y, double z=0)
 set the beamline positions
void setBeamRef (const std::vector< double > &v)
void setBeamTest (double x, double y, double z=0)
void setBeamTest (const std::vector< double > &v)
double beamRefx () const
double beamRefy () const
double beamRefz () const
double beamTestx () const
double beamTesty () const
double beamTestz () const
TIDA::FeatureStorestore ()
const TIDA::Eventevent () const
void setevent (TIDA::Event *e)
const TIDARoiDescriptorroi () const
void setroi (TIDARoiDescriptor *r)

Protected Attributes

std::string m_name
 identifier of the of the analysis - also used for the root directory into which the histograms are put
double m_xBeamReference
 beamline positions reference sample
double m_yBeamReference
double m_zBeamReference
double m_xBeamTest
 test sample
double m_yBeamTest
double m_zBeamTest
TIDA::FeatureStore m_store
TIDA::Eventm_event
TIDARoiDescriptorm_roi

Private Member Functions

void addHistogram (TH1F *h)
TH1F * find (const std::string &n)

Private Attributes

TIDDirectorym_dir = 0
std::map< std::string, TH1F * > m_histos
Efficiency1Dm_eff_pt = 0
Efficiency1Dm_eff_ptp = 0
Efficiency1Dm_eff_ptm = 0
Efficiency1Dm_eff_eta = 0
Efficiency1Dm_eff_phi = 0
Efficiency1Dm_eff_z0 = 0
Efficiency1Dm_eff_d0 = 0
Efficiency1Dm_eff_a0 = 0
Efficiency1Dm_purity_pt = 0
Efficiency1Dm_purity_eta = 0
Efficiency1Dm_purity_phi = 0
Efficiency1Dm_purity_z0 = 0
Efficiency1Dm_purity_d0 = 0
Efficiency1Dm_purity_a0 = 0
TH1F * m_hDeltaR = 0
int m_Nreco
 number of reconstructed tracks
int m_Nref
int m_Nmatched
TH1F * m_hchi2 = 0
bool m_print
 flag to print out the matched tracks etc

Detailed Description

Definition at line 34 of file PurityAnalysis.h.

Constructor & Destructor Documentation

◆ PurityAnalysis()

PurityAnalysis::PurityAnalysis ( const std::string & name)
inline

Definition at line 42 of file PurityAnalysis.h.

42 :
43 TrackAnalysis( name ), m_Nreco(0), m_Nref(0), m_Nmatched(0), m_print(false) {
44 std::cout << "PurityAnalysis::PurityAnalysis() " << TrackAnalysis::name() << std::endl;
45 }
bool m_print
flag to print out the matched tracks etc
int m_Nreco
number of reconstructed tracks
const std::string & name() const
return identifier
TrackAnalysis(const std::string &name)
the beam test parts are not really usable in a multithreaded environment

◆ ~PurityAnalysis()

PurityAnalysis::~PurityAnalysis ( )
inline

Definition at line 47 of file PurityAnalysis.h.

47 {
48 std::cout << "PurityAnalysis::~PurityAnalysis() " << name() << std::endl;
49 std::map<std::string, TH1F*>::iterator hitr=m_histos.begin();
50 std::map<std::string, TH1F*>::iterator hend=m_histos.end();
51 for ( ; hitr!=hend ; ++hitr ) delete hitr->second;
52
53 Efficiency1D* heff[4] = { m_eff_pt, m_eff_eta, m_eff_phi, m_eff_z0 };
54 Efficiency1D* hpurity[4] = { m_purity_pt, m_purity_eta, m_purity_phi, m_purity_z0 };
55
56 for ( int i=4 ; i-- ; ) { delete heff[i]; delete hpurity[i]; }
57
58 delete m_eff_ptp;
59 delete m_eff_ptm;
60
61 }
std::map< std::string, TH1F * > m_histos
Efficiency1D * m_eff_ptp
Efficiency1D * m_eff_ptm
Efficiency1D * m_purity_eta
Efficiency1D * m_eff_eta
Efficiency1D * m_purity_z0
Efficiency1D * m_purity_pt
Efficiency1D * m_eff_pt
Efficiency1D * m_purity_phi
Efficiency1D * m_eff_phi
Efficiency1D * m_eff_z0

Member Function Documentation

◆ addHistogram() [1/2]

void PurityAnalysis::addHistogram ( TH1F * h)
inlineprivate

Definition at line 77 of file PurityAnalysis.h.

77 {
78 std::string name = h->GetName();
79 m_histos.insert( std::map<std::string, TH1F*>::value_type( name, h) );
80 }

◆ addHistogram() [2/2]

void TrackAnalysis::addHistogram ( TH1 * h)
inlineinherited

Definition at line 97 of file TrackAnalysis.h.

97 {
98 std::string name = h->GetName();
99 m_histos.insert( std::map<std::string, TH1*>::value_type( name, h) );
100 }
std::map< std::string, TH1 * > m_histos
lookup table for the histograms by name - does this need to be in the base class?

◆ beamRefx()

double TrackAnalysis::beamRefx ( ) const
inlineinherited

Definition at line 124 of file TrackAnalysis.h.

124{ return m_xBeamReference; }
double m_xBeamReference
beamline positions reference sample

◆ beamRefy()

double TrackAnalysis::beamRefy ( ) const
inlineinherited

Definition at line 125 of file TrackAnalysis.h.

125{ return m_yBeamReference; }
double m_yBeamReference

◆ beamRefz()

double TrackAnalysis::beamRefz ( ) const
inlineinherited

Definition at line 126 of file TrackAnalysis.h.

126{ return m_zBeamReference; }
double m_zBeamReference

◆ beamTestx()

double TrackAnalysis::beamTestx ( ) const
inlineinherited

Definition at line 128 of file TrackAnalysis.h.

128{ return m_xBeamTest; }
double m_xBeamTest
test sample

◆ beamTesty()

double TrackAnalysis::beamTesty ( ) const
inlineinherited

Definition at line 129 of file TrackAnalysis.h.

129{ return m_yBeamTest; }

◆ beamTestz()

double TrackAnalysis::beamTestz ( ) const
inlineinherited

Definition at line 130 of file TrackAnalysis.h.

130{ return m_zBeamTest; }

◆ begin()

std::map< std::string, TH1 * >::const_iterator TrackAnalysis::begin ( ) const
inlineinherited

Definition at line 105 of file TrackAnalysis.h.

105{ return m_histos.begin(); }

◆ end()

std::map< std::string, TH1 * >::const_iterator TrackAnalysis::end ( ) const
inlineinherited

Definition at line 106 of file TrackAnalysis.h.

106{ return m_histos.end(); }

◆ event()

const TIDA::Event * TrackAnalysis::event ( ) const
inlineinherited

Definition at line 135 of file TrackAnalysis.h.

135{ return m_event; }
TIDA::Event * m_event

◆ execute() [1/5]

virtual void TrackAnalysis::execute ( const std::vector< TIDA::Track * > & ,
const std::vector< TIDA::Track * > & ,
TrackAssociator * ,
const TIDA::Event *  )
inlinevirtual

Reimplemented from TrackAnalysis.

Definition at line 68 of file TrackAnalysis.h.

71 { }

◆ execute() [2/5]

virtual void TrackAnalysis::execute ( const std::vector< TIDA::Track * > & ,
const std::vector< TIDA::Track * > & ,
TrackAssociator * ,
const TIDA::Event * ,
double * ,
TIDARoiDescriptor *  )
inlinevirtual

Reimplemented from TrackAnalysis.

Definition at line 81 of file TrackAnalysis.h.

86 { }

◆ execute() [3/5]

void PurityAnalysis::execute ( const std::vector< TIDA::Track * > & reftracks,
const std::vector< TIDA::Track * > & testtracks,
TrackAssociator * matcher )
virtual

fill all the histograms - matched histograms, efficiencies etc

matched track distributions

Implements TrackAnalysis.

Definition at line 282 of file PurityAnalysis.cxx.

285{
286 if ( m_print ) std::cout << "PurityAnalysis::execute() \t " << name()
287 << "\tref " << reftracks.size()
288 << "\ttest " << testtracks.size() << std::endl;
289
290 // std::cout << "\tx " << m_xBeamReference << "\ty " << m_yBeamReference
291 // << "\tx " << m_xBeamTest << "\ty " << m_yBeamTest << std::endl;
292
293
294 // std::cout << "PurityAnalysis (resolutions really) filling " << std::endl;
295
296 // should have these as a class variable
297 static std::string varName[10] = { "pT", "eta", "phi", "z0", "d0", "a0", "nsct", "npix", "ntrt", "nstraw" };
298
299 // std::cout << "PurityAnalysis ref size " << reftracks.size() << "\ttest size " << testtracks.size() << std::endl;
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
307 bool dump = false;
308
309 m_Nreco += testtracks.size();
310 m_Nref += reftracks.size();
311
312 // std::cout << "PurityAnalysis ref tracks " << std::endl;
313
314 m_Nref = 0;
315 for ( int i=reftracks.size() ; i-- ; ) {
316 double phit = reftracks[i]->phi();
317 double a0t = reftracks[i]->a0() + sin(phit)*m_xBeamReference - cos(phit)*m_yBeamReference;
318 if ( std::fabs(a0t)<a0 ) m_Nref++;
319 }
320
321 // if ( testtracks.size() ) std::cout << "NTRACKS " << testtracks.size() << std::endl;
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();
328 double z0t = reftracks[i]->z0() + std::cos(phit)*m_xBeamReference + std::sin(phit)*m_yBeamReference;
329 double d0t = reftracks[i]->a0();
330 // this will be changed when we know the beam spot position
331 // double a0t = reftracks[i]->a0() + sin(phit)*m_xBeam - cos(phit)*m_yBeam;
332 double a0t = reftracks[i]->a0() + std::sin(phit)*m_xBeamReference - std::cos(phit)*m_yBeamReference;
333
334 if ( std::fabs(a0t)>a0 ) continue;
335
336 double chi2t = reftracks[i]->chi2();
337
338 m_hchi2->Fill( chi2t );
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 // double ts_scale = (ts-1260400000)*3000.0/(1260700000-1260400000);
347
348 // std::cout << "Fill h2 " << " " << h2m << " " << *reftracks[i] << std::endl;
349
350 const TIDA::Track* matchedreco = matcher->matched(reftracks[i]);
351
352 // std::cout << "\t\tPurityAnalysis " << name() << "\t" << i << " " << *reftracks[i] << " -> ";
353
354 // raw reference track distributions
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 // std::string hname = varName[it];
358 // std::map<std::string, TH1F*>::iterator hmitr = m_histos.find(hname);
359 // if ( hmitr!=m_histos.end() ) hmitr->second->Fill( vpart[it] );
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 // efficiency histos
370 m_eff_pt->Fill(std::fabs(pTt));
371 m_eff_z0->Fill(z0t);
372 m_eff_eta->Fill(etat);
373 m_eff_phi->Fill(phit);
374 m_eff_d0->Fill(d0t);
375 m_eff_a0->Fill(a0t);
376
377 // signed pT
378 if ( pTt<0 ) m_eff_ptm->Fill(std::fabs(pTt));
379 else m_eff_ptp->Fill(std::fabs(pTt));
380
381 m_Nmatched++;
382
383 // residual histos
384 double pTr = matchedreco->pT()/1000;
385 double etar = matchedreco->eta();
386 double phir = matchedreco->phi();
387 double z0r = matchedreco->z0() + std::cos(phir)*m_xBeamTest + std::sin(phir)*m_yBeamTest; ;
388 double d0r = matchedreco->a0();
389 double a0r = matchedreco->a0() + sin(phir)*m_xBeamTest - cos(phir)*m_yBeamTest; // this will be changed when we know the beam spot position
390
391 // double nsctr = matchedreco->sctHits();
392 // double npixr = matchedreco->pixelHits();
393
394 // double ntrtr = matchedreco->trHits();
395 // double nstrawr = matchedreco->strawHits();
396
397#if 0
398 // if ( m_print ) std::cout << "PurityAnalysis::execute() \t " << name() << "\t" << i << " "
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
420 if ( Delphi<-M_PI ) Delphi+=2*M_PI;
421 if ( Delphi>M_PI ) Delphi -=2*M_PI;
422
423 double DeltaR = std::sqrt(Delphi*Delphi+Deleta*Deleta);
424
425 m_hDeltaR->Fill(DeltaR);
426
427
428 // in this loop over the reference tracks, could fill efficiency
429 // histograms
430
431 // m_eff_pteta->Fill( pTt, etat );
432 // m_eff_etapt->Fill( pTt, etat );
433
435
436#if 0
437 // raw test track distributions
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 // std::string hname = name()+"_"+varName[it]+"_rec";
441 // std::string hname = varName[it]+"_rec";
442 // std::map<std::string, TH1F*>::iterator hmitr = m_histos.find(hname);
443 // if ( hmitr!=m_histos.end() ) hmitr->second->Fill( vpar[it] );
444 // else std::cerr << "hmmm histo " << hname << " not found" << std::endl;
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 // fill efficiencies with unmatched histos
453 // std::cout << "NULL" << std::endl;
454 m_eff_pt->FillDenom(std::fabs(pTt));
455 m_eff_z0->FillDenom(z0t);
456 m_eff_eta->FillDenom(etat);
457 m_eff_phi->FillDenom(phit);
458 m_eff_d0->FillDenom(d0t);
459 m_eff_a0->FillDenom(a0t);
460
461 // signed pT
462 if ( pTt<0 ) m_eff_ptm->FillDenom(std::fabs(pTt));
463 else m_eff_ptp->FillDenom(std::fabs(pTt));
464
465 dump = false;
466
467#if 0
468 if ( std::fabs(pTt)>4 ) {
469 dump = true;
470
471 hipt = true;
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 // m_eff_pteta->FillDenom( pTt, etat );
486 // m_eff_etapt->FillDenom( pTt, etat );
487
488 }
489
490 }
491
492 // for fake/purity histograms, loop over the test tracks
493 // and get the corresponding matched reference tracks from the
494 // reverse map in the TrackAscociator class - revmatched()
495
496 static int icount = 0;
497
498 // if ( icount%1000 ) std::cout << "chain " << name() << "\t " << m_Nreco << " tracks" << std::endl;
499 // if ( icount%1000 )
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 // std::cout << "\t\tPurityAnalysis purity " << name() << "\t" << i << " " << *testtracks[i] << " -> ";
507
508 // double pTr = std::fabs(testtracks[i]->pT());
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();
514 double a0r = testtracks[i]->a0() + sin(phir)*m_xBeamTest - cos(phir)*m_yBeamTest; // this will be changed when we know the beam spot position
515 // double a0rp = testtracks[i]->a0() - sin(phir)*m_xBeam - cos(phir)*m_yBeam; // this will be changed when we know the beam spot position
516
517 // std::cout << "d0 " << d0r << "\tphi " << phir << "\tx " << m_xBeamTest << "\ty " << m_yBeamTest << std::endl;
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 // if ( matchedref ) std::cout << *matchedref << std::endl;
529 // else std::cout << "NULL" << std::endl;
530
531#if 1
532 // raw test track distributions
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 // std::string hname = name()+"_"+varName[it]+"_rec";
536 // std::string hname = varName[it]+"_rec";
537 // std::map<std::string, TH1F*>::iterator hmitr = m_histos.find(hname);
538 // if ( hmitr!=m_histos.end() ) hmitr->second->Fill( vpar[it] );
539 // else std::cerr << "hmmm histo " << hname << " not found" << std::endl;
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 // purities
547 if ( matchedref ) {
548
549 // std::cout << *matchedref << std::endl;
550
551 m_purity_pt->Fill(std::fabs(pTr));
552 m_purity_z0->Fill(z0r);
553 m_purity_eta->Fill(etar);
554 m_purity_phi->Fill(phir);
555 m_purity_d0->Fill(d0r);
556 m_purity_a0->Fill(a0r);
557
558 // hnpix_v_sct_match->Fill( nsctr*0.5, npixr*0.5 );
559
560 }
561 else {
562 // std::cout << "NULL" << std::endl;
563 m_purity_pt->FillDenom(std::fabs(pTr));
564 m_purity_z0->FillDenom(z0r);
565 m_purity_eta->FillDenom(etar);
566 m_purity_phi->FillDenom(phir);
567 m_purity_d0->FillDenom(d0r);
568 m_purity_a0->FillDenom(a0r);
569 }
570
571 }
572
573 if ( dump && m_print ) {
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}
#define M_PI
Efficiency1D * m_eff_d0
TH1F * find(const std::string &n)
Efficiency1D * m_purity_a0
Efficiency1D * m_eff_a0
Efficiency1D * m_purity_d0
virtual const T * revmatched(S *t)
virtual const S * matched(T *t)
int lb
Definition globals.cxx:23
bool hipt
Definition globals.cxx:29
int r
Definition globals.cxx:22
double a0
Definition globals.cxx:27
int ev
Definition globals.cxx:25
std::ostream & dump(std::ostream &out, const I4MomIter iBeg, const I4MomIter iEnd)
Helper to stream out a range of I4Momentum objects.
Definition P4Dumper.h:24
str varName
end cluster ToT and charge

◆ execute() [4/5]

virtual void TrackAnalysis::execute ( const std::vector< TIDA::Track * > & tracks1,
const std::vector< TIDA::Track * > & tracks2,
TrackAssociator * matcher,
const TIDA::Event * event,
double *  )
inlinevirtual

Reimplemented from TrackAnalysis.

Definition at line 73 of file TrackAnalysis.h.

77 {
78 execute( tracks1, tracks2, matcher, event );
79 }
virtual void execute(const std::vector< TIDA::Track * > &reftracks, const std::vector< TIDA::Track * > &testtracks, TrackAssociator *matcher)
fill all the histograms - matched histograms, efficiencies etc
const TIDA::Event * event() const

◆ execute() [5/5]

virtual void TrackAnalysis::execute ( const std::vector< TIDA::Track * > & tracks1,
const std::vector< TIDA::Track * > & tracks2,
TrackAssociator * matcher,
TrigObjectMatcher *  )
inlinevirtual

Reimplemented from TrackAnalysis.

Definition at line 61 of file TrackAnalysis.h.

64 {
65 execute( tracks1, tracks2, matcher );
66 }

◆ execute_vtx()

virtual void TrackAnalysis::execute_vtx ( const std::vector< TIDA::Vertex * > & ,
const std::vector< TIDA::Vertex * > & ,
const TIDA::Event * = 0 )
inlinevirtualinherited

Reimplemented in Analysis_Tier0, and AnalysisR3_Tier0.

Definition at line 89 of file TrackAnalysis.h.

91 { }

◆ finalise()

void PurityAnalysis::finalise ( )
virtual

calculate the efficiencies and write them out with all the histograms

Implements TrackAnalysis.

Definition at line 227 of file PurityAnalysis.cxx.

227 {
228
229 std::cout << "PurityAnalysis::finalise() " << name()
230 << "\tNreco " << m_Nreco
231 << "\tNref " << m_Nref
232 << "\tNmatched " << m_Nmatched << " tracks"
233 << std::endl;
234
235 // if ( m_Nreco==0 ) return;
236
237 // TIDDirectory d( name() );
238 // d.push();
239
240 m_dir->push();
241
242 //std::map<std::string, TH1F*>::iterator hitr=m_histos.begin();
243 //std::map<std::string, TH1F*>::iterator hend=m_histos.end();
244 // for ( ; hitr!=hend ; hitr++ ) hitr->second->Write();
245
246 // std::cout << "DBG >" << m_eff_pt->Hist()->GetName() << "< DBG" << std::endl;
247
248 Efficiency1D* heff[8] = { m_eff_pt, m_eff_eta, m_eff_phi, m_eff_z0, m_eff_d0, m_eff_a0, m_eff_ptm, m_eff_ptp };
249 for ( int i=8 ; i-- ; ) { heff[i]->finalise(); } // heff[i]->Hist()->Write(); }
250
251 // std::cout << "DBG >" << m_purity_pt->Hist()->GetName() << "< DBG" << std::endl;
252
253 // m_eff_pteta->finalise(); m_eff_pteta->Write("eta_efficiency_binned_pt", "x");
254 // for ( int i=1 ; i<=m_eff_pteta->GetNbinsX() ; i++ ) {
255 // TH1F* h = m_eff_pteta->SliceX(i);
256 // }
257
258 // m_eff_etapt->finalise(); m_eff_etapt->Write("pt_efficieny_binned_eta", "y");
259 // for ( int i=1 ; i<=m_eff_etapt->GetNbinsY() ; i++ ) {
260 // TH1F* h = m_eff_etapt->SliceY(i);
261 // }
262
263 Efficiency1D* hpurity[6] = { m_purity_pt, m_purity_eta, m_purity_phi, m_purity_z0, m_purity_d0, m_purity_a0 };
264 for ( int i=6 ; i-- ; ) { hpurity[i]->finalise(); } // hpurity[i]->Hist()->Write(); }
265
266 // d.pop();
267 m_dir->pop();
268
269}
TIDDirectory * m_dir
void finalise(double scale=100)
actually calculate the efficiencies

◆ find()

TH1F * PurityAnalysis::find ( const std::string & n)
inlineprivate

Definition at line 82 of file PurityAnalysis.h.

82 {
83 std::map<std::string, TH1F*>::iterator hmitr = m_histos.find(n);
84 if ( hmitr!=m_histos.end() ) return hmitr->second;
85 else return 0;
86 }

◆ getHistograms()

const std::map< std::string, TH1 * > & TrackAnalysis::getHistograms ( ) const
inlineinherited

access the histograms

Definition at line 103 of file TrackAnalysis.h.

103{ return m_histos; }

◆ initialise()

void PurityAnalysis::initialise ( )
virtual

book all the histograms

Implements TrackAnalysis.

Definition at line 34 of file PurityAnalysis.cxx.

34 {
35
36 std::cout << "PurityAnalysis::initialise() " << name() << std::endl;
37
38 //+++ pT ranges
39 // double tmp_maxPt = 50000.;
40 // double tmp_absResPt = 0.0005;
41 // double tmp_maxPt = 50.;
42 // double tmp_absResPt = 0.5;
43
44 const int pTResBins = 100;
45
46 //+++ Eta ranges
47 double tmp_maxEta = 3.;
48 double tmp_absResEta = 0.04; // 0.0005;
49
50 //+++ Phi ranges
51 double tmp_maxPhi = 3.142;
52 double tmp_absResPhi = 0.02; // 0.0001;
53
54
55 const int etaBins = 60;
56 const int etaResBins = 300;
57
58 const int phiBins = 36;
59 const int phiResBins = 100;
60
61 const int zBins = 100;
62 const double zMax = 400;
63
64 const int zresBins = 100;
65 const double zresMax = 10;
66
67 const int d0Bins = 100;
68 const double d0Max = 10;
69
70 const int d0resBins = 100;
71 const double d0resMax = 10;
72
73 // beamspot corrected position
74
75 const int a0Bins = 100;
76 const double a0Max = 10;
77
78 const int a0resBins = 100;
79 const double a0resMax = 5;
80
81 //+++ Book histograms
82
83 // calculate a logarithmic binning in pt
84
85 const int ptnbins = 20;
86 double ptbinlims[ptnbins+1];
87 for ( int i=0 ; i<=ptnbins ; i++ ) { ptbinlims[i] = std::pow(10, 3.0*i/ptnbins+2)/1000; }
88
89
90 TDirectory* dir = gDirectory;
91
92 std::cout << "PurityAnalysis::initialize() Directory " << gDirectory->GetName() << " " << name() << std::endl;
93
94 m_dir = new TIDDirectory(name());
95 m_dir->push();
96
97 // TIDDirectory d("histos");
98 // d.push();
99
100 std::cout << "PurityAnalysis::initialize() Directory " << gDirectory->GetName() << " package directory, " << name() << std::endl;
101
102 // int Nptbins = 6;
103 // double _ptlims[7] = { 0, 500, 1000, 1500, 2000, 5000, 10000 };
104
105 // TH2F* effpt2d = new TH2F("pteta2d", "pteta", Nptbins, _ptlims, 40, -tmp_maxEta, tmp_maxEta );
106 // TH2F* effeta2d = new TH2F("etapt2d", "pteta", ptnbins, ptbinlims, 6, -tmp_maxEta, tmp_maxEta );
107
108 // eff_pteta = new Efficiency2D( effpt2d, "pteta" );
109 // eff_etapt = new Efficiency2D( effeta2d, "etapt" );
110
111 // effpt2d->SetDirectory(0);
112 // effeta2d->SetDirectory(0);
113
114 // delete effpt2d;
115 // delete effeta2d;
116
117 Efficiency1D* heff[8];
118 Efficiency1D* hpurity[6];
119
120 addHistogram( m_hchi2=new TH1F("chi2", "chi2", 100, 0, 20) );
121
122 // "reference" quantities
123 addHistogram( new TH1F( "pT", "pT", ptnbins, ptbinlims ) );
124 addHistogram( new TH1F( "eta", "eta", etaBins, -tmp_maxEta, tmp_maxEta ) );
125 addHistogram( new TH1F( "phi", "phi", phiBins, -tmp_maxPhi, tmp_maxPhi ) );
126 addHistogram( new TH1F( "z0", "z0", zBins, -zMax, zMax ) );
127 addHistogram( new TH1F( "d0", "d0", d0Bins, -d0Max, d0Max ) );
128 addHistogram( new TH1F( "a0", "a0", a0Bins, -a0Max, a0Max ) );
129
130 // efficienies and purities
131 heff[0] = new Efficiency1D( find("pT"), "pT_eff" );
132 heff[1] = new Efficiency1D( find("eta"), "eta_eff" );
133 heff[2] = new Efficiency1D( find("phi"), "phi_eff" );
134 heff[3] = new Efficiency1D( find("z0"), "z0_eff" );
135 heff[4] = new Efficiency1D( find("d0"), "d0_eff" );
136 heff[5] = new Efficiency1D( find("a0"), "a0_eff" );
137
138 heff[6] = new Efficiency1D( find("pT"), "pTm_eff" );
139 heff[7] = new Efficiency1D( find("pT"), "pTp_eff" );
140
141 m_eff_pt = heff[0];
142 m_eff_eta = heff[1];
143 m_eff_phi = heff[2];
144 m_eff_z0 = heff[3];
145 m_eff_d0 = heff[4];
146 m_eff_a0 = heff[5];
147
148 m_eff_ptm = heff[6];
149 m_eff_ptp = heff[7];
150
151 // addHistogram ( hDeltaR = new TH1F("DeltaR", "DeltaR", 100, 0, 0.1 ) );
152 addHistogram ( m_hDeltaR = new TH1F("DeltaR", "DeltaR", 100, 0, 0.2 ) );
153
154 hpurity[0] = new Efficiency1D( find("pT"), "pT_pur" );
155 hpurity[1] = new Efficiency1D( find("eta"), "eta_pur" );
156 hpurity[2] = new Efficiency1D( find("phi"), "phi_pur" );
157 hpurity[3] = new Efficiency1D( find("z0"), "z0_pur" );
158 hpurity[4] = new Efficiency1D( find("d0"), "d0_pur" );
159 hpurity[5] = new Efficiency1D( find("a0"), "a0_pur" );
160
161 m_purity_pt = hpurity[0];
162 m_purity_eta = hpurity[1];
163 m_purity_phi = hpurity[2];
164 m_purity_z0 = hpurity[3];
165 m_purity_d0 = hpurity[4];
166 m_purity_a0 = hpurity[5];
167
168 // "test" quantities
169 addHistogram( new TH1F( "pT_rec", "pT_rec", ptnbins, ptbinlims ) );
170 addHistogram( new TH1F( "eta_rec", "eta_rec", etaBins, -tmp_maxEta, tmp_maxEta ) );
171 addHistogram( new TH1F( "phi_rec", "phi_rec", phiBins, -tmp_maxPhi, tmp_maxPhi ) );
172 addHistogram( new TH1F( "z0_rec", "z0_rec", zBins, -zMax, zMax ) );
173 addHistogram( new TH1F( "d0_rec", "d0_rec", d0Bins, -d0Max, d0Max ) );
174 addHistogram( new TH1F( "a0_rec", "a0_rec", a0Bins, -a0Max, a0Max ) );
175
176 // resolutions
177 // addHistogram( new TH1F( "pT_res", "pT_res", 2*pTResBins, -2*tmp_absResPt, 2*tmp_absResPt ) );
178 addHistogram( new TH1F( "pT_res", "pT_res", 4*pTResBins, -0.1, 0.1 ) );
179 addHistogram( new TH1F( "spT_res", "spT_res", 4*pTResBins, -0.1, 0.1 ) );
180 addHistogram( new TH1F( "ipT_res", "pT_res", 4*pTResBins, -0.4, 0.4 ) );
181 addHistogram( new TH1F( "eta_res", "eta_res", etaResBins, -2*tmp_absResEta, 2*tmp_absResEta ) );
182 addHistogram( new TH1F("etai_res", "etai_res", 1000, -0.04, 0.04 ) );
183 addHistogram( new TH1F( "phi_res", "phi_res", 2*phiResBins, -2*tmp_absResPhi, 2*tmp_absResPhi ) );
184 addHistogram( new TH1F( "z0_res", "z0_res", zresBins, -zresMax, zresMax ) );
185 addHistogram( new TH1F( "d0_res", "d0_res", 4*d0resBins, -0.5*d0resMax, 0.5*d0resMax ) );
186 addHistogram( new TH1F( "a0_res", "a0_res", 4*a0resBins, -a0resMax, a0resMax ) );
187
188 std::cout << "booked" << std::endl;
189
190
191 // hit occupancies
192
193 int NHits = 40;
194 int Ntracks = 50;
195
196 addHistogram( new TH1F( "nsct", "nsct", NHits, -0.5, float(NHits-0.5) ) );
197 addHistogram( new TH1F( "nsct_rec", "nsct_rec", NHits, -0.5, float(NHits-0.5) ) );
198
199 addHistogram( new TH1F( "npix", "npix", NHits, -0.5, float(NHits-0.5) ) );
200 addHistogram( new TH1F( "npix_rec", "npix_rec", NHits, -0.5, float(NHits-0.5) ) );
201
202 addHistogram( new TH1F( "ntrt", "ntrt", NHits, -0.5, float(NHits-0.5) ) );
203 addHistogram( new TH1F( "ntrt_rec", "ntrt_rec", NHits, -0.5, float(NHits-0.5) ) );
204
205 addHistogram( new TH1F( "nstraw", "nstraw", NHits*4, -0.5, float(4*NHits-0.5) ) );
206 addHistogram( new TH1F( "nstraw_rec", "nstraw_rec", NHits*4, -0.5, float(4*NHits-0.5) ) );
207
208 addHistogram( new TH1F( "ntracks", "ntracks", Ntracks, -0.5, float(Ntracks+0.5) ) );
209 addHistogram( new TH1F( "ntracks_rec", "ntracks_rec", Ntracks, -0.5, float(Ntracks+0.5) ) );
210
211
212 m_dir->pop();
213
214 dir->cd();
215
216 // std::cout << "initialize() Directory " << gDirectory->GetName() << " on leaving" << std::endl;
217
218}
void addHistogram(TH1F *h)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)

◆ name()

const std::string & TrackAnalysis::name ( ) const
inlineinherited

return identifier

Definition at line 52 of file TrackAnalysis.h.

52{ return m_name; }
std::string m_name
identifier of the of the analysis - also used for the root directory into which the histograms are pu...

◆ roi()

const TIDARoiDescriptor * TrackAnalysis::roi ( ) const
inlineinherited

Definition at line 138 of file TrackAnalysis.h.

138{ return m_roi; }
TIDARoiDescriptor * m_roi

◆ setBeamRef() [1/2]

void TrackAnalysis::setBeamRef ( const std::vector< double > & v)
inlineinherited

Definition at line 112 of file TrackAnalysis.h.

112 {
113 if ( v.size()>0 ) m_xBeamReference = v[0];
114 if ( v.size()>1 ) m_yBeamReference = v[1];
115 if ( v.size()>2 ) m_zBeamReference = v[2];
116 }

◆ setBeamRef() [2/2]

void TrackAnalysis::setBeamRef ( double x,
double y,
double z = 0 )
inlineinherited

set the beamline positions

Definition at line 109 of file TrackAnalysis.h.

#define y
#define x
#define z

◆ setBeamTest() [1/2]

void TrackAnalysis::setBeamTest ( const std::vector< double > & v)
inlineinherited

Definition at line 118 of file TrackAnalysis.h.

118 {
119 if ( v.size()>0 ) m_xBeamTest = v[0];
120 if ( v.size()>1 ) m_yBeamTest = v[1];
121 if ( v.size()>2 ) m_zBeamTest = v[2];
122 }

◆ setBeamTest() [2/2]

void TrackAnalysis::setBeamTest ( double x,
double y,
double z = 0 )
inlineinherited

Definition at line 110 of file TrackAnalysis.h.

◆ setevent()

void TrackAnalysis::setevent ( TIDA::Event * e)
inlineinherited

Definition at line 136 of file TrackAnalysis.h.

◆ setprint()

void PurityAnalysis::setprint ( bool p)
inline

◆ setroi()

void TrackAnalysis::setroi ( TIDARoiDescriptor * r)
inlineinherited

Definition at line 139 of file TrackAnalysis.h.

139{ m_roi=r; }

◆ store()

TIDA::FeatureStore & TrackAnalysis::store ( )
inlineinherited

Definition at line 133 of file TrackAnalysis.h.

133{ return m_store; }
TIDA::FeatureStore m_store

Member Data Documentation

◆ m_dir

TIDDirectory* PurityAnalysis::m_dir = 0
private

Definition at line 89 of file PurityAnalysis.h.

◆ m_eff_a0

Efficiency1D* PurityAnalysis::m_eff_a0 = 0
private

Definition at line 101 of file PurityAnalysis.h.

◆ m_eff_d0

Efficiency1D* PurityAnalysis::m_eff_d0 = 0
private

Definition at line 100 of file PurityAnalysis.h.

◆ m_eff_eta

Efficiency1D* PurityAnalysis::m_eff_eta = 0
private

Definition at line 97 of file PurityAnalysis.h.

◆ m_eff_phi

Efficiency1D* PurityAnalysis::m_eff_phi = 0
private

Definition at line 98 of file PurityAnalysis.h.

◆ m_eff_pt

Efficiency1D* PurityAnalysis::m_eff_pt = 0
private

Definition at line 93 of file PurityAnalysis.h.

◆ m_eff_ptm

Efficiency1D* PurityAnalysis::m_eff_ptm = 0
private

Definition at line 95 of file PurityAnalysis.h.

◆ m_eff_ptp

Efficiency1D* PurityAnalysis::m_eff_ptp = 0
private

Definition at line 94 of file PurityAnalysis.h.

◆ m_eff_z0

Efficiency1D* PurityAnalysis::m_eff_z0 = 0
private

Definition at line 99 of file PurityAnalysis.h.

◆ m_event

TIDA::Event* TrackAnalysis::m_event
protectedinherited

Definition at line 164 of file TrackAnalysis.h.

◆ m_hchi2

TH1F* PurityAnalysis::m_hchi2 = 0
private

Definition at line 120 of file PurityAnalysis.h.

◆ m_hDeltaR

TH1F* PurityAnalysis::m_hDeltaR = 0
private

Definition at line 113 of file PurityAnalysis.h.

◆ m_histos

std::map<std::string, TH1F*> PurityAnalysis::m_histos
private

Definition at line 91 of file PurityAnalysis.h.

◆ m_name

std::string TrackAnalysis::m_name
protectedinherited

identifier of the of the analysis - also used for the root directory into which the histograms are put

Definition at line 145 of file TrackAnalysis.h.

◆ m_Nmatched

int PurityAnalysis::m_Nmatched
private

Definition at line 118 of file PurityAnalysis.h.

◆ m_Nreco

int PurityAnalysis::m_Nreco
private

number of reconstructed tracks

Definition at line 116 of file PurityAnalysis.h.

◆ m_Nref

int PurityAnalysis::m_Nref
private

Definition at line 117 of file PurityAnalysis.h.

◆ m_print

bool PurityAnalysis::m_print
private

flag to print out the matched tracks etc

Definition at line 123 of file PurityAnalysis.h.

◆ m_purity_a0

Efficiency1D* PurityAnalysis::m_purity_a0 = 0
private

Definition at line 108 of file PurityAnalysis.h.

◆ m_purity_d0

Efficiency1D* PurityAnalysis::m_purity_d0 = 0
private

Definition at line 107 of file PurityAnalysis.h.

◆ m_purity_eta

Efficiency1D* PurityAnalysis::m_purity_eta = 0
private

Definition at line 104 of file PurityAnalysis.h.

◆ m_purity_phi

Efficiency1D* PurityAnalysis::m_purity_phi = 0
private

Definition at line 105 of file PurityAnalysis.h.

◆ m_purity_pt

Efficiency1D* PurityAnalysis::m_purity_pt = 0
private

Definition at line 103 of file PurityAnalysis.h.

◆ m_purity_z0

Efficiency1D* PurityAnalysis::m_purity_z0 = 0
private

Definition at line 106 of file PurityAnalysis.h.

◆ m_roi

TIDARoiDescriptor* TrackAnalysis::m_roi
protectedinherited

Definition at line 165 of file TrackAnalysis.h.

◆ m_store

TIDA::FeatureStore TrackAnalysis::m_store
protectedinherited

Definition at line 162 of file TrackAnalysis.h.

◆ m_xBeamReference

double TrackAnalysis::m_xBeamReference
protectedinherited

beamline positions reference sample

Definition at line 153 of file TrackAnalysis.h.

◆ m_xBeamTest

double TrackAnalysis::m_xBeamTest
protectedinherited

test sample

Definition at line 158 of file TrackAnalysis.h.

◆ m_yBeamReference

double TrackAnalysis::m_yBeamReference
protectedinherited

Definition at line 154 of file TrackAnalysis.h.

◆ m_yBeamTest

double TrackAnalysis::m_yBeamTest
protectedinherited

Definition at line 159 of file TrackAnalysis.h.

◆ m_zBeamReference

double TrackAnalysis::m_zBeamReference
protectedinherited

Definition at line 155 of file TrackAnalysis.h.

◆ m_zBeamTest

double TrackAnalysis::m_zBeamTest
protectedinherited

Definition at line 160 of file TrackAnalysis.h.


The documentation for this class was generated from the following files: