Glass-box local periodicity-loss observable of the mRNA stacking profile for repeat-expansion disorders (DM1, Huntington, SCA1)
Project description
energorna
Glass-box local periodicity-loss observable of the mRNA stacking-energy profile, for
repeat-expansion disorders. Numpy-only, no ViennaRNA / GPU / API. Part of the QMetrika
Bio-IA thermodynamic engine (same Turner nearest-neighbor parameters as ef-synonymous).
English
The idea
In repeat-expansion diseases (myotonic dystrophy type 1, Huntington, SCA1, DM2…), age at onset is not set only by how many repeats there are, but by whether the repeat tract is interrupted. Interruptions (e.g. CCG in the CTG tract of DM1, CAA in the CAG tract of Huntington, CAT in SCA1) break the periodicity of the nearest-neighbor stacking energy profile Φ, disrupt the slipped-strand substrate that drives somatic instability, and delay onset.
energorna computes a single glass-box observable — periodicity_loss = 1 − ACF_period(Φ),
the loss of autocorrelation (at the motif period) of the Turner stacking profile — that
captures this. It auto-calibrates the period per motif (3 for trinucleotides, 4 for the
CCTG tetranucleotide) and, unlike simply counting interruptions, is sensitive to their
type and position.
Install
pip install energorna
Use — CLI
# pure (CTG)40 vs an interrupted allele
energorna score --repeat CTG --n 40
energorna score --seq CTGCTGCTG...CCGCTG... --motif CTG --json
energorna score --seq-file allele.fasta --motif CAG
Output shows the observable next to the traditional baselines:
motif CTG (period 3) · 62 units · longest uninterrupted run 51
periodicity_loss = 0.18xx <- observable
periodicity_loss (3') = 0.19xx
n_interruptions = 4 (count baseline)
fragmentation_index = 0.09xx (fragmentation baseline)
Use — Python
import energorna as ef
ef.calibrate_lag("CCTG") # -> 4 (auto-detects the motif period)
ef.periodicity_loss(seq, unit="CTG") # global observable
ef.periodicity_profile(seq, unit="CTG") # (pos, loss) resolved 5'->3'
ef.periodicity_loss_3prime(seq, unit="CTG") # 3'-weighted
ef.n_interruptions(seq, "CTG") # count baseline (to compare)
Why it matters (validation)
Across three diseases, periodicity_loss (or its axis, the longest uninterrupted stretch)
predicts age at onset better than counting repeats:
| Disease | Data | Result |
|---|---|---|
| DM1 | Pešović 2018, n=7 | periodicity vs onset residual r=+0.81 (LOO robust, bootstrap CI [+0.59,+0.99], perm p=0.027) vs count +0.53; captures type (CCG≫CTC) & position |
| Huntington | GeM-HD 2019 (published directions) | LOI < canonical < duplication — matches onset ordering |
| SCA1 | Menon 2013 Table S3, n=35 | longest uninterrupted stretch predicts onset R²=0.64 vs 0.24 for total size (r=−0.80, p=5×10⁻⁵) |
Honest scope
A biologically motivated correlate, not proven causality. Individual, interruption-typed cohorts at scale (OPTIMISTIC, Enroll-HD) are access-controlled; the claim is "better predictor than count on the available data, with a mechanistic hypothesis and falsifiable predictions" (correlation with measured somatic instability, UV melting, MSH3 binding). Research use only.
Español
La idea
En enfermedades de expansión de repeticiones (distrofia miotónica tipo 1, Huntington, SCA1, DM2…), la edad de inicio no la fija solo cuántas repeticiones hay, sino si el tracto está interrumpido. Las interrupciones (p. ej. CCG en el tracto CTG de DM1, CAA en el CAG de Huntington, CAT en SCA1) rompen la periodicidad del perfil de energía de apilamiento nearest-neighbor Φ, alteran el sustrato slipped-strand que dirige la inestabilidad somática y retrasan el inicio.
energorna calcula un único observable glass-box — periodicity_loss = 1 − ACF_periodo(Φ),
la pérdida de autocorrelación (al periodo del motivo) del perfil de apilamiento Turner —
que lo captura. Auto-calibra el periodo por motivo (3 en trinucleótidos, 4 en el
tetranucleótido CCTG) y, a diferencia de contar interrupciones, es sensible a su tipo
y posición.
Instalación
pip install energorna
Uso — CLI
energorna score --repeat CTG --n 40
energorna score --seq CTGCTG...CCGCTG... --motif CTG --json
energorna score --seq-file alelo.fasta --motif CAG
Uso — Python
import energorna as ef
ef.calibrate_lag("CCTG") # -> 4 (auto-detecta el periodo)
ef.periodicity_loss(seq, unit="CTG") # observable global
ef.periodicity_profile(seq, unit="CTG") # perfil (pos, pérdida) 5'->3'
ef.periodicity_loss_3prime(seq, unit="CTG") # ponderado 3'
Por qué importa (validación)
En tres enfermedades, periodicity_loss (o su eje, el tramo ininterrumpido más largo)
predice la edad de inicio mejor que contar repeticiones: DM1 (Pešović n=7, r=+0,81),
Huntington (direcciones publicadas, LOI<canónico<duplicación) y SCA1 (Menon 2013 n=35,
R²=0,64 vs 0,24 del tamaño total). Ver la tabla en la sección en inglés.
Alcance honesto
Es un correlato biológicamente motivado, no una causalidad demostrada. Los datos individuales tipados a escala son de acceso controlado; el claim es "mejor predictor que el conteo en los datos disponibles, con hipótesis mecanística y predicciones falsables". Uso solo para investigación (RUO).
Citation / Cita
Vilar Sánchez JA. energoRNA: local periodicity loss of the mRNA stacking profile predicts age at onset in repeat-expansion disorders. QMetrika Labs, 2026. Method covered by patent P202630522 (OEPM). Code under MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file energorna-0.1.0.tar.gz.
File metadata
- Download URL: energorna-0.1.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c20ccc252ae814fc68351e08ff50cbf05b3e4ac107d2104482856da42f37435
|
|
| MD5 |
3cba374524fdda719e732c3680c9a58d
|
|
| BLAKE2b-256 |
ffaaf4a69bc1b4bfc8d1f960bcb2569bc9df9719e41c0ade7fe2d3ac0659cb8c
|
Provenance
The following attestation bundles were made for energorna-0.1.0.tar.gz:
Publisher:
publish.yml on josevilar-qbioai/energorna
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
energorna-0.1.0.tar.gz -
Subject digest:
8c20ccc252ae814fc68351e08ff50cbf05b3e4ac107d2104482856da42f37435 - Sigstore transparency entry: 2213902118
- Sigstore integration time:
-
Permalink:
josevilar-qbioai/energorna@8c5cf8d1a60e9e6661080dfe5fec50ad0aa5a620 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/josevilar-qbioai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8c5cf8d1a60e9e6661080dfe5fec50ad0aa5a620 -
Trigger Event:
push
-
Statement type:
File details
Details for the file energorna-0.1.0-py3-none-any.whl.
File metadata
- Download URL: energorna-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31b6d17782c7616c4f77d436694b190174ff2d5546a2cccedfa7396109cde16f
|
|
| MD5 |
8b61ea229cd4de405456433bb1d89e5e
|
|
| BLAKE2b-256 |
49a9fe3a95034ad17e197d3d6a5fe8d4935a37130f945e497c5bd66eadf6faa7
|
Provenance
The following attestation bundles were made for energorna-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on josevilar-qbioai/energorna
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
energorna-0.1.0-py3-none-any.whl -
Subject digest:
31b6d17782c7616c4f77d436694b190174ff2d5546a2cccedfa7396109cde16f - Sigstore transparency entry: 2213902162
- Sigstore integration time:
-
Permalink:
josevilar-qbioai/energorna@8c5cf8d1a60e9e6661080dfe5fec50ad0aa5a620 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/josevilar-qbioai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8c5cf8d1a60e9e6661080dfe5fec50ad0aa5a620 -
Trigger Event:
push
-
Statement type: