Mercurial > repos > dawe > srf2fastq
diff srf2fastq/io_lib-1.12.2/progs/extract_fastq.c @ 0:d901c9f41a6a default tip
Migrated tool version 1.0.1 from old tool shed archive to new tool shed repository
author | dawe |
---|---|
date | Tue, 07 Jun 2011 17:48:05 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srf2fastq/io_lib-1.12.2/progs/extract_fastq.c Tue Jun 07 17:48:05 2011 -0400 @@ -0,0 +1,175 @@ +/* + * Copyright (c) Medical Research Council 1994-1999. All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation for any purpose is hereby granted without fee, provided that + * this copyright and notice appears in all copies. + * + * This file was written by James Bonfield, Simon Dear, Rodger Staden, + * as part of the Staden Package at the MRC Laboratory of Molecular + * Biology, Hills Road, Cambridge, CB2 2QH, United Kingdom. + * + * MRC disclaims all warranties with regard to this software. + */ + +#include <stdio.h> +#include <errno.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include <unistd.h> +#include <io_lib/Read.h> +#include <io_lib/traceType.h> +#include <io_lib/expFileIO.h> +#include <io_lib/open_trace_file.h> + +static int do_trans(mFILE *infp, char *in_file, FILE *outfp, int format) { + Read *r; + char *p = strrchr(in_file, '/'); + int i; + + read_sections(READ_BASES); + if (NULL == (r = mfread_reading(infp, in_file, format))) { + fprintf(stderr, "Failed to read file '%s'\n", in_file); + return 1; + } + + if (NULL == p) + p = in_file; + else + p++; + + fprintf(outfp, "@%s\n", p); + fprintf(outfp, "%.*s\n", r->NBases, r->base); + fprintf(outfp, "+%s\n", p); + for (i = 0; i < r->NBases; i++) { + int qual; + switch (r->base[i]) { + case 'A': + case 'a': + qual = r->prob_A[i]; + break; + case 'C': + case 'c': + qual = r->prob_C[i]; + break; + case 'G': + case 'g': + qual = r->prob_G[i]; + break; + case 'T': + case 't': + qual = r->prob_T[i]; + break; + default: + qual = 0; + } + fputc(qual + 33, outfp); + } + fputc('\n', outfp); + + read_deallocate(r); + fflush(outfp); + + return 0; +} + +static void usage(void) { + fprintf(stderr, "Usage: extract_fastq [-(abi|alf|scf|exp|pln)]\n" + " [-output output_name] [-fofn fofn] [input_name] ...\n"); + exit(1); +} + +int main(int argc, char **argv) { + int from_stdin = 1; + mFILE *infp = mstdin(); + FILE *outfp = stdout; + int format = TT_ANY; + int ret = 0; + char *fofn = NULL; + + for (argc--, argv++; argc > 0; argc--, argv++) { + if (strcasecmp(*argv, "-abi") == 0) { + format = TT_ABI; + } else if (strcasecmp(*argv, "-alf") == 0) { + format = TT_ALF; + } else if (strcasecmp(*argv, "-scf") == 0) { + format = TT_SCF; + } else if (strcasecmp(*argv, "-exp") == 0) { + format = TT_EXP; + } else if (strcasecmp(*argv, "-pln") == 0) { + format = TT_PLN; + } else if (strcasecmp(*argv, "-ztr") == 0) { + format = TT_ZTR; + } else if (strcasecmp(*argv, "-ctf") == 0) { + format = TT_CTF; + } else if (strcmp(*argv, "-fofn") == 0) { + fofn = *++argv; + argc--; + from_stdin = 0; + } else if (strcasecmp(*argv, "-output") == 0) { + if (NULL == (outfp = fopen(*++argv, "wb"))) { + perror(*argv); + return 1; + } + argc--; + } else if (**argv != '-') { + from_stdin = 0; + break; + } else { + usage(); + } + } + + if (!from_stdin) { + if (fofn) { + FILE *fofn_fp; + char line[8192]; + + if (strcmp(fofn, "stdin") == 0) + fofn_fp = stdin; + else + fofn_fp = fopen(fofn, "r"); + + if (fofn_fp) { + while (fgets(line, 8192, fofn_fp) != NULL) { + char *cp; + if (cp = strchr(line, '\n')) + *cp = 0; + if (format == TT_EXP) { + infp = open_exp_mfile(line, NULL); + } else { + infp = open_trace_mfile(line, NULL); + } + if (NULL == infp) { + perror(line); + ret = 1; + } else { + ret |= do_trans(infp, line, outfp, format); + mfclose(infp); + } + } + fclose(fofn_fp); + } + } + for (;argc > 0; argc--, argv++) { + if (format == TT_EXP) { + infp = open_exp_mfile(*argv, NULL); + } else { + infp = open_trace_mfile(*argv, NULL); + } + if (NULL == infp) { + perror(*argv); + ret = 1; + } else { + ret |= do_trans(infp, *argv, outfp, format); + mfclose(infp); + } + } + } else { + ret = do_trans(infp, "<stdin>", outfp, format); + } + + return ret; +} +