29 auto props = this->getProperties();
30 for( Gaudi::Details::PropertyBase* prop : props ) {
31 if (prop->ownerTypeName()==this->type()) {
32 ATH_MSG_DEBUG(
"Property:\t" << prop->name() <<
"\t : \t" << prop->toString());
40 return StatusCode::SUCCESS;
61 (
";" +
m_binnedhits->getBinTool().binDesc()->parNames(i) +
";").c_str(), 200,
68 "RZ_allhits",
"; Z [mm] ; R [mm] ", 500, -2000, 2000, 500, 0, 500));
71 "phiResidual",
"phi residual [mm]", 1000, -10, 10));
73 "etaResidual",
"eta residual [mm]", 1000, -10, 10));
76 "phiTrueBinShift",
"phi TrueBinShift [mm]", 1000, -10, 10));
78 "etaTrueBinShift",
"eta TrueBinShift [mm]", 1000, -10, 10));
85 "; Hits per bin in step", 1000, 0, 1000));
93 ";#Hit Layers per Bin", nLyrs + 1, 0, nLyrs + 1));
97 "; Layer ; Hits ", nLyrs, 0, nLyrs, 20, 0,
111 "; Layer; Hits in Bin Passing Threshold",
112 nLyrs, 0, nLyrs, 20, 0, 20));
134 "PairSetMatchPhi",
";PairSet Match Phi [mm]", 500,
138 "PairSetMatchEta",
";PairSet Match Eta [mm]", 500,
150 ";Phi Curvature ", 5000,
155 ";Eta Curvature ", 5000,
160 ";Delta Phi Curvature ", 5000,
165 ";Delta Eta Curvature ", 500,
170 ";Phi Out Extrap Curved", 2000, -1.0*
m_phiScale,
174 ";Phi In Extrap Curved ", 2000, -1.0*
m_phiScale,
177 ";PairSet Match Phi vs dRin [mm]", 100, 0, 100, 500,
180 ";PairSet Match Eta vs dRin [mm]", 100, 0, 100, 500,
189 return StatusCode::SUCCESS;
209 return StatusCode::SUCCESS;
239 std::vector<FPGATrackSimGenScanMonitoring::eventDispSet *> allsets(
245 for (
auto&
set : allsets) {
249 return StatusCode::SUCCESS;
261 for (
auto& hit :
data.hits) {
270 std::vector<FPGATrackSimBinUtil::StoredHit> sorted_hits =
data.hits;
271 std::sort(sorted_hits.begin(), sorted_hits.end(),
272 [](
const auto &hit1,
const auto &hit2) {
273 return hit1.rzrad() < hit2.rzrad();
279 for (
auto &hit : sorted_hits) {
280 m_tree_r.push_back(hit.hitptr->getR());
281 m_tree_z.push_back(hit.hitptr->getZ());
282 m_tree_id.push_back(hit.hitptr->getIdentifier());
283 m_tree_hash.push_back(hit.hitptr->getIdentifierHash());
297 const std::vector<std::vector<const FPGATrackSimBinUtil::StoredHit *> > & hitsByLayer)
299 for (
unsigned lyr = 0; lyr <
m_binnedhits->getNLayers(); lyr++)
331 bool passedPairFilter) {
334 m_pairs->Fill(pairs.pairList.size());
337 if (passedPairFilter) {
346 << filteredpairs.
lyrCnt() <<
" "
347 << std::bitset<16>(filteredpairs.
hitLayers));
354 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits)
365 for (
unsigned lyr = 0; lyr <
m_binnedhits->getNLayers(); lyr++) {
366 unsigned cnt =
bin.data().hitsInLyr(lyr);
375 std::vector<FPGATrackSimTruthTrack>
const * truthtracks,
bool isSingleParticle)
378 <<
" size = " << (truthtracks ? truthtracks->size() : 0));
406 <<
" ?= " << recovered <<
" closure:"
435 if (!step->validBinsFull()[
m_truthbin[step->stepNum()]]) {
436 ATH_MSG_INFO(
"Truth Bin not valid! Step " << step->stepName() <<
" "
439 std::vector<FPGATrackSimBinUtil::IdxSet> idxsets =
441 std::vector<unsigned>({0, 1, 2, 3, 4}),
453 std::vector<const FPGATrackSimBinUtil::StoredHit *>
const *lastlyr,
454 std::vector<const FPGATrackSimBinUtil::StoredHit *>
const *lastlastlyr) {
456 auto size_if_nonzero_ptr =
457 [](std::vector<const FPGATrackSimBinUtil::StoredHit *>
const *ptr) {
459 return int(ptr->size());
466 size_if_nonzero_ptr(lastlastlyr));
473 int lyr =
pair.first->hitptr->getLayer();
495 unsigned minlyr = std::min(lastpair.first->layer, lastpair.second->layer);
496 minlyr = std::min(minlyr,
pair.first->layer);
497 minlyr = std::min(minlyr,
pair.second->layer);
500 ((1 << lastpair.first->layer) | (1 << lastpair.second->layer) |
501 (1 <<
pair.first->layer) | (1 <<
pair.second->layer));
502 hitbits = hitbits >> minlyr;
504 int hitlyrs = std::popcount(hitbits);
506 assert(hitbits & 0x1);
512 }
else if (hitlyrs == 3) {
513 if (hitbits == 0b111)
515 if ((lastpair.first->layer ==
pair.second->layer) ||
516 (
pair.first->layer == lastpair.second->layer)) {
521 }
else if ((hitbits == 0b1101) || (hitbits == 0b1011))
531 <<
" " << lastpair.second->layer <<
" "
532 <<
pair.first->layer <<
" " <<
pair.second->layer <<
" : "
533 << minlyr <<
" " << std::bitset<16>(hitbits));
539 std::vector<TH1D *> & histset,
double val,
545 histset[0]->Fill(val);
546 histset[ppcat]->Fill(val);
554 const std::vector<FPGATrackSimGenScanTool::HitPairSet> &pairsets,
558 for (
const auto &pairset : pairsets) {
570 const std::vector<FPGATrackSimGenScanTool::IntermediateState> &states,
571 unsigned allowed_misses) {
573 for (
unsigned i = 0; i < states.size(); i++) {
576 for (
auto &
pair : states[i].pairsets) {
579 unsigned totalInput =
580 states[i].pairsets.size() + states[i].unpairedHits.size();
589 const std::string &name) {
590 TGraph *retv =
new TGraph();
591 retv->SetName(name.c_str());
596 TGraph * g,
double x,
double y) {
597 g->SetPoint(g->GetN(),
x,
y);
611 for (
auto &hit : hits) {
622 std::vector<const FPGATrackSimBinUtil::StoredHit *> ptrvec;
623 for (
auto &hit : hits) {
624 ptrvec.push_back(&hit);
643 for (
auto &hit : hits) {
644 AddPoint(
m_rZ.back(), hit->hitptr->getZ(), hit->hitptr->getR());
645 AddPoint(
m_xY.back(), hit->hitptr->getX(), hit->hitptr->getY());
659 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Binning Utilities for GenScanTool.
Binning Classes for GenScanTool.
This is the monitoring for the FPGATrackSimGenScanTool.
char data[hepevt_bytes_allocation_ATLAS]
eventDispSet m_allHitsGraph
void fillBinLevelOutput(const FPGATrackSimBinUtil::IdxSet &idx, const FPGATrackSimBinnedHits::BinEntry &data)
unsigned pairpairCategory(const FPGATrackSimGenScanTool::HitPair &pair, const FPGATrackSimGenScanTool::HitPair &lastpair) const
std::vector< FPGATrackSimBinUtil::IdxSet > m_truthbin
void fillPairingHits(std::vector< const FPGATrackSimBinUtil::StoredHit * > const *lastlyr, std::vector< const FPGATrackSimBinUtil::StoredHit * > const *lastlastlyr)
std::vector< int > m_tree_phimod
StatusCode registerGraphs()
FPGATrackSimBinUtil::ParSet m_truthparset
TH1D * m_truthpars_hists[5]
StatusCode makeAndRegHist(HistType *&ptr, const HistDef &... histargs)
eventDispSet m_lostPairSetFilterGraph
std::vector< TH2D * > m_rZ_allhits
std::vector< TH1D * > m_etaResidual
std::vector< unsigned > m_hitsCntByLayer
FPGATrackSimGenScanMonitoring(const std::string &, const std::string &, const IInterface *)
const FPGATrackSimBinnedHits * m_binnedhits
void parseTruthInfo(std::vector< FPGATrackSimTruthTrack > const *truthtracks, bool isSingleParticle)
void fillPairFilterCuts(const FPGATrackSimGenScanTool::HitPair &pair, double r_in, double r_out)
void fillHitsByLayer(const std::vector< std::vector< const FPGATrackSimBinUtil::StoredHit * > > &hitsByLayer)
std::vector< TH1D * > m_deltaPhiByLyr
void fillBuildGroupsWithPairs(const std::vector< FPGATrackSimGenScanTool::IntermediateState > &states, unsigned allowed_misses)
void fillHitLevelInput(const FPGATrackSimHit *hit)
eventDispSet m_lostPairFilterGraph
std::vector< TH1D * > m_etaCurvature
std::vector< int > m_tree_layer
TH1D * m_phiInExtrapCurveLimit
std::vector< int > m_tree_side
std::vector< TH1D * > m_pairSetMatchPhi
Gaudi::Property< double > m_etaScale
void pairSetFilterCheck(const FPGATrackSimGenScanTool::HitPairSet &filteredpairs, const std::vector< FPGATrackSimGenScanTool::HitPairSet > &pairsets, unsigned threshold)
eventDispSet m_passPairFilterGraph
std::vector< TH1D * > m_phiInExtrapCurved
TH2D * m_hitsPerLayer_bin
TH1D * m_phiOutExtrapCurveLimit
std::vector< TH1D * > m_deltaDeltaPhi
std::vector< float > m_tree_r
void setBinPlotsActive(const FPGATrackSimBinUtil::IdxSet &idx)
std::vector< TH1D * > m_deltaEtaCurvature
std::vector< int > m_tree_detzone
virtual StatusCode initialize() override
std::vector< TH1D * > m_deltaDeltaEta
static const std::vector< std::string > m_twoPairClasses
std::vector< TH1D * > m_deltaEtaByLyr
FPGATrackSimTrackPars m_truthpars
std::vector< TH1D * > m_hitsPerStepBin
void resetDataFlowCounters()
StatusCode makeAndRegHistVector(std::vector< HistType * > &vec, unsigned len, const std::vector< std::string > *namevec, const char *namebase, const HistDef &... histargs)
std::vector< TH1D * > m_phiCurvature
std::vector< TH1D * > m_phiTrueBinShift
void fillBinningSummary(const std::vector< std::shared_ptr< const FPGATrackSimHit > > &hits)
std::vector< TH1D * > m_pairSetMatchEta
std::vector< FPGATrackSimTruthTrack > const * m_truthtracks
Gaudi::Property< double > m_phiScale
Gaudi::Property< std::string > m_dir
std::vector< int > m_tree_dettype
std::vector< int > m_tree_id
std::vector< TH1D * > m_deltaPhiCurvature
std::vector< int > m_tree_hash
std::vector< TH1D * > m_phiOutExtrapCurved
std::vector< int > m_tree_etamod
std::vector< TH1D * > m_etaTrueBinShift
Gaudi::Property< double > m_drScale
std::vector< unsigned > m_tree_bin
std::vector< TH1D * > m_phiResidual
eventDispSet m_passPairSetFilterGraph
std::vector< float > m_tree_z
StatusCode registerHistograms(const FPGATrackSimBinnedHits *binnedhits)
void pairFilterCheck(const FPGATrackSimGenScanTool::HitPairSet &pairs, const FPGATrackSimGenScanTool::HitPairSet &filteredpairs, bool passedPairFilter)
ServiceHandle< ITHistSvc > m_tHistSvc
TTree * m_bin_module_tree
void allocateDataFlowCounters()
void fillPairSetFilterCut(std::vector< TH1D * > &histset, double val, const FPGATrackSimGenScanTool::HitPair &pair, const FPGATrackSimGenScanTool::HitPair &lastpair, bool nminus1)
virtual double phiResidual(const FPGATrackSimBinUtil::ParSet &parset, FPGATrackSimHit const *hit) const =0
virtual double etaResidual(const FPGATrackSimBinUtil::ParSet &parset, FPGATrackSimHit const *hit) const =0
virtual const std::string & parNames(unsigned i) const =0
virtual const FPGATrackSimTrackPars parSetToTrackPars(const FPGATrackSimBinUtil::ParSet &parset) const =0
virtual const FPGATrackSimBinUtil::ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const =0
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
std::vector< IdxSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
StatusCode registerGraphs(FPGATrackSimGenScanMonitoring *parent)
std::vector< TGraph * > m_rPhi
std::vector< TGraph * > m_xY
std::vector< TGraph * > m_rZ
std::vector< TGraph * > m_rEta
void addEvent(const std::vector< std::shared_ptr< const FPGATrackSimHit > > &hits)
void AddPoint(TGraph *g, double x, double y)
TGraph * initGraph(const std::string &name)