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 const HepMC::GenParticle *particle = HMPL.
cptr();
272 if (trprob <
m_cuts.fakeTrackCut)
276 if (thisEventIndex==0)
283 if (trprob <
m_cuts.fakeTrackCut2) {
286 if (thisEventIndex==0)
299 EHitsCounter part_type = ( recoClassification==TRACK_PRIMARY
301 : ( recoClassification==TRACK_SECONDARY
317 rio = &comprot->rioOnTrack(comprot->indexOfMaxAssignProb());
328 hits.m_counter[
kHits_rec][HIT_ALL][ETA_ALL]++;
330 hits.m_counter[part_type][HIT_ALL][
Region]++;
331 hits.m_counter[part_type][HIT_ALL][ETA_ALL]++;
335 int HitDet = HIT_UNKNOWN;
336 int HitLayer = N_HITTYPES;
337 bool part_type_for_all=
true;
338 if (idHelper->
is_trt(
id)){
341 else if (idHelper->
is_sct(
id)){
345 case 0: HitLayer = HIT_SCT1;
break;
346 case 1: HitLayer = HIT_SCT2;
break;
347 case 2: HitLayer = HIT_SCT3;
break;
348 case 3: HitLayer = HIT_SCT4;
break;
349 case 4:
case 5:
case 6:
case 7:
case 8: HitLayer = HIT_SCT5TO9;
break;
350 default: HitLayer = HIT_UNKNOWN;
break;
355 part_type_for_all=
false;
356 HitDet = HIT_PIXEL_ALL;
359 case 0: HitLayer = HIT_PIX1;
break;
360 case 1: HitLayer = HIT_PIX2;
break;
361 case 2: HitLayer = HIT_PIX3;
break;
362 default: HitLayer = HIT_UNKNOWN;
368 hits.m_counter[
kHits_rec][HitDet][ETA_ALL]++;
370 hits.m_counter[part_type][HitDet][
Region]++;
371 hits.m_counter[part_type][HitDet][ETA_ALL]++;
374 if (HitLayer<N_HITTYPES) {
376 hits.m_counter[
kHits_rec][HitLayer][ETA_ALL]++;
378 hits.m_counter[part_type][HitLayer][
Region]++;
379 hits.m_counter[part_type][HitLayer][ETA_ALL]++;
392 int classification=-999;
393 for (
auto truth = gen.begin(); truth != gen.end(); ++truth) {
395 bool inTimePileup = truth->second == 0 || (truth->second >= (int)*inTimeStart && truth->second <= (int)*inTimeEnd);
397 auto particle = truth->first;
400 Eta = std::abs(particle->momentum().pseudoRapidity());
402 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
403 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
404 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
405 else Region = ETA_OUTSIDE;
418 if(classification==TRACK_PRIMARY){
422 if(classification==TRACK_SECONDARY){
428 bool matched =
false;
432 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
433 if(rttIter != rttMap.end()){
434 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
435 if(imap->second >
m_cuts.matchTrackCut){
453 if(classification==TRACK_PRIMARY){
461 if(classification==TRACK_SECONDARY){
479 for (
auto truth = gen.begin(); truth != gen.end(); ++truth)
481 if (truth->second != 0)
486 auto particle = truth->first;
489 Eta = std::abs(particle->momentum().pseudoRapidity());
491 else if (Eta <
m_cuts.maxEtaTransition)
Region = ETA_TRANSITION;
492 else if (Eta <
m_cuts.maxEtaEndcap)
Region = ETA_ENDCAP;
493 else if ((Eta >
m_cuts.minEtaFORWARD) && (Eta <
m_cuts.maxEtaFORWARD))
Region = ETA_FORWARD;
494 else Region = ETA_OUTSIDE;
505 if(classification==TRACK_PRIMARY){
509 if(classification==TRACK_SECONDARY){
515 bool matched =
false;
519 recoToTruthMap::iterator rttIter=rttMap.find(hmpl2);
520 if(rttIter != rttMap.end()){
521 for(imap = rttMap.lower_bound(hmpl2); imap !=rttMap.upper_bound(hmpl2); ++imap){
522 if(imap->second >
m_cuts.matchTrackCut){
535 if(classification==TRACK_PRIMARY){
543 if(classification==TRACK_SECONDARY){
559 m_trackSummarySum += trackSummarySum;
561 if (author_found[i]) {
567 m_recoInfo |= reco_info;
568 m_patternProperties |= pattern_properties;
576 m_trackSummarySum.reset();
587 out <<
" Printing Statistics for " <<
key();
589 out <<
"TrackCollection \"" <<
key() <<
"\" " <<
"\n" ;
592 out <<
"(TrackAuthors:";
593 std::vector<std::string> author_string;
599 m_recoInfo).dumpInfo() );
603 out <<
" " << author_string[i];
606 out <<
" )" << std::endl
607 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
612 out <<
" WARNING: TrackTruth missing for part of this TrackCollection, no efficiencies or fakerates included.!" << std::endl;
614 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection, no efficiencies or fakerates included." << std::endl;
618 out <<
" \t\t\t ................................tracks................................" << std::endl;
619 out <<
" \t\t\tn/event\tSEff.pr\tSEff.sd\tSLowP1\tSLowP2\tLowP1\tLowP2\tnoLink\tmultM\t" << std::endl;
629 out <<
"\t" <<
"tracks, n/event:" << std::endl;
630 out <<
"\t\t" <<
"total" << 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_ALL]/(float)
m_events << std::endl << std::setprecision(-1);
632 out <<
"\t\t" <<
"in barrel" << 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_BARREL]/(float)
m_events << std::endl << std::setprecision(-1);
634 out <<
"\t\t" <<
"in trans." << 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_TRANSITION]/(float)
m_events << std::endl << std::setprecision(-1);
636 out <<
"\t\t" <<
"in endcap" << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
637 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);
638 out <<
"\t\t" <<
"in forwa." << std::setiosflags(std::ios::fixed | std::ios::showpoint) <<
639 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);
641 out <<
" \t\t\t ....................................hits/track............................" << std::endl;
642 out <<
" \t\t\t\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
644 out <<
" in barrel ";
printRegion2(out,ETA_BARREL, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_BARREL]);
645 out <<
" in trans. ";
printRegion2(out,ETA_TRANSITION, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_TRANSITION] );
646 out <<
" in endcap ";
printRegion2(out,ETA_ENDCAP, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_ENDCAP] );
647 out <<
" in forwa. ";
printRegion2(out,ETA_FORWARD, (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][ETA_FORWARD] );
651 out <<
": NO EVENTS PROCESSED! " << std::endl;
655 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
659 out <<
"\t" << std::setprecision(4)
661 << std::setprecision(2);
664 out <<
"\t" <<
"n/a" ;
667 out <<
"\t" << std::setprecision(4)
669 << std::setprecision(2);
672 out <<
"\t" <<
"n/a" ;
675 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) {
676 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB_SIGNAL][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%"
677 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2_SIGNAL][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL_SIGNAL][region]) <<
"%";
680 out <<
"\t" <<
"n/a\tn/a" ;
683 if (m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) {
684 out <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
685 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_LOWTRUTHPROB2][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
686 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_rec][TRACK_NOHEPMCPARTICLELINK][region]/ (float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%"
687 <<
"\t" << 100*(m_tracks.m_counter[
kTracks_gen][TRACK_MULTMATCH][region]/ (
float) m_tracks.m_counter[
kTracks_rec][TRACK_ALL][region]) <<
"%";
691 out <<
"\tn/a\tn/a\tn/a";
693 out << std::endl << std::setprecision(-1);
697 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2);
698 if (denominator > 0) {
699 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
700 <<
" \t\t" << float(m_hits.m_counter[
kHits_rec][HIT_ALL ][region]/denominator) << std::setprecision(2)
701 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX1 ][region]/denominator)
702 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX2 ][region]/denominator)
703 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_PIX3 ][region]/denominator)
704 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT1 ][region]/denominator)
705 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT2 ][region]/denominator)
706 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT3 ][region]/denominator)
707 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT4 ][region]/denominator)
708 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_SCT5TO9][region]/denominator)
709 <<
"\t" << float(m_hits.m_counter[
kHits_rec][HIT_TRT_ALL][region]/denominator)
710 << std::endl << std::setprecision(-1);
713 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
718 enum track_types track_type ,
719 enum eta_region eta_region )
const
725 out << std::setiosflags(std::ios::fixed | std::ios::showpoint)
727 << std::setw(25) <<
key();
730 out << std::setw(6) << std::setprecision(2) << m_tracks.m_counter[
kTracks_rec][track_type][eta_region]/(float)
m_events;
732 out << std::setw(6) <<
"n/a";
733 for (
unsigned int stype_i=0; stype_i<
kNSummaryTypes; ++stype_i) {
734 out << std::setw(std::max(6,static_cast<int>(strlen(
s_summaryTypeName[stype_i])+1)))
737 out << std::endl << std::setprecision(-1);
745 enum track_types track_type ,
746 enum eta_region eta_region,
747 int summary_type )
const
750 long denom = m_trackSummarySum.m_counter[
kNTrackSummaryOK][track_type][eta_region][summary_type]
751 + m_trackSummarySum.m_counter[
kNTrackSummaryBAD][track_type][eta_region][summary_type];
754 out << float ( m_trackSummarySum.m_counter[
kTrackSummarySum][track_type][eta_region][summary_type]/ (
float) denom);
762 out <<
"TrackCollection \"" <<
key() <<
"\" " << std::endl;
764 out <<
"(TrackAuthors:";
765 std::vector<std::string> author_string;
771 m_recoInfo).dumpInfo() );
775 out <<
" " << author_string[i];
778 out <<
" )" << std::endl
779 <<
"TrackTruthCollection \"" <<
Truthkey() <<
"\"" << std::endl;
784 out <<
" WARNING: TrackTruth missing for part of this TrackCollection --> No secondaries information printed!" << std::endl;
786 out <<
" INFO: Intentionally no TrackTruth for this TrackCollection. (No secondaries information printed.)" << std::endl;
790 out <<
" \t\t\t\t ......................truth mached tracks statistics....................." << std::endl;
791 out <<
" \t\t\t\tn/event\teff.\ttotal\tPIX1\tPIX2\tPIX3\tSCT1\tSCT2\tSCT3\tSCT4\tSCT5to9\tStraws" << std::endl;
794 out <<
" total secondaries ";
796 out <<
" secondaries in barrel ";
798 out <<
" secondaries in trans. ";
800 out <<
" secondaries in endcap ";
802 out <<
" secondaries in forwa. ";
806 else out <<
": NO EVENTS PROCESSED! " << std::endl;
810 enum eta_region region,
811 float denominator)
const {
812 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(7) << std::setprecision(2)
813 <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/(float)
m_events;
814 if (m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region]) {
815 out <<
"\t" << m_tracks.m_counter[
kTracks_gen][TRACK_MATCHED_SECONDARY][region]/ (float) m_tracks.m_counter[
kTracks_gen][TRACK_SECONDARY][region];
818 out <<
"\t" <<
"n/a" ;
821 if (denominator > 0) {
822 out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(4) << std::setprecision(1)
823 <<
" " << float(m_hits.m_counter[
kHits_sec][HIT_ALL ][region]/denominator) << std::setprecision(2)
824 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX1 ][region]/denominator)
825 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX2 ][region]/denominator)
826 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_PIX3 ][region]/denominator)
827 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT1 ][region]/denominator)
828 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT2 ][region]/denominator)
829 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT3 ][region]/denominator)
830 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT4 ][region]/denominator)
831 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_SCT5TO9][region]/denominator)
832 <<
"\t" << float(m_hits.m_counter[
kHits_sec][HIT_TRT_ALL][region]/denominator)
833 << std::endl << std::setprecision(-1);
836 out <<
" Unable to calculate: Denominator=0." << std::endl << std::setprecision(-1);
856 if (prob <=
m_cuts.matchTrackCut)
return partClass;
860 bool secondary=
false;
861 bool truncated=
false;
863 if (particle->production_vertex()){
866 HepGeom::Point3D<double> startVertex(particle->production_vertex()->position().x(),
867 particle->production_vertex()->position().y(),
868 particle->production_vertex()->position().z());
869 if ( std::abs(startVertex.perp()) <
m_cuts.maxRStartPrimary
870 && std::abs(startVertex.z()) <
m_cuts.maxZStartPrimary) {
871 if (particle->end_vertex() ==
nullptr) {
875 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
876 particle->end_vertex()->position().y(),
877 particle->end_vertex()->position().z());
878 if ( endVertex.perp() >
m_cuts.minREndPrimary
879 || std::abs(startVertex.z()) >
m_cuts.minZEndPrimary){
888 else if ( startVertex.perp() <
m_cuts.maxRStartSecondary && std::abs(startVertex.z()) <
m_cuts.maxZStartSecondary) {
889 if (particle->end_vertex() ==
nullptr) {
893 HepGeom::Point3D<double> endVertex(particle->end_vertex()->position().x(),
894 particle->end_vertex()->position().y(),
895 particle->end_vertex()->position().z());
897 if (endVertex.perp() >
m_cuts.minREndSecondary
898 || std::abs(endVertex.z()) >
m_cuts.minZEndSecondary) {
905 if(secondary)partClass=TRACK_SECONDARY;
906 if(primary)partClass=TRACK_PRIMARY;
907 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 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.
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.
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]