64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
|
|
import json
|
|
from pathlib import Path
|
|
from . import RawFileReader
|
|
|
|
|
|
class RawFile:
|
|
"""
|
|
Generic Raw File reader. Picks up settings from .json master file
|
|
Currently supports: Moench03 =)
|
|
"""
|
|
def __init__(self, fname):
|
|
self.findex = 0
|
|
self.fname = fname
|
|
fname = Path(fname)
|
|
if fname.suffix != '.json':
|
|
raise ValueError("Need a master file in json format")
|
|
|
|
with open(fname) as f:
|
|
self.master = json.load(f)
|
|
|
|
#Figure out which file to open
|
|
if self.master['Detector Type'] == 'Moench' and self.master['Analog Samples'] == 5000:
|
|
#TODO! pass settings to reader
|
|
self._parse_fname()
|
|
self.reader = RawFileReader(self.data_fname(0,0))
|
|
else:
|
|
raise ValueError('unsupported file')
|
|
|
|
def _parse_fname(self):
|
|
try:
|
|
base, _, run_id = self.fname.stem.rsplit("_", 2)
|
|
self.base = self.fname.parent / base
|
|
self.run_id = int(run_id)
|
|
except:
|
|
raise ValueError(f"Could not parse master file name: {self.fname}")
|
|
|
|
def data_fname(self, i, findex=0):
|
|
return Path(f"{self.base}_d{i}_f{findex}_{self.run_id}.raw")
|
|
|
|
|
|
def read(self):
|
|
return self.reader.read()
|
|
|
|
# Support iteration
|
|
def __iter__(self):
|
|
return self
|
|
|
|
def __next__(self):
|
|
frame = self.reader.read()
|
|
if frame.shape[0] == 0:
|
|
raise StopIteration
|
|
|
|
# Support with statement
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, exception_type, exception_value, traceback):
|
|
pass
|
|
|
|
|
|
|
|
|