biotender-max/sec-report
SEC (size-exclusion chromatography) analysis with peak detection, oligomer classification, and publication-quality PDF report generation via Typst templates. Triggers on "SEC", "size exclusion", "chromatography", "oligomer analysis", "protein assembly", "SEC report".
npx skills add https://github.com/BioTender-max/awesome-bio-agent-skills --skill sec-report
> CRITICAL: This skill provides a fully automated pipeline script (sec_pipeline.py) that produces a publication-quality PDF with text, tables, figures, and analysis. You MUST use this pipeline. Do NOT write your own analysis script. Do NOT generate figures without accompanying text. Do NOT produce a PDF that only contains images — the pipeline generates a complete scientific report with Background, Methods, Results (including text interpretation for each construct), Discussion, and Conclusions sections.
> If you write your own code instead of running sec_pipeline.py, the report will be of significantly lower quality. The pipeline includes a professional Typst template engine that generates reports comparable to Biomni/Phylo output quality.
Analyze SEC chromatogram data files and images, detect peaks, classify oligomeric states, and generate a publication-quality PDF report with professional styling (colored section bands, styled tables, callout boxes, page headers/footers, and full-text analysis for every section).
Before running the pipeline, present a brief analysis plan to the user in the chat so they can confirm or adjust parameters. This is NOT a UI button — just a chat message.
Step 0 — Scan the data and present the plan in chat:
After locating the user's data files, send a message like this:
SEC Analysis Plan
Found N data files and M image files.
I will run the automated SEC pipeline which:
Parameters: void volume = 8.0 mL (Superdex 200 10/300 GL). Reply if you want to change anything, otherwise I'll proceed.
If the user does not object within ~5 seconds or says anything affirmative, proceed immediately. Do NOT wait indefinitely.
Follow these steps exactly. Do NOT skip the pipeline script.
Step 1 — Install dependencies (if not present):
pip install typst 2>/dev/null || pip install --user typst
pip install fpdf2 2>/dev/null || pip install --user fpdf2
Step 2 — Locate the uploaded data:
Find the user's uploaded file (ZIP, CSV, or directory) under /workspace/group/.
Step 3 — Run the pipeline script:
cd /home/node/.claude/skills/sec-report
python3 sec_pipeline.py \
--input <path-to-uploaded-data-or-zip> \
--output /workspace/group/sec_analysis/output
The script accepts either a ZIP file or a directory as --input. It handles extraction, parsing, peak detection, figure generation, and PDF report building automatically. The pipeline will use the Typst template engine for publication-quality output; if Typst is unavailable, it falls back to fpdf2.
By default, the pipeline now produces a compact user-facing report. If you ever need the older exhaustive style for debugging or appendix generation, pass:
--report-profile full
Step 4 — Send the PDF report to the user via send_image MCP tool:
file_path: /workspace/group/sec_analysis/output/SEC_Analysis_Report.pdf
caption: "SEC Analysis Report"
Step 5 — Also send the ranking figure:
file_path: /workspace/group/sec_analysis/output/figures/ranking_summary.png
caption: "Construct Quality Ranking"
Step 6 — Summarize key findings in chat based on the pipeline's terminal output and the generated analysis_summary.json.
| Input | Format | Required |
|-------|--------|----------|
| SEC data files | CSV, TSV, TXT, XLSX | At least one |
| SEC plot images | PNG, JPG, TIFF | Optional |
| ZIP archive | .zip containing above | Optional |
The parser auto-detects columns. Common formats:
Volume (mL),UV 280nm (mAU)
0.00,0.5
0.01,0.5
...
or tab-separated, or with headers like: ml, mAU, elution, absorbance, A280, UV280
sec_analysis/output/
├── SEC_Analysis_Report.pdf # Complete PDF report with figures
├── figures/
│ ├── <construct>_annotated.png # Annotated chromatogram per construct
│ ├── comparison_overlay.png # Normalized overlay (if >1 construct)
│ └── ranking_summary.png # Quality ranking bar chart
└── analysis_summary.json # Machine-readable results
scipy.signal.find_peaks with adaptive height/prominence thresholdsscipy.signal.peak_widths| Elution Region | Classification | Rationale |
|----------------|---------------|-----------|
| Near void volume (V0) | Aggregate | Too large for column resolution |
| V0 + 0.5–2.5 mL | Large Oligomer | High-MW assemblies (rings, etc.) |
| V0 + 2.5–4.5 mL | Oligomer | Trimers, tetramers |
| V0 + 4.5–6.5 mL | Dimer | Heterodimer range |
| V0 + 6.5–9.0 mL | Monomer | Individual chains |
| Beyond | Small Molecule | Buffer components, degradation |
Default V0 = 8.0 mL (typical Superdex 200 10/300 GL). Override with --void-volume.
sec_pipeline.py — the pipeline is tested and produces standardized, reproducible outputs including PDF; manual analysis will miss features and produce inconsistent resultsIf sec_pipeline.py fails:
--void-volume explicitlyfpdf2 is missing, install it first (Step 1)Only if the pipeline cannot handle the user's specific data format after troubleshooting should you fall back to manual analysis, and in that case explain why the pipeline was insufficient.
structural-biology — For 3D structure analysis of assembled proteinsproteomics — For mass spec validation of oligomeric statesbio-manuscript-pipeline — For writing full manuscripts incorporating SEC resultssds-gel-review — For complementary SDS-PAGE analysisbio-figure-design — For designing publication figures from SEC dataTake biotender-max/sec-report from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.