");
/* notify if species removed from alignment */
- if ((speciesOffHash) && !hIsGsidServer())
+ if (speciesOffHash)
{
char *species;
struct hashCookie hc = hashFirst(speciesOffHash);
puts("Components not displayed: ");
while ((species = hashNextName(&hc)) != NULL)
printf("%s ", species);
puts("
");
}
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");
- isBlue = TRUE;
- }
- }
- else if (islower(c))
- {
- if (isBlue)
- {
- fprintf(f, "");
- 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, "");
-}
-
-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, " %*s ", 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, "%*s ", 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, "Inserts between block %d and %d in window\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, "");
- fprintf(f, " ");
-
- printf("D ", 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");
- 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
Conservation score statistics:");
- first = FALSE;
- }
- printf(" ");
- subChar(consWig->uiLabel, '_', ' ');
- conservationStatsLink(tdb,
- consWig->uiLabel, consWig->table);
- }
- }
- puts("
\n");
-
-#ifdef REVERSESTRAND
- /* notify if bases are complemented (hgTracks is on reverse strand) */
- if (cartCgiUsualBoolean(cart, COMPLEMENT_BASES_VAR, FALSE))
- puts("Alignment displayed on reverse strand
");
-#endif
-
- printf("");
-
- /* notify if species removed from alignment */
- if ((speciesOffHash) && !hIsGsidServer())
- {
- char *species;
- struct hashCookie hc = hashFirst(speciesOffHash);
- puts("Components not displayed: ");
-
- itemPrinted = 0;
- while ((species = hashNextName(&hc)) != NULL)
- {
- /* print a break every 6 items */
- if (((itemPrinted % 6) == 0) && (itemPrinted >0))
- printf("
");
- printf("%s ", species);
- itemPrinted++;
- }
- puts("
");
- }
-
- for (maf = subList; maf != NULL; maf = maf->next)
- {
- mafLowerCase(maf);
- printf("Alignment block %d of %d in window, %d - %d, %d bps \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("");
- }
-}
-
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);
}