src/hg/hgGenome/import.c 1.16

1.16 2009/10/12 22:43:34 galt
getting it to be a little more consistent, better code organization, and fixes problem where custom bedGraph track was not working
Index: src/hg/hgGenome/import.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgGenome/import.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -b -B -U 4 -r1.15 -r1.16
--- src/hg/hgGenome/import.c	6 Oct 2009 00:47:48 -0000	1.15
+++ src/hg/hgGenome/import.c	12 Oct 2009 22:43:34 -0000	1.16
@@ -1210,8 +1210,10 @@
     struct lm *lm = lmInit(64*1024);
     chrom = chr->fullName;
     bedList = getBeds(chrom, lm, &fields);
 
+    hPrintf(" "); fflush(stdout);  // browser keep-alive 
+
     if (!bedList)
 	continue;
     
     chromSize = hChromSize(database, chrom);
@@ -1254,9 +1256,9 @@
 return dyStringCannibalize(&dy);
 }
 
 
-char *makeDepthCgFromBed(boolean isBedGr, boolean isCt)
+char *makeDepthCgFromBed(boolean isBedGr)
 /* create depth chromGraph from bed, bedGraph, or Maf data */
 {
 struct dyString *dy = dyStringNew(0);
 char *chrom = "";
@@ -1275,8 +1277,10 @@
     struct lm *lm = lmInit(64*1024);
     chrom = chr->fullName;
     bedList = getBeds(chrom, lm, &fields);
 
+    hPrintf(" "); fflush(stdout);  // browser keep-alive 
+
     if (!bedList)
 	continue;
     
     chromSize = hChromSize(database, chrom);
@@ -1293,26 +1297,16 @@
 	int end = bed->chromEnd;
 
 	for(i = start/windowSize; i*windowSize < end; ++i)
 	    {
-
 	    overlap = rangeIntersection(start, end, i*windowSize, (i+1)*windowSize);
-
 	    if (overlap > 0)
 		{
-
-                // 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)
+		if (isBedGr)
 		    {
 		    float val = atof(bed->name);
-		    depth[i] += ((((double)overlap)/windowSize)*val);
+		    depth[i] += (((double)overlap)/windowSize)*val;
 		    }
-		else if (isBedGr)
-		    depth[i] += ((((double)overlap)/windowSize)*bed->expScores[0]);
 		else
     		    depth[i] += ((double)overlap)/windowSize;
 		}
 	    }
@@ -1354,8 +1348,10 @@
     chrom = chr->fullName;
     struct wiggleDataStream *wds = wigChromRawStats(chrom);
     struct wiggleStats *stats=NULL, *statsList = wds->stats;
 
+    hPrintf(" "); fflush(stdout);  // browser keep-alive 
+
     if (!wds->stats)
 	continue;
     
     chromSize = hChromSize(database, chrom);
@@ -1439,8 +1435,14 @@
     {
     hti = getHti(database, curTable);
     isPositional = htiIsPositional(hti);
     }
+
+if (!curTrack || !sameString(curTrack->tableName, curTable))
+    {
+    struct trackDb *tdb = hTrackDbForTrack(database, curTable);
+    curTrack = tdb;
+    }
 isWig = isWiggle(database, curTable);
 isMaf = isMafTable(database, curTrack, curTable);
 isBedGr = isBedGraph(curTable);
 isCt = isCustomTrack(curTable);
@@ -1448,18 +1450,8 @@
     {
     isChromGraphCt = isChromGraph(curTrack);
     }
 
-if (curTrack == NULL)
-    {
-    struct trackDb *tdb = hTrackDbForTrack(database, curTable);
-    struct trackDb *cTdb = hCompositeTrackDbForSubtrack(database, tdb);
-    if (cTdb)
-	curTrack = cTdb;
-    else
-	curTrack = tdb;
-    isMaf = isMafTable(database, curTrack, curTable);
-    }
 
 /* debug info
 char *selGroup = cartString(cart, hggGroup);
 char *selTrack = cartString(cart, hggTrack);
@@ -1469,8 +1461,10 @@
 hPrintf("----------------------------<br>\n");
 hPrintf("selected group: %s<br>\n",selGroup);
 hPrintf("selected track: %s<br>\n",selTrack);
 hPrintf("curTable: %s<br>\n",curTable);
+hPrintf("curTrack->type: %s<br>\n", curTrack->type);
+hPrintf("curTrack->tableName: %s<br>\n", curTrack->tableName);
 hPrintf("isWig: %d<br>\n", isWig);
 hPrintf("isPositional: %d<br>\n", isPositional);
 hPrintf("isMaf: %d<br>\n", isMaf);
 hPrintf("isBedGr: %d<br>\n", isBedGr);
@@ -1487,9 +1481,9 @@
     
     if (sameString(convertType,hggBedCoverage))
 	rawText = makeCoverageCgFromBed();
     else
-	rawText = makeDepthCgFromBed(isBedGr, isCt);
+	rawText = makeDepthCgFromBed(isBedGr);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1500,13 +1494,12 @@
     {  /* bedGraph */
     char *rawText = NULL;
 
     //debug: 
-    // this does not work for custom tracks
-    //char *bedGraphField = getBedGraphField(curTable,curTrack->type);
-    //hPrintf("bedGraphField = %s<br>\n",bedGraphField); fflush(stdout);
+    char *bedGraphField = getBedGraphField(curTable);
+    hPrintf("bedGraphField = %s<br>\n",bedGraphField); fflush(stdout);
 
-    rawText = makeDepthCgFromBed(isBedGr, isCt);
+    rawText = makeDepthCgFromBed(isBedGr);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1516,9 +1509,9 @@
 else if (isPositional && !isWig && isMaf && !isBedGr && !isChromGraphCt)
     {  /* maf */
     char *rawText = NULL;
     
-    rawText = makeDepthCgFromBed(isMaf, isCt);
+    rawText = makeDepthCgFromBed(isMaf);
 
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
    	trySubmitImport(conn, rawText);
@@ -1538,8 +1531,9 @@
 
     }
 
 
+hPrintf("\n");
 hPrintf("<CENTER>");
 cgiMakeButton("submit", "OK");
 hPrintf("</CENTER>");
 hPrintf("</FORM>");