JAL-2189 apply license
[jalview.git] / src / jalview / io / gff / SequenceOntologyLite.java
index c0ae971..f989f7b 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.io.gff;
 
 import java.util.ArrayList;
@@ -22,6 +42,9 @@ public class SequenceOntologyLite implements SequenceOntologyI
 {
   /*
    * initial selection of types of interest when processing Ensembl features
+   * NB unlike the full SequenceOntology we don't traverse indirect
+   * child-parent relationships here so e.g. need to list every sub-type
+   * of gene (direct or indirect) that is of interest
    */
   // @formatter:off
   private final String[][] TERMS = new String[][] {
@@ -32,15 +55,24 @@ public class SequenceOntologyLite implements SequenceOntologyI
     { "gene", "gene" }, 
     { "ncRNA_gene", "gene" }, 
     { "snRNA_gene", "gene" },
+    { "miRNA_gene", "gene" },
+    { "lincRNA_gene", "gene" },
+    { "rRNA_gene", "gene" },
     
     /*
      * transcript sub-types:
      */
     { "transcript", "transcript" }, 
     { "mature_transcript", "transcript" }, 
+    { "processed_transcript", "transcript" }, 
+    { "aberrant_processed_transcript", "transcript" },
     { "ncRNA", "transcript" },
     { "snRNA", "transcript" },
-    { "aberrant_processed_transcript", "transcript" },
+    { "miRNA", "transcript" },
+    { "lincRNA", "transcript" },
+    { "rRNA", "transcript" },
+    { "mRNA", "transcript" },
+    // there are many more sub-types of ncRNA...
     
     /*
      * sequence_variant sub-types:
@@ -55,8 +87,8 @@ public class SequenceOntologyLite implements SequenceOntologyI
     { "structural_variant", "sequence_variant" },
     
     /*
-     * no sub-types of exon or CDS encountered in Ensembl
-     * a few added here for testing purposes
+     * no sub-types of exon or CDS yet seen in Ensembl
+     * some added here for testing purposes
      */
     { "exon", "exon" },
     { "coding_exon", "exon" },
@@ -64,10 +96,11 @@ public class SequenceOntologyLite implements SequenceOntologyI
     { "CDS_predicted", "CDS" },
     
     /*
-     * used in exonerate GFF
+     * terms used in exonerate or PASA GFF
      */
     { "protein_match", "protein_match"},
     { "nucleotide_match", "nucleotide_match"},
+    { "cDNA_match", "nucleotide_match"},
     
     /*
      * used in InterProScan GFF
@@ -99,7 +132,8 @@ public class SequenceOntologyLite implements SequenceOntologyI
   private void loadStaticData()
   {
     parents = new HashMap<String, List<String>>();
-    for (String [] pair : TERMS) {
+    for (String[] pair : TERMS)
+    {
       List<String> p = parents.get(pair[0]);
       if (p == null)
       {
@@ -168,9 +202,11 @@ public class SequenceOntologyLite implements SequenceOntologyI
     {
       if (!termsNotFound.contains(term))
       {
-        System.out.println("SO term " + term
-                + " not known - either invalid or needs modelled in "
-                + getClass().getName());
+        // suppress logging here as it reports Uniprot sequence features
+        // (which do not use SO terms) when auto-configuring feature colours
+        // System.out.println("SO term " + term
+        // + " not known - add to model if needed in "
+        // + getClass().getName());
         termsNotFound.add(term);
       }
     }