src/hg/makeDb/hgRgdParsePathwayObo/hgRgdParsePathwayObo.c 1.1

1.1 2010/02/20 00:59:22 fanhsu
Created hgRgdParsePathwayObo.c
Index: src/hg/makeDb/hgRgdParsePathwayObo/hgRgdParsePathwayObo.c
===================================================================
RCS file: src/hg/makeDb/hgRgdParsePathwayObo/hgRgdParsePathwayObo.c
diff -N src/hg/makeDb/hgRgdParsePathwayObo/hgRgdParsePathwayObo.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/hg/makeDb/hgRgdParsePathwayObo/hgRgdParsePathwayObo.c	20 Feb 2010 00:59:22 -0000	1.1
@@ -0,0 +1,125 @@
+/* hgRgdParsePathwayObo - Create a relational database out of RGD pathway .obo file. */
+#include "common.h"
+#include "linefile.h"
+#include "portable.h"
+#include "obscure.h"
+
+static char const rcsid[] = "$Id$";
+
+void usage()
+/* Explain usage and exit. */
+{
+errAbort(
+  "hgRgdParsePathwayObo - Parse RGD pathway .obo file\n"
+  "usage:\n"
+  "   hgRgdParsePathwayObo pathway.obo\n"
+  );
+}
+
+char *line;
+int lineSize;
+
+FILE *namef;
+FILE *deff;
+FILE *is_af;
+
+FILE *createAt(char *file)
+/* Open file */
+{
+char path[PATH_LEN];
+safef(path, sizeof(path), "%s", file);
+return mustOpen(path, "w");
+}
+
+void pathwayRecordNext(struct lineFile *lf)
+{
+char emptyString[2] = {""};
+
+char *chp;
+char *pathwayId;
+char *name = NULL;
+char *def, *comment;
+char *is_a;
+
+while (!strstr(line, "[Term]"))
+    {
+    if (!lineFileNext(lf, &line, &lineSize)) exit(1);
+    }
+
+lineFileNext(lf, &line, &lineSize);
+chp = strstr(line, "id: ");
+chp = chp + strlen("id: ");
+pathwayId = strdup(chp);
+
+lineFileNext(lf, &line, &lineSize);
+if (strstr(line, "name: ") != NULL)
+    {
+    chp = strstr(line, "name: ");
+    chp = chp + strlen("name: ");
+    name= strdup(chp);
+    if (strstr(pathwayId, "PW:") != NULL) fprintf(namef, "%s\t%s\n", pathwayId, name);fflush(namef);
+    }
+else
+    {
+    errAbort("name: expected");
+    }
+
+def     = emptyString;
+comment = emptyString;
+
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (strstr(line, "[Term]") != NULL)break;
+
+    if (strstr(line, "def: ") != NULL)
+    	{
+    	chp = strstr(line, "def: ");
+    	chp = chp + strlen("def: ") + 1;
+    	def = strdup(chp);
+    	chp = def + strlen(def);
+    	*chp = '\0';
+    	if (strstr(pathwayId, "PW:") != NULL) fprintf(deff, "%s\t%s\t%s\n", pathwayId, name, def);fflush(deff);
+    	}		
+    else
+    	{
+    	if (strstr(line, "is_a: ") != NULL) 
+    	    {
+            chp = strstr(line, "is_a: ");
+    	    chp = chp + strlen("is_a: ");
+	    is_a = strdup(chp);
+            chp = strstr(is_a, " !");
+	    *chp = '\0';
+	    if (strstr(pathwayId, "PW:") != NULL) fprintf(is_af, "%s\t%s\n", pathwayId, is_a);fflush(is_af);
+            }  
+    	}	
+    }
+}
+
+void hgRgdParsePathwayObo(char *datFile)
+/* hgRgdParsePathwayObo - Create a relational database out of .obo pathway file. */
+{
+struct lineFile *lf = lineFileOpen(datFile, TRUE);
+
+namef = createAt("rgdPathway.tab");
+deff  = createAt("rgdPathwayDef.tab");
+is_af = createAt("rgdPathway_isa.tab");
+
+lineFileNext(lf, &line, &lineSize);
+for (;;)
+    {
+    pathwayRecordNext(lf);
+    }
+
+carefulClose(&namef);
+carefulClose(&deff);
+carefulClose(&is_af);
+}
+
+int main(int argc, char *argv[])
+/* Process command line. */
+{
+if (argc != 2)
+    usage();
+hgRgdParsePathwayObo(argv[1]);
+return 0;
+}