Coder Social home page Coder Social logo

alexandrovlab / sigprofilerclusters Goto Github PK

View Code? Open in Web Editor NEW
9.0 1.0 0.0 1.76 MB

Tool for analyzing the inter-mutational distances between SNV-SNV and INDEL-INDEL mutations. Tool separates mutations into clustered and non-clustered groups on a sample-dependent basis.

License: BSD 2-Clause "Simplified" License

Python 100.00%
bioinformatics cancer-genomics mutational-signatures mutation-analysis cluster-analysis

sigprofilerclusters's Introduction

Docs License Build Status

SigProfilerClusters

Tool for analyzing the inter-mutational distances between SNV-SNV and INDEL-INDEL mutations. Tool separates mutations into clustered and non-clustered groups on a sample-dependent basis and subclassifies all SNVs into a set category of clustered event: i) DBS; ii) MBS; iii) omikli; and iv) kataegis. Indels are not subclassifed.

This tool was previously under the project name of SigProfilerHotSpots, but has been renamed to SigProfilerClusters. For all instructions below, SigProfilerClusters may be interchanged with SigProfilerHotSpots if the older version of the tools is being used.

INTRODUCTION

The purpose of this document is to provide a guide for using the SigProfilerClusters framework. An extensive Wiki page detailing the usage of this tool can be found at https://osf.io/qpmzw/wiki/home/.

PREREQUISITES

The framework is written in PYTHON, and uses additional SigProfiler packages:

Please visit their respective GitHub pages for detailed installation and usage instructions.

QUICK START GUIDE

This section will guide you through the minimum steps required to perform clustered analysis:

1a. Install the python package using pip (current package): pip install SigProfilerClusters

1b. Install the python package using pip (deprecated version): pip install SigProfilerHotSpots

Install your desired reference genome from the command line/terminal as follows (available reference genomes are: GRCh37, GRCh38, mm9, and mm10):

$ python
>> from SigProfilerMatrixGenerator import install as genInstall
>> genInstall.install('GRCh37', rsync=False, bash=True)

This will install the human 37 assembly as a reference genome. You may install as many genomes as you wish. If you have a firewall on your server, you may need to install rsync and use the rsync=True parameter. Similarly, if you do not have bash, use bash=False.

  1. Place your vcf files in your desired output folder. It is recommended that you name this folder based on your project's name. Before you can analyze clustered mutations, you need to generate a background model for each of your samples. To do this, generate a minimum of 100 simulations for your project (see SigProfilerSimulator for a detailed list of parameters):
>>from SigProfilerSimulator import SigProfilerSimulator as sigSim
>>sigSim.SigProfilerSimulator(project, project_path, genome, contexts=["96"], simulations=100, chrom_based=True)
  1. Now the original mutations can be partitioned into clustered and non-clustered sets using the required parameters below:
>> from SigProfilerClusters import SigProfilerClusters as hp
>> hp.analysis(project, genome, contexts, simContext, input_path)

See below for a detailed list of available parameters

  1. The partitioned vcf files are placed under [project_path]/ouput/clustered/ and [project_path]/ouput/nonClustered/. You can visualize the results by looking at the IMD plots available under [project_path]/ouput/plots/.

AVAILABLE PARAMETERS

Required:
        project:			[string] Unique name for the given project
        genome:			[string] Reference genome to use. Must be installed using SigProfilerMatrixGenerator
        contexts:			[string] Mutation context for measuring IMD (e.g. "6", "96", "1536", etc,)
        simContext: 		[list of strings] Mutations context that was used for generating the background model (e.g ["6144"] or ["96"])
        input_path:			[string] Path to the given project

	Optional:
        analysis:	 		[string] Desired analysis pipeline. By default output_type='all'. Other options include "subClassify" and "hotspot". 
        sortSims:			[boolean] Option to sort the simulated files if they have already been sorted. By default sortSims=True to ensure accurate results. The files must be sorted for accurate results. 
        interdistance:			[string] The mutation types to calculate IMDs between - Use only when performing analysis of indels (default='ID').
        calculateIMD:		[boolean] Parameter to calculate the IMDs. This will save time if you need to rerun the subclassification step only (default=True).
        max_cpu:			[integer] Change the number of allocated CPUs. By default all CPUs are used
        subClassify:		[boolean] Subclassify the clustered mutations. Requires that VAF scores are available in TCGA or Sanger format. By default subClassify=False. See VAF Format below for more details. 
        plotIMDfigure:	[boolean] Parameter that generates IMD and mutational spectra plots for each sample (default=True).
        plotRainfall		[boolean] Parameter that generates rainfall plots for each sample using the subclassification of clustered events (default=True).
        
        The following parameters are used if the subClassify argument is True:
        includedVAFs:	[boolean] Parameter that informs the tool of the inclusion of VAFs in the dataset (default=True)
        includedCCFs:   [boolean] Parameter that informs the tool of the inclusion of CCFs in the dataset (default=True). If CCFs are used, set includedVAFs=False.
        sanger:			[boolean] The input files are from Sanger. By default sanger=True
        TCGA:			[boolean] The input files are from TCGA. By default TCGA=False
        windowSize:		[integer] Window size for calculating mutation density in the rainfall plots. By default windowSize=10000000
        correction		[boolean] Optional parameter to perform a genome-wide mutational density correction (boolean; default=False)
        probability     [boolean] Optional parameter to calculate the probability of observing each clustered event within the localized region of the genome. These values are saved into the [project_path]/output/clustered/ directories. See OSF wiki page for more details.

VAF Format

SigProfilerClusters uses the VAF recorded in the input files to subclassify clustered mutations when subclassify=True and includedVAFs=True. However, depending on the VCF file, the VAF may be recorded in a different format. Below are the accepted formats corresponding to the correct settings to use for this tool.

If you are not using VCFs as input files, VAFs cannot be used in the subclassification step. Therefore, to subclassify clusters using other input file types set subclassify=True and includedVAFs=False.

If your VAF is recorded in the 8th column of your VCF as VCF=xx, set TCGA=True and sanger=False.

If your VAF is recorded in the 8th column of your VCF as AF=xx, set standardVC=True, TCGA=False, and sanger=False.

If your VAF is recorded in the 11th column of your VCF as the last number of the colon delimited values, set sanger=True and TCGA=False.

If your VCFs have no recorded VAFs set includedVAFs=False. This will run SigProfilerClusters, subclassify clusters based on just the calculated IMD (provided that you set subclassify=True).

CCF Format Alternatively, SigProfilerClusters accepts cancer cell fraction (CCF) estimates in place of VAFs, when includedCCFs=True and includedVAFs=False to correct for copy number amplifications. To use CCFs, one must add the CCF values in the last column of each row within each VCF file (tab separated columns).

Output Format All mutations are categorized into either clustered or non-clustered mutations. Each are saved under their respective directories within VCF files ([project_path]/output/clustered/ or [project_path]/output/nonClustered/; respectively). The clustered folder contains the partition of clustered mutations, which have been subclassified into one of four categories (five if using VAFs/CCFs). Within each subclass subfolder, a single VCF file is saved for each sample. All visualizations including rainfall plots are found within the output directory ([project_oath]/output/plots/). Please refer to the Output page on the OSF wiki page for more details on all available output including available plots (https://osf.io/qpmzw/wiki/4.%20Output/).

LOG FILES

All errors and progress checkpoints are saved into SigProfilerClusters_[project][genome].err and SigProfilerClusters[project]_[genome].out, respectively. For all errors, please email the error and progress log files to the primary contact under CONTACT INFORMATION.

Example Files Two examples are provided under examples/. These directories include all expected output except for the simulations folder to reduce memory size (please see the OSF page for more details: https://osf.io/qpmzw/wiki/4.%20Output/).

CITATIONS

Erik N Bergstrom, Mousumy Kundu, Noura Tbeileh, Ludmil B Alexandrov. bioRxiv 2022.02.11.480117; doi: https://doi.org/10.1101/2022.02.11.480117

COPYRIGHT

Copyright (c) 2023, Erik Bergstrom [Alexandrov Lab] All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

CONTACT INFORMATION

Please address any queries or bug reports to Erik Bergstrom at [email protected] or Mousumy Kundu at [email protected]

sigprofilerclusters's People

Contributors

ebergstr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

sigprofilerclusters's Issues

Program always exits with no logging or error message

After creating output files using SigProfilerSimulator, sigProfilerClusters always exits with no plots, no error log, and no error messages. Sometimes changing the project name will make the program go further in the process, but still no plots, error log, or error messages. Here's an example of what I've tried running:

hp.analysis("OUTNEW", "GRCh37", "96", ["288"], ".", analysis="all", sortSims=True, subClassify=True, correction=True, calculateIMD=True, TCGA=True, sanger=False). The folder contains only one VCF, which is the BRCA example VCF from the Wiki site.

Errors during multiprocessing

Hi,

I am getting multiprocessing error during running the SigProfilerClusters tool in an interactive python session.
The command I used to run SigProfilerClusters:
from SigProfilerClusters import SigProfilerClusters as hp
hp.analysis("BRCA", "GRCh37", "96", ["288"], "/BRCA_example/", analysis="all", sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=4, TCGA=True, sanger=False)

Here is the error that I got:
Picture1

Thanks!

rainfallPlots is missing.

Dear developer,

I tried to tested the example code of SigProfilerClusters at (https://osf.io/qpmzw/wiki/5.%20Quick%20Start%20Example/)

My input file is BRCA-UK_SP116353.snv_mnv.vcf

My code is as following:

from SigProfilerMatrixGenerator.scripts import SigProfilerMatrixGeneratorFunc as matGen
from SigProfilerMatrixGenerator import install as genInstall
from SigProfilerSimulator import SigProfilerSimulator as sigSim
from SigProfilerClusters import SigProfilerClusters as hp

Output_Dir = "/Users/z-1-Test/SigProfilerClusters-test"

sigSim.SigProfilerSimulator("BRCA", Output_Dir, "GRCh37", contexts = ['288'], chrom_based=True, simulations=100)
hp.analysis("BRCA", "GRCh37", "96", ["96"], Output_Dir)

However, in my output Dir (/Users/z-1-Test/SigProfilerClusters-test/plots), I can only get BRCA_intradistance_plots_288_corrected.pdf.

There is no rainfallPlots_clustered_project_corrected.pdf

Is there something wrong with the example code or current package? Or do you have extra parameters for the rainfallPlots ?

Thanks

RuntimeError: process associated

Hi,
SigProfilerClusters seems to be a very nice method for clustered mutation identification. However, when I run SigProfilerClusters with the example.vcf and code provided in "https://osf.io/qpmzw/wiki/5.%20Quick%20Start%20Example/". I got strange errors and the tool just kept running with no simulation output.
my code:
from SigProfilerMatrixGenerator import install as genInstall from SigProfilerSimulator import SigProfilerSimulator as sigSim from SigProfilerClusters import SigProfilerClusters as hp sigSim.SigProfilerSimulator("BRCA", "./example/", "GRCh37", contexts = ['288'], chrom_based=True, simulations=100) hp.analysis("BRCA", "GRCh37", "96", ["288"], "./example/", analysis="all", sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=4, TCGA=True, sanger=False)

The SigProfilerSimulator_BRCA_GRCh37_2022-03-28.err file:
Traceback (most recent call last):
File "", line 1, in
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 125, in _main
prepare(preparation_data)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 236, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 287, in _fixup_main_from_path
main_content = runpy.run_path(main_path,
File "/share/home/shuo.shi/anaconda3/lib/python3.9/runpy.py", line 268, in run_path
return _run_module_code(code, init_globals, run_name,
File "/share/home/shuo.shi/anaconda3/lib/python3.9/runpy.py", line 97, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/share/home/shuo.shi/anaconda3/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/share/home/shuo.shi/APOBEC/SigProfiler/example.py", line 4, in
sigSim.SigProfilerSimulator("BRCA", "./example/", "GRCh37", contexts = ['288'], chrom_based=True, simulations=100)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/site-packages/SigProfilerSimulator/SigProfilerSimulator.py", line 413, in SigProfilerSimulator
pool = mp.Pool(max_seed)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/context.py", line 119, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild,
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/pool.py", line 212, in init
self._repopulate_pool()
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/pool.py", line 303, in _repopulate_pool
return self._repopulate_pool_static(self._ctx, self.Process,
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/pool.py", line 326, in _repopulate_pool_static
w.start()
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/context.py", line 284, in _Popen
return Popen(process_obj)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/popen_spawn_posix.py", line 32, in init
super().init(process_obj)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/popen_fork.py", line 19, in init
self._launch(process_obj)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/popen_spawn_posix.py", line 42, in _launch
prep_data = spawn.get_preparation_data(process_obj._name)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 154, in get_preparation_data
_check_not_importing_main()
File "/share/home/shuo.shi/anaconda3/lib/python3.9/multiprocessing/spawn.py", line 134, in _check_not_importing_main
raise RuntimeError('''
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.

The SigProfilerSimulator_BRCA_GRCh37_2022-03-28.out file:
`THIS FILE CONTAINS THE METADATA ABOUT SYSTEM AND RUNTIME

-------System Info-------
Operating System Name: Linux
Nodename: gznode107
Release: 3.10.0-1127.el7.x86_64
Version: #1 SMP Tue Mar 31 23:36:51 UTC 2020

-------Python and Package Versions-------
Python Version: 3.9.7
SigProfilerSimulator Version: 1.1.4
SigProfilerMatrixGenerator Version: 1.2.4
numpy version: 1.22.3

-------Vital Parameters Used for the execution -------
Project: BRCA
Genome: GRCh37
Input File Path: ./example/
contexts: ['288']
exome: None
simulations: 100
updating: False
bed_file: None
overlap: False
gender: female
seqInfo: False
chrom_based: True
seed_file: None

-------Date and Time Data-------
Date and Clock time when the execution started: 2022-03-28 19:07:07.471765
`
However when I move "from SigProfilerClusters import SigProfilerClusters as hp" under the "sigSim.SigProfilerSimulator("BRCA", "./example/", "GRCh37", contexts = ['288'], chrom_based=True, simulations=100)", the sigSim.SigProfilerSimulator can run successly, but the next code hp.analysis will have the same kind of errors "RuntimeError: ......"
How can I fix it ?

Error: There are no simulated data present for this project.

Hi.
I have used the following code to simulate data with a maf file as the input.

>>> from SigProfilerSimulator import SigProfilerSimulator as sigSim
>>> sigSim.SigProfilerSimulator("CBCGA", ".", "GRCh38", contexts = ['96'], chrom_based=True, simulations=100, vcf=False)
======================================
        SigProfilerSimulator        
======================================

Checking for all reference files and relevant matrices...
     Matrices per chromosomes do not exist. Creating the matrix files now.
Starting matrix generation for SNVs and DINUCs...Completed! Elapsed time: 191.3 seconds.
Starting matrix generation for INDELs...Completed! Elapsed time: 100.58 seconds.
     ./output/SBS/CBCGA.SBS96.all does not exist. Creating the matrix file now.
Starting matrix generation for SNVs and DINUCs...Completed! Elapsed time: 10.44 seconds.
Starting matrix generation for INDELs...Completed! Elapsed time: 4.96 seconds.
Matrices generated for 944 samples with 0 errors. Total of 137935 SNVs, 254 DINUCs, and 9849 INDELs were successfully analyzed.

Files successfully read and mutations collected. Mutation assignment starting now.
         Chromosome 13 done
         Chromosome 4 done
         Chromosome 10 done
         Chromosome 15 done
         Chromosome 14 done
         Chromosome 8 done
         Chromosome 9 done
         Chromosome 5 done
         Chromosome 6 done
         Chromosome 7 done
         Chromosome 12 done
         Chromosome X done
         Chromosome 3 done
         Chromosome 11 done
         Chromosome 2 done
         Chromosome 21 done
         Chromosome 20 done
         Chromosome 22 done
         Chromosome 1 done
         Chromosome 18 done
         Chromosome 16 done
         Chromosome 19 done
         Chromosome 17 done
Simulation completed
Job took  452.9719979763031  seconds

Next, I run the sigprofilercluster code.

>>> from SigProfilerClusters import SigProfilerClusters as hp
>>> hp.analysis("CBCGA", "GRCh38", "96", ["288"], ".", analysis="all", sortSims=True, calculateIMD=True, max_cpu=4)
======================================
Beginning SigProfilerClusters Analysis
======================================


There are no simulated data present for this project. Please generate simulations before running SigProfilerClusters.
	The package can be installed via pip:
			$ pip install SigProfilerSimulator

	and used within a python3 sessions as follows:
			$ python3
			>> from SigProfilerSimulator import SigProfilerSimulator as sigSim
			>> sigSim.SigProfilerSimulator(project, project_path, genome, contexts=['6144'], simulations=100)

	For a complete list of parameters, visit the github repo (https://github.com/AlexandrovLab/SigProfilerSimulator) or the documentation page (https://osf.io/usxjz/wiki/home/)

I was truly confused of this condition since I have simulated the data.
Thanks.

Problem with MNV records in Mutect2 VCFs

When the input VCF has rows with MNVs, then SigProfilerClusters crashes during subclassification of clustered mutations. Example VCF row excerpt and error message are copied below:

VCF file:
chr9 534258 . GT CC . PASS

err log file:
Traceback (most recent call last):
File "/home/eallen/miniconda3/lib/python3.8/site-packages/SigProfilerClusters/classifyFunctions.py", line 237, in pullVaf
vaf = vafs[sample][newKey]
KeyError: '9:534258:G:C'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 1, in
File "/home/eallen/miniconda3/lib/python3.8/site-packages/SigProfilerClusters/SigProfilerClusters.py", line 685, in analysis
classifyFunctions.pullVaf (project, input_path, sanger, TCGA, standardVC, correction)
File "/home/eallen/miniconda3/lib/python3.8/site-packages/SigProfilerClusters/classifyFunctions.py", line 240, in pullVaf
vaf = vafs[sample][newKey]
KeyError: 'chr9:534258:G:C'

Install issue

Hello, I am having the following issue with installing this package in my environment

`$ pip install SigProfilerClusters
Collecting SigProfilerClusters
Downloading SigProfilerClusters-1.1.2-py3-none-any.whl.metadata (11 kB)
Collecting matplotlib<3.5,>=3.3.0 (from SigProfilerClusters)
Downloading matplotlib-3.4.3.tar.gz (37.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.9/37.9 MB 49.8 MB/s eta 0:00:00
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [16 lines of output]
Traceback (most recent call last):
File "", line 2, in
File "", line 34, in
File "/tmp/pip-install-q90iz707/matplotlib_e257a3b3ba18440caedc4fb8265f9362/setup.py", line 54, in
version = versioneer.get_version()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/pip-install-q90iz707/matplotlib_e257a3b3ba18440caedc4fb8265f9362/versioneer.py", line 1410, in get_version
return get_versions()["version"]
^^^^^^^^^^^^^^
File "/tmp/pip-install-q90iz707/matplotlib_e257a3b3ba18440caedc4fb8265f9362/versioneer.py", line 1344, in get_versions
cfg = get_config_from_root(root)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/pip-install-q90iz707/matplotlib_e257a3b3ba18440caedc4fb8265f9362/versioneer.py", line 401, in get_config_from_root
parser = configparser.SafeConfigParser()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'configparser' has no attribute 'SafeConfigParser'. Did you mean: 'RawConfigParser'?
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
`

Thanks,
Ronnie

how could the IMD cutoff be evaluated as value 1

When I applied SigPfofilerClusters to a TCGA sample, I got the results shown below. The IMD cutoff seems to be evaluated as 1. Did I use in a wrong way ?

this is the command:

from SigProfilerSimulator import SigProfilerSimulator as sigSim
sigSim.SigProfilerSimulator(project='TCGA', project_path='/.../sigprofiler/TCGA/', genome='GRCh38', contexts=['96'], simulations=100)
from SigProfilerClusters import SigProfilerClusters as hp
hp.analysis(project='TCGA', genome='GRCh38', contexts='96', simContext=['96'], input_path='/.../sigprofiler/TCGA/', subClassify=True, includedVAFs=True, includedCCFs=False, TCGA=True, sanger=False)

this is the process of detection of IMD
image
this is the dectection of clustered events
image

Is txt input eligible?

Hi.

I noticed that there is a file conversion function examining txt surfix in the script. But it seems that vcf is the only eligible input according to README document. I asked this question because your published tool SigProfilerSimulator supports simple text file.

May I ask if a multi-sample txt file is supported as input? If true, what prerequisite columns/headers should I prepare for the input?

Thank you.

Error with running SigProfilerClusters after SigProfilerSimulator

Hi,

I'm trying to run SigProfilerClusters on a set of VCF files. I've successfully run SigProfilerSimulator on these files with 100 simulations, and the log file is pasted below:

-------Python and Package Versions-------
Python Version: 3.9.0
SigProfilerSimulator Version: 1.1.5
SigProfilerMatrixGenerator Version: 1.2.25
numpy version: 1.26.4

-------Vital Parameters Used for the execution -------
Project: MOCHA_0324_subs
Genome: GRCh38
Input File Path: /home/kbrar/MOCHA_Jan_30_2024/Somatic_SNV_vcf/unzipped_SNV_vcfs/info_SNV_vcfs/
contexts: ['96']
exome: None
simulations: 100
updating: False
bed_file: None
overlap: False
gender: female
seqInfo: False
chrom_based: True
seed_file: None

-------Date and Time Data-------
Date and Clock time when the execution started: 2024-03-13 13:12:47.389505

-------Seeds for random number generation per process-------
Process 0: 0
Process 1: 1
Process 2: 1
Process 3: 0
Process 4: 1
Process 5: 2
Process 6: 0
Process 7: 0
Process 8: 1
Process 9: 0
Process 10: 1
Process 11: 1
Process 12: 0
Process 13: 0
Process 14: 1
Process 15: 0
Process 16: 2
Process 17: 0
Process 18: 2
Process 19: 1
Process 20: 0
Process 21: 1
Process 22: 0

-------Runtime Checkpoints-------
Chromosome 22 done
Chromosome 21 done
Chromosome 17 done
Chromosome 19 done
Chromosome 20 done
Chromosome 16 done
Chromosome 15 done
Chromosome 18 done
Chromosome 14 done
Chromosome 9 done
Chromosome 12 done
Chromosome X done
Chromosome 10 done
Chromosome 11 done
Chromosome 13 done
Chromosome 6 done
Chromosome 7 done
Chromosome 5 done
Chromosome 3 done
Chromosome 8 done
Chromosome 4 done
Chromosome 1 done
Chromosome 2 done
Simulation completed
Job took 1650.7996301651 seconds

When I then try to run SigProfilerClusters with this same folder path, I get the following message and it exits:
Screenshot 2024-03-14 at 2 55 44 PM

Not sure where to go from here, as I've run 100 simulations on every sample, and have confirmed this as there are 100 files in each sample's folder in the "simulations" output folder. Any help would be appreciated, thanks! And thanks again for creating this very interesting tool.

No such file or directory: '.output/simulations/data/imds.pickle'

Hi. Thanks for developing and maintaining such a cool tool.
I was running Clusters on my own data and I found an error log.

findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Arial'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Courier New'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Courier New'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/lcj/.local/lib/python3.8/site-packages/SigProfilerClusters/SigProfilerClusters.py", line 697, in analysis
    classifyFunctions.findClustersOfClusters_noVAF (project, chrom_based, input_path, windowSize, chromLengths, regions, log_file, genome, processors, imds, correction)
  File "/home/lcj/.local/lib/python3.8/site-packages/SigProfilerClusters/classifyFunctions.py", line 906, in findClustersOfClusters_noVAF
    with open(project_parent_path + "output/simulations/data/imds.pickle", "rb") as handle:
FileNotFoundError: [Errno 2] No such file or directory: '.output/simulations/data/imds.pickle'

But I have checked my output/simulations/data/ folder and it included both imds.pickle and imds_corrected.pickle.

Below are the codes I used. The input file was a MAF.

sigSim.SigProfilerSimulator("MY_Project", ".", "GRCh38", contexts = ['1536'], chrom_based=True, simulations=100)
hp.analysis("MY_Project", "GRCh38", "96", ["1536"], ".", analysis="all", sortSims=True, calculateIMD=True, subClassify=True, max_cpu = 4, includedVAFs=False, includedCCFs=False)

Thanks.

some issues when running SigProfilerClusters?

Hi,

I am running SigProfilerClusters, and find some issues:

  1. line 223 of SigProfilerSimulator.py:
    log_out.write("Project: {}\nGenome: {}\nInput File Path: {}\ncontexts: {}\nexome: {}\nsimulations: {}\nupdating: {}\nbed_file: {}\noverlap: {}\ngender: {}\nseqInfo: {}\nchrom_based: {}\nseed_file: {}\n".format(project, project_path, genome, contexts, str(exome), str(simulations), str(updating), str(bed_file), str(overlap), gender, str(seqInfo), str(chrom_based), str(seed_file)))

  2. line 594 of of SigProfilerSimulator.py:
    sigs.sigProfilerExtractor("table", ref_dir+"output/extraction_clustered/", ref_dir+"output/vcf_files" + path_suffix + "/"+project+"_clustered/SNV/output/SBS/"+project+"_clustered.SBS96.all", genome, startProcess=startProcess, endProcess=endProcess, totalIterations=totalIterations)#, totalIterations=totalIterations)
    startProcess should be minimum_signatures
    endProcess should be maximum_signatures

  3. chrom_based=Ture but log file of SigProfilerMatrixGenerator says chrom_based=False
    seqInfo=False but log file of SigProfilerMatrixGenerator says seqInfo=True

UnboundLocalError: local variable 'matrix_file_suffix' referenced before assignment

Hello! I'm having the following issue when running SigProfilerClusters using the 21BRCA dataset. Using Python 3.9.12 - Conda Spyder IDE . Would you be able to help? Thanks in advance!

from SigProfilerClusters import SigProfilerClusters as hp

hp.analysis(project="21BRCA_Rv3", genome="GRCh37", contexts=["96"], simContext=["96"], input_path="/Users/fonetto/21BRCA/21BRCA_Rv3/")

======================================
Beginning SigProfilerClusters Analysis

Calculating mutational distances...Completed!

Traceback (most recent call last):

Input In [2] in <cell line: 1>
hp.analysis(project="21BRCA_Rv3", genome="GRCh37", contexts=["96"], simContext=["96"], input_path="/Users/fonetto/21BRCA/21BRCA_Rv3/")

File ~/opt/anaconda3/lib/python3.9/site-packages/SigProfilerClusters/SigProfilerClusters.py:669 in analysis
regions, imds = hotspot.hotSpotAnalysis(project, genome, contexts, simContext, ref_dir, windowSize, processors, plotIMDfigure, exome, chromLengths, binsDensity, original, signature, percentage, firstRun, clustering_vaf, calculateIMD, chrom_based, correction)

File ~/opt/anaconda3/lib/python3.9/site-packages/SigProfilerClusters/hotspot.py:893 in hotSpotAnalysis
matrix_file_suffix_original = matrix_file_suffix + "all"

UnboundLocalError: local variable 'matrix_file_suffix' referenced before assignment

FileNotFoundError: [Errno 2] No such file or directory: './Allen_Pat02_ID/output/vcf_files_corrected/cancer_clustered/INDEL/output/ID/cancer_clustered.ID83.all'

Hi,
when I used SigProfilerClusters to generate clustered indel result using the code as below

import sys
from SigProfilerMatrixGenerator import install as genInstall
from SigProfilerSimulator import SigProfilerSimulator as sigSim
from SigProfilerClusters import SigProfilerClusters as hp
if __name__ == '__main__':
	sigSim.SigProfilerSimulator("cancer", "./Allen_Pat110_ID/", "GRCh37", contexts = ["ID"], simulations=100)
	hp.analysis("cancer", "GRCh37", "ID", ["ID"], "./Allen_Pat110_ID/", analysis="all", interdistance='ID', sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=1, TCGA=True, sanger=False)

I got error message in "SigProfilerClusters_cancer_GRCh37_2022-04-25.err" file:

Traceback (most recent call last):
File "/share/home/shuo.shi/APOBEC/SigProfiler//script/cluster.ID.py", line 7, in
hp.analysis(sys.argv[1], "GRCh37", "ID", ["ID"], sys.argv[2], analysis="all", interdistance='ID', sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=1, TCGA=True, sanger=False,exome=True)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/site-packages/SigProfilerClusters/SigProfilerClusters.py", line 590, in analysis
regions, imds = hotspot.hotSpotAnalysis(project, genome, contexts, simContext, ref_dir, windowSize, processors, plotIMDfigure, exome, chromLengths, binsDensity, original, signature, percentage, firstRun, clustering_vaf, calculateIMD, chrom_based, correction)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/site-packages/SigProfilerClusters/hotspot.py", line 1151, in hotSpotAnalysis
with open(ref_dir + "output/vcf_files" + path_suffix + "/" + project + "_clustered/INDEL/output/ID/" + project + "_clustered.ID83.all" ) as f:
FileNotFoundError: [Errno 2] No such file or directory: './Allen_Pat110_ID/output/vcf_files_corrected/cancer_clustered/INDEL/output/ID/cancer_clustered.ID83.all'

And I also tried with the BRCA_example.vcf (https://osf.io/qpmzw/wiki/5.%20Quick%20Start%20Example/) with the same parameter setting like below

import sys
from SigProfilerMatrixGenerator import install as genInstall
from SigProfilerSimulator import SigProfilerSimulator as sigSim
from SigProfilerClusters import SigProfilerClusters as hp
if __name__ == '__main__':
	sigSim.SigProfilerSimulator("BRCA", "./example/", "GRCh37", contexts = ["ID"], simulations=100)
	hp.analysis("BRCA", "GRCh37", "ID", ["ID"], "./example/", analysis="all", interdistance='ID', sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=1, TCGA=True, sanger=False)

However, this time I got the error message in SigProfilerSimulator_BRCA_GRCh37_2022-04-26.err file as below:

Traceback (most recent call last):
File "/share/home/shuo.shi/APOBEC/SigProfiler/cluster.ID.example.py", line 6, in
sigSim.SigProfilerSimulator("BRCA", "./example/", "GRCh37", contexts = ["ID"], simulations=100)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/site-packages/SigProfilerSimulator/SigProfilerSimulator.py", line 395, in SigProfilerSimulator
sample_names, mut_prep = simScript.mutation_preparation(catalogue_files, log_file)
File "/share/home/shuo.shi/anaconda3/lib/python3.9/site-packages/SigProfilerSimulator/mutational_simulator.py", line 498, in mutation_preparation
with open (catalogue_files[context]) as f:
FileNotFoundError: [Errno 2] No such file or directory: './example/output/ID/BRCA.ID83.all'

Please let me know how to fix it ?

Exome argument missing from the wiki documentation

Hey there, I recently was attempting to run the program for some SigProfilerSimulator simulations I created providing a custom BED file in the exome parameter. When attempting to run SigProfilerClusters on those simulations, the program would complain that there were no simulations for the project. After digging around in the code, I found that the main function has an argument exome as well (default false) that is not described in the wiki documentation. From what I saw, this argument is only used to know if "_exome" should be appended to the path where the program expects to find the simulations from SigProfilerSimulator. Setting this to true in the call to the program made it work finally. I was wondering if this was just left out of the documentation by mistake or if actually SigProfilerClusters is currently not meant to be run for custom-range simulations. Another possibility is that the program is supposed to automatically detect that the simulation was custom-range but its not actually doing so currently.

AttributeError: 'numpy.int64' object has no attribute 'bit_length'

Hi,

I am running:
from SigProfilerMatrixGenerator import install as genInstall
genInstall.install('GRCh38', rsync=False, bash=True)
from SigProfilerSimulator import SigProfilerSimulator as sigSim
from SigProfilerClusters import SigProfilerClusters as hp
sigSim.SigProfilerSimulator(project='Pt32_clusters', project_path='/fh/fast/setty_m/user/cmills2/projects/hnscc/data/WGS/Pt32/sig_clusters',
genome='GRCh38', contexts=["96"], simulations=100, chrom_based=True)
hp.analysis(project='Pt32_clusters', genome='GRCh38', contexts='96', simContext=['96'], input_path='/fh/fast/setty_m/user/cmills2/projects/hnscc/data/WGS/Pt32/sig_clusters/', analysis='all', sortSims=True, correction=True, calculateIMD=True, subClassify=True, includedVAFs=False, includedCCFs=False)

But get the following error in the last step after Determining sample-dependent intermutational distance (IMD) cutoff...

RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/home/cmills2/.conda/envs/wgs/lib/python3.11/multiprocessing/pool.py", line 125, in worker
result = (True, func(*args, **kwds))
^^^^^^^^^^^^^^^^^^^
File "/home/cmills2/.conda/envs/wgs/lib/python3.11/site-packages/SigProfilerClusters/hotspot.py", line 800, in calculateSampleIMDs
y2s[sample], bincenters2s[sample], q_values[sample], interval_lines[sample], orig_mutations_samps[sample], avg_simCounts[sample], std_simCounts[sample], imds[sample], lower_CIs[sample], upper_CIs[sample], lower_CIs_refined[sample], upper_CIs_refined[sample], avg_bin_counts_samp[sample] = first_run(overall_distances_all, distances_orig_all_samps, distances_orig_all, vcf_path_clust, vcf_path_nonClust, sample, original, sim_count, project, genome, clustering_vaf, correctionData, correction, regions, imds_corrected, windowSize, chromLengths)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/cmills2/.conda/envs/wgs/lib/python3.11/site-packages/SigProfilerClusters/hotspot.py", line 332, in first_run
std_dev.append(stdev(bin_std_dev))
^^^^^^^^^^^^^^^^^^
File "/home/cmills2/.conda/envs/wgs/lib/python3.11/statistics.py", line 922, in stdev
return _float_sqrt_of_frac(mss.numerator, mss.denominator)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/cmills2/.conda/envs/wgs/lib/python3.11/statistics.py", line 374, in _float_sqrt_of_frac
q = (n.bit_length() - m.bit_length() - _sqrt_bit_width) // 2
^^^^^^^^^^^^
AttributeError: 'numpy.int64' object has no attribute 'bit_length'
"""

The above exception was the direct cause of the following exception:

AttributeError Traceback (most recent call last)
Cell In[12], line 1
----> 1 hp.analysis(project='Pt32_clusters', genome='GRCh38', contexts='96', simContext=['96'], input_path='/fh/fast/setty_m/user/cmills2/projects/hnscc/data/WGS/Pt32/sig_clusters/', analysis='all', sortSims=True, correction=True, calculateIMD=True, subClassify=True, includedVAFs=False, includedCCFs=False)

File ~/.conda/envs/wgs/lib/python3.11/site-packages/SigProfilerClusters/SigProfilerClusters.py:681, in analysis(project, genome, contexts, simContext, input_path, output_type, analysis, interdistance, exome, clustering_vaf, sortSims, extraction, correction, startProcess, endProcess, totalIterations, calculateIMD, chrom_based, max_cpu, subClassify, sanger, TCGA, standardVC, includedVAFs, includedCCFs, windowSize, bedRanges, plotIMDfigure, plotRainfall, probability)
679 signature = False
680 percentage = False
--> 681 regions, imds = hotspot.hotSpotAnalysis(project, genome, contexts, simContext, ref_dir, windowSize, processors, plotIMDfigure, exome, chromLengths, binsDensity, original, signature, percentage, firstRun, clustering_vaf, calculateIMD, chrom_based, correction)
683 # Allows for the clustered muutations to automactically run through the extraction.
684 # This option is not recommended, but rather the extractions should be run separately after
685 # the clustered analysis is completed.
(...)
691 # Subclassify the clustered partition of mutations with the exception of indels. This function will also
692 # produce the rainfall plots.
693 if subClassify:

File ~/.conda/envs/wgs/lib/python3.11/site-packages/SigProfilerClusters/hotspot.py:1062, in hotSpotAnalysis(project, genome, contexts, simContext, ref_dir, windowSize, processors, plotIMDfigure, exome, chromLengths, binsDensity, original, signature, percentage, firstRun, clustering_vaf, calculateIMD, chrom_based, correction)
1059 r.wait()
1060 if not r.successful():
1061 # Raises an error when not successful
-> 1062 r.get()
1064 #####################################################################################################################
1065 #####################################################################################################################
1066 print("Completed!", flush=True)

File ~/.conda/envs/wgs/lib/python3.11/multiprocessing/pool.py:774, in ApplyResult.get(self, timeout)
772 return self._value
773 else:
--> 774 raise self._value

AttributeError: 'numpy.int64' object has no attribute 'bit_length'

The log.err file is blank but the log.out file contains:
THIS FILE CONTAINS THE METADATA ABOUT SYSTEM AND RUNTIME

-------System Info-------
Operating System Name: Linux
Nodename: gizmok49
Release: 4.15.0-213-generic
Version: #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023

-------Python and Package Versions-------
Python Version: 3.11.6
SigProfilerMatrixGenerator Version: 1.2.19
SigProfilerPlotting version: 1.3.18
matplotlib version: 3.4.3
scipy version: 1.11.4
numpy version: 1.26.2

-------Vital Parameters Used for the execution -------
Project: Pt32_clusters
Genome: GRCh38
Context: ['96']
interdistance: False
input_path: /fh/fast/setty_m/user/cmills2/projects/hnscc/data/WGS/Pt32/sig_clusters/
output_type: all

-------Date and Time Data-------
Date and Clock time when the execution started: 2023-12-13 13:37:38.869288

-------Runtime Checkpoints-------

If you could please help me troubleshoot this issue, that would be excellent. Thank you!

'SigProfilerMatrixGenerator.scripts.SigProfilerMatrixGeneratorFunc' has no attribute 'reference_paths'

Hi,

I have been following step-by-step. All other parts of the SigProfiler tool suite have worked great - thanks for this fantastic resource. I have however encountered this error:

hp.analysis("lfe_sim", "GRCh37", "96", "96", "/SigProfiler/files", subClassify=False)

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/.local/lib/python3.10/site-packages/SigProfilerClusters/SigProfilerClusters.py", line 400, in analysis chrom_path, ref_dir = matRef.reference_paths(genome) AttributeError: module 'SigProfilerMatrixGenerator.scripts.SigProfilerMatrixGeneratorFunc' has no attribute 'reference_paths'

I am unable to figure out the reason for this error. I have previously installed the reference just fine and it worked for matGen.SigProfilerMatrixGenerator.

>>> genInstall.install('GRCh37', rsync=False, bash=True) Beginning installation. This may take up to 40 minutes to complete. The transcriptional reference data for GRCh37 has been saved. All reference files have been created. Verifying and benchmarking installation now... Starting matrix generation for SNVs and DINUCs...Completed! Elapsed time: 1.16 seconds. Matrices generated for 1 samples with 0 errors. Total of 2430 SNVs, 0 DINUCs, and 0 INDELs were successfully analyzed. Installation was succesful. SigProfilerMatrixGenerator took 6.068857669830322 seconds to complete. To proceed with matrix_generation, please provide the path to your vcf files and an appropriate output path. Installation complete.

I would appreciate any help or insight.

Best wishes

Christian

column to extract VAF when standardVC

Hello,

on the SigProfilerClusters Wiki page, there seems to be an inconsistency in the documentation.

If your VAF is recorded in the 8th column of your VCF as AF=xx, set standardVC=True, TCGA=False, and sanger=False.

the above states that standardVC=True when VAF is in the 8th while the below says that standardVC=True when VAF is in the 7th column.

Parameter | Variable Type | Description
standardVC | Boolean | Parameter that informs the tool of what format the VAF scores are provided. This is required when subClassify=True and sanger=False and TCGA=False and when the data contains VAF formatted in the 7th column as AF=XX (default=False)

yet, in classifyFunctions.py, vaf = float(lines[9].split("AF=")[1].split(";")[0]) vaf seems to be extracted from the 10th column.
i'd appreaciate it if you could clarify this issue.

Thanks a lot!

elif standardVC:
		vafs = {}
		for vcfFile in vcf_files:
			sample = vcfFile.split(".")[0]
			vafs[sample] = {}
			with open(vcf_path + vcfFile) as f:
				for lines in f:
					if lines[0] == "#":
						continue
					lines = lines.strip().split()
					chrom = lines[0]
					pos = lines[1]
					ref = lines[3]
					alt = lines[4]
					try:
						vaf = float(lines[9].split("AF=")[1].split(";")[0])
					except:
						vaf = -1.5
					keyLine = ":".join([chrom, pos, ref, alt])
					vafs[sample][keyLine] = vaf

imds_corrected when correction=True and chrom_based=True

SigProfilerClusters error log

 File "<stdin>", line 1, in <module>
  File "MY_PATH/SigProfilerClusters/SigProfilerClusters.py", line 609, in analysis
    classifyFunctions.findClustersOfClusters_noVAF (project, chrom_based, input_path, windowSize, chromLengths, regions, log_file, genome, processors, imds, correction)
  File "my_path/SigProfilerClusters/classifyFunctions.py", line 844, in findClustersOfClusters_noVAF
    with open(project_parent_path + "output/simulations/data/imds_corrected.pickle", "rb") as handle:
FileNotFoundError: [Errno 2] No such file or directory: 'MY_PROJECT_DIR/output/simulations/data/imds_corrected.pickle'

Hello,

SigProfilerClusters looks for imds_corrected.pickle while MY_PROJECT_DIR/output/simulations/data/ have imds_chrom.pickle and imds_corrected_chrom.pickle.

i set correction=True and chrom_based=True in SigProfilerClusters. shouldn't SigProfilerClusters look for imds_corrected_chrom.pickle instead of imds_corrected.pickle when both correction=True and chrom_based=True?

Below are the lines of code I used.

sigSim.SigProfilerSimulator("PROJECT_NAME", "MY_PATH", "GRCh37", contexts = ['1536'], chrom_based=True, simulations=100)

hp.analysis("PROJECT_NAME", "GRCh37", "96", ["1536"], "MY_PATH", analysis="all", sortSims=True, subClassify=True, correction=True, calculateIMD=True, chrom_based=True, includedVAFs=False, plotIMDfigure=True, plotRainfall=True, windowSize=1000000)

Thanks in advance.

How to set parameters to run SigProfilerClusters for INDEL?

Hi,

I am running SigProfilerClusters for INDEL data with the following parameters:
genome=GRCh38, contexts=ID, simContext=ID, interdistance=ID, analysis=all, sortSims=True, subClassify=True, correction=True, calculateIMD=True, max_cpu=32, sanger=False, TCGA=True, simulations=100

The job is running SigProfilerSimulator step now, but it took more than 1 hour to finish simulation for each sample. My project have hundreds of samples that may take more than one month to run.

How could I speed up the SigProfilerClusters for INDEL?

Best

Unable to cluster mutations

I have been able to run the BRCA test vcf and get the outputs as per /example. I am now trying to run on my vcf but it seems to stop after calclulating mutational distances as the figure below. Do you know why that is? What preprocessing should I do to my vcfs?

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.