From 1d6ad9adb0f2be2aaffbde9af0e0e6526bb13b54 Mon Sep 17 00:00:00 2001 From: Alex Rubinsteyn Date: Wed, 28 Oct 2026 00:22:37 -0400 Subject: [PATCH] Retain an original SiHa RNA slice and pinned viral replay receipts --- examples/retain_siha_fixture.py | 97 +++++++++++++ isovar/__init__.py | 2 +- notes/siha-original-rna-fixture.md | 19 +++ notes/viral-coding-validation.md | 7 + tests/data/viral/siha/README.md | 63 ++++++++ .../data/viral/siha/full-input-replay.json.gz | Bin 0 -> 49441 bytes tests/data/viral/siha/manifest.json | 134 ++++++++++++++++++ tests/data/viral/siha/original-rna.bam | Bin 0 -> 2652 bytes tests/data/viral/siha/source-header.sam.gz | Bin 0 -> 15528 bytes tests/test_siha_original_rna.py | 79 +++++++++++ 10 files changed, 400 insertions(+), 1 deletion(-) create mode 100644 examples/retain_siha_fixture.py create mode 100644 notes/siha-original-rna-fixture.md create mode 100644 tests/data/viral/siha/README.md create mode 100644 tests/data/viral/siha/full-input-replay.json.gz create mode 100644 tests/data/viral/siha/manifest.json create mode 100644 tests/data/viral/siha/original-rna.bam create mode 100644 tests/data/viral/siha/source-header.sam.gz create mode 100644 tests/test_siha_original_rna.py diff --git a/examples/retain_siha_fixture.py b/examples/retain_siha_fixture.py new file mode 100644 index 00000000..ae49054e --- /dev/null +++ b/examples/retain_siha_fixture.py @@ -0,0 +1,97 @@ +"""Retain the existing SiHa regression slice, without downloading or realigning.""" + +import argparse +import gzip +from hashlib import sha256 +import json +from pathlib import Path +from tempfile import TemporaryDirectory + +import pysam + +from isovar import reconstruct_viral_sequences + + +TARGET = 'isovar_viral_a22b9eba3846fcf4496e065f' +SOURCE = 'SRR12650977:SiHa-1:bounded-original-RNA' +ROOT = Path(__file__).resolve().parents[1] +FASTA = ROOT / 'tests/data/viral/hpv16-GDC.fa.gz' + + +def digest(value): + return sha256(value).hexdigest() + + +def retain(bam_path, replay_path, output): + bam_path, replay_path, output = Path(bam_path), Path(replay_path), Path(output) + receipt_bytes = replay_path.read_bytes() + receipt = json.loads(receipt_bytes) + bam_sha = digest(bam_path.read_bytes()) + if receipt['input']['sha256'] != bam_sha: + raise ValueError('Original BAM does not match the historical replay receipt') + names = {row['fragment'][1] for row in receipt['support']['witnesses'] + if any(TARGET in segment['overlapping_sequences'] for segment in row['segments']) + and not row['competing_placement_outside_targets']} + output.mkdir(parents=True, exist_ok=False) + with pysam.AlignmentFile(str(bam_path)) as source: + header = source.header.to_dict() + sam = [record.to_string() for record in source if record.query_name in names] + (output / 'source-header.sam.gz').write_bytes(gzip.compress(str(source.header).encode(), mtime=0)) + header['SQ'] = [row for row in header['SQ'] if row['SN'] == 'HPV16'] + with pysam.AlignmentFile(str(output / 'original-rna.bam'), 'wb', header=header) as destination: + for text in sam: + # Parsing fails if a selected mate/alternative uses any other + # contig. No record is silently dropped or its fields changed. + record = pysam.AlignedSegment.fromstring(text, destination.header) + if record.to_string() != text: + raise ValueError('A selected original SAM record changed') + destination.write(record) + (output / 'full-input-replay.json.gz').write_bytes(gzip.compress(receipt_bytes, mtime=0)) + with TemporaryDirectory() as tmp: + tmp = Path(tmp) + fasta = tmp / 'reference.fa' + fasta.write_bytes(gzip.decompress(FASTA.read_bytes())) + with pysam.AlignmentFile(str(output / 'original-rna.bam')) as bam: + result = reconstruct_viral_sequences( + bam, genome_fasta=fasta, sample_id='SiHa-1', source=SOURCE, + contigs=['HPV16'], reference_profile=None, max_discovery_reads=500, + max_paths=32, reference_cache=tmp / 'reference-cache') + target, = [row for row in result['sequences'] if row['id'] == TARGET] + coding, = [row for row in target['coding'] + if any(ref['protein_id'] == 'NP_041326.1' for ref in row['reference_orfs'])] + manifest = dict( + source=dict(sample='GSM4785628', run='SRR12650977', project='PRJNA663801', series='GSE158033', + sample_name='SiHa-1', library_prefix_pairs=1000000, + url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM4785628'), + source_bam_sha256=bam_sha, source_result_sha256=digest(receipt_bytes), + source_fasta=receipt['reference']['files']['genome_fasta'], + selection='whole query-name groups with a segment overlapping the historical target; no recorded placement outside HPV16', + selected_query_names=sorted(names), selected_fragments=len(names), selected_records=len(sam), + sam_record_sha256=[digest(text.encode()) for text in sam], historical_target_id=TARGET, + replay=dict(source=SOURCE, contigs=['HPV16'], reference_profile=None, + max_discovery_reads=500, max_paths=32, min_overlap=30), + reference_fasta=dict(path='../hpv16-GDC.fa.gz', sha256=digest(FASTA.read_bytes()), + sequence_sha256=result['coding_reference']['contigs'][0]['sequence_sha256']), + orfdata=dict(version=result['coding_reference']['version'], + catalogue_sha256=result['coding_reference']['contigs'][0]['reference']['catalogue_sha256'], + source=result['coding_reference']['contigs'][0]['reference']['source']), + expected=dict(paths=len(result['sequences']), target_fragments=result['support']['target_fragments'], + target_rna_sha256=digest(target['sequence'].encode()), + target_rna_length=len(target['sequence']), target_protein_sha256=digest(coding['amino_acids'].encode()), + target_protein_length=len(coding['amino_acids']), + compatible_fragments=target['compatible_fragments'], + supporting_fragments=target['supporting_fragments'], + supporting_segments=target['supporting_segments']), + files={path.name: digest(path.read_bytes()) for path in sorted(output.iterdir())}) + (output / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n') + return manifest + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--bam', required=True) + parser.add_argument('--replay', required=True) + parser.add_argument('--output-dir', required=True) + args = parser.parse_args() + manifest = retain(args.bam, args.replay, args.output_dir) + print(json.dumps(manifest['expected'], indent=2)) diff --git a/isovar/__init__.py b/isovar/__init__.py index bbfb7e57..1196faae 100644 --- a/isovar/__init__.py +++ b/isovar/__init__.py @@ -10,7 +10,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.64.0" +__version__ = "1.64.1" from .allele_interpretations import reconcile_allele_interpretations diff --git a/notes/siha-original-rna-fixture.md b/notes/siha-original-rna-fixture.md new file mode 100644 index 00000000..003b3661 --- /dev/null +++ b/notes/siha-original-rna-fixture.md @@ -0,0 +1,19 @@ +# Original SiHa RNA fixture (#531) + +Retain a bounded original-read selection from the already acquired public +SRR12650977 competitive alignment. Select complete query-name groups whose +recorded placements are all on HPV16 and support the previously reported local +path. Preserve every selected SAM record, mate, flag, quality and alignment tag. +Remove only unused header sequence entries; retain the complete source header +and exact source BAM/result/reference hashes separately. + +Use the existing sequence-pinned HPV16 FASTA for a small custom-reference replay. +Do not claim that this slice repeats whole-library competition: retain the +separate historical full-input receipt (26 paths, 71 target fragments) and its +human-competitive placements. Pin the ORFdata catalogue and source CDS identities. +Assert the existing local RNA/coding prediction, bounded support and ambiguity; +do not infer protein expression, a full viral transcript or viral absence. + +Provide a deterministic extraction recipe, hashes, public-source attribution and +redistribution policy, plus one offline API/CLI regression. No reconstruction +algorithm or new biological sequence engineering is part of this change. diff --git a/notes/viral-coding-validation.md b/notes/viral-coding-validation.md index 3ff9d0c4..f80ca352 100644 --- a/notes/viral-coding-validation.md +++ b/notes/viral-coding-validation.md @@ -17,6 +17,13 @@ transcript or translation in the sample. ## Saved real RNA replay +The bounded original-read regression now lives in +[`tests/data/viral/siha`](../tests/data/viral/siha/README.md). Its 23-fragment +slice retains the same selected coding prediction, with an offline CLI test, +original SAM hashes, reference/catalogue pins and a deterministic extraction +recipe. The unchanged full-input receipt is stored separately; its 71-fragment +counts below are not counts from the bounded fixture. + The existing public SiHa-1 RNA experiment uses GSM4785628 / SRR12650977, project PRJNA663801. Its one-million-pair prefix and competitive human/viral alignment are described in [the recovery experiment](https://github.com/openvax/isovar/issues/514). diff --git a/tests/data/viral/siha/README.md b/tests/data/viral/siha/README.md new file mode 100644 index 00000000..f358fc36 --- /dev/null +++ b/tests/data/viral/siha/README.md @@ -0,0 +1,63 @@ +# Original SiHa-1 RNA regression slice + +These are original public RNA observations from **GSM4785628 / SRR12650977**, +GSE158033 / PRJNA663801, deposited by Zhi-Ming Zheng's NCI laboratory. The +[GEO record](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM4785628) +identifies total-RNA sequencing of the SiHa cervical-cancer cell line. + +`original-rna.bam` retains 46 original alignment records from 23 query-name +groups. The earlier experiment used a one-million-pair prefix and competitive +alignment to GDC GRCh38.d1.vd1. Its exact source BAM, full FASTA and replay +hashes are in `manifest.json`; `source-header.sam.gz` preserves the complete +alignment header and minimap2 command/version. No read sequence, quality, +mate flag, tag or selected alignment was changed. Only unused `@SQ` header +entries were removed. Canonical SAM hashes verify every retained record. + +Selection uses the saved full-input witnesses: include every query-name group +with at least one segment overlapping the existing 344-nt RNA path and no +recorded placement outside HPV16, then retain **all** original BAM records for +those names. The selection is intentionally conditioned on this one case. It +does not estimate viral abundance or test whole-library specificity/absence. +Three compatible fragments with competing human placements are outside this +slice; their evidence remains in the separate full-input receipt. + +The bounded replay yields seven RNA paths from 23 fragments. The selected +344-nt path reproduces the previously reported 98-aa E7 coding prediction and +its L28F difference from NP_041326.1. Its coding bases are tiled by original +RNA; no single segment spans the CDS. RNA strand and transcript completeness +remain unknown. A complete coding prediction is not evidence of protein +expression or an intact full-length viral transcript. + +`full-input-replay.json.gz` is the **unchanged historical receipt** for 26 paths +and 71 target fragments, made with ORFdata 0.29.0. It must not be compared as +though these were counts from the 23-fragment slice. The new replay separately +pins the tested ORFdata 0.39.1 catalogue, HPV16 GenBank source and reference +sequence hashes. A changed catalogue requires an explicit fixture review. + +The exact HPV16 FASTA already lives at `../hpv16-GDC.fa.gz`. The small replay +uses `custom` reference validation because unused human contigs are absent. +The original BAM header has no M5 checksum, and the replay preserves that +unverified-BAM flag; the manifest separately pins the historical alignment +reference. This is a subset replay, not a new competitive alignment. + +From the repository root: + +```sh +gzip -cd tests/data/viral/hpv16-GDC.fa.gz > /tmp/siha-reference.fa +isovar viral --bam tests/data/viral/siha/original-rna.bam \ + --genome-fasta /tmp/siha-reference.fa --sample-id SiHa-1 \ + --alignment-reference custom --contig HPV16 \ + --max-discovery-reads 500 --max-paths 32 --output-dir /tmp/siha-replay +``` + +To reproduce the extraction from the saved original inputs, run +`python examples/retain_siha_fixture.py --bam SOURCE.bam --replay FULL-REPLAY.json +--output-dir NEW-DIRECTORY`. It validates the original BAM checksum, preserves +all selected SAM fields, reruns the existing reconstruction and records hashes. +No download or realignment is performed. + +The [NCBI molecular-data policy](https://www.ncbi.nlm.nih.gov/home/about/policies/#data) +places no NCBI restrictions on molecular-data use or redistribution, while +retaining the submitter-rights caveat. This public molecular-data subset is +distributed with source attribution under that policy; it is not relicensed +as project-authored sequence data. The project's code remains Apache-2.0. diff --git a/tests/data/viral/siha/full-input-replay.json.gz b/tests/data/viral/siha/full-input-replay.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..1cb784664fe33c4cb1770fc31204a8113fef48cb GIT binary patch literal 49441 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 literal 0 HcmV?d00001 diff --git a/tests/data/viral/siha/manifest.json b/tests/data/viral/siha/manifest.json new file mode 100644 index 00000000..b5109e71 --- /dev/null +++ b/tests/data/viral/siha/manifest.json @@ -0,0 +1,134 @@ +{ + "source": { + "sample": "GSM4785628", + "run": "SRR12650977", + "project": "PRJNA663801", + "series": "GSE158033", + "sample_name": "SiHa-1", + "library_prefix_pairs": 1000000, + "url": "https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM4785628" + }, + "source_bam_sha256": "139748c3cd839c5edcf5358a693f52e7c0b59ecb9f0815bc90f260e87197208c", + "source_result_sha256": "cbcaa31f643cf926d506c3d72ce6a249aface8529282cdf2003f3cc0289413bd", + "source_fasta": { + "path": "/Users/iskander/code/isovar/.cache/gdc-viral-reconstruction-20261015/.cache/GRCh38.d1.vd1.fa", + "sha256": "fbde121e898f00cc064eaafe5acc58940d7fe069ad14d34acd40c5d675e6b69b" + }, + "selection": "whole query-name groups with a segment overlapping the historical target; no recorded placement outside HPV16", + "selected_query_names": [ + "SRR12650977.105184", + "SRR12650977.112911", + "SRR12650977.13194", + "SRR12650977.163131", + "SRR12650977.264995", + "SRR12650977.37489", + "SRR12650977.380150", + "SRR12650977.518757", + "SRR12650977.554077", + "SRR12650977.573820", + "SRR12650977.611919", + "SRR12650977.662935", + "SRR12650977.680139", + "SRR12650977.719197", + "SRR12650977.729885", + "SRR12650977.776851", + "SRR12650977.831234", + "SRR12650977.861040", + "SRR12650977.905283", + "SRR12650977.907102", + "SRR12650977.926848", + "SRR12650977.933521", + "SRR12650977.940631" + ], + "selected_fragments": 23, + "selected_records": 46, + "sam_record_sha256": [ + "c39a2662d5953928bc199e98b2a3d3a8bb6efadfeea6a3625d18d42bcf593f92", + "54307c50a2df00f1cbf054315636afd39f816e4bdf95ba1628b339770d64ddaa", + "d1ad9d246351777ed5372cb25c5b7620e38a6689da1cfc7ed0556a4c01ee7a2c", + "25e6f0e464225bd4f6d8719f9ab2dc758ed53bb6619e86a08489053890c9a255", + "88eb42896b1718c0ff8b41cb6502fc9daa53a6f34c5776429fd2814debe4c3bb", + "65eb9d337f1c857a8d22cab6d9128784ded6d987ab59f83834fed0528a66effd", + "b0967d52492f57f380ea1e4178b26d1306ec38078935e9c5aea82bdec2640970", + "1e49c02ac1b1f545cbff277618336ee0f97da94ac4988836687a9b81a4ecdb8f", + "7e95209b07fb8fae02f7a952a2ae9be60f647dbc9c6a86dd29c6b0bc58a085c9", + "05ec523ea3c7c09ef43ae3a62148967b23a07915dc50e91f91df2c96da26b66b", + "69ae9be13a408ce919fb096a10cbac404aa8f53a62d086531a86bb233620f57e", + "a6392c3cbd11d39da6ce166bdc3ff69aab2ec67b8b87fa84ec0526eadf5fa4dd", + "ef46960d4cd94cd4acaa9d8e32cd35564ed93451eb00b277112a25c61f30bdde", + "cca7327e618eba32d860e938b2321818fe37eb6467e4ecd703d3f904a7ead22d", + "237fd5d479c1d6a53c6b28b636d2e2b3c1578e6c087081ede94b81a472dc419a", + "c4c59ad46a4671b8054b638317f7e5b586bcda02167a17944545a3f3e5a3c5fc", + "9bff0a9016c1eb67f2bd7764953429d45a00032d2aa5835bd230334cdd1bd656", + "1fb3c6ff7d04ee5bd1a66a732deab5eaf33df50c9c7edc7a5bc216ad90144d32", + "dd1b111ae18b4196d9201131c2a82378ec2133f247316b1f049303a918ba5ac3", + "3a9923489179f73f81f443235a3cc8edb607e2670a28ef3066eb58698f5da049", + "dcda6ff668fd22d4668532ead8f6eac5f01a607b6251f3b6429040b0ac294c38", + "7ce226081eea7c352cbec707a1fe01234c848327c9276c5477a2f7b8439c15c2", + "96ff1a638949344335b03dfdae7bd80637ad5984921a37dbeae2ce0fcdbeb251", + "6a3c7c891f097012bdfb49630f4733a65d7bc5c70b6be3202ded209e63ec4c47", + "e24e74bad46ce3782718ce5c124b8b6ea61086b2caaa52a07d58d1cf4a1e3555", + "5a5ce8de5a1e6750487ff81472b6f5abc61a47a671ce96697d3fe6082e4ac633", + "b106eb4d5142e474d2c6d74b57b6a35368065e63df9c05f791e040fa9230d038", + "c16c6ad4122f5a076b9e1f48e26ab92e15fa29920b2cfb41f669835b7a3ea275", + "d42f71f2212b14341ce961018e49dc8edebaa992970a397c36999ea92215b543", + "d39f86ec364e31ca6a9f87c8876d0e322051bd11d9e11b5d508dd0dc3b0ba7b6", + "3dd492725c237e14f79032cd5019a485f80b1060308261b7981f8a04f14bb1a7", + "9636bc0d54974e9def4126531d97fc204b92bec0a2cd7b6f93df639e41ead6cb", + "1dcf9a5706c9a2a5ff1254f1994ffdcde9cdc754a59c65562b0209bb8c4d9492", + "7d110f48de93e5bd53a8c29e5277ee18ceb0d05a06df06e4f6d4df6e2112bdae", + "4d8844472b37a7e407b0c07e2ed028ae97bba610f8455349c4e58dba89a5aded", + "1e8f8c78104e7b79c079dec1fdf93b72ecc878b0441568a4978c20832e746ba2", + "62a95edf90d1a2e79e4f316f31e7273738e9cc4d1051b6f3adcc6441a01ec803", + "915e0206b9ba00b5e5ca5ae00e75152e69ba176ec793f8d939e01e7f6daedd63", + "cebd3f64a488f0a2087541e49afda1345bca162175741d8528ec4674abbcc2db", + "adc28951bc0b19c0269ef2e5dadada54ae3b450a50c860ef73f77e34f51d2f46", + "56df33cb182add9eb712f01f53a977d5b5eacc5c93a9f65d5e5c1048cb41e0db", + "8493a48063add8d31d0c34037c03cbd207d6403f3a50cf8e2463681b82b6f63f", + "6fad366c30d3835a0f9e8f1af1fdb26f809157ba90b3f0cbc2ef64f51c4df6b9", + "c0d5f6cac5a4e4aad4d4dec4cdded5140418b537e97043c6c4009cebe954585d", + "6633c6dc8b8d42ef90a30a12c9dc667113c42f8abd75a43e26d398581ef6eb8d", + "e2ddfed9d83a403dbe200c2622a19b86e34a83fcf07488e7231dd869041cef35" + ], + "historical_target_id": "isovar_viral_a22b9eba3846fcf4496e065f", + "replay": { + "source": "SRR12650977:SiHa-1:bounded-original-RNA", + "contigs": [ + "HPV16" + ], + "reference_profile": null, + "max_discovery_reads": 500, + "max_paths": 32, + "min_overlap": 30 + }, + "reference_fasta": { + "path": "../hpv16-GDC.fa.gz", + "sha256": "3359f936fb20d595b1ef3b91ee79909f4e5b0ef2dc67988e99fd32a5c9089609", + "sequence_sha256": "a9e63c3d3754c2b09942e16eac9f8c9092245b61647861e12397b7413b56e365" + }, + "orfdata": { + "version": "0.39.1", + "catalogue_sha256": "aca0c72948d4cda896d14b32203981bce4759e0c70212c05dca6f3d0e16ed4b4", + "source": { + "accession": "NC_001526.4", + "sha256": "282be442f226cc809fefbda616ac136b8d20dfde23fad09558f3f653a3de96a4", + "url": "https://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?id=NC_001526.4&db=nuccore&report=genbank&retmode=text" + } + }, + "expected": { + "paths": 7, + "target_fragments": 23, + "target_rna_sha256": "6d0ea9cd27f96aa0a60221aeea6de5e58694c242995044fb1f0a59e9ad187af8", + "target_rna_length": 344, + "target_protein_sha256": "8c9403c9751757f2bef8e48f03645658d0015519e2998dd0fdd012b81fe8a78b", + "target_protein_length": 98, + "compatible_fragments": 8, + "supporting_fragments": 23, + "supporting_segments": 33 + }, + "files": { + "full-input-replay.json.gz": "ded43f3a27676c14efcf0655f6a3533525e92d34256fd668f7a8d3d3dec60b76", + "original-rna.bam": "a0414a94c9a1cc77183492eb2cd8991167872f879b13e483f2e986a5d3869fae", + "source-header.sam.gz": "a27d48b1da3e3f299f3139bf2fc14f0cf551841271a3c974b8e1c346ede91299" + } +} diff --git a/tests/data/viral/siha/original-rna.bam b/tests/data/viral/siha/original-rna.bam new file mode 100644 index 0000000000000000000000000000000000000000..aad2416bedf00ea438dd46b2df6773ac29ae89c5 GIT binary patch literal 2652 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