23#include "CLHEP/Geometry/Point3D.h"
43 static void extract(std::vector<const RIO_OnTrack*>& rots,
const std::vector<const MeasurementBase*>& measurements);
82 std::stringstream out;
83 for (
unsigned int stype_i=0; stype_i <
kNSummaryTypes; ++stype_i ) {
120 std::vector <const Trk::Track *> & rec,
121 const std::vector <std::pair<HepMC::ConstGenParticlePtr,int> > & gen,
127 bool useTrackSummary,
128 const unsigned int * inTimeStart,
129 const unsigned int * inTimeEnd)
const
134 recoToTruthMap::const_iterator imap;
139 InDet::eta_region
Region = ETA_ALL;
141 int recoClassification = 0;
142 bool truth_missing=
false;
148 std::bitset<Trk::TrackInfo::NumberOfTrackRecoInfo> reco_info;
149 std::bitset<Trk::TrackInfo::NumberOfTrackProperties> pattern_properties;
156 recoClassification = -999;
157 int thisEventIndex = -999;
159 Author = track->info().trackFitter();
161 author_found[Author] =
true;
162 reco_info |= track->info().patternRecognition();
163 pattern_properties |= track->info().properties();
172 Eta = std::abs(para->
eta());
174 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
175 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
176 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
177 else Region = ETA_OUTSIDE;
185 TrackTruthCollection::const_iterator found;
199 found = truthMap->find(tracklink2);
200 if(!(found == truthMap->end())){
201 trtruth=found->second;
204 rttMap.insert(std::pair<HepMcParticleLink,float>(hmpl,trtruth.
probability()));
217 if (thisEventIndex==0)
225 std::unique_ptr<Trk::TrackSummary> cleanup;
228 if (useTrackSummary) {
229 if (!track->trackSummary()) {
230 cleanup = trkSummaryTool->
summary(*track);
231 summary=cleanup.get();
246 if (found == truthMap->end()) {
267 const HepMC::GenParticle *particle = HMPL.
cptr();
271 if (trprob <
m_cuts.fakeTrackCut)
275 if (thisEventIndex==0)
282 if (trprob <
m_cuts.fakeTrackCut2) {
285 if (thisEventIndex==0)
298 EHitsCounter part_type = ( recoClassification==TRACK_PRIMARY
300 : ( recoClassification==TRACK_SECONDARY
316 rio = &comprot->rioOnTrack(comprot->indexOfMaxAssignProb());
327 hits.m_counter[
kHits_rec][HIT_ALL][ETA_ALL]++;
329 hits.m_counter[part_type][HIT_ALL][
Region]++;
330 hits.m_counter[part_type][HIT_ALL][ETA_ALL]++;
334 int HitDet = HIT_UNKNOWN;
335 int HitLayer = N_HITTYPES;
336 bool part_type_for_all=
true;
337 if (idHelper->
is_trt(
id)){
340 else if (idHelper->
is_sct(
id)){
344 case 0: HitLayer = HIT_SCT1;
break;
345 case 1: HitLayer = HIT_SCT2;
break;
346 case 2: HitLayer = HIT_SCT3;
break;
347 case 3: HitLayer = HIT_SCT4;
break;
348 case 4:
case 5:
case 6:
case 7:
case 8: HitLayer = HIT_SCT5TO9;
break;
349 default: HitLayer = HIT_UNKNOWN;
break;
354 part_type_for_all=
false;
355 HitDet = HIT_PIXEL_ALL;
358 case 0: HitLayer = HIT_PIX1;
break;
359 case 1: HitLayer = HIT_PIX2;
break;
360 case 2: HitLayer = HIT_PIX3;
break;
361 default: HitLayer = HIT_UNKNOWN;
367 hits.m_counter[
kHits_rec][HitDet][ETA_ALL]++;
369 hits.m_counter[part_type][HitDet][
Region]++;
370 hits.m_counter[part_type][HitDet][ETA_ALL]++;
373 if (HitLayer<N_HITTYPES) {
375 hits.m_counter[
kHits_rec][HitLayer][ETA_ALL]++;
377 hits.m_counter[part_type][HitLayer][
Region]++;
378 hits.m_counter[part_type][HitLayer][ETA_ALL]++;
391 int classification=-999;
392 for (
auto truth = gen.begin(); truth != gen.end(); ++truth) {
394 bool inTimePileup = truth->second == 0 || (truth->second >= (int)*inTimeStart && truth->second <= (int)*inTimeEnd);
396 auto particle = truth->first;
399 Eta = std::abs(particle->momentum().pseudoRapidity());
401 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
402 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
403 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
404 else Region = ETA_OUTSIDE;
417 if(classification==TRACK_PRIMARY){
421 if(classification==TRACK_SECONDARY){
427 bool matched =
false;
431 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
432 if(rttIter != rttMap.end()){
433 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
434 if(imap->second >
m_cuts.matchTrackCut){
452 if(classification==TRACK_PRIMARY){
460 if(classification==TRACK_SECONDARY){
478 for (
auto truth = gen.begin(); truth != gen.end(); ++truth)
480 if (truth->second != 0)
485 auto particle = truth->first;
488 Eta = std::abs(particle->momentum().pseudoRapidity());
490 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
491 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
492 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
493 else Region = ETA_OUTSIDE;
504 if(classification==TRACK_PRIMARY){
508 if(classification==TRACK_SECONDARY){
514 bool matched =
false;
518 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
519 if(rttIter != rttMap.end()){
520 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
521 if(imap->second >
m_cuts.matchTrackCut){
534 if(classification==TRACK_PRIMARY){
542 if(classification==TRACK_SECONDARY){
558 m_trackSummarySum += trackSummarySum;
560 if (author_found[i]) {
566 m_recoInfo |= reco_info;
567 m_patternProperties |= pattern_properties;
575 m_trackSummarySum.reset();
586 out <<
" Printing Statistics for " <<
key();
588 out <<
"TrackCollection \"" <<
key() <<
"\" " <<
"\n" ;
591 out <<
"(TrackAuthors:";
592 std::vector<std::string> author_string;
598 m_recoInfo).dumpInfo() );
602 out <<
" " << author_string[i];
605 out <<
" )" << std::endl
606 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
611 out <<
" WARNING: TrackTruth missing for part of this TrackCollection, no efficiencies or fakerates included.!" << std::endl;
613 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection, no efficiencies or fakerates included." << std::endl;
617 out <<
" \t\t\t ................................tracks................................" << std::endl;
618 out <<
" \t\t\tn/event\tSEff.pr\tSEff.sd\tSLowP1\tSLowP2\tLowP1\tLowP2\tnoLink\tmultM\t" << std::endl;
628 out <<
"\t" <<
"tracks, n/event:" << std::endl;
629 out <<
"\t\t" <<
"total" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
630 std::setw(7) << std::setprecision(2) <<
"\t" << m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ALL]/(float)
m_events << std::endl << std::setprecision(-1);
631 out <<
"\t\t" <<
"in barrel" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
632 std::setw(7) << std::setprecision(2) <<
"\t" << m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_BARREL]/(float)
m_events << std::endl << std::setprecision(-1);
633 out <<
"\t\t" <<
"in trans." << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
634 std::setw(7) << std::setprecision(2) <<
"\t" << m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_TRANSITION]/(float)
m_events << std::endl << std::setprecision(-1);
635 out <<
"\t\t" <<
"in endcap" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
636 std::setw(7) << std::setprecision(2) <<
"\t" << m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ENDCAP]/(float)
m_events << std::endl << std::setprecision(-1);
637 out <<
"\t\t" <<
"in forwa." << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
638 std::setw(7) << std::setprecision(2) <<
"\t" << m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_FORWARD]/(float)
m_events << std::endl << std::setprecision(-1);
640 out <<
" \t\t\t ....................................hits/track............................" << std::endl;
641 out <<
" \t\t\t\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
643 out <<
" in barrel ";
printRegion2(out,ETA_BARREL, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_BARREL]);
644 out <<
" in trans. ";
printRegion2(out,ETA_TRANSITION, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_TRANSITION] );
645 out <<
" in endcap ";
printRegion2(out,ETA_ENDCAP, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ENDCAP] );
646 out <<
" in forwa. ";
printRegion2(out,ETA_FORWARD, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_FORWARD] );
650 out <<
": NO EVENTS PROCESSED! " << std::endl;
654 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
658 out <<
"\t" << std::setprecision(4)
660 << std::setprecision(2);
663 out <<
"\t" <<
"n/a" ;
666 out <<
"\t" << std::setprecision(4)
668 << std::setprecision(2);
671 out <<
"\t" <<
"n/a" ;
674 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) {
675 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB_SIGNAL][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%"
676 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2_SIGNAL][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%";
679 out <<
"\t" <<
"n/a\tn/a" ;
682 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) {
683 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
684 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
685 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_NOHEPMCPARTICLELINK][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
686 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_gen][TRACK_MULTMATCH][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%";
690 out <<
"\tn/a\tn/a\tn/a";
692 out << std::endl << std::setprecision(-1);
696 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2);
697 if (denominator > 0) {
698 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
699 <<
" \t\t" << float(m_hits.m_counter[
kHits_rec][HIT_ALL ][region]/denominator) << std::setprecision(2)
700 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX1 ][region]/denominator)
701 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX2 ][region]/denominator)
702 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX3 ][region]/denominator)
703 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT1 ][region]/denominator)
704 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT2 ][region]/denominator)
705 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT3 ][region]/denominator)
706 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT4 ][region]/denominator)
707 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT5TO9][region]/denominator)
708 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_TRT_ALL][region]/denominator)
709 << std::endl << std::setprecision(-1);
712 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
717 enum track_types track_type ,
718 enum eta_region eta_region )
const
724 out << std::setiosflags(std::ios::fixed | std::ios::showpoint)
726 << std::setw(25) <<
key();
729 out << std::setw(6) << std::setprecision(2) << m_tracks.m_counter[
kTracks_rec][track_type][eta_region]/(float)
m_events;
731 out << std::setw(6) <<
"n/a";
732 for (
unsigned int stype_i=0; stype_i<
kNSummaryTypes; ++stype_i) {
733 out << std::setw(std::max(6,static_cast<int>(strlen(
s_summaryTypeName[stype_i])+1)))
736 out << std::endl << std::setprecision(-1);
744 enum track_types track_type ,
745 enum eta_region eta_region,
746 int summary_type )
const
749 long denom = m_trackSummarySum.m_counter[
kNTrackSummaryOK][track_type][eta_region][summary_type]
750 + m_trackSummarySum.m_counter[
kNTrackSummaryBAD][track_type][eta_region][summary_type];
753 out << float ( m_trackSummarySum.m_counter[
kTrackSummarySum][track_type][eta_region][summary_type]/ (
float) denom);
761 out <<
"TrackCollection \"" <<
key() <<
"\" " << std::endl;
763 out <<
"(TrackAuthors:";
764 std::vector<std::string> author_string;
770 m_recoInfo).dumpInfo() );
774 out <<
" " << author_string[i];
777 out <<
" )" << std::endl
778 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
783 out <<
" WARNING: TrackTruth missing for part of this TrackCollection --> No secondaries information printed!" << std::endl;
785 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection. (No secondaries information printed.)" << std::endl;
789 out <<
" \t\t\t\t ......................truth mached tracks statistics....................." << std::endl;
790 out <<
" \t\t\t\tn/event\teff.\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
793 out <<
" total secondaries ";
795 out <<
" secondaries in barrel ";
797 out <<
" secondaries in trans. ";
799 out <<
" secondaries in endcap ";
801 out <<
" secondaries in forwa. ";
805 else out <<
": NO EVENTS PROCESSED! " << std::endl;
809 enum eta_region region,
810 float denominator)
const {
811 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
812 <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/(float)
m_events;
813 if (m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region]) {
814 out <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/ (float) m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region];
817 out <<
"\t" <<
"n/a" ;
820 if (denominator > 0) {
821 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
822 <<
" " << float(m_hits.m_counter[
kHits_sec][HIT_ALL ][region]/denominator) << std::setprecision(2)
823 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX1 ][region]/denominator)
824 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX2 ][region]/denominator)
825 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX3 ][region]/denominator)
826 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT1 ][region]/denominator)
827 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT2 ][region]/denominator)
828 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT3 ][region]/denominator)
829 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT4 ][region]/denominator)
830 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT5TO9][region]/denominator)
831 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_TRT_ALL][region]/denominator)
832 << std::endl << std::setprecision(-1);
835 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
855 if (prob <=
m_cuts.matchTrackCut)
return partClass;
859 bool secondary=
false;
860 bool truncated=
false;
862 if (particle->production_vertex()){
865 HepGeom::Point3D<double> startVertex(particle->production_vertex()->position().x(),
866 particle->production_vertex()->position().y(),
867 particle->production_vertex()->position().z());
868 if ( std::abs(startVertex.perp()) <
m_cuts.maxRStartPrimary
869 && std::abs(startVertex.z()) <
m_cuts.maxZStartPrimary) {
870 if (particle->end_vertex() ==
nullptr) {
874 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
875 particle->end_vertex()->position().y(),
876 particle->end_vertex()->position().z());
877 if ( endVertex.perp() >
m_cuts.minREndPrimary
878 || std::abs(startVertex.z()) >
m_cuts.minZEndPrimary){
887 else if ( startVertex.perp() <
m_cuts.maxRStartSecondary && std::abs(startVertex.z()) <
m_cuts.maxZStartSecondary) {
888 if (particle->end_vertex() ==
nullptr) {
892 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
893 particle->end_vertex()->position().y(),
894 particle->end_vertex()->position().z());
896 if (endVertex.perp() >
m_cuts.minREndSecondary
897 || std::abs(endVertex.z()) >
m_cuts.minZEndSecondary) {
904 if(secondary)partClass=TRACK_SECONDARY;
905 if(primary)partClass=TRACK_PRIMARY;
906 if(truncated)partClass=TRACK_TRUNCATED;
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
static const std::string track_types_string[InDet::N_TRACKTYPES]
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
bool is_sct(Identifier id) const
bool is_pixel(Identifier id) const
bool is_trt(Identifier id) const
ElementLink implementation for ROOT usage.
bool setElement(ElementType element)
Set to point to an element.
bool setStorableObject(BaseConstReference data, bool replace=false, IProxyDict *sg=0)
Set link to point to a new container (storable).
a link optimized in size for a GenParticle in a McEventCollection
bool isValid() const
Validity check.
HepMC::ConstGenParticlePtr cptr() const
Dereference.
HepMC::ConstGenParticlePtr scptr() const
Dereference/smart pointer.
index_type eventIndex() const
Return the event number of the referenced GenEvent.
bool printTrackSummaryRegion(MsgStream &out, enum track_types, enum eta_region) const
Sets up detailed statistics part of table, calls printTrackSummaryRegion.
Counter4D< kNTrackSummaryCounter, N_TRACKTYPES, N_ETAREGIONS, kNSummaryTypes, int > TrackSummaryCounter
type statistics.
bool PassTrackCuts(const Trk::TrackParameters *para) const
defines 'good' reco tracks
void printRegionSecondary(MsgStream &out, enum eta_region, float denominator) const
Prints ntracks per event,efficiencies,fake rates, and general hit information for given eta region.
void printRegion1(MsgStream &out, enum eta_region) const
Prints ntracks per event,efficiencies,fake rates, and general hit information for given eta region.
std::atomic< bool > m_author_found[Trk::TrackInfo::NumberOfTrackFitters]
Number of tracking authors found.
TrackStatHelper(const std::string &, const std::string &, bool careAboutTruth=true)
Constructor.
void addEvent(const TrackCollection *, std::vector< const Trk::Track * > &, const std::vector< std::pair< HepMC::ConstGenParticlePtr, int > > &, const TrackTruthCollection *, const AtlasDetectorID *const, const PixelID *, const SCT_ID *, const Trk::IExtendedTrackSummaryTool *, bool, const unsigned int *, const unsigned int *) const
Adds hit, track and matching information for each event.
void printSecondary(MsgStream &out) const
Prints all of the statistics information, calls printRegion, printTrackSummaryRegion,...
std::string m_TrackTruthCollectionKey
StoreGate Track Truth Collection Key.
std::string m_TrackCollectionKey
StoreGate Track Collection Key.
void printTrackSummaryAverage(MsgStream &out, enum track_types, enum eta_region, int summary_type) const
Prints information from TrackSummaryTool.
static std::string getSummaryTypeHeader()
static const char *const s_summaryTypeName[kNSummaryTypes]
table column labels for summary
std::multimap< HepMcParticleLink, float > recoToTruthMap
map containing reco track and matched truth track barcode
const std::string & Truthkey() const
Returns Truth TrackCollection Key.
Counter< kNTracksCounter, N_TRACKTYPES, N_ETAREGIONS, int > TracksCounter
void print(MsgStream &out) const
Prints all of the statistics information, calls printRegion, printTrackSummaryRegion,...
@ kTracks_rec
number of reconstructed tracks for a given type and eta region
@ kTracks_gen
number of generated tracks for a given type and eta region, looping over genevents to include possibl...
@ kTracks_gen_signal
number of generated tracks for a given type and eta region, just from first genevent
static const Trk::SummaryType s_summaryTypes[kNSummaryTypes]
summary types for which statistics are gathered
void reset()
Resets the track collection information, called in the constructor.
void setSummaryStat(track_types track_i, eta_region region_i, const Trk::TrackSummary *summary, TrackSummaryCounter &trackSummarySum) const
@ kNTrackSummaryBAD
Number of tracks with track summary bad for given type,eta,summary type.
@ kNTrackSummaryOK
Number of tracks with track summary OK for given type,eta,summary type.
@ kTrackSummarySum
Track Summary Values for each track type, region and summary type.
const std::string & key() const
Returns TrackCollection Key.
@ kHits_sec
number of hits from secondary tracks for a given type and eta region
@ kHits_rec
number of reconstructed hits for a given type and eta region
@ kHits_pri
number of hits from primary tracks for a given type and eta region
int ClassifyParticle(const HepMC::ConstGenParticlePtr &particle, const double prob) const
classifies gen particle as primary, secondary or truncated
Counter< kNHitsCounter, N_HITTYPES, N_ETAREGIONS, int > HitsCounter
std::atomic< long > m_events
Number of events.
void printRegion2(MsgStream &out, enum eta_region, float denominator) const
std::atomic< bool > m_truthMissing
Flag for if track truth is missing.
void SetCuts(const struct cuts &)
Sets the cuts such as the eta regions (barrel, transition,endcap) and the hit fraction fake cuts and ...
This is an Identifier helper class for the Pixel subdetector.
int layer_disk(const Identifier &id) const
This is an Identifier helper class for the SCT subdetector.
int layer_disk(const Identifier &id) const
MC particle associated with a reco track + the quality of match.
float probability() const
const HepMcParticleLink & particleLink() const
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
This class is the pure abstract base class for all fittable tracking measurements.
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
double eta() const
Access method for pseudorapidity - from momentum.
double pT() const
Access method for transverse momentum.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Identifier identify() const
return the identifier -extends MeasurementBase
Contains information about the 'fitter' of this track.
TrackFitter
enums to identify who created this track and what propertis does it have.
@ NumberOfTrackFitters
maximum number of enums
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
A summary of the information contained by a track.
const GenParticle * ConstGenParticlePtr
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersBase< TrackParametersDim, Charged > TrackParameters
SummaryType
enumerates the different types of information stored in Summary.
@ numberOfSCTHits
number of SCT holes
@ numberOfGangedPixels
number of Ganged Pixels flagged as fakes
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfTRTHighThresholdOutliers
number of dead TRT straws crossed
@ numberOfTRTOutliers
number of TRT holes
@ numberOfTRTHits
number of TRT outliers
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
@ numberOfOutliersOnTrack
100 times the standard deviation of the chi2 from the surfaces
T_Int m_counter[N_Categories][N_Types][N_Regions]