JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / fr / orsay / lri / varna / applications / fragseq / FragSeqAnnotationDataModel.java
1 package fr.orsay.lri.varna.applications.fragseq;
2
3 import java.awt.Color;
4 import java.awt.datatransfer.DataFlavor;
5 import java.util.Hashtable;
6 import java.util.Random;
7
8 import fr.orsay.lri.varna.models.annotations.ChemProbAnnotation;
9 import fr.orsay.lri.varna.models.annotations.ChemProbAnnotation.ChemProbAnnotationType;
10 import fr.orsay.lri.varna.models.rna.ModeleBase;
11 import fr.orsay.lri.varna.models.rna.RNA;
12
13 public class FragSeqAnnotationDataModel extends FragSeqModel {
14   private String _id;
15   private String _name;
16   private Hashtable<Integer, ChemProbModel> _values = new Hashtable<Integer, ChemProbModel>();  
17   
18   
19   public FragSeqAnnotationDataModel(String id, String name)
20   {
21         _id = id;
22         _name = name;
23   }
24
25   public FragSeqAnnotationDataModel()
26   {
27         this(Long.toHexString(Double.doubleToLongBits(Math.random())),Long.toHexString(Double.doubleToLongBits(Math.random())));
28   }
29
30   public void addValue(ChemProbModel cpm)
31   {
32           _values.put(cpm._baseNumber1,cpm);
33   }
34
35   static Random _rnd = new Random();
36   
37   public static void addRandomAnnotations(RNA r,FragSeqAnnotationDataModel data){
38           int nb = r.getSize()/5+_rnd.nextInt(r.getSize()/3);
39           Color[] colors = {Color.orange,Color.black,Color.blue.darker(),Color.green.darker(), Color.gray};
40           ChemProbAnnotationType[] types  = ChemProbAnnotationType.values();
41           for(int i=0;i<nb;i++)
42           {
43                   int index = _rnd.nextInt(r.getSize()-1);
44                   int number1 = r.getBaseNumber(index);
45                   int number2 = r.getBaseNumber(index+1);
46                   ChemProbModel cpm = data.new ChemProbModel(number1,number2,colors[_rnd.nextInt(colors.length)],2*_rnd.nextDouble(),types[_rnd.nextInt(types.length)],true);
47                   data.addValue(cpm);
48           }
49   }
50
51   
52   public String toString()
53   {
54           return _name;
55   }
56   
57   public String getID()
58   {
59           return _id;
60   }
61
62   public void applyTo(RNA r)
63   {
64         r.clearChemProbAnnotations();
65         for (ChemProbModel c : _values.values())
66         {
67                 c.applyTo(r);
68         }
69   }
70
71   
72   public class ChemProbModel
73   {
74                 private Color _color;
75                 private double _intensity;
76                 private ChemProbAnnotationType _type;
77                 private boolean _out;
78                 private int _baseNumber1;
79                 private int _baseNumber2;
80                 
81                 public ChemProbModel (int baseNumber1,int baseNumber2, Color color, double intensity, ChemProbAnnotationType type, boolean out)
82                 {
83                         _color= color;
84                         _intensity = intensity;
85                         _type= type;
86                         _out= out;
87                         _baseNumber1 = baseNumber1;
88                         _baseNumber2 = baseNumber2;
89                 }
90
91                 public void applyTo(RNA r)
92                 {
93                         System.out.println(this);
94                         int i = r.getIndexFromBaseNumber(_baseNumber1);
95                         int j = r.getIndexFromBaseNumber(_baseNumber2);
96                         if (i!=-1 && j!=-1)
97                         {
98                                 ModeleBase mb1 = r.getBaseAt(i);
99                                 ModeleBase mb2 = r.getBaseAt(j);
100                                 r.addChemProbAnnotation(new ChemProbAnnotation(mb1, mb2, _type, _intensity,_color, _out));
101                         }
102                 }
103                 
104                 public String toString()
105                 {
106                         return ""+_baseNumber1+": col="+_color+" int="+_intensity+" type="+_type+" out="+_out;
107                 }
108   }
109   
110   public static DataFlavor Flavor = new DataFlavor(FragSeqAnnotationDataModel.class, "RNA Chem Prob Data");
111
112 }