From b2a78f42aab54864bb6e65d7f7aff4f8fffe8357 Mon Sep 17 00:00:00 2001
From: tcarver <tjc>
Date: Tue, 5 Nov 2013 14:35:13 +0000
Subject: [PATCH] test for selenocysteine qualifier

---
 uk/ac/sanger/artemis/io/GFFStreamFeature.java | 30 +++++++++++++++++++
 uk/ac/sanger/artemis/io/ValidateFeature.java  |  3 ++
 2 files changed, 33 insertions(+)

diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java
index 9fa2cc0cf..3d4923b22 100644
--- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java
+++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.java
@@ -1320,6 +1320,36 @@ public class GFFStreamFeature extends SimpleDocumentFeature
     return false;
   }
   
+  /**
+   * Test if this is feature is marked as having a stop codon
+   * redefined as selenocysteine
+   * @param f
+   * @return
+   */
+  public static boolean isSelenocysteine(Feature f)
+  {
+    if(!(f instanceof GFFStreamFeature))
+      return false;
+    try
+    {
+      ChadoCanonicalGene gffGene = ((GFFStreamFeature)f).getChadoGene();
+      if(gffGene == null)
+        return false;
+      String transcript = gffGene.getTranscriptFromName(
+          GeneUtils.getUniqueName(f));
+      if(transcript == null)
+        return false;
+      Feature pep = gffGene.getProteinOfTranscript(transcript);
+      if(pep == null)
+        return false;
+      if(pep.getQualifierByName("stop_codon_redefined_as_selenocysteine") != null)
+        return true;
+    }
+    catch (Exception e){}
+
+    return false;
+  }
+  
   public static void main(String args[])
   {
     Key key = new Key("region");
diff --git a/uk/ac/sanger/artemis/io/ValidateFeature.java b/uk/ac/sanger/artemis/io/ValidateFeature.java
index d1dc8836d..f62ed79db 100644
--- a/uk/ac/sanger/artemis/io/ValidateFeature.java
+++ b/uk/ac/sanger/artemis/io/ValidateFeature.java
@@ -677,6 +677,9 @@ public class ValidateFeature
     if(!cds_predicate.testPredicate (f)) 
       return false;
 
+    if(feature instanceof GFFStreamFeature && GFFStreamFeature.isSelenocysteine(feature))
+      return false;
+
     final AminoAcidSequence aa = f.getTranslation ();
     return aa.containsStopCodon ();
   }
-- 
GitLab