Skip to content

Commit e3a432a

Browse files
fix: Handle QuantStudio Stop Time and non-ASCII delta columns (#1203)
## Summary - Accept "Experiment Run Stop Time" as alias for "Experiment Run End Time" in header metadata parsing (some QuantStudio exports use this alternate field name) - Explicitly read `ΔΔCт - Fsigma` and `ΔΔCт + Fsigma` columns with valid Python identifiers before `get_unread()`, preventing `TypeError: Field names must be valid identifiers` when these flow through `make_dataclass()` ## Test plan - [x] Added `appbio_quantstudio_example10.xlsx` test file exercising both fixes (384-well, Comparative Ct with "Stop Time" and ΔΔCт columns) - [x] All 28 QuantStudio parser tests pass - [x] All 312 vendor discovery tests pass - [x] Lint clean 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1e99faf commit e3a432a

3 files changed

Lines changed: 2775 additions & 1 deletion

File tree

src/allotropy/parsers/appbio_quantstudio/appbio_quantstudio_structure.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ def create(data: SeriesData) -> Header:
8282
plate_well_count = int(plate_well_count_search.group())
8383

8484
return Header(
85-
measurement_time=data[str, "Experiment Run End Time"],
85+
measurement_time=data[
86+
str, ("Experiment Run End Time", "Experiment Run Stop Time")
87+
],
8688
plate_well_count=plate_well_count,
8789
experiment_type=assert_not_none(
8890
experiments_type_options.get(
@@ -474,6 +476,8 @@ def create_result(
474476
"expfail": data.get(str, "EXPFAIL"),
475477
"tholdfail": data.get(str, "THOLDFAIL"),
476478
"prfdrop": data.get(str, "PRFDROP"),
479+
"delta_delta_ct_minus_fsigma": data.get(float, "ΔΔCт - Fsigma"),
480+
"delta_delta_ct_plus_fsigma": data.get(float, "ΔΔCт + Fsigma"),
477481
**data.get_unread(
478482
skip={
479483
"Well",

0 commit comments

Comments
 (0)