void chimpSuperQuals(char *agpFile, char *qacInName, char *qacOutName) /* chimpSuperQuals - Map chimp quality scores from contig to supercontig.. */ { struct hash *qacHash = qacReadToHash(qacInName); struct scaffold *scaffold, *scaffoldList = readScaffoldsFromAgp(agpFile); FILE *f = mustOpen(qacOutName, "w"); struct qaSeq qa; struct agpFrag *frag; struct qac *qac; int bufSize = 0; UBYTE *buf = NULL; int qaMaxSize = 0; int fragSize; int count = 0; qacWriteHead(f); ZeroVar(&qa); for (scaffold = scaffoldList; scaffold != NULL; scaffold = scaffold->next) { /* Set up qa to hold uncompressed quals for whole scaffold. */ qa.name = scaffold->list->chrom; qa.size = scaffold->size; if (qaMaxSize < qa.size) { freez(&qa.qa); qa.qa = needHugeZeroedMem(qa.size); qaMaxSize = qa.size; } /* Uncompress contig quality scores and copy into scaffold's quality buffer. */ for (frag = scaffold->list; frag != NULL; frag = frag->next) { qac = hashMustFindVal(qacHash, frag->frag); if (bufSize < qac->uncSize) { freez(&buf); bufSize = qac->uncSize; buf = needMem(bufSize); } rleUncompress(qac->data, qac->compSize, buf, qac->uncSize); fragSize = frag->fragEnd - frag->fragStart; memcpy(qa.qa + frag->chromStart, buf + frag->fragStart, fragSize); } /* Compress and write it out. */ qacWriteNext(f, &qa); ++count; } carefulClose(&f); }
void qaToQac(char *inName, char *outName) /* qaToQac - convert from uncompressed to compressed * quality score format. */ { struct lineFile *lf = lineFileOpen(inName, TRUE); FILE *f = mustOpen(outName, "wb"); struct qaSeq *qa; qacWriteHead(f); while ((qa = qaReadNext(lf)) != NULL) { qacWriteNext(f, qa); qaSeqFree(&qa); } lineFileClose(&lf); fclose(f); }
void qacAgpLift(char *agpFile, char *qacInName, char *qacOutName) /* qacAgpLift - Use AGP to combine per-scaffold qac into per-chrom qac. */ { struct hash *qacHash = qacReadToHash(qacInName); struct chrom *chrom, *chromList = readChromScaffoldsFromAgp(agpFile); FILE *f = mustOpen(qacOutName, "w"); struct qaSeq qa; struct agpFrag *frag; struct qac *qac; int bufSize = 0; UBYTE *buf = NULL; int qaMaxSize = 0; int fragSize; int count = 0; qacWriteHead(f); ZeroVar(&qa); for (chrom = chromList; chrom != NULL; chrom = chrom->next) { /* Set up qa to hold uncompressed quals for whole chrom. */ qa.name = chrom->list->chrom; verbose(1, " %s size=%d\n", chrom->list->chrom, chrom->size); qa.size = chrom->size; if (qaMaxSize < qa.size) { qa.qa = needHugeZeroedMem(qa.size); qaMaxSize = qa.size; } else { zeroBytes(qa.qa, qa.size); } /* Uncompress contig quality scores and copy into chrom's quality buffer. */ for (frag = chrom->list; frag != NULL; frag = frag->next) { struct hashEl *hel; fragSize = frag->fragEnd - frag->fragStart; if ((hel = hashLookup(qacHash, frag->frag)) != NULL) { qac = (struct qac *) hel->val; if (bufSize < qac->uncSize) { freez(&buf); bufSize = qac->uncSize; buf = needMem(bufSize); } rleUncompress(qac->data, qac->compSize, buf, qac->uncSize); if (frag->strand[0] == '-') reverseBytes((char*)buf, qac->uncSize); memcpy(qa.qa + frag->chromStart, buf + frag->fragStart, fragSize); } else { /* agp frag not found in qac hash -- missing data */ if (mScore < 0) errAbort("missing data: no quality scores for %s", frag->frag); /* fill in missing data with specified score */ memset(qa.qa + frag->chromStart, mScore, fragSize); } } /* Compress and write it out. */ qacWriteNext(f, &qa); ++count; } carefulClose(&f); }