b30cdeb86d8532e8a41afa61aef02f988d957aeb max Fri May 9 14:46:48 2014 -0700 making some changes to bacEnds tracks code to allow change of tablename. Removing some code which is not necessary anymore as a result. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 7efcbaa..e369051 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -432,30 +432,36 @@ /* Print URL for GDB browser for an id * GDB currently inoperative, so have temporarily disabled this function * static void printGdbUrl(FILE *f, char *id) { fprintf(f, "%s", id); } */ static void printCloneDbUrl(FILE *f, char *clone) /* Print URL for Clone Registry at NCBI for a clone */ { fprintf(f, "\"%s%s\"", cloneDbScript, clone); } +static void printTraceTiUrl(FILE *f, char *name) +/* Print URL for Trace Archive at NCBI for a trace id (TI) */ +{ +fprintf(f, "\"%s%s\"", traceScript, name); +} + static void printTraceUrl(FILE *f, char *idType, char *name) /* Print URL for Trace Archive at NCBI for an identifier specified by type */ { fprintf(f, "\"%s%s%%3D%%27%s%%27\"", traceScript, idType, name); } static void printGenMapDbUrl(FILE *f, char *clone) /* Print URL for GenMapDb at UPenn for a clone */ { fprintf(f, "\"%s%s\"", genMapDbScript, clone); } static void printFlyBaseUrl(FILE *f, char *fbId) /* Print URL for FlyBase browser. */ { @@ -18434,105 +18440,118 @@ gbProtAnn->proteinId); printf(" TARGET=_blank>%s
\n", gbProtAnn->proteinId); htmlHorizontalLine(); showSAM_T02(gbProtAnn->proteinId); printPos(seqName, gbProtAnn->chromStart, gbProtAnn->chromEnd, "+", TRUE, gbProtAnn->name); } printTrackHtml(tdb); sqlFreeResult(&sr); hFreeConn(&conn); } +bool matchTableOrHandler(char *word, struct trackDb *tdb) +/* return true if word matches either the table name or the trackHandler setting of the tdb struct */ +{ +char* handler = trackDbSetting(tdb, "trackHandler"); +return (sameWord(word, tdb->table) || (handler==NULL || sameWord(word, handler))); +} + void doLinkedFeaturesSeries(char *track, char *clone, struct trackDb *tdb) /* Create detail page for linked features series tracks */ { char query[256]; char title[256]; struct sqlConnection *conn = hAllocConn(database), *conn1 = hAllocConn(database); struct sqlResult *sr = NULL, *sr2 = NULL, *srb = NULL; char **row, **row1, **row2, **rowb; char *lfLabel = NULL; char *table = NULL; char *intName = NULL; char pslTable[64]; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); int length = end - start; int i; struct lfs *lfs; struct psl *pslList = NULL, *psl; boolean hasBin = hOffsetPastBin(database, seqName, track); /* Determine type */ -if (sameString("bacEndPairs", track)) +if (matchTableOrHandler("bacEndPairs", tdb)) { safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } -if (sameString("bacEndSingles", track)) +if (matchTableOrHandler("bacEndSingles", tdb)) { safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } -if (sameString("bacEndPairsBad", track)) +if (matchTableOrHandler("bacEndPairsBad", tdb)) { safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } -if (sameString("bacEndPairsLong", track)) +if (matchTableOrHandler("bacEndPairsLong", tdb)) { safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } -if (sameString("fosEndPairs", track)) +if (matchTableOrHandler("fosEndPairs", tdb)) { safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } -if (sameString("fosEndPairsBad", track)) +if (matchTableOrHandler("fosEndPairsBad", tdb)) { safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } -if (sameString("fosEndPairsLong", track)) +if (matchTableOrHandler("fosEndPairsLong", tdb)) { safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } -if (sameString("earlyRep", track)) +if (matchTableOrHandler("earlyRep", tdb)) { safef(title, sizeof title, "Location of %s using cosmid end sequences", clone); lfLabel = "Early Replication Cosmid Ends"; table = track; } -if (sameString("earlyRepBad", track)) +if (matchTableOrHandler("earlyRepBad", tdb)) { safef(title, sizeof title, "Location of %s using cosmid end sequences", clone); lfLabel = "Early Replication Cosmid Ends"; table = track; } +if (trackDbSetting(tdb, "lfPslTable")) + { + safef(title, sizeof title, "Location of %s using clone end sequences", clone); + lfLabel = "Clone ends"; + table = track; + } /* Print out non-sequence info */ cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, clone, seqName, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { lfs = lfsLoad(row+hasBin); if (sameString("bacEndPairs", track) || sameString("bacEndSingles", track)) @@ -18561,49 +18580,61 @@ } else printf("

%s

\n", clone); } else if (sameString("Dog", organism) || sameString("Zebra finch", organism)) { printf("

%s

\n", clone); } else if (trackDbSetting(tdb, "notNCBI")) { printf("

%s

\n", clone); } + else if (startsWith(tdb->track, "trace")) + { + printTraceUrl(stdout, "clone_id", clone); + } else { printf("

%s

\n", clone); } } + else if (trackDbSetting(tdb, "lfPslTable")) + { + printf("

%s

\n", clone); + + } else { printf("%s\n", clone); } - /*printf("

%s - %s

\n", type, clone);*/ + printf("


\n\n"); printf("\n",seqName); printf("\n",start+1); printf("\n",end); printf("\n",length); printf("\n", lfs->strand); printf("\n", lfs->score); + if ((sameString("Zebrafish", organism)) && ((sameString("bacEndPairs", track)) || (sameString("bacEndSingles", track))) ) { /* print Sanger FPC name (internal name) */ printf("\n", intName); else printf("n/a\n"); /* print associated STS information for this BAC clone */ //printBacStsXRef(clone); } else { printBand(seqName, start, end, TRUE); printf("
Chromosome:%s
Start:%d
End:%d
Length:%d
Strand:%s
Score:%d
Sanger FPC Name:"); if (intName != NULL) printf("%s
\n"); @@ -18658,30 +18689,36 @@ printf("%s\n",lfs->lfNames[i]); } sqlFreeResult(&sr2); } else if (sameString("Dog", organism) || sameString("Zebra finch", organism)) { printf("

lfNames[i]); printf(" TARGET=_BLANK>%s

\n",lfs->lfNames[i]); } else if (trackDbSetting(tdb, "notNCBI")) { printf("

%s

\n", lfs->lfNames[i]); } + else if (trackDbSetting(tdb, "lfPslTable")) + { + printf("

%s

\n",lfs->lfNames[i]); + } else { printf("

%s

\n",lfs->lfNames[i]); } } else { printf("%s\n", lfs->lfNames[i]); } printAlignments(pslList, lfs->lfStarts[i], "htcCdnaAli", lfs->pslTable, lfs->lfNames[i]); htmlHorizontalLine(); pslFreeList(&pslList); } @@ -24095,30 +24132,72 @@ char *qName = cartOptionalString(cart, "qName"); int qs = atoi(cartOptionalString(cart, "qs")); int qe = atoi(cartOptionalString(cart, "qe")); int qWidth = atoi(cartOptionalString(cart, "qWidth")); safef(otherDb, sizeof otherDb, "%s_%s", hubName, otherSpecies); printf("Link to block in other species
\n", otherDb, qName, qs, qe,hubName,trackHubSkipHubName(database)); int qCenter = (qs + qe) / 2; int newQs = qCenter - qWidth/2; int newQe = qCenter + qWidth/2; printf("Link to same window size in other species
\n", otherDb, qName, newQs, newQe,hubName,trackHubSkipHubName(database)); } +bool vsameWords(char *a, va_list args) +/* returns true if a is sameWord as any arg, all args must be char* */ +{ +bool found = FALSE; +char *b; +while ((b = va_arg(args, char *)) != NULL) + { + if sameWord(a, b) + { + found = TRUE; + break; + } + } +return found; +} + +bool sameAltWords(char *a, char *b, ...) +/* returns true if a is sameWord as any of the variables or b is sameWord as any of them */ +{ +va_list args; +va_start(args, b); +bool res = vsameWords(a, args); +va_end(args); + +if (!res && (b != NULL)) + { + va_start(args, b); + res = vsameWords(b, args); + va_end(args); + } +return res; +} + +bool sameWords(char *a, ...) +/* returns true if a is equal to any b */ +{ +va_list args; +va_start(args, a); +bool res = vsameWords(a, args); +va_end(args); +return res; +} void doMiddle() /* Generate body of HTML. */ { char *track = cartString(cart, "g"); char *item = cloneString(cartOptionalString(cart, "i")); char *parentWigMaf = cartOptionalString(cart, "parentWigMaf"); struct trackDb *tdb = NULL; if (hIsGisaidServer()) { validateGisaidUser(cart); } @@ -24195,30 +24274,32 @@ freeMem(typeLine); cartRemove(cart, "parentWigMaf"); /* ONE TIME ONLY USE !!! */ } else { tdb = hashFindVal(trackHash, track); if (tdb == NULL) { if (startsWith("all_mrna", track)) tdb = hashFindVal(trackHash, "mrna"); /* Oh what a tangled web we weave. */ } } } +char* handler = trackDbSetting(tdb, "trackHandler"); + /* Start of 1000+ line dispatch on table involving 100+ if/elses. */ char *table = (tdb ? tdb->table : track); if (sameWord(table, "getDna")) { doGetDna1(); } else if (sameWord(table, "htcGetDna2")) { doGetDna2(); } else if (sameWord(table, "htcGetDna3")) { doGetDna3(); } else if (sameWord(table, "htcGetDnaExtended1")) @@ -24795,31 +24876,35 @@ { doSageDataDisp(table, item, tdb); } else if (sameWord(table, "uniGene_3")) { doUniGene3(tdb, item); } else if (sameWord(table, "vax003") || sameWord(table, "vax004")) { doVax003Vax004(tdb, item); } else if (sameWord(table, "tigrGeneIndex")) { doTigrGeneIndex(tdb, item); } -else if ((sameWord(table, "bacEndPairs")) || (sameWord(table, "bacEndPairsBad")) || (sameWord(table, "bacEndPairsLong")) || (sameWord(table, "bacEndSingles"))) +//else if ((sameWord(table, "bacEndPairs")) || (sameWord(table, "bacEndPairsBad")) || (sameWord(table, "bacEndPairsLong")) || (sameWord(table, "bacEndSingles"))) + //{ + //doLinkedFeaturesSeries(table, item, tdb); + //} +else if (sameAltWords(table, handler, "bacEndPairs", "bacEndPairsBad", "bacEndPairsLong", "bacEndSingles")) { doLinkedFeaturesSeries(table, item, tdb); } else if ((sameWord(table, "fosEndPairs")) || (sameWord(table, "fosEndPairsBad")) || (sameWord(table, "fosEndPairsLong"))) { doLinkedFeaturesSeries(table, item, tdb); } else if ((sameWord(table, "earlyRep")) || (sameWord(table, "earlyRepBad"))) { doLinkedFeaturesSeries(table, item, tdb); } else if (sameWord(table, "cgh")) { doCgh(table, item, tdb); }