11f75d3f0d7f476e2988aae6a88e025d113b5eef
hiram
  Fri Aug 1 15:14:04 2014 -0700
change file name joinedRmskClick to rmskJoinedClick.c refs #13706
diff --git src/hg/hgc/joinedRmskClick.c src/hg/hgc/joinedRmskClick.c
deleted file mode 100644
index 41b0f7b..0000000
--- src/hg/hgc/joinedRmskClick.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/* joinedRmskClick - Click handler for joinedRmskTrack.  This is based
- *                   loosely on the original rmsk click handler inside
- *                   of hgc.c.
- *
- *  Written by Robert Hubley 12/2012
- */
-
-/* Copyright (C) 2014 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
-
-#include "common.h"
-#include "hgc.h"
-#include "rmskOut2.h"
-#include "rmskAlign.h"
-#include "rmskJoined.h"
-#include "hCommon.h"
-
-
-void printAlignment (struct rmskAlign *ra)
-/*
- * Print RepeatMasker alignment data stored in RM's cAlign format.
- * The format is basically a lightly compressed diff format where
- * the query and subject are merged into one squence line. The
- * runs of exact matching sequences are interrupted by either
- * single base substitutions annotated as queryBase "/" subjectBase,
- * insertions in the subject annotated as "+ACTAT+", or deletions
- * in the query annotated as "-ACTTTG-".
- */
-{
-int alignLength = 80;
-char querySeq[alignLength + 1];
-char diffSeq[alignLength + 1];
-char subjSeq[alignLength + 1];
-int inSub = 0;
-int inDel = 0;
-int inIns = 0;
-
-int aIdx = 0;
-int sIdx = 0;
-int qCnt = 0;
-int sCnt = 0;
-int qStart = ra->genoStart;
-int sStart = ra->repStart;
-if (ra->strand[0] == '-')
-    sStart = ra->repEnd;
-
-int maxNameLen =
-    (strlen (ra->genoName) >
-     strlen (ra->repName) ? strlen (ra->genoName) : strlen (ra->repName));
-
-while (ra->alignment[aIdx] != '\0')
-    {
-    if (ra->alignment[aIdx] == '/')
-        inSub = 1;
-    else if (ra->alignment[aIdx] == '-')
-        inDel ^= 1;
-    else if (ra->alignment[aIdx] == '+')
-        inIns ^= 1;
-    else
-	{
-	if (inSub)
-	    {
-	    subjSeq[sIdx - 1] = ra->alignment[aIdx];
-	    if ((querySeq[sIdx - 1] == 'C' &&
-		 subjSeq[sIdx - 1] == 'T') ||
-		(querySeq[sIdx - 1] == 'T' &&
-		 subjSeq[sIdx - 1] == 'C') ||
-		(querySeq[sIdx - 1] == 'A' &&
-		 subjSeq[sIdx - 1] == 'G') ||
-		(querySeq[sIdx - 1] == 'G' && subjSeq[sIdx - 1] == 'A'))
-	    diffSeq[sIdx - 1] = 'i';
-	    else if ((index ("BDHVRYKMSWNX", querySeq[sIdx - 1]) != NULL) ||
-		     (index ("BDHVRYKMSWNX", subjSeq[sIdx - 1]) != NULL))
-	        diffSeq[sIdx - 1] = '?';
-	    else
-	        diffSeq[sIdx - 1] = 'v';
-	    inSub = 0;
-	    }
-	else if (inDel)
-	    {
-	    querySeq[sIdx] = ra->alignment[aIdx];
-	    subjSeq[sIdx] = '-';
-	    diffSeq[sIdx] = '-';
-	    qCnt++;
-	    sIdx++;
-	    }
-	else if (inIns)
-	    {
-	    querySeq[sIdx] = '-';
-	    subjSeq[sIdx] = ra->alignment[aIdx];
-	    diffSeq[sIdx] = '-';
-	    sCnt++;
-	    sIdx++;
-	    }
-	else
-	    {
-	    diffSeq[sIdx] = ' ';
-	    querySeq[sIdx] = ra->alignment[aIdx];
-	    subjSeq[sIdx] = ra->alignment[aIdx];
-	    sCnt++;
-	    qCnt++;
-	    sIdx++;
-	    }
-	if (sIdx == alignLength)
-	    {
-	    querySeq[sIdx] = '\0';
-	    diffSeq[sIdx] = '\0';
-	    subjSeq[sIdx] = '\0';
-	    printf ("%*s %10d %s %d\n", maxNameLen, ra->genoName, qStart,
-		    querySeq, (qStart + qCnt - 1));
-	    printf ("%*s            %s\n", maxNameLen, " ", diffSeq);
-	    if (ra->strand[0] == '+')
-	        printf ("%*s %10d %s %d\n", maxNameLen, ra->repName, sStart,
-		    subjSeq, (sStart + sCnt - 1));
-	    else
-	        printf ("%*s %10d %s %d\n", maxNameLen, ra->repName, sStart,
-		    subjSeq, (sStart - sCnt + 1));
-	    printf ("\n");
-	    qStart += qCnt;
-	    if (ra->strand[0] == '+')
-	        sStart += sCnt;
-	    else
-	        sStart -= sCnt;
-	    qCnt = 0;
-	    sCnt = 0;
-	    sIdx = 0;
-	    }
-	}
-    aIdx++;
-    }
-if (sIdx)
-    {
-    querySeq[sIdx] = '\0';
-    diffSeq[sIdx] = '\0';
-    subjSeq[sIdx] = '\0';
-    printf ("%*s %10d %s %d\n", maxNameLen, ra->genoName, qStart, querySeq,
-	    (qStart + qCnt - 1));
-    printf ("%*s            %s\n", maxNameLen, " ", diffSeq);
-    if (ra->strand[0] == '+')
-        printf ("%*s %10d %s %d\n", maxNameLen, ra->repName, sStart, subjSeq,
-	    (sStart + sCnt - 1));
-    else
-        printf ("%*s %10d %s %d\n", maxNameLen, ra->repName, sStart, subjSeq,
-	    (sStart - sCnt + 1));
-    ;
-    }
-}
-
-void printOutTableHeader (char strand)
-/* Print the appropriate HTML table header
- * given the strand of the element.
- */
-{
-const char *hd1_style =
-    "style=\"background-color:#C2C9E0; font-size:14px; padding:4px 14px;\"";
-const char *hd1span_style =
-    "style=\"background-color:#6678B1; font-size:14px; padding:4px 14px;\"";
-const char *hd2_style =
-    "style=\"background-color:#C2C9E0; font-size:14px; padding:4px 14px; "
-    "border-bottom: 2px solid #6678B1;\"";
-printf ("  <thead>\n");
-printf ("    <tr>\n");
-printf ("      <th %s>bit/sw</th>\n", hd1_style);
-printf ("      <th %s>perc</th>\n", hd1_style);
-printf ("      <th %s>perc</th>\n", hd1_style);
-printf ("      <th %s>perc</th>\n", hd1_style);
-printf ("      <th colspan=\"4\" %s>query</th>\n", hd1span_style);
-printf ("      <th %s></th>\n", hd1_style);
-printf ("      <th colspan=\"5\" %s>matching repeat</th>\n", hd1span_style);
-printf ("      <th %s></th>\n", hd1_style);
-printf ("    </tr>\n");
-printf ("    <tr>\n");
-printf ("      <th %s>score</th>\n", hd2_style);
-printf ("      <th %s>div.</th>\n", hd2_style);
-printf ("      <th %s>del.</th>\n", hd2_style);
-printf ("      <th %s>ins.</th>\n", hd2_style);
-printf ("      <th %s>sequence</th>\n", hd2_style);
-printf ("      <th %s>begin</th>\n", hd2_style);
-printf ("      <th %s>end</th>\n", hd2_style);
-printf ("      <th %s>remaining</th>\n", hd2_style);
-printf ("      <th %s>orient.</th>\n", hd2_style);
-printf ("      <th %s>name</th>\n", hd2_style);
-printf ("      <th %s>class/family</th>\n", hd2_style);
-if (strand == 'C')
-    {
-    printf ("      <th %s>remaining</th>\n", hd2_style);
-    printf ("      <th %s>end</th>\n", hd2_style);
-    printf ("      <th %s>begin</th>\n", hd2_style);
-    }
-else
-    {
-    printf ("      <th %s>begin</th>\n", hd2_style);
-    printf ("      <th %s>end</th>\n", hd2_style);
-    printf ("      <th %s>remaining</th>\n", hd2_style);
-    }
-printf ("      <th %s>id</th>\n", hd2_style);
-printf ("    </tr>\n");
-printf ("  </thead>\n");
-}
-
-
-void doJRepeat (struct trackDb *tdb, char *repeat)
-/* Main entry point */
-{
-const char *data_style = "style=\"padding:0px 6px;\"";
-char *table = (tdb ? tdb->table : tdb->track);
-char outTable[64];
-char alignTable[64];
-
-/* Currently using a fixed table name design
- * with support for two datasets ( baseline and current ).
- * The baseline dataset is the run which all the other
- * tracks are based upon.  The current can be any more
- * recent run of RepeatMasker.
- */
-if (startsWith ("rmskJoinedCurrent", table))
-    {
-    strcpy (alignTable, "rmskAlignCurrent");
-    strcpy (outTable, "rmskOutCurrent");
-    }
-else if (startsWith ("rmskJoinedBaseline", table))
-    {
-    strcpy (alignTable, "rmskAlignBaseline");
-    strcpy (outTable, "rmskOutBaseline");
-    }
-
-cartWebStart (cart, database, "%s", tdb->longLabel);
-
-int offset = cartInt (cart, "o");
-if (offset >= 0)
-    {
-    struct sqlConnection *conn2 = hAllocConn (database);
-    struct sqlResult *sr2;
-    char **row;
-    char query[256];
-    char qTable[64];
-    boolean hasBin;
-
-    int start = cartInt (cart, "o");
-
-    if (hTableExists (database, table))
-	{
-	hFindSplitTable (database, seqName, table, qTable, &hasBin);
-	sqlSafef (query, sizeof (query),
-	       "select * from %s where chrom = '%s' and alignStart >= %d"
-	       " and id = %s", qTable, seqName, start-1, repeat);
-
-	sr2 = sqlGetResult (conn2, query);
-	if ((row = sqlNextRow (sr2)) != NULL)
-	    {
-	    struct rmskJoined *rmJoin = rmskJoinedLoad (row + hasBin);
-
-	    char class[32];
-	    class[0] = '\0';
-	    char family[32];
-	    family[0] = '\0';
-	    char *poundPtr = index (rmJoin->name, '#');
-	    if (poundPtr)
-		{
-		// Terminate name string properly
-		safecpy (class, sizeof (class), poundPtr + 1);
-		*poundPtr = '\0';
-		char *slashPtr = index (class, '/');
-		if (slashPtr)
-		    {
-		    // Terminate class string properly
-		    safecpy (family, sizeof (family), slashPtr + 1);
-		    *slashPtr = '\0';
-		    }
-		}
-
-	    printf ("<b>Repeat:</b> %s<br>\n", rmJoin->name);
-	    printf ("<b>Class:</b> %s<br>\n", class);
-	    printf ("<b>Family:</b> %s<br>\n", family);
-	    printf ("<b>Orientation:</b> %s<br>\n", rmJoin->strand);
-	    printf ("<b>Joined Element Genomic Range:</b> %s:%d-%d<br>\n",
-		    rmJoin->chrom, rmJoin->alignStart+1, rmJoin->alignEnd);
-	    printf ("<br><br>\n");
-	    }
-	sqlFreeResult (&sr2);
-	}
-
-    /*
-     * Locate *.out annotation for this element
-     */
-    if (hTableExists (database, outTable))
-	{
-	int isFirst = 0;
-	struct rmskOut2 *ro;
-	hFindSplitTable (database, seqName, outTable, qTable, &hasBin);
-	sqlSafef (query, sizeof (query),
-	       "select * from %s where genoName = '%s' and genoStart >= %d"
-	       " and id = %s", qTable, seqName, start-1, repeat);
-	sr2 = sqlGetResult (conn2, query);
-	printf ("<h4>RepeatMasker Annotation:</h4>\n");
-	printf
-	    ("The RepeatMasker annotation line(s) for this element. "
-	     "If the element is fragmented the output will contain one "
-	     "line per joined fragment.<p>\n");
-	printf ("<table cellspacing=\"0\">\n");
-	while ((row = sqlNextRow (sr2)) != NULL)
-	    {
-	    ro = rmskOut2Load (row + hasBin);
-	    if (!isFirst++)
-	        printOutTableHeader (ro->strand[0]);
-	    printf ("  <tr>\n");
-	    printf ("    <td %s>%d</td>\n", data_style, ro->swScore);
-	    printf ("    <td %s>%3.1f</td>\n", data_style,
-		    (double) ro->milliDiv * (double) 0.01);
-	    printf ("    <td %s>%3.1f</td>\n", data_style,
-		    (double) ro->milliDel * (double) 0.01);
-	    printf ("    <td %s>%3.1f</td>\n", data_style,
-		    (double) ro->milliIns * (double) 0.01);
-	    printf ("    <td %s>%s</td>\n", data_style, ro->genoName);
-	    printf ("    <td %s>%d</td>\n", data_style, ro->genoStart + 1);
-	    printf ("    <td %s>%d</td>\n", data_style, ro->genoEnd);
-	    printf ("    </A>");
-	    printf ("    <td %s>(%d)</td>\n", data_style, ro->genoLeft);
-	    printf ("    <td %s>%s</td>\n", data_style, ro->strand);
-	    printf ("    <td %s>%s</td>\n", data_style, ro->repName);
-	    printf ("    <td %s>%s/%s</td>\n", data_style, ro->repClass,
-		    ro->repFamily);
-	    printf ("    <td %s>%d</td>\n", data_style, ro->repStart);
-	    printf ("    <td %s>%d</td>\n", data_style, ro->repEnd);
-	    printf ("    <td %s>(%d)</td>\n", data_style, ro->repLeft);
-	    printf ("    <td %s>%d</td>\n", data_style, ro->id);
-	    printf ("  <td>\n");
-	    printf ("<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">Browser</A>",
-		    hgTracksPathAndSettings (), database, seqName,
-		    ro->genoStart + 1, ro->genoEnd);
-	    char *tbl = cgiUsualString ("table", cgiString ("g"));
-	    printf
-		(" - <A HREF=\"%s&o=%d&g=getDna&i=%s&c=%s&l=%d&r=%d&"
-		 "strand=%s&table=%s\">"
-		 "DNA</A>\n", hgcPathAndSettings (), ro->genoStart,
-		 (ro->repName != NULL ? cgiEncode (ro->repName) : ""),
-		 seqName, ro->genoStart, ro->genoEnd, cgiEncode (ro->strand),
-		 tbl);
-
-	    printf ("  </td>\n");
-
-	    printf ("  </tr>\n");
-
-	    }
-	sqlFreeResult (&sr2);
-	printf ("</table>\n");
-	}
-
-    printf ("<br><br>\n");
-
-    /*
-     * Locate *.align data for this element
-     */
-    if (hTableExists (database, alignTable))
-	{
-	struct rmskAlign *ro;
-	hFindSplitTable (database, seqName, alignTable, qTable, &hasBin);
-	sqlSafef (query, sizeof (query),
-	       "select * from %s where genoName = '%s' and genoStart >= %d"
-	       " and id = %s", qTable, seqName, start-1, repeat);
-	sr2 = sqlGetResult (conn2, query);
-	printf ("<h4>RepeatMasker Alignments:</h4>\n");
-	printf
-	    ("The raw alignment data used by RepeatMasker to generate "
-	     "the final annotation call for this element. NOTE: The "
-	     "aligned sequence names and consensus positions may differ "
-	     "from the final annotation.<p>\n");
-	printf ("<table>\n");
-	while ((row = sqlNextRow (sr2)) != NULL)
-	    {
-	    ro = rmskAlignLoad (row + hasBin);
-	    printf ("  <tr>\n");
-	    printf ("    <td>%d</td>\n", ro->swScore);
-	    printf ("    <td>%3.2f</td>\n",
-		    (double) ro->milliDiv * (double) 0.01);
-	    printf ("    <td>%3.2f</td>\n",
-		    (double) ro->milliDel * (double) 0.01);
-	    printf ("    <td>%3.2f</td>\n",
-		    (double) ro->milliIns * (double) 0.01);
-	    printf ("    <td>%s</td>\n", ro->genoName);
-	    printf ("    <td>%d</td>\n", ro->genoStart + 1);
-	    printf ("    <td>%d</td>\n", ro->genoEnd);
-	    printf ("    <td>(%d)</td>\n", ro->genoLeft);
-	    printf ("    <td>%s</td>\n", ro->strand);
-	    printf ("    <td>%s</td>\n", ro->repName);
-	    printf ("    <td>%s/%s</td>\n", ro->repClass, ro->repFamily);
-	    if (ro->strand[0] == '-')
-		{
-		printf ("    <td>(%d)</td>\n", ro->repLeft);
-		printf ("    <td>%d</td>\n", ro->repEnd);
-		printf ("    <td>%d</td>\n", ro->repStart);
-		}
-	    else
-		{
-		printf ("    <td>%d</td>\n", ro->repStart);
-		printf ("    <td>%d</td>\n", ro->repEnd);
-		printf ("    <td>(%d)</td>\n", ro->repLeft);
-		}
-	    printf ("    <td>%d</td>\n", ro->id);
-	    printf ("    </tr><tr><td colspan=\"15\"><pre>\n");
-	    printAlignment (ro);
-	    printf ("    </pre><td></tr>\n");
-	    }
-	sqlFreeResult (&sr2);
-	printf ("</table>\n");
-	}
-    hFreeConn (&conn2);
-    }
-printTrackHtml (tdb);
-}