annotate SNV/SNVMix2_source/SNVMix2-v0.12.1-rc1/SNVMix2.h @ 7:351b3acadd17 default tip

Uploaded
author ryanmorin
date Tue, 18 Oct 2011 18:33:15 -0400
parents 74f5ea818cea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
1 /* The MIT License
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
2
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
3 Copyright (c) 2009, by Sohrab Shah <sshah@bccrc.ca> and Rodrigo Goya <rgoya@bcgsc.ca>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
4
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
5 Permission is hereby granted, free of charge, to any person obtaining
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
6 a copy of this software and associated documentation files (the
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
7 "Software"), to deal in the Software without restriction, including
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
8 without limitation the rights to use, copy, modify, merge, publish,
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
9 distribute, sublicense, and/or sell copies of the Software, and to
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
10 permit persons to whom the Software is furnished to do so, subject to
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
11 the following conditions:
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
12
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
13 The above copyright notice and this permission notice shall be
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
14 included in all copies or substantial portions of the Software.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
15
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
17 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
20 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
21 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
22 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
23 SOFTWARE.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
24 */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
25 #include <stdio.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
26 #include <stdlib.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
27 #include <string.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
28 #include <math.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
29 #include <unistd.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
30 #include <stdbool.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
31 #include "sam.h"
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
32 #include "faidx.h"
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
33 #include "khash.h"
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
34
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
35 #define TYPE_mb 0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
36 #define TYPE_m 1
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
37 #define TYPE_b 2
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
38 #define TYPE_M 3
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
39 #define TYPE_Mb 4
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
40 #define TYPE_MB 5
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
41 #define TYPE_SNVMix1 6
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
42
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
43 #define Q_PILEUP 0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
44 #define M_PILEUP 1
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
45 #define S_PILEUP 2
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
46 #define BAM_FILE 3
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
47
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
48 #define PHRED_MAX 200
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
49
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
50 #define N 0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
51 #define A 1
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
52 #define G 2
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
53 #define C 3
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
54 #define T 4
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
55
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
56 char base_code[] = {'N','A','G','C','T'};
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
57
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
58 struct params_train {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
59 long double *alpha;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
60 long double *beta;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
61 long double *delta;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
62 char *param_file;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
63 int max_iter;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
64 unsigned char **bQ;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
65 unsigned char **mQ;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
66 signed char **calls;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
67 char *ref;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
68 int *pos;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
69 int *depth;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
70 int len;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
71 };
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
72
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
73 typedef struct {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
74 FILE *input;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
75 FILE *output;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
76 char *inputfile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
77 char *outputfile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
78 char *modelfile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
79 char *bamfile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
80 char *fastafile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
81 char *listfile;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
82 int filter_type;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
83 int filter_chast;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
84 int filter_dup;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
85 int train;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
86 int classify;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
87 int filter;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
88 int full;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
89 int input_type; // 0 = processed, 1 = maq pileup, 2 = sam pileup
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
90 long double *mu;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
91 long double *pi;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
92 int max_iter;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
93 int bQ;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
94 int mQ;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
95 int debug;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
96 //struct {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
97 // int alpha[3];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
98 // int beta[3];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
99 //} train;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
100 struct params_train trainP;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
101 int states;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
102 int window;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
103 } param_struct;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
104
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
105 typedef int *indel_list_t;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
106 KHASH_MAP_INIT_INT64(64, indel_list_t)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
107
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
108 typedef struct{
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
109 bool in_use;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
110 uint32_t tid; // get with snvmix_pl->in->header->target_name[tid],
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
111 uint32_t pos;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
112 char ref;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
113 char nref;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
114 int ref_count;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
115 int nref_count;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
116 long double *p;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
117 int maxP;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
118 // 0 = REF , 1 = NREF
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
119 int forward[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
120 int reverse[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
121 int good_pair[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
122 int bad_pair[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
123 int c_clean[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
124 int c_ins[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
125 int c_del[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
126 int c_junc[2];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
127 int nref_edges; // FIXME: fixed 5 bp edges
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
128 int nref_center; //
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
129 int indel_pos; // How many reads have a deletion at that site
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
130 int indel_near; // How many reasd have a deletion overall
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
131 int aln_unique_pos;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
132 int full_depth; // Full depth at this position
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
133 int raw_cvg[5];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
134 int thr_cvg[5];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
135 } snvmix_call_t;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
136
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
137 typedef struct {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
138 param_struct *params;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
139 int begin, end;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
140 samfile_t *in;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
141 faidx_t *fai;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
142 int tid, len;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
143 char *ref;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
144 /* might want to move this elsewhere */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
145 khash_t(64) *hash;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
146 long double *notmu, *log_pi, *b;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
147 long double phred[PHRED_MAX + 1];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
148 int *calls, depth_allocated;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
149 snvmix_call_t *buffer;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
150 int n_buffer, b_start, b_end;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
151 // Extra flags
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
152 } snvmix_pl_t;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
153
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
154
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
155 void updatePhred(long double *phredTable);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
156 void initPhred(long double *phredTable, int elem);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
157
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
158 void resetParams(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
159 void initSNVMix(int argc , char **argv, param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
160 void usage(char *selfname);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
161
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
162 void allocateParameters(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
163 void setTrainingParameters(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
164 void setClassificationParameters(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
165 void readParamFile(param_struct *params, char type);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
166
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
167
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
168 void snvmixClassify_qualities(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
169 void snvmixClassify_pileup(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
170
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
171 int snvmixClassify_bamfile(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
172 static int snvmixClassify_pileup_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
173
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
174 inline void snvmixGetCallString(char *col, int *calls, int depth, char *nref);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
175
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
176 inline int snvmixFilterCalls(int *calls, int depth, char *bQ, char *mQ, param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
177 inline int snvmixSkipCall(int *calls, int qual_num, param_struct *params, char *bQ, char *mQ);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
178 inline int snvmixSkipCall_alt(param_struct *params, int call, char bQ, char mQ);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
179
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
180 void snvmixTrain_qualities(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
181 void snvmixGetTrainSet_pileup(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
182 void snvmixTrain_pileup(param_struct *params);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
183
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
184 long double normalise(long double *values, int len);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
185
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
186 char **__bam_get_lines(const char *fn, int *_n);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
187 static khash_t(64) *load_pos(const char *fn, bam_header_t *h)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
188 {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
189 char **list;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
190 int i, j, n, *fields, max_fields;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
191 khash_t(64) *hash;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
192 bam_init_header_hash(h);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
193 list = __bam_get_lines(fn, &n);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
194 fprintf(stderr,"got %d lines\n", n);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
195 hash = kh_init(64);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
196 max_fields = 0; fields = 0;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
197 for (i = 0; i < n; ++i) {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
198 char *str = list[i];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
199 int chr, n_fields, ret;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
200 khint_t k;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
201 uint64_t x;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
202 n_fields = ksplit_core(str, 0, &max_fields, &fields);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
203 if (n_fields < 2) continue;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
204 chr = bam_get_tid(h, str + fields[0]);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
205 if (chr < 0) {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
206 fprintf(stderr, "[load_pos] unknown reference sequence name: %s\n", str + fields[0]);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
207 continue;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
208 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
209 x = (uint64_t)chr << 32 | (atoi(str + fields[1]) - 1);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
210 k = kh_put(64, hash, x, &ret);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
211 if (ret == 0) {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
212 fprintf(stderr, "[load_pos] position %s:%s has been loaded.\n", str+fields[0], str+fields[1]);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
213 continue;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
214 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
215 kh_val(hash, k) = 0;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
216 if (n_fields > 2) {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
217 // count
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
218 for (j = 2; j < n_fields; ++j) {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
219 char *s = str + fields[j];
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
220 if ((*s != '+' && *s != '-') || !isdigit(s[1])) break;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
221 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
222 if (j > 2) { // update kh_val()
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
223 int *q, y, z;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
224 q = kh_val(hash, k) = (int*)calloc(j - 1, sizeof(int));
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
225 q[0] = j - 2; z = j; y = 1;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
226 for (j = 2; j < z; ++j)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
227 q[y++] = atoi(str + fields[j]);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
228 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
229 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
230 free(str);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
231 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
232 free(list); free(fields);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
233 return hash;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
234 }