Downloading datasets
Built torchcell datasets are served as packaged archives by tc-data, a public
read-only HTTP endpoint with Swagger documentation. Each archive holds a dataset’s processed/
directory (the records LMDB and its interned sibling) and preprocess/ directory
(build_manifest.json, gene_set.json, experiment_reference_index.json), exactly
as the loader wrote them, so a download replaces the build step. The raw files each
loader consumed are served from the same endpoint, hash-pinned by their manifest.json,
and so are two more file tiers that graph records point at without storing their bytes:
the genomes tier (reference and isolate assembly sets) and the objects tier (derived
files such as embeddings, matrices and indexed FASTA).
The endpoint is http://torchcell-database.ncsa.illinois.edu:8724, on the database
host, serving the archive store and the raw mirror from the Taiga project storage. No
key, account or ssh is needed: every route is open for reading. The URL is built into
the package as torchcell.endpoint_http.DEFAULT_URL, and TC_DATA_URL overrides it
for a mirror or a development server. The store currently holds gene_essentiality_sgd,
smf_costanzo2016, amino_acid_cooper2010, amino_acid_mulleder2016 and
betaxanthin_cachera2023; GET /datasets is the authoritative list.
Swagger
The interactive documentation lives at <TC_DATA_URL>/docs and the OpenAPI schema at
<TC_DATA_URL>/openapi.json. The routes:
Route |
Returns |
|---|---|
|
liveness, artifact and raw-key counts |
|
the artifact index: one row per packaged archive |
|
every packaged version of one dataset |
|
the archive; |
|
citation keys in the raw mirror |
|
the key’s |
|
the files that manifest lists, with sha256 |
|
one raw file; |
|
assembly sets in the genomes tier that carry a manifest |
|
the set’s genome manifest |
|
the files that manifest lists, with sha256 |
|
one genomes file; |
|
object keys in the objects tier that carry a manifest |
|
the key’s |
|
the files that manifest lists, with sha256 |
|
one objects file; |
An index row records the dataset slug, the loader dataset_class, the
torchcell_version and git commit the LMDB was built with, the knowledge-graph
release it was admitted to, content_sha256 (over the experiment ids, comparable with
the release manifest), the archive name, archive_sha256, archive_bytes, and
status (supported or deprecated). Pick the newest supported row whose
torchcell_version shares your installed major.minor.
Raw, genomes and objects tiers
The three file tiers share one serving rule. Each key (a citation key, an assembly set,
or an object key) is a directory with a manifest.json listing every file by path,
role, size and sha256; a file is served only if its key’s manifest lists it, and the
X-Artifact-SHA256 header of the response is the manifest’s hash, so a client checks
the bytes it received against it. Every file route honors Range, which is how an
interrupted download of a large assembly container resumes.
Raw (
/raw): the source files each dataset loader consumed, keyed by citation key; the manifest is the literatureManifest.Genomes (
/genomes): sequence-level reference data, one assembly set per key (for example the SGD S288C R64-4-1 release, or the Peter et al. 2018 isolate assemblies); the manifest is a genome manifest naming the organism, strain or population, source and release.Objects (
/objects): derived files a record points at, keyed by a citation key or a named derived set; the manifest is the literatureManifest, and each file’s processing record names the script and inputs that produced it.
/genomes and /objects list only keys that carry a manifest, and an endpoint without
one of those tiers answers its listing with an empty list.
Paper content is withheld. In the raw and objects tiers a manifest record whose role
begins paper_ (paper_pdf, paper_text, paper_ocr, paper_fulltext) is left out
of /manifest and /files, and a request for its bytes answers 404 paper content is not served. SI files and data files under the same key are served as usual.
curl
export TC_DATA_URL=http://torchcell-database.ncsa.illinois.edu:8724
curl "$TC_DATA_URL/datasets" | python -m json.tool
curl "$TC_DATA_URL/datasets/smf_costanzo2016"
# download an archive, resuming if interrupted, then verify it
ARCHIVE=smf_costanzo2016-1.2.1-d8a0f06c.tar.xz
curl -C - -o "$ARCHIVE" "$TC_DATA_URL/datasets/smf_costanzo2016/$ARCHIVE"
sha256sum "$ARCHIVE" # must equal the row's archive_sha256
# unpack into a dataset root; processed/ and preprocess/ appear beside it
mkdir -p data/torchcell/smf_costanzo2016
tar -xf "$ARCHIVE" -C data/torchcell/smf_costanzo2016
# raw files
curl "$TC_DATA_URL/raw"
curl "$TC_DATA_URL/raw/<citation_key>/files"
# genomes and objects tiers: list, read the file rows, fetch one file, verify it
curl "$TC_DATA_URL/genomes"
curl "$TC_DATA_URL/genomes/<assembly_set>/files"
curl -C - -D headers.txt \
-o "<file>" "$TC_DATA_URL/genomes/<assembly_set>/artifact/<path>"
grep -i x-artifact-sha256 headers.txt; sha256sum "<file>" # the two must agree
curl "$TC_DATA_URL/objects"
curl "$TC_DATA_URL/objects/<object_key>/files"
Environment variables
Variable |
Where |
Meaning |
|---|---|---|
|
client |
endpoint base URL, overriding the built-in |
|
server |
the artifact store ( |
|
server |
the raw mirror; defaults to |
|
server |
the genomes tier; defaults to |
|
server |
the objects tier; defaults to |
|
server |
bind address and port (default |
From Python
With TC_DATA_URL set, any ExperimentDataset loader whose LMDB is absent fetches, verifies and unpacks its artifact instead of downloading the
publisher files and running process(). If the endpoint has no artifact compatible
with the installed version the loader raises and names the slug; it never falls back
to the publisher path while the variable is set.
A loader prefers a download only when TC_DATA_URL is set explicitly; the built-in
default does not switch loaders over. The variable is read from the process environment.
Either export it in the shell, as in the curl section, or put the same line, without
export, in a .env file in your project and load it before constructing a loader:
from dotenv import load_dotenv
load_dotenv() # reads the .env beside this script or in a parent directory
from torchcell.datasets.scerevisiae.costanzo2016 import SmfCostanzo2016Dataset
dataset = SmfCostanzo2016Dataset(root="data/torchcell/smf_costanzo2016")
torchcell does not read .env on its own. A .env with no load_dotenv() call leaves
TC_DATA_URL unset, and the loader then downloads the publisher files and builds, with
no error. load_dotenv() never overrides a variable that is already exported.
The client needs no configuration: DatasetClient() with no arguments talks to the
public endpoint, and DatasetClient.from_env() uses TC_DATA_URL when it is set and
the public endpoint otherwise.
from torchcell.datasets.client import DatasetClient, unpack_artifact
client = DatasetClient.from_env() # TC_DATA_URL if set, else the public endpoint
artifact = client.select("smf_costanzo2016") # newest supported row on this major.minor
if artifact is None:
raise SystemExit("nothing compatible with the installed torchcell")
archive = client.download(artifact, dest=f"artifacts/{artifact.archive}") # verifies sha256
unpack_artifact(archive, "data/torchcell/smf_costanzo2016")
The raw mirror keys and files are one GET away; see the Swagger page for the exact
shapes. All three file tiers have client methods:
from torchcell.datasets.client import DatasetClient
client = DatasetClient.from_env()
client.raw_manifest("<citation_key>") # literature Manifest
client.raw_files("<citation_key>") # path, role, bytes, sha256
client.download_raw_file("<citation_key>", "<path>", dest="raw/<path>")
client.genomes() # ["peter2018_1011_assemblies", ...]
client.genome_manifest("peter2018_1011_assemblies") # GenomeManifest
client.genome_files("peter2018_1011_assemblies") # path, role, bytes, sha256
client.download_genome_file(
"peter2018_1011_assemblies", "<path>", dest="genomes/<path>"
)
client.objects()
client.object_manifest("<object_key>") # literature Manifest
client.download_object_file("<object_key>", "<path>", dest="objects/<path>")
Each download looks up the file’s row in the key’s manifest first (a path the manifest
does not list raises KeyError before any request), resumes a <dest>.part with a
Range request, and requires both the server’s X-Artifact-SHA256 and the hash of
the received bytes to equal the manifest row; on a mismatch the partial file is
removed and ArtifactIntegrityError is raised.