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/makeDb/outside/hgGtexExonBed/hgGtexExonBed.c src/hg/makeDb/outside/hgGtexExonBed/hgGtexExonBed.c index 6ed540d..ab6957c 100644 --- src/hg/makeDb/outside/hgGtexExonBed/hgGtexExonBed.c +++ src/hg/makeDb/outside/hgGtexExonBed/hgGtexExonBed.c @@ -1,198 +1,198 @@ /* hgGtexExonBed - Load BED6 tables of per-exon data from NIH Common Fund Exon Tissue Expression (GTEX) Format: chrom, chromStart, chromEnd, name, score, strand, Uses hgFixed data tables loaded via hgGtex */ /* Copyright (C) 2015 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 "verbose.h" #include "options.h" #include "hash.h" #include "jksql.h" #include "hgRelate.h" #include "memgfx.h" #include "basicBed.h" #include "linefile.h" #include "gtexTissue.h" #include "gtexTissueMedian.h" #define GTEX_TISSUE_MEDIAN_TABLE "gtexExonTissueMedian" // Versions are used to suffix tablenames static char *version = "V6"; boolean doLoad = FALSE; boolean trackDb = FALSE; boolean bright = FALSE; char *database, *table; char *tabDir = "."; void usage() /* Explain usage and exit. */ { errAbort( "hgGtexExonBed - Write BED files (one per tissue) of per exon data from GTEX exon data tables.\n" " These will be scored using bedScore on the float score field, then loaded. \n" "usage:\n" " hgGtexExonBed database tableRoot exonCoordsFile\n" "options:\n" " -version=VN (default \'%s\')\n" " -trackDb trackDb only\n" " -bright assign bright colors to tracks\n" , version); } static struct optionSpec options[] = { {"version", OPTION_STRING}, {"trackDb", OPTION_BOOLEAN}, {"bright", OPTION_BOOLEAN}, {NULL, 0}, }; struct hash *parseExons(char *coordsFile) /* Get exon coordinates. * Format: <exonId> <chr> <start+1> <end> <strand> * Tab-separated, lacks 'chr' prefix */ { char *words[6]; struct lineFile *lf = lineFileOpen(coordsFile, TRUE); struct bed *bed = NULL; char buf[64]; struct hash *exonHash = hashNew(0); char *line; while (lineFileNext(lf, &line, NULL)) { int count = chopTabs(line, words); lineFileExpectWords(lf, 5, count); AllocVar(bed); bed->name = words[0]; safef(buf, sizeof(buf), "chr%s", words[1]); bed->chrom = cloneString(buf); bed->chromStart = sqlUnsigned(words[2])-1; bed->chromEnd = sqlUnsigned(words[3]); bed->strand[0] = words[4][0]; hashAdd(exonHash, bed->name, bed); } lineFileClose(&lf); return exonHash; } void hgGtexExonBed(char *database, char *tableRoot, char *coordsFile) /* Main function to load tables*/ { char **row; struct sqlResult *sr; char query[128]; struct sqlConnection *conn = sqlConnect("hgFixed"); struct hash *exonBedHash = NULL; if (!trackDb) { // Read in exon coordinates from GTEX GENCODE-based reference file verbose(2, "Reading exons coordinates from file %s\n", coordsFile); exonBedHash = parseExons(coordsFile); verbose(3, "Found %d exons in coordinate file %s\n", hashNumEntries(exonBedHash), coordsFile); } // Read in tissue info (in id order) from hgFixed table struct gtexTissue *gtexTissues = gtexGetTissues(version); struct gtexTissue *tissue = NULL; char trackDbFile[64]; safef(trackDbFile, sizeof(trackDbFile), "trackDb.%s.ra", tableRoot); FILE *f = fopen(trackDbFile, "w"); FILE **tissueFiles = NULL; AllocArray(tissueFiles, slCount(gtexTissues)); char tissueFile[64]; int i; // Print trackDb fprintf(f, "track gtexExon\n"); fprintf(f, "compositeTrack on\n"); fprintf(f, "shortLabel GTEx Exon\n"); fprintf(f, "longLabel Exon Expression in 53 tissues from GTEx RNA-seq of 2921 samples (214 donors) \n"); fprintf(f, "dragAndDrop subTracks\n"); fprintf(f, "group expression\n"); fprintf(f, "type bed 6\n"); fprintf(f, "subGroup1 tissue Tissue \\\n"); for (i=0, tissue = gtexTissues; tissue != NULL; tissue = tissue->next, i++) { fprintf(f, "\t\t%s=%s %s\n", tissue->name, tissue->name, tissue->next ? "\\": ""); } fprintf(f, "\n"); for (i=0, tissue = gtexTissues; tissue != NULL; tissue = tissue->next, i++) { // create a file for each tissue tissue->name[0] = toupper(tissue->name[0]); safef(tissueFile, sizeof(tissueFile), "%sTissueExonMedian%s", tableRoot, tissue->name); tissue->name[0] = tolower(tissue->name[0]); // TODO: BED file please! if (!trackDb) tissueFiles[i] = hgCreateTabFile(".", tissueFile); // print out to trackDb fprintf(f, "\ttrack %s\n", tissueFile); fprintf(f, "\tparent %sExon\n", tableRoot); fprintf(f, "\tshortLabel %s\n", tissue->name); sqlSafef(query, sizeof(query), "select count(*) from gtexSample where tissue='%s'", tissue->name); int sampleCount = sqlQuickNum(conn, query); fprintf(f, "\tlongLabel Exon Expression in %s from GTEX RNA-seq of %d samples\n", tissue->description, sampleCount); fprintf(f, "\tsubGroups tissue=%s\n", tissue->name); // FIXME struct rgbColor rgb = (struct rgbColor){.r=COLOR_32_BLUE(tissue->color), .g=COLOR_32_GREEN(tissue->color), .b=COLOR_32_RED(tissue->color)}; if (bright) rgb = gtexTissueBrightenColor(rgb); fprintf(f, "\tcolor %d,%d,%d\n", rgb.r, rgb.g, rgb.b); fprintf(f, "\tspectrum on\n"); fprintf(f, "\n"); } fclose(f); if (trackDb) return; // Read median data from hgFixed table and create BEDs verbose(2, "Reading gtexTissueExonMedian table\n"); sqlSafef(query, sizeof(query),"SELECT * from %s%s", GTEX_TISSUE_MEDIAN_TABLE, version); sr = sqlGetResult(conn, query); struct gtexTissueMedian *exonMedians; while ((row = sqlNextRow(sr)) != NULL) { exonMedians = gtexTissueMedianLoad(row); struct bed *bed = hashFindVal(exonBedHash, exonMedians->geneId); for (i=0, tissue = gtexTissues; i<exonMedians->tissueCount; tissue = tissue->next, i++) { if (exonMedians->scores[i] == 0.0) continue; fprintf(tissueFiles[i], "%s\t%d\t%d\t%s\t%d\t%c\t%0.3f\n", bed->chrom, bed->chromStart, bed->chromEnd, exonMedians->geneId, 0, bed->strand[0], exonMedians->scores[i]); } } sqlFreeResult(&sr); sqlDisconnect(&conn); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 4) usage(); version = optionVal("version", version); trackDb = optionExists("trackDb"); bright = optionExists("bright"); hgGtexExonBed(argv[1], argv[2], argv[3]); return 0; }