tacular 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tacular-1.0.0/.github/copilot-instructions.md +215 -0
- tacular-1.0.0/.github/workflows/pylint.yml +26 -0
- tacular-1.0.0/.github/workflows/python-package.yml +44 -0
- tacular-1.0.0/.github/workflows/python-publish.yml +37 -0
- tacular-1.0.0/.gitignore +122 -0
- tacular-1.0.0/HISTORY.md +5 -0
- tacular-1.0.0/MANIFEST.in +8 -0
- tacular-1.0.0/PKG-INFO +83 -0
- tacular-1.0.0/README.md +66 -0
- tacular-1.0.0/conftest.py +8 -0
- tacular-1.0.0/create_output_jsons.py +125 -0
- tacular-1.0.0/data_gen/README.md +52 -0
- tacular-1.0.0/data_gen/create_psi_csv_mismatch.py +185 -0
- tacular-1.0.0/data_gen/data/amino_acids.json +412 -0
- tacular-1.0.0/data_gen/data/elements.txt +2831 -0
- tacular-1.0.0/data_gen/data/fragment_ions.json +540 -0
- tacular-1.0.0/data_gen/data/monosaccharides.obo +267 -0
- tacular-1.0.0/data_gen/data/mzpaf_reference_molecules.json +408 -0
- tacular-1.0.0/data_gen/data/neutral_losses.json +80 -0
- tacular-1.0.0/data_gen/data/proteases.json +122 -0
- tacular-1.0.0/data_gen/generator/constants.py +18 -0
- tacular-1.0.0/data_gen/generator/elements/__init__.py +11 -0
- tacular-1.0.0/data_gen/generator/elements/data.py +4392 -0
- tacular-1.0.0/data_gen/generator/elements/dclass.py +109 -0
- tacular-1.0.0/data_gen/generator/elements/lookup.py +374 -0
- tacular-1.0.0/data_gen/generator/gen_amino_acids.py +224 -0
- tacular-1.0.0/data_gen/generator/gen_elements.py +415 -0
- tacular-1.0.0/data_gen/generator/gen_fragment_ions.py +150 -0
- tacular-1.0.0/data_gen/generator/gen_gno.py +239 -0
- tacular-1.0.0/data_gen/generator/gen_monosachs.py +217 -0
- tacular-1.0.0/data_gen/generator/gen_neutral_deltas.py +122 -0
- tacular-1.0.0/data_gen/generator/gen_proteases.py +93 -0
- tacular-1.0.0/data_gen/generator/gen_psimod.py +309 -0
- tacular-1.0.0/data_gen/generator/gen_refmol.py +130 -0
- tacular-1.0.0/data_gen/generator/gen_resid.py +333 -0
- tacular-1.0.0/data_gen/generator/gen_unimod.py +325 -0
- tacular-1.0.0/data_gen/generator/gen_xlmod.py +441 -0
- tacular-1.0.0/data_gen/generator/logging_utils.py +44 -0
- tacular-1.0.0/data_gen/generator/utils.py +230 -0
- tacular-1.0.0/data_gen/justfile +80 -0
- tacular-1.0.0/data_gen/output/psimod_mass_mismatches.csv +46 -0
- tacular-1.0.0/data_gen/output/psimod_missing_entries.txt +477 -0
- tacular-1.0.0/jsons/amino_acids.json +363 -0
- tacular-1.0.0/jsons/elements.json +3787 -0
- tacular-1.0.0/jsons/fragment_ions.json +430 -0
- tacular-1.0.0/jsons/gnome_modifications.json +46157 -0
- tacular-1.0.0/jsons/monosaccharides.json +309 -0
- tacular-1.0.0/jsons/neutral_losses.json +215 -0
- tacular-1.0.0/jsons/proteases.json +125 -0
- tacular-1.0.0/jsons/psimodifications.json +19051 -0
- tacular-1.0.0/jsons/refmols.json +979 -0
- tacular-1.0.0/jsons/resid_modifications.json +6270 -0
- tacular-1.0.0/jsons/unimodifications.json +19600 -0
- tacular-1.0.0/jsons/xlmodifications.json +2219 -0
- tacular-1.0.0/justfile +38 -0
- tacular-1.0.0/pyproject.toml +60 -0
- tacular-1.0.0/src/tacular/__init__.py +78 -0
- tacular-1.0.0/src/tacular/amino_acids/__init__.py +12 -0
- tacular-1.0.0/src/tacular/amino_acids/data.py +331 -0
- tacular-1.0.0/src/tacular/amino_acids/dclass.py +51 -0
- tacular-1.0.0/src/tacular/amino_acids/lookup.py +165 -0
- tacular-1.0.0/src/tacular/elements/__init__.py +11 -0
- tacular-1.0.0/src/tacular/elements/data.py +4392 -0
- tacular-1.0.0/src/tacular/elements/dclass.py +140 -0
- tacular-1.0.0/src/tacular/elements/lookup.py +389 -0
- tacular-1.0.0/src/tacular/gno/__init__.py +4 -0
- tacular-1.0.0/src/tacular/gno/data.py +28297 -0
- tacular-1.0.0/src/tacular/gno/dclass.py +14 -0
- tacular-1.0.0/src/tacular/gno/lookup.py +16 -0
- tacular-1.0.0/src/tacular/ion_types/__init__.py +12 -0
- tacular-1.0.0/src/tacular/ion_types/data.py +435 -0
- tacular-1.0.0/src/tacular/ion_types/dclass.py +108 -0
- tacular-1.0.0/src/tacular/ion_types/lookup.py +73 -0
- tacular-1.0.0/src/tacular/monosaccharides/__init__.py +9 -0
- tacular-1.0.0/src/tacular/monosaccharides/data.py +245 -0
- tacular-1.0.0/src/tacular/monosaccharides/dclass.py +5 -0
- tacular-1.0.0/src/tacular/monosaccharides/lookup.py +51 -0
- tacular-1.0.0/src/tacular/neutral_deltas/__init__.py +12 -0
- tacular-1.0.0/src/tacular/neutral_deltas/data.py +160 -0
- tacular-1.0.0/src/tacular/neutral_deltas/dclass.py +48 -0
- tacular-1.0.0/src/tacular/neutral_deltas/lookup.py +73 -0
- tacular-1.0.0/src/tacular/obo_entity.py +114 -0
- tacular-1.0.0/src/tacular/obo_lookup.py +212 -0
- tacular-1.0.0/src/tacular/proteases/__init__.py +11 -0
- tacular-1.0.0/src/tacular/proteases/data.py +169 -0
- tacular-1.0.0/src/tacular/proteases/dclass.py +27 -0
- tacular-1.0.0/src/tacular/proteases/lookup.py +57 -0
- tacular-1.0.0/src/tacular/psimod/__init__.py +12 -0
- tacular-1.0.0/src/tacular/psimod/data.py +12490 -0
- tacular-1.0.0/src/tacular/psimod/dclass.py +12 -0
- tacular-1.0.0/src/tacular/psimod/lookup.py +15 -0
- tacular-1.0.0/src/tacular/py.typed +0 -0
- tacular-1.0.0/src/tacular/refmol/__init__.py +11 -0
- tacular-1.0.0/src/tacular/refmol/data.py +799 -0
- tacular-1.0.0/src/tacular/refmol/dclass.py +41 -0
- tacular-1.0.0/src/tacular/refmol/lookup.py +79 -0
- tacular-1.0.0/src/tacular/resid/__init__.py +4 -0
- tacular-1.0.0/src/tacular/resid/data.py +4305 -0
- tacular-1.0.0/src/tacular/resid/dclass.py +14 -0
- tacular-1.0.0/src/tacular/resid/lookup.py +16 -0
- tacular-1.0.0/src/tacular/unimod/__init__.py +12 -0
- tacular-1.0.0/src/tacular/unimod/data.py +12433 -0
- tacular-1.0.0/src/tacular/unimod/dclass.py +12 -0
- tacular-1.0.0/src/tacular/unimod/lookup.py +15 -0
- tacular-1.0.0/src/tacular/xlmod/__init__.py +4 -0
- tacular-1.0.0/src/tacular/xlmod/data.py +1537 -0
- tacular-1.0.0/src/tacular/xlmod/dclass.py +11 -0
- tacular-1.0.0/src/tacular/xlmod/lookup.py +15 -0
- tacular-1.0.0/tests/test_amino_acids.py +273 -0
- tacular-1.0.0/tests/test_element_lookup.py +682 -0
- tacular-1.0.0/tests/test_elements.py +75 -0
- tacular-1.0.0/tests/test_gno.py +179 -0
- tacular-1.0.0/tests/test_ion_types.py +281 -0
- tacular-1.0.0/tests/test_monosaccharides.py +152 -0
- tacular-1.0.0/tests/test_neutral_deltas.py +279 -0
- tacular-1.0.0/tests/test_obo_entity.py +84 -0
- tacular-1.0.0/tests/test_obo_lookup.py +254 -0
- tacular-1.0.0/tests/test_proteases.py +243 -0
- tacular-1.0.0/tests/test_psimod.py +243 -0
- tacular-1.0.0/tests/test_refmol.py +321 -0
- tacular-1.0.0/tests/test_xlmod.py +196 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# ProForma Notation - Basic Summary
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
1 - Never make summary documentation unles specifically asked.
|
|
8
|
+
2 - check makfile for commands
|
|
9
|
+
|
|
10
|
+
## Documentation & Comments
|
|
11
|
+
|
|
12
|
+
### Docstring Format
|
|
13
|
+
|
|
14
|
+
Use **Google-style docstrings** but keep them minimal - type hints handle the rest.
|
|
15
|
+
|
|
16
|
+
**Simple function:**
|
|
17
|
+
```python
|
|
18
|
+
def calculate_mass(sequence: str, charge: int = 1) -> float:
|
|
19
|
+
"""Calculate the mass-to-charge ratio of a peptide."""
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**When you need more detail:**
|
|
23
|
+
```python
|
|
24
|
+
def find_isotopes(mz: float, tolerance: float = 0.01) -> list[Peak]:
|
|
25
|
+
"""Find isotopic peaks within the tolerance window.
|
|
26
|
+
|
|
27
|
+
Uses a greedy algorithm to identify the most intense peaks first,
|
|
28
|
+
then searches for their isotopic patterns.
|
|
29
|
+
"""
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Classes:**
|
|
33
|
+
```python
|
|
34
|
+
class Peptide:
|
|
35
|
+
"""Represents a peptide sequence with ProForma modifications."""
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### What to Document
|
|
39
|
+
|
|
40
|
+
- **One-line summary** for all public functions/classes
|
|
41
|
+
- **Additional details** only when the implementation is non-obvious
|
|
42
|
+
- **Don't repeat** what's already in type hints
|
|
43
|
+
- **Private functions** (`_name`) can skip docstrings if obvious
|
|
44
|
+
|
|
45
|
+
### Building Docs
|
|
46
|
+
```bash
|
|
47
|
+
cd docs
|
|
48
|
+
make html
|
|
49
|
+
# View at docs/_build/html/index.html
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
see **proforma.schema.json** for the full ProForma 2.0 json object specification.
|
|
53
|
+
|
|
54
|
+
## What is ProForma?
|
|
55
|
+
|
|
56
|
+
ProForma is a **standardized text notation for representing peptides and proteins with modifications**. It's designed to be both human-readable and machine-parsable, allowing scientists to precisely describe modified peptide sequences in mass spectrometry data.
|
|
57
|
+
|
|
58
|
+
## Core Concept
|
|
59
|
+
|
|
60
|
+
Think of it as a way to write: **"amino acid sequence + where modifications are located + what those modifications are"**
|
|
61
|
+
|
|
62
|
+
## Basic Examples
|
|
63
|
+
|
|
64
|
+
### 1. Simple Unmodified Peptide
|
|
65
|
+
```
|
|
66
|
+
PEPTIDE
|
|
67
|
+
```
|
|
68
|
+
Just amino acids using standard one-letter codes (A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y)
|
|
69
|
+
|
|
70
|
+
### 2. Peptide with Modification
|
|
71
|
+
```
|
|
72
|
+
PEM[Oxidation]TIDE
|
|
73
|
+
```
|
|
74
|
+
- Methionine (M) is oxidized
|
|
75
|
+
- Modifications go in square brackets `[]` right after the modified amino acid
|
|
76
|
+
|
|
77
|
+
### 3. Multiple Modifications
|
|
78
|
+
```
|
|
79
|
+
PEM[Oxidation]TIS[Phospho]DE
|
|
80
|
+
```
|
|
81
|
+
- M is oxidized
|
|
82
|
+
- S is phosphorylated
|
|
83
|
+
|
|
84
|
+
### 4. Terminal Modifications
|
|
85
|
+
```
|
|
86
|
+
[Acetyl]-PEPTIDE
|
|
87
|
+
[iTRAQ4plex]-PEPTIDE-[Amidated]
|
|
88
|
+
```
|
|
89
|
+
- N-terminal modifications: `[mod]-` before sequence
|
|
90
|
+
- C-terminal modifications: `-[mod]` after sequence
|
|
91
|
+
|
|
92
|
+
## Ways to Specify Modifications
|
|
93
|
+
|
|
94
|
+
ProForma supports multiple ways to describe the same modification:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
EM[Oxidation]TIDE # By name (Unimod)
|
|
98
|
+
EM[UNIMOD:35]TIDE # By accession number
|
|
99
|
+
EM[+15.995]TIDE # By mass change
|
|
100
|
+
EM[Formula:O]TIDE # By chemical formula
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Key Advanced Features
|
|
104
|
+
|
|
105
|
+
### Ambiguous Modification Position
|
|
106
|
+
When you know a modification exists but not exactly where:
|
|
107
|
+
```
|
|
108
|
+
[Phospho]?PEPTIDE # Phospho is somewhere, location unknown
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Multiple Possible Sites
|
|
112
|
+
```
|
|
113
|
+
PEP[Phospho#g1]TIS[#g1]DE # Phospho is on either T or S
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Labile Modifications
|
|
117
|
+
Modifications that fall off during fragmentation:
|
|
118
|
+
```
|
|
119
|
+
{Glycan:Hex}PEPTIDE # Glycan present but lost in MS2
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Cross-linked Peptides
|
|
123
|
+
This is somewhat handled at the parsing level but will not will not be implmented in the codebased. Dont worry about this too much.
|
|
124
|
+
```
|
|
125
|
+
PEPTK[#XL1]IDE//SEQK[#XL1] # Two peptides linked together
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Chimeric Spectra
|
|
129
|
+
Multiple peptides in same spectrum:
|
|
130
|
+
This is somewhat handled at the parsing level but will not will not be implmented int eh codebased. Dont worry about this too much.
|
|
131
|
+
```
|
|
132
|
+
PEPTIDE+SEQUENCE # Two co-eluting peptides
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Charge States
|
|
136
|
+
```
|
|
137
|
+
PEPTIDE/2 # Charge state +2
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Charge Adducts
|
|
141
|
+
```
|
|
142
|
+
PEPTIDE/[Na+:z+1] # Sodium adduct with +1 charge
|
|
143
|
+
PEPTIDE/[Na+:z+1^2] # added 2 times (total charge: +2)
|
|
144
|
+
EPT[Formula:Zn:z+2]IDE/[Na:z+1^2] # total +4
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
both charge and charge adduct cannot occur simultaneously.
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
PEPTIDE/[Na+:z+1^2] # Sodium adduct with +1 charge 2 times
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
## Compliance Levels
|
|
157
|
+
|
|
158
|
+
ProForma has different levels of complexity:
|
|
159
|
+
|
|
160
|
+
1. **Base-ProForma** - Simple sequences with basic modifications
|
|
161
|
+
2. **Level 2-ProForma** - Adds ambiguity, formulas, delta masses
|
|
162
|
+
3. **Extensions** - Specialized features for:
|
|
163
|
+
- Top-down proteomics
|
|
164
|
+
- Cross-linking
|
|
165
|
+
- Glycoproteomics
|
|
166
|
+
- Advanced complexity
|
|
167
|
+
|
|
168
|
+
## Common Use Cases
|
|
169
|
+
|
|
170
|
+
### Bottom-up Proteomics
|
|
171
|
+
```
|
|
172
|
+
[Acetyl]-EM[Oxidation]EVTSES[Phospho]PEK
|
|
173
|
+
```
|
|
174
|
+
Typical tryptic peptide with PTMs
|
|
175
|
+
|
|
176
|
+
### Top-down Proteomics
|
|
177
|
+
```
|
|
178
|
+
<[Oxidation]@M>FULLPROTEINSEQUENCE...
|
|
179
|
+
```
|
|
180
|
+
Full protein with fixed modifications
|
|
181
|
+
|
|
182
|
+
### Glycopeptide
|
|
183
|
+
```
|
|
184
|
+
NEEYN[Glycan:Hex5HexNAc4]K
|
|
185
|
+
```
|
|
186
|
+
N-glycosylation site
|
|
187
|
+
|
|
188
|
+
### Cross-linking
|
|
189
|
+
```
|
|
190
|
+
PEPTK[XLMOD:02001#XL1]IDE//SEQK[#XL1]
|
|
191
|
+
```
|
|
192
|
+
DSS cross-link between two lysines
|
|
193
|
+
|
|
194
|
+
## Why ProForma?
|
|
195
|
+
|
|
196
|
+
**Before ProForma:** Everyone used different formats to describe modified peptides
|
|
197
|
+
- Hard to share data
|
|
198
|
+
- Hard to write software that works with different tools
|
|
199
|
+
- Ambiguous representations
|
|
200
|
+
|
|
201
|
+
**With ProForma:** Standard notation means:
|
|
202
|
+
- Data can be easily exchanged between labs
|
|
203
|
+
- Software tools can interoperate
|
|
204
|
+
- Unambiguous communication of results
|
|
205
|
+
- Integration with databases (Unimod, PSI-MOD, etc.)
|
|
206
|
+
|
|
207
|
+
## Key Design Principles
|
|
208
|
+
|
|
209
|
+
1. **Human readable** - Scientists can read and understand it
|
|
210
|
+
2. **Machine parsable** - Software can reliably parse it
|
|
211
|
+
3. **Extensible** - Can add new features as needs evolve
|
|
212
|
+
4. **Precise** - Captures uncertainty and ambiguity when present
|
|
213
|
+
5. **Standards-based** - Uses controlled vocabularies (Unimod, PSI-MOD, etc.)
|
|
214
|
+
|
|
215
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Lint and Type Check
|
|
2
|
+
|
|
3
|
+
on: [push]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
strategy:
|
|
9
|
+
matrix:
|
|
10
|
+
python-version: ["3.12"]
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
14
|
+
uses: actions/setup-python@v5
|
|
15
|
+
with:
|
|
16
|
+
python-version: ${{ matrix.python-version }}
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v4
|
|
19
|
+
- name: Install just
|
|
20
|
+
uses: extractions/setup-just@v2
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: just install
|
|
23
|
+
- name: Lint with ruff
|
|
24
|
+
run: just lint
|
|
25
|
+
- name: Type check with ty
|
|
26
|
+
run: just check
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
|
3
|
+
|
|
4
|
+
name: Python package
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ "main" ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ "main" ]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.12"]
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
- name: Install uv
|
|
28
|
+
uses: astral-sh/setup-uv@v4
|
|
29
|
+
- name: Install just
|
|
30
|
+
uses: extractions/setup-just@v2
|
|
31
|
+
- name: Install dependencies
|
|
32
|
+
run: just install
|
|
33
|
+
- name: Lint with ruff
|
|
34
|
+
run: just lint
|
|
35
|
+
- name: Type check with ty
|
|
36
|
+
run: just check
|
|
37
|
+
- name: Test with pytest
|
|
38
|
+
run: just test-cov
|
|
39
|
+
- name: Upload coverage reports to Codecov
|
|
40
|
+
uses: codecov/codecov-action@v5
|
|
41
|
+
with:
|
|
42
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
43
|
+
slug: tacular-omics/tacular
|
|
44
|
+
fail_ci_if_error: false
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# This workflow will upload a Python Package using Twine when a release is created
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
|
|
3
|
+
|
|
4
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
5
|
+
# They are provided by a third-party and are governed by
|
|
6
|
+
# separate terms of service, privacy policy, and support
|
|
7
|
+
# documentation.
|
|
8
|
+
|
|
9
|
+
name: Upload Python Package
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
release:
|
|
13
|
+
types: [published]
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
deploy:
|
|
20
|
+
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: '3.x'
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@v4
|
|
31
|
+
- name: Build package with uv
|
|
32
|
+
run: uv build
|
|
33
|
+
- name: Publish package
|
|
34
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
35
|
+
with:
|
|
36
|
+
user: __token__
|
|
37
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
tacular-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
*GNOme.obo
|
|
2
|
+
*PSI-MOD.obo
|
|
3
|
+
*UNIMOD.obo
|
|
4
|
+
*XLMod.obo
|
|
5
|
+
|
|
6
|
+
*try_*.py
|
|
7
|
+
|
|
8
|
+
# Byte-compiled / optimized / DLL files
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*$py.class
|
|
12
|
+
|
|
13
|
+
# C extensions
|
|
14
|
+
*.so
|
|
15
|
+
|
|
16
|
+
# Distribution / packaging
|
|
17
|
+
.Python
|
|
18
|
+
build/
|
|
19
|
+
develop-eggs/
|
|
20
|
+
dist/
|
|
21
|
+
downloads/
|
|
22
|
+
eggs/
|
|
23
|
+
.eggs/
|
|
24
|
+
lib/
|
|
25
|
+
lib64/
|
|
26
|
+
parts/
|
|
27
|
+
sdist/
|
|
28
|
+
var/
|
|
29
|
+
wheels/
|
|
30
|
+
share/python-wheels/
|
|
31
|
+
*.egg-info/
|
|
32
|
+
.installed.cfg
|
|
33
|
+
*.egg
|
|
34
|
+
MANIFEST
|
|
35
|
+
|
|
36
|
+
# PyInstaller
|
|
37
|
+
# Usually these files are written by a python script from a template
|
|
38
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
39
|
+
*.manifest
|
|
40
|
+
*.spec
|
|
41
|
+
|
|
42
|
+
# Installer logs
|
|
43
|
+
pip-log.txt
|
|
44
|
+
pip-delete-this-directory.txt
|
|
45
|
+
|
|
46
|
+
# Unit test / coverage reports
|
|
47
|
+
htmlcov/
|
|
48
|
+
.tox/
|
|
49
|
+
.nox/
|
|
50
|
+
.coverage
|
|
51
|
+
.coverage.*
|
|
52
|
+
.cache
|
|
53
|
+
nosetests.xml
|
|
54
|
+
coverage.xml
|
|
55
|
+
*.cover
|
|
56
|
+
*.py,cover
|
|
57
|
+
.hypothesis/
|
|
58
|
+
.pytest_cache/
|
|
59
|
+
cover/
|
|
60
|
+
|
|
61
|
+
# Translations
|
|
62
|
+
*.mo
|
|
63
|
+
*.pot
|
|
64
|
+
|
|
65
|
+
# Django stuff:
|
|
66
|
+
*.log
|
|
67
|
+
local_settings.py
|
|
68
|
+
db.sqlite3
|
|
69
|
+
db.sqlite3-journal
|
|
70
|
+
|
|
71
|
+
# Flask stuff:
|
|
72
|
+
instance/
|
|
73
|
+
.webassets-cache
|
|
74
|
+
|
|
75
|
+
# Scrapy stuff:
|
|
76
|
+
.scrapy
|
|
77
|
+
|
|
78
|
+
# Sphinx documentation
|
|
79
|
+
docs/_build/
|
|
80
|
+
|
|
81
|
+
# PyBuilder
|
|
82
|
+
target/
|
|
83
|
+
|
|
84
|
+
# Jupyter Notebook
|
|
85
|
+
.ipynb_checkpoints
|
|
86
|
+
|
|
87
|
+
# IPython
|
|
88
|
+
profile_default/
|
|
89
|
+
ipython_config.py
|
|
90
|
+
|
|
91
|
+
# pyenv
|
|
92
|
+
.python-version
|
|
93
|
+
|
|
94
|
+
# pipenv
|
|
95
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
96
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
97
|
+
# with no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
98
|
+
# install all needed dependencies.
|
|
99
|
+
#Pipfile.lock
|
|
100
|
+
|
|
101
|
+
# poetry
|
|
102
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
103
|
+
# This is especially recommended for binary packages to ensure reproducible builds.
|
|
104
|
+
# However, if you need to use different versions of dependencies on different environments,
|
|
105
|
+
# you may want to ignore it.
|
|
106
|
+
#poetry.lock
|
|
107
|
+
|
|
108
|
+
# uv
|
|
109
|
+
.venv
|
|
110
|
+
uv.lock
|
|
111
|
+
|
|
112
|
+
# ruff
|
|
113
|
+
.ruff_cache/
|
|
114
|
+
|
|
115
|
+
# mypy
|
|
116
|
+
.mypy_cache/
|
|
117
|
+
.dmypy.json
|
|
118
|
+
dmypy.json
|
|
119
|
+
|
|
120
|
+
# editors
|
|
121
|
+
.vscode/
|
|
122
|
+
.idea/
|
tacular-1.0.0/HISTORY.md
ADDED
tacular-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tacular
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Includes lookups for modifications, amino acids, and other data types.
|
|
5
|
+
Author-email: Patrick Garrett <pgarrett@scripps.edu>
|
|
6
|
+
Maintainer-email: Patrick Garrett <pgarrett@scripps.edu>
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Intended Audience :: Science/Research
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
13
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
14
|
+
Classifier: Typing :: Typed
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# tacular
|
|
19
|
+
|
|
20
|
+
[](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml)
|
|
21
|
+
[](https://codecov.io/github/tacular-omics/tacular)
|
|
22
|
+
[](https://badge.fury.io/py/tacular)
|
|
23
|
+
[](https://www.python.org/downloads/)
|
|
24
|
+
[](https://opensource.org/licenses/MIT)
|
|
25
|
+
|
|
26
|
+
A helper package for peptacular and paftacular. Includes lookups for modifications, amino acids, and other data types.
|
|
27
|
+
|
|
28
|
+
## Generate Data
|
|
29
|
+
|
|
30
|
+
See data_gen/README.md
|
|
31
|
+
|
|
32
|
+
## Generating JSONs
|
|
33
|
+
|
|
34
|
+
It's possible to generate JSON objects for all parsed data used within tacular. This isn't used within tacular or its downstream packages, but may be useful in other projects, especially those not Python-based. This will be created from the data within the python package, so ensure that this is up to date. See data_gen/README.md for more info.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
just gen-jsons
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Overview
|
|
41
|
+
|
|
42
|
+
The following lookups are available:
|
|
43
|
+
|
|
44
|
+
### Amino Acids
|
|
45
|
+
- Standard and non-standard amino acid lookups
|
|
46
|
+
- Query by single-letter code, three-letter code, or full name
|
|
47
|
+
- Access to molecular properties (mass, formula, etc.)
|
|
48
|
+
|
|
49
|
+
### Modifications
|
|
50
|
+
- Post-translational modifications (PTMs)
|
|
51
|
+
- Query by modification name, ID, or delta mass
|
|
52
|
+
- Support for Unimod, PSI-MOD, RESID, XLMOD and GNOme
|
|
53
|
+
|
|
54
|
+
### Elements
|
|
55
|
+
- Chemical element data
|
|
56
|
+
- Query by symbol, name
|
|
57
|
+
- Isotope information and masses
|
|
58
|
+
|
|
59
|
+
### Additional Data Types
|
|
60
|
+
- Fragment ions
|
|
61
|
+
- Common neutral deltas (mainly neutral losses)
|
|
62
|
+
- mzPAF reference molecules
|
|
63
|
+
- Common Proteases
|
|
64
|
+
|
|
65
|
+
## Architecture
|
|
66
|
+
|
|
67
|
+
Each lookup contains three core components:
|
|
68
|
+
|
|
69
|
+
- **data.py**: Auto-generated data file (should not be modified manually)
|
|
70
|
+
- **dclass.py**: Dataclass definitions for the data structures
|
|
71
|
+
- **lookup.py**: Lookup implementation with query methods
|
|
72
|
+
|
|
73
|
+
Each lookup provides multiple query options to enable data retrieval by various means. Lookups are cached for faster repeat queries.
|
|
74
|
+
|
|
75
|
+
## Usage
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
import tacular as t
|
|
79
|
+
|
|
80
|
+
# Query amino acids
|
|
81
|
+
alanine = t.AA_LOOKUP['A']
|
|
82
|
+
carbon_13 = t.ELEMENT_LOOKUP['13C']
|
|
83
|
+
```
|
tacular-1.0.0/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# tacular
|
|
2
|
+
|
|
3
|
+
[](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml)
|
|
4
|
+
[](https://codecov.io/github/tacular-omics/tacular)
|
|
5
|
+
[](https://badge.fury.io/py/tacular)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
A helper package for peptacular and paftacular. Includes lookups for modifications, amino acids, and other data types.
|
|
10
|
+
|
|
11
|
+
## Generate Data
|
|
12
|
+
|
|
13
|
+
See data_gen/README.md
|
|
14
|
+
|
|
15
|
+
## Generating JSONs
|
|
16
|
+
|
|
17
|
+
It's possible to generate JSON objects for all parsed data used within tacular. This isn't used within tacular or its downstream packages, but may be useful in other projects, especially those not Python-based. This will be created from the data within the python package, so ensure that this is up to date. See data_gen/README.md for more info.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
just gen-jsons
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Overview
|
|
24
|
+
|
|
25
|
+
The following lookups are available:
|
|
26
|
+
|
|
27
|
+
### Amino Acids
|
|
28
|
+
- Standard and non-standard amino acid lookups
|
|
29
|
+
- Query by single-letter code, three-letter code, or full name
|
|
30
|
+
- Access to molecular properties (mass, formula, etc.)
|
|
31
|
+
|
|
32
|
+
### Modifications
|
|
33
|
+
- Post-translational modifications (PTMs)
|
|
34
|
+
- Query by modification name, ID, or delta mass
|
|
35
|
+
- Support for Unimod, PSI-MOD, RESID, XLMOD and GNOme
|
|
36
|
+
|
|
37
|
+
### Elements
|
|
38
|
+
- Chemical element data
|
|
39
|
+
- Query by symbol, name
|
|
40
|
+
- Isotope information and masses
|
|
41
|
+
|
|
42
|
+
### Additional Data Types
|
|
43
|
+
- Fragment ions
|
|
44
|
+
- Common neutral deltas (mainly neutral losses)
|
|
45
|
+
- mzPAF reference molecules
|
|
46
|
+
- Common Proteases
|
|
47
|
+
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
Each lookup contains three core components:
|
|
51
|
+
|
|
52
|
+
- **data.py**: Auto-generated data file (should not be modified manually)
|
|
53
|
+
- **dclass.py**: Dataclass definitions for the data structures
|
|
54
|
+
- **lookup.py**: Lookup implementation with query methods
|
|
55
|
+
|
|
56
|
+
Each lookup provides multiple query options to enable data retrieval by various means. Lookups are cached for faster repeat queries.
|
|
57
|
+
|
|
58
|
+
## Usage
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
import tacular as t
|
|
62
|
+
|
|
63
|
+
# Query amino acids
|
|
64
|
+
alanine = t.AA_LOOKUP['A']
|
|
65
|
+
carbon_13 = t.ELEMENT_LOOKUP['13C']
|
|
66
|
+
```
|