comparison srf2fastq/io_lib-1.12.2/io_lib/srf.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
comparison
equal deleted inserted replaced
-1:000000000000 0:d901c9f41a6a
1 #ifndef _SRF_H_
2 #define _SRF_H_
3
4 #include "io_lib/hash_table.h"
5 #include "io_lib/ztr.h"
6 #include "io_lib/mFILE.h"
7
8 #define SRF_MAGIC "SSRF"
9 #define SRF_VERSION "1.3"
10
11 #define SRFB_CONTAINER 'S'
12 #define SRFB_XML 'X'
13 #define SRFB_TRACE_HEADER 'H'
14 #define SRFB_TRACE_BODY 'R'
15 #define SRFB_INDEX 'I'
16
17 /* Lack of index => 8 zero bytes at end of file to indicate zero length */
18 #define SRFB_NULL_INDEX '\0'
19
20 /*--- Public structures */
21
22 /* Container header - several per file */
23 typedef struct {
24 int block_type;
25 char version[256];
26 char container_type;
27 char base_caller[256];
28 char base_caller_version[256];
29 } srf_cont_hdr_t;
30
31 /* Trace header - several per container */
32 typedef struct {
33 int block_type;
34 char read_prefix_type;
35 char id_prefix[256];
36 uint32_t trace_hdr_size;
37 unsigned char *trace_hdr;
38 } srf_trace_hdr_t;
39
40 /* Trace body - several per trace header */
41 typedef struct {
42 int block_type;
43 int read_id_length;
44 char read_id[256];
45 unsigned char flags;
46 uint32_t trace_size;
47 unsigned char *trace;
48 } srf_trace_body_t;
49
50 /* XML - NCBI TraceInfo data block */
51 typedef struct {
52 uint32_t xml_len;
53 char *xml;
54 } srf_xml_t;
55
56 #define SRF_READ_FLAG_BAD_MASK (1<<0)
57 #define SRF_READ_FLAG_WITHDRAWN_MASK (1<<1)
58 #define SRF_READ_FLAG_USER_MASK (7<<5)
59
60 /* Indexing */
61 typedef struct {
62 char magic[4];
63 char version[4];
64 uint64_t size;
65 uint32_t n_container;
66 uint32_t n_data_block_hdr;
67 uint64_t n_buckets;
68 int8_t index_type;
69 int8_t dbh_pos_stored_sep;
70 char dbh_file[256];
71 char cont_file[256];
72 int index_hdr_sz; /* size of the above data on disk */
73 } srf_index_hdr_t;
74
75 /* In-memory index itself */
76 #define SRF_INDEX_NAME_BLOCK_SIZE 10000000
77
78 typedef struct {
79 size_t used;
80 size_t space;
81 char *names;
82 } srf_name_block_t;
83
84 typedef struct {
85 char ch_file[PATH_MAX+1];
86 char th_file[PATH_MAX+1];
87 Array ch_pos;
88 Array th_pos;
89 Array name_blocks;
90 int dbh_pos_stored_sep;
91 HashTable *db_hash;
92 } srf_index_t;
93
94 /* Master SRF object */
95 typedef struct {
96 FILE *fp;
97
98 /* Cached copies of each of the most recent chunk types loaded */
99 srf_cont_hdr_t ch;
100 srf_trace_hdr_t th;
101 srf_trace_body_t tb;
102 srf_xml_t xml;
103 srf_index_hdr_t hdr;
104
105 /* Private: cached data for use by srf_next_ztr */
106 ztr_t *ztr;
107 mFILE *mf;
108 long mf_pos, mf_end;
109 } srf_t;
110
111 #define SRF_INDEX_MAGIC "Ihsh"
112 #define SRF_INDEX_VERSION "1.01"
113
114
115 /*--- Initialisation */
116 srf_t *srf_create(FILE *fp);
117 srf_t *srf_open(char *fn, char *mode);
118 void srf_destroy(srf_t *srf, int auto_close);
119
120 /*--- Base type I/O methods */
121
122 int srf_write_pstring(srf_t *srf, char *str);
123 int srf_write_pstringb(srf_t *srf, char *str, int length);
124 int srf_read_pstring(srf_t *srf, char *str);
125
126 int srf_read_uint32(srf_t *srf, uint32_t *val);
127 int srf_write_uint32(srf_t *srf, uint32_t val);
128
129 int srf_read_uint64(srf_t *srf, uint64_t *val);
130 int srf_write_uint64(srf_t *srf, uint64_t val);
131
132
133 /*--- Mid level I/O - srf block */
134 srf_cont_hdr_t *srf_construct_cont_hdr(srf_cont_hdr_t *ch,
135 char *bc,
136 char *bc_version);
137 void srf_destroy_cont_hdr(srf_cont_hdr_t *ch);
138 int srf_read_cont_hdr(srf_t *srf, srf_cont_hdr_t *ch);
139 int srf_write_cont_hdr(srf_t *srf, srf_cont_hdr_t *ch);
140
141 int srf_read_xml(srf_t *srf, srf_xml_t *xml);
142 int srf_write_xml(srf_t *srf, srf_xml_t *xml);
143
144 srf_trace_hdr_t *srf_construct_trace_hdr(srf_trace_hdr_t *th,
145 char *prefix,
146 unsigned char *header,
147 uint32_t header_sz);
148 void srf_destroy_trace_hdr(srf_trace_hdr_t *th);
149 int srf_read_trace_hdr(srf_t *srf, srf_trace_hdr_t *th);
150 int srf_write_trace_hdr(srf_t *srf, srf_trace_hdr_t *th);
151
152 srf_trace_body_t *srf_construct_trace_body(srf_trace_body_t *th,
153 char *suffix,
154 int suffix_len,
155 unsigned char *body,
156 uint32_t body_size,
157 unsigned char flags);
158 void srf_destroy_trace_body(srf_trace_body_t *th);
159 int srf_write_trace_body(srf_t *srf, srf_trace_body_t *th);
160 int srf_read_trace_body(srf_t *srf, srf_trace_body_t *th, int no_trace);
161
162 int srf_read_index_hdr(srf_t *srf, srf_index_hdr_t *hdr, int no_seek);
163 int srf_write_index_hdr(srf_t *srf, srf_index_hdr_t *hdr);
164 srf_index_t *srf_index_create(char *ch_file, char *th_file, int dbh_sep);
165 void srf_index_destroy(srf_index_t *idx);
166 void srf_index_stats(srf_index_t *idx, FILE *fp);
167 int srf_index_add_cont_hdr(srf_index_t *idx, uint64_t pos);
168 int srf_index_add_trace_hdr(srf_index_t *idx, uint64_t pos);
169 int srf_index_add_trace_body(srf_index_t *idx, char *name, uint64_t pos);
170 int srf_index_write(srf_t *srf, srf_index_t *idx);
171
172 /*--- Higher level I/O functions */
173 mFILE *srf_next_trace(srf_t *srf, char *name);
174 ztr_t *srf_next_ztr_flags(srf_t *srf, char *name, int filter_mask, int *flags);
175 ztr_t *srf_next_ztr(srf_t *srf, char *name, int filter_mask);
176
177 ztr_t *partial_decode_ztr(srf_t *srf, mFILE *mf, ztr_t *z);
178 ztr_t *ztr_dup(ztr_t *src);
179
180 int srf_next_block_type(srf_t *srf); /* peek ahead */
181 int srf_next_block_details(srf_t *srf, uint64_t *pos, char *name);
182
183 int srf_find_trace(srf_t *srf, char *trace,
184 uint64_t *cpos, uint64_t *hpos, uint64_t *dpos);
185
186 int construct_trace_name(char *fmt,
187 unsigned char *suffix, int suffix_len,
188 char *name, int name_len);
189
190 #endif /* _SRF_H_ */