23#include "CLHEP/Geometry/Point3D.h"
42 static void extract(std::vector<const RIO_OnTrack*>& rots,
const std::vector<const MeasurementBase*>& measurements);
81 std::stringstream out;
82 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;
150 std::bitset<Trk::TrackInfo::NumberOfTrackRecoInfo> reco_info;
151 std::bitset<Trk::TrackInfo::NumberOfTrackProperties> pattern_properties;
158 recoClassification = -999;
159 int thisEventIndex = -999;
161 Author = track->info().trackFitter();
163 author_found[Author] =
true;
164 reco_info |= track->info().patternRecognition();
165 pattern_properties |= track->info().properties();
174 Eta = std::abs(para->
eta());
176 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
177 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
178 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
179 else Region = ETA_OUTSIDE;
187 TrackTruthCollection::const_iterator found;
201 found = truthMap->find(tracklink2);
202 if(!(found == truthMap->end())){
203 trtruth=found->second;
206 rttMap.insert(std::pair<HepMcParticleLink,float>(hmpl,trtruth.
probability()));
219 if (thisEventIndex==0)
227 std::unique_ptr<Trk::TrackSummary> cleanup;
230 if (useTrackSummary) {
231 if (!track->trackSummary()) {
232 cleanup = trkSummaryTool->
summary(ctx, *track);
233 summary=cleanup.get();
248 if (found == truthMap->end()) {
269 if (trprob <
m_cuts.fakeTrackCut)
273 if (thisEventIndex==0)
280 if (trprob <
m_cuts.fakeTrackCut2) {
283 if (thisEventIndex==0)
296 EHitsCounter part_type = ( recoClassification==TRACK_PRIMARY
298 : ( recoClassification==TRACK_SECONDARY
314 rio = &comprot->rioOnTrack(comprot->indexOfMaxAssignProb());
325 hits.m_counter[
kHits_rec][HIT_ALL][ETA_ALL]++;
327 hits.m_counter[part_type][HIT_ALL][
Region]++;
328 hits.m_counter[part_type][HIT_ALL][ETA_ALL]++;
332 int HitDet = HIT_UNKNOWN;
333 int HitLayer = N_HITTYPES;
334 bool part_type_for_all=
true;
335 if (idHelper->
is_trt(
id)){
338 else if (idHelper->
is_sct(
id)){
342 case 0: HitLayer = HIT_SCT1;
break;
343 case 1: HitLayer = HIT_SCT2;
break;
344 case 2: HitLayer = HIT_SCT3;
break;
345 case 3: HitLayer = HIT_SCT4;
break;
346 case 4:
case 5:
case 6:
case 7:
case 8: HitLayer = HIT_SCT5TO9;
break;
347 default: HitLayer = HIT_UNKNOWN;
break;
352 part_type_for_all=
false;
353 HitDet = HIT_PIXEL_ALL;
356 case 0: HitLayer = HIT_PIX1;
break;
357 case 1: HitLayer = HIT_PIX2;
break;
358 case 2: HitLayer = HIT_PIX3;
break;
359 default: HitLayer = HIT_UNKNOWN;
365 hits.m_counter[
kHits_rec][HitDet][ETA_ALL]++;
367 hits.m_counter[part_type][HitDet][
Region]++;
368 hits.m_counter[part_type][HitDet][ETA_ALL]++;
371 if (HitLayer<N_HITTYPES) {
373 hits.m_counter[
kHits_rec][HitLayer][ETA_ALL]++;
375 hits.m_counter[part_type][HitLayer][
Region]++;
376 hits.m_counter[part_type][HitLayer][ETA_ALL]++;
389 int classification=-999;
390 for (
auto truth = gen.begin(); truth != gen.end(); ++truth) {
392 bool inTimePileup = truth->second == 0 || (truth->second >= (int)*inTimeStart && truth->second <= (int)*inTimeEnd);
394 auto particle = truth->first;
397 Eta = std::abs(particle->momentum().pseudoRapidity());
399 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
400 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
401 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
402 else Region = ETA_OUTSIDE;
415 if(classification==TRACK_PRIMARY){
419 if(classification==TRACK_SECONDARY){
425 bool matched =
false;
429 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
430 if(rttIter != rttMap.end()){
431 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
432 if(imap->second >
m_cuts.matchTrackCut){
450 if(classification==TRACK_PRIMARY){
458 if(classification==TRACK_SECONDARY){
476 for (
auto truth = gen.begin(); truth != gen.end(); ++truth)
478 if (truth->second != 0)
483 auto particle = truth->first;
486 Eta = std::abs(particle->momentum().pseudoRapidity());
488 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
489 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
490 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
491 else Region = ETA_OUTSIDE;
502 if(classification==TRACK_PRIMARY){
506 if(classification==TRACK_SECONDARY){
512 bool matched =
false;
516 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
517 if(rttIter != rttMap.end()){
518 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
519 if(imap->second >
m_cuts.matchTrackCut){
532 if(classification==TRACK_PRIMARY){
540 if(classification==TRACK_SECONDARY){
556 m_trackSummarySum += trackSummarySum;
558 if (author_found[i]) {
564 m_recoInfo |= reco_info;
565 m_patternProperties |= pattern_properties;
573 m_trackSummarySum.reset();
584 out <<
" Printing Statistics for " <<
key();
586 out <<
"TrackCollection \"" <<
key() <<
"\" " <<
"\n" ;
589 out <<
"(TrackAuthors:";
590 std::vector<std::string> author_string;
596 m_recoInfo).dumpInfo() );
600 out <<
" " << author_string[i];
603 out <<
" )" << std::endl
604 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
609 out <<
" WARNING: TrackTruth missing for part of this TrackCollection, no efficiencies or fakerates included.!" << std::endl;
611 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection, no efficiencies or fakerates included." << std::endl;
615 out <<
" \t\t\t ................................tracks................................" << std::endl;
616 out <<
" \t\t\tn/event\tSEff.pr\tSEff.sd\tSLowP1\tSLowP2\tLowP1\tLowP2\tnoLink\tmultM\t" << std::endl;
626 out <<
"\t" <<
"tracks, n/event:" << std::endl;
627 out <<
"\t\t" <<
"total" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
628 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);
629 out <<
"\t\t" <<
"in barrel" << 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_BARREL]/(float)
m_events << std::endl << std::setprecision(-1);
631 out <<
"\t\t" <<
"in trans." << 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_TRANSITION]/(float)
m_events << std::endl << std::setprecision(-1);
633 out <<
"\t\t" <<
"in endcap" << 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_ENDCAP]/(float)
m_events << std::endl << std::setprecision(-1);
635 out <<
"\t\t" <<
"in forwa." << 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_FORWARD]/(float)
m_events << std::endl << std::setprecision(-1);
638 out <<
" \t\t\t ....................................hits/track............................" << std::endl;
639 out <<
" \t\t\t\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
641 out <<
" in barrel ";
printRegion2(out,ETA_BARREL, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_BARREL]);
642 out <<
" in trans. ";
printRegion2(out,ETA_TRANSITION, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_TRANSITION] );
643 out <<
" in endcap ";
printRegion2(out,ETA_ENDCAP, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ENDCAP] );
644 out <<
" in forwa. ";
printRegion2(out,ETA_FORWARD, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_FORWARD] );
648 out <<
": NO EVENTS PROCESSED! " << std::endl;
652 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
656 out <<
"\t" << std::setprecision(4)
658 << std::setprecision(2);
661 out <<
"\t" <<
"n/a" ;
664 out <<
"\t" << std::setprecision(4)
666 << std::setprecision(2);
669 out <<
"\t" <<
"n/a" ;
672 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) {
673 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB_SIGNAL][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%"
674 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2_SIGNAL][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%";
677 out <<
"\t" <<
"n/a\tn/a" ;
680 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) {
681 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
682 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
683 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_NOHEPMCPARTICLELINK][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
684 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_gen][TRACK_MULTMATCH][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%";
688 out <<
"\tn/a\tn/a\tn/a";
690 out << std::endl << std::setprecision(-1);
694 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2);
695 if (denominator > 0) {
696 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
697 <<
" \t\t" << float(m_hits.m_counter[
kHits_rec][HIT_ALL ][region]/denominator) << std::setprecision(2)
698 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX1 ][region]/denominator)
699 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX2 ][region]/denominator)
700 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX3 ][region]/denominator)
701 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT1 ][region]/denominator)
702 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT2 ][region]/denominator)
703 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT3 ][region]/denominator)
704 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT4 ][region]/denominator)
705 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT5TO9][region]/denominator)
706 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_TRT_ALL][region]/denominator)
707 << std::endl << std::setprecision(-1);
710 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
715 enum track_types track_type ,
716 enum eta_region eta_region )
const
722 out << std::setiosflags(std::ios::fixed | std::ios::showpoint)
724 << std::setw(25) <<
key();
727 out << std::setw(6) << std::setprecision(2) << m_tracks.m_counter[
kTracks_rec][track_type][eta_region]/(float)
m_events;
729 out << std::setw(6) <<
"n/a";
730 for (
unsigned int stype_i=0; stype_i<
kNSummaryTypes; ++stype_i) {
731 out << std::setw(std::max(6,static_cast<int>(strlen(
s_summaryTypeName[stype_i])+1)))
734 out << std::endl << std::setprecision(-1);
742 enum track_types track_type ,
743 enum eta_region eta_region,
744 int summary_type )
const
747 long denom = m_trackSummarySum.m_counter[
kNTrackSummaryOK][track_type][eta_region][summary_type]
748 + m_trackSummarySum.m_counter[
kNTrackSummaryBAD][track_type][eta_region][summary_type];
751 out << float ( m_trackSummarySum.m_counter[
kTrackSummarySum][track_type][eta_region][summary_type]/ (
float) denom);
759 out <<
"TrackCollection \"" <<
key() <<
"\" " << std::endl;
761 out <<
"(TrackAuthors:";
762 std::vector<std::string> author_string;
768 m_recoInfo).dumpInfo() );
772 out <<
" " << author_string[i];
775 out <<
" )" << std::endl
776 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
781 out <<
" WARNING: TrackTruth missing for part of this TrackCollection --> No secondaries information printed!" << std::endl;
783 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection. (No secondaries information printed.)" << std::endl;
787 out <<
" \t\t\t\t ......................truth mached tracks statistics....................." << std::endl;
788 out <<
" \t\t\t\tn/event\teff.\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
791 out <<
" total secondaries ";
793 out <<
" secondaries in barrel ";
795 out <<
" secondaries in trans. ";
797 out <<
" secondaries in endcap ";
799 out <<
" secondaries in forwa. ";
803 else out <<
": NO EVENTS PROCESSED! " << std::endl;
807 enum eta_region region,
808 float denominator)
const {
809 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
810 <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/(float)
m_events;
811 if (m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region]) {
812 out <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/ (float) m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region];
815 out <<
"\t" <<
"n/a" ;
818 if (denominator > 0) {
819 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
820 <<
" " << float(m_hits.m_counter[
kHits_sec][HIT_ALL ][region]/denominator) << std::setprecision(2)
821 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX1 ][region]/denominator)
822 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX2 ][region]/denominator)
823 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX3 ][region]/denominator)
824 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT1 ][region]/denominator)
825 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT2 ][region]/denominator)
826 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT3 ][region]/denominator)
827 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT4 ][region]/denominator)
828 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT5TO9][region]/denominator)
829 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_TRT_ALL][region]/denominator)
830 << std::endl << std::setprecision(-1);
833 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
853 if (prob <=
m_cuts.matchTrackCut)
return partClass;
857 bool secondary=
false;
858 bool truncated=
false;
860 if (particle->production_vertex()){
863 HepGeom::Point3D<double> startVertex(particle->production_vertex()->position().x(),
864 particle->production_vertex()->position().y(),
865 particle->production_vertex()->position().z());
866 if ( std::abs(startVertex.perp()) <
m_cuts.maxRStartPrimary
867 && std::abs(startVertex.z()) <
m_cuts.maxZStartPrimary) {
868 if (particle->end_vertex() ==
nullptr) {
872 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
873 particle->end_vertex()->position().y(),
874 particle->end_vertex()->position().z());
875 if ( endVertex.perp() >
m_cuts.minREndPrimary
876 || std::abs(startVertex.z()) >
m_cuts.minZEndPrimary){
885 else if ( startVertex.perp() <
m_cuts.maxRStartSecondary && std::abs(startVertex.z()) <
m_cuts.maxZStartSecondary) {
886 if (particle->end_vertex() ==
nullptr) {
890 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
891 particle->end_vertex()->position().y(),
892 particle->end_vertex()->position().z());
894 if (endVertex.perp() >
m_cuts.minREndSecondary
895 || std::abs(endVertex.z()) >
m_cuts.minZEndSecondary) {
902 if(secondary)partClass=TRACK_SECONDARY;
903 if(primary)partClass=TRACK_PRIMARY;
904 if(truncated)partClass=TRACK_TRUNCATED;
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
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 link to point to an Element (slowest).
bool setStorableObject(BaseConstReference data, bool replace=false)
Set link storable to data object pointed by data (slower).
a link optimized in size for a GenParticle in a McEventCollection
bool isValid() const
Validity check.
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.
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.
Counter4D< kNTrackSummaryCounter, N_TRACKTYPES, N_ETAREGIONS, kNSummaryTypes, int > TrackSummaryCounter
type statistics.
TrackStatHelper(const std::string &, const std::string &, bool careAboutTruth=true)
Constructor.
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
void addEvent(const EventContext &ctx, 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.
@ 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.
HepMC3::ConstGenParticlePtr 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]