From 2da034666b06782756aed3035d7899ca7a101188 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Tue, 9 Aug 2022 01:33:51 +0000
Subject: [PATCH] feat: TrackProjector to negative HCal

---
 .../tracking/options/track_reconstruction.py   |  8 +++++---
 .../tracking/scripts/rec_multiple_tracks.cxx   | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/benchmarks/tracking/options/track_reconstruction.py b/benchmarks/tracking/options/track_reconstruction.py
index dbd72179..5c106b50 100644
--- a/benchmarks/tracking/options/track_reconstruction.py
+++ b/benchmarks/tracking/options/track_reconstruction.py
@@ -232,10 +232,12 @@ parts_from_fit = ParticlesFromTrackFit("parts_from_fit",
         outputTrackParameters = "outputTrackParameters")
 algorithms.append( parts_from_fit )
 
-trk_proj = TrackProjector("trajs_from_fit",
+trk_proj_hcal_endcap_n = TrackProjector("trk_proj_hcal_endcap_n",
         inputTrajectories = trk_find_alg.outputTrajectories,
-        outputTrackSegments = "outputTrackSegments")
-algorithms.append( trk_proj )
+        outputTrackSegments = "HcalEndcapNTrackSegments",
+        firstSmallerThanZ = -200*units.cm,
+)
+algorithms.append( trk_proj_hcal_endcap_n )
 
 out = PodioOutput("out", filename=output_rec_file)
 out.outputCommands = ["keep *", 
diff --git a/benchmarks/tracking/scripts/rec_multiple_tracks.cxx b/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
index f4043eba..b5134cab 100644
--- a/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
+++ b/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
@@ -14,6 +14,7 @@ R__LOAD_LIBRARY(libeicd.so)
 #include "eicd/ClusterCollection.h"
 #include "eicd/ClusterData.h"
 #include "eicd/TrackerHitCollection.h"
+#include "eicd/TrackSegmentCollection.h"
 
 using ROOT::RDataFrame;
 using namespace ROOT::VecOps;
@@ -26,6 +27,15 @@ auto p_track = [](std::vector<eicd::TrackParametersData> const& in) {
   return result;
 };
 
+auto z_segments = [](const std::vector<eicd::TrackSegmentData>& segments, const std::vector<eicd::TrackPoint>& points) {
+  std::vector<double> result;
+  for (const auto& segment: segments) {
+    for (size_t i = segment.points_begin; i < segment.points_end; i++) {
+      result.push_back(points[i].position.z);
+    }
+  }
+  return result;
+};
 
 std::vector<float> pt (std::vector<edm4hep::MCParticleData> const& in){
   std::vector<float> result;
@@ -98,8 +108,11 @@ int rec_multiple_tracks(const char* fname = "topside/rec_multiple_tracks.root")
                  .Define("N_Hits",       [](std::vector<eicd::TrackerHitData> hits) { return hits.size();}, {"trackingHits"})
                  .Define("N_BarrelHits", [](std::vector<eicd::TrackerHitData> hits) { return hits.size();}, {"TrackerBarrelRecHits"})
                  .Define("N_EndcapHits", [](std::vector<eicd::TrackerHitData> hits) { return hits.size();}, {"TrackerEndcapRecHits"})
+                 .Define("zTrackSegments", z_segments, {"HcalEndcapNTrackSegments", "HcalEndcapNTrackSegments_0"})
                  ;
 
+  auto h_zTrackSegment = df0.Histo1D({"h_zTrackSegment", "z ; #z", 400, -400, 400}, "zTrackSegments");
+
   auto h_nTracks_vs_theta = df0.Histo2D({"h_nTracks_vs_theta", "; #theta; N tracks ", 40,0,180,10, 0, 10}, "theta0","nTracks");
 
   auto h_nTracks = df0.Histo1D({"h_nTracks", "; N tracks ", 10, 0, 10}, "nTracks");
@@ -124,6 +137,11 @@ int rec_multiple_tracks(const char* fname = "topside/rec_multiple_tracks.root")
   // -----------------------------------------------
   auto c = new TCanvas();
 
+  h_zTrackSegment->DrawCopy();
+  c->SaveAs("results/tracking/rec_multiple_tracks_zTrackSegment.png");
+  c->SaveAs("results/tracking/rec_multiple_tracks_zTrackSegment.pdf");
+
+  // -----------------------------------------------
   h_nTracks->DrawCopy();
   c->SaveAs("results/tracking/rec_multiple_tracks_nTracks.png");
   c->SaveAs("results/tracking/rec_multiple_tracks_nTracks.pdf");
-- 
GitLab