faf767571f701aec7738d97554b4cea24a1aa804 max Fri Mar 27 05:57:53 2015 +0100 Revert "Removing GSAID code. BrianR said that's OK." This reverts commit 324e56bb2fe619534c60a35706fb7bfc188c737f. diff --git src/hg/hgTracks/pslTrack.c src/hg/hgTracks/pslTrack.c index e94c7f6..732de51 100644 --- src/hg/hgTracks/pslTrack.c +++ src/hg/hgTracks/pslTrack.c @@ -284,30 +284,145 @@ lf->end = lf->tallEnd = psl->tEnd; /* Hang on to psl for use in drawing phase (this is why caller must not free psl!): */ lf->original = psl; return lf; } struct linkedFeatures *lfFromPsl(struct psl *psl, boolean isXeno) /* Create a linked feature item from psl. * Don't free psl afterwards! */ { return lfFromPslx(psl, 1, isXeno, FALSE, NULL); } +#ifndef GBROWSE +boolean gsidSelectedSubjListLoaded = FALSE; + +void initializeGsidSubjList() +{ +struct gsidSubj *subj; +struct lineFile *lf; + +char *line; +int lineSize; + +char *subjListFileName; + +if (hIsGisaidServer()) + { + subjListFileName = cartOptionalString(cart, gisaidSubjList); + } +else + { + subjListFileName = cartOptionalString(cart, gsidSubjList); + } +if (subjListFileName) + { + lf = lineFileOpen(subjListFileName, TRUE); + + while (lineFileNext(lf, &line, &lineSize)) + { + AllocVar(subj); + subj->subjId = cloneString(line); + slAddHead(&gsidSelectedSubjList, subj); + } + slReverse(&gsidSelectedSubjList); + lineFileClose(&lf); + gsidSelectedSubjListLoaded = TRUE; + } +} + +/* special processing for GSID entries */ +/* check if the entry belongs to a subject that is selected */ +boolean isSelected(char *seqId) +{ +char query[256]; +struct sqlResult *sr; +char **row; +char *subjId, *testSubjId; +struct sqlConnection *conn; +struct gsidSubj *subj; + +if (!gsidSelectedSubjListLoaded) initializeGsidSubjList(); + +conn= hAllocConn(database); + +if (hIsGsidServer()) + { + sqlSafef(query, sizeof query, "select subjId from gsIdXref where dnaSeqId='%s'", seqId); + } +else + { + sqlSafef(query, sizeof query, "select subjId from gisaidXref where dnaSeqId='%s'", seqId); + } +sr = sqlMustGetResult(conn, query); +row = sqlNextRow(sr); +if (row != NULL) + { + subjId = row[0]; + + /* scan thru subj ID list */ + subj = gsidSelectedSubjList; + while (subj != NULL) + { + testSubjId = subj->subjId; + if (sameWord(subjId, testSubjId)) + { + sqlFreeResult(&sr); + hFreeConn(&conn); + return(TRUE); + } + subj = subj->next; + } + } +sqlFreeResult(&sr); +hFreeConn(&conn); +return(FALSE); +} + +boolean gsidCheckSelected(struct track *tg) +{ +char *setting; +char *subjListFileName; + +/* check subject only if the selectSubject is set to on in trackDb for this track */ +setting = trackDbSetting(tg->tdb, SELECT_SUBJ); +if (isNotEmpty(setting)) + { + if (sameString(setting, "on")) + { + /* return TRUE only if the user has selected the subjects */ + if (hIsGisaidServer()) + { + subjListFileName = strdup(gisaidSubjList); + } + else + { + subjListFileName = gsidSubjList; + } + if (cartOptionalString(cart, subjListFileName)) + { + return(TRUE); + } + } + } +return(FALSE); +} +#endif /* GBROWSE */ + static void connectedLfFromPslsInRange(struct sqlConnection *conn, struct track *tg, int start, int end, char *chromName, boolean isXeno, boolean nameGetsPos, int sizeMul) /* Return linked features from range of table after have * already connected to database.. */ { struct sqlResult *sr = NULL; char **row; int rowOffset; char *optionChrStr; struct linkedFeatures *lfList = NULL, *lf; char optionChr[128]; /* Option - chromosome filter */ char extraWhere[128]; safef( optionChr, sizeof(optionChr), "%s.chromFilter", tg->track);