From 0d5951a9537a4082199a40bf9e024f444f978603 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wouter.deconinck@umanitoba.ca>
Date: Wed, 6 Oct 2021 23:21:34 +0000
Subject: [PATCH] null pointer safety on PDG lookup

---
 benchmarks/imaging_ecal/scripts/draw_cluster.py | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/benchmarks/imaging_ecal/scripts/draw_cluster.py b/benchmarks/imaging_ecal/scripts/draw_cluster.py
index 6ad5c05a..02cc7683 100644
--- a/benchmarks/imaging_ecal/scripts/draw_cluster.py
+++ b/benchmarks/imaging_ecal/scripts/draw_cluster.py
@@ -156,8 +156,12 @@ if __name__ == '__main__':
         dfdecaymcp = dftemp.copy()
         for iptl in [0, len(dfdecaymcp) - 1]:
             infoptl = pdgbase.GetParticle(int(dfdecaymcp['pid'].iloc[iptl]))
-            print("{} Decaying particle = {}, pdgcode = {}, charge = {}, mass = {}"\
-                .format(iptl, infoptl.GetName(), infoptl.PdgCode(), infoptl.Charge(), infoptl.Mass()))
+            if infoptl:
+                print("{} Decaying particle = {}, pdgcode = {}, charge = {}, mass = {}"\
+                    .format(iptl, infoptl.GetName(), infoptl.PdgCode(), infoptl.Charge(), infoptl.Mass()))
+            else:
+                print("{} Decaying particle unknown pdgcode {}"\
+                    .format(iptl, int(dfdecaymcp['pid'].iloc[iptl])))
         # Calculate geometric variables of decaying particles
         dfdecaymcp['r'] = np.sqrt(dfdecaymcp['vex'].values**2 + dfdecaymcp['vey'].values**2 + dfdecaymcp['vez'].values**2)
         dfdecaymcp['phi'] = np.arctan2(dfdecaymcp['vey'].values, dfdecaymcp['vex'].values)*1000.
@@ -168,8 +172,12 @@ if __name__ == '__main__':
     dfmcp = get_mcp_simple(args.file, args.iev, 'mcparticles').iloc[0]
     #pdgbase = ROOT.TDatabasePDG()
     inpart = pdgbase.GetParticle(int(dfmcp['pid']))
-    print("Incoming particle = {}, pdgcode = {}, charge = {}, mass = {}"\
-          .format(inpart.GetName(), inpart.PdgCode(), inpart.Charge(), inpart.Mass()))
+    if inpart:
+        print("Incoming particle = {}, pdgcode = {}, charge = {}, mass = {}"\
+              .format(inpart.GetName(), inpart.PdgCode(), inpart.Charge(), inpart.Mass()))
+    else:
+        print("Incoming particle unknown pdgcode {}"\
+              .format(int(dfmcp['pid'])))
     # neutral particle, no need to consider magnetic field
     if np.isclose(inpart.Charge(), 0., rtol=1e-5):
         vec = dfmcp[['px', 'py', 'pz']].values
-- 
GitLab