first idea for polarization parallel phases
This commit is contained in:
67
phases/dataconverter.py
Executable file
67
phases/dataconverter.py
Executable file
@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("finput", help="name of excel file to load")
|
||||
parser.add_argument("foutput", help="name of json file to write")
|
||||
clargs = parser.parse_args()
|
||||
|
||||
|
||||
from collections import defaultdict
|
||||
import pandas as pd
|
||||
from slic.utils import json_save
|
||||
|
||||
|
||||
def load(fn, nparams=6, skip_cols=3):
|
||||
engine = "xlrd" if fn.endswith(".xls") else "openpyxl"
|
||||
df = pd.read_excel(fn, engine=engine)
|
||||
|
||||
header = df.columns
|
||||
data = df.values
|
||||
|
||||
nrows, ncols = data.shape
|
||||
assert nrows % nparams == 0
|
||||
nunds = nrows // nparams
|
||||
|
||||
res = defaultdict(dict)
|
||||
for i in range(nunds):
|
||||
start = i * nparams
|
||||
stop = start + nparams
|
||||
|
||||
und_name = data[start, 1]
|
||||
idata = data[start:stop, 1:]
|
||||
|
||||
for j in range(skip_cols, ncols):
|
||||
param_name = header[j]
|
||||
jdata = idata[:, j-1].astype(float)
|
||||
res[und_name][param_name] = list(jdata)
|
||||
|
||||
return dict(**res)
|
||||
|
||||
|
||||
def print_overview(data):
|
||||
unds = data.keys()
|
||||
unds = sorted(unds)
|
||||
|
||||
params = data[unds[0]].keys()
|
||||
params = sorted(params)
|
||||
|
||||
nunds = len(unds)
|
||||
nparams = len(params)
|
||||
|
||||
print(f"read {nparams} parameters for {nunds} undulators")
|
||||
print("\nUndulators:", ", ".join(unds))
|
||||
print("\nParameters:", ", ".join(params))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = load(clargs.finput)
|
||||
print_overview(data)
|
||||
json_save(data, clargs.foutput)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user