JAL-1551 spotlessApply
[jalview.git] / src / jalview / datamodel / ContactListImpl.java
1 package jalview.datamodel;
2
3 /**
4  * helper class to compute min/max/mean for a range on a contact list
5  * 
6  * @author jprocter
7  *
8  */
9 public class ContactListImpl implements ContactListI
10 {
11   ContactListProviderI clist;
12
13   public static ContactListI newContactList(ContactListProviderI list)
14   {
15     return new ContactListImpl(list);
16   }
17
18   public ContactListImpl(ContactListProviderI list)
19   {
20     clist = list;
21   }
22
23   @Override
24   public int getPosition()
25   {
26     return clist.getPosition();
27   }
28
29   @Override
30   public double getContactAt(int column)
31   {
32     return clist.getContactAt(column);
33   }
34
35   @Override
36   public int getContactHeight()
37   {
38     return clist.getContactHeight();
39   }
40
41   @Override
42   public ContactRange getRangeFor(int from_column, int to_column)
43   {
44     // TODO: consider caching ContactRange for a particular call ?
45     if (clist instanceof ContactListI)
46     {
47       // clist may implement getRangeFor in a more efficient way, so use theirs
48       return ((ContactListI) clist).getRangeFor(from_column, to_column);
49     }
50     if (from_column < 0)
51     {
52       from_column = 0;
53     }
54     if (to_column > getContactHeight())
55     {
56       to_column = getContactHeight();
57     }
58     ContactRange cr = new ContactRange();
59     cr.setFrom_column(from_column);
60     cr.setTo_column(to_column);
61     double tot = 0;
62     for (int i = from_column; i <= to_column; i++)
63     {
64       double contact = getContactAt(i);
65       tot += contact;
66       if (i == from_column)
67       {
68         cr.setMin(contact);
69         cr.setMax(contact);
70         cr.setMinPos(i);
71         cr.setMaxPos(i);
72       }
73       else
74       {
75         if (cr.getMax() < contact)
76         {
77           cr.setMax(contact);
78           cr.setMaxPos(i);
79         }
80         if (cr.getMin() < contact)
81         {
82           cr.setMin(contact);
83           cr.setMinPos(i);
84         }
85       }
86     }
87     if (tot > 0)
88     {
89       cr.setMean(tot / (1 + to_column - from_column));
90     }
91     else
92     {
93       cr.setMean(tot);
94     }
95     return cr;
96   }
97
98 }