90f26ce1f4bd4f69b53d11569d4c4efc0c3386b7 braney Tue Dec 20 12:41:19 2016 -0800 make some utilities to turn mafs into bigMafs diff --git src/lib/maf.c src/lib/maf.c index 11d205d..e5ad062 100644 --- src/lib/maf.c +++ src/lib/maf.c @@ -276,91 +276,97 @@ } slReverse(&mf->alignments); return mf; } void mafWriteStart(FILE *f, char *scoring) /* Write maf header and scoring scheme name (may be null) */ { fprintf(f, "##maf version=1"); if (scoring != NULL) fprintf(f, " scoring=%s", scoring); fprintf(f, "\n"); } -void mafWrite(FILE *f, struct mafAli *ali) +void mafWriteDelimiter(FILE *f, struct mafAli *ali, char delimiter) /* Write next alignment to file. */ { struct mafComp *comp; int srcChars = 0, startChars = 0, sizeChars = 0, srcSizeChars = 0; /* Write out alignment header */ -fprintf(f, "a score=%f\n", ali->score); +fprintf(f, "a score=%f%c", ali->score, delimiter); /* include region definition */ if (ali->regDef != NULL) - fprintf(f, "r %s %d %s\n", ali->regDef->type, ali->regDef->size, ali->regDef->id); + fprintf(f, "r %s %d %s%c", ali->regDef->type, ali->regDef->size, ali->regDef->id, delimiter); /* Figure out length of each field. */ for (comp = ali->components; comp != NULL; comp = comp->next) { int len = 0; /* a name like '.' will break some tools, so replace it * with a generic name */ if (sameString(comp->src,".")) comp->src=cloneString("defaultName"); len = strlen(comp->src); if (srcChars < len) srcChars = len; len = digitsBaseTen(comp->start); if (startChars < len) startChars = len; len = digitsBaseTen(comp->size); if (sizeChars < len) sizeChars = len; len = digitsBaseTen(comp->srcSize); if (srcSizeChars < len) srcSizeChars = len; } /* Write out each component. */ for (comp = ali->components; comp != NULL; comp = comp->next) { if ((comp->size == 0) && (comp->leftStatus)) - fprintf(f, "e %-*s %*d %*d %c %*d %c\n", + fprintf(f, "e %-*s %*d %*d %c %*d %c%c", srcChars, comp->src, startChars, comp->start, sizeChars, comp->leftLen, comp->strand, - srcSizeChars, comp->srcSize, comp->leftStatus); + srcSizeChars, comp->srcSize, comp->leftStatus, delimiter); else { - fprintf(f, "s %-*s %*d %*d %c %*d %s\n", + fprintf(f, "s %-*s %*d %*d %c %*d %s%c", srcChars, comp->src, startChars, comp->start, sizeChars, comp->size, comp->strand, - srcSizeChars, comp->srcSize, comp->text); + srcSizeChars, comp->srcSize, comp->text, delimiter); if (comp->quality) - fprintf(f, "q %-*s %s\n", + fprintf(f, "q %-*s %s%c", srcChars + startChars + sizeChars + srcSizeChars + 5, - comp->src, comp->quality); + comp->src, comp->quality, delimiter); if (comp->leftStatus) - fprintf(f,"i %-*s %c %d %c %d\n",srcChars,comp->src, - comp->leftStatus,comp->leftLen,comp->rightStatus,comp->rightLen); + fprintf(f,"i %-*s %c %d %c %d%c",srcChars,comp->src, + comp->leftStatus,comp->leftLen,comp->rightStatus,comp->rightLen, delimiter); } } +} + +void mafWrite(FILE *f, struct mafAli *ali) +/* Write next alignment to file. */ +{ +mafWriteDelimiter(f, ali, '\n'); /* Write out blank separator line. */ fprintf(f, "\n"); } void mafWriteEnd(FILE *f) /* Write maf footer. In this case nothing */ { } void mafWriteAll(struct mafFile *mf, char *fileName) /* Write out full mafFile. */ { FILE *f = mustOpen(fileName, "w"); struct mafAli *ali;