option for reading header
This commit is contained in:
6
creader/ClusterFile.py
Normal file
6
creader/ClusterFile.py
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
from . import ClusterFileReader
|
||||
|
||||
class ClusterFile(ClusterFileReader):
|
||||
def __init__(self, fname):
|
||||
super().__init__(fname)
|
63
creader/RawFile.py
Normal file
63
creader/RawFile.py
Normal 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
|
||||
|
||||
|
||||
|
||||
|
@ -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
14
creader/file_utils.py
Normal 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')
|
Reference in New Issue
Block a user