void docIdReport(char *database) /* docIdReport - generate report from docIdSub table. */ { struct sqlConnection *conn = sqlConnect(database); struct docIdSub *docIdSub; char query[10 * 1024]; struct sqlResult *sr; char **row; safef(query, sizeof query, "select * from %s", docIdTable); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { docIdSub = docIdSubLoad(row); verbose(2, "ix %d\n", docIdSub->ix); verbose(2, "submitDate %s\n", docIdSub->submitDate); verbose(2, "md5sum %s\n", docIdSub->md5sum); verbose(2, "valReport %s\n", docIdSub->valReport); verbose(2, "metaData %s\n", docIdSub->metaData); verbose(2, "submitPath %s\n", docIdSub->submitPath); verbose(2, "submitter %s\n", docIdSub->submitter); cgiDecode(docIdSub->metaData, docIdSub->metaData, strlen(docIdSub->metaData)); char *tempFile = "temp"; FILE *f = mustOpen(tempFile, "w"); fwrite(docIdSub->metaData, strlen(docIdSub->metaData), 1, f); fclose(f); boolean validated; struct mdbObj *mdbObj = mdbObjsLoadFromFormattedFile(tempFile, &validated); printf("%s %s %s %s %s\n", docIdDecorate(docIdSub->ix), mdbObjFindValue(mdbObj, "dataType"), mdbObjFindValue(mdbObj, "view"), mdbObjFindValue(mdbObj, "cell"), mdbObjFindValue(mdbObj, "lab")); } sqlFreeResult(&sr); sqlDisconnect(&conn); }
void expFind(char *assembly, char *file) /* Find experiments in metaDb and output .ra file */ { verbose(1, "Finding experiments in %s:%s\n", assembly, mdb); struct sqlConnection *connMeta; struct mdbObj *meta = NULL, *metas = NULL; struct encodeExp *exp = NULL, *exps = NULL; struct hash *oldExps, *newExps; char *key; int expNum = 0; FILE *f = mustOpen(file, "w"); /* create hash of keys for existing experiments so we can distinguish new ones */ oldExps = expKeyHashFromTable(connExp, table); newExps = hashNew(0); /* read mdb objects from database */ connMeta = sqlConnect(assembly); metas = mdbObjsQueryAll(connMeta, mdb); verbose(2, "Found %d objects\n", slCount(metas)); /* order so that oldest have lowest ids */ mdbObjsSortOnVars(&metas, "dateSubmitted lab dataType cell"); /* create new experiments */ while ((meta = slPopHead(&metas)) != NULL) { if (!mdbObjIsEncode(meta)) continue; if (composite != NULL && !mdbObjInComposite(meta, composite)) continue; exp = encodeExpFromMdb(connMeta,assembly,meta); if (exp == NULL) continue; key = encodeExpKey(exp); verbose(3, "key: %s\n", key); if (hashLookup(newExps, key) == NULL && hashLookup(oldExps, key) == NULL) { verbose(2, "Found new experiment - Date: %s Experiment %d: %s\n", mdbObjFindValue(meta, "dateSubmitted"), ++expNum, key); /* save new experiment */ hashAdd(newExps, key, NULL); slAddHead(&exps, exp); } /* Skip other metas belonging to the same exp by: struct mdbVar *edvs = mdbObjFindEncodeEdvs(connMeta,meta); // Can't use encodeExpVars(exp) because of "None" issues assert(edvs != NULL); char *expVars = slPairListToString(edvs,FALSE); // don't bother with quoting since edvs should not have spaces struct mdbObj *mdbExpObjs = mdbObjsFilterByVars(&metas,expVars,TRUE,TRUE); freeMem(expVars); mdbVarsFree(&edvs); // If you want to do this, then encodeExpFromMdb() above should be replaced with encodeExpFromMdbVars() mdbObjFree(&mdbExpObjs); // Filtering destroyed sort order // NOTE: Given the re-sort, this may not prove much more efficient mdbObjsSortOnVars(&metas, "dateSubmitted lab dataType cell"); */ } /* write out experiments in .ra format */ slReverse(&exps); while ((exp = slPopHead(&exps)) != NULL) { exp->organism = organism; encodeExpToRaFile(exp, f); } carefulClose(&f); sqlDisconnect(&connMeta); }
void doStandard(struct cart *theCart) { cart = theCart; cartWebStart(cart, database, "ENCODE DCC Submissions"); struct sqlConnection *conn = sqlConnect(database); struct docIdSub *docIdSub; char query[10 * 1024]; struct sqlResult *sr; char **row; struct tempName tn; trashDirFile(&tn, "docId", "meta", ".txt"); char *tempFile = tn.forCgi; //printf("tempFile is %s\n<BR>", tempFile); // <Data type> <Cell Type> <Key Metadata> <View> printf("<table border=1><tr>"); printf("<th>dataType</th>"); printf("<th>cell type</th>"); printf("<th>metadata</th>"); printf("<th>view</th>"); printf("<th>fileType</th>"); printf("<th>file</th>"); printf("<th>lab</th>"); printf("<th>assembly</th>"); printf("<th>subId</th>"); printf("<th>val-report</th>"); printf("</tr>\n"); safef(query, sizeof query, "select * from %s", docIdTable); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { docIdSub = docIdSubLoad(row); verbose(2, "ix %d\n", docIdSub->ix); verbose(2, "submitDate %s\n", docIdSub->submitDate); verbose(2, "md5sum %s\n", docIdSub->md5sum); verbose(2, "valReport %s\n", docIdSub->valReport); verbose(2, "metaData %s\n", docIdSub->metaData); verbose(2, "submitPath %s\n", docIdSub->submitPath); verbose(2, "submitter %s\n", docIdSub->submitter); cgiDecode(docIdSub->metaData, docIdSub->metaData, strlen(docIdSub->metaData)); //printf("tempFile %s\n", tempFile); FILE *f = mustOpen(tempFile, "w"); fwrite(docIdSub->metaData, strlen(docIdSub->metaData), 1, f); fclose(f); boolean validated; struct mdbObj *mdbObj = mdbObjsLoadFromFormattedFile(tempFile, &validated); unlink(tempFile); // <Data type> <Cell Type> <Key Metadata> <View> char *docIdType = mdbObjFindValue(mdbObj, "type"); char *docIdComposite = mdbObjFindValue(mdbObj, "composite"); char buffer[10 * 1024]; safef(buffer, sizeof buffer, "%d", docIdSub->ix); if (sameString(database, "encpipeline_beta")) docIdDir = docIdDirBeta; printf("<tr>"); printf("<td>%s</td> ", mdbObjFindValue(mdbObj, "dataType")); printf("<td>%s</td> ", mdbObjFindValue(mdbObj, "cell")); struct dyString *str = newDyString(100); addValue(str, mdbObjFindValue(mdbObj, "antibody")); addValue(str, mdbObjFindValue(mdbObj, "treatment")); addValue(str, mdbObjFindValue(mdbObj, "rnaExtract")); addValue(str, mdbObjFindValue(mdbObj, "localization")); printf("<td>%s<a href=docIdView?docId=%s&db=%s&meta=\"\"> ...</a></td>", str->string,buffer, database); freeDyString(&str); printf("<td>%s</td> ", mdbObjFindValue(mdbObj, "view")); printf("<td>%s</td> ", mdbObjFindValue(mdbObj, "type")); printf("<td><a href=%s> %s</a></td>", docIdGetPath(buffer, docIdDir, docIdType, NULL) , docIdDecorate(docIdComposite,docIdSub->ix)); char *lab = mdbObjFindValue(mdbObj, "lab"); char *subId = mdbObjFindValue(mdbObj, "subId"); printf("<td><a href=docIdView?docId=%s&db=%s&lab=\"%s\"> %s</a></td>",buffer, database, subId, lab); printf("<td>%s</td> ", mdbObjFindValue(mdbObj, "assembly")); printf("<td>%s</td> ", subId); printf("<td><a href=docIdView?docId=%s&db=%s&report=\"\"> report</a></td>", buffer, database); printf("</tr>\n"); } printf("</table>"); sqlFreeResult(&sr); sqlDisconnect(&conn); cartWebEnd(); }
void docIdTidy(char *database, char *docIdDir) /* docIdTidy - tidy up the docId library by compressing and md5suming where appropriate. */ { char query[10 * 1024]; struct sqlResult *sr; char **row; struct sqlConnection *conn = sqlConnect(database); struct tempName tn; trashDirFile(&tn, "docId", "meta", ".txt"); char *tempFile = tn.forCgi; struct toDoList *toDoList = NULL; safef(query, sizeof query, "select * from %s", docIdTable); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { struct docIdSub *docIdSub = docIdSubLoad(row); cgiDecode(docIdSub->metaData, docIdSub->metaData, strlen(docIdSub->metaData)); FILE *f = mustOpen(tempFile, "w"); fwrite(docIdSub->metaData, strlen(docIdSub->metaData), 1, f); fclose(f); boolean validated; //printf("metadata is %s\n", docIdSub->metaData); struct mdbObj *mdbObj = mdbObjsLoadFromFormattedFile(tempFile, &validated); unlink(tempFile); char *docIdType = mdbObjFindValue(mdbObj, "type"); char buffer[10 * 1024]; safef(buffer, sizeof buffer, "%d", docIdSub->ix); char *path = docIdGetPath(buffer, docIdDir, docIdType, NULL); //docIdDecorate(docIdSub->ix)); printf("path %s\n", path); struct toDoList *toDoItem = NULL; if (!fileIsCompressed(path)) { if (toDoItem == NULL) AllocVar(toDoItem); printf("foo\n"); toDoItem->needs |= NEEDS_COMPRESSION; toDoItem->path = path; toDoItem->docId = docIdSub->ix; } printf("docId %d md5sum %s valReport %s\n",docIdSub->ix, docIdSub->md5sum, docIdSub->valReport); //if (docIdSub->md5sum == NULL) if (sameString(docIdSub->md5sum, "")) { printf("mdsum\n"); if (toDoItem == NULL) AllocVar(toDoItem); toDoItem->needs |= NEEDS_MD5SUM; toDoItem->path = path; toDoItem->docId = docIdSub->ix; } //if (docIdSub->valReport == NULL) if (sameString(docIdSub->valReport,"")) { printf("report\n"); if (toDoItem == NULL) AllocVar(toDoItem); toDoItem->needs |= NEEDS_REPORT; toDoItem->path = path; toDoItem->docId = docIdSub->ix; } if (toDoItem) slAddHead(&toDoList, toDoItem); } sqlFreeResult(&sr); doCompression(toDoList); doReports(toDoList); doMd5Summing(toDoList); }