src/hg/mouseStuff/mafToFa/mafToFa.c 1.1

1.1 2009/03/28 20:48:10 mikep
utility to convert maf to fasta
Index: src/hg/mouseStuff/mafToFa/mafToFa.c
===================================================================
RCS file: src/hg/mouseStuff/mafToFa/mafToFa.c
diff -N src/hg/mouseStuff/mafToFa/mafToFa.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/hg/mouseStuff/mafToFa/mafToFa.c	28 Mar 2009 20:48:10 -0000	1.1
@@ -0,0 +1,78 @@
+/* mafToFa - convert maf file to fasta. */
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "maf.h"
+#include "options.h"
+
+static char const rcsid[] = "$Id$";
+
+void usage()
+/* Explain usage and exit. */
+{
+errAbort(
+  "mafToFa - convert maf file to fasta\n"
+  "usage:\n"
+  "   mafToFa in.maf out.fa\n"
+  "options:\n"
+  "   -xxx=XXX\n"
+  );
+}
+
+static struct optionSpec options[] = {
+   {NULL, 0},
+};
+
+char *skipDot(char *src)
+/* skip past dot in src name */
+{
+char *dot = strchr(src, '.');
+if (dot == NULL)
+    return src;
+else
+    return dot+1;
+}
+
+
+void mafAliToFa(struct mafAli *maf, FILE *pslFh)
+/* convert a MAF alignment to a fa */
+{
+struct mafComp *c;
+for (c = maf->components ; c ; c = c->next )
+    {
+    int start = c->start;
+    int end   = c->start+c->size;
+    reverseIntRange(&start, &end, c->srcSize);
+    fprintf(pslFh, ">%s.%d.%d.%c.%d\n%s\n", c->src, start, end, c->strand, c->srcSize, c->text);
+    }
+fprintf(pslFh,"\n");
+}
+
+void mafToFa(char *inName, char *outName)
+/* mafToFa - convert maf file to fasta. */
+{
+struct mafFile *mf = mafOpen(inName);
+FILE *faFh = mustOpen(outName, "w");
+struct mafAli *maf;
+
+while ((maf = mafNext(mf)) != NULL)
+    {
+    mafAliToFa(maf, faFh);
+    mafAliFree(&maf);
+    }
+carefulClose(&faFh);
+mafFileFree(&mf);
+}
+
+int main(int argc, char *argv[])
+/* Process command line. */
+{
+optionInit(&argc, argv, options);
+++argv;
+--argc;
+if (argc != 2)
+    usage();
+mafToFa(argv[0], argv[1]);
+return 0;
+}
+