Skip to content
Open
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
a51ee1d
Add ecoli-sources dependency and SourceBundle resolver
cplong90 May 4, 2026
25df9aa
Route ParCa rnaseq ingestion through the SourceBundle
cplong90 May 4, 2026
6117e9e
SourceBundle: defensively validate against ReferenceBundleSchema at load
cplong90 May 4, 2026
166add0
Rewire KnowledgeBaseEcoli flat-file loading through SourceBundle
cplong90 May 4, 2026
ad2b91a
Drop deprecated rnaseq CLI plumbing now that bundle is the source of …
cplong90 May 5, 2026
1d03116
Remove wholecell.io.data_qc: upstream-data QC moves out of vEcoli
cplong90 May 5, 2026
2088519
Rewrite data ingestion docs around the bundle pattern
cplong90 May 5, 2026
e115af6
Extend cistron_data with common_name + synonyms; route consumers thro…
cplong90 May 6, 2026
2558fdc
Route cell_wall reference data through sim_data; propose sim_data-as-…
cplong90 May 6, 2026
89062ab
Annotate dormant data-prep scripts: non-functional after bundle migra…
cplong90 May 6, 2026
4b69e57
Delete legacy reconstruction/ecoli/flat and experimental_data dirs
cplong90 May 6, 2026
aaa432a
Coerce null common_name to empty string in cistron_data
cplong90 May 6, 2026
109faf4
Decouple logical attr-tree path from bundle-resolved I/O path in loaders
cplong90 May 6, 2026
45e196f
Guard _apply_rnaseq_correction against empty corrected_indexes; align…
cplong90 May 6, 2026
9f03ef6
Pin ecoli-sources to data-bundle-migration branch tip 7755e72
cplong90 May 6, 2026
354bf23
Fail-fast on misplaced parca_options keys at config top level
cplong90 May 21, 2026
9ea8285
Merge upstream/master (CovertLab/vEcoli) into data-bundle-migration
cplong90 May 21, 2026
1a2c721
Switch ecoli-sources pin from SSH to HTTPS
cplong90 May 21, 2026
9615b9e
parameters: drop now-unused os + ROOT_PATH imports
cplong90 May 21, 2026
d26592d
Surface cistron_id_to_monomer_ids on sim_data; fix get_TU_ID
cplong90 May 21, 2026
f2734dc
Dockerfile: install git for uv to fetch git-pinned ecoli-sources
cplong90 May 21, 2026
0c41456
Merge upstream/master security updates (PR #425) into data-bundle-mig…
cplong90 May 28, 2026
2b2bedb
Preserve cell_wall/pbp_binding process time_step default in LoadSimData
cplong90 May 28, 2026
b3bb993
Singularity: install git for uv to fetch git-pinned ecoli-sources
cplong90 Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ Its main benefits over the original model are:
4. **Google Cloud support:** workflows too large to run on a local machine
can be easily run on Google Cloud

As in wcEcoli, [raw experimental data](reconstruction/ecoli/flat) is first processed
by the parameter calculator or [ParCa](reconstruction/ecoli/fit_sim_data_1.py) to calculate
model parameters (e.g. transcription probabilities). These parameters are used to configure
[processes](ecoli/processes) that are linked together into a
Raw experimental data lives in [`vivarium-collective/ecoli-sources`](https://github.com/vivarium-collective/ecoli-sources)
as a curated reference bundle (see [doc/data_ingestion.rst](doc/data_ingestion.rst)). The
parameter calculator or [ParCa](reconstruction/ecoli/fit_sim_data_1.py) reads from that
bundle to calculate model parameters (e.g. transcription probabilities). These parameters
are used to configure [processes](ecoli/processes) that are linked together into a
[complete simulation](ecoli/experiments/ecoli_master_sim.py).

## Setup
Expand Down
3 changes: 1 addition & 2 deletions configs/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@
"intermediates_directory": "",
"variable_elongation_transcription": true,
"variable_elongation_translation": false,
"rnaseq_manifest_path": null,
"rnaseq_basal_dataset_id": null,
"bundle_manifest_path": null,
"basal_expression_condition": "M9 Glucose minus AAs",
"rnaseq_fill_missing_genes_from_ref": true
},
Expand Down
7 changes: 0 additions & 7 deletions configs/templates/parca_standalone.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@
"variable_elongation_transcription": true,
"variable_elongation_translation": false,

# RNA-seq input options (optional; omit or set to null for legacy behavior)
# rnaseq_manifest_path: path to manifest TSV listing available RNA-seq datasets
# rnaseq_basal_dataset_id: dataset_id from manifest to use as basal transcriptome
# If both are null/omitted, ParCa uses the legacy raw_data.rna_seq_data tables.
"rnaseq_manifest_path": null,
"rnaseq_basal_dataset_id": null,

# basal_expression_condition: modeled condition name (must match a defined condition)
# This is used throughout ParCa for the baseline growth state.
"basal_expression_condition": "M9 Glucose minus AAs",
Expand Down
11 changes: 0 additions & 11 deletions configs/test_rnaseq_ingestion.json

This file was deleted.

31 changes: 23 additions & 8 deletions data/marA_binding/get_TU_ID.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@
import argparse
import pandas as pd
import pickle
import json
import numpy as np
from ast import literal_eval


def main():
Expand All @@ -36,17 +34,35 @@ def main():
# Load complexation and TU index data from sim_data
sim_data = pickle.load(open(args.sim_data_path, "rb"))
bulk_names = sim_data.internal_state.bulk_molecules.bulk_data["id"].tolist()
cistron_data = sim_data.process.transcription.cistron_data
cistron_id_to_index = {
cistron: idx
for idx, cistron in enumerate(sim_data.process.transcription.cistron_data["id"])
cistron: idx for idx, cistron in enumerate(cistron_data["id"])
}
cistron_tu_mapping = sim_data.process.transcription.cistron_tu_mapping_matrix
comp_stoich = sim_data.process.complexation.stoich_matrix().astype(np.int64).T
comp_molecules = [str(i) for i in sim_data.process.complexation.molecule_names]

rnas = pd.read_table("reconstruction/ecoli/flat/rnas.tsv", comment="#")
rnas["synonyms"] = rnas["synonyms"].apply(literal_eval)
rnas = rnas.explode("synonyms")
# Build a synonym -> cistron-row DataFrame from sim_data: explodes the
# cistron_id_to_synonyms mapping into one row per (cistron, synonym) pair,
# and joins back to the cistron's id, common_name, and monomer_ids.
cistron_id_to_common_name = dict(
zip(cistron_data["id"], cistron_data["common_name"])
)
cistron_id_to_monomer_ids = (
sim_data.process.transcription.cistron_id_to_monomer_ids
)
rnas = pd.DataFrame(
[
{
"id": cistron_id,
"common_name": cistron_id_to_common_name[cistron_id],
"synonyms": syn,
"monomer_ids": cistron_id_to_monomer_ids.get(cistron_id, []),
}
for cistron_id, syns in sim_data.process.transcription.cistron_id_to_synonyms.items()
for syn in syns
]
)

# Use fold change from exposure to 1.5 mg/L tetracycline
tet_FC = pd.read_table("data/marA_binding/tet_FC.tsv")
Expand Down Expand Up @@ -100,7 +116,6 @@ def recursive_search(complex_name, monomers_used):
return add_monomers_used, add_complex_names

def get_IDs(monomer_id):
monomer_id = json.loads(monomer_id)
# Noncoding RNAs
if len(monomer_id) == 0:
return [[], [], [], []]
Expand Down
Loading
Loading