pySCENIC icon indicating copy to clipboard operation
pySCENIC copied to clipboard

multiple output of cli pyscenic ctx

Open ccshao opened this issue 6 years ago • 4 comments

From the cli, the pyscenic ctx could only take one argument of -o, so one has to run twice to get the enriched motif and regulon, while each run is very time consuming. Could it be possible to output enriched motif and regulon simultaneously?Thanks!

ccshao avatar Oct 08 '19 14:10 ccshao

Dear,

Good suggestion. A workaround, for now, could be to convert the motif file into regulons via a Python code snippet:

import pickle
from pyscenic.utils import load_motifs
from pyscenic.prune import df2regulons

MOTIFS_FNAME = "" # To be completed.
REGULONS_FNAME = ""# To be completed.

df = load_motifs(MOTIFS_FNAME)
regulons = df2regulons(df)
with open(REGULONS_FNAME, 'wb') as f:
    pickle.dump(regulons, f)

Kindest regards, Bram

bramvds avatar Oct 09 '19 06:10 bramvds

Thanks the quick help. I just found another minor issue: the output argument with gmt/dat(pickle?) don't work. As above I used the latest version (0.9.18)

gmt output:

pyscenic ctx -o test2.gmt --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb

(base) 01_cli $ pyscenic ctx -o test2.gmt --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb /home/shao/miniconda3/lib/python3.7/site-packages/dask/config.py:161: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(f.read()) or {}

2019-10-09 09:18:13,909 - pyscenic.cli.pyscenic - INFO - Creating modules.

2019-10-09 09:18:13,921 - pyscenic.cli.pyscenic - INFO - Loading expression matrix.

2019-10-09 09:18:19,910 - pyscenic.utils - INFO - Calculating Pearson correlations.

2019-10-09 09:18:19,910 - pyscenic.utils - WARNING ... Dropout masking is currently set to [False].

2019-10-09 09:18:21,623 - pyscenic.utils - INFO - Creating modules.

2019-10-09 09:18:43,545 - pyscenic.cli.pyscenic - INFO - Loading databases. .... 2019-10-09 09:20:28,286 - pyscenic.cli.pyscenic - INFO - Writing results to file. Traceback (most recent call last): File "/home/shao/miniconda3/bin/pyscenic", line 10, in sys.exit(main()) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 408, in main args.func(args) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 165, in prune_targets_command save_enriched_motifs(df_motifs, args.output.name) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/utils.py", line 177, in save_enriched_motifs GeneSignature.to_gmt(fname, regulons) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/genesig.py", line 94, in to_gmt signature.metadata(gene_separator), field_separator, TypeError: 'str' object is not callable

Similar errorr for dat output with command:

pyscenic ctx -o test2.dat --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb

2019-10-09 09:28:02,682 - pyscenic.cli.pyscenic - INFO - Writing results to file. Traceback (most recent call last): File "/home/shao/miniconda3/bin/pyscenic", line 10, in sys.exit(main()) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 408, in main args.func(args) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 165, in prune_targets_command save_enriched_motifs(df_motifs, args.output.name) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/utils.py", line 175, in save_enriched_motifs pickle.dump(regulons, fname) TypeError: file must have a 'write' attribute

I tried pickl:

(base) 01_cli $ pyscenic ctx -o test2.pickle --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb

provides error:

Traceback (most recent call last): File "/home/shao/miniconda3/bin/pyscenic", line 10, in sys.exit(main()) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 408, in main args.func(args) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/pyscenic.py", line 165, in prune_targets_command save_enriched_motifs(df_motifs, args.output.name) File "/home/shao/miniconda3/lib/python3.7/site-packages/pyscenic/cli/utils.py", line 181, in save_enriched_motifs raise ValueError("Unknown file format "{}".".format(fname)) ValueError: Unknown file format "test2.pickle".

YAML and json work fine,

pyscenic ctx -o regulons.json --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb
pyscenic ctx -o regulons2.yaml --annotations_fname $motifanno --expression_mtx_fname $inmtx -t grnresults_lite.csv $regdb

ccshao avatar Oct 09 '19 07:10 ccshao

These bugs should be fixed in release 0.9.19.

bramvds avatar Oct 09 '19 19:10 bramvds

Good to know these.

ccshao avatar Oct 10 '19 07:10 ccshao