src/lib/gff3.c 1.3

1.3 2009/08/12 07:48:05 markd
added initial implementation of gff3ToGenePred converter
Index: src/lib/gff3.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/lib/gff3.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -b -B -U 4 -r1.2 -r1.3
--- src/lib/gff3.c	17 May 2009 15:18:03 -0000	1.2
+++ src/lib/gff3.c	12 Aug 2009 07:48:05 -0000	1.3
@@ -31,8 +31,18 @@
 char *gff3AttrNote = "Note";
 char *gff3AttrDbxref = "Dbxref";
 char *gff3AttrOntologyTerm = "Ontology_term";
 
+/* commonly used features names */
+char *gff3FeatGene = "gene";
+char *gff3FeatMRna = "mRNA";
+char *gff3FeatExon = "exon";
+char *gff3FeatCDS = "CDS";
+char *gff3FeatThreePrimeUTR = "three_prime_UTR";
+char *gff3FeatFivePrimeUTR = "five_prime_UTR";
+char *gff3FeatStartCodon = "start_codon";
+char *gff3FeatStopCodon = "stop_codon";
+
 static void gff3FileErr(struct gff3File *g3f, char *format, ...)
 #if defined(__GNUC__)
 __attribute__((format(printf, 2, 3)))
 #endif
@@ -911,4 +921,27 @@
     writeAnn(g3a, fh);
 writeFastas(g3f, fh);
 carefulClose(&fh);
 }
+
+int gff3AnnRefLocCmp(const void *va, const void *vb)
+/* sort compare function for two gff3AnnRef objects */
+{
+const struct gff3Ann *a = (*((struct gff3AnnRef **)va))->ann;
+const struct gff3Ann *b = (*((struct gff3AnnRef **)vb))->ann;
+int diff = strcmp(a->seqid, b->seqid);
+if ((diff == 0) && (a->strand != b->strand))
+    {
+    // allow for various types of strand fields. above tests handles both null
+    if (a->strand == NULL)
+        diff = 1;
+    else if (b->strand == NULL)
+        diff = -1;
+    else
+        diff = strcmp(a->strand, b->strand);
+    }
+if (diff == 0)
+    diff = a->start - b->start;
+if (diff == 0)
+    diff = a->end - b->end;
+return diff;
+}