50int tracks3d(
const char* fileListPath =
"/home/igor/data.cache/Run9compare/rc_aln.run_Top_9555_ev0_p0.lst",
51 Int_t tracksToDraw = 100,
54 fair::Logger::SetConsoleColor(
true);
55 fair::Logger::SetConsoleSeverity(
"info");
59 if (!detectorModel.
Init(
"/home/igor/bmnroot/geometry/target_Sn.geo") || tracksToDraw <= 0)
66 if (!iterator.Initialized())
69 using Point_t = std::array<Double_t, 3>;
70 std::vector<std::vector<Point_t>> sample;
71 sample.reserve(tracksToDraw);
75 for (iterator.ResetAll(); !iterator.EndOfTracks(); iterator.NextTrack(), seen++) {
79 if (slot >= tracksToDraw)
82 std::vector<Point_t> points;
83 points.reserve(iterator.HitsInTrack());
84 for (; !iterator.EndOfHits(); iterator.NextHit())
85 points.push_back({iterator.HitZ(), iterator.HitY(), iterator.HitX()});
86 std::sort(points.begin(), points.end());
88 if (seen < tracksToDraw)
89 sample.push_back(std::move(points));
91 sample[slot] = std::move(points);
94 LOG(info) <<
" " << sample.size() <<
" of " << seen <<
" accepted tracks drawn";
101 for (
const std::vector<Point_t>& track : sample)
104 lo[
i] = std::min(lo[
i], p[
i]);
105 hi[
i] = std::max(hi[
i], p[
i]);
109 "tracks3d",
Form(
"%zu random tracks from %s", sample.size(), fileListPath), 1200, 800)};
112 view->
SetRange(lo[0], lo[1], lo[2], hi[0], hi[1], hi[2]);
114 for (
const std::vector<Point_t>& track : sample) {
116 for (std::size_t
i{0};
i < track.size();
i++)
117 line->
SetPoint(
i, track[
i][0], track[
i][1], track[
i][2]);
int tracks3d(const char *fileListPath="/home/igor/data.cache/Run9compare/rc_aln.run_Top_9555_ev0_p0.lst", Int_t tracksToDraw=100, Int_t maxTracks=0)
Draw a uniformly random sample of tracks as 3D polylines through their hits.