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