Methods
How this database reaches its answers.
Every step below runs locally on the machine serving this site. Nothing is inferred from a model unless the page says so, and where a heuristic is used it is named as one.
Reference set construction
GENCODE v50 · GRCh38.p14
Pseudogene loci are extracted from the GENCODE Human Release 50 comprehensive annotation, retaining every entry whose gene_type matches a pseudogene biotype — processed, unprocessed, unitary, transcribed and the immunoglobulin/T-cell receptor pseudogene classes. Genomic intervals are taken at gene level and the sequence is sliced from the GRCh38.p14 primary assembly in gene orientation: loci annotated on the minus strand are reverse-complemented, so a record always reads 5′→3′ with respect to its own annotation.
The current build holds 14,702 loci / 41,493,729 bp, with a median locus of 703 bp and a long right tail (p95 ≈ 10.8 kb). That distribution matters downstream: most loci are too short to contain a long-range amplicon on their own, which is why the primer designer reaches into flanking genomic sequence (step 05).
Step 1 — exact-substring homology
Deterministic, alignment-free
The first search does not run BLAST. It reports the longest exact substring shared between the submitted query and the local FASTA collection, together with every locus achieving that length. Being exact and alignment-free, the result is fully reproducible and carries no scoring-matrix or gap-penalty assumptions.
Implementation: all records are concatenated into a single searchable string separated by a character that cannot occur in sequence, so a match can never span two loci. The longest shared substring is then located by binary search on length using the C-level substring primitive — "does a substring of length L occur anywhere" is monotonic in L, so the maximum is found in a handful of probes rather than by walking every base in the interpreter. A budget-bounded fallback to an exhaustive suffix-automaton scan preserves exactness for pathological queries.
Step 2 — full-gene BLASTN
NCBI BLAST+ against a local database
Opening a locus and requesting BLAST uses that record's complete FASTA sequence as the query against a local makeblastdb nucleotide database built from the same 14,702 records. Parameters: -task blastn, -dust no, -soft_masking false, -evalue 10, -max_hsps 1. Masking is disabled deliberately — repeat-masking a pseudogene query would suppress precisely the homology under investigation.
Hits are rendered as a BLAST-style pairwise report with dots marking identities, so every position where a paralogue differs is visible as a literal character.
Step 3 — specificity profiling
Per-position discrimination from the alignment table
Each reported HSP is walked base by base to build a per-position score across the query locus: a position scores toward 1.0 as more paralogues mismatch it (or fail to align there at all) and toward 0.0 as more of them match exactly. Positions with no paralogue coverage score 1.0 — no locally known homologue could compete with a primer seated there.
Regions are then called on the density of discriminating positions in a sliding 30-nt window, not on runs of consecutive differences. Divergence between a gene and its pseudogene is scattered single bases; requiring consecutive differing positions finds essentially nothing on real data. Each region is reported as the probability that a primer's terminal 5 nt covers at least one discriminating base, 1 − (1 − d)⁵ for window density d, which is the quantity that actually governs allele-specific extension.
Step 4 — nested assay design
Fixed layout, automatic target
The assay layout is not user-selectable. Round 1 is a long-range outer pair spanning as much as the available sequence allows up to 20,000 bp; round 2 is an inner pair whose product is always 500–900 bp, nested inside round 1 and centred on the most discriminating window.
Because most loci are shorter than a long-range amplicon, the outer pair is placed on a canvas that extends beyond the locus: flanking GRCh38 sequence is read by byte offset through the FASTA .fai index, reverse-complemented when the locus is on the minus strand. Flanking sequence carries no paralogue alignment and therefore scores as fully specific — which is both literally true of the local homology table and the reason unique flanking sequence is where a pseudogene-aware long-range PCR belongs.
Candidates are hard-filtered on Tm, GC and terminal-repeat runs, then ranked with 3′-end specificity weighted above mean specificity, since a 3′ mismatch is what blocks extension. Where a round 1 primer already sits close enough to yield a valid 500–900 bp product on its own, it is reused and only the single missing oligo is designed (hemi-nested).
Tm is a Wallace-rule / GC% approximation, not a nearest-neighbour calculation, and specificity is only ever as good as the local homology table it was learned from. Secondary structure and cross-locus off-target binding outside this database are not modelled. Confirm finalists in dedicated primer QC before ordering.
Step 5 — literature grounding
Ψ Library retrieval
The assistant answers only from open-access full text harvested from Europe PMC, chunked into overlapping passages and indexed with SQLite FTS5 (BM25). Every stored article must contain, in its own full text, pseudogene, PCR, primer and at least one gene symbol; the check runs against the retrieved article rather than the search index.
A question is matched against that index before any model is contacted. If no single passage carries enough of the question's own content words, the request is refused in the application and no inference call is made. Answers must cite passages by number, and an answer citing nothing is displayed as unverified rather than as fact.
ReproducibilitySequence retrieval, homology search, specificity profiling and primer placement are deterministic: the same input and the same reference build return the same result. Only the literature assistant involves a language model, and its retrieval and refusal steps run locally.