9a6742a6bb8914efe0fd1c050bd5a9493bb0eaaa krish Sat Dec 18 00:28:19 2010 -0800 fixed size bugs and makefile bug diff --git src/utils/fastaToPsl/fastaToPsl.c src/utils/fastaToPsl/fastaToPsl.c new file mode 100644 index 0000000..3ec4c10 --- /dev/null +++ src/utils/fastaToPsl/fastaToPsl.c @@ -0,0 +1,95 @@ +/* fastaToPsl - Convert FASTA alignments to PSL format. */ +#include "common.h" +#include "fa.h" +#include "linefile.h" +#include "hash.h" +#include "options.h" +#include "dystring.h" +#include "errabort.h" +#include "psl.h" +#include "sqlNum.h" +#include "obscure.h" + +void usage() +/* Explain usage and exit. */ +{ +errAbort( + "fastaToPsl - Convert FASTA pair alignments to PSL format\n" + "usage:\n" + " fastaToPsl [options] in.fasta out.psl\n" + ); +} + + +/* command line */ +static struct optionSpec optionSpec[] = { + {NULL, 0} +}; + +void fastaToPsl(char *inName, char *outName) +/* fastaToPsl - Convert axt to psl format. */ +{ +struct lineFile *inLF; +DNA *tmpSeq; +char *tmpHeader; +int tmpSize; +boolean read; +struct psl* pslAlign; + +DNA *qSeq; +int qSize; +int qSeqLen; +char *qHeader; + +DNA *tSeq; +int tSize; +int tSeqLen; +char *tHeader; + +inLF = lineFileOpen(inName, TRUE); + +/* read the query sequence */ +read = faMixedSpeedReadNext(inLF, &tmpSeq, &qSize, &tmpHeader); +if (!read) + errAbort("Could not read query FASTA entry."); +qSeq = cloneString(tmpSeq); +qSeqLen = countNonDash(qSeq, qSize); +qHeader = cloneString(tmpHeader); +verbose(2, "Query sequence header: %s\n", qHeader); +verbose(3, "Query sequence alignment length: %d\n", qSize); +verbose(3, "Query sequence length: %d\n", qSeqLen); + +/* read the target sequence */ +read = faMixedSpeedReadNext(inLF, &tmpSeq, &tSize, &tmpHeader); +if (!read) + errAbort("Could not read target FASTA entry."); +tSeq = cloneString(tmpSeq); +tSeqLen = countNonDash(tSeq, tSize); +tHeader = cloneString(tmpHeader); +verbose(2, "Target sequence header: %s\n", tHeader); +verbose(3, "Target sequence alignment length: %d\n", tSize); +verbose(3, "Target sequence length: %d\n", tSeqLen); + +/* try to read next sequence to see if there is one */ +read = faMixedSpeedReadNext(inLF, &tmpSeq, &tmpSize, &tmpHeader); +if (read) + verbose(0, "Found more than two FASTA entries, only processing the first two.\n"); + +pslAlign = pslFromAlign(qHeader, qSeqLen, 0, qSeqLen, qSeq, + tHeader, tSeqLen, 0, tSeqLen, tSeq, + "+", 0); +pslWriteAll(pslAlign, outName, TRUE); + +lineFileClose(&inLF); +} + +int main(int argc, char *argv[]) +/* Process command line. */ +{ +optionInit(&argc, argv, optionSpec); +if (argc != 3) + usage(); +//gUntranslated = optionExists("untranslated"); +fastaToPsl(argv[1], argv[2]); +return 0; +}