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;
160 return StatusCode::SUCCESS;
182 setBinPlotsActive(
idx);
185 m_ptDist[0]->Fill(std::abs(1/m_truthpars.qOverPt));
186 m_etaDist[0]->Fill(1/m_truthpars.eta);
187 m_phiDist[0]->Fill(1/m_truthpars.phi);
188 m_d0Dist[0]->Fill(1/m_truthpars.d0);
189 m_z0Dist[0]->Fill(1/m_truthpars.z0);
191 if (m_binPlotsActive) {
192 for (
auto& hit :
data.hits) {
193 m_phiShift_road->Fill(hit.phiShift);
194 m_etaShift_road->Fill(hit.etaShift);
195 m_phiShift2D_road->Fill(hit.phiShift, hit.hitptr->getR());
196 m_etaShift2D_road->Fill(hit.etaShift, hit.hitptr->getR());
200 for (
int i = 0;
i < 2;
i++) {
202 if ((
i == 0)|| (
data.lyrCnt() >= m_binnedhits->getNLayers() - (
i - 1))) {
204 m_ptDist[
i]->Fill(std::abs(1 / m_truthpars.qOverPt));
205 m_etaDist[
i]->Fill(1 / m_truthpars.eta);
206 m_phiDist[
i]->Fill(1 / m_truthpars.phi);
207 m_d0Dist[
i]->Fill(1 / m_truthpars.d0);
208 m_z0Dist[
i]->Fill(1 / m_truthpars.z0);
214 std::vector<FPGATrackSimBinUtil::StoredHit> sorted_hits =
data.hits;
215 std::sort(sorted_hits.begin(), sorted_hits.end(),
216 [](
const auto &hit1,
const auto &hit2) {
217 return hit1.rzrad() < hit2.rzrad();
221 m_bin_tree_bin = std::vector<unsigned>(
idx);
223 for (
auto &hit : sorted_hits) {
225 m_bin_tree_r.push_back(hit.hitptr->getR());
226 m_bin_tree_z.push_back(hit.hitptr->getZ());
227 m_bin_tree_id.push_back(hit.hitptr->getIdentifier());
228 m_bin_tree_hash.push_back(hit.hitptr->getIdentifierHash());
229 m_bin_tree_layer.push_back(hit.hitptr->getLayerDisk());
230 m_bin_tree_side.push_back(hit.hitptr->getSide());
231 m_bin_tree_etamod.push_back(hit.hitptr->getEtaModule());
232 m_bin_tree_phimod.push_back(hit.hitptr->getPhiModule());
233 m_bin_tree_dettype.push_back((
int)hit.hitptr->getDetType());
234 m_bin_tree_detzone.push_back((
int)hit.hitptr->getDetectorZone());
242 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &
hits)
244 m_inputHits->Fill(
hits.size());
246 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
247 for (
auto bin : m_binnedhits->binnedHits()[
step->stepNum()])
248 m_hitsPerStepBin[
step->stepNum()]->Fill(
bin.data().hitCnt);
251 for (
auto bin :m_binnedhits->binnedHits()[m_binnedhits->getBinTool().lastStep()->stepNum()]) {
252 for (
unsigned lyr = 0; lyr < m_binnedhits->getNLayers(); lyr++) {
253 unsigned cnt =
bin.data().hitsInLyr(lyr);
254 m_hitsPerLayer->Fill(lyr,
cnt);
255 m_hitsPerLayer2D->Fill(lyr,
cnt);
259 m_binsFilled->Fill(m_binsFilledCnt);
293 void FPGATrackSimLayerStudyTool::parseTruthInfo
ATLAS_NOT_THREAD_SAFE(std::vector<FPGATrackSimTruthTrack>
const & truthtracks) {
294 ATH_MSG_DEBUG(
"In parseTruthInfo, truthtracks size = " << truthtracks.size());
295 m_truthIsValid =
false;
299 if (truthtracks.size() == 0)
return;
302 m_truthpars = (truthtracks)[0].getPars();
307 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
308 m_truthbin.push_back(
step->binIdx(m_truthparset));
313 m_truthpars_hists[
i]->Fill(m_truthparset[
i]);
318 ATH_MSG_DEBUG(
"parset:" << m_truthparset <<
" " << m_truthpars
319 <<
" ?= " << recovered <<
" closure:"
331 m_truth_tree_parset = std::vector<double>(m_truthparset);
332 m_truth_tree->Fill();
335 if (truthtracks.size() > 1) {
336 for (
unsigned i = 0;
i < truthtracks.size();
i++) {
337 ATH_MSG_INFO(
"Multiple truth" <<
i <<
" of " << truthtracks.size()
338 <<
" " << (truthtracks)[
i].getPars());
344 <<
" " << m_truthpars <<
" " << m_truthbin);
347 if (!m_binnedhits->getBinTool().inRange(m_truthparset)) {
348 ATH_MSG_INFO(
"Truth out of range because truth parset = " << m_truthparset <<
" wrt min = " << m_binnedhits->getBinTool().parMin() <<
", max = " << m_binnedhits->getBinTool().parMax());
354 m_truthIsValid =
true;
355 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
356 if (!
step->validBinsFull()[m_truthbin[
step->stepNum()]]) {
358 << m_truthbin[
step->stepNum()]
359 <<
" : " << m_truthpars);
360 std::vector<FPGATrackSimBinUtil::IdxSet> idxsets =
362 std::vector<unsigned>({0, 1, 2, 3, 4}),
363 m_truthbin[
step->stepNum()]);
368 m_truthIsValid =
false;