Compare commits

...

3 Commits

4 changed files with 137 additions and 92 deletions

15
poetry.lock generated
View File

@ -142,6 +142,19 @@ files = [
docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] docs = ["ipython", "matplotlib", "numpydoc", "sphinx"]
tests = ["pytest", "pytest-cov", "pytest-xdist"] tests = ["pytest", "pytest-cov", "pytest-xdist"]
[[package]]
name = "dacite"
version = "1.8.1"
description = "Simple creation of data classes from dictionaries."
optional = false
python-versions = ">=3.6"
files = [
{file = "dacite-1.8.1-py3-none-any.whl", hash = "sha256:cc31ad6fdea1f49962ea42db9421772afe01ac5442380d9a99fcf3d188c61afe"},
]
[package.extras]
dev = ["black", "coveralls", "mypy", "pre-commit", "pylint", "pytest (>=5)", "pytest-benchmark", "pytest-cov"]
[[package]] [[package]]
name = "decorator" name = "decorator"
version = "5.1.1" version = "5.1.1"
@ -1235,4 +1248,4 @@ files = [
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.11, <3.13" python-versions = ">=3.11, <3.13"
content-hash = "4dc01682622b8aa364feedb15edecf3d3a9bffc9979e92bbbac118a43d0bbae8" content-hash = "f10a3cf403151d2c96c5c45a546860eaa3883d47cdc8d719a3e49ad0d4bb95d4"

View File

@ -34,6 +34,7 @@ pyqtgraph = "^0.13.7"
pytest = "^8.3.3" pytest = "^8.3.3"
pglive = "^0.7.6" pglive = "^0.7.6"
pyyaml = "^6.0.2" pyyaml = "^6.0.2"
dacite = "^1.8.1"
[tool.poetry.scripts] [tool.poetry.scripts]
pyrelacs = "pyrelacs.app:main" pyrelacs = "pyrelacs.app:main"

View File

@ -1,70 +1,71 @@
Settings: settings:
Repros: [Calibration, Sinus] repros: [calibration, sinus]
Path: ~/projects/pyrelacs/test/ path: ~/projects/pyrelacs/test/
Metadata: metadata:
Identifier (Name): Setup1 SetupName : Setup1
Maintainer : Your name Maintainer : Your name
Creator : Whoever Creator : Whoever
Location (Room) : virtual SetupLocation : virtual
Lab : XYZ-Lab Lab : XYZ-Lab
Institute : Your institute Institute : Your institute
University : Your university University : Your university
Address : Your institute's address Address : Your institute's address
PyRelacs: pyrelacs:
Data: data:
input: input:
inputsamplerate : {value: 20, unit: kHz} inputsamplerate : 20
inputsamplerateunit : kHz
# BufferSize # BufferSize
inputtracecapacity : 600s inputtracecapacity : 600
inputunipolar : false inputtracecapacityunit : s
inputtraceid : [ V-1, EOD, LocalEOD-1, GlobalEFieldStimulus ] inputunipolar : false
inputtracescale : [ 100, 1, 10, 1 ] inputtraceid : [ V-1, EOD, LocalEOD-1, GlobalEFieldStimulus ]
inputtraceunit : [ mV, mV, mV, mV ] inputtracescale : [ 100, 1, 10, 1 ]
inputtracedevice : [ ai-1, ai-1, ai-1, ai-1 ] inputtraceunit : [ mV, mV, mV, mV ]
inputtracechannel : [ 0, 2, 4, 6 ] inputtracedevice : [ ai-1, ai-1, ai-1, ai-1 ]
inputtracereference: [ ground, ground, ground, ground ] inputtracechannel : [ 0, 2, 4, 6 ]
inputtracemaxvalue : [ 100, 2, 2, 10 ] inputtracereference : [ ground, ground, ground, ground ]
inputtracecenter : [ true, false, false, false ] inputtracemaxvalue : [ 100, 2, 2, 10 ]
inputtracecenter : [ true, false, false, false ]
output: output:
outputtraceid : [ GlobalEField, GlobalEFieldAM, LocalEField, I ] outputtraceid : [ GlobalEField, GlobalEFieldAM, LocalEField, I ]
outputtracedevice : [ ao-1, ao-1, ao-1, ao-1 ] outputtracedevice : [ ao-1, ao-1, ao-1, ao-1 ]
outputtracechannel : [ 0, 1, 2, 3 ] outputtracechannel : [ 0, 1, 2, 3 ]
outputtracescale : [ 1, 1, 1, 1 ] outputtracescale : [ 1, 1, 1, 1 ]
outputtraceunit : [ V, V, V, V ] outputtraceunit : [ V, V, V, V ]
outputtracemaxrate : [ 40kHz, 40kHz, 40kHz, 40kHz ] outputtracemaxrate : [ 40, 40, 40, 40]
outputtracemodality: [ electric, electric, electric, current ] outputtracemaxrateunit : [kHz, kHz, kHz, kHz]
outputtracemodality : [ electric, electric, electric, current ]
SimData: sinus:
Sinus: inputsamplerate : 20
input: inputsamplerateunit : kHz
inputsamplerate : 20kHz # BufferSize
inputtracecapacity : 600s inputtracecapacity : 600
output: inputtracecapacityunit : s
outputtraceid : [ Sinus ] outputtraceid : [ Sinus ]
outputtracedevice : [ ao-0 ] outputtracedevice : [ ao-0 ]
outputtracechannel : [ 0 ] outputtracechannel : [ 0 ]
outputtracescale : [ 1 ] outputtracescale : [ 1 ]
outputtraceunit : [ V ] outputtraceunit : [ V ]
outputtracemaxrate : [ 40kHz ] outputtracemaxrate : [ 40 ]
outputtracemodality: [ electric ] outputtracemaxrateunit : [kHz]
outputtracemodality : [ electric ]
Devices: devices:
DAQFlexCore: DAQFlexCore:
AnalogOutputPins: [0,1] analogoutputpins : [0,1]
AnalogInputPinsHigh: [0,1,2,3,4,5,6,7] analoginputpinshigh : [0,1,2,3,4,5,6,7]
AnalogInputPinsLow: [1,2] analoginputpinslow : [1,2]
DigitalPins: [0,1,2,3] digitalpins : [0,1,2,3]
CS3310DIO: CS3310DIO:
ident : attdev-1 ident : attdev-1
strobepin : 6 strobepin : 6
datainpin : 5 datainpin : 5
dataoutpin: -1 dataoutpin : -1
cspin : 4 cspin : 4
mutepin : 7 mutepin : 7
zcenpin : -1 zcenpin : -1

View File

@ -2,86 +2,105 @@ from typing import TypedDict, Union
from dataclasses import dataclass from dataclasses import dataclass
import pathlib import pathlib
import dacite
import yaml import yaml
from dacite import from_dict
from IPython import embed from IPython import embed
from pyrelacs.util.logging import config_logging from pyrelacs.util.logging import config_logging
log = config_logging() log = config_logging()
class ValueUnit(TypedDict):
value: Union[int, float] @dataclass
class ValueUnit:
value: int
unit: str unit: str
@dataclass @dataclass
class Settings: class Settings:
Repros: list[str] repros: list[str]
Path: str path: str
@dataclass @dataclass
class Metadata: class Metadata:
Identifier: str SetupName: str
Maintainer: str Maintainer: str
Creator: str Creator: str
Location: str SetupLocation: str
Lab: str Lab: str
Institute: str Institute: str
University: str University: str
Address: str Address: str
@dataclass @dataclass
class Input: class Input:
inputsamplerate : ValueUnit inputsamplerate: int
inputsamplerateunit: str
# BufferSize # BufferSize
inputtracecapacity : ValueUnit inputtracecapacity: int
inputunipolar : bool inputtracecapacityunit: str
inputtraceid : list[str] inputunipolar: bool
inputtracescale : list[int] inputtraceid: list[str]
inputtraceunit : list[str] inputtracescale: list[int]
inputtracedevice : list[str] inputtraceunit: list[str]
inputtracechannel : list[int] inputtracedevice: list[str]
inputtracechannel: list[int]
inputtracereference: list[str] inputtracereference: list[str]
inputtracemaxvalue : list[int] inputtracemaxvalue: list[int]
inputtracecenter : list[bool] inputtracecenter: list[bool]
@dataclass @dataclass
class Output: class Output:
outputtraceid : list[str] outputtraceid: list[str]
outputtracedevice : list[str] outputtracedevice: list[str]
outputtracechannel : list[int] outputtracechannel: list[int]
outputtracescale : list[int] outputtracescale: list[int]
outputtraceunit : list[str] outputtraceunit: list[str]
outputtracemaxrate : list[ValueUnit] outputtracemaxrate: list[int]
outputtracemodality: list[str] outputtracemaxrateunit: list[str]
outputtracemodality: list[str]
@dataclass @dataclass
class Data: class Data:
input: Input input: Input
output: Output output: Output
@dataclass @dataclass
class SimData: class Sinus:
input: inputsamplerate: int
inputsamplerate : 20kHz inputsamplerateunit: str
inputtracecapacity : 600s # BufferSize
output: inputtracecapacity: int
outputtraceid : [ Sinus ] inputtracecapacityunit: str
outputtracedevice : [ ao-0 ] outputtraceid: list[str]
outputtracechannel : [ 0 ] outputtracedevice: list[str]
outputtracescale : [ 1 ] outputtracechannel: list[int]
outputtraceunit : [ V ] outputtracescale: list[int]
outputtracemaxrate : [ 40kHz ] outputtraceunit: list[str]
outputtracemodality: [ electric ] outputtracemaxrate: list[int]
outputtracemaxrateunit: list[str]
outputtracemodality: list[str]
@dataclass @dataclass
class PyRelacs: class PyRelacs:
data: Data data: Data
simdata: SimData sinus: Sinus
@dataclass @dataclass
class Config: class Config:
# Path: str settings: Settings
metadata: Metadata
pyrelacs: PyRelacs
@classmethod @classmethod
def load_config(cls): def load_config(cls):
@ -94,3 +113,14 @@ class Config:
return yaml.full_load(config_file) return yaml.full_load(config_file)
except yaml.YAMLError as e: except yaml.YAMLError as e:
raise yaml.YAMLError(f"Error parsing YAML file: {e}") raise yaml.YAMLError(f"Error parsing YAML file: {e}")
if __name__ == "__main__":
pyrelacs_config_path = pathlib.Path(__file__).parent.parent / "config.yaml"
log.debug(pyrelacs_config_path)
if not pyrelacs_config_path.is_file():
log.error("Config File was not found")
with open(pyrelacs_config_path, "r") as config_file:
data = yaml.full_load(config_file)
embed()
exit()