void doubleCellPrint(struct column *col, struct subjInfo *si, struct sqlConnection *conn) /* print double value */ { char *s = col->cellVal(col, si, conn); char buf[256]; if (sameString(s,".")) // known bad data value safef(buf,sizeof(buf),"%s", s); else { if (sameWord(col->name, "LastPVisit") || sameWord(col->name, "LastTrVisit")) { if (sameWord(s, "-1")) { safef(buf,sizeof(buf),"N/A"); } else if (sameWord(s, "-2")) { safef(buf,sizeof(buf),"N/D"); } else if (sameWord(s, "-3.000")||sameWord(s, "-3.0")||sameWord(s, "-3")) { safef(buf,sizeof(buf)," "); } else { safef(buf,sizeof(buf),"%.1f",sqlDouble(s)); } } else if (sameWord(col->name, "LastTrCD4Blk") || sameWord(col->name, "LastPCD4Blk") || sameWord(col->name, "LastPAntiGP120") || sameWord(col->name, "LastTrAntiGP120")) { if (sameWord(s, "-3.000")) { safef(buf,sizeof(buf)," "); } else if (sameWord(s, "-2")) { safef(buf,sizeof(buf),"N/D"); } else if (sameWord(s, "-1")) { safef(buf,sizeof(buf),"N/A"); } else { safef(buf,sizeof(buf),"%.3f",sqlDouble(s)); } } else { safef(buf,sizeof(buf),"%.1f",sqlDouble(s)); } } freeMem(s); hPrintf("<TD align=right>"); hPrintf("%s", buf); hPrintf("</TD>"); }
void doExpRatio(struct trackDb *tdb, char *item, struct customTrack *ct) /* Generic expression ratio deatils using microarrayGroups.ra file */ /* and not the expRecord tables. */ { char *expScale = trackDbRequiredSetting(tdb, "expScale"); char *expStep = trackDbRequiredSetting(tdb, "expStep"); double maxScore = atof(expScale); double stepSize = atof(expStep); struct bed *bedList; char *itemName = cgiUsualString("i2","none"); char *expName = (item == NULL) ? itemName : item; char *tdbSetting = trackDbSettingOrDefault(tdb, "expColor", "redGreen"); char *colorVal = NULL; enum expColorType colorScheme; char colorVarName[256]; safef(colorVarName, sizeof(colorVarName), "%s.color", tdb->track); colorVal = cartUsualString(cart, colorVarName, tdbSetting); colorScheme = getExpColorType(colorVal); if (sameWord(tdb->grp, "cancerGenomics")) { /* set global flag */ isCancerGenomicsTrack = TRUE; } if (!ct) { genericHeader(tdb, itemName); bedList = loadMsBed(tdb, tdb->table, seqName, winStart, winEnd); } else if (ct->dbTrack) { genericHeader(tdb, itemName); printCustomUrl(tdb, itemName, TRUE); bedList = ctLoadMultScoresBedDb(ct, seqName, winStart, winEnd); } else bedList = bedFilterListInRange(ct->bedList, NULL, seqName, winStart, winEnd); if (bedList == NULL) printf("<b>No Expression Data in this Range.</b>\n"); else if (expName && sameString(expName, "zoomInMore")) printf("<b>Too much data to display in detail in this range.</b>\n"); else { struct microarrayGroups *groupings = NULL; struct maGrouping *combineGroup; struct hash *erHash = newHash(6); int i; if (!ct) { groupings = maGetTrackGroupings(database, tdb); combineGroup = maCombineGroupingFromCart(groupings, cart, tdb->track); } else combineGroup = maGetGroupingFromCt(ct); maBedClumpGivenGrouping(bedList, combineGroup); for (i = 0; i < combineGroup->numGroups; i++) { /* make stupid exprecord hash.perhaps eventually this won't be needed */ char id[16]; struct expRecord *er = basicExpRecord(combineGroup->names[i], i, 2); safef(id, sizeof(id), "%d", i); hashAdd(erHash, id, er); } puts("<h2></h2><p>\n"); msBedPrintTable(bedList, erHash, itemName, expName, -1*maxScore, maxScore, stepSize, 2, msBedDefaultPrintHeader, msBedExpressionPrintRow, printExprssnColorKey, getColorForExprBed, colorScheme); hashTraverseEls(erHash, erHashElFree); hashFree(&erHash); microarrayGroupsFree(&groupings); } puts("<h2></h2><p>\n"); bedFreeList(&bedList); }
static void filterControlsForTableCt(char *db, char *table) /* Put up filter controls for a custom track. */ { struct customTrack *ct = ctLookupName(table); char *type = ct->dbTrackType; puts("<TABLE BORDER=0>"); if (type != NULL && startsWithWord("maf", type)) { stringFilterOption(db, table, "chrom", " AND "); integerFilter(db, table, "chromStart", "chromStart", " AND "); integerFilter(db, table, "chromEnd", "chromEnd", " AND "); } else if (type != NULL && (startsWithWord("makeItems", type) || sameWord("bedDetail", type) || sameWord("pgSnp", type))) { struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH); struct sqlFieldType *ftList = sqlListFieldsAndTypes(conn, ct->dbTableName); printSqlFieldListAsControlTable(ftList, db, table, ct->tdb, FALSE); hFreeConn(&conn); } else if (ct->wiggle || isBigWigTable(table)) { if ((ct->tdb != NULL) && (ct->tdb != NULL)) { double min, max; wiggleMinMax(ct->tdb,&min,&max); numericFilterWithLimits("ct", table, filterDataValueVar, filterDataValueVar,min,max,""); hPrintf("<TR><TD COLSPAN=3 ALIGN=RIGHT> (dataValue range: [%g,%g]) " "</TD></TR>\n", min, max); } else { numericFilter("ct", table, filterDataValueVar, filterDataValueVar,""); } } else if (isBigBed(db, table, curTrack, ctLookupName)) { struct sqlFieldType *ftList = bigBedListFieldsAndTypes(ct->tdb, NULL); printSqlFieldListAsControlTable(ftList, db, table, ct->tdb, FALSE); } else if (isBamTable(table)) { struct sqlFieldType *ftList = bamListFieldsAndTypes(); printSqlFieldListAsControlTable(ftList, db, table, ct->tdb, FALSE); } else if (isVcfTable(table, NULL)) { struct sqlFieldType *ftList = vcfListFieldsAndTypes(); printSqlFieldListAsControlTable(ftList, db, table, ct->tdb, FALSE); } else { if (ct->fieldCount >= 3) { stringFilterOption(db, table, "chrom", " AND "); integerFilter(db, table, "chromStart", "chromStart", " AND "); integerFilter(db, table, "chromEnd", "chromEnd", " AND "); } if (ct->fieldCount >= 4) { stringFilterOption(db, table, "name", " AND "); } if (ct->fieldCount >= 5) { numericFilter(db, table, "score", "score", " AND "); } if (ct->fieldCount >= 6) { stringFilterOption(db, table, "strand", " AND "); } if (ct->fieldCount >= 8) { integerFilter(db, table, "thickStart", "thickStart", " AND "); integerFilter(db, table, "thickEnd", "thickEnd", " AND "); } if (ct->fieldCount >= 12) { integerFilter(db, table, "blockCount", "blockCount", " AND "); } /* These are not bed fields, just extra constraints that we offer: */ if (ct->fieldCount >= 3) { integerFilter(db, table, "chromLength", "(chromEnd - chromStart)", (ct->fieldCount >= 8) ? " AND " : ""); } if (ct->fieldCount >= 8) { integerFilter( db, table, "thickLength", "(thickEnd - thickStart)", " AND "); eqFilterOption(db, table, "compareStarts","chromStart","thickStart", " AND "); eqFilterOption(db, table, "compareEnds", "chromEnd", "thickEnd", ""); } } puts("</TABLE>"); if (ct->wiggle || isBigWigTable(table) || isBamTable(table) || isVcfTable(table, NULL)) { char *name; hPrintf("<TABLE BORDER=0><TR><TD> Limit data output to: \n"); name = filterFieldVarName("ct", table, "_", filterMaxOutputVar); cgiMakeDropList(name, maxOutMenu, maxOutMenuSize, cartUsualString(cart, name, maxOutMenu[0])); hPrintf(" lines</TD></TR></TABLE>\n"); } hPrintf("<BR>\n"); cgiMakeButton(hgtaDoFilterSubmit, "submit"); hPrintf(" "); cgiMakeButton(hgtaDoMainPage, "cancel"); }
static void ctdPrint(struct section *section, struct sqlConnection *conn, char *geneId) /* Print out CTD section. */ { char query[256]; struct sqlResult *sr; char **row; char *chemId, *chemName; int chemCnt; int first = 1; boolean showCompleteCtdList; struct dyString *currentCgiUrl; showCompleteCtdList = FALSE; if (cgiOptionalString("showAllCtdRef") != NULL) { if (sameWord(cgiOptionalString("showAllCtdRef"), "Y") || sameWord(cgiOptionalString("showAllCtdRef"), "y") ) { showCompleteCtdList = TRUE; } cartRemove(cart, "showAllCtdRef"); } currentCgiUrl = cgiUrlString(); /* List chemicals related to this gene */ if (isRgdGene(conn)) { sqlSafef(query, sizeof(query), "select ChemicalId, ChemicalName from rgdGene2Xref x, hgFixed.ctdSorted c where x.info=c.GeneSymbol and rgdGeneId='%s' and infoType='Name'", geneId); } else { sqlSafef(query, sizeof(query), "select ChemicalId, ChemicalName from kgXref x, hgFixed.ctdSorted c where x.geneSymbol=c.GeneSymbol and kgId='%s'", geneId); } sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); chemCnt = 0; while (row != NULL) { chemId = cloneString(row[0]); chemName = cloneString(row[1]); if (first) { printf("<B>The following chemicals interact with this gene</B>\n"); printf("<UL>"); first = 0; } printf("<LI><A HREF=\"http://ctd.mdibl.org/detail.go?type=chem&acc=%s\" target=_blank>", chemId); printf("%s</A>\n", chemId); printf("%s\n", chemName); printf("</LI>"); chemCnt++; row = sqlNextRow(sr); /* Initially, just show no more than 10 items */ if ((!showCompleteCtdList) && (chemCnt >= 10) && (row != NULL)) { chemCnt++; break; } } sqlFreeResult(&sr); if (!first) printf("</UL>"); /* Offer user the option to see the complete list */ if ((!showCompleteCtdList) && chemCnt > 10) { printf("<B> more ... </B>"); printf("<A HREF=\"%s?showAllCtdRef=Y&%s#ctd\">click here to view the complete list</A> " ,"hgGene", currentCgiUrl->string); } return; }
void describeFields(char *db, char *table, struct asObject *asObj, struct sqlConnection *conn) /* Print out an HTML table showing table fields and types, and optionally * offering histograms for the text/enum fields. */ { struct sqlResult *sr; char **row; #define TOO_BIG_FOR_HISTO 500000 boolean tooBig = (sqlTableSize(conn, table) > TOO_BIG_FOR_HISTO); char query[256]; struct slName *exampleList, *example; boolean showItemRgb = FALSE; showItemRgb=bedItemRgb(findTdbForTable(db, curTrack, table, ctLookupName)); // should we expect itemRgb instead of "reserved" sqlSafef(query, sizeof(query), "select * from %s limit 1", table); exampleList = storeRow(conn, query); sqlSafef(query, sizeof(query), "describe %s", table); sr = sqlGetResult(conn, query); hTableStart(); hPrintf("<TR><TH>field</TH>"); if (exampleList != NULL) hPrintf("<TH>example</TH>"); hPrintf("<TH>SQL type</TH> "); if (!tooBig) hPrintf("<TH>info</TH> "); if (asObj != NULL) hPrintf("<TH>description</TH> "); puts("</TR>\n"); example = exampleList; while ((row = sqlNextRow(sr)) != NULL) { if (showItemRgb && (sameWord(row[0],"reserved"))) hPrintf("<TR><TD><TT>itemRgb</TT></TD> "); else hPrintf("<TR><TD><TT>%s</TT></TD> ", row[0]); if (exampleList != NULL) { hPrintf("<TD>"); if (example != NULL) hPrintf("%s", cleanExample(example->name)); else hPrintf("n/a"); hPrintf("</TD>"); } // enums/sets with many items can make for painfully wide rows in the table -- // add spaces between quoted list values: if (stringIn("','", row[1])) { struct dyString *spaced = dyStringSub(row[1], "','", "', '"); hPrintf("<TD><TT>%s</TT></TD>", spaced->string); } else hPrintf("<TD><TT>%s</TT></TD>", row[1]); if (!tooBig) { hPrintf(" <TD>"); if ((isSqlStringType(row[1]) && !sameString(row[1], "longblob")) || isSqlEnumType(row[1]) || isSqlSetType(row[1])) { hPrintf("<A HREF=\"%s", getScriptName()); hPrintf("?%s", cartSidUrlString(cart)); hPrintf("&%s=%s", hgtaDatabase, db); hPrintf("&%s=%s", hgtaHistoTable, table); hPrintf("&%s=%s", hgtaDoValueHistogram, row[0]); hPrintf("\">"); hPrintf("values"); hPrintf("</A>"); } else if (isSqlNumType(row[1])) { hPrintf("<A HREF=\"%s", getScriptName()); hPrintf("?%s", cartSidUrlString(cart)); hPrintf("&%s=%s", hgtaDatabase, db); hPrintf("&%s=%s", hgtaHistoTable, table); hPrintf("&%s=%s", hgtaDoValueRange, row[0]); hPrintf("\">"); hPrintf("range"); hPrintf("</A>"); } else { hPrintf(" "); } hPrintf("</TD>"); } if (asObj != NULL) { struct asColumn *asCol = asColumnFind(asObj, row[0]); hPrintf(" <TD>"); if (asCol != NULL) hPrintf("%s", asCol->comment); else { if (sameString("bin", row[0])) hPrintf("Indexing field to speed chromosome range queries."); else hPrintf(" "); } hPrintf("</TD>"); } puts("</TR>"); if (example != NULL) example = example->next; } hTableEnd(); sqlFreeResult(&sr); }
int main(int argc, char *argv[]) { struct sqlConnection *conn, *conn2, *conn3; char query2[256], query3[256]; struct sqlResult *sr2, *sr3; char **row2, **row3; char condStr[255]; char *answer; char *kgTempDb; char *outfileName; FILE *outf; int i; char *chp; char *acc2; char *name, *txStart, *txEnd; char *chrom; char *acc, *stat; char *frame, *start, *stop; char *causes; char *genomeDb; char *geneName; char srcType; int alignCnt = 0; char *candTable, *chkTable; int orfStop, cdsGap, cdsSplice, numCdsIntrons; boolean passed; float ranking; if (argc != 6) usage(); kgTempDb = argv[1]; genomeDb = argv[2]; candTable = argv[3]; chkTable = argv[4]; outfileName = argv[5]; outf = mustOpen(outfileName, "w"); conn = hAllocConn(genomeDb); conn2= hAllocConn(genomeDb); conn3= hAllocConn(genomeDb); /* go through each protein */ sqlSafef(query2, sizeof(query2), "select * from %s.%s", kgTempDb, candTable); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); while (row2 != NULL) { name = row2[0]; chrom = row2[1]; txStart = row2[3]; txEnd = row2[4]; /* retrieve gene-check results */ sqlSafef(query3, sizeof(query3), "select * from %s.%s where acc='%s' and chrStart=%s and chrEnd = %s", kgTempDb, chkTable, name, txStart, txEnd); sr3 = sqlMustGetResult(conn3, query3); row3 = sqlNextRow(sr3); { passed = FALSE; ranking = 3; acc = row3[0]; stat = row3[5]; frame = row3[6]; start = row3[7]; stop = row3[8]; orfStop = atoi(row3[9]); cdsGap = atoi(row3[10]); cdsSplice = atoi(row3[12]); numCdsIntrons = atoi(row3[18]); causes = row3[21]; ranking = 9; /* all genes passed gene-check with status ok are considered good */ if (sameWord(stat, "ok")) { passed = TRUE; ranking = 1; } else { /* frame, start, orfStop, and stop conditions must be met for KG candidates */ if ((sameWord(frame, "ok")) && (sameWord(start, "ok")) && (orfStop == 0) && (sameWord(stop, "ok")) ) { ranking = 2; /* accept cdsSplice = 0 or (cdsSplice = 1 and numCdsIntrons > 1) */ if ((cdsSplice == 0) || ((numCdsIntrons > 1) && (cdsSplice == 1))) { passed = TRUE; } /* if cdsGap > 0, degrade it ranking by 1. If cdsGap is not a multiple of 3, degrade its ranking further */ if (cdsGap > 0) { ranking = ranking + 1; if ((cdsGap - (cdsGap/3)*3) != 0) ranking = ranking + 1; } } } /* give RefSeq entries 0.5 advantage in its ranking */ sqlSafefFrag(condStr, sizeof(condStr), "name='%s'", acc); answer = sqlGetField(genomeDb, "refGene", "name", condStr); if (answer != NULL) { ranking = ranking - 0.5; } else { chp = strstr(acc, "_"); if (chp != NULL) { acc2 = chp + 1; } else { acc2 = acc; } sqlSafefFrag(condStr, sizeof(condStr), "name='%s'", acc2); /* If it is an MGC gene, give it a 0.3 advantable */ answer = sqlGetField(genomeDb, "mgcGenes", "name", condStr); if (answer != NULL) { ranking = ranking - 0.3; } } /* print out entries, with their rankings, that passed the above criteria */ if (passed) { /*for (i=0; i<10; i++) { fprintf(outf, "%s\t", row2[i]); } */ geneName = strdup(row2[0]); chp = strstr(geneName, "_"); if (chp != NULL) { if (strstr(geneName, "NM_") != NULL) { srcType = 'R'; /* src is RefSeq */ } else { chp++; /* keep the composite name, so that kgGetCds can process correctly */ /* geneName = chp; */ srcType = 'U'; /* src is UCSC prot/mrna alignment */ } } else { srcType = 'G'; /* src is GenBank */ } alignCnt++; fprintf(outf, "%s\t", geneName); for (i= 1; i<10; i++) fprintf(outf, "%s\t", row2[i]); fprintf(outf, "%c%d\t", srcType, alignCnt); fprintf(outf, "%.2f\n", ranking); } row3 = sqlNextRow(sr3); } sqlFreeResult(&sr3); row2 = sqlNextRow(sr2); } sqlFreeResult(&sr2); hFreeConn(&conn); hFreeConn(&conn2); hFreeConn(&conn3); fclose(outf); return(0); }
void doGvf(struct trackDb *tdb, char *item) /* Show details for variants represented as GVF, stored in a bed8Attrs table */ { struct sqlConnection *conn = hAllocConn(database); int start = cartInt(cart, "o"); char query[1024]; sqlSafef(query, sizeof(query), "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d", tdb->table, item, seqName, start); struct sqlResult *sr = sqlGetResult(conn, query); char **row; if ((row = sqlNextRow(sr)) == NULL) errAbort("doGvfDetails: can't find item '%s' in %s at %s:%d", item, database, seqName, start); int rowOffset = hOffsetPastBin(database, seqName, tdb->table); struct bed8Attrs *ba = bed8AttrsLoad(row+rowOffset); bedPrintPos((struct bed *)ba, 3, tdb); int i = 0; // Note: this loop modifies ba->attrVals[i], assuming we won't use them again: for (i = 0; i < ba->attrCount; i++) { // The ID is the bed8Attrs name and has already been displayed: if (sameString(ba->attrTags[i], "ID")) continue; cgiDecode(ba->attrVals[i], ba->attrVals[i], strlen(ba->attrVals[i])); char *tag = ba->attrTags[i]; // User-defined keywords used in dbVar's GVF: if (sameString(tag, "var_type")) // This one isn't anymore, but I add it back (hg18.txt). tag = "Variant type"; else if (sameString(tag, "clinical_int")) tag = "Clinical interpretation"; else if (sameString(tag, "var_origin")) tag = "Variant origin"; else if (islower(tag[0])) // Uppercase for nice display, assuming user doesn't care which keywords are // user-defined vs. GVF standard: tag[0] = toupper(tag[0]); // GVF standard Start_range and End_range tags (1-based coords): if (sameString(tag, "Start_range") || sameString(tag, "End_range")) { char *copy = cloneString(ba->attrVals[i]); char *words[3]; int wordCount = chopCommas(copy, words); if (wordCount == 2 && (sameString(".", words[0]) || isInteger(words[0])) && (sameString(".", words[1]) || isInteger(words[1]))) { boolean isStartRange = sameString(tag, "Start_range"); char *rangeStart = words[0], *rangeEnd = words[1]; if (sameString(".", rangeStart)) rangeStart = "unknown"; if (sameString(".", rangeEnd)) rangeEnd = "unknown"; if (isStartRange) printf("<B>Start range</B>: outer start %s, inner start %s<BR>\n", rangeStart, rangeEnd); else printf("<B>End range</B>: inner end %s, outer end %s<BR>\n", rangeStart, rangeEnd); } else // not formatted as expected, just print as-is: printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } // Parent sounds like mom or dad (as in var_origin)... tweak it too: else if (sameString(tag, "Parent")) { printf("<B>Variant region:</B> " "<A HREF=\"http://www.ncbi.nlm.nih.gov/dbvar/variants/%s/\" " "TARGET=_BLANK>%s</A><BR>\n", ba->attrVals[i], htmlEncode(ba->attrVals[i])); } else if (sameString(tag, "Name")) { char *url = trackDbSetting(tdb, "url"); // Show the Name only if it hasn't already appeared in the URL: if (url == NULL || !stringIn("$$", url)) printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } else if (sameWord(tag, "Phenotype_id") && startsWith("HPO:HP:", ba->attrVals[i])) { subChar(tag, '_', ' '); printf("<B>%s</B>: <A HREF=\"http://www.berkeleybop.org/obo/%s\" " "TARGET=_BLANK>%s</A><BR>\n", tag, ba->attrVals[i]+strlen("HPO:"), htmlEncode(ba->attrVals[i])); } else { subChar(tag, '_', ' '); printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } } sqlFreeResult(&sr); hFreeConn(&conn); /* printTrackHtml is done in genericClickHandlerPlus. */ }
int main(int argc, char *argv[]) { char *database; char *outFn; char pqc; boolean has2Bands; char gapTableName[255]; struct sqlConnection *conn,*conn2; char query[1024]; char query2[1024]; struct sqlResult *sr; struct sqlResult *sr2; char **row; char **row2; int startPos; int endPos; int startPosBand1; int endPosBand1; int startPosBand2; int endPosBand2; char locSav[255]; char *chp; char *chpTer; char *chpCen; char chrom[255]; char band1[255]; char band2[255]; if (argc != 3) usage(); database = argv[1]; conn= hAllocConn(database); conn2= hAllocConn(database); outFn = argv[2]; outf = mustOpen(outFn, "w"); /* process omimGeneMap records with *p* or *q* locations */ sqlSafef(query2, sizeof query2, "select omimId, location from omimGeneMapNew where location like '\%cp%c' or location like '%cq%c'", '%','%', '%','%'); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); while (row2 != NULL) { boolean band1Success; boolean band1HasTer; boolean band2HasTer; boolean band1HasCen; boolean band2HasCen; band1Success = FALSE; band1HasTer = FALSE; band2HasTer = FALSE; band1HasCen = FALSE; band2HasCen = FALSE; omimId = row2[0]; location = row2[1]; /* save original location string */ strcpy(locSav, location); /* break band1 and band2 if there is one */ chp = strstr(location, "-"); if (chp != NULL) { has2Bands = TRUE; *chp = '\0'; chp++; strncpy(band2, chp, (size_t)(sizeof(band2))); } else { has2Bands = FALSE; } /* construct chrom first */ safef(chrom, sizeof(chrom), "chr%s", location); chp = chrom; /* skip "chr" */ chp++; chp++; chp++; /* get the end position of "chrX" */ while (! ( (*chp == 'p') || (*chp == 'q') || \ (*chp == 'c') || (*chp == '\0') ) ) chp++; if (*chp == '\0') { /* something is wrong, skip this record */ fprintf(stderr, "in chrom processing, did not get p, q, or c got %s, locSav=%s, omimId=%s\n", location, locSav, omimId); goto skip1; } /* now we have p or q or c (first char of "cen") */ pqc = *chp; /* construct band1 */ strncpy(band1, chp, sizeof(band1)); /* terminate the chrom str*/ *chp = '\0'; // process band1 first strcpy(gapTableName, "gap"); if (sameWord(database, "hg18")) safef(gapTableName, sizeof(gapTableName), "%s_gap", chrom); band1Success = FALSE; chpTer = strstr(band1, "ter"); if (chpTer != NULL) { band1HasTer = TRUE; *chpTer = '\0'; } if (band1HasTer == TRUE) { sqlSafef(query, sizeof query, "select chromStart, chromEnd from %s where chrom = '%s' and type ='telomere' and chromStart = 0", gapTableName, chrom); } else { /* process "cen" */ if (pqc == 'c') { band1HasCen = TRUE; sqlSafef(query, sizeof query, "select chromStart, chromEnd from %s where chrom = '%s' and type ='centromere'", gapTableName, chrom); } else { /* process p or q */ if ((pqc == 'p') || (pqc == 'q')) { sqlSafef(query, sizeof query, "select chromStart, chromEnd from cytoBand where chrom = '%s' and name = '%s'", chrom, band1); } else { fprintf(stderr, "can not deal with omimId=%s locaSav=%s band1=%s\n", omimId, locSav, band1); goto skip1; } } } sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { startPosBand1 = atoi(row[0]); endPosBand1 = atoi(row[1]); band1Success = TRUE; } else { sqlFreeResult(&sr); sqlSafef(query, sizeof query, "select min(chromStart), max(chromEnd) from cytoBand where chrom = '%s' and name like '%s%c'", chrom, band1, '%'); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if ((row != NULL) && (row[0] != NULL) && (row[1] != NULL)) { startPosBand1 = atoi(row[0]); endPosBand1 = atoi(row[1]); // special treatment for "...ter" band1 location if ((band1HasTer) && (pqc == 'p') && (has2Bands)) { endPosBand1 = 0; } band1Success = TRUE; } else { band1Success = FALSE; fprintf(stderr, "band1 processing failed and skipped: band1=%s, locSav=%s, omimId=%s\n", band1, locSav, omimId); } } sqlFreeResult(&sr); /* now process band2 */ if (band1Success && has2Bands) { boolean band2Success; band2Success = FALSE; // do a special processing here for cases like "2q32-34" if (isdigit(band2[0]) && pqc == 'q') { char temp[300]; safef(temp, sizeof(temp), "q%s", band2); safef(band2, sizeof(band2), "%s", temp); } chpTer = strstr(band2, "ter"); if (chpTer != NULL) { band2HasTer = TRUE; *chpTer = '\0'; sqlSafef(query, sizeof query, "select max(chromEnd), max(chromEnd) from cytoBand where chrom = '%s' and name like '%s%c'", chrom, band2, '%'); } else { chpCen = strstr(band2, "cen"); if (chpCen != NULL) { band2HasCen = TRUE; sqlSafef(query, sizeof query, "select chromStart, chromEnd from %s where chrom = '%s' and type = 'centromere'", gapTableName, chrom); } else { sqlSafef(query, sizeof query, "select chromStart, chromEnd from cytoBand where chrom = '%s' and name = '%s'", chrom, band2); } } sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { startPosBand2 = atoi(row[0]); endPosBand2 = atoi(row[1]); band2Success = TRUE; } else { sqlFreeResult(&sr); sqlSafef(query, sizeof query, "select min(chromStart), max(chromEnd) from cytoBand where chrom = '%s' and name like '%s%c'", chrom, band2, '%'); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if ((row != NULL) && (row[0] != NULL) && (row[1] != NULL)) { startPosBand2 = atoi(row[0]); endPosBand2 = atoi(row[1]); endPos = atoi(row[1]); band2Success = TRUE; } else { band2Success = FALSE; fprintf(stderr, "band2 processing failed and skipped: band2=%s, locSav=%s, omimId=%s\n", band2, locSav, omimId); } } if (band2Success) { startPos = min(startPosBand1, startPosBand2); endPos = max(endPosBand1, endPosBand2); fprintf(outf, "%s\t%d\t%d\t%s\n", chrom, startPos, endPos, omimId); } } else { if (band1Success) { fprintf(outf, "%s\t%d\t%d\t%s\n", chrom, startPosBand1, endPosBand1, omimId); } } sqlFreeResult(&sr); skip1: row2 = sqlNextRow(sr2); } sqlFreeResult(&sr2); fclose(outf); hFreeConn(&conn2); return(0); }
static void demogPrint(struct section *section, struct sqlConnection *conn, char *subjId) /* Print out GAD section. */ { char *gender, *age, *race; char *location; char query[256]; struct sqlResult *sr; char **row; char *weight, *riskFactor; char *comment; sqlSafef(query, sizeof(query), "select gender, age, race, geography, riskFactor, weight, comment from gsidSubjInfo where subjId='%s'", subjId); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { printf("<TABLE>"); gender = row[0]; age = row[1]; race = row[2]; location = row[3]; riskFactor = row[4]; weight = row[5]; comment = row[6]; printf("<TR>"); printf("<TD>"); printf("<B>subject ID:</B> %s%s", subjId, GSBLANKS); printf("</TD>"); printf("</TR>"); printf("<TR>"); printf("<TD>"); printf("<B>gender:</B> %s%s", gender, GSBLANKS); printf("</TD>"); printf("<TD>"); printf("<B>age:</B> %s%s", age, GSBLANKS); printf("</TD>"); printf("<TD>"); printf("<B>risk factor:</B> %s%s", riskFactor, GSBLANKS); printf("</TD>"); printf("</TR>"); printf("<TR>"); printf("<TD>"); printf("<B>race:</B> %s%s\n", race, GSBLANKS); printf("</TD>"); printf("<TD>"); printf("<B>weight(kg):</B> %s\n", weight); printf("</TD>"); printf("<TD>"); printf("<B>location:</B> %s\n", location); printf("</TD>"); printf("</TR>"); printf("</TABLE>"); /* put out the special comment if it exists */ if (!sameWord(comment, "")) { printf("<BR>"); printf("<B>Special Comment:</B> %s\n", comment); } } sqlFreeResult(&sr); return; }
int main(int argc, char *argv[]) { struct sqlConnection *conn2; char condStr[500]; FILE *inf; FILE *outf; char line[1000]; char *chrStart; char *inFileName, *outFileName; char contig[100], start[100], end[100]; char num[100], code[100], id[100], oStart[100], oEnd[100], strnd[100]; char *database; char *oldContig; int oldNum = 0; int lastNum = 0; int lastEnd = 0; if (argc != 4)usage(); database = argv[1]; inFileName = argv[2]; outFileName = argv[3]; hSetDb(database); outf = fopen(outFileName, "w"); conn2= hAllocConn(); inf = mustOpen(inFileName, "r"); oldContig = strdup(""); while (fgets(line, 1000, inf) != NULL) { sscanf(line, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", contig, start, end, num, code, id, oStart, oEnd, strnd); sqlSafefFrag(condStr, sizeof condStr, "ctg_acc='%s'", contig); chrStart = sqlGetField(database, "seq_contig", "chr_start", condStr); if (!sameWord(oldContig, contig)) { if (!sameWord(oldContig, "")) { lastNum++; fprintf(outf, "%s\t%d\t%d\t", oldContig, lastEnd+1, atoi(chrStart)+atoi(start)-2); fprintf(outf, "%d\t%s\t%d\t%s\t%s\n", lastNum, "N", atoi(chrStart)+atoi(start)-2 - (lastEnd+1) +1, "contig", "no"); } oldContig = strdup(contig); oldNum = lastNum; } lastNum = atoi(num) + oldNum; fprintf(outf, "%s\t%d\t%d\t", contig, atoi(chrStart)+atoi(start)-1, atoi(chrStart)+atoi(end)-1); fprintf(outf, "%d\t%s\t%s\t%s\t%s\t%s\n", lastNum, code, id, oStart, oEnd, strnd); lastEnd = atoi(chrStart)+atoi(end)-1; } hFreeConn(&conn2); fclose(outf); return(0); }
void gsSendToDM() /* upload the generated file to DM */ { // This is now run via fork/exec as a separate background process. char *trashFileName = cartUsualString(cart, "gsTemp", ""); char *fileName = cartUsualString(cart, hgtaOutFileName, ""); // adjust upload name based on compression and existing extension char *compressType = cartUsualString(cart, hgtaCompressType, textOutCompressNone); if (!(isEmpty(compressType) || sameWord(compressType, textOutCompressNone))) { char *suffix = getCompressSuffix(compressType); if (!endsWith(fileName, suffix)) fileName = addSuffix(fileName, suffix); } off_t fSize = fileSize(trashFileName); char *gsToken = cartUsualString(cart, "gsToken", NULL); char *contentType = "text/plain"; // some examples show applicaton/octet-stream char *persDir = getGsPersonalDirectory(gsToken); char *user = strrchr(persDir,'/'); ++user; char nicenumber[1024]=""; sprintWithGreekByte(nicenumber, sizeof(nicenumber), fSize); htmlOpen("Uploading Output to GenomeSpace"); printf("Name: %s<br>\n", fileName); printf("Size: %s<br>\n", nicenumber); printf("Progress: 0%%<br>\n"); printf("You can remain on this page and monitor upload progress.<br>\n"); printf("Otherwise, feel free to continue working, and your output will appear in GenomeSpace when the upload is complete.<br>\n"); printf("<br>\n"); printf("<FORM ACTION=\"/cgi-bin/hgTables\" METHOD=GET>\n" "<INPUT TYPE=SUBMIT NAME=\"%s\" VALUE=\"Back\" >\n" "<INPUT TYPE=SUBMIT NAME=\"Refresh\" VALUE=\"Refresh\" onclick='window.location=window.location;return false;' >" "</FORM>\n" , hgtaDoMainPage); puts("<script type=\"text/JavaScript\">"); puts("<!--"); puts("setTimeout(\"location = location;\",5000);"); puts("-->"); puts("</script>"); htmlClose(); fflush(stdout); // MD5 COMPUTE unsigned char md5[16]; /* Keep the md5 checksum here. */ md5ForFile(trashFileName,md5); char *hexMd5 = md5ToHex(md5); char *base64Md5 = base64Encode((char*)md5, 16); char *s3UploadUrl = gsUploadUrl(gsToken, user, fileName, fSize, base64Md5, contentType); char *s3Response = gsS3Upload(s3UploadUrl, trashFileName, fSize, base64Md5, hexMd5, contentType, TRUE, fileName); if (sameString(s3Response,"")) { // Reset global flags before drawing brand new page webHeadAlreadyOutputed = FALSE; webInTextMode = FALSE; includedResourceFiles = NULL; htmlWarnBoxSetUpAlready=FALSE; htmlOpen("Uploaded Output to GenomeSpace"); printf("Name: %s<br>\n", fileName); printf("Size: %s<br>\n", nicenumber); printf("Output has been successfully uploaded.<br>\n"); printf("<br>"); printf("<FORM ACTION=\"/cgi-bin/hgTables\" METHOD=GET>\n" "<INPUT TYPE=SUBMIT NAME=\"%s\" VALUE=\"Back\" ></FORM>\n" , hgtaDoMainPage); htmlClose(); fflush(stdout); } //printf("s3UploadUrl [%s]", s3UploadUrl); //printf("<br>"); //printf("s3Response [%s]", s3Response); //printf("<br>"); exit(0); // CANNOT RETURN }
void presentProteinSelections(char *queryID, int protCntInSwissByGene, int protCntInSupportedGenomeDb) /* Fuction to present a web page with proteins of different organisms */ { char *gDatabase; char *org = NULL; char *spID, *displayID, *desc; char cond_str[255]; struct sqlConnection *conn, *conn3; char query[256], query3[512]; struct sqlResult *sr, *sr3; char **row, **row3; struct sqlConnection *connCentral, *proteinsConn; char queryCentral[256]; struct sqlResult *srCentral; char *answer; char *taxonId, *protAcc, *protDisp, *protOrg, *protDesc; char *oldOrg, *orgSciName; char *pbOrgSciName[MAX_PB_ORG]; boolean pbOrgPresented[MAX_PB_ORG]; boolean skipIt; int i, maxPbOrg; int otherCnt; connCentral = hConnectCentral(); hPrintf("<TABLE WIDTH=\"100%%\" BGCOLOR=\"#"HG_COL_HOTLINKS"\" BORDER=\"0\" CELLSPACING=\"0\""); hPrintf("CELLPADDING=\"2\"><TR>\n"); hPrintf("<TD ALIGN=LEFT><A HREF=\"../index.html\">%s</A></TD>", wrapWhiteFont("Home")); hPrintf("<TD style='text-align:center; color:#FFFFFF; font-size:medium;'>%s</TD>", "UCSC Proteome Browser"); if (proteinInSupportedGenome) { hPrintf("<TD ALIGN=Right><A HREF=\"../goldenPath/help/pbTracksHelpFiles/pbTracksHelp.shtml\""); } else { hPrintf("<TD ALIGN=Right><A HREF=\"../goldenPath/help/pbTracksHelpFiles/pbTracksHelp.shtml\""); } hPrintf("TARGET=_blank>%s</A></TD>", wrapWhiteFont("Help")); hPrintf("</TR></TABLE>"); hPrintf("<FONT SIZE=4><BR><B>Please select one of the following proteins:<BR><BR></B></FONT>\n"); /* remmember a list of scientific names for the genomes that supports PB */ sqlSafef(queryCentral, sizeof(queryCentral), "select distinct dbDb.scientificName from dbDb where hgPbOk=1"); srCentral = sqlMustGetResult(connCentral, queryCentral); row3 = sqlNextRow(srCentral); i=0; while (row3 != NULL) { pbOrgSciName[i] = strdup(row3[0]); pbOrgPresented[i] = FALSE; i++; row3 = sqlNextRow(srCentral); } maxPbOrg = i; /* go through each genome DB that supports PB */ sqlSafef(queryCentral, sizeof(queryCentral), "select defaultDb.name, dbDb.organism, dbDb.scientificName from dbDb,defaultDb where hgPbOk=1 and defaultDb.name=dbDb.name"); srCentral = sqlMustGetResult(connCentral, queryCentral); row3 = sqlNextRow(srCentral); while (row3 != NULL) { gDatabase = row3[0]; org = row3[1]; orgSciName= row3[2]; protDbName = hPdbFromGdb(gDatabase); proteinsConn = sqlConnect(protDbName); conn = sqlConnect(gDatabase); sqlSafefFrag(cond_str, sizeof(cond_str), "alias='%s' and spID != ''", queryID); answer = sqlGetField(gDatabase, "kgSpAlias", "count(distinct spID)", cond_str); if ((answer != NULL) && (!sameWord(answer, "0"))) { /* display organism name */ hPrintf("<FONT SIZE=4><B>"); hPrintf("<A href=\"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Undef&name=%s&lvl=0&srchmode=1\" TARGET=_blank>%s</A>", cgiEncode(orgSciName), orgSciName); hPrintf(" (%s):</B></FONT>\n", org); hPrintf("<UL>"); sqlSafef(query, sizeof(query), "select distinct spID from %s.kgSpAlias where alias='%s' " "and spID != ''", gDatabase, queryID); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); while (row != NULL) { spID = row[0]; sqlSafefFrag(cond_str, sizeof(cond_str), "accession='%s'", spID); displayID = sqlGetField(protDbName, "spXref3", "displayID", cond_str); sqlSafefFrag(cond_str, sizeof(cond_str), "accession='%s'", spID); desc = sqlGetField(protDbName, "spXref3", "description", cond_str); /* display a protein */ hPrintf( "<LI><A HREF=\"../cgi-bin/pbGlobal?proteinID=%s&db=%s\">", displayID, gDatabase); if (sameWord(spID, displayID) || (strstr(displayID, spID) != NULL)) { hPrintf("%s</A> %s\n", spID, desc); } else { hPrintf("%s</A> (aka %s) %s\n", spID, displayID, desc); } /* remember the fact that a protein is shown under this PB supported genome */ for (i=0; i<maxPbOrg; i++) { if (sameWord(orgSciName, pbOrgSciName[i])) { pbOrgPresented[i] = TRUE; } } row = sqlNextRow(sr); } hPrintf("</UL>");fflush(stdout); sqlFreeResult(&sr); } sqlDisconnect(&proteinsConn); row3 = sqlNextRow(srCentral); } sqlFreeResult(&srCentral); hDisconnectCentral(&connCentral); sqlDisconnect(&conn); if (protCntInSwissByGene > protCntInSupportedGenomeDb) { otherCnt = -1; if (protCntInSupportedGenomeDb >0) { otherCnt = 0; hPrintf("<FONT SIZE=4><B>Other Organisms:</B></FONT>\n"); hPrintf("<UL>"); } else { hPrintf("<UL>"); } oldOrg = strdup(""); conn3 = sqlConnect(UNIPROT_DB_NAME); sqlSafef(query3, sizeof(query3), "select taxon.id, gene.acc, displayId.val, binomial, description.val " "from gene, displayId, accToTaxon,taxon, description " "where gene.val='%s' and gene.acc=displayId.acc and accToTaxon.taxon=taxon.id " "and accToTaxon.acc=gene.acc and description.acc=gene.acc order by binomial", queryID); sr3 = sqlMustGetResult(conn3, query3); row3 = sqlNextRow(sr3); /* go through each protein */ while (row3 != NULL) { taxonId = row3[0]; protAcc = row3[1]; protDisp = row3[2]; protOrg = row3[3]; protDesc = row3[4]; /* decide if this entry should be skipped */ skipIt = FALSE; for (i=0; i<maxPbOrg; i++) { if (sameWord(pbOrgSciName[i], protOrg) && pbOrgPresented[i]) { skipIt = TRUE; } } /* print organism name if organism changed */ if (!sameWord(protOrg, oldOrg)) { if (!sameWord(oldOrg, "")) { hPrintf("</UL>\n"); } if (!skipIt) { sqlSafefFrag(cond_str, sizeof(cond_str), "id=%s and nameType='genbank common name'", taxonId); answer = sqlGetField(PROTEOME_DB_NAME, "taxonNames", "name", cond_str); hPrintf("<FONT SIZE=3><B>"); hPrintf("<A href=\"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Undef&name=%s&lvl=0&srchmode=1\" TARGET=_blank>%s</A>", cgiEncode(protOrg), protOrg); if (answer != NULL) { hPrintf(" (%s)", answer); } hPrintf(":</B></FONT>\n"); } hPrintf("<UL>\n"); } /* print protein entry, if it is not already displayed in the PB supported genome list */ if (!skipIt) { otherCnt++; if (sameWord(protAcc, protDisp)) { hPrintf("<LI><A HREF=\"../cgi-bin/pbGlobal?proteinID=%s\">", protAcc); hPrintf("%s</A> %s\n", protAcc, protDesc); } else { hPrintf("<LI><A HREF=\"../cgi-bin/pbGlobal?proteinID=%s\">", protAcc); if (strstr(protDisp, protAcc) != NULL) { hPrintf("%s</A> %s\n", protAcc, protDesc); } else { hPrintf("%s</A> (aka %s) %s\n", protAcc, protDisp, protDesc); } } } oldOrg = strdup(protOrg); row3 = sqlNextRow(sr3); } if (otherCnt == 0) hPrintf("</UL>None");fflush(stdout); sqlFreeResult(&sr3); sqlDisconnect(&conn3); } }
void bandExtents(char *chromosome, char *band, int *retStart, int *retEnd) /* Return start/end of band in chromosome. */ { struct cytoBand *chrStart = NULL, *chrEnd = NULL, *cb; int start = 0, end = 500000000; boolean anyMatch; char choppedBand[64], *s, *e; /* Find first band in chromosome. */ for (cb = bandList; cb != NULL; cb = cb->next) { if (sameString(cb->chrom, chromosome)) { chrStart = cb; break; } } if (chrStart == NULL) errAbort("Couldn't find chromosome %s in band list", chromosome); /* Find last band in chromosome. */ for (cb = chrStart->next; cb != NULL; cb = cb->next) { if (!sameString(cb->chrom, chromosome)) break; } chrEnd = cb; // uglyf("first band %s, last %s\n", chrStart->name, (chrEnd == NULL ? "n/a" : chrEnd->name)); if (sameWord(band, "cen")) { for (cb = chrStart; cb != chrEnd; cb = cb->next) { if (cb->name[0] == 'p') start = cb->chromEnd - 500000; else if (cb->name[0] == 'q') { end = cb->chromStart + 500000; break; } } *retStart = start; *retEnd = end; return; } else if (sameWord(band, "qter")) { *retStart = *retEnd = chromosomeSize(chromosome); *retStart -= 1000000; return; } /* Look first for exact match. */ for (cb = chrStart; cb != chrEnd; cb = cb->next) { if (sameWord(cb->name, band)) { *retStart = cb->chromStart; *retEnd = cb->chromEnd; return; } } /* See if query is less specific.... */ strcpy(choppedBand, band); for (;;) { anyMatch = FALSE; for (cb = chrStart; cb != chrEnd; cb = cb->next) { if (startsWith(choppedBand, cb->name)) { if (!anyMatch) { anyMatch = TRUE; start = cb->chromStart; } end = cb->chromEnd; } } if (anyMatch) { *retStart = start; *retEnd = end; return; } s = strrchr(choppedBand, '.'); if (s == NULL) errAbort("Couldn't find anything like band '%s'", band); else { e = choppedBand + strlen(choppedBand) - 1; *e = 0; if (e[-1] == '.') e[-1] = 0; warn("Band %s%s is at higher resolution than data, chopping to %s%s", chromosome+3, band, chromosome+3, choppedBand); } } }
void doGetText(struct sqlConnection *conn, struct column *colList, struct subjInfo *subjList) /* Put up great big table. */ { struct subjInfo *si; struct column *col; boolean first = TRUE; char *chp, *chp9; if (subjList == NULL) { hPrintf("empty table"); return; } hPrintf("<TT><PRE>"); /* Print labels. */ hPrintf("#"); for (col = colList; col != NULL; col = col->next) { if (col->on) { if (first) first = FALSE; else hPrintf("\t"); hPrintf("%s", col->shortLabel); } } hPrintf("\n"); for (si = subjList; si != NULL; si = si->next) { first = TRUE; for (col = colList; col != NULL; col = col->next) { if (col->on) { boolean special; char *val = col->cellVal(col, si, conn); if (first) first = FALSE; else hPrintf("\t"); if (val == NULL) hPrintf("N/A"); else { special = FALSE; if (sameWord(col->type, "integer") || sameWord(col->type, "double")) { /* special processing for missing data */ if (sameWord(col->name, "SDayLastPTest") || sameWord(col->name, "SDayLastTrTest") || sameWord(col->name, "LastPMNNeutral") || sameWord(col->name, "artDaei") || sameWord(col->name, "seqDay") || sameWord(col->name, "firstRNAPosDay") || sameWord(col->name, "lastSeroNegDay") || sameWord(col->name, "LastTrVisit") || sameWord(col->name, "LastPVisit") || sameWord(col->name, "LastPCD4Blk") || sameWord(col->name, "LastTrCD4Blk") || sameWord(col->name, "LastPAntiGP120") || sameWord(col->name, "LastTrAntiGP120") || sameWord(col->name, "LastTrMnNeutral")) { if (sameWord(val, "-1")) { hPrintf("N/A"); special = TRUE; } if (sameWord(val, "-2")) { hPrintf("N/D"); special = TRUE; } if (sameWord(val, "-3")) { hPrintf(" "); special = TRUE; } if (sameWord(val, "-3.000")) { hPrintf(" "); special = TRUE; } } } if (sameWord(col->name, "cd4Count")) { if (sameWord(val, "-1") || sameWord(val, "0")) { hPrintf("N/A"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(val, "-1")) { hPrintf("N/A"); special = TRUE; } } if (sameWord(col->name, "DAEI")) { if (sameWord(val, "-1")) { hPrintf("N/A"); special = TRUE; } } if (sameWord(col->name, "esdi")) { if (sameWord(val, "-1")) { hPrintf("N/A"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(val, "1000000")) { hPrintf("> 1000000"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(val, "200")) { hPrintf("< 400"); special = TRUE; } } if ((sameWord(col->name, "dnaSeqs")) || (sameWord(col->name, "aaSeqs"))) { chp = val; chp = strstr(chp, "#35;"); while (chp != NULL) { chp = chp +strlen("#35;"); chp9 = strstr(chp, " "); *chp9 = '\0'; hPrintf("%s ", chp); chp9++; chp = strstr(chp9, "#35;"); } special = TRUE; } if (!special) { hPrintf("%s", val); } } freez(&val); } } hPrintf("\n"); } hPrintf("</PRE></TT>"); }
void doPastedIdentifiers(struct sqlConnection *conn) /* Process submit in paste identifiers page. */ { char *idText = trimSpaces(cartString(cart, hgtaPastedIdentifiers)); htmlOpen("Table Browser (Input Identifiers)"); if (isNotEmpty(idText)) { /* Write terms to temp file, checking whether they have matches, and * save temp file name. */ boolean saveIdText = (strlen(idText) < MAX_IDTEXT); char *idTextForLf = saveIdText ? cloneString(idText) : idText; struct lineFile *lf = lineFileOnString("idText", TRUE, idTextForLf); char *line, *word; struct tempName tn; FILE *f; int totalTerms = 0, foundTerms = 0; struct slName* missingTerms = NULL; struct dyString *exampleMissingIds = dyStringNew(256); char *actualDb = database; if (sameWord(curTable, WIKI_TRACK_TABLE)) actualDb = wikiDbName(); struct hTableInfo *hti = maybeGetHti(actualDb, curTable, conn); char *idField = getIdField(actualDb, curTrack, curTable, hti); if (idField == NULL) { warn("Sorry, I can't tell which field of table %s to treat as the " "identifier field.", curTable); webNewSection("Table Browser"); cartRemove(cart, hgtaIdentifierDb); cartRemove(cart, hgtaIdentifierTable); cartRemove(cart, hgtaIdentifierFile); mainPageAfterOpen(conn); htmlClose(); return; } struct slName *allTerms = NULL, *term; while (lineFileNext(lf, &line, NULL)) { while ((word = nextWord(&line)) != NULL) { term = slNameNew(word); slAddHead(&allTerms, term); totalTerms++; } } slReverse(&allTerms); lineFileClose(&lf); char *extraWhere = NULL; int maxIdsInWhere = cartUsualInt(cart, "hgt_maxIdsInWhere", DEFAULT_MAX_IDS_IN_WHERE); if (totalTerms > 0 && totalTerms <= maxIdsInWhere) extraWhere = slNameToInExpression(idField, allTerms); struct lm *lm = lmInit(0); struct hash *matchHash = getAllPossibleIds(conn, lm, idField, extraWhere); trashDirFile(&tn, "hgtData", "identifiers", ".key"); f = mustOpen(tn.forCgi, "w"); for (term = allTerms; term != NULL; term = term->next) { struct slName *matchList = NULL, *match; if (matchHash == NULL) { matchList = slNameNew(term->name); } else { /* Support multiple alias->id mappings: */ char upcased[1024]; safecpy(upcased, sizeof(upcased), term->name); touppers(upcased); struct hashEl *hel = hashLookup(matchHash, upcased); if (hel != NULL) { matchList = slNameNew((char *)hel->val); while ((hel = hashLookupNext(hel)) != NULL) { match = slNameNew((char *)hel->val); slAddHead(&matchList, match); } } } if (matchList != NULL) { foundTerms++; for (match = matchList; match != NULL; match = match->next) { mustWrite(f, match->name, strlen(match->name)); mustWrite(f, "\n", 1); } } else { slAddHead(&missingTerms, slNameNew(term->name)); } } slReverse(&missingTerms); carefulClose(&f); cartSetString(cart, hgtaIdentifierDb, database); cartSetString(cart, hgtaIdentifierTable, curTable); cartSetString(cart, hgtaIdentifierFile, tn.forCgi); if (saveIdText) freez(&idTextForLf); else cartRemove(cart, hgtaPastedIdentifiers); int missingCount = totalTerms - foundTerms; if (missingCount > 0) { char *xrefTable, *aliasField; getXrefInfo(conn, &xrefTable, NULL, &aliasField); boolean xrefIsSame = xrefTable && sameString(curTable, xrefTable); struct tempName tn; trashDirFile(&tn, "hgt/missingIds", cartSessionId(cart), ".tmp"); FILE *f = mustOpen(tn.forCgi, "w"); int exampleCount = 0; for (term = missingTerms; term != NULL; term = term->next) { if (exampleCount < 10) { ++exampleCount; dyStringPrintf(exampleMissingIds, "%s\n", term->name); } fprintf(f, "%s\n", term->name); } carefulClose(&f); dyStringPrintf(exampleMissingIds, "\n<a href=%s>Complete list of missing identifiers<a>\n", tn.forHtml); warn("Note: %d of the %d given identifiers have no match in " "table %s, field %s%s%s%s%s. " "Try the \"describe table schema\" button for more " "information about the table and field.\n" "%d %smissing identifier(s):\n" "%s\n", (totalTerms - foundTerms), totalTerms, curTable, idField, (xrefTable ? (xrefIsSame ? "" : " or in alias table ") : ""), (xrefTable ? (xrefIsSame ? "" : xrefTable) : ""), (xrefTable ? (xrefIsSame ? " or in field " : ", field ") : ""), (xrefTable ? aliasField : ""), exampleCount, exampleCount < missingCount ? "example " : "", exampleMissingIds->string ); webNewSection("Table Browser"); } lmCleanup(&lm); hashFree(&matchHash); } else { cartRemove(cart, hgtaIdentifierFile); } mainPageAfterOpen(conn); htmlClose(); }
void loadCodeBlast(struct track *tg) /* from the bed 6+1 codeBlast table, make a linkedFeaturesSeries and load it. */ { struct linkedFeaturesSeries *lfs = NULL, *originalLfs, *codeLfs, *lfsList = NULL; struct linkedFeatures *lf; struct slName *codes = NULL, *track=NULL, *scores=NULL; struct codeBlast *bedList; struct codeBlast *cb, *list=NULL; struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **temparray3; char *temparray[32]; char *temparray2; char **row; char *tempstring; int x; int cutoff; char cMode[64]; /*The most common names used to display method*/ char *codeNames[18] = {"within genus", "\t", "crenarchaea", "euryarchaea", "\t", "bacteria", "\t", "eukarya", "\t", "thermophile", "hyperthermophile","acidophile", "alkaliphile", "halophile", "methanogen", "strict aerobe", "strict anaerobe", "anaerobe or aerobe"}; int i; safef(cMode, sizeof(cMode), "%s.scoreFilter", tg->tdb->track); cutoff=cartUsualInt(cart, cMode,0 ); sr=hRangeQuery(conn, tg->table, chromName, winStart, winEnd, NULL, 0); while ((row = sqlNextRow(sr)) != NULL) { cb = codeBlastLoad(row); slAddHead(&list, cb); } sqlFreeResult(&sr); hFreeConn(&conn); slReverse(&list); if(list == NULL) return; for(cb = list; cb != NULL; cb = cb->next) { AllocVar(lfs); AllocVar(lf); lfs->name = cloneString(cb->name); lf = lfFromBed6(cb,0,1000); lf->score = cb->score; tempstring=cloneString(cb->code); chopString(tempstring, "," , temparray, ArraySize(temparray)); if(sameWord(database, "pyrFur2")) { temparray3=(char**)calloc(19*8,sizeof(char**)); for(x=0; x<19; x++) { temparray3[x]=(char *)calloc(256, sizeof(char*)); /* Fix to cloneString problem when both patricia and my track was showing at the same time */ if(temparray[x]!=NULL) { if(atoi(temparray[x])==1000) temparray3[x]="1000"; else if(atoi(temparray[x])==900) temparray3[x]="900"; else if(atoi(temparray[x])==800) temparray3[x]="800"; else if(atoi(temparray[x])==700) temparray3[x]="700"; else if(atoi(temparray[x])==600) temparray3[x]="600"; else if(atoi(temparray[x])==500) temparray3[x]="500"; else if(atoi(temparray[x])==400) temparray3[x]="400"; else if(atoi(temparray[x])==300) temparray3[x]="300"; else if(atoi(temparray[x])==200) temparray3[x]="200"; else if(atoi(temparray[x])==100) temparray3[x]="100"; else temparray3[x]="0"; } } } else { temparray3=(char**)calloc(18*8,sizeof(char**)); for(x=0; x<18; x++) { temparray3[x]=(char *)calloc(256, sizeof(char*)); /* Fix to cloneString problem when both patricia and my track was showing at the same time */ if(temparray[x]!=NULL) { if(atoi(temparray[x])==1000) temparray3[x]="1000"; else if(atoi(temparray[x])==900) temparray3[x]="900"; else if(atoi(temparray[x])==800) temparray3[x]="800"; else if(atoi(temparray[x])==700) temparray3[x]="700"; else if(atoi(temparray[x])==600) temparray3[x]="600"; else if(atoi(temparray[x])==500) temparray3[x]="500"; else if(atoi(temparray[x])==400) temparray3[x]="400"; else if(atoi(temparray[x])==300) temparray3[x]="300"; else if(atoi(temparray[x])==200) temparray3[x]="200"; else if(atoi(temparray[x])==100) temparray3[x]="100"; else temparray3[x]="0"; } } } lf->extra = temparray3; lfs->start = lf->start; lfs->end = lf->end; lfs->features= lf; slAddHead(&lfsList, lfs); } tg->items=lfsList; bedList=tg->items; lfsList=NULL; if(tg->limitedVis != tvDense) { originalLfs = tg->items; if(sameWord(database, "pyrFur2")) { for (i = 0; i < 19; i++) { struct linkedFeatures *lfList = NULL; AllocVar(codeLfs); /*When doing abyssi displays differnt names at the begining*/ if(i == 0) codeLfs->name="within Pho"; else if (i==1) codeLfs->name="within Pab"; else if (i==2) codeLfs->name="\t"; else codeLfs->name = cloneString(codeNames[i-1]); codeLfs->noLine = TRUE; for (lfs = originalLfs; lfs != NULL; lfs = lfs->next) { lf = lfsToLf(lfs); if(i>2) temparray2=((char**)(lfs->features->extra))[i-0]; else temparray2=((char**)(lfs->features->extra))[i]; if (i!=2 && i!=5 && i!=7 && i!=9 && atoi(temparray2)>-9997 && atoi(temparray2)!=0 && atoi(temparray2)>=cutoff) { lf->score=atoi(temparray2); slAddHead(&lfList,lf); } } slReverse(&lfList); codeLfs->features = lfList; slAddHead(&lfsList,codeLfs); } } else { for (i = 0; i < 18; i++) { struct linkedFeatures *lfList = NULL; AllocVar(codeLfs); codeLfs->name = cloneString(codeNames[i]); codeLfs->noLine = TRUE; for (lfs = originalLfs; lfs != NULL; lfs = lfs->next) { lf = lfsToLf(lfs); temparray2=((char**)(lfs->features->extra))[i]; if (i!=1 && i!=4 && i!=6 && i!=8 && atoi(temparray2)>-9997 && atoi(temparray2)!=0 && atoi(temparray2)>=cutoff) { lf->score=atoi(temparray2); slAddHead(&lfList,lf); } } slReverse(&lfList); codeLfs->features = lfList; slAddHead(&lfsList,codeLfs); } } freeLinkedFeaturesSeries(&originalLfs); slReverse(&lfsList); tg->items=lfsList; } slFreeList(&track); slFreeList(&scores); slFreeList(&codes); codeBlastFree(&list); }
void doSamT02(char *proteinId, char *database) /* display the UCSC SAM-T02 Protein Structure Analysis and Prediction section */ { char *itemName = NULL; char query2[256]; struct sqlResult *sr2; char **row2; struct sqlConnection *conn, *conn2 = hAllocConn(database); char condStr[256]; char *chp; char *samSubDir; char *samHttpStr0 = NULL; /* SAM server*/ char *samHttpStr = NULL; /* UCSC GB site */ int homologCount; char *homologID; char *SCOPdomain; char *chain; char *bestEValStr = NULL; float eValue, bestEVal; char goodSCOPdomain[40]; int first = 1; /* return if this genome does not have SAM protein analysis results */ /* defensive logic to guard against the situation that the binary program is pushed, but the data tables are not */ conn = sqlConnect(database); if (!(sqlTableExists(conn, "samSubdir") && sqlTableExists(conn, "protHomolog"))) { return; } sqlDisconnect(&conn); if (!sameWord(database, "sacCer1")) { return; } itemName = proteinId; if (sameWord(database, "sacCer1")) { samHttpStr0 = strdup("http://www.soe.ucsc.edu/research/compbio/yeast-protein-predictions"); samHttpStr = strdup("../goldenPath/sacCer1/sam"); /* SAM analysis of SGD proteins uses SGD ID, not Swiss-Prot AC */ itemName = getSgdId(proteinId, database); } if (itemName == NULL) return; sqlSafefFrag(condStr, sizeof condStr, "proteinId='%s'", itemName); samSubDir = sqlGetField(database, "samSubdir", "subdir", condStr); if (samSubDir == NULL) return; hPrintf("<B>UCSC "); hPrintf("<A HREF=\"http://www.soe.ucsc.edu/research/compbio/SAM_T02/sam-t02-faq.html\""); hPrintf(" TARGET=_blank>SAM-T02</A>\n"); hPrintf(" Protein Structure Analysis and Prediction on %s", proteinId); if (!sameWord(proteinId, itemName)) hPrintf(" (aka %s)", itemName); hPrintf("</B><BR>\n"); hPrintf(" <B>Multiple Alignment (sequence logo):</B> \n"); hPrintf("<A HREF=\"%s/%s/%s/%s.t2k.w0.5-logo.pdf\"", samHttpStr, samSubDir, itemName, itemName); hPrintf(" TARGET=_blank>%s</A> (pdf)<BR>\n", itemName); hPrintf("<B> Secondary Structure Predictions:</B> \n"); hPrintf("<A HREF=\"%s/%s/%s/%s.t2k.dssp-ehl2-logo.pdf\"", samHttpStr, samSubDir, itemName, itemName); hPrintf(" TARGET=_blank>%s</A> (pdf)<BR>\n", itemName); hPrintf("<B> Close Homologs:</B> \n"); conn2= hAllocConn(database); sqlSafef(query2, sizeof query2, "select homologID,eValue,SCOPdomain,chain from %s.protHomolog where proteinID='%s' and evalue <= 0.01 order by evalue;", database, itemName); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); homologCount = 0; strcpy(goodSCOPdomain, "dummy"); bestEVal = 100; while (row2 != NULL) { homologID = row2[0]; sscanf(row2[1], "%e", &eValue); if (first) { bestEVal = eValue; bestEValStr = strdup(row2[1]); } SCOPdomain = row2[2]; chp = SCOPdomain+strlen(SCOPdomain)-1; while (*chp != '.') chp--; *chp = '\0'; chain = row2[3]; if (eValue <= 1.0e-10) { strcpy(goodSCOPdomain, SCOPdomain); } else { if (strcmp(goodSCOPdomain,SCOPdomain) != 0) { goto skip; } else { if (eValue > 0.1) goto skip; } } if (first) { first = 0; } else { printf(", "); } hPrintf("\n<A HREF=\"http://www.rcsb.org/pdb/cgi/explore.cgi?job=graphics&pdbId=%s", homologID); if (strlen(chain) >= 1) { hPrintf("\"TARGET=_blank>%s</A>(chain %s)\n", homologID, chain); } else { hPrintf("\"TARGET=_blank>%s</A>\n", homologID); } homologCount++; skip: row2 = sqlNextRow(sr2); } sqlFreeResult(&sr2); hFreeConn(&conn2); if (homologCount == 0) { hPrintf("None\n"); } hPrintf("<BR> <B>More Details:</B> \n"); hPrintf("<A HREF=\"%s/%s/%s/summary.html\"", samHttpStr0, samSubDir, itemName); hPrintf("\" TARGET=_blank>%s</A><BR>\n", itemName); if (homologCount > 0) { hPrintf(" <B>3D Structure Prediction: </B> \n"); hPrintf("<A HREF=\"%s/%s/%s/%s.t2k.undertaker-align.pdb.gz\"", samHttpStr, samSubDir, itemName, itemName); hPrintf("\" TARGET=_blank>%s</A> (PDB format, gzipped)<BR>\n", itemName); hPrintf(" <B>3D Pictures of the Best Model"); hPrintf(" (E Value: %s):</B><BR>\n", bestEValStr);fflush(stdout); hPrintf("<TABLE><TR>\n"); hPrintf("<TD> </TD>"); hPrintf("<TD><IMG SRC=\"%s/%s/%s/%s.view1_200.jpg\"></A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("<TD><IMG SRC=\"%s/%s/%s/%s.view2_200.jpg\"></A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("<TD><IMG SRC=\"%s/%s/%s/%s.view3_200.jpg\"></A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("</TR>\n"); hPrintf("<TR>"); hPrintf("<TD> </TD>"); hPrintf("<TD ALIGN=CENTER>Front</TD>"); hPrintf("<TD ALIGN=CENTER>Top</TD>"); hPrintf("<TD ALIGN=CENTER>Side</TD>"); hPrintf("</TR>\n"); hPrintf("<TR>"); hPrintf("<TD> </TD>"); hPrintf("<TD ALIGN=CENTER><A HREF=\"%s/%s/%s/%s.view1_500.jpg\">500x500</A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("<TD ALIGN=CENTER><A HREF=\"%s/%s/%s/%s.view2_500.jpg\">500x500</A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("<TD ALIGN=CENTER><A HREF=\"%s/%s/%s/%s.view3_500.jpg\">500x500</A></TD>\n", samHttpStr, samSubDir, itemName, itemName); hPrintf("</TR>\n"); hPrintf("</TABLE>\n"); } else { hPrintf(" <B>3D Structure Prediction: </B> \n"); hPrintf("No models presented, because none has E-value <= 0.01.<BR>"); } hPrintf("<BR>"); }
void doTypeHeader(char *type, char *cellOrg,boolean sortable) { if ((organismOptLower != NULL) && !sameWord(cellOrg, organismOptLower)) errAbort("specified organism %s not consistent with cell type which is org %s\n", organismOpt, cellOrg); // NOTE: All tables must have the same number of columns in order to allow 'control' // to be swapped in Use colSapn= on description column printf("<THEAD><TR valign='bottom' style='background:%s;'>\n",COLOR_BG_HEADER_LTBLUE); int sortOrder = (sortable ? 1: -999); // hint: -999 will keep sortOrtder++ < 0 if (sameWord(type,CV_TERM_CELL)) { printf("<!-- Cell Line table: contains links to protocol file and vendor description page -->"); /* Venkat: To differentiate between the print statments of Mouse and Human Cell Lines */ if (sameWord(cellOrg,ORG_HUMAN)) { printColHeader(FALSE,type, sortOrder++,NULL,1); printColHeader(FALSE,"Tier", sortOrder++,NULL,1); printColHeader(FALSE,"Description",sortOrder++,NULL,1); printColHeader(FALSE,"Lineage", sortOrder++,NULL,1); printColHeader(FALSE,"Tissue", sortOrder++,NULL,1); printColHeader(FALSE,"Karyotype", sortOrder++,NULL,1); printColHeader(FALSE,"Sex", sortOrder++,NULL,1); printColHeader(FALSE,"Documents", sortOrder++,NULL,1); printColHeader(FALSE,"Vendor ID", sortOrder++,NULL,1); printColHeader(FALSE,"Term ID", sortOrder++,NULL,1); printColHeader(TRUE ,"Label", sortOrder++,NULL,1); } else { printColHeader(FALSE,"Source", sortOrder++,NULL,1); printColHeader(FALSE,"Description",sortOrder++,NULL,TABLE_COLS_AVAILABLE(8)); printColHeader(FALSE,"Category", sortOrder++,NULL,1); printColHeader(FALSE,"Tissue", sortOrder++,NULL,1); printColHeader(FALSE,"Sex", sortOrder++,NULL,1); printColHeader(FALSE,"Documents", sortOrder++,NULL,1); printColHeader(FALSE,"Source Lab", sortOrder++,NULL,1); printColHeader(FALSE,"Term ID", sortOrder++,NULL,1); printColHeader(TRUE ,"Label", sortOrder++,NULL,1); } } else if (sameWord(type,CV_TERM_ANTIBODY)) { printColHeader(FALSE,type, sortOrder++,NULL,1); printColHeader(FALSE,"Antibody Description",sortOrder++,NULL,TABLE_COLS_AVAILABLE(9)); printColHeader(FALSE,"Target", sortOrder++,NULL,1); printColHeader(FALSE,"Target Description", sortOrder++,"style='min-width:600px;'",1); printColHeader(FALSE,"Vendor ID", sortOrder++,NULL,1); printColHeader(FALSE,"Lab", sortOrder++,NULL,1); printColHeader(FALSE,"Documents", sortOrder++,NULL,1); printColHeader(FALSE,"Lots", sortOrder++,NULL,1); printColHeader(FALSE,"Target Link", sortOrder++,NULL,1); printColHeader(TRUE ,"Label", sortOrder++,NULL,1); } else { char *caplitalized = NULL; if (sameWord(type,CV_TERM_DATA_TYPE)) caplitalized = cloneString("Data Type"); else { caplitalized = cloneString(type); toUpperN(caplitalized,1); } printColHeader(FALSE,caplitalized,sortOrder++,NULL,1); if (sameWord(type,CV_TERM_LOCALIZATION)) { printColHeader(FALSE,"Description",sortOrder++,NULL,TABLE_COLS_AVAILABLE(3)); printColHeader(FALSE,"GO ID", sortOrder++,NULL,1); } else if (sameWord(type,CV_TERM_LAB)) { printColHeader(FALSE,"Institution",sortOrder++,NULL,TABLE_COLS_AVAILABLE(5)); printColHeader(FALSE,"Lab PI", sortOrder++,NULL,1); printColHeader(FALSE,"Grant PI", sortOrder++,NULL,1); printColHeader(FALSE,"Organism", sortOrder++,NULL,1); } else printColHeader(FALSE,"Description",sortOrder++,NULL,TABLE_COLS_AVAILABLE(2)); printColHeader(TRUE ,"Label",sortOrder++,NULL,1); freeMem(caplitalized); } puts("</TR></THEAD><TBODY>"); }
void txGeneXref(char *genomeDb, char *uniProtDb, char *genePredFile, char *infoFile, char *pickFile, char *evFile, char *outFile) /* txGeneXref - Make kgXref type table for genes.. */ { /* Load picks into hash. We don't use cdsPicksLoadAll because empty fields * cause that autoSql-generated routine problems. */ struct hash *pickHash = newHash(18); struct hash *geneToProtHash = makeGeneToProtHash(genePredFile); struct cdsPick *pick; struct lineFile *lf = lineFileOpen(pickFile, TRUE); char *row[CDSPICK_NUM_COLS]; while (lineFileRowTab(lf, row)) { pick = cdsPickLoad(row); removePickVersions(pick); hashAdd(pickHash, pick->name, pick); } /* Load evidence into hash */ struct hash *evHash = newHash(18); struct txRnaAccs *ev, *evList = txRnaAccsLoadAll(evFile); for (ev = evList; ev != NULL; ev = ev->next) hashAdd(evHash, ev->name, ev); /* Open connections to our databases */ struct sqlConnection *gConn = sqlConnect(genomeDb); struct sqlConnection *uConn = sqlConnect(uniProtDb); /* Read in info file, and loop through it to make out file. */ struct txInfo *info, *infoList = txInfoLoadAll(infoFile); FILE *f = mustOpen(outFile, "w"); for (info = infoList; info != NULL; info = info->next) { char *kgID = info->name; char *mRNA = ""; char *spID = ""; char *spDisplayID = ""; char *geneSymbol = NULL; char *refseq = ""; char *protAcc = ""; char *description = NULL; char query[256]; char *proteinId = hashMustFindVal(geneToProtHash, info->name); boolean isAb = sameString(info->category, "antibodyParts"); pick = hashFindVal(pickHash, info->name); ev = hashFindVal(evHash, info->name); if (pick != NULL) { /* Fill in the relatively straightforward fields. */ refseq = pick->refSeq; if (info->orfSize > 0) { protAcc = pick->refProt; spID = proteinId; if (sameString(protAcc, spID)) spID = pick->uniProt; if (spID[0] != 0) spDisplayID = spAnyAccToId(uConn, spID); } /* Fill in gene symbol and description from refseq if possible. */ if (refseq[0] != 0) { struct sqlResult *sr; safef(query, sizeof(query), "select name,product from refLink where mrnaAcc='%s'", refseq); sr = sqlGetResult(gConn, query); char **row = sqlNextRow(sr); if (row != NULL) { geneSymbol = cloneString(row[0]); if (!sameWord("unknown protein", row[1])) description = cloneString(row[1]); } sqlFreeResult(&sr); } /* If need be try uniProt for gene symbol and description. */ if (spID[0] != 0 && (geneSymbol == NULL || description == NULL)) { char *acc = spLookupPrimaryAcc(uConn, spID); if (description == NULL) description = spDescription(uConn, acc); if (geneSymbol == NULL) { struct slName *nameList = spGenes(uConn, acc); if (nameList != NULL) geneSymbol = cloneString(nameList->name); slFreeList(&nameList); } } } /* If it's an antibody fragment use that as name. */ if (isAb) { geneSymbol = cloneString("abParts"); description = cloneString("Parts of antibodies, mostly variable regions."); isAb = TRUE; } if (ev == NULL) { mRNA = cloneString(""); if (!isAb) { errAbort("%s is %s but not %s\n", info->name, infoFile, evFile); } } else { mRNA = cloneString(ev->primary); chopSuffix(mRNA); } /* Still no joy? Try genbank RNA records. */ if (geneSymbol == NULL || description == NULL) { if (ev != NULL) { int i; for (i=0; i<ev->accCount; ++i) { char *acc = ev->accs[i]; chopSuffix(acc); if (geneSymbol == NULL) { safef(query, sizeof(query), "select geneName.name from gbCdnaInfo,geneName " "where geneName.id=gbCdnaInfo.geneName and gbCdnaInfo.acc = '%s'", acc); geneSymbol = sqlQuickString(gConn, query); if (geneSymbol != NULL) { if (sameString(geneSymbol, "n/a")) geneSymbol = NULL; } } if (description == NULL) { safef(query, sizeof(query), "select description.name from gbCdnaInfo,description " "where description.id=gbCdnaInfo.description " "and gbCdnaInfo.acc = '%s'", acc); description = sqlQuickString(gConn, query); if (description != NULL) { if (sameString(description, "n/a")) description = NULL; } } } } } if (geneSymbol == NULL) geneSymbol = mRNA; if (description == NULL) description = mRNA; /* Get rid of some characters that will cause havoc downstream. */ stripChar(geneSymbol, '\''); subChar(geneSymbol, '<', '['); subChar(geneSymbol, '>', ']'); /* Abbreviate geneSymbol if too long */ if (strlen(geneSymbol) > 40) strcpy(geneSymbol+37, "..."); fprintf(f, "%s\t", kgID); fprintf(f, "%s\t", mRNA); fprintf(f, "%s\t", spID); fprintf(f, "%s\t", spDisplayID); fprintf(f, "%s\t", geneSymbol); fprintf(f, "%s\t", refseq); fprintf(f, "%s\t", protAcc); fprintf(f, "%s\n", description); } carefulClose(&f); }
boolean doCellRow(struct hash *ra, char *org) // print one cell row { char *s; s = hashFindVal(ra, ORGANISM); if (s != NULL) { char *cellOrg = cloneString(s); strLower(cellOrg); if (differentString(cellOrg, org)) return FALSE; } // pathBuffer for new protocols not in human char pathBuffer[PATH_LEN]; safef(pathBuffer, sizeof(pathBuffer), "/ENCODE/protocols/cell/%s/",org); if (sameWord(org, ORG_HUMAN)) { if (cgiOptionalInt("tier",0)) { if (hashFindVal(ra,"tier") == NULL) return FALSE; if (atoi(hashFindVal(ra,"tier"))!=cgiOptionalInt("tier",0)) return FALSE; } if (cgiOptionalString("tiers")) { if (hashFindVal(ra,"tier") == NULL) return FALSE; boolean found=FALSE; char *tiers=cloneString(cgiOptionalString("tiers")); char *tier; (void)strSwapChar(tiers,',',' '); while ((tier=nextWord(&tiers))) { if (atoi(hashFindVal(ra,"tier"))==atoi(tier)) { found=TRUE; break; } } if (!found) return FALSE; } puts("<TR>"); char *term = printTerm(ra); printSetting(ra, "tier"); printDescription(ra,NULL,-1); printSetting(ra,"lineage"); printSetting(ra,"tissue"); printSetting(ra,"karyotype"); printSetting(ra,"sex"); printDocumentLink(ra,term,"protocol",pathBuffer,NULL,TRUE); printSettingsWithUrls(ra,"orderUrl","vendorName","vendorId"); printSettingsWithUrls(ra,"termUrl","termId",NULL); printLabel(ra,term); puts("</TR>"); } else // non-human cell type { puts("<TR>"); char *term = printTerm(ra); printDescription(ra,NULL,8); printSetting(ra,"category"); printSetting(ra,"tissue"); printSetting(ra,"sex"); //printSetting(ra,"karyotype"); printDocumentLink(ra,term,"protocol",pathBuffer,NULL,TRUE); printSettingsWithUrls(ra,"orderUrl","vendorName","vendorId"); printSettingsWithUrls(ra,"termUrl","termId",NULL); printLabel(ra,term); puts("</TR>"); } return TRUE; }
void doEnrichments(struct sqlConnection *conn, struct cdwFile *ef, char *path, struct hash *assemblyToTarget) /* Calculate enrichments on for all targets file. The targetList and the * grtList are in the same order. */ { /* Get validFile from database. */ struct cdwValidFile *vf = cdwValidFileFromFileId(conn, ef->id); if (vf == NULL) return; /* We can only work if have validFile table entry */ if (!isEmpty(vf->enrichedIn) && !sameWord(vf->ucscDb, "unknown") && !isEmpty(vf->ucscDb) && !sameWord(vf->format, "unknown")) { /* Get our assembly */ char *format = vf->format; char *ucscDb = vf->ucscDb; char *targetName = cdwSimpleAssemblyName(ucscDb); struct cdwAssembly *assembly = cdwAssemblyForUcscDb(conn, targetName); struct target *targetList = hashFindVal(assemblyToTarget, assembly->name); if (targetList == NULL) { targetList = targetsForAssembly(conn, assembly); if (targetList == NULL) errAbort("No targets for assembly %s", assembly->name); hashAdd(assemblyToTarget, assembly->name, targetList); } /* Loop through targetList zeroing out existing ovelaps. */ struct target *target; boolean allSkip = TRUE; for (target = targetList; target != NULL; target = target->next) { target->overlapBases = target->uniqOverlapBases = 0; target->skip = enrichmentExists(conn, ef, target->target); if (!target->skip) allSkip = FALSE; } /* Do a big dispatch based on format. */ if (!allSkip) { if (sameString(format, "fastq")) doEnrichmentsFromSampleBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "bigWig")) doEnrichmentsFromBigWig(conn, ef, vf, assembly, targetList); else if (startsWith("bed_", format)) doEnrichmentsFromBed(conn, ef, vf, assembly, targetList); else if (cdwIsSupportedBigBedFormat(format) || sameString(format, "bigBed")) doEnrichmentsFromBigBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "gtf")) doEnrichmentsFromSampleBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "gff")) doEnrichmentsFromSampleBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "bam")) doEnrichmentsFromSampleBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "vcf")) doEnrichmentsFromSampleBed(conn, ef, vf, assembly, targetList); else if (sameString(format, "idat")) verbose(2, "Ignoring idat %s, in doEnrichments.", ef->cdwFileName); else if (sameString(format, "customTrack")) verbose(2, "Ignoring customTrack %s, in doEnrichments.", ef->cdwFileName); else if (sameString(format, "rcc")) verbose(2, "Ignoring rcc %s, in doEnrichments.", ef->cdwFileName); else if (sameString(format, "bam.bai")) verbose(2, "Ignoring bam.bai %s, in doEnrichments - just and index file.", ef->cdwFileName); else if (sameString(format, "vcf.gz.tbi")) verbose(2, "Ignoring vcf.gz.tbi %s, in doEnrichments - just and index file.", ef->cdwFileName); else if (sameString(format, "unknown")) verbose(2, "Unknown format in doEnrichments(%s), that's ok.", ef->cdwFileName); else errAbort("Unrecognized format %s in doEnrichments(%s)", format, path); } /* Clean up and go home. */ cdwAssemblyFree(&assembly); } cdwValidFileFree(&vf); }
int documentLink(struct hash *ra, char *term, char *docTerm,char *dir, char *title,boolean genericDoc) // Compare controlled vocab based on term value { boolean docsPrinted = 0; char *s; if (title == NULL) title = docTerm; //can use hg.conf to direct links back to main UCSC server if a mirror doesn't //want all the PDFs char *baseUrl = cfgOptionDefault("hgEncodeVocabDocBaseUrl", ""); // add links to protocol doc if it exists char docUrl[PATH_LEN]; char docFile[PATH_LEN]; // parse setting s = hashFindVal(ra,docTerm); if (s != NULL) { if (sameWord(s,"missing")) printf(" <em>missing</em>\n"); else { char *docSetting = cloneString(s); char *settings=docSetting; int count=0; while ((s = nextWord(&settings)) != NULL) { char *docTitle = NULL; char *fileName = NULL; if (strchr(s,':')) // lab Specific setting { docTitle = strSwapChar(s,':',0); fileName = docTitle + strlen(docTitle) + 1; } else { docTitle = title; fileName = s; } if (count>0) printf("<BR>"); count++; docTitle = htmlEncode(strSwapChar(docTitle,'_',' ')); if (sameWord(fileName,"missing")) printf("%s<em>missing</em>\n",docTitle); else { safef(docUrl, sizeof(docUrl), "%s%s%s", baseUrl, dir, fileName); safef(docFile, sizeof(docFile), "%s%s", hDocumentRoot(), docUrl); printf(" <A TARGET=_BLANK HREF=%s>%s</A>\n", docUrl,docTitle); docsPrinted++; } freeMem(docTitle); } freeMem(docSetting); } } else if (genericDoc) { // generate a standard name safef(docUrl, sizeof(docUrl), "%s%s%s_protocol.pdf", baseUrl, dir, term); safef(docFile, sizeof(docFile), "%s%s", hDocumentRoot(), docUrl); if (fileExists(docFile)) { printf(" <A TARGET=_BLANK HREF=%s>%s</A>\n", docUrl,title); docsPrinted++; } } return docsPrinted; }
static void clusterClone(int argc, char *argv[]) { int i; for (i=1; i < argc; ++i) { struct lineFile *lf; struct psl *psl; unsigned tSize; char *prevAccPart = (char *)NULL; char *prevAccName = (char *)NULL; char *prevTargetName = (char *)NULL; struct hashEl *el; struct hash *chrHash = newHash(0); struct hash *coordHash = newHash(0); struct coordEl *coord; struct coordEl **coordListPt = (struct coordEl **) NULL; unsigned querySize = 0; int partCount = 0; int partsConsidered = 0; verbose(2,"#\tprocess: %s\n", argv[i]); lf=pslFileOpen(argv[i]); while ((struct psl *)NULL != (psl = pslNext(lf)) ) { char *accName = (char *)NULL; char *targetName = (char *)NULL; int chrCount = 0; double percentCoverage; accName = cloneString(psl->qName); if ((char *)NULL == prevAccPart) { prevAccPart = cloneString(psl->qName); /* first time */ querySize = psl->qSize; ++partsConsidered; } chopSuffixAt(accName,'_'); if ((char *)NULL == prevAccName) prevAccName = cloneString(accName); /* first time */ if ((char *)NULL == prevTargetName) prevTargetName = cloneString(psl->tName); /* first time */ /* encountered a new accession name, process the one we * were working on */ if (differentWord(accName, prevAccName)) { if (partCount > 0) processResult(chrHash, coordHash, prevAccName, querySize, partsConsidered); else verbose(1,"# ERROR %s %s - no coordinates found in %d parts considered\n", prevTargetName, prevAccName, partsConsidered); freeMem(prevAccName); prevAccName = cloneString(accName); freeHash(&chrHash); freeHash(&coordHash); chrHash = newHash(0); coordHash = newHash(0); querySize = 0; partCount = 0; partsConsidered = 0; } tSize = psl->tEnd - psl->tStart; percentCoverage = 100.0*((double)(tSize+1)/(psl->qSize + 1)); if (differentWord(psl->qName, prevAccPart)) { ++partsConsidered; querySize += psl->qSize; freeMem(prevAccPart); prevAccPart = cloneString(psl->qName); } targetName = cloneString(psl->tName); if (differentWord(targetName, prevTargetName)) { freeMem(prevTargetName); prevTargetName = cloneString(targetName); } /* keep a hash of chrom names encountered */ el = hashLookup(chrHash, targetName); if (el == NULL) { if (percentCoverage > minCover) { hashAddInt(chrHash, targetName, 1); chrCount = 1; } else { hashAddInt(chrHash, targetName, 0); chrCount = 0; } } else { if (percentCoverage > minCover) { chrCount = ptToInt(el->val) + 1; el->val=intToPt(chrCount); } } AllocVar(coord); coord->start = psl->tStart; coord->end = psl->tEnd; coord->qSize = psl->qSize; coord->strand = sameWord(psl->strand,"+") ? 1 : 0; /* when coverage is sufficient */ if (percentCoverage > minCover) { ++partCount; coord->name = cloneString(psl->qName); /* for each chrom name, accumulate a list of coordinates */ el = hashLookup(coordHash, targetName); if (el == NULL) { AllocVar(coordListPt); hashAdd(coordHash, targetName, coordListPt); } else { coordListPt = el->val; } slAddHead(coordListPt,coord); verbose(2,"# %s\t%u\t%u\t%u\t%.4f\t%d %s:%d-%d %s\n", psl->qName, psl->qSize, tSize, tSize - psl->qSize, percentCoverage, chrCount, psl->tName, psl->tStart, psl->tEnd, psl->strand); } else { verbose(3,"# %s\t%u\t%u\t%u\t%.4f\t%d %s:%d-%d %s\n", psl->qName, psl->qSize, tSize, tSize - psl->qSize, percentCoverage, chrCount, psl->tName, psl->tStart, psl->tEnd, psl->strand); } freeMem(accName); freeMem(targetName); pslFree(&psl); } if (partCount > 0) processResult(chrHash, coordHash, prevAccName, querySize, partsConsidered); else verbose(1,"# ERROR %s %s - no coordinates found\n", prevTargetName, prevAccName); freeMem(prevAccName); freeHash(&chrHash); freeHash(&coordHash); lineFileClose(&lf); } } /* static void clusterClone() */
void doMiddle() { struct hash *cvHash = raReadAll((char *)cvFile(), CV_TERM); struct hashCookie hc = hashFirst(cvHash); struct hashEl *hEl; struct slList *termList = NULL; struct hash *ra; int totalPrinted = 0; boolean excludeDeprecated = (cgiOptionalString("deprecated") == NULL); // Prepare an array of selected terms (if any) int requestCount = 0; char **requested = NULL; char *requestVal = termOpt; char *queryBy = CV_TERM; if (tagOpt) { requestVal = tagOpt; queryBy = CV_TAG; } else if (targetOpt) { requestVal = targetOpt; queryBy = CV_TERM; // request target is special: lookup term, convert to target, display target } else if (labelOpt) { requestVal = labelOpt; queryBy = CV_LABEL; } if (requestVal) { (void)stripChar(requestVal,'\"'); requestCount = chopCommas(requestVal,NULL); requested = needMem(requestCount * sizeof(char *)); chopByChar(requestVal,',',requested,requestCount); } char *org = NULL; // if the org is specified in the type (eg. cell line) // then use that for the org, otherwise use the command line option, // otherwise use human. char *type = findType(cvHash,requested,requestCount,&queryBy, &org, FALSE); if (org == NULL) org = organismOptLower; if (org == NULL) org = ORG_HUMAN; // Special logic for requesting antibody by target if (targetOpt && requestCount > 0 && sameWord(queryBy,CV_TERM) && sameWord(type,CV_TERM_ANTIBODY)) { // Several antibodies may have same target. // requested target={antibody} and found antibody // Must now convert each of the requested terms to its target before displaying all targets char **targets = convertAntibodiesToTargets(cvHash,requested,requestCount); if (targets != NULL) { freeMem(requested); requested = targets; queryBy = CV_TARGET; } } //warn("Query by: %s = '%s' type:%s",queryBy,requestVal?requestVal:"all",type); // Get just the terms that match type and requested, then sort them if (differentWord(type,CV_TOT) || typeOpt != NULL ) // If type resolves to typeOfTerm and { // typeOfTerm was not requested, while ((hEl = hashNext(&hc)) != NULL) // then just show definition { ra = (struct hash *)hEl->val; char *thisType = (char *)cvTermNormalized(hashMustFindVal(ra,CV_TYPE)); if (differentWord(thisType,type) && (requested == NULL || differentWord(thisType,CV_TERM_CONTROL))) continue; // Skip all rows that do not match queryBy param if specified if (requested) { char *val = hashFindVal(ra, queryBy); if (val == NULL) { // Special case for input that has no target if (sameString(queryBy, CV_TARGET)) val = hashMustFindVal(ra, CV_TERM); else continue; } if (-1 == stringArrayIx(val,requested,requestCount)) continue; } else if (excludeDeprecated) { if (hashFindVal(ra, "deprecated") != NULL) continue; } slAddTail(&termList, ra); } } slSort(&termList, termCmp); boolean described = doTypeDefinition(type,FALSE,(slCount(termList) == 0)); boolean sortable = (slCount(termList) > 5); if (sortable) { webIncludeResourceFile("HGStyle.css"); jsIncludeFile("jquery.js",NULL); jsIncludeFile("utils.js",NULL); printf("<TABLE class='sortable' border=1 CELLSPACING=0 style='border: 2px outset #006600; " "background-color:%s;'>\n",COLOR_BG_DEFAULT); } else printf("<TABLE BORDER=1 BGCOLOR=%s CELLSPACING=0 CELLPADDING=2>\n",COLOR_BG_DEFAULT); if (slCount(termList) > 0) { doTypeHeader(type, org,sortable); // Print out the terms while ((ra = slPopHead(&termList)) != NULL) { if (doTypeRow( ra, org )) totalPrinted++; } } puts("</TBODY></TABLE><BR>"); if (sortable) jsInline("{$(document).ready(function() " "{sortTable.initialize($('table.sortable')[0],true,true);});}\n"); if (totalPrinted == 0) { if (!described) warn("Error: Unrecognised type (%s)\n", type); } else if (totalPrinted > 1) printf("Total = %d\n", totalPrinted); }
void showMainControlTable(struct sqlConnection *conn) /* Put up table with main controls for main page. */ { struct grp *selGroup; boolean isWig = FALSE, isPositional = FALSE, isMaf = FALSE, isBedGr = FALSE, isChromGraphCt = FALSE, isPal = FALSE, isArray = FALSE, isBam = FALSE, isVcf = FALSE, isHalSnake = FALSE, isLongTabix = FALSE; boolean gotClade = hGotClade(); struct hTableInfo *hti = NULL; hPrintf("<TABLE BORDER=0>\n"); /* Print clade, genome and assembly line. */ { if (gotClade) { hPrintf("<TR><TD><B>clade:</B>\n"); printCladeListHtml(hGenome(database), onChangeClade()); nbSpaces(3); hPrintf("<B>genome:</B>\n"); printGenomeListForCladeHtml(database, onChangeOrg()); } else { hPrintf("<TR><TD><B>genome:</B>\n"); printGenomeListHtml(database, onChangeOrg()); } nbSpaces(3); hPrintf("<B>assembly:</B>\n"); printAssemblyListHtml(database, onChangeDb()); hPrintf("</TD></TR>\n"); } /* Print group and track line. */ { hPrintf("<TR><TD>"); selGroup = showGroupField(hgtaGroup, onChangeGroupOrTrack(), conn, hAllowAllTables()); nbSpaces(3); curTrack = showTrackField(selGroup, hgtaTrack, onChangeGroupOrTrack(), FALSE); nbSpaces(3); boolean hasCustomTracks = FALSE; struct trackDb *t; for (t = fullTrackList; t != NULL; t = t->next) { if (isCustomTrack(t->table)) { hasCustomTracks = TRUE; break; } } hOnClickButton("document.customTrackForm.submit();return false;", hasCustomTracks ? CT_MANAGE_BUTTON_LABEL : CT_ADD_BUTTON_LABEL); hPrintf(" "); if (hubConnectTableExists()) hOnClickButton("document.trackHubForm.submit();return false;", "track hubs"); hPrintf("</TD></TR>\n"); } /* Print table line. */ { hPrintf("<TR><TD>"); curTable = showTableField(curTrack, hgtaTable, TRUE); if (isHubTrack(curTable) || (strchr(curTable, '.') == NULL)) /* In same database */ { hti = getHti(database, curTable, conn); isPositional = htiIsPositional(hti); } isLongTabix = isLongTabixTable( curTable); isBam = isBamTable( curTable); isVcf = isVcfTable(curTable, NULL); isWig = isWiggle(database, curTable); if (isBigWigTable(curTable)) { isPositional = TRUE; isWig = TRUE; } isHalSnake = isHalTable( curTable); isMaf = isMafTable(database, curTrack, curTable); isBedGr = isBedGraph(curTable); isArray = isMicroarray(curTrack, curTable); struct trackDb *tdb = findTdbForTable(database, curTrack, curTable, ctLookupName); isPal = isPalCompatible(conn, tdb, curTable); nbSpaces(1); if (isCustomTrack(curTable)) { isChromGraphCt = isChromGraph(tdb); } cgiMakeButton(hgtaDoSchema, "describe table schema"); hPrintf("</TD></TR>\n"); } if (curTrack == NULL) { struct trackDb *tdb = hTrackDbForTrack(database, curTable); struct trackDb *cTdb = hCompositeTrackDbForSubtrack(database, tdb); if (cTdb) curTrack = cTdb; else curTrack = tdb; isMaf = isMafTable(database, curTrack, curTable); } /* Region line */ { char *regionType = cartUsualString(cart, hgtaRegionType, hgtaRegionTypeGenome); char *range = cartUsualString(cart, hgtaRange, ""); if (isPositional) { boolean doEncode = FALSE; if (!trackHubDatabase(database)) doEncode = sqlTableExists(conn, "encodeRegions"); hPrintf("<TR><TD><B>region:</B>\n"); /* If regionType not allowed force it to "genome". */ if ((sameString(regionType, hgtaRegionTypeUserRegions) && userRegionsFileName() == NULL) || (sameString(regionType, hgtaRegionTypeEncode) && !doEncode)) regionType = hgtaRegionTypeGenome; // Is "genome" is not allowed because of tdb 'tableBrowser noGenome'? boolean disableGenome = ((curTrack && cartTrackDbIsNoGenome(database, curTrack->table)) || (curTable && cartTrackDbIsNoGenome(database, curTable))); // If "genome" is selected but not allowed, force it to "range": if (sameString(regionType, hgtaRegionTypeGenome) && disableGenome) regionType = hgtaRegionTypeRange; jsTrackingVar("regionType", regionType); if (disableGenome) { makeRegionButtonExtraHtml(hgtaRegionTypeGenome, regionType, "DISABLED"); hPrintf(" <span"NO_GENOME_CLASS">genome (unavailable for selected track)</span>" " "); } else { makeRegionButton(hgtaRegionTypeGenome, regionType); hPrintf(" genome "); } if (doEncode) { makeRegionButton(hgtaRegionTypeEncode, regionType); hPrintf(" ENCODE Pilot regions "); } makeRegionButton(hgtaRegionTypeRange, regionType); hPrintf(" position "); hPrintf("<INPUT TYPE=TEXT NAME=\"%s\" SIZE=26 VALUE=\"%s\" onFocus=\"%s\">\n", hgtaRange, range, jsRadioUpdate(hgtaRegionType, "regionType", "range")); cgiMakeButton(hgtaDoLookupPosition, "lookup"); hPrintf(" "); if (userRegionsFileName() != NULL) { makeRegionButton(hgtaRegionTypeUserRegions, regionType); hPrintf(" defined regions "); cgiMakeButton(hgtaDoSetUserRegions, "change"); hPrintf(" "); cgiMakeButton(hgtaDoClearUserRegions, "clear"); } else cgiMakeButton(hgtaDoSetUserRegions, "define regions"); hPrintf("</TD></TR>\n"); } else { /* Need to put at least stubs of cgi variables in for JavaScript to work. */ jsTrackingVar("regionType", regionType); cgiMakeHiddenVar(hgtaRange, range); cgiMakeHiddenVar(hgtaRegionType, regionType); } /* Select identifiers line (if applicable). */ if (!isWig && getIdField(database, curTrack, curTable, hti) != NULL) { hPrintf("<TR><TD><B>identifiers (names/accessions):</B>\n"); cgiMakeButton(hgtaDoPasteIdentifiers, "paste list"); hPrintf(" "); cgiMakeButton(hgtaDoUploadIdentifiers, "upload list"); if (identifierFileName() != NULL) { hPrintf(" "); cgiMakeButton(hgtaDoClearIdentifiers, "clear list"); } hPrintf("</TD></TR>\n"); } } /* microarray options */ /* button for option page here (median/log-ratio, etc) */ /* Filter line. */ { hPrintf("<TR><TD><B>filter:</B>\n"); if (anyFilter()) { cgiMakeButton(hgtaDoFilterPage, "edit"); hPrintf(" "); cgiMakeButton(hgtaDoClearFilter, "clear"); if (isWig || isBedGr) wigShowFilter(conn); } else { cgiMakeButton(hgtaDoFilterPage, "create"); } hPrintf("</TD></TR>\n"); } /* Composite track subtrack merge line. */ boolean canSubtrackMerge = (curTrack && tdbIsComposite(curTrack) && !isBam && !isVcf && !isLongTabix); if (canSubtrackMerge) { hPrintf("<TR><TD><B>subtrack merge:</B>\n"); if (anySubtrackMerge(database, curTable)) { cgiMakeButton(hgtaDoSubtrackMergePage, "edit"); hPrintf(" "); cgiMakeButton(hgtaDoClearSubtrackMerge, "clear"); } else { cgiMakeButton(hgtaDoSubtrackMergePage, "create"); } hPrintf("</TD></TR>\n"); } /* Intersection line. */ if (isPositional) { if (anyIntersection()) { hPrintf("<TR><TD><B>intersection with %s:</B>\n", cartString(cart, hgtaIntersectTable)); cgiMakeButton(hgtaDoIntersectPage, "edit"); hPrintf(" "); cgiMakeButton(hgtaDoClearIntersect, "clear"); hPrintf("</TD></TR>\n"); } else if (canIntersect(database, curTable)) { hPrintf("<TR><TD><B>intersection:</B>\n"); cgiMakeButton(hgtaDoIntersectPage, "create"); hPrintf("</TD></TR>\n"); } } /* Correlation line. */ struct trackDb *tdb = findTdbForTable(database, curTrack, curTable, ctLookupName); if (correlateTrackTableOK(tdb, curTable)) { char *table2 = cartUsualString(cart, hgtaCorrelateTable, "none"); hPrintf("<TR><TD><B>correlation:</B>\n"); if (differentWord(table2, "none") && strlen(table2) && ! isNoGenomeDisabled(database, table2)) { struct grp *groupList = fullGroupList; struct grp *selGroup = findSelectedGroup(groupList, hgtaCorrelateGroup); struct trackDb *tdb2 = findSelectedTrack(fullTrackList, selGroup,hgtaCorrelateTrack); if (tdbIsComposite(tdb2)) { struct slRef *tdbRefList = trackDbListGetRefsToDescendantLeaves(tdb2->subtracks); struct slRef *tdbRef; for (tdbRef = tdbRefList; tdbRef != NULL; tdbRef = tdbRef->next) { struct trackDb *subTdb = tdbRef->val; if (sameString(table2, subTdb->table)) { tdb2 = subTdb; break; } } slFreeList(&tdbRefList); } cgiMakeButton(hgtaDoCorrelatePage, "calculate"); cgiMakeButton(hgtaDoClearCorrelate, "clear"); if (tdb2 && tdb2->shortLabel) hPrintf(" (with: %s)", tdb2->shortLabel); #ifdef NOT_YET /* debugging dbg vvvvv */ if (curTrack && curTrack->type) /* dbg */ { hPrintf("<BR> (debug: '%s', '%s(%s)')", curTrack->type, tdb2->type, table2); } /* debugging debug ^^^^^ */ #endif } else cgiMakeButton(hgtaDoCorrelatePage, "create"); hPrintf("</TD></TR>\n"); } /* Print output type line. */ showOutputTypeRow(isWig, isBedGr, isPositional, isMaf, isChromGraphCt, isPal, isArray, isHalSnake); /* Print output destination line. */ { char *compressType = cartUsualString(cart, hgtaCompressType, textOutCompressNone); char *fileName = cartUsualString(cart, hgtaOutFileName, ""); hPrintf("<TR><TD>\n"); hPrintf("<B>output file:</B> "); cgiMakeTextVar(hgtaOutFileName, fileName, 29); hPrintf(" (leave blank to keep output in browser)</TD></TR>\n"); hPrintf("<TR><TD>\n"); hPrintf("<B>file type returned: </B>"); cgiMakeRadioButton(hgtaCompressType, textOutCompressNone, sameWord(textOutCompressNone, compressType)); hPrintf(" plain text  "); cgiMakeRadioButton(hgtaCompressType, textOutCompressGzip, sameWord(textOutCompressGzip, compressType)); hPrintf(" gzip compressed"); hPrintf("</TD></TR>\n"); } hPrintf("</TABLE>\n"); /* Submit buttons. */ { hPrintf("<BR>\n"); if (isWig || isBam || isVcf || isLongTabix) { char *name; extern char *maxOutMenu[]; char *maxOutput = maxOutMenu[0]; if (isCustomTrack(curTable)) name=filterFieldVarName("ct", curTable, "_", filterMaxOutputVar); else name=filterFieldVarName(database,curTable, "_",filterMaxOutputVar); maxOutput = cartUsualString(cart, name, maxOutMenu[0]); if (isWig) hPrintf( "<I>Note: to return more than %s lines, change the filter setting" " (above). The entire data set may be available for download as" " a very large file that contains the original data values (not" " compressed into the wiggle format) -- see the Downloads page." "</I><BR>", maxOutput); else if (isBam || isVcf || isLongTabix) hPrintf( "<I>Note: to return more than %s lines, change the filter setting" " (above). Please consider downloading the entire data from our Download pages." "</I><BR>", maxOutput); } else if (anySubtrackMerge(database, curTable) || anyIntersection()) { hPrintf("<I>Note: The all fields and selected fields output formats " "are not available when a%s has been specified.</I><BR>", canSubtrackMerge ? " subtrack merge or intersection" : "n intersection"); } cgiMakeButton(hgtaDoTopSubmit, "get output"); hPrintf(" "); if (isPositional || isWig) { cgiMakeButton(hgtaDoSummaryStats, "summary/statistics"); hPrintf(" "); } #ifdef SOMETIMES hPrintf(" "); cgiMakeButton(hgtaDoTest, "test"); #endif /* SOMETIMES */ } hPrintf("<P>" "To reset <B>all</B> user cart settings (including custom tracks), \n" "<A HREF=\"/cgi-bin/cartReset?destination=%s\">click here</A>.\n", getScriptName()); }
struct chromInfo *oneContigInfo(char *fileName) /* Read agp or gold.N file into chromInfo. */ { struct lineFile *lf = lineFileOpen(fileName, TRUE); int lineSize, wordCount; char *line, *words[16]; int start=0,end=0,size; struct chromInfo *ci; int contigStart = 0, scaffoldStart = 0; boolean inContig = FALSE, inScaffold = FALSE; AllocVar(ci); while (lineFileNext(lf, &line, &lineSize)) { wordCount = chopLine(line, words); if (wordCount < 8) errAbort("Short line %d of %s\n", lf->lineIx, lf->fileName); if (ci->name == NULL) { ci->name = cloneString(words[0]); ci->contigCount = 1; } start = atoi(words[1]) - 1; end = atoi(words[2]); size = end-start; if (words[4][0] == 'N' || words[4][0] == 'U') /* It's a gap line. */ { boolean isOpen = sameWord(words[7], "no"); /* Keep track of contig and scaffold sizes. */ if (inContig == TRUE) { inContig = FALSE; addIntList(&ci->contigList, start - contigStart); if (ci->contigList->n <= 0) errAbort("Line %d of %s, contig size %d\n", lf->lineIx, lf->fileName, start - contigStart); } if (isOpen) { if (inScaffold == TRUE) { inScaffold = FALSE; addIntList(&ci->scaffoldList, start - scaffoldStart); } } /* Keep track of other stats. */ ci->nCount += size; if (sameWord(words[6], "clone")) { if (isOpen) ci->openCloneGaps += 1; else ci->bridgedCloneGaps += 1; } else { if (isOpen) ci->openFragGaps += 1; else ci->bridgedFragGaps += 1; } } else /* It's not a gap line. */ { /* Keep track of contig and scaffold sizes. */ if (inContig == FALSE) { contigStart = start; inContig = TRUE; } if (inScaffold == FALSE) { scaffoldStart = start; inScaffold = TRUE; } /* Keep track of other stats. */ ci->baseCount += size; } } lineFileClose(&lf); if (inContig) { addIntList(&ci->contigList, end - contigStart); if (ci->contigList->n <= 0) errAbort("End of %s, contig size %d\n", fileName, end - contigStart); } if (inScaffold) addIntList(&ci->scaffoldList, end - scaffoldStart); ci->c50 = calcN50(&ci->contigList); ci->s50 = calcN50(&ci->scaffoldList); return ci; }
void pslSplit(char *command, char *outDir, char *inFiles[], int inFileCount) /* pslSplit - "pslSplit - split into multiple output files by qName.*/ { int linesLeftInChunk = chunkSize; int i; char *inFile; char fileName[512]; int fileCount; int totalLineCount = 0; int midFileCount = 0; FILE *f; struct lineFile *lf; char *line; char *prev = cloneString("first"); int lineSize; struct psl *psl, *pslList = NULL; boolean noHead = (sameWord(command, "nohead")); mkdir(outDir, 0775); /* Read in presorted input and scatter it into sorted * temporary files. */ for (i = 0; i<inFileCount; ++i) { int linesLeft = maxLines; bool breakNext = FALSE; //char name[512]; inFile = inFiles[i]; printf("Processing %s", inFile); fflush(stdout); lf = pslFileOpen(inFile); psl = nextPsl(lf) ; prev = cloneString(psl->qName); slAddHead(&pslList, psl); while ((psl = nextPsl(lf)) != NULL) { //safef(name, sizeof(name), "%s",psl->qName); //chopSuffix(name); if (!sameString(prev, psl->qName)) { prev = cloneString(psl->qName); if (--linesLeftInChunk <= 0 || breakNext) { outputChunk(&pslList, outDir, midFileCount++, noHead); linesLeftInChunk = chunkSize; linesLeft = maxLines; breakNext = FALSE; } } if (--linesLeft < 0) { breakNext = TRUE; } if ((++totalLineCount & 0xffff) == 0) { printf("."); fflush(stdout); } slAddHead(&pslList, psl); //freeMem(&prev); } printf("\n"); lineFileClose(&lf); } outputChunk(&pslList, outDir, midFileCount++, noHead); printf("Processed %d lines into %d output files\n", totalLineCount, midFileCount); //pslSort2(outDir, tempDir, noHead); }
int main(int argc, char *argv[]) { struct sqlConnection *conn, *conn2, *conn3; struct sqlConnection *connCentral = hConnectCentral(); char query[256], query2[256], query3[256]; struct sqlResult *sr, *sr2; char **row, **row2; char buf[128]; char *answer; char *kgID, *chrom, *txStart, *txEnd; char *mRNA; int i; int geneCnt = 0; int pageNum = 0; int topLevel = 1; char *geneSymbol, *proteinID, *spID, *desc; FILE *outf, *outf2; char fileName[255]; database = strdup("hg17"); boolean newPage; int totalKgId, totalKgCnt; int totalKgPage; int kgIdCnt = 0; if (argc != 2) usage(); database = argv[1]; sqlSafef(query, sizeof query, "select genome from dbDb where name = '%s'", database); answer = sqlQuickQuery(connCentral, query, buf, sizeof(buf)); if (answer == NULL) { fprintf(stderr,"'%s' is not a valid genome database name.", database); exit(1); } else { genome = strdup(answer); } if (!hTableExists(database, "knownGene")) { fprintf(stderr,"Database %s currently does not have UCSC Known Genes.", database); exit(1); } sqlSafef(query, sizeof query, "select description from dbDb where name = '%s'", database); genomeDesc = strdup(sqlQuickQuery(connCentral, query, buf, sizeof(buf))); hDisconnectCentral(&connCentral); /* create first top level subdirectory */ safef(command, sizeof(command), "mkdir -p knownGeneList/%s/%d", database, topLevel); mustSystem(command); conn = hAllocConn(database); conn2= hAllocConn(database); conn3= hAllocConn(database); newPage = TRUE; currentPage = 0; /* put this in to avoid compiler complaining */ outf = NULL; geneSymbol = NULL; char *protAcc = NULL; /* figure out how many pages in total */ sqlSafef(query2, sizeof(query2), "select count(k.name) from %s.knownGene k, %s.kgXref x where k.name=x.kgId and geneSymbol != ''", database, database); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); totalKgCnt = atoi(row2[0]); sqlFreeResult(&sr2); /* figure out how many KG IDs in total */ sqlSafef(query2, sizeof(query2), "select count(*) from %s.kgXref where geneSymbol !=''", database); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); totalKgId = atoi(row2[0]); sqlFreeResult(&sr2); totalKgPage = totalKgId/LINKSPERPAGE + 1; sqlSafef(query2, sizeof(query2), "select kgID, geneSymbol, description from %s.kgXref where geneSymbol!= '' order by geneSymbol", database); /* for debugging */ /* "select kgID, geneSymbol, description from %s.kgXref order by geneSymbol limit %d", database, TESTSIZE);*/ sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); /* for debugging */ /* while (kgIdCnt < TESTSIZE) */ while (kgIdCnt < totalKgId) { kgIdCnt++; kgID = row2[0]; geneSymbol = strdup(row2[1]); desc = row2[2]; sqlSafef(query, sizeof(query), "select chrom,txSTart,txEnd,proteinID from %s.knownGene where name='%s'", database, kgID); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { geneCnt++; chrom = row[0]; txStart = row[1]; txEnd = row[2]; proteinID = row[3]; if (newPage) { /* create a KG links page */ pageNum++; currentPage++; /* use mkdir -p to make sure the subdirectory exists */ safef(command, sizeof(command), "mkdir -p knownGeneList/%s/%d", database, topLevel); mustSystem(command); safef(fileName, sizeof(fileName), "knownGeneList/%s/%d/kgList%d.html", database, topLevel, pageNum); outf = fopen(fileName, "w"); printHtmlHead(outf); fprintf(outf,"<H2>UCSC %s Known Genes List (page %d of %d)</H2>\n", genome, pageNum, totalKgPage); fprintf(outf, "<TABLE BORDER=1=CELLSPACING=1 CELLPADDING=3 BGCOLOR=\"#D9F8E4\"><TR>\n"); fprintf(outf, "<TR><TH>Gene Symbol</TH><TH>Known Gene ID</TH><TH>mRNA</TH><TH>UniProt</TH><TH>RefSeq Protein</TH><TH>Description</TH>\n"); strcpy(startSymbol[pageNum], geneSymbol); strcpy(pageStartSymbol[currentPage], geneSymbol); newPage = FALSE; } fprintf(outf,"<TR>"); fprintf(outf,"<TD>%s</TD>", geneSymbol); /*fprintf(outf,"<TD>%d:%s</TD>", geneCnt, geneSymbol);*/ fprintf(outf,"<TD>"); fprintf(outf,"<A href=\"/cgi-bin/hgGene?db=%s&hgg_gene=%s", database, kgID); fprintf(outf,"&hgg_chrom=%s&hgg_start=%s&hgg_end=%s\">", chrom, txStart, txEnd); fprintf(outf,"%s", kgID); fprintf(outf,"</A>"); fprintf(outf,"</TD>\n"); sqlSafef(query3,sizeof(query3),"select spID from %s.kgXref where kgID = '%s'", database, kgID); spID = cloneString(sqlQuickQuery(conn3, query3, buf, sizeof(buf))); if (spID == NULL) { spID = emptyString; } else { if (sameWord(spID,"")) spID = emptyString; } sqlSafef(query3,sizeof(query3),"select mRNA from %s.kgXref where kgID = '%s'", database, kgID); mRNA = cloneString(sqlQuickQuery(conn3, query3, buf, sizeof(buf))); if (mRNA == NULL) { mRNA = emptyString; } else { if (sameWord(mRNA,"")) mRNA = emptyString; } sqlSafef(query3,sizeof(query3),"select protAcc from %s.kgXref where kgID = '%s'", database, kgID); protAcc = sqlQuickQuery(conn3, query3, buf, sizeof(buf)); if (protAcc == NULL) { protAcc = emptyString; } else { if (sameWord(protAcc,"")) protAcc = emptyString; } fprintf(outf,"<TD>%s</TD>", mRNA); fprintf(outf,"<TD>%s</TD>", spID); fprintf(outf,"<TD>%s</TD>", protAcc); fprintf(outf,"<TD>%s</TD>", desc ); fprintf(outf,"</TR>\n"); if ((geneCnt % LINKSPERPAGE) == 0) { /* flush out and close the page if a page is filled, and start a new page */ fprintf(outf,"</TABLE>"); strcpy(endSymbol[pageNum], geneSymbol); strcpy(pageEndSymbol[currentPage], endSymbol[pageNum]); fprintf(outf, "<BR>"); fprintf(outf, "<A href=\"/knownGeneList/%s/%d/kgIndex%d.html\">", database, topLevel,topLevel); fprintf(outf, "Up"); fprintf(outf,"</A><BR>\n"); printHtmlEnd(outf); newPage = TRUE; fclose(outf); outf = NULL; if ((pageNum % LINKSPERPAGE) == 0 ) { printf("Processing topLevel %d ...\n", topLevel);fflush(stdout); safef(fileName, sizeof(fileName), "knownGeneList/%s/%d/kgIndex%d.html", database, topLevel, topLevel); outf2 = fopen(fileName, "w"); printHtmlHead(outf2); //fprintf(outf2,"<H2>UCSC %s Known Genes List</H2>\n", genome); fprintf(outf2,"<H2>UCSC %s Known Genes List (Group %d)</H2>\n", genome, topLevel); for (i=1; i<= currentPage; i++) { fprintf(outf2, "Page %d: ", (topLevel-1)*LINKSPERPAGE+i); fprintf(outf2, "<A href=\"/knownGeneList/%s/%d/kgList%d.html\">", database, topLevel, (topLevel-1)*LINKSPERPAGE+i); fprintf(outf2, "%s to %s", pageStartSymbol[i], pageEndSymbol[i]); fprintf(outf2,"</A><BR>\n"); } fprintf(outf2, "<BR>"); fprintf(outf2, "<A href=\"/knownGeneList/%s/top.html\">",database); fprintf(outf2, "Up"); fprintf(outf2,"</A><BR>\n"); printHtmlEnd(outf2); fclose(outf2); strcpy(topStartSymbol[topLevel], pageStartSymbol[1]); strcpy( topEndSymbol[topLevel], pageEndSymbol[currentPage]); currentPage = 0; topLevel++; } } row = sqlNextRow(sr); } sqlFreeResult(&sr); row2 = sqlNextRow(sr2); } sqlFreeResult(&sr2); /* flush out and close the last list page */ if (outf != NULL) { fprintf(outf,"</TABLE>"); strcpy(endSymbol[pageNum], geneSymbol); strcpy(pageEndSymbol[currentPage], endSymbol[pageNum]); fprintf(outf, "<BR>"); fprintf(outf, "<A href=\"/knownGeneList/%s/%d/kgIndex%d.html\">", database, topLevel,topLevel); fprintf(outf, "Up"); fprintf(outf,"</A><BR>\n"); printHtmlEnd(outf); fclose(outf); } /* generate the last index page */ safef(command, sizeof(command), "mkdir -p knownGeneList/%s/%d", database, topLevel); mustSystem(command); safef(fileName, sizeof(fileName), "knownGeneList/%s/%d/kgIndex%d.html", database, topLevel, topLevel); outf2 = fopen(fileName, "w"); printHtmlHead(outf2); fprintf(outf2,"<H2>UCSC %s Known Genes List (Group %d)</H2>\n", genome, topLevel); for (i=1; i<= currentPage; i++) { fprintf(outf2, "Page %d: ", (topLevel-1)*LINKSPERPAGE+i); fprintf(outf2, "<A href=\"/knownGeneList/%s/%d/kgList%d.html\">", database, topLevel, (topLevel-1)*LINKSPERPAGE+i); fprintf(outf2, "%s to %s", pageStartSymbol[i], pageEndSymbol[i]); fprintf(outf2,"</A><BR>\n"); fflush(outf2); } fprintf(outf2, "<BR>"); fprintf(outf2, "<A href=\"/knownGeneList/%s/top.html\">",database); fprintf(outf2, "Up"); fprintf(outf2,"</A><BR>\n"); strcpy(topStartSymbol[topLevel], pageStartSymbol[1]); strcpy( topEndSymbol[topLevel], pageEndSymbol[currentPage]); fclose(outf2); currentPage = 0; /* generate the top HTML page */ safef(fileName, sizeof(fileName), "knownGeneList/%s/top.html", database); outf2 = fopen(fileName, "w"); printHtmlHead(outf2); fprintf(outf2,"<H2>UCSC %s Known Genes List</H2>\n", genome); for (i=1; i<= topLevel; i++) { fprintf(outf2, "Group %d: ", i); fprintf(outf2, "<A href=\"/knownGeneList/%s/%d/kgIndex%d.html\">", database, i, i); fprintf(outf2, " %s to %s", topStartSymbol[i], topEndSymbol[i]); fprintf(outf2,"</A><BR>\n"); fflush(outf2); } fprintf(outf2, "<BR>"); fprintf(outf2, "<A href=\"/knownGeneLists.html\">"); fprintf(outf2, "Up"); fprintf(outf2,"</A><BR>\n"); printHtmlEnd(outf2); printHtmlEnd(outf2); fclose(outf2); return(0); }
static void printSqlFieldListAsControlTable(struct sqlFieldType *ftList, char *db, char *rootTable, struct trackDb *tdb, boolean isBedGr) /* Print out table of controls for fields. */ { int fieldNum = 0; int bedGraphColumn = 5; /* default score column */ int noBinBedGraphColumn = bedGraphColumn; boolean gotFirst = FALSE; struct sqlFieldType *ft; hPrintf("<TABLE BORDER=0>\n"); for (ft = ftList; ft != NULL; ft = ft->next) { char *field = ft->name; char *type = ft->type; char *logic = ""; if ((0 == fieldNum) && (!sameWord(field,"bin"))) noBinBedGraphColumn -= 1; if (!sameWord(type, "longblob")) { if (!gotFirst) gotFirst = TRUE; else if (!isBedGr) logic = " AND "; } if (!isBedGr || (noBinBedGraphColumn == fieldNum)) { if (isSqlEnumType(type) || isSqlSetType(type)) { enumFilterOption(db, rootTable, field, type, logic); } else if(isSqlIntType(type)) { integerFilter(db, rootTable, field, field, logic); } else if(isSqlNumType(type)) { if(isBedGr) { double min, max; double tDbMin, tDbMax; wigFetchMinMaxLimits(tdb, &min, &max, &tDbMin, &tDbMax); if (tDbMin < min) min = tDbMin; if (tDbMax > max) max = tDbMax; numericFilterWithLimits(db, rootTable, field, field, min, max, logic); hPrintf("<TR><TD COLSPAN=3 ALIGN=RIGHT> (%s range: [%g:%g]) " "</TD></TR>\n", field, min, max); } else { numericFilter(db, rootTable, field, field, logic); } } else //if (isSqlStringType(type)) { stringFilterOption(db, rootTable, field, logic); } } ++fieldNum; } hPrintf("</TABLE>\n"); }
void integerCellPrint(struct column *col, struct subjInfo *si, struct sqlConnection *conn) /* Print value including favorite hyperlink in debug column. */ { boolean special; special = FALSE; char *s = col->cellVal(col, si, conn); hPrintf("<TD align=right>"); /* special processing for missing data */ if (sameWord(col->name, "SDayLastPTest") || sameWord(col->name, "SDayLastTrTest") || sameWord(col->name, "LastPMNNeutral") || sameWord(col->name, "artDaei") || sameWord(col->name, "seqDay") || sameWord(col->name, "firstRNAPosDay") || sameWord(col->name, "lastSeroNegDay") || sameWord(col->name, "LastTrMnNeutral")) { if (sameWord(s, "-1")) { hPrintf("N/A"); special = TRUE; } if (sameWord(s, "-2")) { hPrintf("N/D"); special = TRUE; } if (sameWord(s, "-3")) { hPrintf(" "); special = TRUE; } } if (sameWord(col->name, "cd4Count")) { if (sameWord(s, "-1") || sameWord(s, "0")) { printf("N/A"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(s, "-1")) { printf("N/A"); special = TRUE; } } if (sameWord(col->name, "DAEI")) { if (sameWord(s, "-1")) { printf("N/A"); special = TRUE; } } if (sameWord(col->name, "esdi")) { if (sameWord(s, "-1")) { printf("N/A"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(s, "1000000")) { printf("> 1000000"); special = TRUE; } } if (sameWord(col->name, "hivQuan")) { if (sameWord(s, "200")) { printf("< 400"); special = TRUE; } } if (!special) { hPrintf("%s", s); } freeMem(s); }