static struct slName *setup_labels(char *long_form, struct slName *bw_list, struct slName **labels_from_bw_list) { struct slName *lf_labels = NULL; if (long_form && !sameString(long_form, "on")) /* first check labels from CL */ { lf_labels = slNameListFromComma(long_form); int num_labels = slCount(lf_labels); if (num_labels != slCount(bw_list)) errAbort("number of labels provided should equal the number of bigWigs given"); } /* from file */ else { if (*labels_from_bw_list) { if (slCount(*labels_from_bw_list) == slCount(bw_list)) lf_labels = *labels_from_bw_list; else slNameFreeList(labels_from_bw_list); } if (!lf_labels) lf_labels = slNameCloneList(bw_list); } return lf_labels; }
static void getVar(struct cartJson *cj, struct hash *paramHash) /* Print out the requested cart var(s). varString may be a comma-separated list. * If a var is a list variable, prints out a list of values for that var. */ { char *varString = cartJsonRequiredParam(paramHash, "var", cj->jw, "get"); if (! varString) return; struct slName *varList = slNameListFromComma(varString), *var; for (var = varList; var != NULL; var = var->next) { if (cartListVarExists(cj->cart, var->name)) { // Use cartOptionalSlNameList and return a list: struct slName *valList = cartOptionalSlNameList(cj->cart, var->name); jsonWriteSlNameList(cj->jw, var->name, valList); slFreeList(&valList); } else { // Regular single-value variable (or not in the cart): char *val = cartOptionalString(cj->cart, var->name); //#*** TODO: move jsonStringEscape inside jsonWriteString char *encoded = jsonStringEscape(val); jsonWriteString(cj->jw, var->name, encoded); freeMem(encoded); } } slFreeList(&varList); }
void doMiddle(struct cart *theCart) /* Set up globals and make web page */ { char *database = cgiOptionalString("db"); char *rtdbServer = cfgOption("rtdb.server"); char *rtdbPort = cfgOption("rtdb.port"); char *rtdbChoices = cfgOption("rtdb.databases"); struct slName *dbs = slNameListFromComma(rtdbChoices); cart = theCart; cartWebStart(cart, database, "MGC RTDB Update"); if (!rtdbServer) errAbort("rtdb.update not defined in the hg.conf file. " "Chances are this CGI isn't meant for this machine."); if (!rtdbPort) errAbort("rtdb.update not defined in the hg.conf file. " "Chances are this CGI isn't meant for this machine."); /* create HMTL form if button wasn't pressed. Otherwise, run the update */ if (!cgiVarExists("RTDBSubmit")) makeForm(dbs); else if ((database == NULL) || (!slNameInList(dbs, database))) { makeForm(dbs); printf("<br>Error: Select one of databases listed."); } else updateServer(rtdbServer, rtdbPort, database); cartWebEnd(); slNameFreeList(&dbs); }
int createSubmissionId(struct sqlConnection *conn, char *contributors, char *publication, char *pubUrl, char *setUrl, char *itemUrl) /* Add submission and contributors to database and return submission ID */ { struct slName *slNameListFromString(char *s, char delimiter); struct slName *contribList = NULL, *contrib; int submissionSetId; char query[1024]; safef(query, sizeof(query), "insert into submissionSet " "values(default, \"%s\", \"%s\", '%s', '%s', '%s')", contributors, publication, pubUrl, setUrl, itemUrl); sqlUpdate(conn, query); submissionSetId = sqlLastAutoId(conn); contribList = slNameListFromComma(contributors); for (contrib = contribList; contrib != NULL; contrib = contrib->next) { int contribId = findOrAddIdTable(conn, "contributor", "name", skipLeadingSpaces(contrib->name)); safef(query, sizeof(query), "insert into submissionContributor values(%d, %d)", submissionSetId, contribId); sqlUpdate(conn, query); } slFreeList(&contribList); return submissionSetId; }
void metaBigSetRgList(struct metaBig* mb, char* commaSep, boolean isBlackList) /* sets the whitelist (or blacklist) */ { struct slName* commas = slNameListFromComma(commaSep); struct slName* rgName; struct hash* rgHash = newHash(10); for (rgName = commas; rgName != NULL; rgName = rgName->next) hashAdd(rgHash, rgName->name, rgName->name); slNameFreeList(&commas); mb->rgList = rgHash; mb->rgListIsBlack = isBlackList; }
void edwMetaManiToTdb(char *metaInput, char *manifestInput, char *varCommaList, char *tdbOutput) /* edwMetaManiToTdb - Create a trackDb file based on input from meta file and manifest file.. */ { struct encode2Manifest *manList = encode2ManifestShortLoadAll(manifestInput); struct meta *metaForest = metaLoadAll(metaInput, "meta", "parent", TRUE, FALSE); struct slName *varList = slNameListFromComma(varCommaList); struct hash *hash = metaHash(metaForest); struct composite *comp, *compList = makeCompositeList(manList, hash); uglyf("%d elements in manList, %d in metaForest top level, %d total, %d vars, %d composites\n", slCount(manList), slCount(metaForest), hash->elCount, slCount(varList), slCount(compList)); FILE *f = mustOpen(tdbOutput, "w"); for (comp = compList; comp != NULL; comp = comp->next) { outputComposite(comp, varList, hash, f); } carefulClose(&f); }
static struct aHubMatch *filterTrixSearchMatches(struct dbDb *dbDbList, struct trixSearchResult *tsrList) /* Collect the assembly hub matches (not track hub matches) from a search in hub trix files. */ { if (tsrList == NULL) return NULL; struct aHubMatch *aHubMatchList = NULL; // Make a hash of local dbs so we can tell which hub dbs must be assembly hubs // not track hubs. struct hash *localDbs = hashNew(0); struct dbDb *dbDb; for (dbDb = dbDbList; dbDb != NULL; dbDb = dbDb->next) hashStore(localDbs, dbDb->name); // tsrList gives hub URLs which we can then look up in hubPublic. struct dyString *query = sqlDyStringCreate("select shortLabel,hubUrl,dbList from %s " "where hubUrl in (", hubPublicTableName()); struct trixSearchResult *tsr; for (tsr = tsrList; tsr != NULL; tsr = tsr->next) { if (tsr != tsrList) dyStringAppend(query, ", "); dyStringPrintf(query, "'%s'", tsr->itemId); } dyStringAppendC(query, ')'); struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr = sqlGetResult(conn, query->string); char **row; while ((row = sqlNextRow(sr)) != NULL) { char *shortLabel = row[0]; char *hubUrl = row[1]; struct slName *dbName, *dbList = slNameListFromComma(row[2]); for (dbName = dbList; dbName != NULL; dbName = dbName->next) if (! hashLookup(localDbs, dbName->name)) { slAddHead(&aHubMatchList, aHubMatchNew(shortLabel, hubUrl, dbName->name)); } } slReverse(&aHubMatchList); hDisconnectCentral(&conn); return aHubMatchList; }
static struct slName *parseDatabaseList(struct lineFile *lf, char *s) /* Parse out comma-separated list of databases, with * possible !db's. */ { struct slName *list, *el; struct hash *notHash; /* Get comma-separated list. */ list = slNameListFromComma(s); if (list == NULL) errAbort("Empty database name line %d of %s", lf->lineIx, lf->fileName); /* Remove !'s */ notHash = makeNotHash(list); if (notHash != NULL) { struct slName *newList = NULL, *next; for (el = list; el != NULL; el = next) { next = el->next; if (el->name[0] != '!' && !hashLookup(notHash, el->name)) { slAddHead(&newList, el); } else { freeMem(el); } } hashFree(¬Hash); slReverse(&newList); list = newList; } return list; }
void bwtool_matrix(struct hash *options, char *favorites, char *regions, unsigned decimals, double fill, char *range_s, char *bigfile, char *tmp_dir, char *outputfile) /* bwtool_matrix - main for matrix-creation program */ { boolean do_k = (hashFindVal(options, "cluster") != NULL) ? TRUE : FALSE; boolean do_tile = (hashFindVal(options, "tiled-averages") != NULL) ? TRUE : FALSE; boolean do_binary_matrix = (hashFindVal(options, "binary-matrix") != NULL) ? TRUE : FALSE; boolean keep_bed = (hashFindVal(options, "keep-bed") != NULL) ? TRUE : FALSE; boolean starts = (hashFindVal(options, "starts") != NULL) ? TRUE : FALSE; boolean ends = (hashFindVal(options, "ends") != NULL) ? TRUE : FALSE; boolean lf_header = (hashFindVal(options, "long-form-header") != NULL) ? TRUE : FALSE; char *centroid_file = (char *)hashFindVal(options, "cluster-centroids"); char *long_form = (char *)hashFindVal(options, "long-form"); boolean do_long_form = (long_form != NULL); unsigned left = 0, right = 0; int meta = 0; int num_parse = parse_left_right(range_s, &left, &right, &meta); boolean do_meta = (num_parse == 3); int k = (int)sqlUnsigned((char *)hashOptionalVal(options, "cluster", "0")); int tile = (int)sqlUnsigned((char *)hashOptionalVal(options, "tiled-averages", "1")); if ((do_k) && ((k < 2) || (k > 10))) errAbort("k should be between 2 and 10\n"); if ((do_tile) && (tile < 2)) errAbort("tiling should be done for larger regions"); if ((left % tile != 0) || (right % tile != 0)) errAbort("tiling should be multiple of both up and down values"); if (do_meta && starts && ends) warn("meta uses -starts and -ends anyway"); else if ((do_meta) && (starts || ends)) warn("-starts and -ends both automatically used with meta"); if (do_meta && do_tile) errAbort("meta not compatible with -tile... yet"); if (do_binary_matrix && do_long_form) errAbort("Writing binary matrix is not compatible with -long-form... yet"); struct slName *bw_names = slNameListFromComma(bigfile); struct slName *bw_name; struct slName *labels_from_file = NULL; int num_bigwigs = check_for_list_files(&bw_names, &labels_from_file, 0); struct slName *labels = setup_labels(long_form, bw_names, &labels_from_file); struct bed6 *regs = NULL; struct bed6 *regions_left = NULL, *regions_right = NULL, *regions_meta = NULL; struct perBaseMatrix *pbm = NULL; int i; if (do_meta) { if (meta == -1) { meta = calculate_meta_file(regions); fprintf(stderr, "calculated meta = %d bases\n", meta); } regions_left = load_and_recalculate_coords(regions, left, 0, FALSE, TRUE, FALSE); regions_right = load_and_recalculate_coords(regions, 0, right, FALSE, FALSE, TRUE); regions_meta = (meta > 0) ? readBed6Soft(regions) : NULL; } else regs = load_and_recalculate_coords(regions, left, right, FALSE, starts, ends); for (bw_name = bw_names; bw_name != NULL; bw_name = bw_name->next) { struct metaBig *mb = metaBigOpenWithTmpDir(bw_name->name, tmp_dir, NULL); if (do_meta) { struct perBaseMatrix *one_pbm = load_perBaseMatrix(mb, regions_left, fill); struct perBaseMatrix *right_pbm = load_perBaseMatrix(mb, regions_right, fill); if (meta > 0) { struct perBaseMatrix *meta_pbm = load_meta_perBaseMatrix(mb, regions_meta, meta, fill); fuse_pbm(&one_pbm, &meta_pbm, TRUE); } fuse_pbm(&one_pbm, &right_pbm, TRUE); fuse_pbm(&pbm, &one_pbm, FALSE); } else { struct perBaseMatrix *one_pbm = (do_tile) ? load_ave_perBaseMatrix(mb, regs, tile, fill) : load_perBaseMatrix(mb, regs, fill); fuse_pbm(&pbm, &one_pbm, FALSE); } metaBigClose(&mb); } if (do_k) { struct cluster_bed_matrix *cbm = NULL; /* ordered by cluster with label in first column */ cbm = init_cbm_from_pbm(pbm, k); do_kmeans_sort(cbm, 0.001, TRUE); if (do_long_form) { output_cluster_matrix_long(cbm, labels, keep_bed, outputfile, lf_header); } else { if (do_binary_matrix) { output_binary_cluster_matrix(cbm, keep_bed, outputfile); } else { output_cluster_matrix(cbm, decimals, keep_bed, outputfile); } } if (centroid_file) { output_centroids(cbm, centroid_file, decimals); } free_cbm(&cbm); } else { if (do_long_form) { output_matrix_long(pbm, decimals, labels, keep_bed, left, right, tile, lf_header, outputfile); } else { if (do_binary_matrix) { output_binary_matrix(pbm, keep_bed, outputfile); } else { output_matrix(pbm, decimals, keep_bed, outputfile); } } /* unordered, no label */ free_perBaseMatrix(&pbm); } if (do_meta) { bed6FreeList(®ions_left); bed6FreeList(®ions_right); if (meta > 0) bed6FreeList(®ions_meta); } else bed6FreeList(®s); }
static struct hash *outputPublicTable(struct sqlConnection *conn, char *publicTable) /* Put up the list of public hubs and other controls for the page. */ { struct hash *publicHash = NULL; char query[512]; sqlSafef(query, sizeof(query), "select hubUrl,shortLabel,longLabel,dbList from %s", publicTable); struct sqlResult *sr = sqlGetResult(conn, query); char **row; boolean gotAnyRows = FALSE; while ((row = sqlNextRow(sr)) != NULL) { char *url = row[0], *shortLabel = row[1], *longLabel = row[2], *dbList = row[3]; if (gotAnyRows) webPrintLinkTableNewRow(); else { /* output header */ printf("<div id=\"publicHubs\" class=\"hubList\"> \n"); printf("<table id=\"publicHubsTable\"> " "<thead><tr> " "<th>Display</th> " "<th>Hub Name</th> " "<th>Description</th> " "<th>Assemblies</th> " "<th>URL</th> " "</tr></thead>\n"); // start first row printf("<tbody> <tr>"); gotAnyRows = TRUE; // allocate the hash to store hubUrl's publicHash = newHash(5); } char *errorMessage = NULL; // get an id for this hub unsigned id = hubFindOrAddUrlInStatusTable(database, cart, url, &errorMessage); if ((id != 0) && isEmpty(errorMessage)) { ourCellStart(); char hubName[32]; safef(hubName, sizeof(hubName), "%s%u", hgHubConnectHubVarPrefix, id); cartMakeCheckBox(cart, hubName, FALSE); ourCellEnd(); } else if (!isEmpty(errorMessage)) { // give user a chance to clear the error ourCellStart(); printf( "<input name=\"hubClearButton\"" "onClick=\"document.resetHubForm.elements['hubUrl'].value='%s';" "document.resetHubForm.submit();return true;\" " "class=\"hubField\" type=\"button\" value=\"check hub\">" , url); ourCellEnd(); } else errAbort("cannot get id for hub with url %s\n", url); ourPrintCell(shortLabel); if (isEmpty(errorMessage)) ourPrintCell(longLabel); else printf("<TD><span class=\"hubError\">ERROR: %s </span>" "<a href=\"../goldenPath/help/hgTrackHubHelp.html#Debug\">Debug</a></TD>", errorMessage); printGenomeList(slNameListFromComma(dbList)); // Leaking a bit of memory ourPrintCell(url); hashStore(publicHash, url); } sqlFreeResult(&sr); if (gotAnyRows) { printf("</TR></tbody></TABLE>\n"); printf("</div>"); } return publicHash; }