JAL-1828 lookup table to convert MSE to MET when parsing PDB data
[jalview.git] / src / jalview / schemes / ResidueProperties.java
index 662a77e..209fe12 100755 (executable)
  */
 package jalview.schemes;
 
+import jalview.analysis.scoremodels.FeatureScoreModel;
+import jalview.analysis.scoremodels.PIDScoreModel;
+import jalview.api.analysis.ScoreModelI;
+
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.Enumeration;
@@ -29,10 +33,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
-import jalview.analysis.scoremodels.FeatureScoreModel;
-import jalview.analysis.scoremodels.PIDScoreModel;
-import jalview.api.analysis.ScoreModelI;
-
 public class ResidueProperties
 {
   public static Hashtable<String, ScoreModelI> scoreMatrices = new Hashtable();
@@ -50,6 +50,9 @@ public class ResidueProperties
 
   public static final Map<String, String> nucleotideName = new HashMap<String, String>();
 
+  // lookup from modified amino acid (e.g. MSE) to canonical form (e.g. MET)
+  public static final Map<String, String> modifications = new HashMap<String, String>();
+
   static
   {
     aaIndex = new int[255];
@@ -1703,6 +1706,26 @@ public class ResidueProperties
     }
   }
 
+  static
+  {
+    modifications.put("MSE", "MET"); // Selenomethionine
+    // the rest tbc; from
+    // http://sourceforge.net/p/jmol/mailman/message/12833570/
+    // modifications.put("CSE", "CYS"); // Selenocysteine
+    // modifications.put("PTR", "TYR"); // Phosphotyrosine
+    // modifications.put("SEP", "SER"); // Phosphoserine
+    // modifications.put("HYP", "PRO"); // 4-hydroxyproline
+    // modifications.put("5HP", "GLU"); // Pyroglutamic acid; 5-hydroxyproline
+    // modifications.put("PCA", "GLU"); // Pyroglutamic acid
+    // modifications.put("LYZ", "LYS"); // 5-hydroxylysine
+  }
+
+  public static String getCanonicalAminoAcid(String aa)
+  {
+    String canonical = modifications.get(aa);
+    return canonical == null ? aa : canonical;
+  }
+
   /**
    * translate to RNA secondary structure representation
    * 
@@ -1835,4 +1858,21 @@ public class ResidueProperties
     return result;
   }
 
+  /**
+   * Returns the single letter code for a three letter code, or '0' if not known
+   * 
+   * @param threeLetterCode
+   *          not case sensitive
+   * @return
+   */
+  public static char getSingleCharacterCode(String threeLetterCode)
+  {
+    if (threeLetterCode == null)
+    {
+      return '0';
+    }
+    Integer index = ResidueProperties.aa3Hash.get(threeLetterCode
+            .toUpperCase());
+    return index == null ? '0' : aa[index].charAt(0);
+  }
 }