option for reading header

This commit is contained in:
Erik Frojdh
2023-06-02 16:52:14 +02:00
parent e43899cca8
commit 46a697cfb7
11 changed files with 198 additions and 16 deletions

6
creader/ClusterFile.py Normal file
View File

@ -0,0 +1,6 @@
from . import ClusterFileReader
class ClusterFile(ClusterFileReader):
def __init__(self, fname):
super().__init__(fname)

63
creader/RawFile.py Normal file
View File

@ -0,0 +1,63 @@
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

View File

@ -1,2 +1,5 @@
#Make everything from the C extension available
from _creader import *
from _creader import *
from .file_utils import open_file
from .ClusterFile import ClusterFile

14
creader/file_utils.py Normal file
View File

@ -0,0 +1,14 @@
from .ClusterFile import ClusterFile
from .RawFile import RawFile
from pathlib import Path
def open_file(fname):
"""Convenience function to open files"""
fname = Path(fname)
if fname.suffix == '.clust':
return ClusterFile(fname)
elif fname.suffix == '.json':
return RawFile(fname)
else:
raise ValueError('unsupported file type')