# Protein sequence specificity of published splice-event peptides

ProteinIQ reanalysis, September 19, 2026. This is an analysis of published
experimental results, not a new proteomics experiment or a census of confirmed
human protein isoforms.

## Question

How often does an observed peptide in Supplementary Table 3 of Sinitcyn et al.,
*Global detection of human variants and isoforms by deep proteome sequencing*
(Nature Biotechnology, 2023; DOI: 10.1038/s41587-023-01714-x), distinguish a
single complete sequence in GENCODE v50?

## Inputs and scope

The authors' workbook contains local splice-event records for six cell lines:
GM12878, HeLaS3, HepG2, hESC, HUVEC, and K562. We use Table S3 only. It is a
selected splice-event evidence table, not all peptides from the experiment,
not all human tissues, and not all known evidence for any protein.

`sources.json` records download URLs, SHA-256 hashes, file sizes, retrieval date,
and runtime versions. The release-specific GENCODE inputs are the full
`gencode.v50.pc_translations.fa.gz` file and chromosome-only
`gencode.v50.annotation.gtf.gz`. Large original inputs are downloaded separately
and are not duplicated in this website's public assets.

## Method

1. Read every row in Table S3. Pair each peptide with the spectrum count in the
   adjacent column, separately for each protease and event path. Include a
   peptide only if at least one unambiguous count is positive. Do not count a
   repeated row, enzyme, cell line, or event association as a new peptide.
2. Exclude cells with unequal peptide/count list lengths. Record them in
   `excluded-cells.csv.gz`; do not infer a missing delimiter or assign a pooled
   count to individual peptides. Evidence for the same sequence in other,
   well-formed cells remains eligible. Zero counts do not establish observation.
3. Group identical full amino acid sequences in the entire GENCODE translation
   FASTA, including alternative loci, patches, and other coding-transcript
   biotypes. Use this broad background to avoid claiming uniqueness simply
   because competing sequences were omitted.
4. Search for each peptide as a contiguous sequence substring. Our primary
   comparison treats isoleucine (I) and leucine (L) as indistinguishable. Count
   matching original full sequences, not transcript IDs. Full sequences that
   differ only by I/L still count as competing sequences. Also report literal
   exact matching as a sensitivity comparison. No other substitutions are allowed.
5. Separately mark sequences encoded by chromosome-only transcripts with
   `transcript_type "protein_coding"` and neither `cds_start_NF` nor `cds_end_NF`.
   This narrower target excludes incomplete coding models, NMD and other
   translation biotypes but retains their sequences as background competitors.
   This is a different denominator from the headline GENCODE distinct-translation
   count, which sums distinct translations per gene and removes certain partial
   models rather than excluding all of them. See GENCODE's
   [counting rules](https://ftp.ebi.ac.uk/pub/databases/gencode/_README_stats.txt).
6. Report target sequences with any match and with at least one individually
   sequence-specific peptide. As a stricter descriptive screen, also count
   targets with two different, individually unique peptides of at least nine
   residues, neither contained inside the other. I/L-equivalent peptides count
   once in this screen. This is **not** HPP certification: we do not reanalyse
   spectra, recalculate false discovery rates, validate synthetic peptides, or
   assess all other HPP evidence requirements.
7. Repeat the peptide category summary after requiring length of at least nine
   residues and at least two spectra in at least one well-formed source cell.
   This is a descriptive sensitivity screen, not a recalculated confidence score.

The `observations.csv.gz` spectrum counts reproduce individual source cells.
They must not be summed across repeated event associations as independent
experimental spectra. Local event totals in `summary.json` pool chromosome,
positions, gene, dimension, event code, and path positions across cell lines;
they are descriptive and do not reproduce the authors' RNA-filtered figure.

## Interpretation limits

A shared peptide does not identify one full isoform on its own. Conversely,
several shared peptides can sometimes resolve a sequence jointly; this pilot
does not perform that protein-inference problem. Peptides from different
molecules or cells do not prove that distant sequence features coexist on one
intact protein. A unique match remains sequence compatibility with a published
peptide identification, not independent experimental validation.

No match can reflect differences in annotation release, variants, or original
identification limitations. Absence of a match in this selected table is not
absence of protein expression. We do not divide these counts by all annotated
translations to estimate how much of the human proteome is experimentally known.
The authors' approximately 25,000 splice-junction peptide headline uses a
different scope; our extraction includes all positively counted peptide entries
associated with event paths in Table S3, without requiring a junction-spanning
coordinate test.

## Reproduction

Download `analyze.py` and `sources.json` into one folder. Install Python 3.12,
openpyxl 3.1.5, and pyahocorasick 2.2.0, then run:

```sh
python -m pip install openpyxl==3.1.5 pyahocorasick==2.2.0
python analyze.py --input-dir inputs --output-dir reproduced --fetch
```

The script downloads missing inputs, verifies their hashes, and writes the audit
tables and summary. Omit `--fetch` for an offline rerun after downloading the
three original inputs. Output gzip container timestamps may differ between runs;
the decompressed CSV content is deterministic.

- `observations.csv.gz`: positive, well-formed source observations with Excel row.
- `excluded-cells.csv.gz`: excluded malformed source cells.
- `peptides.csv.gz`: one row per observed peptide and its mapping results.
- `sequences.csv.gz`: one row per matched target sequence, identifiers and support
  flags. Unmatched target totals remain in the summary, not in this download.
- `summary.json`: aggregate counts.
- `sources.json`: input provenance and versions.
- `analyze.py`: complete analysis code.

Underlying peptide data: Sinitcyn et al., supplied with their CC BY 4.0 article.
Reference sequences and annotations: GENCODE v50. Please cite both sources when
reusing this reanalysis.
