From 349ef01fe53c28dc78bec2d321f9c833a4b6e023 Mon Sep 17 00:00:00 2001 From: jprocter Date: Sun, 17 Jun 2007 12:59:15 +0000 Subject: [PATCH] AlignedCodonFrame holds mapping information between individual cDNA regions on dna and translated peptide sequences --- src/jalview/datamodel/AlignedCodonFrame.java | 222 ++++++++++++++++++++++++++ src/jalview/datamodel/Alignment.java | 81 ++++++++++ src/jalview/datamodel/AlignmentI.java | 28 ++++ 3 files changed, 331 insertions(+) create mode 100644 src/jalview/datamodel/AlignedCodonFrame.java diff --git a/src/jalview/datamodel/AlignedCodonFrame.java b/src/jalview/datamodel/AlignedCodonFrame.java new file mode 100644 index 0000000..c89c170 --- /dev/null +++ b/src/jalview/datamodel/AlignedCodonFrame.java @@ -0,0 +1,222 @@ +package jalview.datamodel; + +import jalview.util.MapList; + +/** + * Stores mapping between the columns of a protein alignment and a DNA alignment + * and a list of individual codon to amino acid mappings between sequences. + */ + +public class AlignedCodonFrame +{ + /** + * array of nucleotide positions for aligned codons at column of aligned proteins. + */ + public int[][] codons = null; + /** + * width of protein sequence alignement + * implicit assertion that codons.length >= aaWidth + */ + public int aaWidth=0; + /** + * initialise codon frame with a nominal alignment width + * @param aWidth + */ + public AlignedCodonFrame(int aWidth) + { + codons = new int[aWidth][]; + for (int res = 0; res < aWidth; res++) + codons[res] = null; + } + + /** + * ensure that codons array is at least as wide as aslen residues + * @param aslen + * @return (possibly newly expanded) codon array + */ + public int[][] checkCodonFrameWidth(int aslen) + { + if (codons.length <= aslen + 1) + { + // probably never have to do this ? + int[][] c = new int[codons.length + 10][]; + for (int i = 0; i < codons.length; i++) + { + c[i] = codons[i]; + codons[i] = null; + } + codons = c; + } + return codons; + } + /** + * @return width of aligned translated amino acid residues + */ + public int getaaWidth() + { + return aaWidth; + } + /** + * increase aaWidth by one and insert a new aligned codon position space at aspos. + * @param aspos + */ + public void insertAAGap(int aspos, char gapCharacter) + { + // this aa appears before the aligned codons at aspos - so shift them in each pair of mapped sequences + aaWidth++; + for (int sq=0;aaSeqs!=null && sq