aertslab / pySCENIC

pySCENIC is a lightning-fast python implementation of the SCENIC pipeline (Single-Cell rEgulatory Network Inference and Clustering) which enables biologists to infer transcription factors, gene regulatory networks and cell types from single-cell RNA-seq data.
http://scenic.aertslab.org
GNU General Public License v3.0
420 stars 179 forks source link

multiple output of cli pyscenic ctx #100

Open ccshao opened 4 years ago

ccshao commented 4 years ago

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!

bramvds commented 4 years ago

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

ccshao commented 4 years ago

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
bramvds commented 4 years ago

These bugs should be fixed in release 0.9.19.

ccshao commented 4 years ago

Good to know these.