From ae8976934c4e45511bbb954b854e05b7ee4f8125 Mon Sep 17 00:00:00 2001
From: FaserMC <fasermc@cern.ch>
Date: Sun, 22 Jan 2023 21:25:58 +0100
Subject: [PATCH] Fixes for ntuple making

---
 .../NtupleDumper/scripts/faser_ntuple_maker.py    | 15 +++++++++++++--
 .../NtupleDumper/src/NtupleDumperAlg.cxx          | 12 +++++++++++-
 .../NtupleDumper/src/NtupleDumperAlg.h            |  2 ++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/PhysicsAnalysis/NtupleDumper/scripts/faser_ntuple_maker.py b/PhysicsAnalysis/NtupleDumper/scripts/faser_ntuple_maker.py
index 189b9500..a22d1edb 100755
--- a/PhysicsAnalysis/NtupleDumper/scripts/faser_ntuple_maker.py
+++ b/PhysicsAnalysis/NtupleDumper/scripts/faser_ntuple_maker.py
@@ -60,7 +60,7 @@ filelist = []
 # If this is a directory, need to create file list
 if filepath.is_dir():
 
-    # Use expected data pattern to find files
+    # Use expected data pattern to find files (data only)
     runstr = filepath.stem
 
     # Make list of segments to search for
@@ -114,10 +114,12 @@ if filepath.is_dir():
         filelist.append(filestr)
     # End of loop over segments
 
+    # Parse name to create outfile
     firstfile = Path(filelist[0])
     firststem = str(firstfile.stem)
     firstfaser = firststem.split('-')[0]
     firstshort = firststem.split('-')[1]
+    runstr = firststem.split('-')[2]
     firstseg = firststem.split('-')[3]
     if args.merge > 1:
         firstseg2 = firststem.split('-')[4]
@@ -128,13 +130,21 @@ if filepath.is_dir():
     if args.merge > 1:
         lastseg = laststem.split('-')[4]
 
+    print(f"Faser = {firstfaser}")
+    print(f"Short = {firstshort}")
+    print(f"Run   = {runstr}")
+    print(f"First = {firstseg}")
+    print(f"Last  = {lastseg}")
+    print(f"Args  = {args.tag}")
+
     # Find any tags
     tagstr = firststem.replace(f"{firstfaser}-{firstshort}-{runstr}-{firstseg}", "")
     if args.merge > 1:
         tagstr = tagstr.replace(f"-{firstseg2}", "")
 
     tagstr = tagstr.replace("-xAOD", "")
-    print(f"Tag = {tagstr}")
+
+    print(f"Tag   = {tagstr}")
 
     # Build output name
     outfile = f"{firstfaser}-{firstshort}-{runstr}-{firstseg}-{lastseg}"
@@ -148,6 +158,7 @@ if filepath.is_dir():
 
     outfile += "-PHYS.root"
 
+
 # If this is a single file, just process that
 # Could be a url, so don't check if this is a file
 else:
diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
index b61be213..e1053fa6 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
@@ -610,6 +610,7 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
   }
 
   // load in calibrated calo container
+  if (m_doCalib) {
   SG::ReadHandle<xAOD::CalorimeterHitContainer> ecalCalibratedContainer { m_ecalCalibratedContainer, ctx };
   ATH_CHECK(ecalCalibratedContainer.isValid());
   for (auto hit : *ecalCalibratedContainer) {
@@ -649,6 +650,7 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
 
     ATH_MSG_DEBUG("Calibrated preshower: ch is " << ch << ", edep is " << hit->E_dep() << ", E_EM is " << hit->E_EM() << ", Nmip is " << hit->Nmip() << ", fit_to_raw_ratio is " << hit->fit_to_raw_ratio());
   }
+  }
 
   // process all waveeform data fro all scintillator and calorimeter channels
   SG::ReadHandle<xAOD::WaveformHitContainer> vetoNuContainer { m_vetoNuContainer, ctx };
@@ -766,8 +768,16 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
   // loop over all reconstructed tracks and use only the tracks that have hits in all three tracking stations (excludes IFT)
   // store track parameters at most upstream measurement and at most downstream measurement
   // extrapolate track to all scintillator positions and store extrapolated position and angle
-  SG::ReadHandle<TrackCollection> trackCollection {m_trackCollectionWithoutIFT, ctx}; // use track collection that excludes IFT
+  SG::ReadHandle<TrackCollection> trackCollection;
+  if (m_useIFT) {
+    SG::ReadHandle<TrackCollection> tc {m_trackCollection, ctx}; // use track collection that excludes IFT
+    trackCollection = tc;
+  } else {
+    SG::ReadHandle<TrackCollection> tc {m_trackCollectionWithoutIFT, ctx}; // use track collection that excludes IFT
+    trackCollection = tc;
+  }
   ATH_CHECK(trackCollection.isValid());
+
   for (const Trk::Track* track : *trackCollection)
   {
     if (track == nullptr) continue;
diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
index 5cc34202..c970480b 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
@@ -98,6 +98,8 @@ private:
   const PreshowerID* m_preshowerHelper;
   const EcalID*      m_ecalHelper;
 
+  BooleanProperty m_useIFT            { this, "UseIFT", false, "Use IFT tracks" };
+  BooleanProperty m_doCalib           { this, "DoCalib", true, "Fill calibrated calorimeter quantities" };
   BooleanProperty m_doBlinding        { this, "DoBlinding", true, "Blinding will not output events with Calo signal > 10 GeV e-" };
   BooleanProperty m_useFlukaWeights   { this, "UseFlukaWeights", false, "Flag to weight events according to value stored in HepMC::GenEvent" };
   BooleanProperty m_useGenieWeights   { this, "UseGenieWeights", false, "Flag to weight events according to Genie luminosity" };
-- 
GitLab