void webPushErrHandlers(void) /* Push warn and abort handler for errAbort(). */ { if (webInTextMode) pushWarnHandler(textVaWarn); else pushWarnHandler(webVaWarn); pushAbortHandler(softAbort); hDumpStackPushAbortHandler(); }
boolean errCatchPushHandlers(struct errCatch *errCatch) /* Push error handlers. Not usually called directly. */ { pushAbortHandler(errCatchAbortHandler); pushWarnHandler(errCatchWarnHandler); struct errCatch **pErrCatchStack = getStack(); slAddHead(pErrCatchStack, errCatch); return TRUE; }
void _pf_punt_init() /* Initialize punt/catch system. Mostly just redirects the * errAbort handler. */ { punter.message = dyStringNew(0); punter.source = dyStringNew(0); pushWarnHandler(puntWarnHandler); pushAbortHandler(puntAbortHandler); }
static void cartJsonPushErrHandlers() /* Push warn and abort handlers for errAbort. */ { if (dyWarn == NULL) dyWarn = dyStringNew(0); else dyStringClear(dyWarn); pushWarnHandler(cartJsonVaWarn); pushAbortHandler(cartJsonAbort); }
int main(int argc, char *argv[]) /* Process command line. */ { if (!cgiIsOnWeb()) usage(); cgiSpoof(&argc, argv); pushWarnHandler(badRequestWarn); edwScriptSubmitStatus(); return 0; }
int test(int argc, char *argv[]) { int start, stop; if (argc != 9 && argc != 10) usageErr(); inName = argv[0]; cdnaName = argv[1]; chromDir = argv[2]; goodLogName = argv[3]; badLogName = argv[4]; unusualName = argv[5]; errName = argv[6]; start = atoi(argv[7]); stop = atoi(argv[8]); if (start >= stop) usageErr(); if (argc == 10) c2gName = argv[9]; inFile = mustOpen(inName, "r"); goodLogFile = mustOpen(goodLogName, "w"); badLogFile = mustOpen(badLogName, "w"); unusualFile = mustOpen(unusualName, "w"); errFile = mustOpen(errName, "w"); pushWarnHandler(reportWarning); dnaUtilOpen(); printf("Loading chromosomes\n"); loadGenome(chromDir, &chroms, &chromNames, &chromCount); startRedoHash(); printf("Analysing %s\n", inName); if (weAreWeb()) htmlHorizontalLine(); analyse(start, stop); //endRedoHash(); freeGenome(&chroms, &chromNames, chromCount); popWarnHandler(); fclose(inFile); fclose(goodLogFile); fclose(badLogFile); fclose(unusualFile); fclose(errFile); return 0; }
struct pipeline *textOutInit(char *fileName, char *compressType) /* Set up stdout to be HTTP text, file (if fileName is specified), or * compressed file (if both fileName and compressType are specified -- * see textOut.h for supported compression types). * Return NULL if no compression, otherwise a pipeline handle on which * textOutClose should be called when we're done writing stdout. */ { struct pipeline *compressPipeline = NULL; trimSpaces(fileName); if (isEmpty(fileName)) { printf("Content-Type: text/plain\n\n"); } else if (isEmpty(compressType) || sameWord(compressType, textOutCompressNone)) { printf("Content-Type: application/octet-stream\n"); printf("Content-Disposition: attachment; filename=%s\n\n", fileName); } else { char *suffix = getCompressSuffix(compressType); printf("Content-Type: application/x-%s\n", compressType); if (endsWith(fileName, suffix)) printf("Content-Disposition: attachment; filename=%s\n\n", fileName); else printf("Content-Disposition: attachment; filename=%s%s\n\n", fileName, suffix); /* Send the Content header uncompressed! */ fflush(stdout); /* Make sure no environment variables interfere with compressor. */ cleanEnvVars(compressType); /* Redirect stdout to compressor pipeline object. */ compressPipeline = pipelineOpen1(getCompressor(compressType), pipelineWrite, NULL, NULL); if (-1 == dup2(pipelineFd(compressPipeline), STDOUT_FILENO)) errnoAbort("dup2(pipelineFd %d, stdout %d) failed in textOpen()", pipelineFd(compressPipeline), STDOUT_FILENO); } pushWarnHandler(textOutWarnHandler); pushAbortHandler(textOutAbortHandler); return(compressPipeline); }
void doMiddle() /* doMiddle - put up middle part of web page, not including http and html headers/footers */ { pushWarnHandler(localWarn); printf("<FORM ACTION=\"../cgi-bin/edwWebSubmit\" METHOD=GET>\n"); struct sqlConnection *conn = edwConnectReadWrite(edwDatabase); userEmail = edwGetEmailAndVerify(); if (userEmail == NULL) logIn(); else if (cgiVarExists(stopButtonName)) stopUpload(conn); else if (cgiVarExists("submitUrl")) submitUrl(conn); else if (cgiVarExists("monitor")) monitorSubmission(conn); else getUrl(conn); printf("</FORM>"); }
int main(int argc, char *argv[]) { char *sangerName, *jimName, *updateName, *errName; struct g2cFile *sangerGenes, *jimGenes; if (argc != 5) { errAbort("c2gcheck - compares two gene-to-cdna files, notes differences\n" "and writes out a third merged file.\n" "Usage:\n" " c2gcheck Sanger Jim Update errs\n"); } memPool = lmInit(1<<16); pushWarnHandler(reportWarning); sangerName = argv[1]; jimName = argv[2]; updateName = argv[3]; errName = argv[4]; errFile = mustOpen(errName, "w"); sangerGenes = loadG2cFile(sangerName); jimGenes = loadG2cFile(jimName); checkOneFile(sangerGenes, sangerName); checkOneFile(jimGenes, jimName); checkTwoFiles(sangerGenes, jimGenes, "Jim unique"); checkTwoFiles(jimGenes, sangerGenes, "Sanger unique"); update(sangerGenes, jimGenes); saveG2cFile(sangerGenes, updateName); lmCleanup(&memPool); return 0; }
char *checkParams(char *database, char *prefix, char *type) /* If we don't have valid CGI parameters, quit with a Bad Request HTTP response. */ { pushWarnHandler(htmlVaBadRequestAbort); pushAbortHandler(htmlVaBadRequestAbort); if(prefix == NULL || database == NULL) errAbort("%s", "Missing prefix and/or db CGI parameter"); if (! hDbIsActive(database)) errAbort("'%s' is not a valid, active database", htmlEncode(database)); if (isNotEmpty(type) && differentString(type, ALT_OR_PATCH)) errAbort("'%s' is not a valid type", type); char *table = NULL; if (! sameOk(type, ALT_OR_PATCH)) { struct sqlConnection *conn = hAllocConn(database); table = connGeneSuggestTable(conn); hFreeConn(&conn); if(table == NULL) errAbort("gene autosuggest is not supported for db '%s'", database); } popWarnHandler(); popAbortHandler(); return table; }
void fqToQa(char *inFile, char *outDir, char *outTabName) /* fqToQa - convert from fq format with one big file to * format with one file per clone. */ { struct lineFile *in; FILE *out = NULL, *tab; int lineSize; char *line; char ucscName[128]; char path[512]; static char lastPath[512]; int outFileCount = 0; struct hash *uniqClone = newHash(16); struct hash *uniqFrag = newHash(19); boolean ignore = FALSE; makeDir(outDir); errLog = mustOpen("fqToQa.err", "w"); pushWarnHandler(warnHandler); tab = mustOpen(outTabName, "w"); printf("Converting %s", inFile); fflush(stdout); in = lineFileOpen(inFile, TRUE); while (lineFileNext(in, &line, &lineSize)) { if (line[0] == '>') { ignore = FALSE; gsToUcsc(line+1, ucscName); faRecNameToQaFileName(outDir, ucscName, path); if (hashLookup(uniqFrag, ucscName)) { ignore = TRUE; warn("Duplicate %s in %s, ignoring all but first", ucscName, inFile); } else { hashAdd(uniqFrag, ucscName, NULL); } if (!sameString(path, lastPath)) { strcpy(lastPath, path); carefulClose(&out); if (hashLookup(uniqClone, path)) { warn("Duplicate %s in %s ignoring all but first", ucscName, inFile); } else { hashAdd(uniqClone, path, NULL); out = mustOpen(path, "w"); ++outFileCount; if ((outFileCount&7) == 0) { putc('.', stdout); fflush(stdout); } } } if (out != NULL && !ignore) { fprintf(out, ">%s\n", ucscName); fprintf(tab, "%s\t%s\n", ucscName, line+1); } } else { if (out != NULL && !ignore) { fputs(line, out); fputc('\n', out); } } } carefulClose(&out); fclose(tab); lineFileClose(&in); printf("Made %d .qa files in %s\n", outFileCount, outDir); }
static void vcfGenotypesDetails(struct vcfRecord *rec, struct trackDb *tdb, char **displayAls) /* Print summary of allele and genotype frequency, plus collapsible section * with table of genotype details. */ { struct vcfFile *vcff = rec->file; if (vcff->genotypeCount == 0) return; // Wrapper table for collapsible section: puts("<TABLE>"); pushWarnHandler(ignoreEm); vcfParseGenotypes(rec); popWarnHandler(); // Tally genotypes and alleles for summary: int refs = 0, alts = 0, unks = 0; int refRefs = 0, refAlts = 0, altAlts = 0, gtUnk = 0, gtOther = 0, phasedGts = 0; int i; for (i = 0; i < vcff->genotypeCount; i++) { struct vcfGenotype *gt = &(rec->genotypes[i]); if (gt->isPhased) phasedGts++; if (gt->hapIxA == 0) refs++; else if (gt->hapIxA > 0) alts++; else unks++; if (!gt->isHaploid) { if (gt->hapIxB == 0) refs++; else if (gt->hapIxB > 0) alts++; else unks++; if (gt->hapIxA == 0 && gt->hapIxB == 0) refRefs++; else if (gt->hapIxA == 1 && gt->hapIxB == 1) altAlts++; else if ((gt->hapIxA == 1 && gt->hapIxB == 0) || (gt->hapIxA == 0 && gt->hapIxB == 1)) refAlts++; else if (gt->hapIxA < 0 || gt->hapIxB < 0) gtUnk++; else gtOther++; } } printf("<B>Genotype count:</B> %d", vcff->genotypeCount); if (differentString(seqName, "chrY")) printf(" (%d phased)", phasedGts); else printf(" (haploid)"); puts("<BR>"); int totalAlleles = refs + alts + unks; double refAf = (double)refs/totalAlleles; double altAf = (double)alts/totalAlleles; printf("<B>Alleles:</B> %s: %d (%.3f%%); %s: %d (%.3f%%)", displayAls[0], refs, 100*refAf, displayAls[1], alts, 100*altAf); if (unks > 0) printf("; unknown: %d (%.3f%%)", unks, 100 * (double)unks/totalAlleles); puts("<BR>"); // Should be a better way to detect haploid chromosomes than comparison with "chrY": if (vcff->genotypeCount > 1 && differentString(seqName, "chrY")) { printf("<B>Genotypes:</B> %s/%s: %d (%.3f%%); %s/%s: %d (%.3f%%); %s/%s: %d (%.3f%%)", displayAls[0], displayAls[0], refRefs, 100*(double)refRefs/vcff->genotypeCount, displayAls[0], displayAls[1], refAlts, 100*(double)refAlts/vcff->genotypeCount, displayAls[1], displayAls[1], altAlts, 100*(double)altAlts/vcff->genotypeCount); if (gtUnk > 0) printf("; unknown: %d (%.3f%%)", gtUnk, 100*(double)gtUnk/vcff->genotypeCount); if (gtOther > 0) printf("; other: %d (%.3f%%)", gtOther, 100*(double)gtOther/vcff->genotypeCount); printf("<BR>\n"); if (rec->alleleCount == 2) { boolean showHW = cartOrTdbBoolean(cart, tdb, VCF_SHOW_HW_VAR, FALSE); if (showHW) printf("<B><A HREF=\"http://en.wikipedia.org/wiki/Hardy%%E2%%80%%93Weinberg_principle\" " "TARGET=_BLANK>Hardy-Weinberg equilibrium</A>:</B> " "P(%s/%s) = %.3f%%; P(%s/%s) = %.3f%%; P(%s/%s) = %.3f%%<BR>", displayAls[0], displayAls[0], 100*refAf*refAf, displayAls[0], displayAls[1], 100*2*refAf*altAf, displayAls[1], displayAls[1], 100*altAf*altAf); } } puts("<BR>"); vcfGenotypeTable(rec, tdb->track, displayAls); puts("</TABLE>"); }
int main(int argc, char *argv[]) { long enteredMainTime = clock1000(); struct dyString *output = newDyString(10000); setUdcCacheDir(); cgiSpoof(&argc, argv); pushWarnHandler(htmlVaBadRequestAbort); pushAbortHandler(htmlVaBadRequestAbort); char *database = cgiString("db"); char *cmd = cgiString("cmd"); char *jsonp = cgiOptionalString("jsonp"); if (!hDbExists(database)) errAbort("Invalid database '%s'", database); if (!strcmp(cmd, "defaultPos")) { dyStringPrintf(output, "{\"pos\": \"%s\"}", hDefaultPos(database)); } else if (!strcmp(cmd, "metaDb")) { // Return list of values for given metaDb var // e.g. http://genome.ucsc.edu/hgApi?db=hg18&cmd=metaDb&var=cell struct sqlConnection *conn = hAllocConn(database); boolean metaDbExists = sqlTableExists(conn, "metaDb"); if (metaDbExists) { char *var = cgiOptionalString("var"); if (!var) errAbort("Missing var parameter"); boolean fileSearch = (cgiOptionalInt("fileSearch",0) == 1); struct slPair *pairs = mdbValLabelSearch(conn, var, MDB_VAL_STD_TRUNCATION, FALSE, !fileSearch, fileSearch); struct slPair *pair; dyStringPrintf(output, "[\n"); for (pair = pairs; pair != NULL; pair = pair->next) { if (pair != pairs) dyStringPrintf(output, ",\n"); dyStringPrintf(output, "['%s','%s']", javaScriptLiteralEncode(mdbPairLabel(pair)), javaScriptLiteralEncode(mdbPairVal(pair))); } dyStringPrintf(output, "\n]\n"); } else errAbort("Assembly does not support metaDb"); } // TODO: move to lib since hgTracks and hgApi share #define METADATA_VALUE_PREFIX "hgt_mdbVal" else if (startsWith(METADATA_VALUE_PREFIX, cmd)) { // Returns metaDb value control: drop down or free text, with or without help link. // e.g. http://genome.ucsc.edu/hgApi?db=hg18&cmd=hgt_mdbVal3&var=cell // TODO: Move guts to lib, so that hgTracks::searchTracks.c and hgApi.c can share struct sqlConnection *conn = hAllocConn(database); boolean metaDbExists = sqlTableExists(conn, "metaDb"); if (metaDbExists) { char *var = cgiOptionalString("var"); if (!var) errAbort("Missing var parameter"); int ix = atoi(cmd+strlen(METADATA_VALUE_PREFIX)); // 1 based index if (ix == 0) // errAbort("Unsupported 'cmd' parameter"); enum cvSearchable searchBy = cvSearchMethod(var); char name[128]; safef(name,sizeof name,"%s%i",METADATA_VALUE_PREFIX,ix); if (searchBy == cvSearchBySingleSelect || searchBy == cvSearchByMultiSelect) { boolean fileSearch = (cgiOptionalInt("fileSearch",0) == 1); struct slPair *pairs = mdbValLabelSearch(conn, var, MDB_VAL_STD_TRUNCATION, FALSE, !fileSearch, fileSearch); if (slCount(pairs) > 0) { char *dropDownHtml = cgiMakeSelectDropList((searchBy == cvSearchByMultiSelect), name, pairs, NULL, ANYLABEL, "mdbVal", "style='min-width: 200px; font-size: .9em;' " "onchange='findTracksMdbValChanged(this);'"); if (dropDownHtml) { dyStringAppend(output,dropDownHtml); freeMem(dropDownHtml); } slPairFreeList(&pairs); } } else if (searchBy == cvSearchByFreeText) { dyStringPrintf(output,"<input type='text' name='%s' value='' class='mdbVal freeText' " "onchange='findTracksMdbValChanged(this);' style='max-width:310px; " "width:310px; font-size:.9em;'>", name); } else if (searchBy == cvSearchByWildList) { dyStringPrintf(output,"<input type='text' name='%s' value='' class='mdbVal wildList' " "title='enter comma separated list of values' " "onchange='findTracksMdbValChanged(this);' style='max-width:310px; " "width:310px; font-size:.9em;'>", name); } else if (searchBy == cvSearchByDateRange || searchBy == cvSearchByIntegerRange) { // TO BE IMPLEMENTED } else errAbort("Metadata variable not searchable"); dyStringPrintf(output,"<span id='helpLink%i'> </span>",ix); } else errAbort("Assembly does not support metaDb"); } else if (!strcmp(cmd, "tableMetadata")) { // returns an html table with metadata for a given track char *trackName = cgiOptionalString("track"); boolean showLonglabel = (NULL != cgiOptionalString("showLonglabel")); boolean showShortLabel = (NULL != cgiOptionalString("showShortLabel")); if (trackName != NULL) { // hTrackDbForTrackAndAncestors avoids overhead of getting whole track list! struct trackDb *tdb = hTrackDbForTrackAndAncestors(database, trackName); if (tdb != NULL) { char * html = metadataAsHtmlTable(database,tdb,showLonglabel,showShortLabel); if (html) { dyStringAppend(output,html); freeMem(html); } else dyStringPrintf(output,"No metadata found for track %s.",trackName); } else dyStringPrintf(output,"Track %s not found",trackName); } else dyStringAppend(output,"No track variable found"); } else if (sameString(cmd, "codonToPos") || sameString(cmd, "exonToPos")) { char query[256]; struct sqlResult *sr; char **row; struct genePred *gp; char *name = cgiString("name"); char *table = cgiString("table"); int num = cgiInt("num"); struct sqlConnection *conn = hAllocConn(database); sqlSafef(query, sizeof(query), "select name, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds from %s where name = '%s'", table, name); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { gp = genePredLoad(row); boolean found; int start, end; if (sameString(cmd, "codonToPos")) found = codonToPos(gp, num, &start, &end); else found = exonToPos(gp, num, &start, &end); if (found) dyStringPrintf(output, "{\"pos\": \"%s:%d-%d\"}", gp->chrom, start + 1, end); else dyStringPrintf(output, "{\"error\": \"%d is an invalid %s for this gene\"}", num, sameString(cmd, "codonToPos") ? "codon" : "exon"); } else dyStringPrintf(output, "{\"error\": \"Couldn't find item: %s\"}", name); sqlFreeResult(&sr); hFreeConn(&conn); } else { warn("unknown cmd: %s",cmd); errAbort("Unsupported 'cmd' parameter"); } apiOut(dyStringContents(output), jsonp); cgiExitTime("hgApi", enteredMainTime); return 0; }
int main(int argc, char *argv[]) { char *genoListName; char *cdnaListName; char *oocFileName; char *pairFileName; struct patSpace *patSpace; long startTime, endTime; char **genoList; int genoListSize; char *genoListBuf; char **cdnaList; int cdnaListSize; char *cdnaListBuf; char *genoName; int i; int estIx = 0; struct dnaSeq **seqListList = NULL, *seq; static char hitFileName[512], mergerFileName[512], okFileName[512]; char *outRoot; struct hash *pairHash; if (dumpMe) { bigHtmlFile = mustOpen("C:\\inetpub\\wwwroot\\test\\patAli.html", "w"); littleHtmlFile = mustOpen("C:\\inetpub\\wwwroot\\test\\patSpace.html", "w"); htmStart(bigHtmlFile, "PatSpace Alignments"); htmStart(littleHtmlFile, "PatSpace Index"); } if ((hostName = getenv("HOST")) == NULL) hostName = ""; if (argc != 6) usage(); pushWarnHandler(patSpaceWarnHandler); startTime = clock1000(); dnaUtilOpen(); makePolys(); genoListName = argv[1]; cdnaListName = argv[2]; oocFileName = argv[3]; pairFileName = argv[4]; outRoot = argv[5]; sprintf(hitFileName, "%s.hit", outRoot); sprintf(mergerFileName, "%s.glu", outRoot); sprintf(okFileName, "%s.ok", outRoot); readAllWords(genoListName, &genoList, &genoListSize, &genoListBuf); readAllWords(cdnaListName, &cdnaList, &cdnaListSize, &cdnaListBuf); pairHash = makePairHash(pairFileName); hitOut = mustOpen(hitFileName, "w"); mergerOut = mustOpen(mergerFileName, "w"); dumpOut = mustOpen("dump.out", "w"); seqListList = needMem(genoListSize*sizeof(seqListList[0]) ); fprintf(hitOut, "Pattern space 0.2 cDNA matcher\n"); fprintf(hitOut, "cDNA files: ", cdnaListSize); for (i=0; i<cdnaListSize; ++i) fprintf(hitOut, " %s", cdnaList[i]); fprintf(hitOut, "\n"); fprintf(hitOut, "%d genomic files\n", genoListSize); for (i=0; i<genoListSize; ++i) { genoName = genoList[i]; if (!startsWith("//", genoName) ) { seqListList[i] = seq = faReadAllDna(genoName); fprintf(hitOut, "%d els in %s ", slCount(seq), genoList[i]); for (; seq != NULL; seq = seq->next) fprintf(hitOut, "%d ", seq->size); fprintf(hitOut, "\n"); } } patSpace = makePatSpace(seqListList, genoListSize, oocFileName); for (i=0; i<cdnaListSize; ++i) { FILE *f; char *estFileName; DNA *dna; char *estName; int size; int c; int maxSizeForFuzzyFind = 20000; int dotCount = 0; estFileName = cdnaList[i]; if (startsWith("//", estFileName) ) continue; f = mustOpen(estFileName, "rb"); while ((c = fgetc(f)) != EOF) if (c == '>') break; printf("%s", cdnaList[i]); fflush(stdout); while (fastFaReadNext(f, &dna, &size, &estName)) { aliSeqName = estName; if (size < maxSizeForFuzzyFind) /* Some day need to fix this somehow... */ { struct hashEl *hel; struct cdnaAliList *calList = NULL; hel = hashLookup(pairHash, estName); if (hel != NULL) /* Do pair processing. */ { struct estPair *ep; struct seq *thisSeq, *otherSeq; ep = hel->val; if (hel->name == ep->name3) { thisSeq = &ep->seq3; otherSeq = &ep->seq5; } else { thisSeq = &ep->seq5; otherSeq = &ep->seq3; } if (otherSeq->dna == NULL) /* First in pair - need to save sequence. */ { thisSeq->size = size; thisSeq->dna = needMem(size); memcpy(thisSeq->dna, dna, size); } else /* Second in pair - do gluing and free partner. */ { char mergedName[64]; thisSeq->dna = dna; thisSeq->size = size; sprintf(mergedName, "%s_AND_%s", ep->name5, ep->name3); patSpaceFindOne(patSpace, ep->seq5.dna, ep->seq5.size, '+', '5', ep->name5, &calList); reverseComplement(ep->seq5.dna, ep->seq5.size); patSpaceFindOne(patSpace, ep->seq5.dna, ep->seq5.size, '-', '5', ep->name5, &calList); patSpaceFindOne(patSpace, ep->seq3.dna, ep->seq3.size, '+', '3', ep->name3, &calList); reverseComplement(ep->seq3.dna, ep->seq3.size); patSpaceFindOne(patSpace, ep->seq3.dna, ep->seq3.size, '-', '3', ep->name3, &calList); slReverse(&calList); writeMergers(calList, mergedName, genoList); freez(&otherSeq->dna); thisSeq->dna = NULL; thisSeq->size =otherSeq->size = 0; } } else { patSpaceFindOne(patSpace, dna, size, '+', '5', estName, &calList); reverseComplement(dna, size); patSpaceFindOne(patSpace, dna, size, '-', '5', estName, &calList); slReverse(&calList); writeMergers(calList, estName, genoList); } ++estIx; if ((estIx & 0xfff) == 0) { printf("."); ++dotCount; fflush(stdout); } } } printf("\n"); } aliSeqName = ""; printf("ffSubmitted %3d ffAccepted %3d ffOkScore %3d ffSolidMatch %2d\n", ffSubmitted, ffAccepted, ffOkScore, ffSolidMatch); endTime = clock1000(); printf("Total time is %4.2f\n", 0.001*(endTime-startTime)); /* Write out file who's presense say's we succeeded */ { FILE *f = mustOpen(okFileName, "w"); fputs("ok", f); fclose(f); } if (dumpMe) { htmEnd(bigHtmlFile); htmEnd(littleHtmlFile); } return 0; }
struct pipeline *textOutInit(char *fileName, char *compressType, int *saveStdout) /* Set up stdout to be HTTP text, file (if fileName is specified), or * compressed file (if both fileName and compressType are specified -- * see textOut.h for supported compression types). * Return NULL if no compression, otherwise a pipeline handle on which * textOutClose should be called when we're done writing stdout. */ { struct pipeline *compressPipeline = NULL; // if path contains a slash, we are outputting to a local file boolean outToFile = (strchr(fileName, '/') != NULL); if (outToFile) { FILE *f; f = fopen(fileName, "w"); /* We want to capture stdout output to a file */ fflush(stdout); int tempOut = dup(STDOUT_FILENO); if (saveStdout) *saveStdout = tempOut; dup2(fileno(f),STDOUT_FILENO); /* closes STDOUT before setting it again */ fclose(f); } trimSpaces(fileName); if (isEmpty(fileName)) { printf("Content-Type: text/plain\n\n"); } else if (isEmpty(compressType) || sameWord(compressType, textOutCompressNone)) { if (!outToFile) { printf("Content-Type: application/octet-stream\n"); printf("Content-Disposition: attachment; filename=%s\n\n", fileName); } } else { if (!outToFile) { char *suffix = getCompressSuffix(compressType); printf("Content-Type: application/x-%s\n", compressType); if (endsWith(fileName, suffix)) printf("Content-Disposition: attachment; filename=%s\n\n", fileName); else printf("Content-Disposition: attachment; filename=%s%s\n\n", fileName, suffix); /* Send the Content header uncompressed! */ fflush(stdout); } /* Make sure no environment variables interfere with compressor. */ cleanEnvVars(compressType); /* Redirect stdout to compressor pipeline object. */ compressPipeline = pipelineOpen1(getCompressor(compressType), pipelineWrite, NULL, NULL); if (-1 == dup2(pipelineFd(compressPipeline), STDOUT_FILENO)) errnoAbort("dup2(pipelineFd %d, stdout %d) failed in textOpen()", pipelineFd(compressPipeline), STDOUT_FILENO); } pushWarnHandler(textOutWarnHandler); pushAbortHandler(textOutAbortHandler); return(compressPipeline); }
void doMiddle() /* Write what goes between BODY and /BODY */ { pushWarnHandler(localWarn); if (!cgiServerHttpsIsOn()) usage(); struct sqlConnection *conn = edwConnectReadWrite(); printf("<FORM ACTION=\"edwWebRegisterScript\" METHOD=POST>\n"); printf("<B>Register Script with ENCODE Data Warehouse</B><BR>\n"); #ifdef SOON uglyf("HTTP_AUTHENTICATION: '%s'<BR>\n", getenv("HTTP_AUTHENTICATION")); uglyf("HTTP_AUTHORIZATION: '%s'<BR>\n", getenv("HTTP_AUTHORIZATION")); dumpEnv(mainEnv); #endif if (userEmail == NULL) { printf("Please sign in:"); printf("<INPUT TYPE=BUTTON NAME=\"signIn\" VALUE=\"sign in\" id=\"signin\">"); } else if (cgiVarExists("description")) { struct edwUser *user = edwUserFromEmail(conn, userEmail); if (user == NULL) edwWarnUnregisteredUser(userEmail); else { char password[HEXED_32_SIZE]; edwRandomHexed32(password); char babyName[HEXED_32_SIZE]; edwRandomBabble(babyName, sizeof(babyName)); edwRegisterScript(conn, user, babyName, password, cgiString("description")); printf("Script now registered.<BR>\n"); printf("The script user name is %s.<BR>\n", babyName); printf("The script password is %s.<BR>\n", password); printf("Please save the script user name and password somewhere. "); puts("Please pass these two and the URL"); puts(" of your validated manifest file (validated.txt) to our server to submit data."); puts("Construct a URL of the form:<BR>"); printf("<PRE>https://encodedcc.sdsc.edu/cgi-bin/edwScriptSubmit" "?user=%s&password=%s&url=%s\n</PRE>", babyName, password, cgiEncode("http://your.host.edu/your_dir/validated.txt")); puts("That is pass the CGI encoded variables user, password, and url to the "); puts("web services CGI at"); puts("https://encodedcc.sdsc.edu/cgi-bin/edwScriptSubmit. "); puts("You can use the http://encodedcc.sdsc.edu/cgi-bin/edwWebBrowse site to "); puts("monitor your submission interactively. Please contact your wrangler if you "); puts("have any questions.<BR>"); cgiMakeButton("submit", "Register another script"); } printf(" "); edwPrintLogOutButton(); } else { struct edwUser *user = edwUserFromEmail(conn, userEmail); edwPrintLogOutButton(); if (user == NULL) edwWarnUnregisteredUser(userEmail); else { printf("%s is authorized to register a new script<BR>\n", userEmail); printf("<BR>Script description:\n"); cgiMakeTextVar("description", NULL, 80); cgiMakeSubmitButton(); } } printf("</FORM>\n"); }
static void vcfHapClusterDraw(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Split samples' chromosomes (haplotypes), cluster them by center-weighted * alpha similarity, and draw in the order determined by clustering. */ { struct vcfFile *vcff = tg->extraUiData; if (vcff->records == NULL) return; purple = hvGfxFindColorIx(hvg, 0x99, 0x00, 0xcc); undefYellow = hvGfxFindRgb(hvg, &undefinedYellowColor); enum hapColorMode colorMode = getColorMode(tg->tdb); pushWarnHandler(ignoreEm); struct vcfRecord *rec; for (rec = vcff->records; rec != NULL; rec = rec->next) vcfParseGenotypes(rec); popWarnHandler(); unsigned short gtHapCount = 0; int nRecords = slCount(vcff->records); int centerIx = getCenterVariantIx(tg, seqStart, seqEnd, vcff->records); // Limit the number of variants that we compare, to keep from timing out: // (really what we should limit is the number of distinct haplo's passed to hacTree!) // In the meantime, this should at least be a cart var... int maxVariantsPerSide = 50; int startIx = max(0, centerIx - maxVariantsPerSide); int endIx = min(nRecords, centerIx+1 + maxVariantsPerSide); struct hacTree *ht = NULL; unsigned short *gtHapOrder = clusterHaps(vcff, centerIx, startIx, endIx, >HapCount, &ht); struct vcfRecord *centerRec = NULL; int ix; // Unlike drawing order (last drawn is on top), the first mapBox gets priority, // so map center variant before drawing & mapping other variants! for (rec = vcff->records, ix=0; rec != NULL; rec = rec->next, ix++) { if (ix == centerIx) { centerRec = rec; mapBoxForCenterVariant(rec, hvg, tg, xOff, yOff, width); break; } } for (rec = vcff->records, ix=0; rec != NULL; rec = rec->next, ix++) { boolean isClustered = (ix >= startIx && ix < endIx); if (ix != centerIx) drawOneRec(rec, gtHapOrder, gtHapCount, tg, hvg, xOff, yOff, width, isClustered, FALSE, colorMode); } // Draw the center rec on top, outlined with black lines, to make sure it is very visible: drawOneRec(centerRec, gtHapOrder, gtHapCount, tg, hvg, xOff, yOff, width, TRUE, TRUE, colorMode); // Draw as much of the tree as can fit in the left label area: int extraPixel = (colorMode == altOnlyMode) ? 1 : 0; int hapHeight = tg->height- CLIP_PAD - 2*extraPixel; struct yFromNodeHelper yHelper = {0, NULL, NULL}; initYFromNodeHelper(&yHelper, yOff+extraPixel, hapHeight, gtHapCount, gtHapOrder, vcff->genotypeCount); struct titleHelper titleHelper = { NULL, 0, 0, 0, 0, NULL, NULL }; initTitleHelper(&titleHelper, tg->track, startIx, centerIx, endIx, nRecords, vcff); char *treeAngle = cartOrTdbString(cart, tg->tdb, VCF_HAP_TREEANGLE_VAR, VCF_DEFAULT_HAP_TREEANGLE); boolean drawRectangle = sameString(treeAngle, VCF_HAP_TREEANGLE_RECTANGLE); drawTreeInLabelArea(ht, hvg, yOff+extraPixel, hapHeight+CLIP_PAD, &yHelper, &titleHelper, drawRectangle); }
void tryToDeprecate(struct sqlConnection *conn) /* CGI variables are set - if possible deprecate, otherwise put up error message. */ { pushWarnHandler(localWarn); fileList = cgiString("fileList"); reason = cloneString(trimSpaces(cgiString("reason"))); if (isEmpty(reason)) { warn("Please enter a reason for deprecation."); getFileListAndReason(conn); } else { /* Go through list of accessions and make sure they are all well formed and correspond to files that exist. */ boolean ok = TRUE; struct slName *accList = slNameListOfUniqueWords(cloneString(fileList), FALSE); struct slName *acc; struct slInt *idList = NULL, *idEl; for (acc = accList; acc != NULL; acc = acc->next) { char *licensePlate = acc->name; if (!startsWith(edwLicensePlatePrefix, licensePlate)) { ok = FALSE; warn("%s is not an accession, doesn't start with %s", licensePlate, edwLicensePlatePrefix); break; } char query[256]; sqlSafef(query, sizeof(query), "select fileId from edwValidFile where licensePlate='%s'", licensePlate); int id = sqlQuickNum(conn, query); if (id == 0) { ok = FALSE; warn("%s - no such accession. ", licensePlate); break; } /* check to see is it ok tor deprecate this file */ if (!okToDeprecateThisFile(conn, id, userEmail)) { ok = FALSE; warn("You can not deprecate %s which was originally uploaded by %s.\n", licensePlate, edwFindOwnerNameFromFileId(conn, id)); warn("Please click the check box below to override this rule."); break; } idEl = slIntNew(id); slAddTail(&idList, idEl); } if (accList == NULL) { warn("Please enter some file accessions"); ok = FALSE; } /* If a problem then put up page to try again, otherwise do deprecation. */ if (!ok) getFileListAndReason(conn); else { deprecateFileList(conn, idList, reason); printf("Deprecated %d files<BR>\n", slCount(idList)); cgiMakeButton("submit", "Deprecate More Files"); printf(" "); edwPrintLogOutButton(); } } }
void pushWarnAbort() /* Push handler that will abort on warnings. */ { pushWarnHandler(warnAbortHandler); }
void pushSilentWarnHandler() /* Set warning handler to be quiet. Do a popWarnHandler to restore. */ { pushWarnHandler(silentVaWarn); }
int main(int argc, char *argv[]) { char *genoListName; char *otherListName; char *oocFileName; char *typeName; char *outName; struct patSpace *patSpace; long startTime, endTime; char **genoList; int genoListSize; char *genoListBuf; char **otherList; int otherListSize; char *otherListBuf; char *genoName; int i; int blockCount = 0; struct dnaSeq **seqListList = NULL, *seq = NULL; char *outRoot; struct sqlConnection *conn; enum ffStringency stringency = ffCdna; int seedSize = 10; FILE *out; boolean noHead = FALSE; struct repeatTracker *rt; struct hash *repeatHash = newHash(10); hostName = getenv("HOST"); pushWarnHandler(warnHandler); startTime = clock1(); cgiSpoof(&argc, argv); minMatch = cgiOptionalInt("minMatch", minMatch); maxBad = cgiOptionalInt("maxBad", maxBad); minBases = cgiOptionalInt("minBases", minBases); dnaUtilOpen(); #ifdef DEBUG /* Hard wire command line input so don't have to type it in each * time run the stupid Gnu debugger. */ genoListName = "pFoo/geno.lst"; otherListName = "pFoo/bacend.lst"; typeName = "genomic"; oocFileName = "/d/biodata/human/10.ooc"; outName = "pFoo/pFoo.psl"; #else if (argc != 6 && argc != 7) usage(); genoListName = argv[1]; otherListName = argv[2]; typeName = argv[3]; oocFileName = argv[4]; if (sameWord(oocFileName, "none")) oocFileName = NULL; outName = argv[5]; if (argc == 7) { if (sameWord("noHead", argv[6])) noHead = TRUE; else usage(); } #endif if (sameWord(typeName, "mRNA") || sameWord(typeName, "cDNA")) { stringency = ffCdna; } else if (sameWord(typeName, "genomic")) { stringency = ffTight; } else if (sameWord(typeName, "g2g")) { stringency = ffTight; veryTight = TRUE; seedSize = 11; } else if (sameString(typeName, "asm")) { stringency = ffTight; avoidSelfSelf = TRUE; } else { warn("Unrecognized otherType %s\n", typeName); usage(); } readAllWordsOrFa(genoListName, &genoList, &genoListSize, &genoListBuf); filterMissingFiles(genoList, &genoListSize); if (genoListSize <= 0) errAbort("There are no files that exist in %s\n", genoListName); readAllWordsOrFa(otherListName, &otherList, &otherListSize, &otherListBuf); if (otherListSize <= 0) errAbort("There are no files that exist in %s\n", otherListName); filterMissingFiles(otherList, &otherListSize); out = mustOpen(outName, "w"); if (!noHead) pslWriteHead(out); AllocArray(seqListList, genoListSize); for (i=0; i<genoListSize; ++i) { genoName = genoList[i]; if (!startsWith("#", genoName) ) seqListList[i] = seq = faReadAllDna(genoName); for (;seq != NULL; seq = seq->next) { int size = seq->size; char *name = seq->name; struct hashEl *hel; AllocVar(rt); AllocArray(rt->repBytes, size); rt->seq = seq; if ((hel = hashLookup(repeatHash, name)) != NULL) errAbort("Duplicate %s in %s\n", name, genoName); hashAdd(repeatHash, name, rt); } storeMasked(repeatHash, genoName); } patSpace = makePatSpace(seqListList, genoListSize, seedSize, oocFileName, minMatch, 2000); endTime = clock1(); printf("Made index in %ld seconds\n", (endTime-startTime)); startTime = endTime; for (i=0; i<otherListSize; ++i) { FILE *f; char *otherName; int c; int dotCount = 0; struct dnaSeq otherSeq; ZeroVar(&otherSeq); otherName = otherList[i]; if (startsWith("#", otherName) ) continue; f = mustOpen(otherName, "r"); while ((c = fgetc(f)) != EOF) if (c == '>') break; printf("%s\n", otherName); fflush(stdout); while (faFastReadNext(f, &otherSeq.dna, &otherSeq.size, &otherSeq.name)) { aliSeqName = otherSeq.name; oneStrand(patSpace, repeatHash, &otherSeq, FALSE, stringency, out); reverseComplement(otherSeq.dna, otherSeq.size); oneStrand(patSpace, repeatHash, &otherSeq, TRUE, stringency, out); aliSeqName = NULL; } fclose(f); } freePatSpace(&patSpace); endTime = clock1(); printf("Alignment time is %ld sec\n", (endTime-startTime)); startTime = endTime; fclose(out); return 0; }
void pushRHandlers() { pushAbortHandler(R_abortHandler); pushWarnHandler(R_warnHandler); }