From 7d37107bc146f68cd5d12ead18efd3fcf7b75acd Mon Sep 17 00:00:00 2001 From: gv1 <gv1@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Thu, 13 Aug 2009 14:24:12 +0000 Subject: [PATCH] added translation for polypeptide features (with Tim's help!) git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@11533 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- uk/ac/sanger/artemis/io/GFFStreamFeature.java | 94 +++++++++++++++++-- 1 file changed, 84 insertions(+), 10 deletions(-) diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java index 12004f71e..1072cb558 100644 --- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java +++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.java @@ -20,15 +20,19 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/GFFStreamFeature.java,v 1.68 2009-07-21 17:25:42 gv1 Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/GFFStreamFeature.java,v 1.69 2009-08-13 14:24:12 gv1 Exp $ */ package uk.ac.sanger.artemis.io; + + + import java.util.Hashtable; import java.util.Enumeration; import java.util.List; + import java.util.StringTokenizer; import java.util.Vector; import java.io.IOException; @@ -38,6 +42,7 @@ import java.text.SimpleDateFormat; import uk.ac.sanger.artemis.Options; import uk.ac.sanger.artemis.chado.ClusterLazyQualifierValue; +import uk.ac.sanger.artemis.components.genebuilder.GeneUtils; import uk.ac.sanger.artemis.components.genebuilder.ProteinMapPanel; import uk.ac.sanger.artemis.components.genebuilder.ortholog.MatchPanel; import uk.ac.sanger.artemis.util.LinePushBackReader; @@ -50,7 +55,7 @@ import uk.ac.sanger.artemis.util.StringVector; * A StreamFeature that thinks it is a GFF feature. * * @author Kim Rutherford - * @version $Id: GFFStreamFeature.java,v 1.68 2009-07-21 17:25:42 gv1 Exp $ + * @version $Id: GFFStreamFeature.java,v 1.69 2009-08-13 14:24:12 gv1 Exp $ **/ public class GFFStreamFeature extends SimpleDocumentFeature @@ -93,6 +98,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature private org.gmod.schema.sequence.Feature chadoLazyFeature; private boolean readOnlyFeature = false; + private static String MAP_DECODE[][] = { { " ", "%20" }, // white space @@ -188,6 +194,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature public GFFStreamFeature(final Feature feature) { this(feature, false); + } /** @@ -200,6 +207,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature { this(feature.getKey(), feature.getLocation(), feature.getQualifiers()); + + if(feature instanceof GFFStreamFeature) { if(((GFFStreamFeature)feature).id_range_store != null) @@ -280,6 +289,9 @@ public class GFFStreamFeature extends SimpleDocumentFeature } catch(ReadOnlyException e){} catch(EntryInformationException e){} + } else + { + chadoGene = ((GFFStreamFeature)feature).chadoGene; } } } @@ -727,6 +739,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature } protected static Hashtable contig_ranges; + private Range this_range; + private String frame; /** * Write this Feature to the given stream. @@ -739,12 +753,12 @@ public class GFFStreamFeature extends SimpleDocumentFeature { final RangeVector ranges = getLocation().getRanges(); final int ranges_size = ranges.size(); - -// final Hashtable contig_ranges = SimpleDocumentEntry.getContigRanges(); + + // final Hashtable contig_ranges = SimpleDocumentEntry.getContigRanges(); for(int i = 0; i < ranges_size; ++i) { - Range this_range = (Range)ranges.elementAt(i); + this_range = (Range)ranges.elementAt(i); String seqname = getGffSeqName(); String source = getGffSource(); @@ -790,7 +804,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature group = gene; } - String frame = "."; + frame = "."; final Qualifier codon_start = getQualifierByName("codon_start"); @@ -876,6 +890,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature "Derives_from", "Target", "Gap", "Note", "Dbxref", "Ontology_term" }; + + int count = 0; Qualifier this_qualifier; final int names_length = names.length; @@ -894,9 +910,16 @@ public class GFFStreamFeature extends SimpleDocumentFeature if(this_qualifier == null) continue; + if(this_qualifier.getValues().toString().length() <= 2) + continue; + // GSV :: see new getQualifierString signature // this qualifier is one of the reserved qualifiers final String this_qualifier_str = getQualifierString(this_qualifier, true); + + if (this_qualifier_str.length() == 0) + continue; + if(this_qualifier_str == null) continue; @@ -906,12 +929,14 @@ public class GFFStreamFeature extends SimpleDocumentFeature count++; } + addTranslation(); + boolean lname; final int qualifiers_size = qualifiers.size(); for(int i = 0; i < qualifiers_size; i++) { this_qualifier = (Qualifier)qualifiers.elementAt(i); - + lname = false; for(int j=0; j<names_length; j++) if(this_qualifier.getName().equals(names[j])) @@ -921,7 +946,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature continue; // GSV :: see new getQualifierString signature - // this qualifier is NOT one of the reserved qualifiers + // this qualifier is NOT one of the reserved qualifiers String this_qualifier_str = getQualifierString(this_qualifier, false); if(this_qualifier_str == null) @@ -934,7 +959,56 @@ public class GFFStreamFeature extends SimpleDocumentFeature return buffer.toString(); } - + + + /* + * + * Adds translations to polypeptide features. + */ + private void addTranslation() + { + if (! getKey().getKeyString().equals("polypeptide")) + return; + + ChadoCanonicalGene ccg = this.chadoGene; + + String id = this.getQualifierByName("ID").getValues().toString() ; + if (ccg != null) + { + @SuppressWarnings("unused") + uk.ac.sanger.artemis.Feature f = new uk.ac.sanger.artemis.Feature(this); + // the above line constructs the appropriate userData within this current GFFStreamFeature object, + // which is required by the following GeneUtils.deriveResidues() + + String residues = GeneUtils.deriveResidues(this); + if (residues != null) + { + Qualifier translation = new Qualifier("translation"); + translation.addValue(residues); + try { + setQualifier(translation); + } catch (Exception e) { + UI.warn(e.getMessage(), e.getClass().toString()); + } + } else + { + UI.warn(id + " has no translatable residues, is pseudogene? " + ccg.getGene().getKey().getKeyString(), "empty residues"); + } + } else + { + UI.warn(id + " has no ChadoCanonicalGene ", "no canonical gene"); + + Qualifier comment = new Qualifier("autogenerated_comment"); + comment.addValue( "this polypeptide has no parent gene associated, probably unknown transcript" ); + try { + setQualifier(comment); + } catch (Exception e) { + UI.warn(e.getMessage(), e.getClass().toString()); + } + } + } + + /** * Used to write out the GFF attributes. * @param q the qualifier to represent as a <code>String</code> @@ -970,7 +1044,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature */ String nameToBuffer = encode(name); if (! reserved) - nameToBuffer = Character.toLowerCase(nameToBuffer.charAt(0)) + nameToBuffer.substring(1); + nameToBuffer = nameToBuffer.toLowerCase(); //Character.toLowerCase(nameToBuffer.charAt(0)) + nameToBuffer.substring(1); buffer.append(nameToBuffer); if(values != null) -- GitLab