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;
+}