void rmskOutWriteAllOut(char *fileName, struct rmskOut *rmskList) /* Write .out format file containing all in rmskList. */ { FILE *f = mustOpen(fileName, "w"); struct rmskOut *rmsk; rmskOutWriteHead(f); for (rmsk = rmskList; rmsk != NULL; rmsk = rmsk->next) rmskOutWriteOneOut(rmsk, f); fclose(f); }
void liftOut(char *destFile, struct hash *liftHash, int sourceCount, char *sources[]) /* Lift up coordinates in .out file. Add offset to id (15th) column to * maintain non-overlapping id ranges for different input files. */ { FILE *dest = mustOpen(destFile, "w"); char *source; int i; struct lineFile *lf; int lineSize, wordCount; char *line, *words[32]; char *s; int begin, end, left; char leftString[18]; int highestIdSoFar = 0, idOffset = 0; char idStr[32]; struct liftSpec *spec; char *newName; rmskOutWriteHead(dest); for (i=0; i<sourceCount; ++i) { source = sources[i]; verbose(1, "Lifting %s\n", source); if (!fileExists(source)) { warn("%s does not exist\n", source); continue; } lf = lineFileOpen(source, TRUE); if (!lineFileNext(lf, &line, &lineSize)) { warn("%s is empty\n", source); lineFileClose(&lf); continue; } if (startsWith("There were no", line)) { lineFileClose(&lf); continue; } skipLines(lf, 2); while (lineFileNext(lf, &line, &lineSize)) { wordCount = chopLine(line, words); // 16 becomes 17, new field in RMasker June23 '03 - Hiram if (wordCount < 14 || wordCount > 17) errAbort("Expecting 14-17 words (found %d) line %d of %s", wordCount, lf->lineIx, lf->fileName); if (wordCount >= 15) { if (words[14][0] == '*') { warn("Warning: 15th column has * (should be a numeric ID).\n"); idStr[0] = '\0'; } else { int numId = sqlUnsigned(words[14]) + idOffset; if (numId > highestIdSoFar) highestIdSoFar = numId; safef(idStr, sizeof(idStr), "%d", numId); } } else idStr[0] = '\0'; begin = numField(words, 5, 0, lf); end = numField(words, 6, 0, lf); s = words[7]; if (s[0] != '(') errAbort("Expecting parenthesized field 8 line %d of %s", lf->lineIx, lf->fileName); left = numField(words, 7, 1, lf); spec = findLift(liftHash, words[4], lf); if (spec == NULL) { if (how == carryMissing) newName = words[4]; else continue; } else { cantHandleSpecRevStrand(spec); begin += spec->offset; end += spec->offset; left = spec->newSize - end; newName = spec->newName; } sprintf(leftString, "(%d)", left); fprintf(dest, "%5s %5s %4s %4s %-9s %7d %7d %9s %1s %-14s %-19s %6s %4s %6s %6s\n", words[0], words[1], words[2], words[3], newName, begin, end, leftString, words[8], words[9], words[10], words[11], words[12], words[13], idStr); } lineFileClose(&lf); idOffset = highestIdSoFar; } if (ferror(dest)) errAbort("error writing %s", destFile); fclose(dest); }