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 ) {
121 std::vector <const Trk::Track *> & rec,
122 const std::vector <std::pair<HepMC::ConstGenParticlePtr,int> > & gen,
128 bool useTrackSummary,
129 const unsigned int * inTimeStart,
130 const unsigned int * inTimeEnd)
const
135 recoToTruthMap::const_iterator imap;
140 InDet::eta_region
Region = ETA_ALL;
142 int recoClassification = 0;
143 bool truth_missing=
false;
149 std::bitset<Trk::TrackInfo::NumberOfTrackRecoInfo> reco_info;
150 std::bitset<Trk::TrackInfo::NumberOfTrackProperties> pattern_properties;
157 recoClassification = -999;
158 int thisEventIndex = -999;
160 Author = track->info().trackFitter();
162 author_found[Author] =
true;
163 reco_info |= track->info().patternRecognition();
164 pattern_properties |= track->info().properties();
173 Eta = std::abs(para->
eta());
175 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
176 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
177 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
178 else Region = ETA_OUTSIDE;
186 TrackTruthCollection::const_iterator found;
200 found = truthMap->find(tracklink2);
201 if(!(found == truthMap->end())){
202 trtruth=found->second;
205 rttMap.insert(std::pair<HepMcParticleLink,float>(hmpl,trtruth.
probability()));
218 if (thisEventIndex==0)
226 std::unique_ptr<Trk::TrackSummary> cleanup;
229 if (useTrackSummary) {
230 if (!track->trackSummary()) {
231 cleanup = trkSummaryTool->
summary(ctx, *track);
232 summary=cleanup.get();
247 if (found == truthMap->end()) {
268 if (trprob <
m_cuts.fakeTrackCut)
272 if (thisEventIndex==0)
279 if (trprob <
m_cuts.fakeTrackCut2) {
282 if (thisEventIndex==0)
295 EHitsCounter part_type = ( recoClassification==TRACK_PRIMARY
297 : ( recoClassification==TRACK_SECONDARY
313 rio = &comprot->rioOnTrack(comprot->indexOfMaxAssignProb());
324 hits.m_counter[
kHits_rec][HIT_ALL][ETA_ALL]++;
326 hits.m_counter[part_type][HIT_ALL][
Region]++;
327 hits.m_counter[part_type][HIT_ALL][ETA_ALL]++;
331 int HitDet = HIT_UNKNOWN;
332 int HitLayer = N_HITTYPES;
333 bool part_type_for_all=
true;
334 if (idHelper->
is_trt(
id)){
337 else if (idHelper->
is_sct(
id)){
341 case 0: HitLayer = HIT_SCT1;
break;
342 case 1: HitLayer = HIT_SCT2;
break;
343 case 2: HitLayer = HIT_SCT3;
break;
344 case 3: HitLayer = HIT_SCT4;
break;
345 case 4:
case 5:
case 6:
case 7:
case 8: HitLayer = HIT_SCT5TO9;
break;
346 default: HitLayer = HIT_UNKNOWN;
break;
351 part_type_for_all=
false;
352 HitDet = HIT_PIXEL_ALL;
355 case 0: HitLayer = HIT_PIX1;
break;
356 case 1: HitLayer = HIT_PIX2;
break;
357 case 2: HitLayer = HIT_PIX3;
break;
358 default: HitLayer = HIT_UNKNOWN;
364 hits.m_counter[
kHits_rec][HitDet][ETA_ALL]++;
366 hits.m_counter[part_type][HitDet][
Region]++;
367 hits.m_counter[part_type][HitDet][ETA_ALL]++;
370 if (HitLayer<N_HITTYPES) {
372 hits.m_counter[
kHits_rec][HitLayer][ETA_ALL]++;
374 hits.m_counter[part_type][HitLayer][
Region]++;
375 hits.m_counter[part_type][HitLayer][ETA_ALL]++;
388 int classification=-999;
389 for (
auto truth = gen.begin(); truth != gen.end(); ++truth) {
391 bool inTimePileup = truth->second == 0 || (truth->second >= (int)*inTimeStart && truth->second <= (int)*inTimeEnd);
393 auto particle = truth->first;
396 Eta = std::abs(particle->momentum().pseudoRapidity());
398 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
399 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
400 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
401 else Region = ETA_OUTSIDE;
414 if(classification==TRACK_PRIMARY){
418 if(classification==TRACK_SECONDARY){
424 bool matched =
false;
428 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
429 if(rttIter != rttMap.end()){
430 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
431 if(imap->second >
m_cuts.matchTrackCut){
449 if(classification==TRACK_PRIMARY){
457 if(classification==TRACK_SECONDARY){
475 for (
auto truth = gen.begin(); truth != gen.end(); ++truth)
477 if (truth->second != 0)
482 auto particle = truth->first;
485 Eta = std::abs(particle->momentum().pseudoRapidity());
487 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
488 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
489 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
490 else Region = ETA_OUTSIDE;
501 if(classification==TRACK_PRIMARY){
505 if(classification==TRACK_SECONDARY){
511 bool matched =
false;
515 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
516 if(rttIter != rttMap.end()){
517 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
518 if(imap->second >
m_cuts.matchTrackCut){
531 if(classification==TRACK_PRIMARY){
539 if(classification==TRACK_SECONDARY){
555 m_trackSummarySum += trackSummarySum;
557 if (author_found[i]) {
563 m_recoInfo |= reco_info;
564 m_patternProperties |= pattern_properties;
572 m_trackSummarySum.reset();
583 out <<
" Printing Statistics for " <<
key();
585 out <<
"TrackCollection \"" <<
key() <<
"\" " <<
"\n" ;
588 out <<
"(TrackAuthors:";
589 std::vector<std::string> author_string;
595 m_recoInfo).dumpInfo() );
599 out <<
" " << author_string[i];
602 out <<
" )" << std::endl
603 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
608 out <<
" WARNING: TrackTruth missing for part of this TrackCollection, no efficiencies or fakerates included.!" << std::endl;
610 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection, no efficiencies or fakerates included." << std::endl;
614 out <<
" \t\t\t ................................tracks................................" << std::endl;
615 out <<
" \t\t\tn/event\tSEff.pr\tSEff.sd\tSLowP1\tSLowP2\tLowP1\tLowP2\tnoLink\tmultM\t" << std::endl;
625 out <<
"\t" <<
"tracks, n/event:" << std::endl;
626 out <<
"\t\t" <<
"total" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
627 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);
628 out <<
"\t\t" <<
"in barrel" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
629 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);
630 out <<
"\t\t" <<
"in trans." << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
631 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);
632 out <<
"\t\t" <<
"in endcap" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
633 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);
634 out <<
"\t\t" <<
"in forwa." << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
635 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);
637 out <<
" \t\t\t ....................................hits/track............................" << std::endl;
638 out <<
" \t\t\t\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
640 out <<
" in barrel ";
printRegion2(out,ETA_BARREL, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_BARREL]);
641 out <<
" in trans. ";
printRegion2(out,ETA_TRANSITION, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_TRANSITION] );
642 out <<
" in endcap ";
printRegion2(out,ETA_ENDCAP, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ENDCAP] );
643 out <<
" in forwa. ";
printRegion2(out,ETA_FORWARD, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_FORWARD] );
647 out <<
": NO EVENTS PROCESSED! " << std::endl;
651 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
655 out <<
"\t" << std::setprecision(4)
657 << std::setprecision(2);
660 out <<
"\t" <<
"n/a" ;
663 out <<
"\t" << std::setprecision(4)
665 << std::setprecision(2);
668 out <<
"\t" <<
"n/a" ;
671 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) {
672 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB_SIGNAL][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%"
673 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2_SIGNAL][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%";
676 out <<
"\t" <<
"n/a\tn/a" ;
679 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) {
680 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
681 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
682 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_NOHEPMCPARTICLELINK][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
683 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_gen][TRACK_MULTMATCH][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%";
687 out <<
"\tn/a\tn/a\tn/a";
689 out << std::endl << std::setprecision(-1);
693 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2);
694 if (denominator > 0) {
695 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
696 <<
" \t\t" << float(m_hits.m_counter[
kHits_rec][HIT_ALL ][region]/denominator) << std::setprecision(2)
697 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX1 ][region]/denominator)
698 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX2 ][region]/denominator)
699 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX3 ][region]/denominator)
700 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT1 ][region]/denominator)
701 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT2 ][region]/denominator)
702 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT3 ][region]/denominator)
703 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT4 ][region]/denominator)
704 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT5TO9][region]/denominator)
705 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_TRT_ALL][region]/denominator)
706 << std::endl << std::setprecision(-1);
709 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
714 enum track_types track_type ,
715 enum eta_region eta_region )
const
721 out << std::setiosflags(std::ios::fixed | std::ios::showpoint)
723 << std::setw(25) <<
key();
726 out << std::setw(6) << std::setprecision(2) << m_tracks.m_counter[
kTracks_rec][track_type][eta_region]/(float)
m_events;
728 out << std::setw(6) <<
"n/a";
729 for (
unsigned int stype_i=0; stype_i<
kNSummaryTypes; ++stype_i) {
730 out << std::setw(std::max(6,static_cast<int>(strlen(
s_summaryTypeName[stype_i])+1)))
733 out << std::endl << std::setprecision(-1);
741 enum track_types track_type ,
742 enum eta_region eta_region,
743 int summary_type )
const
746 long denom = m_trackSummarySum.m_counter[
kNTrackSummaryOK][track_type][eta_region][summary_type]
747 + m_trackSummarySum.m_counter[
kNTrackSummaryBAD][track_type][eta_region][summary_type];
750 out << float ( m_trackSummarySum.m_counter[
kTrackSummarySum][track_type][eta_region][summary_type]/ (
float) denom);
758 out <<
"TrackCollection \"" <<
key() <<
"\" " << std::endl;
760 out <<
"(TrackAuthors:";
761 std::vector<std::string> author_string;
767 m_recoInfo).dumpInfo() );
771 out <<
" " << author_string[i];
774 out <<
" )" << std::endl
775 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
780 out <<
" WARNING: TrackTruth missing for part of this TrackCollection --> No secondaries information printed!" << std::endl;
782 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection. (No secondaries information printed.)" << std::endl;
786 out <<
" \t\t\t\t ......................truth mached tracks statistics....................." << std::endl;
787 out <<
" \t\t\t\tn/event\teff.\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
790 out <<
" total secondaries ";
792 out <<
" secondaries in barrel ";
794 out <<
" secondaries in trans. ";
796 out <<
" secondaries in endcap ";
798 out <<
" secondaries in forwa. ";
802 else out <<
": NO EVENTS PROCESSED! " << std::endl;
806 enum eta_region region,
807 float denominator)
const {
808 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
809 <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/(float)
m_events;
810 if (m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region]) {
811 out <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/ (float) m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region];
814 out <<
"\t" <<
"n/a" ;
817 if (denominator > 0) {
818 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
819 <<
" " << float(m_hits.m_counter[
kHits_sec][HIT_ALL ][region]/denominator) << std::setprecision(2)
820 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX1 ][region]/denominator)
821 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX2 ][region]/denominator)
822 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX3 ][region]/denominator)
823 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT1 ][region]/denominator)
824 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT2 ][region]/denominator)
825 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT3 ][region]/denominator)
826 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT4 ][region]/denominator)
827 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT5TO9][region]/denominator)
828 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_TRT_ALL][region]/denominator)
829 << std::endl << std::setprecision(-1);
832 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
852 if (prob <=
m_cuts.matchTrackCut)
return partClass;
856 bool secondary=
false;
857 bool truncated=
false;
859 if (particle->production_vertex()){
862 HepGeom::Point3D<double> startVertex(particle->production_vertex()->position().x(),
863 particle->production_vertex()->position().y(),
864 particle->production_vertex()->position().z());
865 if ( std::abs(startVertex.perp()) <
m_cuts.maxRStartPrimary
866 && std::abs(startVertex.z()) <
m_cuts.maxZStartPrimary) {
867 if (particle->end_vertex() ==
nullptr) {
871 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
872 particle->end_vertex()->position().y(),
873 particle->end_vertex()->position().z());
874 if ( endVertex.perp() >
m_cuts.minREndPrimary
875 || std::abs(startVertex.z()) >
m_cuts.minZEndPrimary){
884 else if ( startVertex.perp() <
m_cuts.maxRStartSecondary && std::abs(startVertex.z()) <
m_cuts.maxZStartSecondary) {
885 if (particle->end_vertex() ==
nullptr) {
889 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
890 particle->end_vertex()->position().y(),
891 particle->end_vertex()->position().z());
893 if (endVertex.perp() >
m_cuts.minREndSecondary
894 || std::abs(endVertex.z()) >
m_cuts.minZEndSecondary) {
901 if(secondary)partClass=TRACK_SECONDARY;
902 if(primary)partClass=TRACK_PRIMARY;
903 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]