Author: bugman
Date: Fri Jan 30 10:30:34 2015
New Revision: 27380
URL: http://svn.gna.org/viewcvs/relax?rev=27380&view=rev
Log:
Created the new relax data store object for saving sequence alignments.
This is in the new data_store.seq_align module via the Seqence_alignments
object, subclassed from
RelaxListType, for holding all alignments and the Alignment Element object,
subclassed from Element,
for holding each individual alignment. The objects are currently unused.
Added:
trunk/data_store/seq_align.py
Added: trunk/data_store/seq_align.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/data_store/seq_align.py?rev=27380&view=auto
==============================================================================
--- trunk/data_store/seq_align.py (added)
+++ trunk/data_store/seq_align.py Fri Jan 30 10:30:34 2015
@@ -0,0 +1,169 @@
+###############################################################################
+# #
+# Copyright (C) 2015 Edward d'Auvergne #
+# #
+# This file is part of the program relax (http://www.nmr-relax.com). #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# 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 docstring.
+"""Sequence alignment data structures."""
+
+# relax module imports.
+from data_store.data_classes import Element, RelaxListType
+from lib.errors import RelaxError
+
+
+class Seqence_alignments(RelaxListType):
+ """The structure for holding all sequence alignments."""
+
+ def add(self, object_ids=None, models=None, molecules=None,
sequences=None, strings=None, gaps=None, msa_algorithm=None,
pairwise_algorithm=None, matrix=None, gap_open_penalty=None,
gap_extend_penalty=None, end_gap_open_penalty=None,
end_gap_extend_penalty=None):
+ """Add a new sequence alignment.
+
+ @keyword object_ids: The list of IDs for each
structural object in the alignment. In most cases this will be the data pipe
name. This will be used to retrieve alignments.
+ @type object_ids: list of str
+ @keyword models: The list of model numbers used in
the alignment. This will be used to retrieve alignments.
+ @type models: list of int
+ @keyword molecules: The list of molecules used in the
alignment. This will be used to retrieve alignments.
+ @type molecules: list of str
+ @keyword sequences: The list of residue sequences for
the alignment as one letter codes.
+ @type sequences: list of str
+ @keyword strings: The list of alignment strings.
+ @type strings: list of str
+ @keyword gaps: The alignment gap matrix.
+ @type gaps: numpy rank-2 int array
+ @keyword msa_algorithm: The global multiple sequence
alignment (MSA) algorithm.
+ @type msa_algorithm: str
+ @keyword pairwise_algorithm: The pairwise sequence alignment
algorithm.
+ @type pairwise_algorithm: str
+ @keyword matrix: The substitution matrix
+ @type matrix: str
+ @keyword gap_open_penalty: The penalty for introducing gaps,
as a positive number.
+ @type gap_open_penalty: float
+ @keyword gap_extend_penalty: The penalty for extending a gap,
as a positive number.
+ @type gap_extend_penalty: float
+ @keyword end_gap_open_penalty: The optional penalty for opening a
gap at the end of a sequence.
+ @type end_gap_open_penalty: float
+ @keyword end_gap_extend_penalty: The optional penalty for extending
a gap at the end of a sequence.
+ @type end_gap_extend_penalty: float
+ """
+
+ # Append a new element.
+ self.append(Alignment(object_ids=object_ids, molecules=molecules,
models=models, sequences=sequences, strings=strings, gaps=gaps,
msa_algorithm=msa_algorithm, pairwise_algorithm=pairwise_algorithm,
matrix=matrix, gap_open_penalty=gap_open_penalty,
gap_extend_penalty=gap_extend_penalty,
end_gap_open_penalty=end_gap_open_penalty,
end_gap_extend_penalty=end_gap_extend_penalty))
+
+
+
+class Alignment(Element):
+ """Container for an individual sequence alignment."""
+
+ def __init__(self, object_ids=None, models=None, molecules=None,
sequences=None, strings=None, gaps=None, msa_algorithm=None,
pairwise_algorithm=None, matrix=None, gap_open_penalty=None,
gap_extend_penalty=None, end_gap_open_penalty=None,
end_gap_extend_penalty=None):
+ """Set up the sequence alignment object.
+
+ @keyword object_ids: The list of IDs for each
structural object in the alignment. In most cases this will be the data pipe
name. This will be used to retrieve alignments.
+ @type object_ids: list of str
+ @keyword models: The list of model numbers used in
the alignment. This will be used to retrieve alignments.
+ @type models: list of int
+ @keyword molecules: The list of molecules used in the
alignment. This will be used to retrieve alignments.
+ @type molecules: list of str
+ @keyword sequences: The list of residue sequences for
the alignment as one letter codes.
+ @type sequences: list of str
+ @keyword strings: The list of alignment strings.
+ @type strings: list of str
+ @keyword gaps: The alignment gap matrix.
+ @type gaps: numpy rank-2 int array
+ @keyword msa_algorithm: The global multiple sequence
alignment (MSA) algorithm.
+ @type msa_algorithm: str
+ @keyword pairwise_algorithm: The pairwise sequence alignment
algorithm.
+ @type pairwise_algorithm: str
+ @keyword matrix: The substitution matrix
+ @type matrix: str
+ @keyword gap_open_penalty: The penalty for introducing gaps,
as a positive number.
+ @type gap_open_penalty: float
+ @keyword gap_extend_penalty: The penalty for extending a gap,
as a positive number.
+ @type gap_extend_penalty: float
+ @keyword end_gap_open_penalty: The optional penalty for opening a
gap at the end of a sequence.
+ @type end_gap_open_penalty: float
+ @keyword end_gap_extend_penalty: The optional penalty for extending
a gap at the end of a sequence.
+ @type end_gap_extend_penalty: float
+ """
+
+ # Store the values.
+ self.object_ids = object_ids
+ self.models = models
+ self.molecules = molecules
+ self.sequences = sequences
+ self.strings = strings
+ self.gaps = gaps
+ self.msa_algorithm = msa_algorithm
+ self.pairwise_algorithm = pairwise_algorithm
+ self.matrix = matrix
+ self.gap_open_penalty = gap_open_penalty
+ self.gap_extend_penalty = gap_extend_penalty
+ self.end_gap_open_penalty = end_gap_open_penalty
+ self.end_gap_extend_penalty = end_gap_extend_penalty
+
+ # Create a unique ID for each molecule.
+ self.ids = []
+ for i in range(len(self.object_ids)):
+ self.ids.append(self.generate_id(object_id=self.object_ids[i],
model=self.models[i], molecule=self.molecules[i]))
+
+ # Check the IDs for uniqueness.
+ for i in range(len(self.ids)):
+ for j in range(len(self.ids)):
+ if i == j:
+ continue
+ if self.ids[i] == self.ids[j]:
+ raise RelaxError("The molecule ID '%s' is not unique." %
self.ids[i])
+
+
+ def generate_id(object_id=None, model=None, molecule=None):
+ """Generate a unique ID.
+
+ @keyword object_id: The structural object ID.
+ @type object_id: str
+ @keyword model: The model number.
+ @type model: int
+ @keyword molecule: The molecule name.
+ @type molecule: str
+ @return: The unique ID constructed from the object ID,
model number and molecule name.
+ @rtype: str
+ """
+
+ # Init.
+ id = ''
+
+ # The object ID.
+ if object_id != None:
+ id += "Object '%s'" % object_id
+
+ # The model number.
+ if len(id):
+ id += '; '
+ if model != None:
+ id += "Model %i" % model
+
+ # The molecule name.
+ if len(id):
+ id += '; '
+ if molecule != None:
+ id += "Molecule '%s'" % molecule
+
+ # Sanity check.
+ if not len(id):
+ raise RelaxError("No alignment ID could be constructed.")
+
+ # Return the ID.
+ return id
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
[email protected]
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits