ae3969602106c0229160648f6ff6c87c3ad0de2d giardine Tue Dec 7 14:13:12 2010 -0800 Addition of wiki track and supporting tracks for microattribution reviews (part of the variome project) diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index a3480e9..b3d821a 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -106,30 +106,31 @@ #include "oreganno.h" #include "oregannoUi.h" #include "pgSnp.h" #include "bedDetail.h" #include "bed12Source.h" #include "dbRIP.h" #include "wikiLink.h" #include "wikiTrack.h" #include "dnaMotif.h" #include "hapmapTrack.h" #include "omicia.h" #include "nonCodingUi.h" #include "transMapTracks.h" #include "retroTracks.h" #include "pcrResult.h" +#include "variome.h" #endif /* GBROWSE */ #ifdef LOWELAB #include "loweLabTracks.h" #include "rnaPLFoldTrack.h" #endif /* LOWELAB */ #ifdef LOWELAB_WIKI #include "wiki.h" #endif /* LOWELAB_WIKI */ static char const rcsid[] = "$Id: simpleTracks.c,v 1.149 2010/06/05 19:29:42 braney Exp $"; #define CHROM_COLORS 26 #define SMALLDYBUF 64 @@ -10923,30 +10924,180 @@ else if (sameString(source, "TIGEM")) color = hvGfxFindColorIx(hvg, 0xcc, 0x00, 0x00); /* red */ else if (sameString(source, "TIGM")) color = hvGfxFindColorIx(hvg, 0xaa, 0x00, 0x66); /* Juneberry (per D.S.) */ return color; } void igtcMethods(struct track *tg) /* International Gene Trap Consortium: special naming & coloring. */ { tg->itemName = igtcName; tg->itemColor = igtcColor; tg->itemNameColor = igtcColor; } +void loadVariome(struct track *tg) +/* Load the items from the variome table (based on wikiTrackLoadItems) */ +{ +struct bed *bed; +struct sqlConnection *conn = wikiConnect(); +struct sqlResult *sr; +char **row; +int rowOffset; +char where[256]; +struct linkedFeatures *lfList = NULL, *lf; +int scoreMin = 0; +int scoreMax = 99999; + +safef(where, ArraySize(where), "db='%s'", database); + +sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, where, &rowOffset); +while ((row = sqlNextRow(sr)) != NULL) + { + struct variome *item = variomeLoad(row); + AllocVar(bed); + bed->chrom = cloneString(item->chrom); + bed->chromStart = item->chromStart; + bed->chromEnd = item->chromEnd; + bed->name = cloneString(item->name); + bed->score = item->score; + safecpy(bed->strand, sizeof(bed->strand), item->strand); + bed->thickStart = item->chromStart; + bed->thickEnd = item->chromEnd; + bed->itemRgb = bedParseRgb(item->color); + bed8To12(bed); + lf = lfFromBedExtra(bed, scoreMin, scoreMax); + lf->extra = (void *)USE_ITEM_RGB; /* signal for coloring */ + lf->filterColor=bed->itemRgb; + + /* overload itemAttr fields to be able to pass id to hgc click box */ + struct itemAttr *id; + AllocVar(id); + id->chromStart = item->id; + lf->itemAttr = id; + slAddHead(&lfList, lf); + variomeFree(&item); + } +sqlFreeResult(&sr); + +slSort(&lfList, linkedFeaturesCmp); + +// add special item to allow creation of new entries +AllocVar(bed); +bed->chrom = chromName; +bed->chromStart = winStart; +bed->chromEnd = winEnd; +bed->name = cloneString("Make new entry"); +bed->score = 100; +bed->strand[0] = ' '; /* no barbs when strand is unknown */ +bed->thickStart = winStart; +bed->thickEnd = winEnd; +bed->itemRgb = 0xcc0000; +bed8To12(bed); +lf = lfFromBedExtra(bed, scoreMin, scoreMax); +lf->extra = (void *)USE_ITEM_RGB; /* signal for coloring */ +lf->filterColor=bed->itemRgb; +slAddHead(&lfList, lf); + +tg->items = lfList; +wikiDisconnect(&conn); +} + +void variomeMapItem(struct track *tg, struct hvGfx *hvg, void *item, + char *itemName, char *mapItemName, int start, int end, int x, int y, int width, int height) +/* create a special map box item with different i=hgcClickName and + * pop-up statusLine with the item name + */ +{ +char *hgcClickName = tg->mapItemName(tg, item); +char *statusLine = tg->itemName(tg, item); +mapBoxHgcOrHgGene(hvg, start, end, x, y, width, height, tg->track, + hgcClickName, statusLine, NULL, FALSE, NULL); +} + +char *variomeMapItemName(struct track *tg, void *item) +/* Return the unique id track item. */ +{ +struct itemAttr *ia; +char id[64]; +int iid = 0; +struct linkedFeatures *lf = item; +if (lf->itemAttr != NULL) + { + ia = lf->itemAttr; + iid = (int)(ia->chromStart); + } +safef(id,ArraySize(id),"%d", iid); +return cloneString(id); +} + +void addVariomeWikiTrack(struct track **pGroupList) +/* Add variome wiki track and append to group list. */ +{ +if (wikiTrackEnabled(database, NULL)) + { + struct track *tg = trackNew(); + static char longLabel[80]; + struct trackDb *tdb; + struct sqlConnection *wikiConn = wikiConnect(); + if (! sqlTableExists(wikiConn,"variome")) + errAbort("variome table missing for wiki track"); + + linkedFeaturesMethods(tg); + AllocVar(tdb); + tg->track = "variome"; + tg->table = "variome"; + tg->canPack = TRUE; + tg->visibility = tvHide; + tg->hasUi = TRUE; + tg->shortLabel = cloneString("New variants"); + safef(longLabel, sizeof(longLabel), "New variant submission for microattribtution review"); + tg->longLabel = longLabel; + tg->loadItems = loadVariome; + tg->itemName = linkedFeaturesName; + tg->mapItemName = variomeMapItemName; + tg->mapItem = variomeMapItem; + tg->priority = 500.4; + tg->defaultPriority = 500.4; + tg->groupName = cloneString("varRep"); + tg->defaultGroupName = cloneString("varRep"); + tg->exonArrows = FALSE; + tg->nextItemButtonable = TRUE; + tdb->track = cloneString(tg->track); + tdb->table = cloneString(tg->table); + tdb->shortLabel = cloneString(tg->shortLabel); + tdb->longLabel = cloneString(tg->longLabel); + tdb->useScore = 1; + tdb->grp = cloneString(tg->groupName); + tdb->priority = tg->priority; + trackDbPolish(tdb); + tg->tdb = tdb; + + slAddHead(pGroupList, tg); + wikiDisconnect(&wikiConn); + } +} + +void variomeMethods (struct track *tg) +/* load variome track (wikiTrack) */ +{ +tg->loadItems = loadVariome; +tg->mapItemName = variomeMapItemName; +tg->mapItem = variomeMapItem; +} + void logoLeftLabels(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, int height, boolean withCenterLabels, MgFont *font, Color color, enum trackVisibility vis) { } /* load data for a sequence logo */ static void logoLoad(struct track *tg) { struct dnaMotif *motif; int count = winEnd - winStart; int ii; char query[256]; struct sqlResult *sr; @@ -11711,30 +11862,31 @@ registerTrackHandler("encodeErgeSummary",encodeErgeMethods); registerTrackHandler("encodeErgeTransTransf",encodeErgeMethods); registerTrackHandlerOnFamily("encodeStanfordNRSF",encodeStanfordNRSFMethods); registerTrackHandler("cghNci60", cghNci60Methods); registerTrackHandler("rosetta", rosettaMethods); registerTrackHandler("affy", affyMethods); registerTrackHandler("ancientR", ancientRMethods ); registerTrackHandler("altGraphX", altGraphXMethods ); registerTrackHandler("triangle", triangleMethods ); registerTrackHandler("triangleSelf", triangleMethods ); registerTrackHandler("transfacHit", triangleMethods ); registerTrackHandler("esRegGeneToMotif", eranModuleMethods ); registerTrackHandler("leptin", mafMethods ); registerTrackHandler("igtc", igtcMethods ); registerTrackHandler("cactusBed", cactusBedMethods ); +registerTrackHandler("variome", variomeMethods); /* Lowe lab related */ #ifdef LOWELAB registerTrackHandler("refSeq", archaeaGeneMethods); registerTrackHandler("gbProtCode", gbGeneMethods); registerTrackHandler("tigrCmrORFs", tigrGeneMethods); registerTrackHandler("BlastPEuk",llBlastPMethods); registerTrackHandler("BlastPBac",llBlastPMethods); registerTrackHandler("BlastPpyrFur2",llBlastPMethods); registerTrackHandler("codeBlast",codeBlastMethods); registerTrackHandler("tigrOperons",tigrOperonMethods); registerTrackHandler("rabbitScore",valAlMethods); registerTrackHandler("armadilloScore",valAlMethods); registerTrackHandler("rnaGenes",rnaGenesMethods); registerTrackHandler("sargassoSea",sargassoSeaMethods); registerTrackHandler("llaPfuPrintC2", loweExpRatioMethods);