void netLineFilter(struct lineFile *lf, FILE *f) /* Do filter one line at a time. */ { struct hash *nameHash = newHash(0); char *line, *l; int d; while (lineFileNext(lf, &line, NULL)) { d = countLeadingChars(line, ' '); l = line + d; if (startsWith("fill", l) || startsWith("gap", l)) { struct cnFill *fill = cnFillFromLine(nameHash, lf, l); if (filterOne(fill)) cnFillWrite(fill, f, d); cnFillFree(&fill); } else { fprintf(f, "%s\n", line); } } hashFree(&nameHash); }
void cnFillWrite(struct cnFill *fillList, FILE *f, int depth) /* Recursively write out fill list. */ { struct cnFill *fill; for (fill = fillList; fill != NULL; fill = fill->next) { char *type = (fill->chainId ? "fill" : "gap"); spaceOut(f, depth); fprintf(f, "%s %d %d %s %c %d %d", type, fill->tStart, fill->tSize, fill->qName, fill->qStrand, fill->qStart, fill->qSize); if (fill->chainId) fprintf(f, " id %d", fill->chainId); if (fill->score > 0) fprintf(f, " score %1.0f", fill->score); if (fill->ali > 0) fprintf(f, " ali %d", fill->ali); if (fill->qOver >= 0) fprintf(f, " qOver %d", fill->qOver); if (fill->qFar >= 0) fprintf(f, " qFar %d", fill->qFar); if (fill->qDup >= 0) fprintf(f, " qDup %d", fill->qDup); if (fill->type != NULL) fprintf(f, " type %s", fill->type); if (fill->tN >= 0) fprintf(f, " tN %d", fill->tN); if (fill->qN >= 0) fprintf(f, " qN %d", fill->qN); if (fill->tR >= 0) fprintf(f, " tR %d", fill->tR); if (fill->qR >= 0) fprintf(f, " qR %d", fill->qR); if (fill->tNewR >= 0) fprintf(f, " tNewR %d", fill->tNewR); if (fill->qNewR >= 0) fprintf(f, " qNewR %d", fill->qNewR); if (fill->tOldR >= 0) fprintf(f, " tOldR %d", fill->tOldR); if (fill->qOldR >= 0) fprintf(f, " qOldR %d", fill->qOldR); if (fill->tTrf >= 0) fprintf(f, " tTrf %d", fill->tTrf); if (fill->qTrf >= 0) fprintf(f, " qTrf %d", fill->qTrf); fputc('\n', f); if (fill->children) cnFillWrite(fill->children, f, depth+1); } }
void chainNetWrite(struct chainNet *net, FILE *f) /* Write out chain net. */ { fprintf(f, "net %s %d\n", net->name, net->size); cnFillWrite(net->fillList, f, 1); }