| """Reproduce the bundled measured-data checks, including frozen external transfer.""" |
| import argparse |
| import json |
| from pathlib import Path |
| import subprocess |
| import sys |
| import joblib |
| import pandas as pd |
| import yaml |
| from remedi.data import prepare_h5ad |
| from remedi.pipeline import evaluate |
| from remedi.plotting import plot_summary |
|
|
| p=argparse.ArgumentParser() |
| p.add_argument('--output',default='runs/validation') |
| a=p.parse_args() |
| root=Path(__file__).resolve().parents[1] |
| out=Path(a.output).resolve();out.mkdir(parents=True,exist_ok=True) |
|
|
| def run(*args): |
| subprocess.run([sys.executable,*map(str,args)],check=True,cwd=root) |
|
|
| for study,filename in [('tahoe','tahoe.h5ad'),('sciplex','sciplex_prototype.h5ad')]: |
| run(root/'scripts/run_pipeline.py','--h5ad',root/'examples'/study/filename, |
| '--mapping',root/'configs'/f'{study}.yaml','--structures',root/'examples'/study/'structures.csv', |
| '--output',out/study,'--min-cells',2,'--dimensions',8,'--genes',250,'--max-queries',4,'--tolerance',1) |
| run(root/'scripts/align_genes.py','--inputs',root/'examples/tahoe/tahoe.h5ad', |
| root/'examples/sciplex/sciplex_prototype.h5ad','--gene-columns','gene_symbol','index', |
| '--drop-ambiguous','--output',out/'aligned') |
| run(root/'scripts/run_pipeline.py','--h5ad',out/'aligned/0_tahoe.h5ad', |
| '--mapping',root/'configs/tahoe.yaml','--structures',root/'examples/tahoe/structures.csv', |
| '--output',out/'transfer-source','--min-cells',2,'--dimensions',8,'--genes',250,'--max-queries',4,'--tolerance',1) |
| s=pd.read_csv(root/'examples/sciplex/structures.csv') |
| splits=s[['smiles']].copy();splits['split']='test' |
| d=prepare_h5ad(out/'aligned/1_sciplex_prototype.h5ad',out/'transfer/data', |
| yaml.safe_load((root/'configs/sciplex.yaml').read_text()),splits,s, |
| feature_model=out/'transfer-source/data/cell_feature_model.joblib',min_cells=2,max_cells=32) |
| m=joblib.load(out/'transfer-source/model/model.joblib') |
| c=json.loads((out/'transfer-source/calibration/calibration.json').read_text()) |
| evaluate(d,m,c,out/'transfer/evaluation',external_track='unseen',scenarios=16,max_queries=4,tolerance=1) |
| plot_summary(out/'transfer/evaluation/summary.csv',out/'transfer/plots') |
| print(f'Completed measured-data integration checks in {out}') |
|
|