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