diff --git a/src/scenicplus.egg-info/PKG-INFO b/src/scenicplus.egg-info/PKG-INFO new file mode 100644 index 0000000..4a7d572 --- /dev/null +++ b/src/scenicplus.egg-info/PKG-INFO @@ -0,0 +1,299 @@ +Metadata-Version: 2.1 +Name: scenicplus +Version: 1.0a1 +Summary: SCENIC+ is a python package to build gene regulatory networks (GRNs) using combined or separate single-cell gene expression (scRNA-seq) and single-cell chromatin accessibility (scATAC-seq) data. +Author-email: Seppe De Winter , Carmen Bravo +Project-URL: Homepage, https://github.com/aertslab/scenicplus +Project-URL: Documentation, https://scenicplus.readthedocs.io +Project-URL: Repository, https://github.com/aertslab/scenicplus +Project-URL: Changelog, https://github.com/aertslab/scenicplus/releases +Keywords: scATAC,GRN inference,eGRN inference +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Console +Classifier: Intended Audience :: Science/Research +Classifier: License :: Other/Proprietary License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Topic :: Scientific/Engineering :: Bio-Informatics +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +Requires-Dist: adjusttext==1.0.4 +Requires-Dist: aiohttp==3.9.3 +Requires-Dist: aiosignal==1.3.1 +Requires-Dist: anndata==0.10.5.post1 +Requires-Dist: annoy==1.17.3 +Requires-Dist: appdirs==1.4.4 +Requires-Dist: arboreto==0.1.6 +Requires-Dist: argparse-dataclass==2.0.0 +Requires-Dist: array-api-compat==1.5.1 +Requires-Dist: asttokens==2.4.1 +Requires-Dist: attr==0.3.2 +Requires-Dist: attrs==23.2.0 +Requires-Dist: bbknn==1.6.0 +Requires-Dist: beautifulsoup4==4.12.3 +Requires-Dist: bidict==0.23.1 +Requires-Dist: bioservices==1.11.2 +Requires-Dist: blosc2==2.5.1 +Requires-Dist: bokeh==3.4.0 +Requires-Dist: boltons==23.1.1 +Requires-Dist: bs4==0.0.2 +Requires-Dist: cattrs==23.2.3 +Requires-Dist: certifi==2024.2.2 +Requires-Dist: charset-normalizer==3.3.2 +Requires-Dist: click==8.1.7 +Requires-Dist: cloudpickle==3.0.0 +Requires-Dist: colorama==0.4.6 +Requires-Dist: colorlog==6.8.2 +Requires-Dist: conda-inject==1.3.1 +Requires-Dist: configargparse==1.7 +Requires-Dist: connection-pool==0.0.3 +Requires-Dist: contourpy==1.2.0 +Requires-Dist: ctxcore==0.2.0 +Requires-Dist: cycler==0.12.1 +Requires-Dist: cython==0.29.37 +Requires-Dist: cytoolz==0.12.3 +Requires-Dist: dask[array,complete,dataframe,diagnostics,distributed]==2024.2.1 +Requires-Dist: dataclasses-json==0.6.4 +Requires-Dist: datrie==0.8.2 +Requires-Dist: decorator==5.1.1 +Requires-Dist: dill==0.3.8 +Requires-Dist: distributed==2024.2.1 +Requires-Dist: docutils==0.20.1 +Requires-Dist: dpath==2.1.6 +Requires-Dist: easydev==0.13.1 +Requires-Dist: et-xmlfile==1.1.0 +Requires-Dist: executing==2.0.1 +Requires-Dist: fastjsonschema==2.19.1 +Requires-Dist: fbpca==1.0 +Requires-Dist: filelock==3.13.1 +Requires-Dist: fonttools==4.50.0 +Requires-Dist: frozendict==2.4.0 +Requires-Dist: frozenlist==1.4.1 +Requires-Dist: fsspec==2024.3.1 +Requires-Dist: future==1.0.0 +Requires-Dist: gensim==4.3.2 +Requires-Dist: geosketch==1.2 +Requires-Dist: gevent==24.2.1 +Requires-Dist: gitdb==4.0.11 +Requires-Dist: gitpython==3.1.42 +Requires-Dist: globre==0.1.5 +Requires-Dist: greenlet==3.0.3 +Requires-Dist: grequests==0.7.0 +Requires-Dist: gseapy==0.10.8 +Requires-Dist: h5py==3.10.0 +Requires-Dist: harmonypy==0.0.9 +Requires-Dist: humanfriendly==10.0 +Requires-Dist: idna==3.6 +Requires-Dist: igraph==0.11.4 +Requires-Dist: imageio==2.34.0 +Requires-Dist: immutables==0.20 +Requires-Dist: importlib-metadata==7.0.1 +Requires-Dist: importlib-resources==6.1.2 +Requires-Dist: interlap==0.2.7 +Requires-Dist: intervaltree==3.1.0 +Requires-Dist: ipython==8.22.2 +Requires-Dist: jedi==0.19.1 +Requires-Dist: jinja2==3.1.3 +Requires-Dist: joblib==1.3.2 +Requires-Dist: jsonpickle==3.0.3 +Requires-Dist: jsonschema==4.21.1 +Requires-Dist: jsonschema-specifications==2023.12.1 +Requires-Dist: jupyter-core==5.7.2 +Requires-Dist: kaleido==0.2.1 +Requires-Dist: kiwisolver==1.4.5 +Requires-Dist: lazy-loader==0.3 +Requires-Dist: lda==3.0.0 +Requires-Dist: leidenalg==0.10.2 +Requires-Dist: line-profiler==4.1.2 +Requires-Dist: llvmlite==0.42.0 +Requires-Dist: locket==1.0.0 +Requires-Dist: loompy==3.0.7 +Requires-Dist: loomxpy@ git+https://github.com/aertslab/LoomXpy@main +Requires-Dist: lxml==5.1.0 +Requires-Dist: lz4==4.3.3 +Requires-Dist: macs2==2.2.9.1 +Requires-Dist: markdown-it-py==3.0.0 +Requires-Dist: markupsafe==2.1.5 +Requires-Dist: marshmallow==3.21.1 +Requires-Dist: matplotlib==3.6.3 +Requires-Dist: matplotlib-inline==0.1.6 +Requires-Dist: mdurl==0.1.2 +Requires-Dist: mizani==0.9.3 +Requires-Dist: msgpack==1.0.8 +Requires-Dist: mudata==0.2.3 +Requires-Dist: multidict==6.0.5 +Requires-Dist: multiprocessing-on-dill==3.5.0a4 +Requires-Dist: mypy-extensions==1.0.0 +Requires-Dist: natsort==8.4.0 +Requires-Dist: nbformat==5.10.3 +Requires-Dist: ncls==0.0.68 +Requires-Dist: ndindex==1.8 +Requires-Dist: networkx==3.2.1 +Requires-Dist: numba==0.59.0 +Requires-Dist: numexpr==2.9.0 +Requires-Dist: numpy==1.26.4 +Requires-Dist: numpy-groupies==0.10.2 +Requires-Dist: openpyxl==3.1.2 +Requires-Dist: packaging==24.0 +Requires-Dist: pandas==1.5.0 +Requires-Dist: parso==0.8.3 +Requires-Dist: partd==1.4.1 +Requires-Dist: patsy==0.5.6 +Requires-Dist: pexpect==4.9.0 +Requires-Dist: pillow==10.2.0 +Requires-Dist: plac==1.4.3 +Requires-Dist: platformdirs==4.2.0 +Requires-Dist: plotly==5.19.0 +Requires-Dist: plotnine==0.12.4 +Requires-Dist: polars==0.20.13 +Requires-Dist: progressbar2==4.4.2 +Requires-Dist: prompt-toolkit==3.0.43 +Requires-Dist: protobuf==5.26.0 +Requires-Dist: psutil==5.9.8 +Requires-Dist: ptyprocess==0.7.0 +Requires-Dist: pulp==2.8.0 +Requires-Dist: pure-eval==0.2.2 +Requires-Dist: py-cpuinfo==9.0.0 +Requires-Dist: pyarrow==15.0.0 +Requires-Dist: pyarrow-hotfix==0.6 +Requires-Dist: pybedtools==0.9.1 +Requires-Dist: pybigtools==0.1.2 +Requires-Dist: pybigwig==0.3.22 +Requires-Dist: pybiomart==0.2.0 +Requires-Dist: pycistarget@ git+https://github.com/aertslab/pycistarget@development +Requires-Dist: pycistopic@ git+https://github.com/aertslab/pycisTopic +Requires-Dist: pyfasta==0.5.2 +Requires-Dist: pygam==0.9.0 +Requires-Dist: pygments==2.17.2 +Requires-Dist: pynndescent==0.5.11 +Requires-Dist: pyparsing==3.1.2 +Requires-Dist: pyranges==0.0.111 +Requires-Dist: pyrle==0.0.39 +Requires-Dist: pysam==0.22.0 +Requires-Dist: pyscenic@ git+https://github.com/aertslab/pySCENIC@master +Requires-Dist: python-dateutil==2.9.0.post0 +Requires-Dist: python-utils==3.8.2 +Requires-Dist: pytz==2024.1 +Requires-Dist: pyvis==0.3.2 +Requires-Dist: pyyaml==6.0.1 +Requires-Dist: ray==2.9.3 +Requires-Dist: referencing==0.34.0 +Requires-Dist: requests==2.31.0 +Requires-Dist: requests-cache==1.2.0 +Requires-Dist: reretry==0.11.8 +Requires-Dist: rich==13.7.1 +Requires-Dist: rich-argparse==1.4.0 +Requires-Dist: rpds-py==0.18.0 +Requires-Dist: scanorama==1.7.4 +Requires-Dist: scanpy==1.8.2 +Requires-Dist: scatac-fragment-tools==0.1.0 +Requires-Dist: scikit-image==0.22.0 +Requires-Dist: scikit-learn==1.3.2 +Requires-Dist: scipy==1.12.0 +Requires-Dist: scrublet==0.2.3 +Requires-Dist: seaborn==0.13.2 +Requires-Dist: sinfo==0.3.4 +Requires-Dist: six==1.16.0 +Requires-Dist: smart-open==6.4.0 +Requires-Dist: smmap==5.0.1 +Requires-Dist: snakemake==8.5.5 +Requires-Dist: snakemake-interface-common==1.17.1 +Requires-Dist: snakemake-interface-executor-plugins==8.2.0 +Requires-Dist: snakemake-interface-report-plugins==1.0.0 +Requires-Dist: snakemake-interface-storage-plugins==3.1.1 +Requires-Dist: sorted-nearest==0.0.39 +Requires-Dist: sortedcontainers==2.4.0 +Requires-Dist: soupsieve==2.5 +Requires-Dist: stack-data==0.6.3 +Requires-Dist: statistics==1.0.3.5 +Requires-Dist: statsmodels==0.14.1 +Requires-Dist: stdlib-list==0.10.0 +Requires-Dist: stopit==1.1.2 +Requires-Dist: suds-community==1.1.2 +Requires-Dist: tables==3.9.2 +Requires-Dist: tabulate==0.9.0 +Requires-Dist: tblib==3.0.0 +Requires-Dist: tenacity==8.2.3 +Requires-Dist: texttable==1.7.0 +Requires-Dist: threadpoolctl==3.4.0 +Requires-Dist: throttler==1.2.2 +Requires-Dist: tifffile==2024.2.12 +Requires-Dist: tmtoolkit==0.12.0 +Requires-Dist: toolz==0.12.1 +Requires-Dist: toposort==1.10 +Requires-Dist: tornado==6.4 +Requires-Dist: tqdm==4.66.2 +Requires-Dist: traitlets==5.14.2 +Requires-Dist: tspex==0.6.3 +Requires-Dist: typing==3.7.4.3 +Requires-Dist: typing-extensions==4.10.0 +Requires-Dist: typing-inspect==0.9.0 +Requires-Dist: umap-learn==0.5.5 +Requires-Dist: url-normalize==1.4.3 +Requires-Dist: urllib3==2.2.1 +Requires-Dist: wcwidth==0.2.13 +Requires-Dist: wheel==0.43.0 +Requires-Dist: wrapt==1.16.0 +Requires-Dist: xlrd==2.0.1 +Requires-Dist: xmltodict==0.13.0 +Requires-Dist: xyzservices==2023.10.1 +Requires-Dist: yarl==1.9.4 +Requires-Dist: yte==1.5.4 +Requires-Dist: zict==3.0.0 +Requires-Dist: zipp==3.18.1 +Requires-Dist: zope-event==5.0 +Requires-Dist: zope-interface==6.2 +Provides-Extra: docs +Requires-Dist: sphinx_rtd_theme; extra == "docs" +Requires-Dist: nbsphinx; extra == "docs" +Requires-Dist: nbsphinx_link; extra == "docs" +Requires-Dist: numpydoc; extra == "docs" +Requires-Dist: sphinx_book_theme; extra == "docs" +Provides-Extra: development +Requires-Dist: ruff; extra == "development" +Requires-Dist: mypy; extra == "development" + +![alt text](docs/images/SCENIC+_Logo_v5.png "SCENIC+") +[![Documentation Status](https://readthedocs.org/projects/scenicplus/badge/?version=development)](https://scenicplus.readthedocs.io/en/development/?badge=development) + + +# SCENIC+ single-cell eGRN inference + +`SCENIC+` is a python package to build gene regulatory networks (GRNs) using combined or separate single-cell gene expression (scRNA-seq) and single-cell chromatin accessibility (scATAC-seq) data. + +## Documentation + +Extensive documentation and tutorials are available at [read the docs](https://scenicplus.readthedocs.io/en/development/). + +## Installing + +To install SCENIC+ (in a Linux environment): + +We highly recommend to install SCENIC+ in a new conda environment. + +```bash + +$ conda create --name scenicplus python=3.11 -y +$ conda activate scenicplus +$ git clone https://github.com/aertslab/scenicplus +$ cd scenicplus +$ git checkout development +$ pip install . + +``` + +## Questions? + +* If you have **technical questions or problems**, such as bug reports or ideas for new features, please open an issue under the issues tab. +* If you have **questions about the interpretation of results or your analysis**, please start a Discussion under the Discussions tab. + + +## References + +[Bravo Gonzalez-Blas, C. & De Winter, S. *et al.* (2022). SCENIC+: single-cell multiomic inference of enhancers and gene regulatory networks](https://www.biorxiv.org/content/10.1101/2022.08.19.504505v1) diff --git a/src/scenicplus.egg-info/SOURCES.txt b/src/scenicplus.egg-info/SOURCES.txt new file mode 100644 index 0000000..b08ed84 --- /dev/null +++ b/src/scenicplus.egg-info/SOURCES.txt @@ -0,0 +1,131 @@ +.gitignore +.readthedocs.yaml +Dockerfile +Dockerfile_meme +README.md +pyproject.toml +requirements.in +requirements.txt +.github/ISSUE_TEMPLATE/bug_report.md +.github/ISSUE_TEMPLATE/feature_request.md +.github/ISSUE_TEMPLATE/performance-optimization-request.md +cytoscape_styles/SCENIC+.xml +docs/.DS_Store +docs/._.DS_Store +docs/.api.rst.swp +docs/.pybiomart.sqlite +docs/Makefile +docs/api.rst +docs/conf.py +docs/faqs.rst +docs/human_cerebellum.ipynb +docs/human_cerebellum_ctx_db.ipynb +docs/human_cerebellum_scRNA_pp.ipynb +docs/human_tutorial.rst +docs/index.rst +docs/install.rst +docs/make.bat +docs/tutorials.rst +docs/.eggs/README.txt +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/LICENSE +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/PKG-INFO +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/RECORD +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/WHEEL +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/entry_points.txt +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/requires.txt +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/top_level.txt +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/EGG-INFO/zip-safe +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/__init__.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/__main__.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/_version_cls.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/config.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/discover.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/file_finder.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/file_finder_git.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/file_finder_hg.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/git.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/hacks.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/hg.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/hg_git.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/integration.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/scm_workdir.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/utils.py +docs/.eggs/setuptools_scm-6.3.2-py3.7.egg/setuptools_scm/version.py +docs/.eggs/tomli-2.0.0-py3.7.egg/EGG-INFO/LICENSE +docs/.eggs/tomli-2.0.0-py3.7.egg/EGG-INFO/PKG-INFO +docs/.eggs/tomli-2.0.0-py3.7.egg/EGG-INFO/RECORD +docs/.eggs/tomli-2.0.0-py3.7.egg/EGG-INFO/WHEEL +docs/.eggs/tomli-2.0.0-py3.7.egg/tomli/__init__.py +docs/.eggs/tomli-2.0.0-py3.7.egg/tomli/_parser.py +docs/.eggs/tomli-2.0.0-py3.7.egg/tomli/_re.py +docs/.eggs/tomli-2.0.0-py3.7.egg/tomli/_types.py +docs/.eggs/tomli-2.0.0-py3.7.egg/tomli/py.typed +docs/_images/._gsea.png +docs/_images/flow_chart_SCENIC+.png +docs/_images/gsea.png +docs/images/B_cell_network.png +docs/images/PBMC_dim_red.png +docs/images/SCENIC+_Logo_v4.jpg +docs/images/SCENIC+_Logo_v5.png +docs/images/SCENIC+_Logo_v5_no_text.png +docs/images/branched_velocity.png +docs/images/cerebellum_network.png +docs/images/mm_SOX10_kd_sim.png +docs/images/mm_lines_dotplot.png +docs/images/unbranched_velocity.png +notebooks/._Scenicplus_single_sample.ipynb +notebooks/human_cerebellum.ipynb +notebooks/human_cerebellum_ctx_db.ipynb +notebooks/human_cerebellum_scRNA_pp.ipynb +resources/allTFs_dmel.txt +resources/allTFs_hg38.txt +resources/allTFs_mm.txt +src/scenicplus/BASCA.py +src/scenicplus/RSS.py +src/scenicplus/TF_to_gene.py +src/scenicplus/__init__.py +src/scenicplus/differentiation_potential.py +src/scenicplus/enhancer_to_gene.py +src/scenicplus/eregulon_enrichment.py +src/scenicplus/loom.py +src/scenicplus/networks.py +src/scenicplus/scenicplus_class.py +src/scenicplus/scenicplus_mudata.py +src/scenicplus/simulation.py +src/scenicplus/triplet_score.py +src/scenicplus/utils.py +src/scenicplus.egg-info/PKG-INFO +src/scenicplus.egg-info/SOURCES.txt +src/scenicplus.egg-info/dependency_links.txt +src/scenicplus.egg-info/entry_points.txt +src/scenicplus.egg-info/requires.txt +src/scenicplus.egg-info/top_level.txt +src/scenicplus/cli/__init__.py +src/scenicplus/cli/commands.py +src/scenicplus/cli/gfx.py +src/scenicplus/cli/scenicplus.py +src/scenicplus/data_wrangling/__init__.py +src/scenicplus/data_wrangling/adata_cistopic_wrangling.py +src/scenicplus/data_wrangling/cistarget_wrangling.py +src/scenicplus/data_wrangling/gene_search_space.py +src/scenicplus/grn_builder/__init__.py +src/scenicplus/grn_builder/gsea.py +src/scenicplus/grn_builder/gsea_approach.py +src/scenicplus/grn_builder/modules.py +src/scenicplus/plotting/__init__.py +src/scenicplus/plotting/correlation_plot.py +src/scenicplus/plotting/coverageplot.py +src/scenicplus/plotting/dotplot.py +src/scenicplus/plotting/grn_plot.py +src/scenicplus/preprocessing/__init__.py +src/scenicplus/preprocessing/filtering.py +src/scenicplus/regulon_qc/__init__.py +src/scenicplus/regulon_qc/quality_metrics.py +src/scenicplus/snakemake/Snakefile +src/scenicplus/snakemake/__init__.py +src/scenicplus/snakemake/config.yaml +src/scenicplus/tangram/__init__.py +src/scenicplus/tangram/projections.py +src/scenicplus/tangram/utils.py +src/scenicplus/wrappers/__init__.py +src/scenicplus/wrappers/run_pycistarget.py \ No newline at end of file diff --git a/src/scenicplus.egg-info/dependency_links.txt b/src/scenicplus.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/scenicplus.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/scenicplus.egg-info/entry_points.txt b/src/scenicplus.egg-info/entry_points.txt new file mode 100644 index 0000000..b1ba8d7 --- /dev/null +++ b/src/scenicplus.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +scenicplus = scenicplus.cli.scenicplus:main diff --git a/src/scenicplus.egg-info/requires.txt b/src/scenicplus.egg-info/requires.txt new file mode 100644 index 0000000..961485e --- /dev/null +++ b/src/scenicplus.egg-info/requires.txt @@ -0,0 +1,237 @@ +adjusttext==1.0.4 +aiohttp==3.9.3 +aiosignal==1.3.1 +anndata==0.10.5.post1 +annoy==1.17.3 +appdirs==1.4.4 +arboreto==0.1.6 +argparse-dataclass==2.0.0 +array-api-compat==1.5.1 +asttokens==2.4.1 +attr==0.3.2 +attrs==23.2.0 +bbknn==1.6.0 +beautifulsoup4==4.12.3 +bidict==0.23.1 +bioservices==1.11.2 +blosc2==2.5.1 +bokeh==3.4.0 +boltons==23.1.1 +bs4==0.0.2 +cattrs==23.2.3 +certifi==2024.2.2 +charset-normalizer==3.3.2 +click==8.1.7 +cloudpickle==3.0.0 +colorama==0.4.6 +colorlog==6.8.2 +conda-inject==1.3.1 +configargparse==1.7 +connection-pool==0.0.3 +contourpy==1.2.0 +ctxcore==0.2.0 +cycler==0.12.1 +cython==0.29.37 +cytoolz==0.12.3 +dask[array,complete,dataframe,diagnostics,distributed]==2024.2.1 +dataclasses-json==0.6.4 +datrie==0.8.2 +decorator==5.1.1 +dill==0.3.8 +distributed==2024.2.1 +docutils==0.20.1 +dpath==2.1.6 +easydev==0.13.1 +et-xmlfile==1.1.0 +executing==2.0.1 +fastjsonschema==2.19.1 +fbpca==1.0 +filelock==3.13.1 +fonttools==4.50.0 +frozendict==2.4.0 +frozenlist==1.4.1 +fsspec==2024.3.1 +future==1.0.0 +gensim==4.3.2 +geosketch==1.2 +gevent==24.2.1 +gitdb==4.0.11 +gitpython==3.1.42 +globre==0.1.5 +greenlet==3.0.3 +grequests==0.7.0 +gseapy==0.10.8 +h5py==3.10.0 +harmonypy==0.0.9 +humanfriendly==10.0 +idna==3.6 +igraph==0.11.4 +imageio==2.34.0 +immutables==0.20 +importlib-metadata==7.0.1 +importlib-resources==6.1.2 +interlap==0.2.7 +intervaltree==3.1.0 +ipython==8.22.2 +jedi==0.19.1 +jinja2==3.1.3 +joblib==1.3.2 +jsonpickle==3.0.3 +jsonschema==4.21.1 +jsonschema-specifications==2023.12.1 +jupyter-core==5.7.2 +kaleido==0.2.1 +kiwisolver==1.4.5 +lazy-loader==0.3 +lda==3.0.0 +leidenalg==0.10.2 +line-profiler==4.1.2 +llvmlite==0.42.0 +locket==1.0.0 +loompy==3.0.7 +loomxpy@ git+https://github.com/aertslab/LoomXpy@main +lxml==5.1.0 +lz4==4.3.3 +macs2==2.2.9.1 +markdown-it-py==3.0.0 +markupsafe==2.1.5 +marshmallow==3.21.1 +matplotlib==3.6.3 +matplotlib-inline==0.1.6 +mdurl==0.1.2 +mizani==0.9.3 +msgpack==1.0.8 +mudata==0.2.3 +multidict==6.0.5 +multiprocessing-on-dill==3.5.0a4 +mypy-extensions==1.0.0 +natsort==8.4.0 +nbformat==5.10.3 +ncls==0.0.68 +ndindex==1.8 +networkx==3.2.1 +numba==0.59.0 +numexpr==2.9.0 +numpy==1.26.4 +numpy-groupies==0.10.2 +openpyxl==3.1.2 +packaging==24.0 +pandas==1.5.0 +parso==0.8.3 +partd==1.4.1 +patsy==0.5.6 +pexpect==4.9.0 +pillow==10.2.0 +plac==1.4.3 +platformdirs==4.2.0 +plotly==5.19.0 +plotnine==0.12.4 +polars==0.20.13 +progressbar2==4.4.2 +prompt-toolkit==3.0.43 +protobuf==5.26.0 +psutil==5.9.8 +ptyprocess==0.7.0 +pulp==2.8.0 +pure-eval==0.2.2 +py-cpuinfo==9.0.0 +pyarrow==15.0.0 +pyarrow-hotfix==0.6 +pybedtools==0.9.1 +pybigtools==0.1.2 +pybigwig==0.3.22 +pybiomart==0.2.0 +pycistarget@ git+https://github.com/aertslab/pycistarget@development +pycistopic@ git+https://github.com/aertslab/pycisTopic +pyfasta==0.5.2 +pygam==0.9.0 +pygments==2.17.2 +pynndescent==0.5.11 +pyparsing==3.1.2 +pyranges==0.0.111 +pyrle==0.0.39 +pysam==0.22.0 +pyscenic@ git+https://github.com/aertslab/pySCENIC@master +python-dateutil==2.9.0.post0 +python-utils==3.8.2 +pytz==2024.1 +pyvis==0.3.2 +pyyaml==6.0.1 +ray==2.9.3 +referencing==0.34.0 +requests==2.31.0 +requests-cache==1.2.0 +reretry==0.11.8 +rich==13.7.1 +rich-argparse==1.4.0 +rpds-py==0.18.0 +scanorama==1.7.4 +scanpy==1.8.2 +scatac-fragment-tools==0.1.0 +scikit-image==0.22.0 +scikit-learn==1.3.2 +scipy==1.12.0 +scrublet==0.2.3 +seaborn==0.13.2 +sinfo==0.3.4 +six==1.16.0 +smart-open==6.4.0 +smmap==5.0.1 +snakemake==8.5.5 +snakemake-interface-common==1.17.1 +snakemake-interface-executor-plugins==8.2.0 +snakemake-interface-report-plugins==1.0.0 +snakemake-interface-storage-plugins==3.1.1 +sorted-nearest==0.0.39 +sortedcontainers==2.4.0 +soupsieve==2.5 +stack-data==0.6.3 +statistics==1.0.3.5 +statsmodels==0.14.1 +stdlib-list==0.10.0 +stopit==1.1.2 +suds-community==1.1.2 +tables==3.9.2 +tabulate==0.9.0 +tblib==3.0.0 +tenacity==8.2.3 +texttable==1.7.0 +threadpoolctl==3.4.0 +throttler==1.2.2 +tifffile==2024.2.12 +tmtoolkit==0.12.0 +toolz==0.12.1 +toposort==1.10 +tornado==6.4 +tqdm==4.66.2 +traitlets==5.14.2 +tspex==0.6.3 +typing==3.7.4.3 +typing-extensions==4.10.0 +typing-inspect==0.9.0 +umap-learn==0.5.5 +url-normalize==1.4.3 +urllib3==2.2.1 +wcwidth==0.2.13 +wheel==0.43.0 +wrapt==1.16.0 +xlrd==2.0.1 +xmltodict==0.13.0 +xyzservices==2023.10.1 +yarl==1.9.4 +yte==1.5.4 +zict==3.0.0 +zipp==3.18.1 +zope-event==5.0 +zope-interface==6.2 + +[development] +ruff +mypy + +[docs] +sphinx_rtd_theme +nbsphinx +nbsphinx_link +numpydoc +sphinx_book_theme diff --git a/src/scenicplus.egg-info/top_level.txt b/src/scenicplus.egg-info/top_level.txt new file mode 100644 index 0000000..fd8dbed --- /dev/null +++ b/src/scenicplus.egg-info/top_level.txt @@ -0,0 +1 @@ +scenicplus diff --git a/src/scenicplus/cli/commands.py b/src/scenicplus/cli/commands.py index 1bc5890..f981404 100644 --- a/src/scenicplus/cli/commands.py +++ b/src/scenicplus/cli/commands.py @@ -371,12 +371,38 @@ def prepare_motif_enrichment_results( out_file_extended_annotation: pathlib.Path, out_file_tf_names: pathlib.Path, direct_annotation: List[str], - extended_annotation: List[str]) -> None: + extended_annotation: List[str], + path_to_regions_to_subset: Optional[pathlib.Path] = None) -> None: from scenicplus.data_wrangling.cistarget_wrangling import get_and_merge_cistromes + from scenicplus.utils import target_to_overlapping_query, coord_to_region_names + from scenicplus.utils import region_names_to_coordinates log.info("Reading multiome MuData.") mdata = mudata.read(multiome_mudata_fname.__str__()) log.info("Getting cistromes.") - adata_direct_cistromes, adata_extended_cistromes = get_and_merge_cistromes( + if path_to_regions_to_subset is not None and path_to_regions_to_subset.__str__() != "None" and path_to_regions_to_subset.__str__() != "": + log.info("Subsetting regions from cistromes.") + regions = set(mdata['scATAC'].var_names) + if path_to_regions_to_subset.__str__().endswith(".bed"): + subset = pr.read_bed(path_to_regions_to_subset.__str__(), + as_df=False) + pr_regions = pr.PyRanges(region_names_to_coordinates(regions)) + regions_to_overlap = target_to_overlapping_query(pr_regions, subset) #regions_to_overlap will be a pyranges df + # transform regions to overlap to set of regions + regions_to_overlap = set(coord_to_region_names(regions_to_overlap)) + adata_direct_cistromes, adata_extended_cistromes = get_and_merge_cistromes( + paths_to_motif_enrichment_results=paths_to_motif_enrichment_results, + scplus_regions=regions_to_overlap, + direct_annotation=direct_annotation, + extended_annotation=extended_annotation) + else: + log.info('Please provide a bed file for regions to subset, no regions will be subsetted.') + adata_direct_cistromes, adata_extended_cistromes = get_and_merge_cistromes( + paths_to_motif_enrichment_results=paths_to_motif_enrichment_results, + scplus_regions=set(mdata['scATAC'].var_names), + direct_annotation=direct_annotation, + extended_annotation=extended_annotation) + else: + adata_direct_cistromes, adata_extended_cistromes = get_and_merge_cistromes( paths_to_motif_enrichment_results=paths_to_motif_enrichment_results, scplus_regions=set(mdata['scATAC'].var_names), direct_annotation=direct_annotation, diff --git a/src/scenicplus/cli/scenicplus.py b/src/scenicplus/cli/scenicplus.py index e741f95..a20e006 100644 --- a/src/scenicplus/cli/scenicplus.py +++ b/src/scenicplus/cli/scenicplus.py @@ -121,7 +121,8 @@ def prepare_menr_data(arg): out_file_extended_annotation=arg.out_file_extended_annotation, out_file_tf_names=arg.out_file_tf_names, direct_annotation=arg.direct_annotation, - extended_annotation=arg.extended_annotation) + extended_annotation=arg.extended_annotation, + path_to_regions_to_subset=arg.path_to_regions_to_subset) parser.set_defaults(func=prepare_menr_data) # Required arguments parser.add_argument( @@ -155,6 +156,10 @@ def prepare_menr_data(arg): action="store", type=str, required=False, nargs='+', default=['Orthology_annot'], help="Annotations to use as extended. Default is 'Orthology_annot'") + parser.add_argument( + "--path_to_regions_to_subset", dest="path_to_regions_to_subset", + action="store", type=pathlib.Path, required=False,default=None, + help="Path to bed file for regions to subset when merging cistromes.") def add_parser_for_download_genome_annotations(subparser:argparse._SubParsersAction): parser:argparse.ArgumentParser = subparser.add_parser( diff --git a/src/scenicplus/data_wrangling/cistarget_wrangling.py b/src/scenicplus/data_wrangling/cistarget_wrangling.py index 9f52830..3457491 100644 --- a/src/scenicplus/data_wrangling/cistarget_wrangling.py +++ b/src/scenicplus/data_wrangling/cistarget_wrangling.py @@ -10,7 +10,7 @@ from pycistarget.utils import get_TF_list, get_motifs_per_TF from typing import Set, Dict, List, Iterable, Tuple from dataclasses import dataclass - +from scenicplus.utils import region_names_to_coordinates @dataclass class Cistrome: @@ -102,6 +102,7 @@ def _get_cistromes( target_regions_motif_direct.update(motif_hits[motif]) else: raise ValueError(f"Motif enrichment table and motif hits don't match for the TF: {tf_name}") + cistromes.append( Cistrome( tf_name = tf_name, @@ -120,14 +121,15 @@ def _get_cistromes( target_regions_motif_extended.update(motif_hits[motif]) else: raise ValueError(f"Motif enrichment table and motif hits don't match for the TF: {tf_name}") + cistromes.append( Cistrome( tf_name = tf_name, motifs = set(motifs_annotated_to_tf), - target_regions = target_regions_motif_extended & scplus_regions, + target_regions = target_regions_motif_extended & scplus_regions, extended = True)) return cistromes - + def _merge_cistromes(cistromes: List[Cistrome]) -> Iterable[Cistrome]: a_cistromes = np.array(cistromes, dtype = 'object') tf_names = np.array([cistrome.tf_name for cistrome in a_cistromes]) diff --git a/src/scenicplus/plotting/dotplot.py b/src/scenicplus/plotting/dotplot.py index e0562cb..bd2831d 100644 --- a/src/scenicplus/plotting/dotplot.py +++ b/src/scenicplus/plotting/dotplot.py @@ -124,7 +124,7 @@ def heatmap_dotplot( # Plotting plotnine.options.figure_size = figsize plotting_df["repressor_activator"] = [ - "activator" if "+" in n.split("_")[2] else "repressor" for n in plotting_df[feature_name_key]] + "repressor" if "-" in n.split("_")[2] else "activator" for n in plotting_df[feature_name_key]] if split_repressor_activator and len(set(plotting_df["repressor_activator"])) == 2: if orientation == 'vertical': plot = ( diff --git a/src/scenicplus/snakemake/Snakefile b/src/scenicplus/snakemake/Snakefile index be124b1..0dc0f31 100644 --- a/src/scenicplus/snakemake/Snakefile +++ b/src/scenicplus/snakemake/Snakefile @@ -204,6 +204,7 @@ rule prepare_menr: cistromes_direct=config["output_data"]["cistromes_direct"], cistromes_extended=config["output_data"]["cistromes_extended"] params: + path_to_regions_to_subset=lambda wildcards: config["params_data_preparation"]["path_to_regions_to_subset"] if 'path_to_regions_to_subset' in config["params_data_preparation"] and config["params_data_preparation"]["path_to_regions_to_subset"] != "" else None, direct_annotation=lambda wildcards: config["params_data_preparation"]["direct_annotation"], extended_annotation=lambda wildcards: config["params_data_preparation"]["extended_annotation"] shell: @@ -215,7 +216,8 @@ rule prepare_menr: --out_file_direct_annotation {output.cistromes_direct} \ --out_file_extended_annotation {output.cistromes_extended} \ --direct_annotation {params.direct_annotation} \ - --extended_annotation {params.extended_annotation} + --extended_annotation {params.extended_annotation} \ + --path_to_regions_to_subset {params.path_to_regions_to_subset} """ rule download_genome_annotations: diff --git a/src/scenicplus/snakemake/config.yaml b/src/scenicplus/snakemake/config.yaml index c657494..fe5b08d 100644 --- a/src/scenicplus/snakemake/config.yaml +++ b/src/scenicplus/snakemake/config.yaml @@ -6,6 +6,7 @@ input_data: dem_db_fname: "" path_to_motif_annotations: "" + output_data: # output for prepare_GEX_ACC .h5mu combined_GEX_ACC_mudata: "ACC_GEX.h5mu" @@ -50,6 +51,7 @@ params_data_preparation: key_to_group_by: "" nr_cells_per_metacells: 10 # Params for prepare_menr + path_to_regions_to_subset: "" direct_annotation: "Direct_annot" extended_annotation: "Orthology_annot" # Params for download_genome_annotations