From f7bd1f902e45e48c73ff914fe73fb516c057dadd Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wouter.deconinck@umanitoba.ca>
Date: Wed, 21 Jul 2021 23:38:39 +0000
Subject: [PATCH] Full reconstruction: ScFi reconstruction

---
 .../full/options/full_reconstruction.py       | 92 ++++++++++++++-----
 1 file changed, 69 insertions(+), 23 deletions(-)

diff --git a/benchmarks/full/options/full_reconstruction.py b/benchmarks/full/options/full_reconstruction.py
index a40f0edd..26f07b04 100644
--- a/benchmarks/full/options/full_reconstruction.py
+++ b/benchmarks/full/options/full_reconstruction.py
@@ -25,6 +25,7 @@ cb_ecal_sf = float(os.environ.get("CB_ECAL_SAMP_FRAC", 0.01324))
 cb_hcal_sf = float(os.environ.get("CB_HCAL_SAMP_FRAC", 0.038))
 ci_hcal_sf = float(os.environ.get("CI_HCAL_SAMP_FRAC", 0.025))
 ce_hcal_sf = float(os.environ.get("CE_HCAL_SAMP_FRAC", 0.025))
+scifi_barrel_sf = float(os.environ.get("CB_EMCAL_SCFI_SAMP_FRAC",0.0938))
 
 # input and output
 input_sims = [f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip()]
@@ -84,6 +85,7 @@ sim_coll = [
     "EcalEndcapNHits",
     "EcalEndcapPHits",
     "EcalBarrelHits",
+    "EcalBarrelScFiHits",
     "HcalBarrelHits",
     "HcalHadronEndcapHits",
     "HcalElectronEndcapHits",
@@ -99,12 +101,12 @@ podin = PodioInput("PodioReader", collections=sim_coll)
 podout = PodioOutput("out", filename=output_rec)
 
 ## copiers to get around input --> output copy bug. Note the "2" appended to the output collection.
-copier = MCCopier("MCCopier", 
-        inputCollection="mcparticles", 
-        outputCollection="mcparticles2") 
-trkcopier = TrkCopier("TrkCopier", 
-        inputCollection="TrackerBarrelHits", 
-        outputCollection="TrackerBarrelHits2") 
+copier = MCCopier("MCCopier",
+        inputCollection="mcparticles",
+        outputCollection="mcparticles2")
+trkcopier = TrkCopier("TrkCopier",
+        inputCollection="TrackerBarrelHits",
+        outputCollection="TrackerBarrelHits2")
 pmtcopier = PMTCopier("PMTCopier",
         inputCollection="ForwardRICHHits",
         outputCollection="ForwardRICHHits2")
@@ -242,6 +244,49 @@ cb_ecal_clreco = ImagingClusterReco("cb_ecal_clreco",
         outputClusterCollection="EcalBarrelClusters",
         outputLayerCollection="EcalBarrelLayers")
 
+# Central ECAL SciFi
+scfi_barrel_daq = dict(
+        dynamicRangeADC=50.*MeV,
+        capacityADC=32768,
+        pedestalMean=400,
+        pedestalSigma=10)
+
+scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
+        inputHitCollection="EcalBarrelScFiHits",
+        outputHitCollection="EcalBarrelScFiHitsDigi",
+        **scfi_barrel_daq)
+
+scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
+        inputHitCollection="EcalBarrelScFiHitsDigi",
+        outputHitCollection="EcalBarrelScFiHitsReco",
+        thresholdFactor=5.0,
+        readoutClass="EcalBarrelScFiHits",
+        layerField="layer",
+        sectorField="module",
+        localDetFields=["system", "module"], # use local coordinates in each module (stave)
+        **scfi_barrel_daq)
+
+# merge hits in different layer (projection to local x-y plane)
+scfi_barrel_merger = CalHitsMerger("scfi_barrel_merger",
+         inputHitCollection="EcalBarrelScFiHitsReco",
+         outputHitCollection="EcalBarrelScFiGridReco",
+         fields=["fiber"],
+         fieldRefNumbers=[1],
+         readoutClass="EcalBarrelScFiHits")
+
+scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
+         inputHitCollection="EcalBarrelScFiGridReco",
+         outputHitCollection="EcalBarrelScFiClusterHits",
+         splitCluster=False,
+         minClusterCenterEdep=10.*MeV,
+         localDistXZ=[30*mm, 30*mm])
+
+scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
+         inputHitCollection="EcalBarrelScFiClusterHits",
+         outputClusterCollection="EcalBarrelScFiClusters",
+         logWeightBase=6.2,
+         samplingFraction= scifi_barrel_sf)
+
 # Central Barrel Hcal
 cb_hcal_daq = dict(
          dynamicRangeADC=50.*units.MeV,
@@ -365,17 +410,17 @@ trk_b_digi = TrackerDigi("trk_b_digi",
         inputHitCollection="TrackerBarrelHits",
         outputHitCollection="TrackerBarrelRawHits",
         timeResolution=8)
-trk_ec_digi = TrackerDigi("trk_ec_digi", 
+trk_ec_digi = TrackerDigi("trk_ec_digi",
         inputHitCollection="TrackerEndcapHits",
         outputHitCollection="TrackerEndcapRawHits",
         timeResolution=8)
 
-vtx_b_digi = TrackerDigi("vtx_b_digi", 
+vtx_b_digi = TrackerDigi("vtx_b_digi",
         inputHitCollection="VertexBarrelHits",
         outputHitCollection="VertexBarrelRawHits",
         timeResolution=8)
 
-vtx_ec_digi = TrackerDigi("vtx_ec_digi", 
+vtx_ec_digi = TrackerDigi("vtx_ec_digi",
         inputHitCollection="VertexEndcapHits",
         outputHitCollection="VertexEndcapRawHits",
         timeResolution=8)
@@ -397,11 +442,11 @@ vtx_ec_reco = TrackerHitReconstruction("vtx_ec_reco",
         inputHitCollection = vtx_ec_digi.outputHitCollection,
         outputHitCollection="VertexEndcapRecHits")
 
-# Hit Source linker 
-sourcelinker = TrackerSourceLinker("sourcelinker",
-        inputHitCollection=trk_b_reco.outputHitCollection,
-        outputSourceLinks="BarrelTrackSourceLinks",
-        outputMeasurements="BarrelTrackMeasurements")
+# Hit Source linker
+sourcelinker = TrackerSourcesLinker("trk_srcslnkr",
+        inputHitCollections = ["VertexBarrelRecHits", "TrackerBarrelRecHits"],
+        outputSourceLinks = "TrackerSourceLinks",
+        outputMeasurements = "TrackerMeasurements")
 
 #trk_hits_srclnkr = TrackerSourcesLinker("trk_srcslnkr",
 #        ITrackerBarrelHits = vtx_b_reco.outputHitCollection,
@@ -429,18 +474,18 @@ truth_trk_init = TrackParamTruthInit("truth_trk_init",
 trk_find_alg = TrackFindingAlgorithm("trk_find_alg",
         inputSourceLinks = sourcelinker.outputSourceLinks,
         inputMeasurements = sourcelinker.outputMeasurements,
-        inputInitialTrackParameters= "InitTrackParamsFromTruth",
-        outputTrajectories="trajectories")
+        inputInitialTrackParameters = "InitTrackParamsFromTruth",
+        outputTrajectories = "trajectories")
 
 parts_from_fit = ParticlesFromTrackFit("parts_from_fit",
-        inputTrajectories="trajectories",
-        outputParticles="ReconstructedParticlesInitFromTruth",
-        outputTrackParameters="outputTrackParameters")
+        inputTrajectories = "trajectories",
+        outputParticles = "ReconstructedParticlesInitFromTruth",
+        outputTrackParameters = "outputTrackParameters")
 
 #trk_find_alg1 = TrackFindingAlgorithm("trk_find_alg1",
 #        inputSourceLinks = sourcelinker.outputSourceLinks,
 #        inputMeasurements = sourcelinker.outputMeasurements,
-#        inputInitialTrackParameters= "InitTrackParamsFromClusters", 
+#        inputInitialTrackParameters= "InitTrackParamsFromClusters",
 #        outputTrajectories="trajectories1")
 
 #parts_from_fit1 = ParticlesFromTrackFit("parts_from_fit1",
@@ -451,7 +496,7 @@ parts_from_fit = ParticlesFromTrackFit("parts_from_fit",
 #trk_find_alg2 = TrackFindingAlgorithm("trk_find_alg2",
 #        inputSourceLinks = trk_hits_srclnkr.outputSourceLinks,
 #        inputMeasurements = trk_hits_srclnkr.outputMeasurements,
-#        inputInitialTrackParameters= "InitTrackParamsFromVtxClusters", 
+#        inputInitialTrackParameters= "InitTrackParamsFromVtxClusters",
 #        outputTrajectories="trajectories2")
 #parts_from_fit2 = ParticlesFromTrackFit("parts_from_fit2",
 #        inputTrajectories="trajectories2",
@@ -491,15 +536,16 @@ ApplicationMgr(
               ce_ecal_digi, ce_ecal_reco, ce_ecal_cl, ce_ecal_clreco,
               ci_ecal_digi, ci_ecal_reco, ci_ecal_merger, ci_ecal_cl, ci_ecal_clreco,
               cb_ecal_digi, cb_ecal_reco, cb_ecal_cl, cb_ecal_clreco,
+              scfi_barrel_digi, scfi_barrel_reco, scfi_barrel_merger, scfi_barrel_cl, scfi_barrel_clreco,
               cb_hcal_digi, cb_hcal_reco, cb_hcal_merger, cb_hcal_cl, cb_hcal_clreco,
               ce_hcal_digi, ce_hcal_reco, ce_hcal_merger, ce_hcal_cl, ce_hcal_clreco,
               ci_hcal_digi, ci_hcal_reco, ci_hcal_merger, ci_hcal_cl, ci_hcal_clreco,
               trk_b_digi, trk_ec_digi, vtx_b_digi, vtx_ec_digi,
-              trk_b_reco, trk_ec_reco, vtx_b_reco, vtx_ec_reco, 
+              trk_b_reco, trk_ec_reco, vtx_b_reco, vtx_ec_reco,
               sourcelinker, #trk_hits_srclnkr,
               #clust_trk_init,
               truth_trk_init,
-              #vtxcluster_trk_init, 
+              #vtxcluster_trk_init,
               trk_find_alg, parts_from_fit,
               #trk_find_alg1, parts_from_fit1,
               #trk_find_alg2, parts_from_fit2,
-- 
GitLab