34b850ae144d1c2156abe6ec230c2d2ae992cf6f
braney
Thu Aug 6 15:51:57 2015 -0700
more polish for bigPsl support. hgc alignments work now #14241
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 7829e9d..86945e6 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -2865,48 +2865,32 @@
struct psl* pslList;
char *fileName = bbiNameFromSettingOrTable(tdb, conn, tdb->table);
struct bbiFile *bbi = bigBedFileOpen(fileName);
struct lm *lm = lmInit(0);
int ivStart = start, ivEnd = end;
if (start == end)
{
// item is an insertion; expand the search range from 0 bases to 2 so we catch it:
ivStart = max(0, start-1);
ivEnd++;
}
struct bigBedInterval *bbList = bigBedIntervalQuery(bbi, seqName, ivStart, ivEnd, 0, lm);
pslList = pslFromBigPsl(seqName, bbList, hChromSize(database, seqName), NULL, NULL);
-/* check if there is an alignment available for this sequence. This checks
- * both genbank sequences and other sequences in the seq table. If so,
- * set it up so they can click through to the alignment. */
-if ( 1) //hGenBankHaveSeq(database, item, NULL))
- {
printf("
%s/Genomic Alignments
", item);
- /*
- if (sameString("protein", subType))
- printAlignments(pslList, start, "htcProteinAli", tdb->table, item);
- else
- */
- printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
- }
-else
- {
- /* just dump the psls */
- pslDumpHtml(pslList);
- }
+printAlignments(pslList, start, "htcBigPslAli", tdb->table, item);
pslFreeList(&pslList);
printItemDetailsHtml(tdb, item);
}
void genericPslClick(struct sqlConnection *conn, struct trackDb *tdb,
char *item, int start, char *subType)
/* Handle click in generic psl track. */
{
struct psl* pslList = getAlignments(conn, tdb->table, item);
/* check if there is an alignment available for this sequence. This checks
* both genbank sequences and other sequences in the seq table. If so,
* set it up so they can click through to the alignment. */
if (hGenBankHaveSeq(database, item, NULL))
{
@@ -6982,30 +6966,76 @@
}
else
{
struct trackDb *tdb = hashMustFindVal(trackHash, trackTable);
char *cdsTable = trackDbSetting(tdb, "cdsTable");
if (isNotEmpty(cdsTable) && hTableExists(database, cdsTable))
{
sqlSafef(query, sizeof(query), "select cds from %s where id = '%s'", cdsTable, acc);
char *cdsString = sqlQuickString(conn, query);
if (isNotEmpty(cdsString))
genbankParseCds(cdsString, retCdsStart, retCdsEnd);
}
}
}
+void htcBigPslAli(char *acc)
+/* Show alignment for accession in bigPsl file. */
+{
+struct psl *psl;
+char *aliTable;
+int start;
+unsigned int cdsStart = 0, cdsEnd = 0;
+
+
+/* Print start of HTML. */
+writeFramesetType();
+puts("");
+aliTable = cartString(cart, "aliTable");
+tdb = hashFindVal(trackHash, aliTable);
+printf("\n%s vs Genomic [%s]\n\n\n", acc, aliTable);
+
+/* Get some environment vars. */
+start = cartInt(cart, "l");
+int end = cartInt(cart, "r");
+char *chrom = cartString(cart, "c");
+
+char *seq, *cdsString = NULL;
+struct lm *lm = lmInit(0);
+char *fileName = bbiNameFromSettingOrTable(tdb, NULL, tdb->table);
+struct bbiFile *bbi = bigBedFileOpen(fileName);
+struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm);
+char *bedRow[32];
+char startBuf[16], endBuf[16];
+for (bb = bbList; bb != NULL; bb = bb->next)
+ {
+ bigBedIntervalToRow(bb, seqName, startBuf, endBuf, bedRow, ArraySize(bedRow));
+ struct bed *bed = bedLoadN(bedRow, 12);
+ if (sameString(bed->name, acc))
+ {
+ bb->next = NULL;
+ break;
+ }
+ }
+psl = pslFromBigPsl(seqName, bb, hChromSize(database, seqName), &seq, &cdsString);
+genbankParseCds(cdsString, &cdsStart, &cdsEnd);
+
+
+struct dnaSeq *rnaSeq = newDnaSeq(seq, strlen(seq), acc);
+showSomeAlignment(psl, rnaSeq, gftRna, 0, rnaSeq->size, NULL, cdsStart, cdsEnd);
+}
+
void htcCdnaAli(char *acc)
/* Show alignment for accession. */
{
char query[256];
char table[64];
char accTmp[64];
struct sqlConnection *conn;
struct sqlResult *sr;
char **row;
struct psl *psl;
struct dnaSeq *rnaSeq;
char *aliTable;
int start;
unsigned int cdsStart = 0, cdsEnd = 0;
boolean hasBin;
@@ -24618,33 +24648,39 @@
}
struct customTrack *ct = NULL;
if (isCustomTrack(track))
{
struct customTrack *ctList = getCtList();
for (ct = ctList; ct != NULL; ct = ct->next)
if (sameString(track, ct->tdb->track))
break;
}
if ((!isCustomTrack(track) && dbIsFound)
|| ((ct!= NULL) && (ct->dbTrackType != NULL) && sameString(ct->dbTrackType, "maf")))
{
trackHash = makeTrackHashWithComposites(database, seqName, TRUE);
- if (isHubTrack(track))
+ if (sameString("htcBigPslAli", track) )
+ {
+ char *aliTable = cartString(cart, "aliTable");
+ if (isHubTrack(aliTable))
+ tdb = hubConnectAddHubForTrackAndFindTdb( database, aliTable, NULL, trackHash);
+ }
+ else if (isHubTrack(track))
{
- hubConnectAddHubForTrackAndFindTdb( database, track, NULL, trackHash);
+ tdb = hubConnectAddHubForTrackAndFindTdb( database, track, NULL, trackHash);
}
if (parentWigMaf)
{
int wordCount, i;
char *words[16];
char *typeLine;
char *wigType = needMem(128);
tdb = hashFindVal(trackHash, parentWigMaf);
if (!tdb)
errAbort("can not find trackDb entry for parentWigMaf track %s.",
parentWigMaf);
typeLine = cloneString(tdb->type);
wordCount = chopLine(typeLine, words);
if (wordCount < 1)
errAbort("trackDb entry for parentWigMaf track %s has corrupt type line.",
@@ -25304,30 +25340,34 @@
{
doCgh(table, item, tdb);
}
else if (sameWord(table, "mcnBreakpoints"))
{
doMcnBreakpoints(table, item, tdb);
}
else if (sameWord(table, "htcChainAli"))
{
htcChainAli(item);
}
else if (sameWord(table, "htcChainTransAli"))
{
htcChainTransAli(item);
}
+else if (sameWord(table, "htcBigPslAli"))
+ {
+ htcBigPslAli(item);
+ }
else if (sameWord(table, "htcCdnaAli"))
{
htcCdnaAli(item);
}
else if (sameWord(table, "htcUserAli"))
{
htcUserAli(item);
}
else if (sameWord(table, "htcGetBlastPep"))
{
doGetBlastPep(item, cartString(cart, "aliTable"));
}
else if (sameWord(table, "htcProteinAli"))
{
htcProteinAli(item, cartString(cart, "aliTable"));