Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Florian Wagner committed Aug 16, 2016
2 parents 22d942a + 69452af commit 9a07609
Show file tree
Hide file tree
Showing 21 changed files with 895 additions and 449 deletions.
3 changes: 2 additions & 1 deletion gopca/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
import pkg_resources

from .params import GOPCAParams
from .config import GOPCAConfig
from .signature import GOPCASignature
from .signature_matrix import GOPCASignatureMatrix
from .run import GOPCARun
from .go_pca import GOPCA

version = text(pkg_resources.require('gopca')[0].version)

__all__ = ['GOPCAParams', 'GOPCA', 'GOPCARun',
__all__ = ['GOPCAParams', 'GOPCAConfig', 'GOPCA', 'GOPCARun',
'GOPCASignatureMatrix', 'GOPCASignature']
2 changes: 1 addition & 1 deletion gopca/cli/print_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def main(args=None):
if run is not None:
print('GO-PCA Run')
print('----------')
print('- GO-PCA version: %s' % run.version)
print('- GO-PCA version: %s' % run.gopca_version)
print('- Timestamp: %s' % run.timestamp)
print('- Exec. time: %.1f s' % run.exec_time)

Expand Down
140 changes: 140 additions & 0 deletions gopca/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Copyright (c) 2016 Florian Wagner
#
# This file is part of GO-PCA.
#
# GO-PCA is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License, Version 3,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

"""Module containing the `GOPCAConfig` class.
"""

from __future__ import (absolute_import, division,
print_function, unicode_literals)
from builtins import *

import logging
import hashlib
import copy

from genometools.basic import GeneSetCollection
from genometools.ontology import GeneOntology
from . import GOPCAParams

logger = logging.getLogger(__name__)


class GOPCAConfig(object):
"""A GO-PCA configuration.
This class represents a complete set of inputs to the GO-PCA algorithm,
excluding the expression data. Specifically, the inputs consist of
parameter settings, represented by the `GOPCAParams` class, as well as a
list of gene sets (optionally including Gene Ontology data; represented by
the `GOPCAGeneSets` class).
Furthermore, two versions of the parameter settings are stored: The
first version (`user_params`) holds the values exactly as specified by the
user. Some of those values can have special meaning, such as ``-1`` for the
XL-mHG ``L`` parameter (``mHG_L``), which will be automatically converted
to ``p/8`` (where ``p`` is the number of genes). The second version
(simply called `params`) holds the values actually used by the algorithm.
So in the previous example, the ``mHG_L`` parameter stored in this version
would equal ``p/8`` (rounded down to the nearest integer).
Parameters
----------
user_params: `GOPCAParams`
See :attr:`user_params` attribute.
gene_sets: `genometools.basic.GeneSetCollection`
See :attr:`gene_set_coll` attribute.
gene_ontology: `genometools.ontology.GeneOntology`, optional
See :attr:`gene_ontology` attribute.
params: `GOPCAParams`, optional
See :attr:`params` attribute.
Attributes
----------
user_params: `GOPCAParams`
The GO-PCA parameter settings, as specified by the user.
gene_sets: `genometools.basic.GeneSetCollection`
The list of gene sets to be used by GO-PCA.
gene_ontology: `genometools.ontology.GeneOntology` or None
The Gene Ontology (only if gene sets are based on GO annotations.)
params: `GOPCAParams` or None
The final GO-PCA parameter settings, after resolving parameter values
with special meanings (see above).
"""
def __init__(self, user_params, gene_sets,
gene_ontology=None, params=None):

# store configuration
assert isinstance(user_params, GOPCAParams)
assert isinstance(gene_sets, GeneSetCollection)

if gene_ontology is not None:
assert isinstance(gene_ontology, GeneOntology)

if params is not None:
assert isinstance(params, GOPCAParams)

self.user_params = user_params
self.params = params
self.gene_sets = gene_sets
self.gene_ontology = gene_ontology

def __repr__(self):
return '<%s instance (hash="%s")>' % \
(self.__class__.__name__, self.hash)

def __str__(self):
return '<%s instance (hash="%s")>' % \
(self.__class__.__name__, self.hash)

def __eq__(self, other):
if self is other:
return True
elif type(self) is type(other):
return self.__dict__ == other.__dict__
else:
return NotImplemented

def __ne__(self, other):
return not self.__eq__(other)

@property
def hash(self):
data_str = ';'.join(
repr(v) for v in [self.user_params, self.params,
self.gene_sets, self.gene_ontology])
data = data_str.encode('UTF-8')
return str(hashlib.md5(data).hexdigest())

def finalize_params(self, num_genes):
"""Replace parameters set to special values with final value.
Parameters
----------
num_genes: int
The number of genes in the analysis.
"""
params = copy.deepcopy(self.user_params)

# determine mHG_L, if -1 or 0
if params.mHG_L == -1:
# -1 = determine L automatically => p / 8
params.set_param('mHG_L', int(num_genes / 8.0))
elif params.mHG_L == 0:
# 0 = "disable" effect of L => set it to the number of genes
params.set_param('mHG_L', num_genes)

self.params = params

0 comments on commit 9a07609

Please sign in to comment.