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;
129 m_bin_tree =
new TTree(
"LayerStudy",
"LayerStudy");
152 return StatusCode::SUCCESS;
173 setBinPlotsActive(
idx);
176 m_ptDist[0]->Fill(std::abs(1/m_truthpars.qOverPt));
177 m_etaDist[0]->Fill(1/m_truthpars.eta);
178 m_phiDist[0]->Fill(1/m_truthpars.phi);
179 m_d0Dist[0]->Fill(1/m_truthpars.d0);
180 m_z0Dist[0]->Fill(1/m_truthpars.z0);
182 if (m_binPlotsActive) {
183 for (
auto& hit :
data.hits) {
184 m_phiShift_road->Fill(hit.phiShift);
185 m_etaShift_road->Fill(hit.etaShift);
186 m_phiShift2D_road->Fill(hit.phiShift, hit.hitptr->getR());
187 m_etaShift2D_road->Fill(hit.etaShift, hit.hitptr->getR());
191 for (
int i = 0;
i < 2;
i++) {
193 if ((
i == 0)|| (
data.lyrCnt() >= m_binnedhits->getNLayers() - (
i - 1))) {
195 m_ptDist[
i]->Fill(std::abs(1 / m_truthpars.qOverPt));
196 m_etaDist[
i]->Fill(1 / m_truthpars.eta);
197 m_phiDist[
i]->Fill(1 / m_truthpars.phi);
198 m_d0Dist[
i]->Fill(1 / m_truthpars.d0);
199 m_z0Dist[
i]->Fill(1 / m_truthpars.z0);
205 std::vector<FPGATrackSimBinUtil::StoredHit> sorted_hits =
data.hits;
206 std::sort(sorted_hits.begin(), sorted_hits.end(),
207 [](
const auto &hit1,
const auto &hit2) {
208 return hit1.rzrad() < hit2.rzrad();
212 m_bin_tree_bin = std::vector<unsigned>(
idx);
214 for (
auto &hit : sorted_hits) {
216 m_bin_tree_r.push_back(hit.hitptr->getR());
217 m_bin_tree_z.push_back(hit.hitptr->getZ());
218 m_bin_tree_id.push_back(hit.hitptr->getIdentifier());
219 m_bin_tree_hash.push_back(hit.hitptr->getIdentifierHash());
220 m_bin_tree_layer.push_back(hit.hitptr->getLayerDisk());
221 m_bin_tree_side.push_back(hit.hitptr->getSide());
222 m_bin_tree_etamod.push_back(hit.hitptr->getEtaModule());
223 m_bin_tree_phimod.push_back(hit.hitptr->getPhiModule());
224 m_bin_tree_dettype.push_back((
int)hit.hitptr->getDetType());
225 m_bin_tree_detzone.push_back((
int)hit.hitptr->getDetectorZone());
233 const std::vector<std::shared_ptr<const FPGATrackSimHit>> &
hits)
235 m_inputHits->Fill(
hits.size());
237 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
238 for (
auto bin : m_binnedhits->binnedHits()[
step->stepNum()])
239 m_hitsPerStepBin[
step->stepNum()]->Fill(
bin.data().hitCnt);
242 for (
auto bin :m_binnedhits->binnedHits()[m_binnedhits->getBinTool().lastStep()->stepNum()]) {
243 for (
unsigned lyr = 0; lyr < m_binnedhits->getNLayers(); lyr++) {
244 unsigned cnt =
bin.data().hitsInLyr(lyr);
245 m_hitsPerLayer->Fill(lyr,
cnt);
246 m_hitsPerLayer2D->Fill(lyr,
cnt);
250 m_binsFilled->Fill(m_binsFilledCnt);
284 void FPGATrackSimLayerStudyTool::parseTruthInfo
ATLAS_NOT_THREAD_SAFE(std::vector<FPGATrackSimTruthTrack>
const & truthtracks) {
285 ATH_MSG_DEBUG(
"In parseTruthInfo, truthtracks size = " << truthtracks.size());
286 m_truthIsValid =
false;
290 if (truthtracks.size() == 0)
return;
293 m_truthpars = (truthtracks)[0].getPars();
298 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
299 m_truthbin.push_back(
step->binIdx(m_truthparset));
304 m_truthpars_hists[
i]->Fill(m_truthparset[
i]);
309 ATH_MSG_DEBUG(
"parset:" << m_truthparset <<
" " << m_truthpars
310 <<
" ?= " << recovered <<
" closure:"
322 m_truth_tree_parset = std::vector<double>(m_truthparset);
323 m_truth_tree->Fill();
326 if (truthtracks.size() > 1) {
327 for (
unsigned i = 0;
i < truthtracks.size();
i++) {
328 ATH_MSG_INFO(
"Multiple truth" <<
i <<
" of " << truthtracks.size()
329 <<
" " << (truthtracks)[
i].getPars());
335 <<
" " << m_truthpars <<
" " << m_truthbin);
338 if (!m_binnedhits->getBinTool().inRange(m_truthparset)) {
339 ATH_MSG_INFO(
"Truth out of range because truth parset = " << m_truthparset <<
" wrt min = " << m_binnedhits->getBinTool().parMin() <<
", max = " << m_binnedhits->getBinTool().parMax());
345 m_truthIsValid =
true;
346 for (
auto &
step : m_binnedhits->getBinTool().steps()) {
347 if (!
step->validBinsFull()[m_truthbin[
step->stepNum()]]) {
349 << m_truthbin[
step->stepNum()]
350 <<
" : " << m_truthpars);
351 std::vector<FPGATrackSimBinUtil::IdxSet> idxsets =
353 std::vector<unsigned>({0, 1, 2, 3, 4}),
354 m_truthbin[
step->stepNum()]);
359 m_truthIsValid =
false;