Mercurial > repos > urgi-team > teiso
diff TEisotools-1.1.a/commons/core/seq/SequenceModifications.py @ 16:836ce3d9d47a draft default tip
Uploaded
| author | urgi-team |
|---|---|
| date | Thu, 21 Jul 2016 07:42:47 -0400 |
| parents | 255c852351c5 |
| children |
line wrap: on
line diff
--- a/TEisotools-1.1.a/commons/core/seq/SequenceModifications.py Thu Jul 21 07:36:44 2016 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -#!/usr/bin/env python - -# Copyright INRA (Institut National de la Recherche Agronomique) -# http://www.inra.fr -# http://urgi.versailles.inra.fr -# -# This software is governed by the CeCILL license under French law and -# abiding by the rules of distribution of free software. You can use, -# modify and/ or redistribute the software under the terms of the CeCILL -# license as circulated by CEA, CNRS and INRIA at the following URL -# "http://www.cecill.info". -# -# As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only -# with a limited warranty and the software's author, the holder of the -# economic rights, and the successive licensors have only limited -# liability. -# -# In this respect, the user's attention is drawn to the risks associated -# with loading, using, modifying and/or developing or reproducing the -# software by the user in light of its specific status of free software, -# that may mean that it is complicated to manipulate, and that also -# therefore means that it is reserved for developers and experienced -# professionals having in-depth computer knowledge. Users are therefore -# encouraged to load and test the software's suitability as regards their -# requirements in conditions enabling the security of their systems and/or -# data to be ensured and, more generally, to use and operate it in the -# same conditions as regards security. -# -# The fact that you are presently reading this means that you have had -# knowledge of the CeCILL license and that you accept its terms. - -from operator import itemgetter -from commons.core.coord.Range import Range - -class SequenceModifications(object): - - def __init__(self, originalHeader = "", mutatedHeader = ""): - self._originalHeader = originalHeader - self._mutatedHeader = mutatedHeader - self._lMutations = [] - self._lDeletionsRanges = [] - self._lInsertionsRanges = [] - - def __str__(self): - result = "%s\t%s\n" % (self.getOriginalHeader(), self.getMutatedHeader()) - result += "Insertions\n" - for insertion in self._lInsertionsRanges: - result += "%s\n" % insertion.toString() - result += "Deletions\n" - for insertion in self._lDeletionsRanges: - result += "%s\n" % insertion.toString() - result += "Mutations" - for mutation in self._lMutations: - result += "\n%i\t%s\t%s" % (mutation[0], mutation[1], mutation[2]) - return result - - def __eq__(self, o): - if type(o) is type(self): - self.sort() - o.sort() - return self._originalHeader == o._originalHeader and self._mutatedHeader == o._mutatedHeader and self._lMutations == o._lMutations \ - and self._lDeletionsRanges == o._lDeletionsRanges and self._lInsertionsRanges == o._lInsertionsRanges - return False - - def __ne__(self, o): - return not self.__eq__(o) - - def getOriginalHeader(self): - return self._originalHeader - - def getMutatedHeader(self): - return self._mutatedHeader - - def getMutations(self): - self.sort() - return self._lMutations - - def getInsertions(self): - self.sort() - return self._lInsertionsRanges - - def getDeletions(self): - self.sort() - return self._lDeletionsRanges - - def setOriginalHeader(self, originalHeader): - self._originalHeader = originalHeader - - def setMutatedHeader(self, mutatedHeader): - self._mutatedHeader = mutatedHeader - - def setMutations(self, lMutations): - self._lMutations = lMutations - - def addMutation(self, tupleMute): - #tuple: (position, oldNT, newNT) - self._lMutations.append(tupleMute) - - def addInsertion(self, start, end, insertedSeqName = "."): - self._lInsertionsRanges.append(Range(insertedSeqName, start, end)) - - def addDeletion(self, start, end): - self._lDeletionsRanges.append(Range(self.getOriginalHeader(), start, end)) - - def clear(self): - self._lMutations = [] - self._lDeletionsRanges = [] - self._lInsertionsRanges = [] - - def sort(self): - self._lMutations.sort(key = itemgetter(0), reverse = False) - self._lDeletionsRanges.sort(key = lambda delRange: delRange.getStart(), reverse = False) - self._lInsertionsRanges.sort(key = lambda insRange: insRange.getStart(), reverse = False) \ No newline at end of file
