molecular-annotation
Python bindings for molecular annotation tags in SAM/BAM/CRAM files.
This package provides a Python interface to parse and generate MA/AQ/AN tags according to the Molecular Annotation specification.
Installation
pip install molecular-annotation
Usage
from molecular_annotation import MolecularAnnotations
# Parse from MA tag string (positions in the tag are 1-based per spec)
# If annotation type has quality (P, Q, PQ, etc.), must provide aq array
ma_string = "1000;msp+P:100-50,200-60"
aq_array = [40, 35] # Quality scores for the 2 msp annotations
annotations = MolecularAnnotations.from_tags(ma_string, aq=aq_array)
# Parse without quality scores
ma_string = "1000;nuc+:100-147,250-147"
annotations = MolecularAnnotations.from_tags(ma_string)
# Access properties
print(annotations.read_length) # 1000
print(annotations.total_annotation_count()) # 2
# Generate tag values
print(annotations.to_ma_string()) # "1000;nuc+:100-147,250-147"
print(annotations.to_aq_array()) # None (no quality for nuc type)
print(annotations.to_an_string()) # None (no names)
Building Annotations
All API coordinates are 0-based half-open [start, end). The MA tag string uses 1-based positions per spec, and conversion is handled automatically.
from molecular_annotation import MolecularAnnotations
# Create empty container
annotations = MolecularAnnotations(1000) # read length
# Add annotations with a single quality value per annotation
annotations.add_annotations(
'msp', '+', 'P', # type_name, strand, quality_spec
starts=[100, 200, 350], # 0-based start positions
lengths=[50, 60, 45], # annotation lengths
qualities=[40, 35, 38] # one quality score per annotation
)
# Add annotations without quality
annotations.add_annotations(
'nuc', '+', '', # empty quality_spec = no quality values
starts=[150, 400],
lengths=[147, 147]
)
# Add annotations with multiple quality values per annotation
# "PQ" = 2 values per annotation (first phred-scaled, second linear-scaled)
annotations.add_annotations(
'ctcf', '+', 'PQ',
starts=[500, 700],
lengths=[20, 30],
qualities=[40, 255, 30, 200] # 2 annotations x 2 values = 4 total
)
print(annotations.to_ma_string())
# "1000;msp+P:101-50,201-60,351-45;nuc+:151-147,401-147;ctcf+PQ:501-20,701-30"
You can also use ends instead of lengths:
annotations.add_annotations(
'msp', '+', 'P',
starts=[100, 200],
ends=[150, 260], # 0-based exclusive end positions
qualities=[40, 35]
)
Iterating Over Annotations
# Iterate over all annotations with full coordinate info
for type_name, strand, quality_spec, qs, qe, fs, fe, rs, re, quals, name in annotations.iter_full():
print(f"{type_name} [{qs}, {qe}) quals={quals}")
# Iterate over a specific type
for qs, qe, fs, fe, rs, re, quals, name in annotations.iter_type("msp"):
print(f"[{qs}, {qe}) quals={quals}")
Working with pysam
import pysam
from molecular_annotation import MolecularAnnotations, from_record, write_to_record
# Read annotations from a BAM record
with pysam.AlignmentFile("input.bam") as bam:
for record in bam:
try:
annotations = from_record(record)
print(f"{record.query_name}: {annotations.total_annotation_count()} annotations")
except KeyError:
pass # No MA tag
# Write annotations to a BAM record
annotations = MolecularAnnotations(1000)
annotations.add_annotations('msp', '+', 'P', [100, 200], lengths=[50, 60], qualities=[40, 35])
write_to_record(annotations, record)
Tag Format
See the Molecular Annotation Specification for details on the tag formats and conventions.
Metadata
Release files for molecular-annotation 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| molecular_annotation-0.1.0.tar.gz | 213.2 kB | With provenance | Details for molecular_annotation-0.1.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.8 | abi3 | Linux glibc 2.17+ x86-64 | Details for molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.8 | abi3 | Linux glibc 2.17+ ARM64 | Details for molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| molecular_annotation-0.1.0-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details for molecular_annotation-0.1.0-cp38-abi3-macosx_11_0_arm64.whl |
| molecular_annotation-0.1.0-cp38-abi3-macosx_10_12_x86_64.whl | CPython 3.8 | abi3 | macOS 10.12+ x86-64 | Details for molecular_annotation-0.1.0-cp38-abi3-macosx_10_12_x86_64.whl |
Total release size: 4.1 MB
Release files / molecular_annotation-0.1.0.tar.gz
| Download URL | molecular_annotation-0.1.0.tar.gz |
|---|---|
| Size | 213.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ebaf91f43720768fc165473a1f5dd4d3d374872c1bf174521bac071c9388b4ab
|
|
BLAKE2b-256 checksum How to use checksums |
72deb8a4eeda8a684aa21cb7881ad8dd9692029e553af42ca2e0f366d8afae15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logRelease files / molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ca20670d915892bb542dff14451a8b6deaf8af5941a7032e821284e2110ff919
|
|
BLAKE2b-256 checksum How to use checksums |
2fa7c421d9778fb12b295936cdeb2f4f3384e907aeba6b47c0a4a082d41e1301
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logRelease files / molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | molecular_annotation-0.1.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.8 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
60f77a2d2e51140ab7d41fbbd883fea6cf8e97820c8140cb2ba5e093457fc0d6
|
|
BLAKE2b-256 checksum How to use checksums |
b1a390e53edc2878aa2fee05b7265491451620255a4027dc3f0325798a268b5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logRelease files / molecular_annotation-0.1.0-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | molecular_annotation-0.1.0-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 893.9 kB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4b4519955a3a6c9ff76027e70a4d32d9d15a0782a5d74f4b04791327c2036ba8
|
|
BLAKE2b-256 checksum How to use checksums |
2290b1169bfd27caab558c2d3501fe7f717805f213a51973354c77ab94f2f315
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logRelease files / molecular_annotation-0.1.0-cp38-abi3-macosx_10_12_x86_64.whl
| Download URL | molecular_annotation-0.1.0-cp38-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 932.3 kB |
| Tags | CPython 3.8 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
da7ff775e9417003e3541ea1aabf87123346cca123d868331abdb00c24c0a31a
|
|
BLAKE2b-256 checksum How to use checksums |
e39d780bf55b3bd6ab28483e57b3f5b085e6cff8b08c1b16b245958cfd5f626d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logSecurity for molecular-annotation 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 5 files in this release have been uploaded with provenance metadata.
Attestation for molecular_annotation-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.