JAL-4386 PCA/Tree Calculation for Secondary Structures: Changes related to dropdown...
[jalview.git] / src / jalview / analysis / scoremodels / SimilarityParams.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.analysis.scoremodels;
22
23 import jalview.api.analysis.SimilarityParamsI;
24
25 /**
26  * A class to hold parameters that configure the pairwise similarity
27  * calculation. Based on the paper
28  * 
29  * <pre>
30  * Quantification of the variation in percentage identity for protein sequence alignments
31  * Raghava, GP and Barton, GJ
32  * BMC Bioinformatics. 2006 Sep 19;7:415
33  * </pre>
34  * 
35  * @see https://www.ncbi.nlm.nih.gov/pubmed/16984632
36  */
37 public class SimilarityParams implements SimilarityParamsI
38 {
39   /**
40    * Based on Jalview's Comparison.PID method, which includes gaps and counts
41    * them as matching; it counts over the length of the shorter sequence
42    */
43   public static final SimilarityParamsI Jalview = new SimilarityParams(true,
44           true, true, true);
45
46   /**
47    * 'SeqSpace' mode PCA calculation includes gaps but does not count them as
48    * matching; it uses the longest sequence length
49    */
50   public static final SimilarityParamsI SeqSpace = new SimilarityParams(
51           true, false, true, true);
52
53   /**
54    * as described in the Raghava-Barton paper
55    * <ul>
56    * <li>ignores gap-gap</li>
57    * <li>does not score gap-residue</li>
58    * <li>includes gap-residue in lengths</li>
59    * <li>matches on longer of two sequences</li>
60    * </ul>
61    */
62   public static final SimilarityParamsI PID1 = new SimilarityParams(false,
63           false, true, false);
64
65   /**
66    * as described in the Raghava-Barton paper
67    * <ul>
68    * <li>ignores gap-gap</li>
69    * <li>ignores gap-residue</li>
70    * <li>matches on longer of two sequences</li>
71    * </ul>
72    */
73   public static final SimilarityParamsI PID2 = new SimilarityParams(false,
74           false, false, false);
75
76   /**
77    * as described in the Raghava-Barton paper
78    * <ul>
79    * <li>ignores gap-gap</li>
80    * <li>ignores gap-residue</li>
81    * <li>matches on shorter of sequences only</li>
82    * </ul>
83    */
84   public static final SimilarityParamsI PID3 = new SimilarityParams(false,
85           false, false, true);
86
87   /**
88    * as described in the Raghava-Barton paper
89    * <ul>
90    * <li>ignores gap-gap</li>
91    * <li>does not score gap-residue</li>
92    * <li>includes gap-residue in lengths</li>
93    * <li>matches on shorter of sequences only</li>
94    * </ul>
95    */
96   public static final SimilarityParamsI PID4 = new SimilarityParams(false,
97           false, true, true);
98
99   private boolean includeGappedColumns;
100
101   private boolean matchGaps;
102
103   private boolean includeGaps;
104
105   private boolean denominateByShortestLength;
106   
107   private String secondaryStructureSource;
108
109   /**
110    * Constructor
111    * 
112    * @param includeGapGap
113    * @param matchGapResidue
114    * @param includeGapResidue
115    *          if true, gapped positions are counted for normalisation by length
116    * @param shortestLength
117    *          if true, the denominator is the shorter sequence length (possibly
118    *          including gaps)
119    */
120   public SimilarityParams(boolean includeGapGap, boolean matchGapResidue,
121           boolean includeGapResidue, boolean shortestLength)
122   {
123     includeGappedColumns = includeGapGap;
124     matchGaps = matchGapResidue;
125     includeGaps = includeGapResidue;
126     denominateByShortestLength = shortestLength;
127   }
128
129   @Override
130   public boolean includeGaps()
131   {
132     return includeGaps;
133   }
134
135   @Override
136   public boolean denominateByShortestLength()
137   {
138     return denominateByShortestLength;
139   }
140
141   @Override
142   public boolean includeGappedColumns()
143   {
144     return includeGappedColumns;
145   }
146
147   @Override
148   public boolean matchGaps()
149   {
150     return matchGaps;
151   }
152
153   /**
154    * IDE-generated hashCode method
155    */
156   @Override
157   public int hashCode()
158   {
159     final int prime = 31;
160     int result = 1;
161     result = prime * result + (denominateByShortestLength ? 1231 : 1237);
162     result = prime * result + (includeGappedColumns ? 1231 : 1237);
163     result = prime * result + (includeGaps ? 1231 : 1237);
164     result = prime * result + (matchGaps ? 1231 : 1237);
165     return result;
166   }
167
168   /**
169    * IDE-generated equals method
170    */
171   @Override
172   public boolean equals(Object obj)
173   {
174     if (this == obj)
175     {
176       return true;
177     }
178     if (obj == null)
179     {
180       return false;
181     }
182     if (getClass() != obj.getClass())
183     {
184       return false;
185     }
186     SimilarityParams other = (SimilarityParams) obj;
187     if (denominateByShortestLength != other.denominateByShortestLength)
188     {
189       return false;
190     }
191     if (includeGappedColumns != other.includeGappedColumns)
192     {
193       return false;
194     }
195     if (includeGaps != other.includeGaps)
196     {
197       return false;
198     }
199     if (matchGaps != other.matchGaps)
200     {
201       return false;
202     }
203     return true;
204   }
205
206   @Override
207   public String getSecondaryStructureSource()
208   {
209     return secondaryStructureSource;
210   }
211
212   @Override
213   public void setSecondaryStructureSource(String secondaryStructureSource)
214   {
215     this.secondaryStructureSource = secondaryStructureSource;
216   }
217 }