38df39129282c979360585e60168d2a5b22fcf7c
fanhsu
  Fri Apr 29 15:33:58 2011 -0700
Added RNA picture plotted by VARNA for EvoFold.
diff --git src/hg/hgc/rnaFoldClick.c src/hg/hgc/rnaFoldClick.c
index 504eae0..5bf87f5 100644
--- src/hg/hgc/rnaFoldClick.c
+++ src/hg/hgc/rnaFoldClick.c
@@ -305,30 +305,57 @@
     if ((mcThis = mafMayFindCompSpecies(maf, species[i], '.')) == NULL)
 	continue;
     newOrder[mcCount++] = mcThis;
   }
    
 maf->components = NULL;
 for (i = 0; i < mcCount; i++)
   {
     newOrder[i]->next = 0;
     slAddHead(&maf->components, newOrder[i]);
   }
    
 slReverse(&maf->components);
 }
 
+void htmlPrintSecStrDrawing(FILE *f, struct rnaSecStr *item) 
+{
+char fileName[512];
+struct dnaSeq *seq;
+seq = hChromSeq(database, item->chrom, item->chromStart, item->chromEnd);
+touppers(seq->dna);
+if (item->strand[0] == '-')
+    reverseComplement(seq->dna, seq->size);
+memSwapChar(seq->dna, seq->size, 'T', 'U');
+
+safef(fileName, sizeof(fileName), "/gbdb/%s/evoFold/%s/%s.png", 
+       database, item->chrom, item->name);
+if (fileExists(fileName))
+    {
+    fprintf(f, "<center><h2> RNA secondary structure drawing </h2></center>");
+    fprintf(f,"<B>");
+
+    // Could consider to serve up all EvoFold .png files from our public server in the future
+    // fprintf(f,"<IMG SRC=\"http://genome.ucsc.edu/evoFold/%s/%s/%s.png\" border = '2' ALT=\"ERROR: VARA plotting failed.\"</B><BR>", 
+    fprintf(f,"<IMG SRC=\"../evoFold/%s/%s/%s.png\" border = '2' ALT=\"ERROR: VARA plotting failed.\"</B><BR>", 
+            database, item->chrom, item->name);
+    fprintf(f,"</B>");
+    }    
+
+freeMem(seq);
+}
+
 void doRnaSecStr(struct trackDb *tdb, char *itemName)
 /* Handle click on rnaSecStr type elements. */
 {
 char *table = tdb->table;
 struct sqlConnection *conn = hAllocConn(database);
 struct sqlResult *sr;
 struct rnaSecStr *item;
 char extraWhere[256];
 char **row;
 int  rowOffset = 0;
 char *mafTrack = trackDbRequiredSetting(tdb, "mafTrack");
 int start = cartInt(cart, "o");
 struct mafAli *maf;
 char option[128];
 char *speciesOrder = NULL;
@@ -346,24 +373,29 @@
 item = rnaSecStrLoad(row + rowOffset);
 maf  = mafFromRnaSecStrItem(mafTrack, item);
 
 /* order maf by species */
 safef(option, sizeof(option), "%s.speciesOrder", tdb->track);
 speciesOrder = cartUsualString(cart, option, NULL);
 if (speciesOrder == NULL)
   speciesOrder = trackDbSetting(tdb, "speciesOrder");
 if (speciesOrder)
   mafSortBySpeciesOrder(maf, speciesOrder);
 
 mafAndFoldHeader(stdout);
 htmlPrintMafAndFold(stdout, maf, item->secStr, item->conf, 100);
 
 mafAndFoldLegend(stdout);
+
+/* Draw structure */
+htmlHorizontalLine();
+htmlPrintSecStrDrawing(stdout, item);
+
 /* track specific html */
 printTrackHtml(tdb);
 
 /* clean up */
 mafAliFree(&maf);
 rnaSecStrFree(&item);
 sqlFreeResult(&sr);
 hFreeConn(&conn);
 }