src/hg/hgc/hgc.c 1.1618
1.1618 2010/05/01 04:44:16 markd
include link back to browser in tables of PSL. also fix corner case on PAR were link to wrong chrom
Index: src/hg/hgc/hgc.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgc/hgc.c,v
retrieving revision 1.1617
retrieving revision 1.1618
diff -b -B -U 4 -r1.1617 -r1.1618
--- src/hg/hgc/hgc.c 30 Apr 2010 21:24:50 -0000 1.1617
+++ src/hg/hgc/hgc.c 1 May 2010 04:44:16 -0000 1.1618
@@ -5126,36 +5126,46 @@
hFreeConn(&conn);
hFreeConn(&conn2);
}
+static boolean isPslToPrintByClick(struct psl *psl, int startFirst, boolean isClicked)
+/* Determine if a psl should be printed based on if it was or was not the one that was clicked
+ * on.
+ */
+{
+return ((psl->tStart == startFirst) && sameString(psl->tName, seqName)) == isClicked;
+}
+
void printAlignmentsSimple(struct psl *pslList, int startFirst, char *hgcCommand,
char *typeName, char *itemIn)
/* Print list of mRNA alignments, don't add extra textual link when
* doesn't honor hgcCommand. */
{
struct psl *psl;
int aliCount = slCount(pslList);
-boolean same;
+boolean isClicked;
if (pslList == NULL || typeName == NULL)
return;
if (aliCount > 1)
printf("The alignment you clicked on is first in the table below.<BR>\n");
printf("<PRE><TT>");
if (startsWith("chr", pslList->tName))
- printf(" SIZE IDENTITY CHROMOSOME STRAND START END QUERY START END TOTAL\n");
+ printf("BROWSER | SIZE IDENTITY CHROMOSOME STRAND START END QUERY START END TOTAL\n");
else
- printf(" SIZE IDENTITY SCAFFOLD STRAND START END QUERY START END TOTAL\n");
-printf("--------------------------------------------------------------------------------------------\n");
-for (same = 1; same >= 0; same -= 1)
+ printf("BROWSER | SIZE IDENTITY SCAFFOLD STRAND START END QUERY START END TOTAL\n");
+printf("-----------------------------------------------------------------------------------------------------\n");
+for (isClicked = 1; isClicked >= 0; isClicked -= 1)
{
for (psl = pslList; psl != NULL; psl = psl->next)
{
- if (same ^ (psl->tStart != startFirst))
+ if (isPslToPrintByClick(psl, startFirst, isClicked))
{
char otherString[512];
- sprintf(otherString, "%d&aliTrack=%s", psl->tStart, typeName);
+ safef(otherString, sizeof(otherString), "%d&aliTrack=%s", psl->tStart, typeName);
+ printf("<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">browser</A> | ",
+ hgTracksPathAndSettings(), database, psl->tName, psl->tStart+1, psl->tEnd);
hgcAnchorSomewhere(hgcCommand, itemIn, otherString, psl->tName);
printf("%5d %5.1f%% %9s %s %9d %9d %20s %5d %5d %5d</A>",
psl->match + psl->misMatch + psl->repMatch,
100.0 - pslCalcMilliBad(psl, TRUE) * 0.1,
@@ -5183,8 +5193,9 @@
&&
!startsWith("xeno", typeName)
&& !(startsWith("user", typeName) && pslIsProtein(psl))
&& psl->tStart == startFirst
+ && sameString(psl->tName, seqName)
)
{
char otherString[512];
safef(otherString, sizeof(otherString), "%d&aliTrack=%s",
@@ -6500,10 +6510,10 @@
}
/* Look up alignments in database */
hFindSplitTable(database, seqName, type, table, &hasBin);
-sprintf(query, "select * from %s where qName = '%s' and tStart=%d",
- table, acc, start);
+sprintf(query, "select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d",
+ table, acc, seqName, start);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) == NULL)
errAbort("Couldn't find alignment for %s at %d", acc, start);
psl = pslLoad(row+hasBin);
@@ -6634,10 +6644,10 @@
{
/* Look up alignments in database */
hFindSplitTable(database, seqName, track, table, &hasBin);
safef(query, sizeof(query),
- "select * from %s where qName = '%s' and tStart=%d",
- table, acc, start);
+ "select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d",
+ table, acc, seqName, start);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) == NULL)
errAbort("Couldn't find alignment for %s at %d", acc, start);
wholePsl = pslLoad(row+hasBin);
@@ -18546,9 +18556,9 @@
/* Show protein to translated dna alignment for accession. */
{
char startBuf[64], endBuf[64];
int start = cartInt(cart, "o");
-boolean same;
+boolean isClicked;
struct psl *psl = 0;
struct sqlResult *sr = NULL;
struct sqlConnection *conn = hAllocConn(database);
char query[256], **row;
@@ -18704,13 +18714,13 @@
printf("<P>The alignment you clicked on is first in the table below.<BR>\n");
printf("<TT><PRE>");
printf("ALIGNMENT PEPTIDE COVERAGE IDENTITY START END EXTENT STRAND LINK TO BROWSER \n");
printf("--------------------------------------------------------------------------------\n");
-for (same = 1; same >= 0; same -= 1)
+for (isClicked = 1; isClicked >= 0; isClicked -= 1)
{
for (psl = pslList; psl != NULL; psl = psl->next)
{
- if (same ^ (psl->tStart != start))
+ if (isPslToPrintByClick(psl, start, isClicked))
{
printf("<A HREF=\"%s&o=%d&g=htcProteinAli&i=%s&c=%s&l=%d&r=%d&db=%s&aliTrack=%s&pred=%s\">",
hgcPathAndSettings(), psl->tStart, psl->qName, psl->tName,
psl->tStart, psl->tEnd, database,tdb->tableName, pred);
@@ -18730,9 +18740,9 @@
tdb->tableName, itemName);
sprintLongWithCommas(startBuf, psl->tStart + 1);
sprintLongWithCommas(endBuf, psl->tEnd);
printf("%s:%s-%s</A> <BR>",psl->tName,startBuf, endBuf);
- if (same)
+ if (isClicked)
printf("\n");
}
}
}