d431e26cf5755649962d340eab887cefb40a8a8b braney Mon Nov 2 12:28:36 2015 -0800 remove GSID code from mafClick.c (no redmine) diff --git src/hg/hgc/mafClick.c src/hg/hgc/mafClick.c index fadecc0..fe09394 100644 --- src/hg/hgc/mafClick.c +++ src/hg/hgc/mafClick.c @@ -450,47 +450,30 @@ char *axtOtherDb, char *file) { if (axtOtherDb != NULL) { struct hash *qSizeHash = hChromSizeHash(axtOtherDb); struct mafAli *mafList = axtLoadAsMafInRegion(conn, tdb->table, chrom, start, end, database, axtOtherDb, hChromSize(database, chrom), qSizeHash); hashFree(&qSizeHash); return mafList; } else return mafLoadInRegion2(conn, conn2, tdb->table, chrom, start, end, file); } -/* Load mafs from region, either from maf or axt file. */ -static struct mafAli *mafOrAxtLoadInRegion(struct sqlConnection *conn, - struct trackDb *tdb, char *chrom, int start, int end, - char *axtOtherDb) -/* Load mafs from region, either from maf or axt file. */ -{ -if (axtOtherDb != NULL) - { - struct hash *qSizeHash = hChromSizeHash(axtOtherDb); - struct mafAli *mafList = axtLoadAsMafInRegion(conn, tdb->table, - chrom, start, end, database, axtOtherDb, hChromSize(database, chrom), qSizeHash); - hashFree(&qSizeHash); - return mafList; - } -else - return mafLoadInRegion(conn, tdb->table, chrom, start, end); -} #ifdef ADDEXONCAPITAL static char *codeAll[] = { "coding", "all", }; #endif static char *showAll[] = { "all", "diff", }; static void conservationStatsLink(struct trackDb *tdb, char *label, char *table) @@ -743,31 +726,31 @@ printf("bases"); printf("<BR>\n"); printf("</FORM>\n"); #ifdef REVERSESTRAND /* notify if bases are complemented (hgTracks is on reverse strand) */ if (cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE)) puts("<EM>Alignment displayed on reverse strand</EM><BR>"); #endif puts("Place cursor over species for alignment detail. Click on 'B' to link to browser "); puts("for aligned species, click on 'D' to get DNA for aligned species.<BR>"); printf("<TT><PRE>"); /* notify if species removed from alignment */ - if ((speciesOffHash) && !hIsGsidServer()) + if (speciesOffHash) { char *species; struct hashCookie hc = hashFirst(speciesOffHash); puts("<B>Components not displayed:</B> "); while ((species = hashNextName(&hc)) != NULL) printf("%s ", species); puts("<BR>"); } for (maf = subList; maf != NULL; maf = maf->next) { mafLowerCase(maf); #ifdef ADDEXONCAPITAL if (capTrack != NULL) @@ -789,545 +772,39 @@ } static void mafOrAxtClick(struct sqlConnection *conn, struct trackDb *tdb, char *axtOtherDb) { struct sqlConnection *conn2 = NULL; if (!isHubTrack(tdb->track)) conn2 = hAllocConn(database); // MAF file location is optionally in trackDb char *mafFile = hashFindVal(tdb->settingsHash, "mafFile"); mafOrAxtClick2(conn, conn2, tdb, axtOtherDb, mafFile); hFreeConn(&conn2); } -static void blueCapWriteGsid(FILE *f, char *s, int size, char *r, boolean isProtein, int offset) -/* Write capital letters in blue, with added logic specific for protein. */ -{ -boolean isBlue = FALSE; -int step; -int i; - -if (isProtein) - step = 3; -else - step=1; -for (i=0; i<size; i=i+step) - { - if (r!=NULL && s[i]==r[i]) - fprintf(f, "."); - else - { - char c = s[i]; - if (isupper(c)) - { - if (!isBlue) - { - fprintf(f, "<span style='color:#0000FF;'>"); - isBlue = TRUE; - } - } - else if (islower(c)) - { - if (isBlue) - { - fprintf(f, "</span>"); - isBlue = FALSE; - } - } - /* look up codon to get AA if it is protein */ - if (isProtein) - { - if (c != '-') - { - c=lookupCodon(s+(long)(i-offset%3)); - /* bypass the first partial codon */ - if ((i == 0) && (c == 'X')) c= ' '; - if ((i == (size-1)) && (c == 'X')) c= ' '; - } - } - fprintf(f, "%c", c); - } - } - -if (isBlue) - fprintf(f, "</span>"); -} - -void mafPrettyOutGsid(FILE *f, struct mafAli *maf, int lineSize, - boolean onlyDiff, int blockNo, boolean isProtein, int mafOrig) -{ -int ii, ch; -int srcChars = 0; -struct mafComp *mc; -int lineStart, lineEnd; -char *summaryLine = needMem(lineSize+1); -char *referenceText; -int startChars, sizeChars, srcSizeChars; -boolean haveInserts = FALSE; -struct mafComp *masterMc = maf->components; - -startChars = sizeChars = srcSizeChars = 0; - -for (mc = maf->components; mc != NULL; mc = mc->next) - { - /* Figure out length of source (species) field. */ - /*if (mc->size != 0)*/ - { - char dbOnly[128]; - int len; -// char *chrom; unused variable - char *org; - - memset(dbOnly, 0, sizeof(dbOnly)); - safef(dbOnly, sizeof(dbOnly), "%s", mc->src); - // chrom = chopPrefix(dbOnly); unused variable - - if ((org = hOrganism(dbOnly)) == NULL) - len = strlen(dbOnly); - else - len = strlen(org); - if (srcChars < len) - srcChars = len; - - len = digitsBaseTen(mc->start); - if (startChars < len) - startChars = len; - len = digitsBaseTen(mc->size); - if (sizeChars < len) - sizeChars = len; - len = digitsBaseTen(mc->srcSize); - if (srcSizeChars < len) - srcSizeChars = len; - - if (mc->text && (mc->rightStatus == MAF_INSERT_STATUS) && (masterMc->start + masterMc->size < winEnd)) - haveInserts = TRUE; - -#ifdef REVERSESTRAND - /* complement bases if hgTracks is on reverse strand */ - if (mc->size && cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE)) - complement(mc->text, maf->textSize); -#endif - } - } -/* first sequence in the alignment */ -referenceText = maf->components->text; - -for (lineStart = 0; lineStart < maf->textSize; lineStart = lineEnd) - { - int size; - lineEnd = lineStart + lineSize; - if (lineEnd >= maf->textSize) - lineEnd = maf->textSize; - size = lineEnd - lineStart; - initSummaryLine(summaryLine, size, '*'); - for (mc = maf->components; mc != NULL; mc = mc->next) - { - char dbOnly[128], *chrom; - int s = mc->start; - int e = s + mc->size; - char *org; -// char *revComp = ""; unused variable - struct dyString *dy = newDyString(512); -#ifdef REVERSESTRAND - char strand = mc->strand; - if (cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE)) - strand = (strand == '+') ? '-' : '+'; -#endif -// if (strand == '-') revComp = "&hgSeq.revComp=on"; unused variable - - dyStringClear(dy); - - safef(dbOnly, sizeof(dbOnly), "%s", mc->src); - chrom = chopPrefix(dbOnly); - if ((org = hOrganism(dbOnly)) == NULL) - org = dbOnly; - - if (mc->strand == '-') - reverseIntRange(&s, &e, mc->srcSize); - - - if (mc->text != NULL) - { - fprintf(f, " "); - - dyStringClear(dy); - dyStringPrintf(dy, "%s:%d-%d %c %*dbps",chrom, s+1, e, mc->strand,sizeChars, mc->size); - fprintf(f, "<A TITLE=\"%s\"> %*s </A> ", dy->string, srcChars, org); - - updateSummaryLine(summaryLine, referenceText + lineStart, - mc->text + lineStart, size); - blueCapWriteGsid(f, mc->text + lineStart, size, - (onlyDiff && mc != maf->components) ? referenceText + lineStart - : NULL, isProtein, - mc->start-mafOrig); - fprintf(f, "\n"); - } - else - { - if (((mc->leftStatus == MAF_CONTIG_STATUS) && (mc->rightStatus == MAF_CONTIG_STATUS) ) - || ((mc->leftStatus == MAF_TANDEM_STATUS) && (mc->rightStatus == MAF_TANDEM_STATUS) ) - || ((mc->leftStatus == MAF_INSERT_STATUS) && (mc->rightStatus == MAF_INSERT_STATUS) ) - || ((mc->leftStatus == MAF_MISSING_STATUS) && (mc->rightStatus == MAF_MISSING_STATUS) )) - { - if (lineStart == 0) - { - int s = mc->start; - int e = s + mc->rightLen; - //struct dyString *dy = newDyString(512); - - if (mc->strand == '-') - reverseIntRange(&s, &e, mc->srcSize); - fprintf(f, " "); - } - else - fprintf(f, " "); - initSummaryLine(summaryLine, size, ' '); - dyStringClear(dy); - dyStringPrintf(dy, "%s:%d-%d %c %*dbps",chrom, s+1, e, mc->strand,sizeChars, mc->size); - fprintf(f, "<A TITLE=\"%s\">%*s</A> ", dy->string, srcChars, org); - ch = '-'; - switch(mc->rightStatus) - { - case MAF_INSERT_STATUS: - ch = '='; - break; - case MAF_MISSING_STATUS: - ch = 'N'; - break; - case MAF_TANDEM_STATUS: - case MAF_CONTIG_STATUS: - ch = '-'; - break; - } - for(ii=lineStart; ii < lineEnd ; ii++) - fputc(ch,f); - fprintf(f,"\n"); - } - } - } -#ifdef ADDMATCHLINE - if (lineStart == 0) - fprintf(f, " %-*s %s\n", srcChars, "", summaryLine); - else - fprintf(f, "%-*s %s\n", srcChars, "", summaryLine); -#else - fprintf(f, "\n"); -#endif - } - -if (haveInserts) - { - fprintf(f, "<B>Inserts between block %d and %d in window</B>\n",blockNo, blockNo+1); - for (mc = maf->components; mc != NULL; mc = mc->next) - { - char dbOnly[128]; - // char *chrom; unused variable - int s = mc->start + mc->size; - int e = s + mc->rightLen; - char *org; - - if (mc->text == NULL) - continue; - - if (mc->strand == '-') - reverseIntRange(&s, &e, mc->srcSize); - - safef(dbOnly, sizeof(dbOnly), "%s", mc->src); - // chrom = chopPrefix(dbOnly); unused variable - - if ((org = hOrganism(dbOnly)) == NULL) - org = dbOnly; - - if (mc->rightStatus == MAF_INSERT_STATUS) - { - if (hDbIsActive(dbOnly)) - { -#ifdef REVERSESTRAND - char strand = mc->strand; - if (cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE)) - strand = (strand == '+') ? '-' : '+'; -#endif - /* - char *revComp = ""; - if (strand == '-') revComp = "&hgSeq.revComp=on"; - linkToOtherBrowser(dbOnly, chrom, s, e); - fprintf(f,"B"); - fprintf(f, "</A>"); - fprintf(f, " "); - - printf("<A TARGET=\"_blank\" HREF=\"%s?o=%d&g=getDna&i=%s&c=%s&l=%d&r=%d&db=%s%s\">D</A> ", hgcName(), - s, cgiEncode(chrom), - chrom, s, e, dbOnly,revComp); - */ - fprintf(f, " "); - } - else - fprintf(f, " "); - - fprintf(f, "%*s %dbp\n", srcChars, org,mc->rightLen); - } - } - fprintf(f, "\n"); - } -freeMem(summaryLine); - -} - -static void mafOrAxtClickGsid(struct sqlConnection *conn, struct trackDb *tdb, char *axtOtherDb) -/* Display details for MAF or AXT tracks. */ -{ -hgBotDelay(); -if (winEnd - winStart > 30000) - { - printf("Zoom so that window is 30,000 bases or less to see base-by-base alignments\n"); - } -else - { - struct mafAli *mafList, *maf, *subList = NULL; - int aliIx = 0, realCount = 0; - char dbChrom[64]; - char option[128]; - struct consWiggle *consWig, *consWiggles; - struct hash *speciesOffHash = NULL; - char *speciesOrder = NULL; - char *speciesTarget = trackDbSetting(tdb, SPECIES_TARGET_VAR); - char buffer[1024]; - int useTarg = FALSE; - int useIrowChains = FALSE; - int itemPrinted; - int mafOrig; - char query[256]; - - safef(option, sizeof(option), "%s.%s", tdb->track, MAF_CHAIN_VAR); - if (cartCgiUsualBoolean(cart, option, FALSE) && - trackDbSetting(tdb, "irows") != NULL) - useIrowChains = TRUE; - - safef(buffer, sizeof(buffer), "%s.vis",tdb->track); - if (useIrowChains) - { - if (!cartVarExists(cart, buffer) && (speciesTarget != NULL)) - useTarg = TRUE; - else - { - char *val; - - val = cartUsualString(cart, buffer, "useCheck"); - useTarg = sameString("useTarg",val); - } - } - - mafList = mafOrAxtLoadInRegion(conn, tdb, seqName, winStart, winEnd, - axtOtherDb); - safef(dbChrom, sizeof(dbChrom), "%s.%s", database, seqName); - - safef(option, sizeof(option), "%s.speciesOrder", tdb->track); - speciesOrder = cartUsualString(cart, option, NULL); - if (speciesOrder == NULL) - speciesOrder = trackDbSetting(tdb, "speciesOrder"); - - sqlSafef(query, sizeof(query), "select chromStart from %s", tdb->table); - mafOrig = atoi(sqlNeedQuickString(conn, query)); - - for (maf = mafList; maf != NULL; maf = maf->next) - { - int mcCount = 0; - struct mafComp *mc; - struct mafAli *subset; - struct mafComp *nextMc; - - /* remove empty components and configured off components - * from MAF, and ignore - * the entire MAF if all components are empty - * (solely for gap annotation) */ - - if (!useTarg) - { - for (mc = maf->components->next; mc != NULL; mc = nextMc) - { - char buf[64]; - char *organism; - mafSrcDb(mc->src, buf, sizeof buf); - organism = hOrganism(buf); - if (!organism) - organism = buf; - nextMc = mc->next; - safef(option, sizeof(option), "%s.%s", tdb->track, buf); - if (!cartUsualBoolean(cart, option, TRUE)) - { - if (speciesOffHash == NULL) - speciesOffHash = newHash(4); - hashStoreName(speciesOffHash, organism); - } - if (!cartUsualBoolean(cart, option, TRUE)) - slRemoveEl(&maf->components, mc); - else - mcCount++; - } - } - if (mcCount == 0) - continue; - - if (speciesOrder) - { - int speciesCt; - char *species[2048]; - struct mafComp **newOrder, *mcThis; - int i; - - mcCount = 0; - speciesCt = chopLine(cloneString(speciesOrder), species); - newOrder = needMem((speciesCt + 1) * sizeof (struct mafComp *)); - newOrder[mcCount++] = maf->components; - - for (i = 0; i < speciesCt; i++) - { - if ((mcThis = mafMayFindCompSpecies(maf, species[i], '.')) == NULL) - continue; - newOrder[mcCount++] = mcThis; - } - - maf->components = NULL; - for (i = 0; i < mcCount; i++) - { - newOrder[i]->next = 0; - slAddHead(&maf->components, newOrder[i]); - } - - slReverse(&maf->components); - } - subset = mafSubsetE(maf, dbChrom, winStart, winEnd, TRUE); - if (subset != NULL) - { - /* Reformat MAF if needed so that sequence from current - * database is the first component and on the - * plus strand. */ - mafMoveComponentToTop(subset, dbChrom); - if (subset->components->strand == '-') - mafFlipStrand(subset); - subset->score = mafScoreMultiz(subset); - slAddHead(&subList, subset); - ++realCount; - } - } - slReverse(&subList); - mafAliFreeList(&mafList); - if (subList != NULL) - { - char *showVarName = "hgc.showMultiBase"; - char *showVarVal = cartUsualString(cart, showVarName, "all"); - boolean onlyDiff = sameWord(showVarVal, "diff"); - /* add links for conservation score statistics */ - boolean first = TRUE; - consWiggles = wigMafWiggles(database, tdb); - for (consWig = consWiggles; consWig != NULL; - consWig = consWig->next) - { - if (first) - printf("\n<P>"); - if (sameString(consWig->leftLabel, DEFAULT_CONS_LABEL)) - conservationStatsLink(tdb, - "Conservation score statistics", consWig->table); - else - { - char *wigVarSuffix = NULL; - (void)wigMafWiggleVar(tdb->track, consWig, &wigVarSuffix); - if (!cartUsualBooleanClosestToHome(cart, tdb, FALSE, wigVarSuffix,FALSE)) - continue; - if (first) - { - printf("\n<P>Conservation score statistics:"); - first = FALSE; - } - printf(" "); - subChar(consWig->uiLabel, '_', ' '); - conservationStatsLink(tdb, - consWig->uiLabel, consWig->table); - } - } - puts("</P>\n"); - -#ifdef REVERSESTRAND - /* notify if bases are complemented (hgTracks is on reverse strand) */ - if (cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE)) - puts("<EM>Alignment displayed on reverse strand</EM><BR>"); -#endif - - printf("<TT><PRE>"); - - /* notify if species removed from alignment */ - if ((speciesOffHash) && !hIsGsidServer()) - { - char *species; - struct hashCookie hc = hashFirst(speciesOffHash); - puts("<B>Components not displayed:</B> "); - - itemPrinted = 0; - while ((species = hashNextName(&hc)) != NULL) - { - /* print a break every 6 items */ - if (((itemPrinted % 6) == 0) && (itemPrinted >0)) - printf("<br>"); - printf("%s ", species); - itemPrinted++; - } - puts("<BR>"); - } - - for (maf = subList; maf != NULL; maf = maf->next) - { - mafLowerCase(maf); - printf("<B>Alignment block %d of %d in window, %d - %d, %d bps </B>\n", - ++aliIx,realCount,maf->components->start + 1, - maf->components->start + maf->components->size, maf->components->size); - if (strstr(tdb->type, "wigMafProt")) - { - mafPrettyOutGsid(stdout, maf,210,onlyDiff, aliIx, 1, mafOrig); - } - else - { - mafPrettyOutGsid(stdout, maf, 70,onlyDiff, aliIx, 0, mafOrig); - } - } - mafAliFreeList(&subList); - } - else - { - printf("No multiple alignment in browser window"); - } - printf("</PRE></TT>"); - } -} - void customMafClick(struct sqlConnection *conn, struct sqlConnection *conn2, struct trackDb *tdb) { struct hash *settings = tdb->settingsHash; char *fileName; if ((fileName = hashFindVal(settings, "mafFile")) == NULL) errAbort("cannot find custom maf file setting"); mafOrAxtClick2(conn, conn2, tdb, NULL, fileName); } void genericMafClick(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start) /* Display details for MAF tracks. */ { -if (hIsGsidServer()) - { - mafOrAxtClickGsid(conn, tdb, NULL); - } -else - { mafOrAxtClick(conn, tdb, NULL); } -} void genericAxtClick(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start, char *otherDb) /* Display details for AXT tracks. */ { mafOrAxtClick(conn, tdb, otherDb); }