Mercurial > repos > dawe > srf2fastq
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_ */ |