Show qPCR melting curves and PDF reports on the run page - #215
Merged
Conversation
Existing _MeltingCurve.csv uploads were ignored by the processor gate; parse them into per-well -dF%/dT sparklines and seed a synthetic vendor-shaped fixture so local runs can render the report. Co-authored-by: Cursor <cursoragent@cursor.com>
Report Data now renders the instrument's PDF export through the viewer TapeStation already uses, and the plate grids move to their own "Melting Curves" section. Clicking a well opens a modal with the full-resolution curve from the derivatives CSV, and a per-channel toggle switches both the grid and the modal between the derivative and the melt curve. The plate JSON carries both series so that toggle costs no download. Points are now [x, y] pairs rather than objects, which holds a 384-well run to 300 KB. Runs processed before this need reprocessing to draw. Plate geometry and well-selection state move out of the Aunty modules into shared ones now that two reports use them. Co-authored-by: Cursor <cursoragent@cursor.com>
The card stacked four 96-well grids and ran several screens tall. A dropdown now shows one channel at a time, carrying the well selection across so switching channels stays on the same well. Derivative and melt curve are no longer exclusive: either, both, or neither. Well tiles overlay them, each scaled to its own tile. The single-well chart gives each its own y-axis, tinted to match its line, because a derivative in %/°C and a percentage of peak fluorescence share no scale. The plate opens on the derivative alone — 96 tiles of two curves is a lot to scan — and the well chart opens on both. The well chart also marks the derivative peak, the melting temperature, with a dashed line. A flat trace gets no marker so an empty channel does not get one pinned to its first reading. Co-authored-by: Cursor <cursoragent@cursor.com>
The header spent two lines on "A7" over "Channel2 melting curve". One heading reading "Channel2 – A7" says the same thing and leaves the chart more room. What was the visible subtitle stays on as a screen-reader description, since the heading alone no longer says what is plotted and Radix expects a described dialog. Co-authored-by: Cursor <cursoragent@cursor.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The plate grids are the part of the page people interact with, so they now come first and the vendor PDF sits below them. The PDF keeps the "Report Data" title that every other run variant uses for its main section. The MCP run report is reordered to match. Co-authored-by: Cursor <cursoragent@cursor.com>
Review follow-ups on the melting-curve work: - The parser dropped blank header cells but kept reading data by the filtered index, so a blank column mid-header would have shifted every later well onto its neighbour's trace. Column positions now come from the unfiltered header. - `write_plate_json` writes the plate `parse_melting_curve_file` already built instead of rebuilding it from the blocks. - `PlateWellsProvider` tracks the selected well by label rather than by position, so switching a qPCR channel stays on the same well even when the channels report different well sets. - One case-insensitive matcher per melt artifact, shared by the run-page loader and the report-file filter. - `ReportDataShell` takes an optional `count` instead of a required `total` plus a `showCount` flag. The empty card is now an exported `ReportDataEmpty`, which the melting report renders itself since its card has nothing countable to put in the heading. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Azure Cielo qPCR runs export a melting-curve CSV that nothing read, and a PDF report that only showed up as a file link. Both now appear on the run page.
Changes
-dF/dT, and-dF%/dT. Peak finding is left to whoever reads it.Things a reviewer might want to know
[x, y]pairs instead of{"x": …, "y": …}objects, which is what keeps two series at roughly the size one series would have been.lib/runs/plate-wells.tsandcomponents/runs/plate-wells-provider.tsx, now that two reports use them. The Aunty report behaves the same.lambda/tests/fixtures/azure_cielo_qpcr_Report.pdfis a 1.8 KB synthetic two-page PDF, generated for the seed so the PDF section is testable locally. It is not a real lab export and says so on both pages.Test plan
make check-allnpm run test:unit(360 pass) anduv run pytest lambda/tests packages(400 pass)Made with Cursor