mgkit.snps.classes module

Manage SNP data.

class mgkit.snps.classes.GeneSNP(gene_id='', taxon_id=0, exp_syn=0, exp_nonsyn=0, coverage=None, snps=None, uid=None, json_data=None)

Bases: mgkit.snps.classes.RatioMixIn

New in version 0.1.13.

Class defining gene and synonymous/non-synonymous SNPs.

It defines background synonymous/non-synonymous attributes and only has a method right now, which calculate pN/pS ratio. The method is added through a mixin object, so the ratio can be customised and be shared with the old implementation.

uid

str – unique id for the isoform (to be referenced in a GFF file)

gene_id

str – gene id

taxon_id

int – gene taxon

exp_syn

int – expected synonymous changes

exp_nonsyn

int – expected non-synonymous changes

coverage

int – gene coverage

snps

list – list of SNPs associated with the gene, each element is a tuple with the position (relative to the gene start), the second is the nucleotidic change and the third is the aa SNP type as defined by SNPType.

Note

The main difference with the GeneSyn is that all snps are kept and syn and nonsyn are not attributes but properties that return the count of synonymous and non-synonymous SNPs in the snps list.

Warning

This class uses more memory than GeneSyn because it doesn’t use __slots__, it may be changed in later versions.

add(other)

Inplace addition of another instance values. No check for them being the same gene/taxon, it’s up to the user to check that they can be added together.

Parameters:other – instance of GeneSyn to add
add_snp(position, change, snp_type=<SNPType.unknown: 0>)

Adds a SNP to the list

Parameters:
  • position (int) – SNP position, relative to the gene start
  • change (str) – nucleotidic change
  • snp_type (enum) – one of the values defined in SNPType
coverage = None
exp_nonsyn = None
exp_syn = None
from_json(data)

Instantiate the instance with values from a json definition

Parameters:data (str) – json representation, as returned by GeneSNP.to_json()
gene_id = None
nonsyn

Returns the expected non-synonymous changes

snps = None
syn

Returns the expected synonymous changes

taxon_id = None
to_json()

Returns a json definition of the instance

Returns:json representation of the instance
Return type:str
uid = None
class mgkit.snps.classes.RatioMixIn

Bases: object

calc_ratio(haplotypes=False)

Changed in version 0.2.2: split the function to handle flag_value in another method

Calculate \(\frac {pN}{pS}\) for the gene.

(1)\[\frac {pN}{pS} = \frac{ ^{oN}/_{eN}}{ ^{oS}/_{eS}}\]

WHere:

  • oN (number of non-synonymous - nonsyn)
  • eN (expected number of non-synonymous - exp_nonsyn)
  • oS (number of synonymous - syn)
  • eS (expected number of synonymous - exp_syn)
Parameters:
  • flag_value (bool) – when there’s no way to calculate the ratio, the possible cases will be flagged with a negative number. This allows to make substitutions for these values
  • haplotypes (bool) – if true, coverage information is not used, because the SNPs are assumed to come from an alignment that has sequences having haplotypes
Returns:

the \(\frac {pN}{pS}\) for the gene.

Note

Because pN or pS can be 0, and the return value would be NaN, we take in account some special cases. The default return value in this cases is numpy.nan.

  • Both synonymous and non-synonymous values are 0:

    • if both the syn and nonsyn attributes are 0 but there’s coverage for this gene, we return a 0, as there’s no evolution in this gene. Before, the coverage was checked by this method against either the passed min_cov parameter that was equal to MIN_COV. Now the case is for the user to check the coverage and functions in mgkit.snps.conv_func do that. If enough coverage was achieved, the haplotypes parameter can be used to return a 0

All other cases return a NaN value

Return type:

float

calc_ratio_flag()

New in version 0.2.2.

Handles cases where it’s important to flag the returned value, as explained in GeneSNP.calc_ratio(), and when the both the number of synonymous and non-synonymous is greater than 0, the pN/pS value is returned.

  • The number of non-synonymous is greater than 0 but the number of

    synonymous is 0:

    • if flag_value is True, the returned value is -1
    • The number of synonymous is greater than 0 but the number of non-synonymous is 0:

      • if flag_value is True, the returned value is -2
\(oS\) \(oN\) return value
>0 >0 pN/pS
0 0 -3
>0 0 -1
0 >0 -2
class mgkit.snps.classes.SNPType

Bases: enum.Enum

New in version 0.1.13.

Enum that defines SNP types. Supported at the moment:

  • unknown = 0
  • syn (synonymous) = 1
  • nonsyn (non-synonymous) = 2

Note

No support is planned at the moment to support indel mutations

nonsyn = 2
syn = 1
unknown = 0