From f3fdb3cdd306c22791a8c4199590c63a041f84cf Mon Sep 17 00:00:00 2001
From: Luzhan Yue <luzhan.yue@cern.ch>
Date: Tue, 30 Mar 2021 08:04:33 +0000
Subject: [PATCH] added yoda to root converter for Pythia ART tests

---
 .../EvgenProdTools/scripts/rootconvert.py     | 41 +++++++++++++++++++
 Generators/Pythia8_i/test/test_01_Z_tautau.sh | 12 +++---
 2 files changed, 48 insertions(+), 5 deletions(-)
 create mode 100755 Generators/EvgenProdTools/scripts/rootconvert.py

diff --git a/Generators/EvgenProdTools/scripts/rootconvert.py b/Generators/EvgenProdTools/scripts/rootconvert.py
new file mode 100755
index 000000000000..d3a3a253844a
--- /dev/null
+++ b/Generators/EvgenProdTools/scripts/rootconvert.py
@@ -0,0 +1,41 @@
+from array import array
+import ROOT as rt
+import yoda
+
+fName = 'MyOutput.yoda.gz'
+yodaAOs = yoda.read(fName)
+rtFile = rt.TFile(fName[:fName.find('.yoda')] + '.root', 'recreate')
+
+for name_slashes in yodaAOs:
+  name = name_slashes.replace("/", "_")
+  yodaAO = yodaAOs[name_slashes]  
+  rtAO = None
+
+  if 'Histo1D' in str(yodaAO):
+    rtAO = rt.TH1D(name, '', yodaAO.numBins(), array('d', yodaAO.xEdges()))
+  
+
+    rtAO.Sumw2()
+    rtErrs = rtAO.GetSumw2()
+    
+    for i in range(rtAO.GetNbinsX()):
+      
+      rtAO.SetBinContent(i + 1, yodaAO.bin(i).sumW())
+      rtErrs.AddAt(yodaAO.bin(i).sumW2(), i+1)
+      
+  elif 'Scatter2D' in str(yodaAO):
+    rtAO = rt.TGraphAsymmErrors(yodaAO.numPoints())
+    rtAO.SetName(name)
+    
+    for i in range(yodaAO.numPoints()):
+      x = yodaAO.point(i).x(); y = yodaAO.point(i).y()
+      xLo, xHi = yodaAO.point(i).xErrs()
+      yLo, yHi = yodaAO.point(i).yErrs()
+      rtAO.SetPoint(i, x, y)
+      rtAO.SetPointError(i, xLo, xHi, yLo, yHi)
+  else:
+    continue
+
+  rtAO.Write(name)
+
+rtFile.Close()
diff --git a/Generators/Pythia8_i/test/test_01_Z_tautau.sh b/Generators/Pythia8_i/test/test_01_Z_tautau.sh
index 0842307f6175..7ed9d24573d7 100755
--- a/Generators/Pythia8_i/test/test_01_Z_tautau.sh
+++ b/Generators/Pythia8_i/test/test_01_Z_tautau.sh
@@ -16,17 +16,19 @@ Gen_tf.py --ecmEnergy=13000. --maxEvents=10000 --firstEvent=-1 --randomSeed=1234
 
 echo "art-result:$? Gen_tf"
 
-python /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Pythia8i/rootconvert.py MyOutput.yoda.gz
+python rootconvert.py MyOutput.yoda.gz
 
-dcubeName = "Pythia8i"
+echo "art-result: $? convert"
+
+dcubeName="Pythia8i"
 dcubeXml="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Pythia8i/test_01_Z_tautau/config_Ztt.xml"
 dcubeRef="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Pythia8i/test_01_Z_tautau/MyOutput.root"
 
 #dcubeName="Pythia8i"
-#dcubeXml="/afs/cern.ch/user/l/lyue//Qualification_task_ART/Pythia_8/DcubeReference/test_01_Z_tautau/config_Ztt.xml"
-#dcubeRef="/afs/cern.ch/user/l/lyue//Qualification_task_ART/Pythia_8/DcubeReference/test_01_Z_tautau/MyOutput.root"
+#dcubeXml="/afs/cern.ch/user/l/lyue/Qualification_task_ART/Pythia_8/DcubeReference/test_01_Z_tautau/config_Ztt.xml"
+#dcubeRef="/afs/cern.ch/user/l/lyue/Qualification_task_ART/Pythia_8/result_grid/testscripts/test_01_Z_tautau/MyOutput.root"
 
 bash /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube $dcubeName MyOutput.root $dcubeXml $dcubeRef
 
-#yodadiff -o yodadiff MyOutput.yoda.gz ~/Qualification_task_ART/Pythia_8/result/Pythia_8/test_01_Z_tautau/MyOutput.yoda.gz     # use this for histogram comparison if one only care if they are exactly the same
+#yodadiff -o yodadiff MyOutput.yoda.gz ~/Qualification_task_ART/Pythia_8/result/Pythia_8/test_00_Zprime_1000_tt/MyOutput.yoda.gz     # use this for histogram comparison if one only care if they are exactly the same
 echo  "art-result: $? Dcube" 
-- 
GitLab