diff --git a/scripts/qp_exc_energy.py b/scripts/qp_exc_energy.py index ba9d7917..7e7f1d67 100755 --- a/scripts/qp_exc_energy.py +++ b/scripts/qp_exc_energy.py @@ -42,13 +42,15 @@ import sys, os import scipy import scipy.stats from math import sqrt, gamma, exp -import json +import qp_json -def read_data(filename,state): +def read_data(ezfio_filename,state): """ Read energies and PT2 from input file """ - with open(filename,'r') as f: - lines = json.load(f)['fci'] + data = qp_json.load_last(ezfio_filename) + for method in data.keys(): + x = data[method] + lines = x print(f"State: {state}") @@ -138,15 +140,15 @@ def compute(data): return mu, err, bias, p -filename = sys.argv[1] -print(filename) +ezfio_filename = sys.argv[1] +print(ezfio_filename) if len(sys.argv) > 2: state = int(sys.argv[2]) else: state = 1 -data = read_data(filename,state) +data = read_data(ezfio_filename,state) mu, err, bias, _ = compute(data) -print(" %s: %8.3f +/- %5.3f eV\n"%(filename, mu, err)) +print(" %s: %8.3f +/- %5.3f eV\n"%(ezfio_filename, mu, err)) import numpy as np A = np.array( [ [ data[-1][1], 1. ], diff --git a/scripts/utility/qp_json.py b/scripts/utility/qp_json.py new file mode 100644 index 00000000..09ffe1be --- /dev/null +++ b/scripts/utility/qp_json.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +import os +import json + +def fix_json(s): + """Properly termitates an incomplete JSON file""" + + s = s.replace(' ','') + s = s.replace('\n','') + s = s.replace('\t','') + s = s.replace(",{}",'') + tmp = [ c for c in s if c in "[]{}" ] + tmp = "".join(tmp) + tmp_old = "" + while tmp != tmp_old: + tmp_old = tmp + tmp = tmp.replace("{}","") + tmp = tmp.replace("[]","") + while s[-1] in [ ',', '\n', ' ', '\t' ]: + s = s[:-1] + tmp = [ c for c in tmp ] + tmp.reverse() + for c in tmp: + if c == '[': s += "]" + elif c == '{': s += "}" + return s + + +def load(filename): + """Loads a JSON file after calling the fix_json function.""" + with open(filename,'r') as f: + data = f.read() + new_data = fix_json(data) + return json.loads(new_data) + + +def load_all(ezfio_filename): + """Loads all JSON files of an EZFIO.""" + d = {} + prefix = ezfio_filename+'/json/' + for filename in [ x for x in os.listdir(prefix) if x.endswith(".json")]: + d[filename] = load(prefix+filename) + return d + + +def load_last(ezfio_filename): + """Loads last JSON file of an EZFIO.""" + d = {} + prefix = ezfio_filename+'/json/' + l = [ x for x in os.listdir(prefix) if x.endswith(".json")] + l.sort() + filename = l[-1] + print(filename) + return load(prefix+filename) + + +def fix(ezfio_filename): + """Fixes all JSON files in an EZFIO.""" + d = load_all(ezfio_filename) + prefix = ezfio_filename+'/json/' + for filename in d.keys(): + with open(prefix+filename, 'w') as json_file: + json.dump(d[filename], json_file) + + +