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