void filterPsls() { struct psl *origPslList=NULL, *pslList=NULL, *psl=NULL; int startCount=0, stopCount=0; char buff[256]; origPslList = pslLoadAll(pslIn); /* some messages for the user */ startCount = slCount(origPslList); sprintf(buff, "Filtering %d psl using seqIdent=%g and basePct=%g\n", startCount, seqIdent, basePct); msg(buff); /* do our filtering */ pslList = filterBySeqIdentity(seqIdent, origPslList); pslFreeList(&origPslList); origPslList = filterByBasePct(basePct, pslList); /* let the user know we're done */ if(origPslList != NULL) { stopCount = slCount(origPslList); pslWriteAll(origPslList, pslOut, FALSE); pslFreeList(&origPslList); } pslFreeList(&origPslList); pslFreeList(&pslList); sprintf(buff, "After filtering %d of %d are left\n", stopCount, startCount); msg(buff); }
int main(int argc, char *argv[]) /* The program */ { struct psl *pslList = NULL, *psl; struct hash *queryHash, *targetHash; struct lineFile *vulg; aaSeq *querySeqs; struct dnaSeq *targetSeqs; if (argc != 5) usage(); /* Load up everything at beginning */ vulg = lineFileOpen(argv[1], TRUE); querySeqs = dnaLoadAll(argv[2]); targetSeqs = dnaLoadAll(argv[3]); queryHash = seqHash(querySeqs); targetHash = seqHash(targetSeqs); /* Main business */ pslList = vulgarToPsl(vulg, queryHash, targetHash); pslWriteAll(pslList, argv[4], FALSE); /* Free up everything */ freeDnaSeqList(&querySeqs); freeDnaSeqList(&targetSeqs); freeHash(&targetHash); freeHash(&queryHash); pslFreeList(&pslList); lineFileClose(&vulg); return 0; }
static void pslPartsWrite(struct pslParts *parts, char *outDir) /* write out a set of partitions and reset stated to empty. */ { char *partPath = getPartPslFile(outDir, parts->partNum++); pslWriteAll(parts->psls, partPath, FALSE); freeMem(partPath); pslFreeList(&parts->psls); parts->size = 0; }
void extractPslForLfs(char *pslFile, char *lfsFile, char *out) /* Extract psl alignments for alignments in lfs bed file */ { struct lineFile *pf, *bf; FILE *pslOut; char errorFile[256] = "error.log"; struct hash *pslHash = newHash(20); struct bed *bedList = NULL; struct psl *pslList = NULL; fprintf(stdout,"NOTE: Program assumes that chrom, chromStart and chromEnd \n"); fprintf(stdout, "are unique for each item in the lfs file so only one PSL \n"); fprintf(stdout, "alignment will be picked for each specific item and \n"); fprintf(stdout, "genomic location.\n\n"); fprintf(stdout, "Opening files ...\n"); bf = lineFileOpen(lfsFile, TRUE); pslOut = mustOpen(out, "w"); stderr = mustOpen(errorFile, "w"); /* Open psl alignments file */ pf = pslFileOpen(pslFile); /* Read in psl file of alignments */ verbose(1, "Reading psl and storing alignments file ...\n"); readPslFile(pf, &pslHash); /* Read in lfs BED file of alignments */ verbose(1, "Reading and storing lfs alignments file ...\n"); bedList = convertLfsToBed(bf); verbose(1, "Extracting psl alignments ... \n"); pslList = getPslList(pslHash, bedList); /* print out the psl file without the header */ pslWriteAll(pslList, out, FALSE); /* close files */ lineFileClose(&bf); lineFileClose(&pf); carefulClose(&pslOut); carefulClose(&stderr); }