26 auto props = this->getProperties();
27 for( Gaudi::Details::PropertyBase* prop : props ) {
28 if (prop->ownerTypeName()==this->type()) {
29 ATH_MSG_DEBUG(
"Property:\t" << prop->name() <<
"\t : \t" << prop->toString());
37 return StatusCode::SUCCESS;
53 double drScale = (rout-rin) / nLayers;
54 ATH_MSG_INFO(
"Hist scales phi: " << phiScale <<
" eta: " << etaScale <<
" dr:" << drScale);
69 "RZ_allhits",
"; Z [mm] ; R [mm] ", 500, -2000, 2000, 500, 0, 500));
72 "phiResidual",
"phi residual [mm]", 1000, -10, 10));
74 "etaResidual",
"eta residual [mm]", 1000, -10, 10));
77 "phiTrueBinShift",
"phi TrueBinShift [mm]", 1000, -10, 10));
79 "etaTrueBinShift",
"eta TrueBinShift [mm]", 1000, -10, 10));
90 400, -phiScale, phiScale, 100, 0, 400));
92 400, -etaScale, etaScale, 100, 0, 400));
116 ";Phi Out Extrap w/ Curve Limit", 2000, -phiScale, phiScale));
118 ";Phi In Extrap w/ Curve Limit", 2000, -phiScale, phiScale));
131 "PairSetMatchPhi",
";PairSet Match Phi [mm]", 500,
132 -1*phiScale / drScale, phiScale / drScale));
135 "PairSetMatchEta",
";PairSet Match Eta [mm]", 500,
136 -1*etaScale / drScale, etaScale / drScale));
139 "DeltaDeltaPhi",
";DeltaDelta Phi [mm]", 500, -1.0*phiScale / drScale,
140 phiScale / drScale));
143 "DeltaDeltaEta",
";DeltaDelta Eta [mm]", 500, -1.0 * etaScale / drScale,
144 1.0 * etaScale / drScale));
147 ";Phi Curvature ", 500,
148 -0.1 * phiScale / drScale / drScale,
149 0.1 * phiScale / drScale / drScale));
152 ";Eta Curvature ", 500,
153 -0.1 * etaScale / drScale / drScale,
154 0.1 * etaScale / drScale / drScale));
157 ";Delta Phi Curvature ", 500,
158 -0.1 * phiScale / drScale / drScale,
159 0.1 * phiScale / drScale / drScale));
162 ";Delta Eta Curvature ", 500,
163 -0.1 * etaScale / drScale / drScale,
164 0.1 * etaScale / drScale / drScale));
167 ";Phi Out Extrap Curved", 2000, -phiScale,
171 ";Phi In Extrap Curved ", 2000, -phiScale,
174 ";PairSet Match Phi vs dRin [mm]", 100, 0, 100, 500,
175 -100.0 * phiScale, 100.0 * phiScale));
177 ";PairSet Match Eta vs dRin [mm]", 100, 0, 100, 500,
178 -100.0 * etaScale, 100.0 * etaScale));
186 return StatusCode::SUCCESS;
206 return StatusCode::SUCCESS;
252 std::vector<FPGATrackSimGenScanMonitoring::eventDispSet *> allsets(
258 for (
auto&
set : allsets) {
262 return StatusCode::SUCCESS;
279 for (
auto& hit :
data.hits) {
289 std::vector<FPGATrackSimGenScanTool::StoredHit> sorted_hits =
data.hits;
290 std::sort(sorted_hits.begin(), sorted_hits.end(),
291 [](
const auto &hit1,
const auto &hit2) {
292 return hit1.rzrad() < hit2.rzrad();
298 for (
auto &hit : sorted_hits) {
299 m_tree_r.push_back(hit.hitptr->getR());
300 m_tree_z.push_back(hit.hitptr->getZ());
301 m_tree_id.push_back(hit.hitptr->getIdentifier());
302 m_tree_hash.push_back(hit.hitptr->getIdentifierHash());
316 const std::vector<std::vector<const FPGATrackSimGenScanTool::StoredHit *> > & hitsByLayer)
318 for (
unsigned lyr = 0; lyr <
m_nLayers; lyr++)
354 bool passedPairFilter) {
360 if (passedPairFilter) {
369 << filteredpairs.
lyrCnt() <<
" "
370 << std::bitset<16>(filteredpairs.
hitLayers));
378 const std::pair<unsigned, unsigned>& rowRange,
const FPGATrackSimHit* hit) {
379 if (rowRange.second > rowRange.first) {
392 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &
hits,
401 if (!validSlice[
val.idx()])
continue;
407 if (!validSliceAndScan[
val.idx()])
continue;
424 if (!validSlice[
val.idx()])
continue;
429 if (!validSliceAndScan[
val.idx()])
continue;
433 if (!validSliceAndScan[
val.idx()])
continue;
441 std::vector<FPGATrackSimTruthTrack>
const * truthtracks,
bool isSingleParticle,
445 <<
" size = " << (truthtracks ? truthtracks->size() : 0));
468 <<
" ?= " << recovered <<
" closure:"
507 std::vector<const FPGATrackSimGenScanTool::StoredHit *>
const *lastlyr,
508 std::vector<const FPGATrackSimGenScanTool::StoredHit *>
const
511 auto size_if_nonzero_ptr =
512 [](std::vector<const FPGATrackSimGenScanTool::StoredHit *>
const *
ptr) {
521 size_if_nonzero_ptr(lastlastlyr));
528 int lyr = pair.first->hitptr->getLayer();
552 int minlyr =
std::min(lastpair.first->layer, lastpair.second->layer);
553 minlyr =
std::min(minlyr, pair.first->layer);
554 minlyr =
std::min(minlyr, pair.second->layer);
557 ((1 << lastpair.first->layer) | (1 << lastpair.second->layer) |
558 (1 << pair.first->layer) | (1 << pair.second->layer));
559 hitbits = hitbits >> minlyr;
561 int hitlyrs = std::popcount(hitbits);
563 assert(hitbits & 0
x1);
569 }
else if (hitlyrs == 3) {
570 if (hitbits == 0b111)
572 if ((lastpair.first->layer == pair.second->layer) ||
573 (pair.first->layer == lastpair.second->layer)) {
578 }
else if ((hitbits == 0b1101) || (hitbits == 0b1011))
588 << lastpair.second->layer <<
" " << pair.first->layer <<
" "
589 << pair.second->layer <<
" : " << minlyr <<
" "
590 << std::bitset<16>(hitbits));
596 std::vector<TH1D *> &histset,
double val,
602 histset[0]->Fill(
val);
603 histset[ppcat]->Fill(
val);
612 const std::vector<FPGATrackSimGenScanTool::HitPairSet> &pairsets,
616 for (
const auto& pairset : pairsets) {
628 const std::vector<FPGATrackSimGenScanTool::IntermediateState> &
states,
629 unsigned allowed_misses) {
631 for (
unsigned i = 0;
i <
states.size();
i++) {
634 for (
auto& pair :
states[
i].pairsets) {
637 unsigned totalInput =
states[
i].pairsets.size() +
states[
i].unpairedHits.size();
650 TGraph *retv =
new TGraph();
651 retv->SetName(
name.c_str());
657 g->SetPoint(
g->GetN(),
x,
y);
662 unsigned int count = m_rZ.size();
665 if (
count > m_maxEvts)
return;
669 for (
auto & hit:
hits)
671 AddPoint(m_rZ.back(), hit->getZ(), hit->getR());
672 AddPoint(m_xY.back(), hit->getX(), hit->getY());
679 if (m_rZ.size() > m_maxEvts)
return;
682 std::vector<const FPGATrackSimGenScanTool::StoredHit *> ptrvec;
683 for (
auto & hit:
hits)
685 ptrvec.push_back(&hit);
689 return addEvent(ptrvec);
694 unsigned int count = m_rZ.size();
697 if (
count > m_maxEvts)
return;
705 for (
auto & hit :
hits)
707 AddPoint(m_rZ.back(), hit->hitptr->getZ(), hit->hitptr->getR());
708 AddPoint(m_xY.back(), hit->hitptr->getX(), hit->hitptr->getY());
709 AddPoint(m_rEta.back(), hit->etaShift, hit->hitptr->getR());
710 AddPoint(m_rPhi.back(), hit->phiShift, hit->hitptr->getR());
717 std::vector<std::vector<TGraph *> *>({&m_rZ, &m_xY, &m_rPhi, &m_rEta})) {
720 return StatusCode::SUCCESS;