0735f90654447d1aad66609d7eafae8b8f8bd4ef
hartera
  Tue Apr 23 13:15:16 2013 -0700
Made changes to RetroFinder details page to tidy up presentation and also to make the text more intuitive to the user.
diff --git src/hg/hgc/retroClick.c src/hg/hgc/retroClick.c
index 1ab2ca9..5be10a0 100644
--- src/hg/hgc/retroClick.c
+++ src/hg/hgc/retroClick.c
@@ -179,70 +179,79 @@
 static void displaySrcGene(struct sqlConnection *conn, struct mappingInfo *mi)
 /* display information about the source gene that was mapped */
 {
 char srcGeneUrl[1024];
 
 /* description will be NULL if deleted */
 if (!startsWith("retroAugust",mi->geneSet))
     getGenbankInfo(conn, mi);
 
 /* construct URL to browser */
 safef(srcGeneUrl, sizeof(srcGeneUrl),
       "../cgi-bin/hgTracks?db=%s&position=%s:%d-%d",
        database, mi->pg->gChrom, mi->pg->gStart, mi->pg->gEnd);
 
 printf("<TABLE class=\"transMap\">\n");
-printf("<CAPTION>Source gene</CAPTION>\n");
+printf("<H3>Source Gene:</H3>\n");
 printf("<TBODY>\n");
 printf("<TD CLASS=\"transMapNoWrap\"><A HREF=\"%s\" target=_blank>%s</A>", srcGeneUrl, mi->pg->name);
 if (mi->desc == NULL)
-    printf("<TD>&nbsp;<TD>gene no longer in source database");
+    printf("<TD>&nbsp;<TD>Gene no longer in source database");
 else
     printf("<TD>%s<TD>%s", mi->sym, mi->desc);
 printf("</TR>\n");
 printf("</TBODY></TABLE>\n");
 }
 
 
 static void displayRetroDetails(struct sqlConnection *conn, struct mappingInfo *mi)
 /* display information from a retroXXXInfo table */
 {
 struct ucscRetroInfo *pg = mi->pg;
 char query[256];
 char orthoTable[128];
+char orgDb[128];
+char *org;
+
 if (mi->suffix != NULL && strlen(mi->suffix) > 0)
     safef(orthoTable, sizeof(orthoTable), "%s%sOrtho%s", 
             mi->tblPre, mi->geneSet, mi->suffix);
 else
     safef(orthoTable, sizeof(orthoTable), "%s%sOrtho", 
             mi->tblPre, mi->geneSet);
 
 printf("<TABLE class=\"transMap\">\n");
+printf("<H3>Breaks in Orthology:</H3>\n");
 printf("<THEAD>\n");
-printf("<TR><TH>Orthology (net) Break<TH>Coverage %%</TR>\n");
+printf("<TR><TH>Organism<TH>%% Coverage</TR>\n");
 printf("</THEAD><TBODY>\n");
 if (hTableExists(database, orthoTable))
     {
     struct sqlResult *sr;
     char **row;
     safef(query, sizeof(query), "select * from %s where name = '%s' ", 
             orthoTable, pg->name);
     sr = sqlGetResult(conn, query);
     while ((row = sqlNextRow(sr)) != NULL)
         {
         struct ucscRetroOrtho *puro = ucscRetroOrthoLoad(row);
-        printf("<TR><TH>%s ", puro->db);
+        /* get substring after "net" prefix and convert first char to lower
+           case then get organism name */
+        safecpy(orgDb, sizeof(orgDb), puro->db+3);
+        orgDb[0] = tolower(orgDb[0]);
+        org = hOrganism(orgDb);
+        printf("<TR><TH>%s (%s) ", org, orgDb);
         printf("<TD>%d</TR>\n", puro->overlap);
         }
     sqlFreeResult(&sr);
     }
 else
     printf("<TR><TH>table %s not found </TR>", orthoTable);
 printf("</TBODY></TABLE>\n");
 }
 
 static struct psl *loadPslRangeT(char *table, char *qName, char *tName, int tStart, int tEnd)
 /* Load a list of psls given qName tName tStart tEnd */
 {
 struct sqlResult *sr = NULL;
 char **row;
 struct psl *psl = NULL, *pslList = NULL;
@@ -501,44 +510,44 @@
 char scoreSql[128];
 struct psl *psl;
 float coverFactor = 0;
 float maxOverlap = 0;
 if (mi->suffix == NULL)
     {
     safef(alignTbl, sizeof(alignTbl), "%s%sAli", mi->tblPre, mi->geneSet);
     safef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo", mi->tblPre, mi->geneSet);
     }
 else
     {
     safef(alignTbl, sizeof(alignTbl), "%s%sAli%s", mi->tblPre, mi->geneSet, mi->suffix);
     safef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo%s", mi->tblPre, mi->geneSet, mi->suffix);
     }
 printf("<TABLE class=\"transMap\">\n");
-printf("<CAPTION>Retrogene stats</CAPTION>\n");
+printf("<H3>Retrogene Statistics:</H3>\n");
 printf("<THEAD>\n");
 printf("<TR><TH>Feature<TH>Value </TR>\n");
 printf("</THEAD><TBODY>\n");
 if (sameString(pg->type, "singleExon"))
     printf("<TR><TH>Type of Parent<TD>%s</tr>\n",pg->type);
 else 
     printf("<TR><TH>Expression of Retrocopy<TD>%s</TR>\n",pg->type);
 printf("<TR><TH>Score <TD>%d (range from 0 - %d)</TR>\n",  
         pg->score,
         sqlQuickNum(conn, scoreSql) );
-printf("<TR><TH>Alignment Coverage of parent gene (Bases&nbsp;matching Parent) <TD>%d %% &nbsp;(%d bp) </TR>\n", pg->coverage, pg->matches);
-printf("<TR><TH>Introns Procesed Out <TD>%d out of %d (%d exons covered)\n", pg->processedIntrons, (pg->parentSpliceCount/2), pg->exonCover);
-printf("<TR><TH>Possible Introns (or gaps) in Retro<TD>%d + %d\n", pg->intronCount, pg->alignGapCount);
+printf("<TR><TH>Parent Gene Alignment Coverage (Bases&nbsp;Matching Parent) <TD>%d %% &nbsp;(%d bp) </TR>\n", pg->coverage, pg->matches);
+printf("<TR><TH>Introns Processed Out <TD>%d out of %d (%d exons covered)\n", pg->processedIntrons, (pg->parentSpliceCount/2), pg->exonCover);
+printf("<TR><TH>Possible Introns or Gaps in Retrogene<TD>%d,%d\n", pg->intronCount, pg->alignGapCount);
 printf("<TR><TH>Conserved Splice Sites<TD>%d</TR>\n",  pg->conservedSpliceSites);
 printf("<TR><TH>Parent Splice Sites<TD>%d</TR>\n",  pg->parentSpliceCount);
 psl = getAlignments(conn, alignTbl, mi->pg->name);
 if (psl != NULL)
     {
     maxOverlap = (float)pg->maxOverlap/(float)(psl->match+psl->misMatch+psl->repMatch)  ;
     coverFactor = ((float)(psl->qSize-psl->qEnd)/(float)psl->qSize);
     }
 else 
     {
     maxOverlap = 0;
     }
 wt[0] = 0; wt[1] = 0.85; wt[2] = 0.2; wt[3] = 0.3; wt[4] = 0.8; 
 wt[5] = 1; wt[6] = 1  ; wt[7] = 0.5; wt[8] = 0.5; wt[9] = 1; wt[10] = 1;
 #ifdef debug
@@ -546,42 +555,42 @@
 struct psl *pslList = getParentAligns(conn, mi, &table);
 if (psl != NULL)
     {
     printf("<TR><TH>Blocks in retro:gap%%/intronsSpliced <TD>\n");
     printBlocks(psl, MAXBLOCKGAP, pslList);
     printf("</td></TR>\n");  
     }
 if (pslList != NULL)
     {
     printf("<TR><TH>Exons in parent:gap%% <TD>\n");
     printBlocks(pslList, MAXBLOCKGAP, NULL);
     printf("</td></TR>\n");  
     pslFreeList(&pslList);
     }
 #endif
-printf("<TR><TH>Length of PolyA Tail<TD>%d As&nbsp;out&nbsp;of&nbsp;%d&nbsp;bp </TR><TR><TH>PolyA Tail %% A's(position)<TD>%5.1f&nbsp;%%\n",pg->polyA,pg->polyAlen, (float)pg->polyA*100/(float)pg->polyAlen);
+printf("<TR><TH>Length of PolyA Tail<TD>%d As&nbsp;out&nbsp;of&nbsp;%d&nbsp;bp </TR><TR><TH>%% A's from Parent PolyA tail (Position)<TD>%5.1f&nbsp;%%\n",pg->polyA,pg->polyAlen, (float)pg->polyA*100/(float)pg->polyAlen);
 if (pg->polyAstart < 0)
     printf("&nbsp;(%d&nbsp;bp&nbsp;before&nbsp;end&nbsp;of&nbsp;retrocopy)<br>\n",-(pg->polyAstart));
 else
     printf("&nbsp;(%d&nbsp;bp&nbsp;past&nbsp;end&nbsp;of&nbsp;retrocopy)<br>\n",pg->polyAstart);
 
-printf("<tr><th>mRNA expression evidence<td>");
+printf("<tr><th>mRNA Expression Evidence<td>");
 if (!sameString(pg->overName, "none"))
     printf("%s&nbsp;(overlap:&nbsp;&nbsp;%d&nbsp;bp)\n", pg->overName, pg->maxOverlap);
 else
     printf("No&nbsp;overlapping");
-printf("<TR><TH>bestorf score (>50 is good)<TD>%4.0f</td></TR>\n",pg->posConf);
+printf("<TR><TH>BESTORF Score (>50 is good)<TD>%4.0f</td></TR>\n",pg->posConf);
 #ifdef score
 printf("<TR><TH>score function<TD>1:xon %d %4.1f conSS %d 2: ax %4.1f 3: pA %4.1f 4: net + %4.1f max (%d, %d) 5: procIntrons %d %4.1f 6:in.cnt %d -%4.1f 7:overlap - %4.1f  8:cov %d*(qe %d- qsz %d)/%d=%4.1f 9:tRep - %4.1f 10:oldintron %d %4.1f </td></TR>\n",
                 pg->exonCover,
                 wt[1]*(log(pg->exonCover+1)/log(2))*200 , 
                 pg->conservedSpliceSites,
                 wt[2]*(((log(pg->axtScore>0?pg->axtScore:1)/log(2))*170)-1000),
                 wt[3]*(log(pg->polyAlen+2)*200) ,
                 wt[4]*overlapOrtholog*10 , pg->overlapMouse, pg->overlapDog,
                 pg->processedIntrons,
                 wt[5]*(((log(pg->processedIntrons > 0 ? pg->processedIntrons : 1))/log(2))*600) ,
                 pg->intronCount, 
                 wt[6]*pow(pg->intronCount,0.5)*750 ,
                 wt[7]*(maxOverlap*300),
                 pg->coverage, pg->qEnd, pg->qSize , pg->qSize,
                 wt[8]*((pg->coverage/100.0)*(1.0-coverFactor)*300.0),