static void processBed6(char *database, char *track, FILE *f, struct bed *bed, struct slName *orgList) /* generate MAF alignment for a bed6 */ { struct mafAli *maf; char *useName = refCoords ? NULL : bed->name; if (txStarts) { maf = hgMafFrag(database, track, bed->chrom, bed->chromStart, bed->chromEnd, bed->strand[0], useName, orgList); maf->regDef = mafRegDefNew(mafRegDefTxUpstream, bed->chromEnd-bed->chromStart, bed->name); if (meFirst) moveMeToFirst(maf, database); } else { maf = hgMafFrag(database, track, bed->chrom, bed->chromStart, bed->chromEnd, bed->strand[0], useName, orgList); if (meFirst) moveMeToFirst(maf, bed->name); } mafWrite(f, maf); mafAliFree(&maf); }
void mafOrtholog(char *database, char *track, char *genePredFile, char *outFile) /* mafOrtholog - find orthlogs in other species based on maf alignment and reference genePred */ { struct slName *orgList = NULL; FILE *f = mustOpen(outFile, "w"); struct genePredReader *gpr = genePredReaderFile(genePredFile, NULL); struct genePred *gpList = genePredReaderAll(gpr), *gp = NULL; struct sqlConnection *conn = hAllocConn(); if (optionExists("nibDir")) nibDir = optionVal("nibDir", NULL); if (optionExists("orgs")) { char *orgFile = optionVal("orgs", NULL); char *buf; readInGulp(orgFile, &buf, NULL); orgList = stringToSlNames(buf); } for (gp = gpList ; gp != NULL ; gp=gp->next) { struct mafAli *maf = NULL; if (thickOnly) maf = mafLoadInRegion(conn, track, gp->chrom, gp->cdsStart, gp->cdsEnd); else maf = mafLoadInRegion(conn, track, gp->chrom, gp->txStart, gp->txEnd); if (meFirst) moveMeToFirst(maf, database); printOrthologs(f, maf, gp); mafAliFree(&maf); } carefulClose(&f); }
static void mafFrags(char *database, char *track, char *bedFile, char *mafFile) /* mafFrags - Collect MAFs from regions specified in a 6 column bed file. */ { struct slName *orgList = NULL; struct lineFile *lf = lineFileOpen(bedFile, TRUE); FILE *f = mustOpen(mafFile, "w"); if (optionExists("orgs")) { char *orgFile = optionVal("orgs", NULL); char *buf; readInGulp(orgFile, &buf, NULL); orgList = stringToSlNames(buf); /* Ensure that org list starts with database. */ struct slName *me = slNameFind(orgList, database); if (me == NULL) errAbort("Need to have reference database '%s' in %s", database, orgFile); if (me != orgList) { slRemoveEl(&orgList, me); slAddHead(&orgList, me); } } mafWriteStart(f, "zero"); if (bed12) { char *row[12]; while (lineFileRow(lf, row)) { struct bed *bed = bedLoadN(row, ArraySize(row)); struct mafAli *maf = mafFromBed12(database, track, bed, orgList); if (meFirst) moveMeToFirst(maf, bed->name); mafWrite(f, maf); mafAliFree(&maf); bedFree(&bed); } } else { char *row[6]; while (lineFileRow(lf, row)) { struct bed *bed = bedLoadN(row, ArraySize(row)); processBed6(database, track, f, bed, orgList); bedFree(&bed); } } mafWriteEnd(f); carefulClose(&f); }