JAL-1483 organise imports
[jalview.git] / src / jalview / analysis / scoremodels / FeatureScoreModel.java
1 package jalview.analysis.scoremodels;
2
3 import jalview.api.analysis.ScoreModelI;
4 import jalview.api.analysis.ViewBasedAnalysisI;
5 import jalview.datamodel.AlignmentView;
6 import jalview.datamodel.SequenceFeature;
7 import jalview.datamodel.SequenceI;
8 import jalview.util.Comparison;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.Hashtable;
13 import java.util.List;
14
15 public class FeatureScoreModel implements ScoreModelI, ViewBasedAnalysisI
16 {
17   jalview.api.FeatureRenderer fr;
18
19   @Override
20   public boolean configureFromAlignmentView(
21           jalview.api.AlignmentViewPanel view)
22   {
23     fr = view.cloneFeatureRenderer();
24     return true;
25   }
26
27   @Override
28   public float[][] findDistances(AlignmentView seqData)
29   {
30
31     SequenceI[] sequenceString = seqData.getVisibleAlignment(
32             Comparison.GapChars.charAt(0)).getSequencesArray();
33     int noseqs = sequenceString.length;
34     int cpwidth = seqData.getWidth();
35     float[][] distance = new float[noseqs][noseqs];
36     float max = 0;
37     for (int cpos = 0; cpos < cpwidth; cpos++)
38     {
39       // get visible features at cpos under view's display settings and compare
40       // them
41       for (int i = 0; i < (noseqs - 1); i++)
42       {
43         List<SequenceFeature> sf = fr.findFeaturesAtRes(sequenceString[i],
44                 cpos);
45         for (int j = i + 1; j < noseqs; j++)
46         {
47           List<SequenceFeature> jsf = fr.findFeaturesAtRes(
48                   sequenceString[i], cpos);
49           // compare the two lists of features...
50
51           if (max < distance[i][j])
52           {
53             max = distance[i][j];
54           }
55         }
56       }
57     }
58
59     for (int i = 0; i < (noseqs - 1); i++)
60     {
61       for (int j = i; j < noseqs; j++)
62       {
63         distance[i][j] = max - distance[i][j];
64         distance[j][i] = distance[i][j];
65       }
66     }
67
68     return distance;
69   }
70
71   @Override
72   public String getName()
73   {
74     return "Smith Waterman Score";
75   }
76
77   @Override
78   public boolean isDNA()
79   {
80     return true;
81   }
82
83   @Override
84   public boolean isProtein()
85   {
86     return true;
87   }
88
89   public String toString()
90   {
91     return "Score between two sequences aligned with Smith Waterman with default Peptide/Nucleotide matrix";
92   }
93 }