Merge branch 'feature/JAL-3187linkedFeatures' into feature/JAL-3251biotypedMappings
[jalview.git] / src / jalview / datamodel / MappingType.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.datamodel;
22
23 /**
24  * An enumeration of the kinds of mapping (from nucleotide or peptide, to
25  * nucleotide or peptide), and the corresponding word lengths. This is based on,
26  * but extends (and renames) the values used by Exonerate.
27  * 
28  * @see https://www.ebi.ac.uk/about/vertebrate-genomics/software/exonerate-manual
29  */
30 public enum MappingType
31 {
32   GenomeToCdna(1, 1), CdnaToGenome(1, 1), GenomeToCds(1, 1),
33   CdsToGenome(1, 1), CdnaToCds(1, 1), CdsToCdna(1, 1),
34   GenomeToPeptide(3, 1), PeptideToGenome(1, 3), CdnaToPeptide(3, 1),
35   PeptideToCdna(1, 3), CdsToPeptide(3, 1), PeptideToCds(1, 3);
36
37   private int fromRatio;
38
39   private int toRatio;
40
41   private MappingType(int fromSize, int toSize)
42   {
43     fromRatio = fromSize;
44     toRatio = toSize;
45   }
46
47   /**
48    * Answers the number of positions each 'word' maps from (e.g. 3 when mapping
49    * from codons in nucleotide to peptide residues)
50    * 
51    * @return
52    */
53   public int getFromRatio()
54   {
55     return fromRatio;
56   }
57
58   /**
59    * Answers the number of positions each 'word' maps to (e.g. 3 when mapping
60    * from peptide residues to codons in nucleotide)
61    * 
62    * @return
63    */
64   public int getToRatio()
65   {
66     return toRatio;
67   }
68
69   /**
70    * Answers true if the mapping is from nucleotide to peptide, else false
71    * 
72    * @param type
73    * @return
74    */
75   public static boolean isDnaToPeptide(MappingType type)
76   {
77     return type != null && type.getFromRatio() == 3
78             && type.getToRatio() == 1;
79   }
80
81   /**
82    * Answers true if the mapping is from peptide to nucleotide, else false
83    * 
84    * @param type
85    * @return
86    */
87   public static boolean isPeptideToDna(MappingType type)
88   {
89     return type != null && type.getFromRatio() == 1
90             && type.getToRatio() == 3;
91   }
92 }