Mercurial > repos > dawe > srf2fastq
diff srf2fastq/io_lib-1.12.2/io_lib/scf.h @ 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/io_lib/scf.h Tue Jun 07 17:48:05 2011 -0400 @@ -0,0 +1,447 @@ +/* + * Copyright (c) Medical Research Council 1994. 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. + */ + +/* + * File: scf.h + * Version: 3.00 + * + * Description: file structure definitions for SCF file + * + * Created: 19 November 1992 + * + */ + +#ifndef _SCF_H_ +#define _SCF_H_ + +#include <stdio.h> +#include <sys/types.h> + +#include "io_lib/mFILE.h" +#include "io_lib/os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + *----------------------------------------------------------------------------- + * Macros + *----------------------------------------------------------------------------- + */ + +/* The SCF magic number */ +#define SCF_MAGIC (((((uint_4)'.'<<8)+(uint_4)'s'<<8)+(uint_4)'c'<<8)+(uint_4)'f') + +/* prior to this was a different format */ +#define SCF_VERSION_OLDEST 2.00 +#define SCF_VERSION_OLD 2.02 + +/* The current SCF format level */ +#define SCF_VERSION 3.00 + +/* Uncertainty code sets supported */ +#define CSET_DEFAULT 0 /* {A,C,G,T,-} */ +#define CSET_STADEN 1 +#define CSET_NC_IUB 2 /* Pharmacia A.L.F. */ +#define CSET_ALF 3 /* extended NC_IUB */ +#define CSET_ABI 4 /* {A,C,G,T,N} */ +#define CSET_IBI 5 /* IBI/Pustell */ +#define CSET_DNASTAR 6 /* DNA* */ +#define CSET_DNASIS 7 +#define CSET_PCGENE 8 /* IG/PC-Gene */ +#define CSET_GENIE 9 /* MicroGenie */ + +/* define samples to delta_delta values */ +#define DELTA_IT 1 + +/* What components to read */ +#define READ_BASES (1<<0) +#define READ_SAMPLES (1<<1) +#define READ_COMMENTS (1<<2) +#define READ_ALL (READ_BASES | READ_SAMPLES | READ_COMMENTS) + +/* + *----------------------------------------------------------------------------- + * Structures and typedefs + *----------------------------------------------------------------------------- + */ + +/* + * Type definition for the Header structure + */ +typedef struct { + uint_4 magic_number; /* SCF_MAGIC */ + uint_4 samples; /* Number of elements in Samples matrix */ + uint_4 samples_offset; /* Byte offset from start of file */ + uint_4 bases; /* Number of bases in Bases matrix */ + uint_4 bases_left_clip; /* OBSOLETE: No. bases in left clip (vector) */ + uint_4 bases_right_clip; /* OBSOLETE: No. bases in right clip (qual) */ + uint_4 bases_offset; /* Byte offset from start of file */ + uint_4 comments_size; /* Number of bytes in Comment section */ + uint_4 comments_offset; /* Byte offset from start of file */ + char version[4]; /* "version.revision" */ + uint_4 sample_size; /* precision of samples (in bytes) */ + uint_4 code_set; /* uncertainty codes used */ + uint_4 private_size; /* size of private data, 0 if none */ + uint_4 private_offset; /* Byte offset from start of file */ + uint_4 spare[18]; /* Unused */ +} Header; + +/* + * Header.sample_size == 1. + */ +typedef struct { + uint_1 sample_A; /* Sample for A trace */ + uint_1 sample_C; /* Sample for C trace */ + uint_1 sample_G; /* Sample for G trace */ + uint_1 sample_T; /* Sample for T trace */ +} Samples1; + +/* + * Header.sample_size == 2. + */ +typedef struct { + uint_2 sample_A; /* Sample for A trace */ + uint_2 sample_C; /* Sample for C trace */ + uint_2 sample_G; /* Sample for G trace */ + uint_2 sample_T; /* Sample for T trace */ +} Samples2; + +/* + * Type definition for the sequence data + */ +typedef struct { + uint_4 peak_index; /* Index into Samples matrix for base position */ + uint_1 prob_A; /* Probability of it being an A */ + uint_1 prob_C; /* Probability of it being an C */ + uint_1 prob_G; /* Probability of it being an G */ + uint_1 prob_T; /* Probability of it being an T */ + char base; /* Base called */ + uint_1 spare[3]; /* Spare */ +} Bases; + + +/* + * Type definition for the comments + */ +typedef char Comments; /* Zero terminated list of \n separated entries */ + + +/* + * All of the above structs in a single scf format. + */ +typedef struct { + Header header; + union Samples { + Samples1 *samples1; + Samples2 *samples2; + } samples; + Bases *bases; + Comments *comments; + char *private_data; +} Scf; + +/* + *----------------------------------------------------------------------------- + * Function prototypes + *----------------------------------------------------------------------------- + */ + +/* + * Reading SCF Files + * ----------------- + */ + +/* + * Read the Header struct. + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_header(mFILE *fp, Header *h); + +/* + * Read a single 8bit sample + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_sample1(mFILE *fp, Samples1 *s); + +/* + * Read several 8bit samples + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_samples1(mFILE *fp, Samples1 *s, size_t num_samples); + +/* + * Read several 8bit samples in delta_delta format + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_samples31(mFILE *fp, Samples1 *s, size_t num_samples); + +/* + * Read a single 16bit sample + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_sample2(mFILE *fp, Samples2 *s); + +/* + * Read several 16bit samples + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_samples2(mFILE *fp, Samples2 *s, size_t num_samples); + +/* + * Read several 16bit samples in delta_delta format + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_samples32(mFILE *fp, Samples2 *s, size_t num_samples); + +/* + * Read a single Bases structure + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_base(mFILE *fp, Bases *b); + +/* + * Read several Bases structures consecutively + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_bases(mFILE *fp, Bases *b, size_t num_bases); + +/* + * Read Bases, peak_indexes and probs + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_bases3(mFILE *fp, Bases *b, size_t num_bases); + +/* + * Read the SCF Comments. + * Returns: + * 0 - success + * -1 - failure + */ +int read_scf_comment(mFILE *fp, Comments *c, size_t l); + +/* + * Reads a whole SCF file into a Scf structure. This memory for this + * structure is allocated by this routine. To free this memory use + * scf_deallocate(). + * Returns: + * Scf * - Success, the Scf structure read. + * NULL - Failure. + * On failure NULL is returned, otherwise the Scf struct. + */ +Scf *read_scf(char *fn); +Scf *fread_scf(FILE *fp); +Scf *mfread_scf(mFILE *fp); + + +/* + * Writing SCF Files + * ----------------- + */ + +/* + * Write the Header struct. + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_header(mFILE *fp, Header *h); + +/* + * Write a single 8bit sample + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_sample1(mFILE *fp, Samples1 *s); + +/* + * Write several 8bit samples + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_samples1(mFILE *fp, Samples1 *s, size_t num_samples); + +/* + * Write several 8bit samples in delta_delta format + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_samples31(mFILE *fp, Samples1 *s, size_t num_samples); + +/* + * Write 16bit samples + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_sample2(mFILE *fp, Samples2 *s); + +/* + * Write several 16bit samples + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_samples2(mFILE *fp, Samples2 *s, size_t num_samples); + +/* + * Write several 16bit samples in delta_delta format + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_samples32(mFILE *fp, Samples2 *s, size_t num_samples); + +/* + * Write the Bases structure + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_base(mFILE *fp, Bases *b); + +/* + * Write the several Bases structures consecutively + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_bases(mFILE *fp, Bases *b, size_t num_bases); + +/* + * Write the bases, then peak indexes, then probs + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_bases3(mFILE *fp, Bases *b, size_t num_bases); + +/* + * Write the SCF Comments. + * Returns: + * 0 - success + * -1 - failure + */ +int write_scf_comment(mFILE *fp, Comments *c, size_t l); + + +/* + * Writes a whole Scf structure to filename "fn". + * This initialises several fields in the Header struct for you. These are: + * samples_offset + * bases_offset + * comments_offset + * magic_number + * + * All other fields are assumed to be correctly set. + * + * Returns: + * 0 for success + * -1 for failure + */ +int write_scf(Scf *scf, char *fn); +int fwrite_scf(Scf *scf, FILE *fp); +int mfwrite_scf(Scf *scf, mFILE *fp); + +/* + * Request which (major) version of scf to use when writing. + * Defaults to the latest. Currently suitable fields are + * 2 and 3. + * + * Returns 0 for success, -1 for failure. + */ +int set_scf_version(int version); + + +/* + * Miscellaneous SCF utilities + * --------------------------- + */ + +/* + * Converts an SCF version string (eg "2.00") to a float + */ +float scf_version_str2float(char version[]); + +/* + * Converts an SCF version float (eg 2.00) to a string + * Returns: + * A statically allocated 5 character string. + */ +char *scf_version_float2str(float f); + +/* + * Allocates memory for the scf elements based upon arguments passed. + * Returns; + * Scf * - Success. The scf structure and it's samples, bases, + * and comments fields have been allocated. + * NULL - Failure. + */ +Scf *scf_allocate(int num_samples, int sample_size, int num_bases, + int comment_size, int private_size); + +/* + * Frees memory allocated by scf_allocate. + */ +void scf_deallocate(Scf *scf); + +/* + * Checks to see if the file with name "fn" is in SCF format. + * Returns: + * 1 - is in SCF format + * 0 - is not in SCF format + * -1 - failure + */ +int is_scf(char *fn); + +/* + * Change sample points to delta_delta values for uint1 + */ +void scf_delta_samples1 ( int1 samples[], int num_samples, int job); + +/* + * Change sample points to delta_delta values for uint2 + */ +void scf_delta_samples2 ( uint2 samples[], int num_samples, int job); + +#ifdef __cplusplus +} +#endif + +#endif /*_SCF_H_*/ +