Skip to content

Commit

Permalink
Merge 86d60a6 into 75c8875
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasberbuer committed Feb 28, 2020
2 parents 75c8875 + 86d60a6 commit e0d2616
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 108 deletions.
182 changes: 105 additions & 77 deletions src/vallenae/io/pridb.py
Expand Up @@ -329,26 +329,39 @@ def write_hit(self, hit: HitRecord):
Status flag
"""
parameter = self._parameter(hit.param_id)
return insert_from_dict(
self.connection(),
self._table_main,
{
"SetType": 2,
"Time": int(hit.time * self._timebase),
"Chan": int(hit.channel),
"Status": 0,
"ParamID": int(hit.param_id),
"Thr": int(hit.threshold * 1e6 / parameter["ADC_µV"]) if hit.threshold else None,
"Amp": int(hit.amplitude * 1e6 / parameter["ADC_µV"]),
"RiseT": int(hit.rise_time * self._timebase) if hit.rise_time else None,
"Dur": int(hit.duration * self._timebase),
"Eny": int(hit.energy / parameter["ADC_TE"]),
"SS": int(hit.signal_strength / parameter["ADC_SS"]),
"RMS": int(hit.rms * 1e6 / parameter["ADC_µV"] / 0.0065536),
"Counts": int(hit.counts) if hit.counts else None,
"TRAI": int(hit.trai) if hit.trai else None,
},
)
with self.connection() as con: # commit/rollback transaction
return insert_from_dict(
con,
self._table_main,
{
"SetType": 2,
"Time": int(hit.time * self._timebase),
"Chan": int(hit.channel),
"Status": 0,
"ParamID": int(hit.param_id),
"Thr": (
int(hit.threshold * 1e6 / parameter["ADC_µV"])
if hit.threshold else None
),
"Amp": int(hit.amplitude * 1e6 / parameter["ADC_µV"]),
"RiseT": (
int(hit.rise_time * self._timebase)
if hit.rise_time else None
),
"Dur": int(hit.duration * self._timebase),
"Eny": int(hit.energy / parameter["ADC_TE"]),
"SS": int(hit.signal_strength / parameter["ADC_SS"]),
"RMS": int(hit.rms * 1e6 / parameter["ADC_µV"] / 0.0065536),
"Counts": (
int(hit.counts)
if hit.counts else None
),
"TRAI": (
int(hit.trai)
if hit.trai else None
),
},
)

@require_write_access
@check_monotonic_time
Expand All @@ -364,24 +377,28 @@ def write_marker(self, marker: MarkerRecord):
Returns:
Index (SetID) of inserted row
"""
set_id = insert_from_dict(
self.connection(),
self._table_main,
{
"SetType": int(marker.set_type),
"Time": int(marker.time * self._timebase),
},
)
insert_from_dict(
self.connection(),
"ae_markers",
{
"SetID": int(set_id),
"Number": int(marker.number) if marker.number else None,
"Data": marker.data,
},
)
return set_id
with self.connection() as con: # commit/rollback transaction
set_id = insert_from_dict(
con,
self._table_main,
{
"SetType": int(marker.set_type),
"Time": int(marker.time * self._timebase),
},
)
insert_from_dict(
con,
"ae_markers",
{
"SetID": int(set_id),
"Number": (
int(marker.number)
if marker.number else None
),
"Data": marker.data,
},
)
return set_id

@require_write_access
@check_monotonic_time
Expand All @@ -401,24 +418,25 @@ def write_status(self, status: StatusRecord):
Status flag
"""
parameter = self._parameter(status.param_id)
return insert_from_dict(
self.connection(),
self._table_main,
{
"SetType": 3,
"Time": int(status.time * self._timebase),
"Chan": int(status.channel),
"Status": 0,
"ParamID": int(status.param_id),
"Thr": (
int(status.threshold * 1e6 / parameter["ADC_µV"])
if status.threshold else None
),
"Eny": int(status.energy / parameter["ADC_TE"]),
"SS": int(status.signal_strength / parameter["ADC_SS"]),
"RMS": int(status.rms * 1e6 / parameter["ADC_µV"] / 0.0065536),
},
)
with self.connection() as con: # commit/rollback transaction
return insert_from_dict(
con,
self._table_main,
{
"SetType": 3,
"Time": int(status.time * self._timebase),
"Chan": int(status.channel),
"Status": 0,
"ParamID": int(status.param_id),
"Thr": (
int(status.threshold * 1e6 / parameter["ADC_µV"])
if status.threshold else None
),
"Eny": int(status.energy / parameter["ADC_TE"]),
"SS": int(status.signal_strength / parameter["ADC_SS"]),
"RMS": int(status.rms * 1e6 / parameter["ADC_µV"] / 0.0065536),
},
)

@require_write_access
@check_monotonic_time
Expand All @@ -438,24 +456,34 @@ def write_parametric(self, parametric: ParametricRecord):
Status flag
"""
parameter = self._parameter(parametric.param_id)
return insert_from_dict(
self.connection(),
self._table_main,
{
"SetType": 1,
"Time": int(parametric.time * self._timebase),
"Status": 0,
"ParamID": int(parametric.param_id),
"PCTD": int(parametric.pctd) if parametric.pctd else None,
"PCTA": int(parametric.pcta) if parametric.pcta else None,
# Try to fetch PAx_mV conversion parameter, otherwise don't scale
"PA0": int(parametric.pa0 / parameter.get("PA0_mV", 1)) if parametric.pa0 else None,
"PA1": int(parametric.pa1 / parameter.get("PA1_mV", 1)) if parametric.pa1 else None,
"PA2": int(parametric.pa2 / parameter.get("PA2_mV", 1)) if parametric.pa2 else None,
"PA3": int(parametric.pa3 / parameter.get("PA3_mV", 1)) if parametric.pa3 else None,
"PA4": int(parametric.pa4 / parameter.get("PA4_mV", 1)) if parametric.pa4 else None,
"PA5": int(parametric.pa5 / parameter.get("PA5_mV", 1)) if parametric.pa5 else None,
"PA6": int(parametric.pa6 / parameter.get("PA6_mV", 1)) if parametric.pa6 else None,
"PA7": int(parametric.pa7 / parameter.get("PA7_mV", 1)) if parametric.pa7 else None,
},
)
def try_convert(value: Optional[int], conv_id: str):
"""Try to scale with conversion parameter 'PAx_mV', otherwise scale = 1."""
return int(value / parameter.get(conv_id, 1)) if value else None

with self.connection() as con: # commit/rollback transaction
return insert_from_dict(
con,
self._table_main,
{
"SetType": 1,
"Time": int(parametric.time * self._timebase),
"Status": 0,
"ParamID": int(parametric.param_id),
"PCTD": (
int(parametric.pctd)
if parametric.pctd else None
),
"PCTA": (
int(parametric.pcta)
if parametric.pcta else None
),
"PA0": try_convert(parametric.pa0, "PA0_mV"),
"PA1": try_convert(parametric.pa1, "PA1_mV"),
"PA2": try_convert(parametric.pa2, "PA2_mV"),
"PA3": try_convert(parametric.pa3, "PA3_mV"),
"PA4": try_convert(parametric.pa4, "PA4_mV"),
"PA5": try_convert(parametric.pa5, "PA5_mV"),
"PA6": try_convert(parametric.pa6, "PA6_mV"),
"PA7": try_convert(parametric.pa7, "PA7_mV"),
},
)
38 changes: 21 additions & 17 deletions src/vallenae/io/tradb.py
Expand Up @@ -258,20 +258,24 @@ def write(self, tra: TraRecord) -> int:
"""
# self._validate_and_update_time(tra.time)
parameter = self._parameter(tra.param_id)
return insert_from_dict(
self.connection(),
self._table_main,
{
"Time": int(tra.time * self._timebase),
"Chan": int(tra.channel),
"Status": 32768,
"ParamID": int(tra.param_id),
"Pretrigger": int(tra.pretrigger),
"Thr": int(tra.threshold * 1e6 / parameter["ADC_µV"]),
"SampleRate": int(tra.samplerate),
"Samples": int(tra.samples),
"DataFormat": int(self._data_format),
"Data": encode_data_blob(tra.data, self._data_format, parameter["TR_mV"]),
"TRAI": int(tra.trai) if tra.trai else None,
},
)
with self.connection() as con: # commit/rollback transaction
return insert_from_dict(
con,
self._table_main,
{
"Time": int(tra.time * self._timebase),
"Chan": int(tra.channel),
"Status": 32768,
"ParamID": int(tra.param_id),
"Pretrigger": int(tra.pretrigger),
"Thr": int(tra.threshold * 1e6 / parameter["ADC_µV"]),
"SampleRate": int(tra.samplerate),
"Samples": int(tra.samples),
"DataFormat": int(self._data_format),
"Data": encode_data_blob(tra.data, self._data_format, parameter["TR_mV"]),
"TRAI": (
int(tra.trai)
if tra.trai else None
),
},
)
28 changes: 14 additions & 14 deletions src/vallenae/io/trfdb.py
Expand Up @@ -96,18 +96,18 @@ def convert(value):
except (ValueError, TypeError):
return None

con = self.connection()
row_dict = {
key: convert(value)
for key, value in feature_set.features.items()
}
row_dict["TRAI"] = feature_set.trai
try:
with self.connection() as con: # commit/rollback transaction
row_dict = {
key: convert(value)
for key, value in feature_set.features.items()
}
row_dict["TRAI"] = feature_set.trai
try:
return insert_from_dict(con, self._table_main, row_dict)
except sqlite3.IntegrityError: # UNIQUE constraint, TRAI already exists
# update instead
return update_from_dict(con, self._table_main, row_dict, "TRAI")
except sqlite3.OperationalError: # missing column(s)
self._add_columns(self._table_main, list(row_dict.keys()), "REAL")
return self.write(feature_set) # try again
try:
return insert_from_dict(con, self._table_main, row_dict)
except sqlite3.IntegrityError: # UNIQUE constraint, TRAI already exists
# update instead
return update_from_dict(con, self._table_main, row_dict, "TRAI")
except sqlite3.OperationalError: # missing column(s)
self._add_columns(self._table_main, list(row_dict.keys()), "REAL")
return self.write(feature_set) # try again

0 comments on commit e0d2616

Please sign in to comment.