4898794edd81be5285ea6e544acbedeaeb31bf78
max
  Tue Nov 23 08:10:57 2021 -0800
Fixing pointers to README file for license in all source code files. refs #27614

diff --git src/hg/near/hgNear/go.c src/hg/near/hgNear/go.c
index b8a36c4..5f28ce6 100644
--- src/hg/near/hgNear/go.c
+++ src/hg/near/hgNear/go.c
@@ -1,254 +1,254 @@
 /* go - Gene Ontology stuff. */
 
 /* Copyright (C) 2013 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
+ * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "jksql.h"
 #include "cart.h"
 #include "hdb.h"
 #include "hCommon.h"
 #include "obscure.h"
 #include "hgNear.h"
 #include "spDb.h"
 
 
 static boolean goExists(struct column *col, struct sqlConnection *conn)
 /* This returns true if go database and goaPart table exists. */
 {
 boolean gotIt = FALSE;
 col->goConn = sqlMayConnect("go");
 if (col->goConn != NULL)
     {
     gotIt = sqlTableExists(col->goConn, "goaPart");
     if (gotIt)
 	{
     	col->uniProtConn = sqlMayConnect(UNIPROT_DB_NAME);
 	if (col->uniProtConn == NULL)
 	    gotIt = FALSE;
 	}
     }
 return gotIt;
 }
 
 static char *goCellVal(struct column *col, struct genePos *gp, 
    	struct sqlConnection *conn)
 /* Get go terms as comma separated string. */
 {
 struct dyString *dy = dyStringNew(256);
 char *result = NULL;
 struct sqlResult *sr;
 char **row;
 char query[256];
 boolean gotOne = FALSE;
 struct hash *hash = newHash(6);
 
 if (gp->protein != NULL && gp->protein[0] != 0)
     {
     char *proteinAcc = NULL;
     
     if (kgVersion == KG_III)
     	{
     	proteinAcc = spFindAcc(col->uniProtConn, lookupProtein(conn, gp->name));
 	}
     else
     	{
     	proteinAcc = spFindAcc(col->uniProtConn, gp->protein);
         }
     
     if (proteinAcc)
 	{	    
 	sqlSafef(query, sizeof(query), 
 		"select term.name from goaPart,term where goaPart.%s = '%s' and goaPart.goId = term.acc", col->goaIdColumn, proteinAcc);
 	sr = sqlGetResult(col->goConn, query);
 	while ((row = sqlNextRow(sr)) != NULL)
 	    {
 	    char *name = row[0];
 	    if (!hashLookup(hash, name))
 		{
 		hashAdd(hash, name, NULL);
 		gotOne = TRUE;
 		dyStringAppend(dy, "'");
 		dyStringAppend(dy, name);
 		dyStringAppend(dy, "'");
 		dyStringAppendC(dy, ',');
 		}
 	    }
 	sqlFreeResult(&sr);
 	}
     }
 if (gotOne)
     result = cloneString(dy->string);
 dyStringFree(&dy);
 return result;
 }
 
 static void goCellPrint(struct column *col, struct genePos *gp, 
    	struct sqlConnection *conn)
 /* Get go terms as comma separated string. */
 {
 struct sqlResult *sr;
 char **row;
 char query[256];
 boolean gotOne = FALSE;
 struct hash *hash = newHash(6);
 
 hPrintf("<TD>");
 if (gp->protein != NULL && gp->protein[0] != 0)
     {
     char *proteinAcc = NULL;
     
     if (kgVersion == KG_III)
     	{
     	proteinAcc = spFindAcc(col->uniProtConn, lookupProtein(conn, gp->name));
 	}
     else
     	{
     	proteinAcc = spFindAcc(col->uniProtConn, gp->protein);
         }
     if (proteinAcc)
 	{	    
 	sqlSafef(query, sizeof(query), 
 		"select term.name,term.acc from goaPart,term "
 		"where goaPart.%s = '%s' "
 		"and goaPart.goId = term.acc", 
 		col->goaIdColumn, proteinAcc);
 	sr = sqlGetResult(col->goConn, query);
 	while ((row = sqlNextRow(sr)) != NULL)
 	    {
 	    char *name = row[0];
 	    if (!hashLookup(hash, name))
 		{
 		hashAdd(hash, name, NULL);
 		if (!gotOne)
 		    gotOne = TRUE;
 		else
 		    hPrintf("&nbsp;");
 		hPrintf("'");
 		
 		hPrintf("<A HREF=\"http://amigo.geneontology.org/cgi-bin/amigo/go.cgi?view=details&search_constraint=terms&depth=0&query=%s\" TARGET=_blank>", row[1]);
 		// hPrintf("<A HREF=\"http://www.ebi.ac.uk/ego/GSearch?query=%s&mode=id\" TARGET=_blank>", row[1]);
 		// hPrintf("<A HREF=\"http://www.ebi.ac.uk/ego/DisplayGoTerm?id=%s&viz=tree\" TARGET=_blank>", row[1]);
 
 		hPrintEncodedNonBreak(row[0]);
 		hPrintf("</A>");
 		hPrintf("'");
 		}
 	    }
 	sqlFreeResult(&sr);
 	}
     }
 if (!gotOne)
     hPrintf("n/a");
 hPrintf("</TD>");
 }
 
 static struct genePos *goAdvFilter(struct column *col, 
 	struct sqlConnection *conn, struct genePos *list)
 /* Do advanced filter on position. */
 {
 char *searchString = advFilterVal(col, "terms");
 if (searchString != NULL )
     {
     char query[256];
     struct sqlResult *sr;
     char **row;
     boolean orLogic = advFilterOrLogic(col, "logic", FALSE);
     struct slName *term, *termList = stringToSlNames(searchString);
     struct hash *proteinHash = newHash(16); /* protein IDs of matching terms. */
     struct hash *prevHash = NULL;
     struct genePos *newList = NULL, *gp, *next;
 
     /* First make hash of protein's of terms that match. */
     for (term = termList; term != NULL; term = term->next)
 	{
 	if (startsWith("GO:", term->name))
 	    {
 	    sqlSafef(query, sizeof(query),
 		"select %s from goaPart "
 		"where goId = '%s'", col->goaIdColumn, term->name);
 	    }
 	else
 	    {
 	    sqlSafef(query, sizeof(query), 
 		    "select goaPart.%s from goaPart,term "
 		    "where term.name = '%s' and term.acc = goaPart.goId"
 		    , col->goaIdColumn, term->name);
 	    }
 	sr = sqlGetResult(col->goConn, query);
 	while ((row = sqlNextRow(sr)) != NULL)
 	    {
 	    if (prevHash == NULL || hashLookup(prevHash, row[0]) != NULL)
                 {
 		hashStore(proteinHash, row[0]);
 		}
 	    }
 	sqlFreeResult(&sr);
 
 	if (!orLogic)
 	    {
 	    hashFree(&prevHash);
 	    if (term->next != NULL)
 		{
 		prevHash = proteinHash;
 		proteinHash = newHash(17);
 		}
 	    }
 	}
 
     /* Now whittle down list to only include those with correct protein. */
     for (gp = list; gp != NULL; gp = next)
 	{
 	next = gp->next;
         char *proteinAcc;
     
         if (kgVersion == KG_III)
     	    {
     	    proteinAcc = spFindAcc(col->uniProtConn, lookupProtein(conn, gp->name));
 	    }
         else
     	    {
     	    proteinAcc = spFindAcc(col->uniProtConn, gp->protein);
             }
 
         if (proteinAcc && hashLookup(proteinHash, proteinAcc))
              {
              slAddHead(&newList, gp);
              }
 	}
     slReverse(&newList);
     list = newList;
     hashFree(&prevHash);
     hashFree(&proteinHash);
     slFreeList(&termList);
     }
 return list;
 }
 
 static void goFilterControls(struct column *col, struct sqlConnection *conn)
 /* Print out controls for advanced filter. */
 {
 hPrintf("<A HREF=\"%s\">", "http://www.geneontology.org");
 hPrintf("Gene Ontology</A> search.  Enclose term in single quotes if it "
         "contains multiple words.<BR>You may search with IDs (<em>e.g.</em> "
 	"GO:0005884) as well as terms (<em>e.g.</em> 'actin filament').<BR>");
 hPrintf("Term(s): ");
 advFilterRemakeTextVar(col, "terms", 35);
 hPrintf(" Include if ");
 advFilterAnyAllMenu(col, "logic", FALSE);
 hPrintf("terms match");
 }
 
 void setupColumnGo(struct column *col, char *parameters)
 /* Set up gene ontology column. */
 {
 col->exists = goExists;
 col->cellVal = goCellVal;
 col->cellPrint = goCellPrint;
 col->filterControls = goFilterControls;
 col->advFilter = goAdvFilter;
 col->goaIdColumn = columnRequiredSetting(col, "goaIdColumn");
 }