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