From a595615b4fac7d01aa08d638b664baf7d4f524e0 Mon Sep 17 00:00:00 2001
From: Yngve Levinsen <yngve.levinsen@esss.se>
Date: Wed, 15 Aug 2018 11:32:11 +0200
Subject: [PATCH] minor improvement of ibsimu2tw script

---
 scripts/ibsimu2tw | 64 +++++++++++++++--------------------------------
 1 file changed, 20 insertions(+), 44 deletions(-)

diff --git a/scripts/ibsimu2tw b/scripts/ibsimu2tw
index 16349f5..4ac6f6e 100755
--- a/scripts/ibsimu2tw
+++ b/scripts/ibsimu2tw
@@ -17,9 +17,14 @@
     R. Miyamoto (2018.06.25)
 '''
 
-import argparse
+#-- Libraries
+
+import numpy as np
+import sys
 import os
-import subprocess
+import argparse
+from ess import TraceWin
+print(TraceWin.__file__)
 
 parser = argparse.ArgumentParser(description="Converts IBSimu output to TraceWin dst format")
 
@@ -60,14 +65,6 @@ if args.h3:
 
 #W_cut = 0.01  # Filter for W [MeV]. Only for experts.
 
-##################################################
-# No need to change below
-##################################################
-
-#-- Libraries
-
-import numpy as np
-import sys
 
 #-- Function for saving
 
@@ -77,19 +74,9 @@ def save_dst(file_name, x6, Ibeam, mc2=938.272, freq=352.21):
         - Coordinates: (  x,  x',  y,  y', phi,   W)
         - Units      : ( cm, rad, cm, rad, rad, MeV)
     '''
-    import numpy, struct
-
-    x6 = numpy.reshape(x6, (numpy.size(x6)))    
-    with open(file_name, 'wb') as file:
-        out  = struct.pack('b'                  , 125        )
-        out += struct.pack('b'                  , 100        )
-        out += struct.pack('i'                  , len(x6)//6 )
-        out += struct.pack('d'                  , Ibeam      )
-        out += struct.pack('d'                  , freq       )
-        out += struct.pack('b'                  , 125        )  # Typo in the manual !!!!
-        out += struct.pack('{}d'.format(len(x6)), *x6        )
-        out += struct.pack('d'                  , mc2        )
-        file.write(out)
+    dst=TraceWin.dst(Ib=Ibeam,freq=freq,mass=mc2)
+    dst.append_many(x6)
+    dst.save(file_name)
 
 #-- Parameters from the header
 
@@ -105,47 +92,36 @@ data = np.loadtxt(file_name_in, skiprows=8)
 
 #-- Adjust coordinates and units
 
-data[:,1] *= 1e2  # x  : m => cm
-data[:,3] *= 1e2  # y  : m => cm
 data[:,9] *= 1e3  # mc2: GeV => MeV
 data[:,6]  = np.sqrt(data[:,9]**2+(1.0+data[:,2]**2+data[:,4]**2)*(cp*(1.0+data[:,6]))**2)-data[:,9]  # dpz => W
 
 try   : data = data[np.where(np.abs(data[:,6]-0.075) < W_cut)]
 except: pass
 
-#-- Separate species
+#-- Separate species, save outputs
 
 mc2_lst = sorted(list(set(list(data[:,9]))))
 
 x6_H1    = data[np.where(data[:,9] == mc2_lst[0])]
 x6_H1    = x6_H1[:,1:7]
-Ibeam_H1 = Ibeam*len(x6_H1)/len(data)
+Ibeam_H1 = Ibeam*sum(x6_H1[8])/len(data)
 
-try:
+save_dst(        file_name_out_H1, x6_H1, Ibeam_H1, 1.0*mc2_H1, freq)
+
+
+if args.h2:
     x6_H2    = data[np.where(data[:,9] == mc2_lst[1])]
     x6_H2    = x6_H2[:,1:7]
     Ibeam_H2 = Ibeam*len(x6_H2)/len(data)
-except:
-    pass
 
-try:
+    save_dst(file_name_out_H2, x6_H2, Ibeam_H2, 2.0*mc2_H1, freq)
+
+if args.h3:
     x6_H3    = data[np.where(data[:,9] == mc2_lst[2])]
     x6_H3    = x6_H3[:,1:7]
     Ibeam_H3 = Ibeam*len(x6_H3)/len(data)
-except:
-    pass
 
-#-- Save outputs
-
-save_dst(        file_name_out_H1, x6_H1, Ibeam_H1, 1.0*mc2_H1, freq)
-
-try   : save_dst(file_name_out_H2, x6_H2, Ibeam_H2, 2.0*mc2_H1, freq)
-except: pass
-try   : save_dst(file_name_out_H3, x6_H3, Ibeam_H3, 3.0*mc2_H1, freq)
-except: pass
+    save_dst(file_name_out_H3, x6_H3, Ibeam_H3, 3.0*mc2_H1, freq)
 
 #-- Ending
 
-sys.exit()
-
-#--
-- 
GitLab