\n");
hPrintf("\n");
hPrintf("\n");
hPrintf("Home | ",
orgEnc, database, cartSessionVarName(), cartSessionId(cart));
if (hIsGisaidServer())
{
/* disable hgGateway for gisaid for now */
//hPrintf(" Sequence View Gateway | ", orgEnc, database);
hPrintf(
" %s | ",
'%', '%',
cartSessionVarName(),
cartSessionId(cart),
"Select Subjects");
}
else
if (hIsGsidServer())
{
hPrintf(" Sequence View Gateway | ", orgEnc, database);
hPrintf(
" %s | ",
'%', '%', "Select Subjects");
}
else
{
hPrintf(" Genomes | ", orgEnc, database, cartSessionVarName(), cartSessionId(cart));
}
if (psOutput)
{
hPrintf(" Genome Browser | ", orgEnc, database, cartSessionVarName(), cartSessionId(cart));
}
if (gotBlat)
{
hPrintf(" Blat | ", uiVars->string);
}
if (hIsGisaidServer())
{
hPrintf(" %s | ",
database,
cartSessionVarName(),
cartSessionId(cart),
"Table View");
}
else if (hIsGsidServer())
{
hPrintf(" %s | ",
database, "Table View");
}
else
{
/* disable TB for CGB servers */
if (!hIsCgbServer())
{
hPrintf(" %s | ",
database, cartSessionVarName(), cartSessionId(cart),
"Tables");
}
}
if (hgNearOk(database))
{
hPrintf(" %s | ",
uiVars->string, "Gene Sorter");
}
if (hgPcrOk(database))
{
hPrintf(" PCR | ", uiVars->string);
}
if (!psOutput)
{
hPrintf(" "
"%s | ", hgcNameAndSettings(),
winStart, chromName, winStart, winEnd, database, uiVars->string, "DNA");
}
if (!psOutput)
{
/* disable Convert function for CGB servers for the time being */
if (!hIsCgbServer())
if (liftOverChainForDb(database) != NULL)
{
hPrintf(" string, database);
hPrintf("\" class=\"topbar\">Convert | ");
}
}
if (!psOutput)
{
hPrintf(" %s | ",cartSessionVarName(),
cartSessionId(cart), "PS/PDF");
}
if (!psOutput)
{
if (wikiLinkEnabled())
{
printf(" Session | ",
cartSessionVarName(), cartSessionId(cart));
}
}
char ensVersionString[256];
char ensDateReference[256];
ensGeneTrackVersion(database, ensVersionString, ensDateReference,
sizeof(ensVersionString));
if (!psOutput)
{
if (differentWord(database,"susScr2"))
{
/* Print Ensembl anchor for latest assembly of organisms we have
* supported by Ensembl == if versionString from trackVersion exists */
if (sameWord(database,"hg19"))
{
printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
}
else if (sameWord(database,"hg18"))
{
printEnsemblAnchor(database, "ncbi36", chromName, winStart, winEnd, &links);
}
else if (sameWord(database,"oryCun2") || sameWord(database,"anoCar2") || sameWord(database,"calJac3"))
{
printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
}
else if (ensVersionString[0])
{
char *archive = NULL;
if (ensDateReference[0] && differentWord("current", ensDateReference))
archive = cloneString(ensDateReference);
/* Can we perhaps map from a UCSC random chrom to an Ensembl contig ? */
if (isUnknownChrom(database, chromName))
{
// which table to check
char *ctgPos = "ctgPos";
if (sameWord(database,"fr2"))
fr2ScaffoldEnsemblLink(archive, &links);
else if (hTableExists(database, UCSC_TO_ENSEMBL))
printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
else if (hTableExists(database, ctgPos))
/* see if we are entirely within a single contig */
{
struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr = NULL;
char **row = NULL;
char query[256];
safef(query, sizeof(query),
"select * from %s where chrom = '%s' and chromStart<%u and chromEnd>%u",
ctgPos, chromName, winEnd, winStart);
sr = sqlGetResult(conn, query);
int itemCount = 0;
struct ctgPos *ctgItem = NULL;
while ((row = sqlNextRow(sr)) != NULL)
{
ctgPosFree(&ctgItem); // if there is a second one
ctgItem = ctgPosLoad(row);
++itemCount;
if (itemCount > 1)
break;
}
sqlFreeResult(&sr);
hFreeConn(&conn);
if (1 == itemCount)
{ // verify *entirely* within single contig
if ((winEnd <= ctgItem->chromEnd) &&
(winStart >= ctgItem->chromStart))
{
int ctgStart = winStart - ctgItem->chromStart;
int ctgEnd = ctgStart + winEnd - winStart;
printEnsemblAnchor(database, archive, ctgItem->contig,
ctgStart, ctgEnd, &links);
}
}
ctgPosFree(&ctgItem); // the one we maybe used
}
}
else
{
printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
}
}
}
}
if (!psOutput)
{
char buf[2056];
/* Print NCBI MapView anchor */
if (sameString(database, "hg18"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&build=previous&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "hg19"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "mm8"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=10090&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "danRer2"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7955&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "galGal3"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9031&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "canFam2"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9615&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "rheMac2"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9544&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "panTro2"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9598&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "anoGam1"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7165&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (sameString(database, "bosTau6"))
{
safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9913&CHR=%s&BEG=%d&END=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
}
if (startsWith("oryLat", database))
{
safef(buf, sizeof(buf), "http://medaka.utgenome.org/browser_ens_jump.php?revision=version1.0&chr=chromosome%s&start=%d&end=%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "UTGB", "medakaLink", TRUE);
}
if (sameString(database, "cb3"))
{
safef(buf, sizeof(buf), "http://www.wormbase.org/db/seq/gbrowse/briggsae?name=%s:%d-%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
}
if (sameString(database, "cb4"))
{
safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_briggsae?name=%s:%d-%d",
chromName, winStart+1, winEnd);
appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
}
if (sameString(database, "ce10"))
{
safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_elegans?name=%s:%d-%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
}
if (sameString(database, "ce4"))
{
safef(buf, sizeof(buf), "http://ws170.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
}
if (sameString(database, "ce2"))
{
safef(buf, sizeof(buf), "http://ws120.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d",
skipChr(chromName), winStart+1, winEnd);
appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
}
}
for(link = links; link != NULL; link = link->next)
hPrintf(" %s | \n", link->url, link->id, link->name);
if (hIsGisaidServer())
{
//hPrintf(" %s | \n", "Help");
hPrintf(" %s | \n", "Help");
}
else
if (hIsGsidServer())
{
hPrintf(" %s | \n", "Help");
}
else
{
hPrintf(" %s | \n", "Help");
}
hPuts(" |
| ");
hPuts(" ");
hPuts(" |