Mercurial > repos > goeckslab > scimap_anndata_to_csv
diff scimap_phenotyping.py @ 0:199b5f278356 draft
planemo upload for repository https://github.com/goeckslab/tools-mti/tree/main/tools/scimap commit 9fb5578191db8a559191e45156cfb95350f01aea
author | goeckslab |
---|---|
date | Mon, 10 Jun 2024 18:44:49 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scimap_phenotyping.py Mon Jun 10 18:44:49 2024 +0000 @@ -0,0 +1,120 @@ +import argparse +import warnings + +import pandas as pd +import scimap as sm +from anndata import read_h5ad + + +def main( + adata, + output, + log, + gating_workflow, + gating_workflow_ext, + manual_gates=None, + manual_gates_ext=None, + random_state=0 +): + """ + Parameter + --------- + adata : str + File path to the input AnnData. + output : str + File path to the output AnnData. + log: bool + Boolean whether to log the input data prior to rescaling + gating_workflow : str + File path to the gating workflow. + gating_workflow_ext : str + Datatype for gating workflow, either 'csv' or 'tabular'. + manual_gates : str + File path to the munual gating. + manual_gates_ext : str + Datatype for munual gate, either 'csv' or 'tabular'. + random_state: int + The seed used by the random number generator for GMM in sm.pp.rescale + """ + warnings.simplefilter('ignore') + + adata = read_h5ad(adata) + # Rescale data + if manual_gates: + sep = ',' if manual_gates_ext == 'csv' else '\t' + manual_gates = pd.read_csv(manual_gates, sep=sep) + + adata = sm.pp.rescale( + adata, + gate=manual_gates, + log=log, + random_state=random_state + ) + + # Phenotype cells + # Load the gating workflow + sep = ',' if gating_workflow_ext == 'csv' else '\t' + phenotype = pd.read_csv(gating_workflow, sep=sep) + adata = sm.tl.phenotype_cells( + adata, + phenotype=phenotype, + label="phenotype" + ) + + # Summary of the phenotyping + print(adata.obs['phenotype'].value_counts()) + + adata.write(output) + + +if __name__ == '__main__': + aparser = argparse.ArgumentParser() + aparser.add_argument("-a", "--adata", dest="adata", required=True) + aparser.add_argument("-o", "--output", dest="output", required=True) + aparser.add_argument("-l", "--log", dest="log", action="store_true") + aparser.add_argument( + "-g", + "--gating_workflow", + dest="gating_workflow", + required=True + ) + aparser.add_argument( + "-s", + "--gating_workflow_ext", + dest="gating_workflow_ext", + required=True + ) + aparser.add_argument( + "-m", + "--manual_gates", + dest="manual_gates", + required=False + ) + aparser.add_argument( + "-S", + "--manual_gates_ext", + dest="manual_gates_ext", + required=False + ) + aparser.add_argument( + "--random_state", + dest="random_state", + type=int, + required=False + ) + + args = aparser.parse_args() + + if args.log: + print("\n adata.raw.X will be log1p transformed \n") + + main( + adata=args.adata, + output=args.output, + log=args.log, + gating_workflow=args.gating_workflow, + gating_workflow_ext=args.gating_workflow_ext, + manual_gates=args.manual_gates, + manual_gates_ext=args.manual_gates_ext, + random_state=args.random_state + )