31 auto props = this->getProperties();
32 for( Gaudi::Details::PropertyBase* prop : props ) {
33 if (prop->ownerTypeName()==this->type()) {
34 ATH_MSG_DEBUG(
"Property:\t" << prop->name() <<
"\t : \t" << prop->toString());
42 return StatusCode::SUCCESS;
83 "; Z [mm] ; R [mm] ", 500, -2000, 2000, 500, 0, 500));
86 "phi residual [mm]", 1000, -10, 10));
88 "eta residual [mm]", 1000, -10, 10));
91 "; R[mm]; phi residual [mm]", 1200, 0, 1200, 1000, -100, 100));
93 "; R[mm]; eta residual [mm]", 1200, 0, 1200, 1000, -100, 100));
96 "; R[mm]; phi scale", 1200, 0, 1200, 1000, -2, 2.0));
98 "; R[mm]; eta scale", 1200, 0, 1200, 1000, -2.0, 2.0));
101 "phiTrueBinShift",
"phi TrueBinShift [mm]", 1000, -10, 10));
103 "etaTrueBinShift",
"eta TrueBinShift [mm]",1000, -10, 10));
113 "ptDist",
"pT [GeV]",400, 0, 100));
115 "etaDist",
"#eta",1000, -5, 5));
119 "d0Dist",
"d_{0} [mm]",120, -3.0, 3.0));
121 "z0Dist",
"z_{0} [mm]",400, -200.0, 200.0));
123 return StatusCode::SUCCESS;
161 return StatusCode::SUCCESS;
184 setBinPlotsActive(
idx);
187 m_ptDist[0]->Fill(std::abs(1/m_truthpars.qOverPt));
188 m_etaDist[0]->Fill(1/m_truthpars.eta);
189 m_phiDist[0]->Fill(1/m_truthpars.phi);
190 m_d0Dist[0]->Fill(1/m_truthpars.d0);
191 m_z0Dist[0]->Fill(1/m_truthpars.z0);
193 if (m_binPlotsActive) {
194 for (
auto& hit :
data.hits) {
195 m_phiShift_road->Fill(hit.phiShift);
196 m_etaShift_road->Fill(hit.etaShift);
197 m_phiShift2D_road->Fill(hit.phiShift, hit.hitptr->getR());
198 m_etaShift2D_road->Fill(hit.etaShift, hit.hitptr->getR());
202 for (
int i = 0;
i < 2;
i++) {
204 if ((
i == 0)|| (
data.lyrCnt() >= m_binnedhits->getNLayers() - (
i - 1))) {
206 m_ptDist[
i]->Fill(std::abs(1 / m_truthpars.qOverPt));
207 m_etaDist[
i]->Fill(1 / m_truthpars.eta);
208 m_phiDist[
i]->Fill(1 / m_truthpars.phi);
209 m_d0Dist[
i]->Fill(1 / m_truthpars.d0);
210 m_z0Dist[
i]->Fill(1 / m_truthpars.z0);
216 std::vector<FPGATrackSimBinUtil::StoredHit> sorted_hits =
data.hits;
217 std::sort(sorted_hits.begin(), sorted_hits.end(),
218 [](
const auto &hit1,
const auto &hit2) {
219 return hit1.rzrad() < hit2.rzrad();
224 m_bin_tree_bin = std::vector<unsigned>(
idx);
226 for (
auto &hit : sorted_hits) {
227 m_bin_tree_r.push_back(hit.hitptr->getR());
228 m_bin_tree_z.push_back(hit.hitptr->getZ());
229 m_bin_tree_id.push_back(hit.hitptr->getIdentifier());
230 m_bin_tree_hash.push_back(hit.hitptr->getIdentifierHash());
231 m_bin_tree_layer.push_back(hit.hitptr->getLayerDisk());
232 m_bin_tree_side.push_back(hit.hitptr->getSide());
233 m_bin_tree_etamod.push_back(hit.hitptr->getEtaModule());
234 m_bin_tree_phimod.push_back(hit.hitptr->getPhiModule());
235 m_bin_tree_dettype.push_back((
int)hit.hitptr->getDetType());
236 m_bin_tree_detzone.push_back((
int)hit.hitptr->getDetectorZone());
244 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &
hits)
246 m_inputHits->Fill(
hits.size());
248 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
249 for (
auto bin : m_binnedhits->binnedHits()[
step->stepNum()])
250 m_hitsPerStepBin[
step->stepNum()]->Fill(
bin.data().hitCnt);
253 for (
auto bin :m_binnedhits->binnedHits()[m_binnedhits->getBinTool().lastStep()->stepNum()]) {
254 for (
unsigned lyr = 0; lyr < m_binnedhits->getNLayers(); lyr++) {
255 unsigned cnt =
bin.data().hitsInLyr(lyr);
256 m_hitsPerLayer->Fill(lyr,
cnt);
257 m_hitsPerLayer2D->Fill(lyr,
cnt);
260 m_binsFilled->Fill(m_binsFilledCnt);
294 void FPGATrackSimLayerStudyTool::parseTruthInfo
ATLAS_NOT_THREAD_SAFE(std::vector<FPGATrackSimTruthTrack>
const & truthtracks) {
295 ATH_MSG_DEBUG(
"In parseTruthInfo, truthtracks size = " << truthtracks.size());
296 m_truthIsValid =
false;
301 if (truthtracks.size() == 0)
return;
304 m_truthpars = (truthtracks)[0].getPars();
309 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
310 m_truthbin.push_back(
step->binIdx(m_truthparset));
315 m_truthpars_hists[
i]->Fill(m_truthparset[
i]);
320 ATH_MSG_DEBUG(
"parset:" << m_truthparset <<
" " << m_truthpars
321 <<
" ?= " << recovered <<
" closure:"
333 m_truth_tree_parset = std::vector<double>(m_truthparset);
334 m_truth_tree->Fill();
337 if (truthtracks.size() > 1) {
338 for (
unsigned i = 0;
i < truthtracks.size();
i++) {
339 ATH_MSG_INFO(
"Multiple truth" <<
i <<
" of " << truthtracks.size()
340 <<
" " << (truthtracks)[
i].getPars());
346 <<
" " << m_truthpars <<
" " << m_truthbin);
349 if (!m_binnedhits->getBinTool().inRange(m_truthparset)) {
350 ATH_MSG_INFO(
"Truth out of range because truth parset = " << m_truthparset <<
" wrt min = " << m_binnedhits->getBinTool().parMin() <<
", max = " << m_binnedhits->getBinTool().parMax());
356 m_truthIsValid =
true;
357 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
358 if (!
step->validBinsFull()[m_truthbin[
step->stepNum()]]) {
360 << m_truthbin[
step->stepNum()]
361 <<
" : " << m_truthpars);
362 std::vector<FPGATrackSimBinUtil::IdxSet> idxsets =
364 std::vector<unsigned>({0, 1, 2, 3, 4}),
365 m_truthbin[
step->stepNum()]);
370 m_truthIsValid =
false;