encode-toolkit 0.3.2__tar.gz → 0.3.4__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.
- encode_toolkit-0.3.4/CHANGELOG.md +329 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/CITATION.cff +1 -1
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/PKG-INFO +9 -9
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/README.md +8 -8
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/pyproject.toml +1 -1
- encode_toolkit-0.3.4/src/encode_connector/__init__.py +9 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/constants.py +55 -4
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/encode_client.py +66 -34
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/models.py +27 -5
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/tracker.py +48 -10
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/server/main.py +39 -11
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_client.py +252 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_models.py +40 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_packaging.py +9 -0
- encode_toolkit-0.3.4/tests/test_skill_scripts.py +690 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_tool_responses.py +175 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_tracker.py +113 -0
- encode_toolkit-0.3.2/CHANGELOG.md +0 -85
- encode_toolkit-0.3.2/src/encode_connector/__init__.py +0 -4
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/.gitignore +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/LICENSE +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/PRIVACY.md +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/SECURITY.md +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/conftest.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/__main__.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/__init__.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/auth.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/downloader.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/client/validation.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/server/__init__.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/src/encode_connector/server/__main__.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/__init__.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_auth.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_bioinformatics_audit.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_downloader.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_server.py +0 -0
- {encode_toolkit-0.3.2 → encode_toolkit-0.3.4}/tests/test_validation.py +0 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the ENCODE Toolkit will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.3.4] - 2026-09-20
|
|
9
|
+
|
|
10
|
+
Bug-fix release for the MCP server, with the pipeline skills, their images and conda environments, the validation scripts and all documentation checked against the code.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`encode_track_experiment` failed for every experiment.** The tool passed the experiment's
|
|
15
|
+
assemblies to the tracker as a list, which SQLite cannot store, so tracking stopped with
|
|
16
|
+
`Error binding parameter 13: type 'list' is not supported`. The tests did not see it because
|
|
17
|
+
they mocked the tracker. Assemblies are now stored as joined text, two experiments count as
|
|
18
|
+
compatible when they share an assembly, and a test runs the tool against a real tracker.
|
|
19
|
+
- **Search results lost half their fields.** `encode_search_experiments` asked the API for
|
|
20
|
+
`frame=object`, which returns linked objects as paths, so every hit had an empty organism,
|
|
21
|
+
organ and assembly list, and targets and labs came back as slugs (`H3K4me1-human`,
|
|
22
|
+
`bradley-bernstein`) that the tool's own `target` and `lab` filters do not accept. The search
|
|
23
|
+
now names the fields it needs. Checked against a live ENCODE response.
|
|
24
|
+
- **Publications without a PMID overwrote each other.** ENCODE lists some papers by PMCID only;
|
|
25
|
+
they collided on the `(experiment, pmid)` key, so one survived while the count reported all of
|
|
26
|
+
them. They are now kept apart, and storing them again does not duplicate them (including a
|
|
27
|
+
row that an older version stored with an empty PMID).
|
|
28
|
+
- **`encode_search_files` with an organism ignored `offset`** and reported the number of files
|
|
29
|
+
it had collected as the total, so every page was the first page and `has_more` was false.
|
|
30
|
+
`encode_batch_download` always took that path. Pages now advance and `total` is a lower bound
|
|
31
|
+
that exceeds the page when more files exist. The search also stopped after the first 200
|
|
32
|
+
experiments, and after the first 200 files of each experiment, so later files were never
|
|
33
|
+
found; it now reads further pages of both until the requested page is full (at most 1,000
|
|
34
|
+
experiments, and it says so when it stops there, also in `encode_batch_download`'s replies).
|
|
35
|
+
- A negative `offset` in `encode_search_experiments` and `encode_search_files` is treated as 0,
|
|
36
|
+
in the request, in the reported `offset` and in `has_more` / `next_offset`, instead of hiding
|
|
37
|
+
or repeating pages.
|
|
38
|
+
- **`encode_get_experiment` always reported zero audit flags.** It asked ENCODE for
|
|
39
|
+
`frame=embedded`, which leaves out the `audit` property, so every experiment looked free of
|
|
40
|
+
errors and warnings (the search tool was not affected). It now asks for `frame=page`. Checked
|
|
41
|
+
against the portal: ENCSR133RZO has 8 warnings and 2 internal-action flags, not 0.
|
|
42
|
+
- BibTeX export joined author names with commas, which BibTeX reads as a single author; they
|
|
43
|
+
are joined with `and`.
|
|
44
|
+
- **`encode_list_tracked` and `encode_export_data` ignored a filter that matched nothing** and
|
|
45
|
+
returned every tracked experiment. They now return none.
|
|
46
|
+
- `encode_batch_download` reported `next_offset` but had no `offset` parameter to continue with;
|
|
47
|
+
it has one now.
|
|
48
|
+
- The description of `encode_get_experiment` promised quality metrics. It returns audit counts,
|
|
49
|
+
replicate counts and possible controls, and now says so.
|
|
50
|
+
- The value lists behind `encode_get_metadata` named three values ENCODE does not have (file
|
|
51
|
+
format `dat`, output type `stable peaks`, output category `quality metric`) and lacked eleven
|
|
52
|
+
file formats (among them `h5ad`) and eight assemblies. File formats, assemblies and output
|
|
53
|
+
categories now match ENCODE's file schema, and the output types include the single-cell
|
|
54
|
+
sparse gene count matrices.
|
|
55
|
+
- `encode_connector.__version__` was a hard-coded `0.2.1`; it now reports the installed version.
|
|
56
|
+
- **Four pipelines failed at their last step.** MultiQC names its report after `--title`, so
|
|
57
|
+
CUT&RUN, DNase-seq, Hi-C and WGBS never produced the `multiqc_report.html` they declare. They
|
|
58
|
+
now pass `--filename multiqc_report` (checked against MultiQC 1.21).
|
|
59
|
+
- **WGBS**: `MethylDackel extract` was given `--maxDepth`, which 0.6.1 does not accept, so
|
|
60
|
+
extraction could not start. The `--nOT/--nOB` values excluded the 3' ends of reads rather than
|
|
61
|
+
the end-repair bias they were documented to remove (Trim Galore's `--clip_R2 10` already does
|
|
62
|
+
that), so they are gone. The M-bias report captured stdout while MethylDackel prints its
|
|
63
|
+
suggested bounds on stderr. The final sorted BAM was never published. `--min_coverage` now
|
|
64
|
+
filters the bedMethyl files only, so the coverage statistics describe every covered CpG.
|
|
65
|
+
- **RNA-seq**: plus- and minus-strand signal tracks were swapped for reverse-stranded (dUTP)
|
|
66
|
+
libraries, the default. Track naming now follows `--strandedness` the way ENCODE's
|
|
67
|
+
`STAR_RSEM.sh` does, and unstranded libraries get a single track. `--strandedness` is
|
|
68
|
+
validated. The kallisto index and the RSeQC gene model were hard-wired to file names in the
|
|
69
|
+
launch directory; they are now `--kallisto_index` and `--rseqc_bed`.
|
|
70
|
+
- **DNase-seq**: insert sizes used Picard `CollectInsertSizeMetrics`, which needs R for its
|
|
71
|
+
mandatory histogram and the image has none. It now uses `samtools stats`.
|
|
72
|
+
- **ChIP-seq**: `--chrom_sizes` is required up front instead of failing on a missing
|
|
73
|
+
`chrom.sizes` file, the BWA index directory is a parameter (`--bwa_index`), and duplication
|
|
74
|
+
metrics are published (the `publishDir` pattern never matched the file name).
|
|
75
|
+
- **ATAC-seq**: the Bowtie2 index directory is a parameter (`--bowtie2_index`), the
|
|
76
|
+
mitochondrial statistics are published, and two parameters that nothing read are removed.
|
|
77
|
+
- **CUT&RUN** publishes the fragment BED and the spike-in counts. **Hi-C** publishes the
|
|
78
|
+
pairtools parse statistics and passes the normalization to HiCCUPS explicitly.
|
|
79
|
+
- **Cloud profiles**: every pipeline takes `--gcp_project`/`--gcp_workdir` and
|
|
80
|
+
`--aws_queue`/`--aws_workdir`, and stops with a clear message when `-profile gcp` or `aws` is
|
|
81
|
+
used without them. All seven configs now come from one template, so resource limits, SLURM
|
|
82
|
+
queue/account and report settings no longer differ between pipelines.
|
|
83
|
+
- `install-nextflow.sh` accepted any Nextflow already on the PATH, which skipped both the pinned
|
|
84
|
+
version and the checksum. It now accepts only the pinned release.
|
|
85
|
+
- Trimmed-read FastQC reports are kept and passed to MultiQC in every pipeline that trims.
|
|
86
|
+
- Conda environments: `idr` added to ATAC-seq, `picard` added to DNase-seq, BWA 0.7.18.
|
|
87
|
+
|
|
88
|
+
- **The four validation scripts that ship in the aggregation skills had no tests and several
|
|
89
|
+
bugs.** `validate_methylation.py` rescaled every methylation value at or below 1 by 100, so in
|
|
90
|
+
an ENCODE bedMethyl (percentages) a CpG at 1% was reported as 100% methylated and every real
|
|
91
|
+
file triggered a "mixed formats" warning; the scale is now decided once per file (`--scale`).
|
|
92
|
+
Reversed intervals entered the statistics in the histone and Hi-C scripts, 9- and 10-column
|
|
93
|
+
bedMethyl files were read with the wrong columns, percentages were taken over malformed lines
|
|
94
|
+
too, gzipped inputs crashed, and an empty file passed. All fixed, with 37 tests that run the
|
|
95
|
+
scripts on synthetic files. The skills now say how to run them.
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
|
|
99
|
+
- **One version of every tool.** The ChIP-seq, ATAC-seq and RNA-seq images move to the versions
|
|
100
|
+
the other four images and all seven conda environments already pinned: samtools 1.19, Picard
|
|
101
|
+
3.1.1 (Java 17), MultiQC 1.21, cutadapt 4.6, Trim Galore 0.6.10, FastQC 0.12.1, STAR 2.7.11b,
|
|
102
|
+
kallisto 0.50.1, RSeQC 5.0.3. Bowtie2 is 2.5.4 in every image. A kallisto index has to be
|
|
103
|
+
built with 0.50.1; older index files are rejected.
|
|
104
|
+
- **FRiP is computed** by the ChIP-seq, ATAC-seq and CUT&RUN workflows
|
|
105
|
+
(`qc/<sample>.frip_mqc.tsv`, shown as a table in MultiQC).
|
|
106
|
+
- **IDR compares every pair of replicates** instead of only the first two. Outputs are named
|
|
107
|
+
`peaks/idr/<sampleA>_vs_<sampleB>.idr_peaks.txt`.
|
|
108
|
+
- **Hi-C honours `--resolutions`**: the cooler base bin is the smallest requested resolution,
|
|
109
|
+
and the new `--hiccups_resolutions` selects the loop-calling resolutions. Both lists are
|
|
110
|
+
validated before anything runs (positive integers with no empty fields, multiples of the
|
|
111
|
+
smallest), and HiCCUPS
|
|
112
|
+
gets one peak width, window width and merge radius per resolution (juicer_tools exits when
|
|
113
|
+
the `-d` list has a different length).
|
|
114
|
+
- The conda environments pin every tool with `==` (a single `=` is a prefix match in conda) and
|
|
115
|
+
add cutadapt 4.6 and OpenJDK 17, as in the images; they resolved to cutadapt 5.2, samtools
|
|
116
|
+
1.19.2 and Java 22 before. Every pin now resolves as written. cutadapt 4.6 has no
|
|
117
|
+
Python 3.11 build, so all seven environments use Python 3.10. The Hi-C and WGBS images
|
|
118
|
+
install `openjdk-17-jre-headless` like the other five instead of Ubuntu's `default-jre`
|
|
119
|
+
(Java 11), and the image smoke tests assert Java 17.
|
|
120
|
+
- ATAC-seq publishes `samtools idxstats` (which MultiQC reads) in place of a text line that
|
|
121
|
+
needed `bc` and failed on genomes without the mitochondrial contig.
|
|
122
|
+
- WGBS coverage statistics also report the run's `--min_coverage`; deduplication reports reach
|
|
123
|
+
MultiQC. RNA-seq publishes the unique-mapper signal bedGraphs and kallisto's HDF5 output.
|
|
124
|
+
- In WGBS, Hi-C, DNase-seq and CUT&RUN every process asks for more memory on a retry.
|
|
125
|
+
|
|
126
|
+
### Documentation
|
|
127
|
+
|
|
128
|
+
- Every pipeline skill was reconciled with its workflow: parameters, example commands, output
|
|
129
|
+
layouts, step lists and QC tables now describe what the workflow does. Analyses it does not
|
|
130
|
+
run (for example FRiP, NSC/RSC, TSS enrichment, TAD and compartment calling, bisulfite
|
|
131
|
+
conversion rate) are labelled as manual steps instead of being listed as outputs.
|
|
132
|
+
- `encode_*` tool calls in 40 skills used 135 parameter names the server does not have (for
|
|
133
|
+
example `encode_list_files(accession=...)` instead of `experiment_accession=`). All are
|
|
134
|
+
corrected.
|
|
135
|
+
- Reference commands were checked against the pinned tool versions (Hotspot2, MethylDackel,
|
|
136
|
+
SEACR, Juicer tools, pairtools, RGT, MPRAflow) and corrected.
|
|
137
|
+
- **`docs/`, the README, `agents/` and `commands/` were never checked against the code.** The
|
|
138
|
+
API reference, showcase, walkthrough and vignettes showed invented response shapes (facets as
|
|
139
|
+
`key`/`doc_count`, a nested `audit` object, `href`, `files_found`, wrong compatibility verdicts);
|
|
140
|
+
all are corrected to what the server returns, and the API reference documents all 20 tools
|
|
141
|
+
instead of 16. The seven pipeline agents described steps the workflows do not run (Arrowhead
|
|
142
|
+
TAD calling, a WGBS conversion-rate stage, RNA-SeQC, Trimmomatic) and flags they do not use.
|
|
143
|
+
The doc checker now covers all of these folders, and CI also compares `agents/` and
|
|
144
|
+
`commands/` with their copies under `plugin/`.
|
|
145
|
+
- The pipeline vignettes and the pipeline-execution walkthrough told users to run
|
|
146
|
+
`nextflow run ENCODE-DCC/chip-seq-pipeline2` (the official ENCODE pipelines are WDL, not
|
|
147
|
+
Nextflow), to pull images that were never verified, and to pass options that no longer exist
|
|
148
|
+
(`--motif_db`, `--restriction_site`, `--gtf`, `--lambda_genome`, `--single_end`). They now
|
|
149
|
+
build the image from the skill's Dockerfile and run the toolkit's own workflows with real
|
|
150
|
+
parameters, outputs and versions; DNase-seq is documented as paired-end only, and WGBS
|
|
151
|
+
conversion rate as a manual check.
|
|
152
|
+
- Examples used values ENCODE does not have: the assay title `RNA-seq` (it is `total RNA-seq`,
|
|
153
|
+
`polyA plus RNA-seq`, ...), and the output types `chromatin interactions` (it is `loops`) and
|
|
154
|
+
`filtered feature barcode matrix`. Four `encode_link_reference` calls omitted the experiment.
|
|
155
|
+
The WGBS CpG-coverage one-liner piped BAM output into `awk`; it uses `bedtools coverage` now.
|
|
156
|
+
|
|
157
|
+
### CI
|
|
158
|
+
|
|
159
|
+
- The seven `nextflow.config` files are generated by `.github/scripts/gen-pipeline-configs.py`, and CI fails
|
|
160
|
+
when a config differs from what the generator writes.
|
|
161
|
+
- `check-tool-versions.py` fails the build when a pipeline image and its conda environment pin
|
|
162
|
+
different versions of the same tool, when the image pins a package the environment does not,
|
|
163
|
+
or when both install a tool the environment leaves unpinned. It compares Java too and rejects
|
|
164
|
+
an unversioned `default-jre`. Dockerfile comments do not count as evidence, and the few
|
|
165
|
+
deliberate exceptions (packages from the Ubuntu base) are printed.
|
|
166
|
+
- `check-skill-docs.py` fails the build when a skill shows a tool call the server would reject
|
|
167
|
+
or a `nextflow run` example with a parameter or profile the pipeline does not declare, and
|
|
168
|
+
when an example output uses a field the server never emits (model fields, dict keys and
|
|
169
|
+
SQLite columns, read from the source with `ast`). It also rejects a call that omits a required
|
|
170
|
+
argument, and filter values ENCODE does not use (`assay_title="RNA-seq"`), in calls to the
|
|
171
|
+
tools that query the portal and in example outputs (single values, lists and facet terms).
|
|
172
|
+
Example outputs are checked against the fields that the documented tool itself can return,
|
|
173
|
+
followed through the code it calls, its models and the SQL rows it reads, not against one
|
|
174
|
+
list for the whole server.
|
|
175
|
+
- Image smoke tests start FastQC and Trim Galore; the preview suite covers the new parameters
|
|
176
|
+
and the cloud-profile checks.
|
|
177
|
+
|
|
178
|
+
## [0.3.3] - 2026-09-20
|
|
179
|
+
|
|
180
|
+
Pipeline skills release. The Python package (MCP server) is functionally identical to 0.3.2.
|
|
181
|
+
|
|
182
|
+
### Fixed
|
|
183
|
+
|
|
184
|
+
- **All seven Nextflow pipelines now run on current Nextflow (validated on 26.04.6).** The
|
|
185
|
+
workflows mixed top-level statements with process definitions and four configs defined a
|
|
186
|
+
function, both of which the strict parser rejects. Validation and channel setup moved into the
|
|
187
|
+
`workflow` block, and `check_max` was replaced by `process.resourceLimits`.
|
|
188
|
+
- **ChIP-seq**: the workflow called each process twice (samples, then controls), which Nextflow
|
|
189
|
+
does not allow, so it could not start. Controls now go through the same calls and are split
|
|
190
|
+
off before peak calling, where they are pooled. `--control` is optional. Signal tracks now
|
|
191
|
+
receive the sample ID they were missing.
|
|
192
|
+
- **CUT&RUN**: SEACR was given the control BAM instead of a control bedGraph; spike-in scale
|
|
193
|
+
factors were computed but never applied to the signal track; `--seacr_mode` was ignored;
|
|
194
|
+
MACS2 peak calling always failed on a no-op `mv`; fragments were extracted from a
|
|
195
|
+
coordinate-sorted BAM, which drops most read pairs; `--control` and chromosome sizes were
|
|
196
|
+
not staged into tasks.
|
|
197
|
+
- **DNase-seq**: Hotspot2 was called with options it does not have and without its mandatory
|
|
198
|
+
center-sites file; the image pinned a Hotspot2 tag that does not exist and lacked `modwt`
|
|
199
|
+
and `bc`. Footprinting could pair a BAM with another sample's peaks. `--hotspot_index` is
|
|
200
|
+
replaced by `--hotspot_center_sites` and `--hotspot_mappable`.
|
|
201
|
+
HINT footprinting needs an RGT data directory that the container's unprivileged user could
|
|
202
|
+
never find; it is now an explicit input, `--rgt_data`, checked before the run starts.
|
|
203
|
+
- **WGBS**: the bedMethyl conversion divided by zero on MethylDackel's header line, so
|
|
204
|
+
extraction always failed; only CpG was converted although CHG and CHH were promised;
|
|
205
|
+
`--no_overlap` toggled `--mergeContext`, which is unrelated to mate overlap (renamed
|
|
206
|
+
`--merge_context`). bedMethyl score and strand now follow the ENCODE format.
|
|
207
|
+
- **RNA-seq**: the RSEM reference is a file prefix but was required to be a directory.
|
|
208
|
+
- **ATAC-seq**: the BAM index was not passed to the Tn5 shift step, which `alignmentSieve`
|
|
209
|
+
requires; the mitochondrial fraction used `bc`, which the image lacked, and silently wrote an
|
|
210
|
+
empty value; duplication metrics were never published. The workflow now states that it needs
|
|
211
|
+
paired-end reads instead of filtering every single-end read away.
|
|
212
|
+
- **Hi-C**: `pairtools sort` was given a temporary directory that was never created. HiCCUPS
|
|
213
|
+
now runs its CPU mode by default, because the image has no CUDA runtime (`--hiccups_gpu`).
|
|
214
|
+
- **IDR** (ChIP-seq, ATAC-seq) picked two peak files in arbitrary order and crashed with a
|
|
215
|
+
single replicate. The pair is now sorted, and IDR is skipped below two replicates.
|
|
216
|
+
- **Pipeline images had never been built.** Beyond missing `build-essential`, `unzip`, `bc`, and
|
|
217
|
+
Boost: `idr`, `trim-galore`, and `phantompeakqualtools` are not PyPI packages; `deeptools
|
|
218
|
+
3.5.4` was never published; BWA 0.7.17 does not link with current GCC (now 0.7.18); Picard 3
|
|
219
|
+
needs Java 17; MethylDackel needs libBigWig; SEACR could not find its R script through a
|
|
220
|
+
symlink; RGT 0.13.2 and pairtools 1.0.3 no longer install (now 1.0.2 and 1.1.2). Index
|
|
221
|
+
prefixes are resolved from staged files, so cloud executors work.
|
|
222
|
+
- **Conda environment files** pinned packages that do not exist (`hotspot2`, `hint`, `f-seq2`)
|
|
223
|
+
or cannot be installed together. All seven now solve, and the Anaconda `defaults` channel is
|
|
224
|
+
no longer used.
|
|
225
|
+
- Pipelines referenced container images that do not exist. Each config now uses an image built
|
|
226
|
+
from the skill's own Dockerfile, with a fixed tag and a `--container` override.
|
|
227
|
+
- `gcp` profiles used the retired `google-lifesciences` executor; they now use `google-batch`.
|
|
228
|
+
- QC references: `samtools view` needs `-L` for a BED file; the WGBS coverage one-liner never
|
|
229
|
+
counted bases at 5x or more.
|
|
230
|
+
|
|
231
|
+
### Changed
|
|
232
|
+
|
|
233
|
+
- **Removed parameters that had no effect**: `--aligner` and `--lambda_genome` (WGBS),
|
|
234
|
+
`--motif_db` (DNase-seq), `--restriction_site` (Hi-C), `--gtf` (RNA-seq). The skills now
|
|
235
|
+
describe what the workflows actually do.
|
|
236
|
+
- `install-nextflow.sh` installs a pinned Nextflow release and verifies its SHA-256 before use,
|
|
237
|
+
instead of piping a remote script into a shell. It no longer fails when the install
|
|
238
|
+
directory is not on the `PATH`.
|
|
239
|
+
- `install-python-packages.sh` installs against `constraints.txt`, a lock file with exact
|
|
240
|
+
versions for Python 3.10+, generated from `requirements.in`.
|
|
241
|
+
- The pipeline guide now separates the official ENCODE WDL pipelines from this toolkit's own
|
|
242
|
+
Nextflow implementations, and no longer cites repositories or images that do not exist.
|
|
243
|
+
Pipeline images are no longer labelled as maintained by the ENCODE DCC.
|
|
244
|
+
|
|
245
|
+
### Added
|
|
246
|
+
|
|
247
|
+
- `Pipelines` CI workflow: `nextflow lint`, `nextflow run -preview` across parameter
|
|
248
|
+
combinations, profile resolution, a Docker build of every pipeline image with checks that
|
|
249
|
+
the tools each workflow calls are present and actually start, a dry-run solve of every conda
|
|
250
|
+
environment, shellcheck, and a `skills/` vs `plugin/skills/` identity check.
|
|
251
|
+
|
|
252
|
+
## [0.3.2] - 2026-09-20
|
|
253
|
+
|
|
254
|
+
Maintenance release. The Python package is functionally identical to 0.3.1.
|
|
255
|
+
|
|
256
|
+
### Fixed
|
|
257
|
+
|
|
258
|
+
- `bioinformatics-installer` skill: the ChIP-seq walkthrough pointed at `scripts/chipseq-env.yml`
|
|
259
|
+
(the file lives in `environments/`) and at an `annotation-env.yml` that did not exist. The first
|
|
260
|
+
path is corrected and the second is replaced with an explicit `conda create` command.
|
|
261
|
+
|
|
262
|
+
### Changed
|
|
263
|
+
|
|
264
|
+
- Removed local tooling configuration files from the repository and ignored them going forward.
|
|
265
|
+
- `CONTRIBUTING.md` and `docs/SHOWCASE.md` now use the ENCODE Toolkit name and the current skill
|
|
266
|
+
count (47).
|
|
267
|
+
|
|
268
|
+
## [0.3.1] - 2026-09-20
|
|
269
|
+
|
|
270
|
+
### Fixed
|
|
271
|
+
|
|
272
|
+
- **Server failed to start on fresh installs.** The `mcp` dependency had no upper bound, so new
|
|
273
|
+
environments resolved `mcp` 2.x, which removed `mcp.server.fastmcp`. Startup then crashed with
|
|
274
|
+
`ModuleNotFoundError: No module named 'mcp.server.fastmcp'`. The dependency is now capped at
|
|
275
|
+
`mcp[cli]>=1.0,<2`. Existing installs that already had `mcp` 1.x were not affected.
|
|
276
|
+
|
|
277
|
+
If you hit this error, uv may have cached the broken environment. Refresh it once with
|
|
278
|
+
`uvx --refresh encode-toolkit` (or `uv cache clean encode-toolkit`); pip users can run
|
|
279
|
+
`pip install --upgrade encode-toolkit`.
|
|
280
|
+
|
|
281
|
+
### Security
|
|
282
|
+
|
|
283
|
+
- The ChIP-seq, ATAC-seq, and RNA-seq pipeline Dockerfiles now download the UCSC
|
|
284
|
+
`bedGraphToBigWig` executable over HTTPS instead of plain HTTP.
|
|
285
|
+
|
|
286
|
+
### Changed
|
|
287
|
+
|
|
288
|
+
- The source distribution now contains only the Python package, tests, and project documents.
|
|
289
|
+
It previously bundled the whole repository, including editor configuration and a duplicate
|
|
290
|
+
copy of the plugin tree (1.6 MB down to 118 KB). The wheel is unchanged.
|
|
291
|
+
- Updated dead GREAT links in the `peak-annotation` and `multi-omics-integration` skills.
|
|
292
|
+
|
|
293
|
+
### Added
|
|
294
|
+
|
|
295
|
+
- Packaging regression test that fails if the `mcp` dependency loses its upper bound.
|
|
296
|
+
|
|
297
|
+
## [0.3.0-beta.1] - 2026-03-08
|
|
298
|
+
|
|
299
|
+
Initial public beta release.
|
|
300
|
+
|
|
301
|
+
### Features
|
|
302
|
+
|
|
303
|
+
- **20 MCP tools** for searching, downloading, and tracking ENCODE data
|
|
304
|
+
- Search experiments and files with comprehensive filters and pagination
|
|
305
|
+
- Download files with MD5 verification, concurrent downloads, and directory organization
|
|
306
|
+
- Local experiment tracking with SQLite (publications, pipelines, quality metrics)
|
|
307
|
+
- Cross-reference with PubMed, bioRxiv, ClinicalTrials.gov, GEO
|
|
308
|
+
- Citation export (BibTeX, RIS) for reference managers
|
|
309
|
+
- Data provenance chain for derived files
|
|
310
|
+
- Batch download with dry-run preview
|
|
311
|
+
|
|
312
|
+
- **47 skills** across 10 categories
|
|
313
|
+
- Core: setup, search, download, track, cross-reference
|
|
314
|
+
- Analysis: quality assessment, integrative analysis, regulatory elements, epigenome profiling, compare biosamples, visualization, motif analysis, peak annotation, batch analysis
|
|
315
|
+
- Functional genomics: CRISPR/MPRA/STARR-seq screen analysis
|
|
316
|
+
- Data aggregation: histone, accessibility, Hi-C, methylation
|
|
317
|
+
- External databases: UCSC, GEO, gnomAD, Ensembl, GTEx, ClinVar, CELLxGENE, GWAS Catalog, JASPAR
|
|
318
|
+
- Workflows: provenance, citations, variant annotation, pipelines, single-cell, disease research, publication trust, bioinformatics installer, scientific writing, liftover coordinates
|
|
319
|
+
- Pipeline execution: ChIP-seq, ATAC-seq, RNA-seq, WGBS, Hi-C, DNase-seq, CUT&RUN (Nextflow + Docker)
|
|
320
|
+
- Meta-analysis: scRNA-seq meta-analysis, multi-omics integration
|
|
321
|
+
|
|
322
|
+
- **Async ENCODE API client** with retry logic, 1-hour TTL cache, and rate limiting
|
|
323
|
+
- **OS keyring credential management** with Fernet-encrypted file fallback
|
|
324
|
+
- **Thread-safe SQLite tracker** with full transaction safety
|
|
325
|
+
- **Streaming downloads** with 64KB chunks and SSRF-safe redirect validation
|
|
326
|
+
- **568 tests** with 98% code coverage
|
|
327
|
+
- **34 literature reference documents** (~320 papers cataloged with DOI, PMID, key findings)
|
|
328
|
+
- **9 scientist-facing vignettes** with real ENCODE API output
|
|
329
|
+
- **GitHub Actions CI/CD** (pytest across Python 3.10–3.13, ruff lint, plugin validation)
|
|
@@ -8,7 +8,7 @@ authors:
|
|
|
8
8
|
given-names: Alex M.
|
|
9
9
|
orcid: "https://orcid.org/0000-0003-0907-464X"
|
|
10
10
|
affiliation: "Independent Researcher"
|
|
11
|
-
version: 0.3.
|
|
11
|
+
version: 0.3.4
|
|
12
12
|
date-released: "2026-09-20"
|
|
13
13
|
license: AGPL-3.0-only
|
|
14
14
|
repository-code: "https://github.com/ammawla/encode-toolkit"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: encode-toolkit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: MCP server for querying and downloading ENCODE Project genomics data directly from Claude
|
|
5
5
|
Project-URL: Homepage, https://github.com/ammawla/encode-toolkit
|
|
6
6
|
Project-URL: Repository, https://github.com/ammawla/encode-toolkit
|
|
@@ -37,7 +37,7 @@ Description-Content-Type: text/markdown
|
|
|
37
37
|
|
|
38
38
|
[](LICENSE)
|
|
39
39
|
[](https://www.python.org/downloads/)
|
|
40
|
-
[](CHANGELOG.md)
|
|
41
41
|
[]()
|
|
42
42
|
[](docs/skill-vignettes/)
|
|
43
43
|
[](src/encode_connector/server/main.py)
|
|
@@ -331,7 +331,7 @@ Search ENCODE experiments with 20+ filters.
|
|
|
331
331
|
|
|
332
332
|
| Parameter | Type | Description |
|
|
333
333
|
|-----------|------|-------------|
|
|
334
|
-
| `assay_title` | string | Assay type: "Histone ChIP-seq", "ATAC-seq", "RNA-seq", "Hi-C", etc. |
|
|
334
|
+
| `assay_title` | string | Assay type: "Histone ChIP-seq", "ATAC-seq", "total RNA-seq", "Hi-C", etc. |
|
|
335
335
|
| `organism` | string | Species (default: "Homo sapiens") |
|
|
336
336
|
| `organ` | string | Organ: "pancreas", "brain", "liver", "heart", "kidney", etc. |
|
|
337
337
|
| `biosample_type` | string | "tissue", "cell line", "primary cell", "organoid" |
|
|
@@ -496,7 +496,7 @@ Get grouped statistics of your tracked experiment collection.
|
|
|
496
496
|
</details>
|
|
497
497
|
|
|
498
498
|
<details>
|
|
499
|
-
<summary><strong>Provenance and export tools (
|
|
499
|
+
<summary><strong>Provenance and export tools (5)</strong></summary>
|
|
500
500
|
|
|
501
501
|
### `encode_log_derived_file`
|
|
502
502
|
|
|
@@ -624,7 +624,7 @@ When installed as a Claude Code plugin, ENCODE Toolkit includes 47 literature-ba
|
|
|
624
624
|
</details>
|
|
625
625
|
|
|
626
626
|
<details>
|
|
627
|
-
<summary><strong>Workflow skills (
|
|
627
|
+
<summary><strong>Workflow skills (10)</strong></summary>
|
|
628
628
|
|
|
629
629
|
| Skill | Description |
|
|
630
630
|
|-------|-------------|
|
|
@@ -681,7 +681,7 @@ Each pipeline includes a SKILL.md overview, 5-stage reference files (preprocessi
|
|
|
681
681
|
| File | Description |
|
|
682
682
|
|-------|-------------|
|
|
683
683
|
| `skills/histone-aggregation/references/histone-marks-reference.md` | Comprehensive chromatin biology catalog (1,442 lines) — 21 histone marks with writers/erasers/readers, 5 novel acylation marks, ChromHMM state models (5 to 51 states), TF co-binding patterns, chromatin remodeling complexes, DNA methylation-chromatin interplay, nucleosome dynamics, 3D genome organization, chromatin in disease. 74 primary references |
|
|
684
|
-
| `skills/*/references/literature.md` |
|
|
684
|
+
| `skills/*/references/literature.md` | 47 per-skill literature reference documents — about 240 papers cataloged with DOI, PMID, citation counts, and skill-relevant key findings |
|
|
685
685
|
|
|
686
686
|
</details>
|
|
687
687
|
|
|
@@ -710,12 +710,12 @@ Most genomics tools give you one thing. ENCODE Toolkit gives you the full resear
|
|
|
710
710
|
| Category | Assays |
|
|
711
711
|
|----------|--------|
|
|
712
712
|
| **Histone/Chromatin** | Histone ChIP-seq, TF ChIP-seq, ATAC-seq, DNase-seq, CUT&RUN, CUT&Tag, MNase-seq |
|
|
713
|
-
| **Transcription** | RNA-seq,
|
|
713
|
+
| **Transcription** | total RNA-seq, polyA plus RNA-seq, small RNA-seq, long read RNA-seq, CAGE, RAMPAGE, PRO-seq, GRO-seq |
|
|
714
714
|
| **3D Genome** | Hi-C, intact Hi-C, Micro-C, ChIA-PET, HiChIP, PLAC-seq, 5C |
|
|
715
715
|
| **DNA Methylation** | WGBS, RRBS, MeDIP-seq, MRE-seq |
|
|
716
716
|
| **Functional** | STARR-seq, MPRA, CRISPR screen, eCLIP, iCLIP |
|
|
717
|
-
| **Single Cell** | scRNA-seq, snATAC-seq,
|
|
718
|
-
| **Perturbation** | CRISPRi
|
|
717
|
+
| **Single Cell** | scRNA-seq, snATAC-seq, snRNA-seq, long read scRNA-seq |
|
|
718
|
+
| **Perturbation** | CRISPRi RNA-seq, shRNA RNA-seq, siRNA RNA-seq, CRISPR RNA-seq |
|
|
719
719
|
|
|
720
720
|
**Supported file formats**: `fastq` `bam` `bed` `bigWig` `bigBed` `tsv` `csv` `hic` `tagAlign` `bedpe` `pairs` `fasta` `vcf` `tar`
|
|
721
721
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://www.python.org/downloads/)
|
|
7
|
-
[](CHANGELOG.md)
|
|
8
8
|
[]()
|
|
9
9
|
[](docs/skill-vignettes/)
|
|
10
10
|
[](src/encode_connector/server/main.py)
|
|
@@ -298,7 +298,7 @@ Search ENCODE experiments with 20+ filters.
|
|
|
298
298
|
|
|
299
299
|
| Parameter | Type | Description |
|
|
300
300
|
|-----------|------|-------------|
|
|
301
|
-
| `assay_title` | string | Assay type: "Histone ChIP-seq", "ATAC-seq", "RNA-seq", "Hi-C", etc. |
|
|
301
|
+
| `assay_title` | string | Assay type: "Histone ChIP-seq", "ATAC-seq", "total RNA-seq", "Hi-C", etc. |
|
|
302
302
|
| `organism` | string | Species (default: "Homo sapiens") |
|
|
303
303
|
| `organ` | string | Organ: "pancreas", "brain", "liver", "heart", "kidney", etc. |
|
|
304
304
|
| `biosample_type` | string | "tissue", "cell line", "primary cell", "organoid" |
|
|
@@ -463,7 +463,7 @@ Get grouped statistics of your tracked experiment collection.
|
|
|
463
463
|
</details>
|
|
464
464
|
|
|
465
465
|
<details>
|
|
466
|
-
<summary><strong>Provenance and export tools (
|
|
466
|
+
<summary><strong>Provenance and export tools (5)</strong></summary>
|
|
467
467
|
|
|
468
468
|
### `encode_log_derived_file`
|
|
469
469
|
|
|
@@ -591,7 +591,7 @@ When installed as a Claude Code plugin, ENCODE Toolkit includes 47 literature-ba
|
|
|
591
591
|
</details>
|
|
592
592
|
|
|
593
593
|
<details>
|
|
594
|
-
<summary><strong>Workflow skills (
|
|
594
|
+
<summary><strong>Workflow skills (10)</strong></summary>
|
|
595
595
|
|
|
596
596
|
| Skill | Description |
|
|
597
597
|
|-------|-------------|
|
|
@@ -648,7 +648,7 @@ Each pipeline includes a SKILL.md overview, 5-stage reference files (preprocessi
|
|
|
648
648
|
| File | Description |
|
|
649
649
|
|-------|-------------|
|
|
650
650
|
| `skills/histone-aggregation/references/histone-marks-reference.md` | Comprehensive chromatin biology catalog (1,442 lines) — 21 histone marks with writers/erasers/readers, 5 novel acylation marks, ChromHMM state models (5 to 51 states), TF co-binding patterns, chromatin remodeling complexes, DNA methylation-chromatin interplay, nucleosome dynamics, 3D genome organization, chromatin in disease. 74 primary references |
|
|
651
|
-
| `skills/*/references/literature.md` |
|
|
651
|
+
| `skills/*/references/literature.md` | 47 per-skill literature reference documents — about 240 papers cataloged with DOI, PMID, citation counts, and skill-relevant key findings |
|
|
652
652
|
|
|
653
653
|
</details>
|
|
654
654
|
|
|
@@ -677,12 +677,12 @@ Most genomics tools give you one thing. ENCODE Toolkit gives you the full resear
|
|
|
677
677
|
| Category | Assays |
|
|
678
678
|
|----------|--------|
|
|
679
679
|
| **Histone/Chromatin** | Histone ChIP-seq, TF ChIP-seq, ATAC-seq, DNase-seq, CUT&RUN, CUT&Tag, MNase-seq |
|
|
680
|
-
| **Transcription** | RNA-seq,
|
|
680
|
+
| **Transcription** | total RNA-seq, polyA plus RNA-seq, small RNA-seq, long read RNA-seq, CAGE, RAMPAGE, PRO-seq, GRO-seq |
|
|
681
681
|
| **3D Genome** | Hi-C, intact Hi-C, Micro-C, ChIA-PET, HiChIP, PLAC-seq, 5C |
|
|
682
682
|
| **DNA Methylation** | WGBS, RRBS, MeDIP-seq, MRE-seq |
|
|
683
683
|
| **Functional** | STARR-seq, MPRA, CRISPR screen, eCLIP, iCLIP |
|
|
684
|
-
| **Single Cell** | scRNA-seq, snATAC-seq,
|
|
685
|
-
| **Perturbation** | CRISPRi
|
|
684
|
+
| **Single Cell** | scRNA-seq, snATAC-seq, snRNA-seq, long read scRNA-seq |
|
|
685
|
+
| **Perturbation** | CRISPRi RNA-seq, shRNA RNA-seq, siRNA RNA-seq, CRISPR RNA-seq |
|
|
686
686
|
|
|
687
687
|
**Supported file formats**: `fastq` `bam` `bed` `bigWig` `bigBed` `tsv` `csv` `hic` `tagAlign` `bedpe` `pairs` `fasta` `vcf` `tar`
|
|
688
688
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "encode-toolkit"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "MCP server for querying and downloading ENCODE Project genomics data directly from Claude"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "AGPL-3.0-only"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""ENCODE Project connector - MCP server and Python client."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = version("encode-toolkit")
|
|
7
|
+
except PackageNotFoundError: # a source tree that is not installed
|
|
8
|
+
__version__ = "0+unknown"
|
|
9
|
+
__author__ = "Dr. Alex M. Mawla, PhD"
|
|
@@ -12,12 +12,21 @@ DOWNLOAD_CONCURRENCY = 3
|
|
|
12
12
|
DEFAULT_TIMEOUT = 30.0
|
|
13
13
|
DOWNLOAD_TIMEOUT = 300.0
|
|
14
14
|
DEFAULT_LIMIT = 25
|
|
15
|
+
# Frame for a single experiment. "page" is "embedded" plus the "audit" property; with
|
|
16
|
+
# "embedded" ENCODE omits the audits and every experiment looks free of errors and warnings.
|
|
17
|
+
EXPERIMENT_FRAME = "page"
|
|
18
|
+
# experiments read per request while a file search walks the experiments of one organism
|
|
19
|
+
EXPERIMENT_PAGE_SIZE = 200
|
|
20
|
+
# ...and how many experiments it reads at most: each one costs a request to ENCODE
|
|
21
|
+
MAX_EXPERIMENTS_SCANNED = 1000
|
|
22
|
+
# files of one experiment read per request during that walk
|
|
23
|
+
FILES_PAGE_SIZE = 200
|
|
15
24
|
try:
|
|
16
25
|
import importlib.metadata
|
|
17
26
|
|
|
18
27
|
_version = importlib.metadata.version("encode-toolkit")
|
|
19
28
|
except importlib.metadata.PackageNotFoundError:
|
|
20
|
-
_version = "0.3.
|
|
29
|
+
_version = "0.3.4"
|
|
21
30
|
USER_AGENT = f"encode-toolkit/{_version} (MCP; +https://github.com/ammawla/encode-toolkit)"
|
|
22
31
|
|
|
23
32
|
# Keyring service name for credential storage
|
|
@@ -239,8 +248,18 @@ FILE_FORMATS = [
|
|
|
239
248
|
"vcf",
|
|
240
249
|
"bigInteract",
|
|
241
250
|
"idx",
|
|
242
|
-
"dat",
|
|
243
251
|
"txt",
|
|
252
|
+
"h5ad",
|
|
253
|
+
"hdf5",
|
|
254
|
+
"sam",
|
|
255
|
+
"wig",
|
|
256
|
+
"starch",
|
|
257
|
+
"chain",
|
|
258
|
+
"PWM",
|
|
259
|
+
"btr",
|
|
260
|
+
"cndb",
|
|
261
|
+
"nucle3d",
|
|
262
|
+
"yaml",
|
|
244
263
|
]
|
|
245
264
|
|
|
246
265
|
OUTPUT_TYPES = [
|
|
@@ -277,7 +296,6 @@ OUTPUT_TYPES = [
|
|
|
277
296
|
"pseudoreplicated peaks",
|
|
278
297
|
"pseudoreplicated IDR thresholded peaks",
|
|
279
298
|
"replicated peaks",
|
|
280
|
-
"stable peaks",
|
|
281
299
|
"hotspots",
|
|
282
300
|
"footprints",
|
|
283
301
|
"peaks and background as input for IDR",
|
|
@@ -289,6 +307,10 @@ OUTPUT_TYPES = [
|
|
|
289
307
|
"filtered peaks",
|
|
290
308
|
# Quantifications
|
|
291
309
|
"gene quantifications",
|
|
310
|
+
"sparse gene count matrix of unique reads",
|
|
311
|
+
"sparse gene count matrix of all reads",
|
|
312
|
+
"unfiltered sparse gene count matrix of unique reads",
|
|
313
|
+
"unfiltered sparse gene count matrix of all reads",
|
|
292
314
|
"transcript quantifications",
|
|
293
315
|
"exon quantifications",
|
|
294
316
|
"microRNA quantifications",
|
|
@@ -347,7 +369,6 @@ OUTPUT_CATEGORIES = [
|
|
|
347
369
|
"annotation",
|
|
348
370
|
"quantification",
|
|
349
371
|
"reference",
|
|
350
|
-
"quality metric",
|
|
351
372
|
]
|
|
352
373
|
|
|
353
374
|
FILE_STATUSES = [
|
|
@@ -381,6 +402,14 @@ ASSEMBLIES = [
|
|
|
381
402
|
"dm3",
|
|
382
403
|
"ce11",
|
|
383
404
|
"ce10",
|
|
405
|
+
"GRCh38-minimal",
|
|
406
|
+
"mm10-minimal",
|
|
407
|
+
"T2T-CHM13",
|
|
408
|
+
"J02459.1",
|
|
409
|
+
"ENC001.1",
|
|
410
|
+
"ENC002.1",
|
|
411
|
+
"ENC003.1",
|
|
412
|
+
"ENC004.1",
|
|
384
413
|
]
|
|
385
414
|
|
|
386
415
|
LIFE_STAGES = [
|
|
@@ -416,6 +445,28 @@ METADATA_MAP = {
|
|
|
416
445
|
}
|
|
417
446
|
|
|
418
447
|
# ENCODE API parameter name mapping (user-friendly -> API param)
|
|
448
|
+
# Fields requested from /search/?type=Experiment. They are what ExperimentSummary.from_api
|
|
449
|
+
# reads; naming them makes the API embed labels instead of returning object paths.
|
|
450
|
+
EXPERIMENT_SEARCH_FIELDS = (
|
|
451
|
+
"accession",
|
|
452
|
+
"assay_title",
|
|
453
|
+
"target.label",
|
|
454
|
+
"biosample_summary",
|
|
455
|
+
"biosample_ontology.classification",
|
|
456
|
+
"biosample_ontology.organ_slims",
|
|
457
|
+
"replicates.library.biosample.organism.scientific_name",
|
|
458
|
+
"status",
|
|
459
|
+
"date_released",
|
|
460
|
+
"description",
|
|
461
|
+
"lab.title",
|
|
462
|
+
"files.@id",
|
|
463
|
+
"replication_type",
|
|
464
|
+
"life_stage_age",
|
|
465
|
+
"assembly",
|
|
466
|
+
"audit",
|
|
467
|
+
"dbxrefs",
|
|
468
|
+
)
|
|
469
|
+
|
|
419
470
|
EXPERIMENT_FILTER_MAP = {
|
|
420
471
|
"assay_title": "assay_title",
|
|
421
472
|
"organism": "replicates.library.biosample.donor.organism.scientific_name",
|