JAL-1632 first cut of Tree chooser dialog and ScoreModels singleton
[jalview.git] / src / jalview / analysis / scoremodels / ScoreModels.java
1 package jalview.analysis.scoremodels;
2
3 import jalview.api.analysis.ScoreModelI;
4 import jalview.schemes.ResidueProperties;
5
6 import java.util.Map;
7 import java.util.TreeMap;
8
9 /**
10  * A class that can register and serve instances of ScoreModelI
11  */
12 public class ScoreModels
13 {
14   private static ScoreModels instance = new ScoreModels();
15
16   private Map<String, ScoreModelI> models;
17
18   public static ScoreModels getInstance()
19   {
20     return instance;
21   }
22
23   /**
24    * Private constructor to enforce use of singleton. Registers Jalview's
25    * "built-in" score models:
26    * <ul>
27    * <li>BLOSUM62</li>
28    * <li>PAM250</li>
29    * <li>DNA</li>
30    * <li>Sequence Feature Similarity</li>
31    * <li>Percentage Identity</li>
32    * </ul>
33    */
34   private ScoreModels()
35   {
36     /*
37      * using TreeMap keeps models ordered alphabetically by name
38      */
39     models = new TreeMap<String, ScoreModelI>(String.CASE_INSENSITIVE_ORDER);
40     registerScoreModel(new ScoreMatrix("BLOSUM62",
41             ResidueProperties.BLOSUM62, 0));
42     registerScoreModel(new ScoreMatrix("PAM250", ResidueProperties.PAM250,
43             0));
44     registerScoreModel(new ScoreMatrix("DNA", ResidueProperties.DNA, 1));
45     registerScoreModel(new FeatureScoreModel());
46     registerScoreModel(new PIDScoreModel());
47   }
48
49   public Iterable<String> getModelNames()
50   {
51     return models.keySet();
52   }
53
54   public ScoreModelI forName(String s)
55   {
56     return models.get(s);
57   }
58
59   public void registerScoreModel(ScoreModelI sm)
60   {
61     ScoreModelI sm2 = models.get(sm.getName());
62     if (sm2 != null)
63     {
64       System.err.println("Warning: replacing score model " + sm2.getName());
65     }
66     models.put(sm.getName(), sm);
67   }
68 }