src/hg/hgGenome/import.c 1.15

1.15 2009/10/06 00:47:48 galt
adding work-around to genome graphs import for bedgraph customtracks, also some elimination of unneeded connection variable
Index: src/hg/hgGenome/import.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgGenome/import.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -b -B -U 4 -r1.14 -r1.15
--- src/hg/hgGenome/import.c	6 Apr 2009 05:31:18 -0000	1.14
+++ src/hg/hgGenome/import.c	6 Oct 2009 00:47:48 -0000	1.15
@@ -1189,9 +1189,9 @@
 return dyStringCannibalize(&dy);
 
 }
 
-char *makeCoverageCgFromBed(struct sqlConnection *conn)
+char *makeCoverageCgFromBed()
 /* create coverage chromGraph from bed data */
 {
 struct dyString *dy = dyStringNew(0);
 char *chrom = "";
@@ -1254,9 +1254,9 @@
 return dyStringCannibalize(&dy);
 }
 
 
-char *makeDepthCgFromBed(struct sqlConnection *conn, boolean isBedGr)
+char *makeDepthCgFromBed(boolean isBedGr, boolean isCt)
 /* create depth chromGraph from bed, bedGraph, or Maf data */
 {
 struct dyString *dy = dyStringNew(0);
 char *chrom = "";
@@ -1280,13 +1280,11 @@
 	continue;
     
     chromSize = hChromSize(database, chrom);
 
-    //debug
-    //hPrintf("chrom %s size=%d numFeatures=%d<br>\n", chrom, chromSize, slCount(bedList)); fflush(stdout);
-    
     numWindows = ((chromSize+windowSize-1)/windowSize);
 
+
     if (numWindows>0)
 	depth = needMem(numWindows*sizeof(double));
     for(bed=bedList;bed;bed=bed->next)
 	{
@@ -1292,14 +1290,28 @@
 	{
 	int i;
 	int start = bed->chromStart;
 	int end = bed->chromEnd;
+
 	for(i = start/windowSize; i*windowSize < end; ++i)
 	    {
+
 	    overlap = rangeIntersection(start, end, i*windowSize, (i+1)*windowSize);
+
 	    if (overlap > 0)
 		{
-		if (isBedGr)
+
+                // FINDING: just as in hgTables dump on bedGraph custom track,
+                //  the float value is being stored in the name field as a string.
+                //  However for a regular bedGraph, it is stored in expScores[0] 
+                //  probably just so that it can store it as a float. strange.
+
+		if (isBedGr && isCt)
+		    {
+		    float val = atof(bed->name);
+		    depth[i] += ((((double)overlap)/windowSize)*val);
+		    }
+		else if (isBedGr)
 		    depth[i] += ((((double)overlap)/windowSize)*bed->expScores[0]);
 		else
     		    depth[i] += ((double)overlap)/windowSize;
 		}
@@ -1322,9 +1334,9 @@
 return dyStringCannibalize(&dy);
 }
 
 
-char *makeAverageCgFromWiggle(struct sqlConnection *conn)
+char *makeAverageCgFromWiggle()
 /* use averaging to create chromGraph from wig ascii data */
 {
 struct dyString *dy = dyStringNew(0);
 char *chrom = "";
@@ -1411,20 +1423,16 @@
 void submitImport(struct sqlConnection *conn)
 /* Called when they've submitted from import page */
 {
 boolean isWig = FALSE, isPositional = FALSE, isMaf = FALSE, isBedGr = FALSE,
-        isChromGraphCt = FALSE;
+        isChromGraphCt = FALSE, isCt = FALSE;
 struct hTableInfo *hti = NULL;
 
 cartWebStart(cart, database, "Table Import in Progress ");
 hPrintf("<FORM ACTION=\"../cgi-bin/hgGenome\">");
 cartSaveSession(cart);
 
 
-//char *selGroup = cartString(cart, hggGroup);
-//char *selTrack = cartString(cart, hggTrack);
-//char *selTable = cartString(cart, hggTable);
-
 allJoiner = joinerRead("all.joiner");
 initGroupsTracksTables(conn);
 
 if (strchr(curTable, '.') == NULL)  /* In same database */
@@ -1434,9 +1442,10 @@
     }
 isWig = isWiggle(database, curTable);
 isMaf = isMafTable(database, curTrack, curTable);
 isBedGr = isBedGraph(curTable);
-if (isCustomTrack(curTable))
+isCt = isCustomTrack(curTable);
+if (isCt)
     {
     isChromGraphCt = isChromGraph(curTrack);
     }
 
@@ -1451,18 +1460,23 @@
     isMaf = isMafTable(database, curTrack, curTable);
     }
 
 /* debug info
+char *selGroup = cartString(cart, hggGroup);
+char *selTrack = cartString(cart, hggTrack);
+//char *selTable = cartString(cart, hggTable);
+
 hPrintf("Debug Info:<br>\n");
 hPrintf("----------------------------<br>\n");
 hPrintf("selected group: %s<br>\n",selGroup);
 hPrintf("selected track: %s<br>\n",selTrack);
-hPrintf("selected table: %s<br>\n",selTable);
+hPrintf("curTable: %s<br>\n",curTable);
 hPrintf("isWig: %d<br>\n", isWig);
 hPrintf("isPositional: %d<br>\n", isPositional);
 hPrintf("isMaf: %d<br>\n", isMaf);
 hPrintf("isBedGr: %d<br>\n", isBedGr);
 hPrintf("isChromGraphCt: %d<br>\n", isChromGraphCt);
+hPrintf("isCustomTrack: %d<br>\n", isCt);
 */
 
 
 if (isPositional && !isWig && !isMaf && !isBedGr && !isChromGraphCt)
@@ -1471,11 +1485,11 @@
     cartUsualString(cart, hggBedConvertType, hggBedDepth);
     char *rawText = NULL;
     
     if (sameString(convertType,hggBedCoverage))
-	rawText = makeCoverageCgFromBed(conn);
+	rawText = makeCoverageCgFromBed();
     else
-	rawText = makeDepthCgFromBed(conn, isBedGr);
+	rawText = makeDepthCgFromBed(isBedGr, isCt);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1485,15 +1499,14 @@
 else if (isPositional && !isWig && !isMaf && isBedGr && !isChromGraphCt)
     {  /* bedGraph */
     char *rawText = NULL;
     
-    char *bedGraphField = getBedGraphField(curTable,curTrack->type);
-
-    //debug: remove:
-    hPrintf("bedGraphField = %s<br>\n",bedGraphField); fflush(stdout);
-
+    //debug: 
+    // this does not work for custom tracks
+    //char *bedGraphField = getBedGraphField(curTable,curTrack->type);
+    //hPrintf("bedGraphField = %s<br>\n",bedGraphField); fflush(stdout);
 
-    rawText = makeDepthCgFromBed(conn, isBedGr);
+    rawText = makeDepthCgFromBed(isBedGr, isCt);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1503,9 +1516,9 @@
 else if (isPositional && !isWig && isMaf && !isBedGr && !isChromGraphCt)
     {  /* maf */
     char *rawText = NULL;
     
-    rawText = makeDepthCgFromBed(conn, isMaf);
+    rawText = makeDepthCgFromBed(isMaf, isCt);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1515,9 +1528,9 @@
 else if (isPositional && isWig && !isMaf && !isBedGr && !isChromGraphCt)
     { /* wiggle */
     char *rawText = NULL;
     
-    rawText = makeAverageCgFromWiggle(conn);
+    rawText = makeAverageCgFromWiggle();
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);