JAL-2349 allow PAE or other contact matrices to hold a coordinate mapping allowing...
[jalview.git] / src / jalview / datamodel / SeqDistanceContactMatrix.java
1 package jalview.datamodel;
2
3 import java.awt.Color;
4 import java.util.BitSet;
5 import java.util.HashMap;
6 import java.util.List;
7
8 import jalview.util.MapList;
9 import jalview.ws.datamodel.alphafold.MappableContactMatrix;
10
11 /**
12  * Dummy contact matrix based on sequence distance
13  * 
14  * @author jprocter
15  *
16  */
17 public class SeqDistanceContactMatrix extends MappableContactMatrix<SeqDistanceContactMatrix> implements ContactMatrixI
18 {
19   private static final String SEQUENCE_DISTANCE = "SEQUENCE_DISTANCE";
20   private int width = 0;
21
22   public SeqDistanceContactMatrix(int width)
23   {
24     this.width = width;
25   }
26
27   @Override
28   public float getMin()
29   {
30     return 0f;
31   }
32
33   @Override
34   public float getMax()
35   {
36     return width;
37   }
38
39   @Override
40   public ContactListI getContactList(final int column)
41   {
42     if (column < 0 || column >= width)
43     {
44       return null;
45     }
46     return new ContactListImpl(new ContactListProviderI()
47     {
48
49       int p = column;
50
51       // @Override
52       // public Color getColorForScore(int column)
53       // {
54       // return jalview.util.ColorUtils.getGraduatedColour(Math.abs(column-p),
55       // 0, Color.white, width, Color.magenta);
56       // }
57       // @Override
58       // public Color getColorForRange(int from_column, int to_column)
59       // {
60       // return jalview.util.ColorUtils.getGraduatedColour(
61       // Math.abs(to_column + from_column - 2 * p) / 2, 0, Color.white, width,
62       // Color.magenta);
63       // }
64
65       @Override
66       public int getContactHeight()
67       {
68         return width;
69
70       }
71
72       @Override
73       public int getPosition()
74       {
75         return p;
76       }
77
78       @Override
79       public double getContactAt(int column)
80       {
81         return Math.abs(column - p);
82       }
83     });
84   }
85   @Override
86   public String getAnnotDescr()
87   {
88     return "Sequence distance matrix";
89   }
90
91   @Override
92   public String getAnnotLabel()
93   {
94     return "Sequence Distance";
95   }
96
97   @Override
98   public String getType()
99   {
100     return SEQUENCE_DISTANCE;
101   }
102
103   @Override
104   public int getWidth()
105   {
106     return width;
107   }
108
109   @Override
110   public int getHeight()
111   {
112     return width;
113   }
114   private List<BitSet> groups=null;
115   @Override
116   public void updateGroups(List<BitSet> colGroups)
117   {
118     groups = colGroups;
119   }
120   @Override
121   public boolean hasGroups()
122   {
123     return groups!=null;
124   }
125   @Override
126   public List<BitSet> getGroups()
127   {
128     return groups;
129   }  
130
131   HashMap<BitSet,Color> colorMap = new HashMap<>();
132   @Override 
133   public Color getColourForGroup(BitSet bs)
134   {
135     if (bs==null) {
136       return Color.white;
137     }
138     Color groupCol=colorMap.get(bs);
139     if (groupCol==null)
140     {
141       return Color.white;
142     }
143     return groupCol;
144   }
145   @Override 
146   public void setColorForGroup(BitSet bs,Color color)
147   {
148     colorMap.put(bs,color);
149   }
150   @Override
151   protected double getElementAt(int _column, int i)
152   {
153     return Math.abs(_column-i);
154   }
155
156   @Override
157   protected SeqDistanceContactMatrix newMappableContactMatrix(
158           SequenceI newRefSeq, MapList newFromMapList)
159   {
160     
161     return new SeqDistanceContactMatrix(width);
162   }
163 }