Package: denovonear
DenovonearThis code assesses whether de novo single-nucleotide variants are closer
together within the coding sequence of a gene than expected by chance. We use
local-sequence based mutation rates to account for differential mutability of
regions. The default rates are per-trinucleotide based seeNature Genetics
46:944–950, but
you can use your own rates, or even longer sequence contexts, such as 5-mers or
7-mers.InstallpipinstalldenovonearUsageAnalysede novomutations with the CLI tool:denovonearcluster\--indata/example.grch38.dnms.txt\--gencodedata/example.grch38.gtf\--fastadata/example.grch38.fa\--outoutput.txtexplanation of options:--in: path to tab-separated table of de novo mutations. See example table below for columns, orexample.grch38.dnms.txtin data folder.--gencode: path to GENCODE annotations inGTF formatfor
transcripts and exons e.g.example release. Can be gzipped, or uncompressed.--fasta: path to genome fasta, matching genome build of gencode fileIf the --gencode or --fasta options are skipped (e.g.denovonear cluster --in  INFILE --out OUTFILE), gene annotations will be retrieved via an ensembl web
service. For that, you might need to specify--genome-build grch38to ensure
the gene coordinates match your de novo mutation coordinates.--rates PATHS_TO_RATES_FILES--rates-format context OR genome--cache-folder PATH_TO_CACHE_DIR--genome-build "grch37" or "grch38" (default=grch37)The rates option operates in two ways. The first (which requires --rates-format
to be "context") is to pass in one path to a tab separated file with three columns:
'from', 'to', and 'mu_snp'. The 'from' column contains DNA sequence (where the
length is an odd number) with the base to change at the central nucleotide. The
'to' column contains the sequence with the central base modified. The 'mu_snp'
column contains the probability of the change (as per site per generation).The second way to use the rates option is to pass in multiple paths to VCFs
containing mutation rates for every genome position. This requires the --rates-format
to be "genome". Currently the only supported rates files are ones from Roulette
(https://www.biorxiv.org/content/10.1101/2022.08.20.504670v1), which can be found
here:http://genetics.bwh.harvard.edu/downloads/Vova/Roulette/. This needs both
the VCFs and their index files.The cache folder defaults to making a folder named "cache" within the working
directory. The genome build indicates which genome build the coordinates of the
de novo variants are based on, and defaults to GRCh37.Example de novo tablegene_namechrposconsequencesnp_or_indelOR4F5chr169500missense_variantDENOVO-SNPOR4F5chr169450missense_variantDENOVO-SNPPython usagefromdenovonear.gencodeimportGencodefromdenovonear.cluster_testimportcluster_de_novosfromdenovonear.mutation_ratesimportload_mutation_ratesgencode=Gencode('./data/example.grch38.gtf','./data/example.grch38.fa')symbol='OR4F5'de_novos={'missense':[69500,69450,69400],'nonsense':[]}rates=load_mutation_rates()p_values=cluster_de_novos(de_novos,gencode[symbol],rates,iterations=1000000)Pull out site-specific rates by creating Transcript objects, then get the
rates by consequence at each sitefromdenovonear.rate_limiterimportRateLimiterfromdenovonear.load_mutation_ratesimportload_mutation_ratesfromdenovonear.load_geneimportconstruct_gene_objectfromdenovonear.site_specific_ratesimportSiteRates# extract transcript coordinates and sequence from EnsemblasyncwithRateLimiter(per_second=15)asensembl:transcript=awaitconstruct_gene_object(ensembl,'ENST00000346085')mut_rates=load_mutation_rates()rates=SiteRates(transcript,mut_rates)# rates are stored by consequence, but you can iterate through to find all# possible sites in and around the CDS:forcqin['missense','nonsense','splice_lof','synonymous']:forsiteinrates[cq]:site['pos']=transcript.get_position_on_chrom(site['pos'],site['offset'])# or if you just want the summed raterates['missense'].get_summed_rate()Identify transcripts containing de novo eventsYou can identify transcripts containing de novos events with theidentify_transcripts.pyscript. This either identifies all transcripts for a
gene with one or more de novo events, or identifies the minimal set of
transcripts to contain all de novos (where transcripts are prioritised on the
basis of number of de novo events, and length of coding sequence). Transcripts
can be identified with:denovoneartranscripts\--de-novosdata/example_de_novos.txt\--outoutput.txt\--all-transcriptsOther options are:--minimise-transcriptsin place of--all-transcripts, to find the minimal
set of transcripts--genome-build "grch37" or "grch38" (default=grch37)Gene or transcript based mutation ratesYou can generate mutation rates for either the union of alternative transcripts
for a gene, or for a specific Ensembl transcript ID with theconstruct_mutation_rates.pyscript. Lof and missense mutation rates can be
generated with:denovonearrates\--genesdata/example_gene_ids.txt\--outoutput.txtThe tab-separated output file will contain one row per gene/transcript, with
each line containing a transcript ID or gene symbol, a log10 transformed
missense mutation rate, a log10 transformed nonsense mutation rate, and a log10
transformed synonymous mutation rate.