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>");