From 346ec1fb05f8c098e4a4b4f49cbb57da723e538f Mon Sep 17 00:00:00 2001
From: Deion Elgin Fellers <dfellers@lxplus791.cern.ch>
Date: Fri, 24 Feb 2023 04:46:28 +0100
Subject: [PATCH 1/2] update ntuple blinding default, add truth positions to DP
 daughters, add raw calibrated energy

---
 .../NtupleDumper/src/NtupleDumperAlg.cxx      | 200 +++++++++---------
 .../NtupleDumper/src/NtupleDumperAlg.h        |   4 +-
 2 files changed, 104 insertions(+), 100 deletions(-)

diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
index c06051d2a..995b69ca6 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
@@ -170,7 +170,9 @@ StatusCode NtupleDumperAlg::initialize()
   addBranch("Calo_total_nMIP", &m_calo_total_nMIP);
   addBranch("Calo_total_E_dep", &m_calo_total_E_dep);
   addBranch("Calo_total_E_EM", &m_calo_total_E_EM);
+  addBranch("Calo_total_raw_E_EM", &m_calo_total_raw_E_EM);
   addBranch("Calo_total_E_EM_fudged", &m_calo_total_E_EM_fudged);
+  addBranch("Calo_total_raw_E_EM_fudged", &m_calo_total_raw_E_EM_fudged);
 
   addCalibratedBranches("Preshower",2,12);
   addBranch("Preshower_total_nMIP", &m_preshower_total_nMIP);
@@ -582,119 +584,114 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
 
   if (isMC) { // if simulation find MC cross section and primary lepton
     // Work out effective cross section for MC
-    if (m_useFlukaWeights)
-    {
-        double flukaWeight = truthEventContainer->at(0)->weights()[0];
-        ATH_MSG_ALWAYS("Found fluka weight = " << flukaWeight);
-        m_crossSection = m_baseEventCrossSection * flukaWeight;
-    }
-    else if (m_useGenieWeights)
-    {
-        m_crossSection = m_baseEventCrossSection;
-    }
-    else
-    {
+    if (m_useFlukaWeights) {
+      double flukaWeight = truthEventContainer->at(0)->weights()[0];
+      ATH_MSG_ALWAYS("Found fluka weight = " << flukaWeight);
+      m_crossSection = m_baseEventCrossSection * flukaWeight;
+    } else if (m_useGenieWeights) {
+      m_crossSection = m_baseEventCrossSection;
+    } else {
       //ATH_MSG_WARNING("Monte carlo event with no weighting scheme specified.  Setting crossSection (weight) to " << m_baseEventCrossSection << " fb.");
-        m_crossSection = m_baseEventCrossSection;
+      m_crossSection = m_baseEventCrossSection;
     }
 
-    // Find the M d0 and d1 truth information 
+    // Find truth particle information 
     SG::ReadHandle<xAOD::TruthParticleContainer> truthParticleContainer { m_truthParticleContainer, ctx };
-    if (truthParticleContainer.isValid() && truthParticleContainer->size() > 0)
-    {
-
+    if (truthParticleContainer.isValid() && truthParticleContainer->size() > 0) {
       int ipart(0);
-      for (auto particle : *truthParticleContainer)
-      {      
+      for (auto particle : *truthParticleContainer) { 	// loop over first 10 truth particles (for non A' samples)
+        if (ipart++ > 9) break;
 
- 	// loop over first 10 truth particles (for non A' samples)
-
-	if (ipart++ < 10) {
-	    
-	  m_truth_P.push_back(particle->p4().P());
-	  m_truth_px.push_back(particle->p4().X());
-	  m_truth_py.push_back(particle->p4().Y());
-	  m_truth_pz.push_back(particle->p4().Z());
-	  m_truth_m.push_back(particle->m());
-	  m_truth_pdg.push_back(particle->pdgId());
+        m_truth_P.push_back(particle->p4().P());
+	    m_truth_px.push_back(particle->p4().X());
+	    m_truth_py.push_back(particle->p4().Y());
+	    m_truth_pz.push_back(particle->p4().Z());
+	    m_truth_m.push_back(particle->m());
+	    m_truth_pdg.push_back(particle->pdgId());
 
 	    if ( particle->hasProdVtx()) {
-	        m_truth_prod_x.push_back(particle->prodVtx()->x());
-		m_truth_prod_y.push_back(particle->prodVtx()->y());
-		m_truth_prod_z.push_back(particle->prodVtx()->z());
-	      } else {
-		m_truth_prod_x.push_back(999999);
-		m_truth_prod_y.push_back(999999);
-		m_truth_prod_z.push_back(999999);
-	      }
+	      m_truth_prod_x.push_back(particle->prodVtx()->x());
+		  m_truth_prod_y.push_back(particle->prodVtx()->y());
+		  m_truth_prod_z.push_back(particle->prodVtx()->z());
+	    } else {
+		  m_truth_prod_x.push_back(999999);
+		  m_truth_prod_y.push_back(999999);
+		  m_truth_prod_z.push_back(999999);
+	    }
 
 	    if ( particle->hasDecayVtx()) {
 	      m_truth_dec_x.push_back(particle->decayVtx()->x());
 	      m_truth_dec_y.push_back(particle->decayVtx()->y());
 	      m_truth_dec_z.push_back(particle->decayVtx()->z());
-	      } else {
-		m_truth_dec_x.push_back(999999);
-		m_truth_dec_y.push_back(999999);
-		m_truth_dec_z.push_back(999999);
+	    } else {
+  		  m_truth_dec_x.push_back(999999);
+		  m_truth_dec_y.push_back(999999);
+		  m_truth_dec_z.push_back(999999);
 	    }
-	}
-	
-	     	     
-       if ( particle->barcode() == 1 || particle->barcode() == 2 || particle->barcode() == 3 ) {
-
-	 if ( particle->pdgId() == 32) { // mother particle (A')
-	  
-	   m_truthM_P.push_back(particle->p4().P());
-	   m_truthM_px.push_back(particle->p4().X());
-	   m_truthM_py.push_back(particle->p4().Y());
-	   m_truthM_pz.push_back(particle->p4().Z());
-
-	 if ( particle->hasDecayVtx()) { // decay vertex for A' particle 
-	    m_truthM_x.push_back(particle->decayVtx()->x());
-	    m_truthM_y.push_back(particle->decayVtx()->y());
-	    m_truthM_z.push_back(particle->decayVtx()->z());
-	 } else {
-	    m_truthM_x.push_back(999999);
-	    m_truthM_y.push_back(999999);
-	    m_truthM_z.push_back(999999);
-	  }
-	 }
-
-	if ( particle->pdgId() == 11) // daughter particle (positron)
-	  {
-	    m_truthd0_P.push_back(particle->p4().P());
-	    m_truthd0_px.push_back(particle->p4().X());
-	    m_truthd0_py.push_back(particle->p4().Y());
-	    m_truthd0_pz.push_back(particle->p4().Z());
-
-	  if ( particle->hasProdVtx()) {
-	    m_truthd0_x.push_back(particle->prodVtx()->x());
-	    m_truthd0_y.push_back(particle->prodVtx()->y());
-	    m_truthd0_z.push_back(particle->prodVtx()->z());
-	  } else {
-	    m_truthd0_x.push_back(999999);
-	    m_truthd0_y.push_back(999999);
-	    m_truthd0_z.push_back(999999);
-	  }
-	  }
-	if ( particle->pdgId() == -11) // daughter particle (electron)
-	  {
-	    m_truthd1_P.push_back(particle->p4().P());
-	    m_truthd1_px.push_back(particle->p4().X());
-	    m_truthd1_py.push_back(particle->p4().Y());
-	    m_truthd1_pz.push_back(particle->p4().Z());
-
-	  if ( particle->hasProdVtx()) {
-	    m_truthd1_x.push_back(particle->prodVtx()->x());
-	    m_truthd1_y.push_back(particle->prodVtx()->y());
-	    m_truthd1_z.push_back(particle->prodVtx()->z());
-	  } else {
-	    m_truthd1_x.push_back(999999);
-	    m_truthd1_y.push_back(999999);
-	    m_truthd1_z.push_back(999999);
-	  }
-	  }
-       }
+
+        // Find the M d0 and d1 truth information for dark photon
+        if ( particle->barcode() == 1 || particle->barcode() == 2 || particle->barcode() == 3 ) {
+          auto positions = m_fiducialParticleTool->getTruthPositions(particle->barcode());
+          if ( particle->pdgId() == 32) { // mother particle (A')
+ 	        m_truthM_P.push_back(particle->p4().P());
+      	    m_truthM_px.push_back(particle->p4().X());
+	        m_truthM_py.push_back(particle->p4().Y());
+	        m_truthM_pz.push_back(particle->p4().Z());
+
+            if ( particle->hasDecayVtx()) { // decay vertex for A' particle 
+              m_truthM_x.push_back(particle->decayVtx()->x());
+              m_truthM_y.push_back(particle->decayVtx()->y());
+              m_truthM_z.push_back(particle->decayVtx()->z());
+            } else {
+              m_truthM_x.push_back(999999);
+              m_truthM_y.push_back(999999);
+              m_truthM_z.push_back(999999);
+            }
+          }
+
+          if ( particle->pdgId() == 11) { // daughter particle (electron) 
+            m_truthd0_P.push_back(particle->p4().P());
+            m_truthd0_px.push_back(particle->p4().X());
+            m_truthd0_py.push_back(particle->p4().Y());
+            m_truthd0_pz.push_back(particle->p4().Z());
+
+            if ( particle->hasProdVtx()) {
+              m_truthd0_x.push_back(particle->prodVtx()->x());
+              m_truthd0_y.push_back(particle->prodVtx()->y());
+              m_truthd0_z.push_back(particle->prodVtx()->z());
+            } else {
+              m_truthd0_x.push_back(999999);
+              m_truthd0_y.push_back(999999);
+              m_truthd0_z.push_back(999999);
+            }
+            for (int station = 1; station < 4; ++station) {
+              m_truthd0_x.push_back(positions[station].x());
+              m_truthd0_y.push_back(positions[station].y());
+              m_truthd0_z.push_back(positions[station].z());
+            }
+          }
+          if ( particle->pdgId() == -11) { // daughter particle (positron)
+            m_truthd1_P.push_back(particle->p4().P());
+            m_truthd1_px.push_back(particle->p4().X());
+            m_truthd1_py.push_back(particle->p4().Y());
+            m_truthd1_pz.push_back(particle->p4().Z());
+
+            if ( particle->hasProdVtx()) {
+              m_truthd1_x.push_back(particle->prodVtx()->x());
+              m_truthd1_y.push_back(particle->prodVtx()->y());
+              m_truthd1_z.push_back(particle->prodVtx()->z());
+            } else {
+              m_truthd1_x.push_back(999999);
+              m_truthd1_y.push_back(999999);
+              m_truthd1_z.push_back(999999);
+            }
+            for (int station = 1; station < 4; ++station) {
+              m_truthd1_x.push_back(positions[station].x());
+              m_truthd1_y.push_back(positions[station].y());
+              m_truthd1_z.push_back(positions[station].z());
+            }
+          }
+        }
       }
     }	  
   }
@@ -711,6 +708,7 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
     m_calo_total_nMIP += hit->Nmip();
     m_calo_total_E_dep += hit->E_dep();
     m_calo_total_E_EM += hit->E_EM();
+    m_calo_total_raw_E_EM += (hit->E_EM()*hit->fit_to_raw_ratio());
 
     ATH_MSG_DEBUG("Calibrated calo: 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());
 
@@ -728,8 +726,10 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
 
   // add a fudged energy variable that corrects the MC to agree with the testbeam results
   m_calo_total_E_EM_fudged = m_calo_total_E_EM;
+  m_calo_total_raw_E_EM_fudged = m_calo_total_raw_E_EM;
   if (isMC) {
     m_calo_total_E_EM_fudged = m_calo_total_E_EM_fudged * m_caloMC_FudgeFactor;
+    m_calo_total_raw_E_EM_fudged = m_calo_total_raw_E_EM_fudged * m_caloMC_FudgeFactor;
   }
 
   // load in calibrated preshower container
@@ -1211,7 +1211,9 @@ NtupleDumperAlg::clearTree() const
   m_calo_total_nMIP=0;
   m_calo_total_E_dep=0;
   m_calo_total_E_EM=0;
+  m_calo_total_raw_E_EM=0;
   m_calo_total_E_EM_fudged=0;
+  m_calo_total_raw_E_EM_fudged=0;
 
   m_preshower_total_nMIP=0;
   m_preshower_total_E_dep=0;
diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
index 9c4a90240..322e38c90 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
@@ -117,7 +117,7 @@ private:
   DoubleProperty  m_genieLuminosity      { this, "GenieLuminosity", 150.0, "Genie luminosity in inverse fb." };
   DoubleProperty  m_minMomentum          { this, "MinMomentum", 50000.0, "Write out all truth particles with a momentum larger MinMomentum"};
 
-  DoubleProperty m_blindingCaloThreshold {this, "BlindingCaloThreshold", 25000.0, "Blind events with Ecal energy above threshold (in MeV)"}; 
+  DoubleProperty m_blindingCaloThreshold {this, "BlindingCaloThreshold", 100000.0, "Blind events with Ecal energy above threshold (in MeV)"}; 
   DoubleProperty m_caloMC_FudgeFactor    {this, "CaloFudgeFactorMC", 1.088, "Correct the MC energy calibration by this fudge factor"};
 
   double m_baseEventCrossSection {1.0};
@@ -167,8 +167,10 @@ private:
   mutable float m_calo_total_nMIP;
   mutable float m_calo_total_E_dep;
   mutable float m_calo_total_E_EM;
+  mutable float m_calo_total_raw_E_EM;
 
   mutable float m_calo_total_E_EM_fudged;
+  mutable float m_calo_total_raw_E_EM_fudged;
 
   mutable float m_preshower_total_nMIP;
   mutable float m_preshower_total_E_dep;
-- 
GitLab


From b5863048c8432fd4b87a4e499a060bd216ac0f31 Mon Sep 17 00:00:00 2001
From: Deion Elgin Fellers <dfellers@lxplus791.cern.ch>
Date: Fri, 24 Feb 2023 04:57:06 +0100
Subject: [PATCH 2/2] cleanup: fix annoying tab spacing

---
 .../NtupleDumper/src/NtupleDumperAlg.cxx      | 56 +++++++++----------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
index 995b69ca6..8b6aba734 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
@@ -603,40 +603,40 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
         if (ipart++ > 9) break;
 
         m_truth_P.push_back(particle->p4().P());
-	    m_truth_px.push_back(particle->p4().X());
-	    m_truth_py.push_back(particle->p4().Y());
-	    m_truth_pz.push_back(particle->p4().Z());
-	    m_truth_m.push_back(particle->m());
-	    m_truth_pdg.push_back(particle->pdgId());
-
-	    if ( particle->hasProdVtx()) {
-	      m_truth_prod_x.push_back(particle->prodVtx()->x());
-		  m_truth_prod_y.push_back(particle->prodVtx()->y());
-		  m_truth_prod_z.push_back(particle->prodVtx()->z());
-	    } else {
-		  m_truth_prod_x.push_back(999999);
-		  m_truth_prod_y.push_back(999999);
-		  m_truth_prod_z.push_back(999999);
-	    }
-
-	    if ( particle->hasDecayVtx()) {
-	      m_truth_dec_x.push_back(particle->decayVtx()->x());
-	      m_truth_dec_y.push_back(particle->decayVtx()->y());
-	      m_truth_dec_z.push_back(particle->decayVtx()->z());
-	    } else {
-  		  m_truth_dec_x.push_back(999999);
-		  m_truth_dec_y.push_back(999999);
-		  m_truth_dec_z.push_back(999999);
-	    }
+        m_truth_px.push_back(particle->p4().X());
+        m_truth_py.push_back(particle->p4().Y());
+        m_truth_pz.push_back(particle->p4().Z());
+        m_truth_m.push_back(particle->m());
+        m_truth_pdg.push_back(particle->pdgId());
+
+        if ( particle->hasProdVtx()) {
+          m_truth_prod_x.push_back(particle->prodVtx()->x());
+          m_truth_prod_y.push_back(particle->prodVtx()->y());
+          m_truth_prod_z.push_back(particle->prodVtx()->z());
+        } else {
+          m_truth_prod_x.push_back(999999);
+          m_truth_prod_y.push_back(999999);
+          m_truth_prod_z.push_back(999999);
+        }
+
+        if ( particle->hasDecayVtx()) {
+          m_truth_dec_x.push_back(particle->decayVtx()->x());
+          m_truth_dec_y.push_back(particle->decayVtx()->y());
+          m_truth_dec_z.push_back(particle->decayVtx()->z());
+        } else {
+          m_truth_dec_x.push_back(999999);
+          m_truth_dec_y.push_back(999999);
+          m_truth_dec_z.push_back(999999);
+        }
 
         // Find the M d0 and d1 truth information for dark photon
         if ( particle->barcode() == 1 || particle->barcode() == 2 || particle->barcode() == 3 ) {
           auto positions = m_fiducialParticleTool->getTruthPositions(particle->barcode());
           if ( particle->pdgId() == 32) { // mother particle (A')
- 	        m_truthM_P.push_back(particle->p4().P());
+            m_truthM_P.push_back(particle->p4().P());
       	    m_truthM_px.push_back(particle->p4().X());
-	        m_truthM_py.push_back(particle->p4().Y());
-	        m_truthM_pz.push_back(particle->p4().Z());
+            m_truthM_py.push_back(particle->p4().Y());
+            m_truthM_pz.push_back(particle->p4().Z());
 
             if ( particle->hasDecayVtx()) { // decay vertex for A' particle 
               m_truthM_x.push_back(particle->decayVtx()->x());
-- 
GitLab