void writeMousePartsAsMaf(FILE *f, struct hash *mouseHash, char *ratMouseDir, char *mouseChrom, int mouseStart, int mouseEnd, int mouseChromSize, struct hash *rSizeHash, struct hash *dupeHash) /* Write out mouse/rat alignments that intersect given region of mouse. * This gets a little involved because we need to do random access on * the mouse/rat alignment files, which are too big to fit into memory. * On disk we have a mouse/rat alignment file for each mouse chromosome, * and an index of it. When we first access a mouse chromosome we load * the index for that chromosome into memory, and open the alignment file. * We then do a seek and read to load a particular alignment. */ { struct mouseChromCache *mcc = NULL; struct binElement *list = NULL, *el; char aliName[512]; /* Get cache for this mouse chromosome */ mcc = hashFindVal(mouseHash, mouseChrom); if (mcc == NULL) { mcc = newMouseChromCache(mouseChrom, mouseChromSize, ratMouseDir); hashAdd(mouseHash, mouseChrom, mcc); } if (mcc->lf == NULL) return; /* Get list of positions and process one axt into a maf for each */ list = binKeeperFindSorted(mcc->bk, mouseStart, mouseEnd); for (el = list; el != NULL; el = el->next) { struct axt *axt; struct mafAli temp; long long *pPos, pos; pPos = el->val; pos = *pPos; sprintf(aliName, "%s.%lld", mouseChrom, pos); if (!hashLookup(dupeHash, aliName)) { int rChromSize; hashAdd(dupeHash, aliName, NULL); lineFileSeek(mcc->lf, pos, SEEK_SET); axt = axtRead(mcc->lf); rChromSize = hashIntVal(rSizeHash, axt->qName); prefixAxt(axt, rPrefix, mPrefix); mafFromAxtTemp(axt, mouseChromSize, rChromSize, &temp); mafWriteGood(f, &temp); axtFree(&axt); } } slFreeList(&list); }
static void mafQueryOut(struct gfOutput *out, FILE *f) /* Do axt oriented output - at end of processing query. */ { struct axtData *aod = out->data; struct axtBundle *gab; for (gab = aod->bundleList; gab != NULL; gab = gab->next) { struct axt *axt; for (axt = gab->axtList; axt != NULL; axt = axt->next) { struct mafAli temp; mafFromAxtTemp(axt, gab->tSize, gab->qSize, &temp); mafWrite(f, &temp); } } axtBundleFreeList(&aod->bundleList); }
void outputAxtAsMaf(FILE *f, struct axt *axt, struct hash *tSizeHash, char *tPrefix, struct hash *qSizeHash, char *qPrefix) /* Write out an axt in maf format. */ { struct mafAli temp; char *oldQ = axt->qName; char *oldT = axt->tName; char tName[256], qName[256]; snprintf(tName, sizeof(tName), "%s%s", tPrefix, axt->tName); axt->tName = tName; snprintf(qName, sizeof(qName), "%s%s", qPrefix, axt->qName); axt->qName = qName; mafFromAxtTemp(axt, hashIntVal(tSizeHash, oldT), hashIntVal(qSizeHash, oldQ), &temp); axt->qName = oldQ; axt->tName = oldT; mafWriteGood(f, &temp); }