source: branches/port5/NALIGNER/ali_global.cxx

Last change on this file was 4912, checked in by westram, 18 years ago
  • untabified + indented
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.8 KB
Line 
1
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#include "ali_misc.hxx"
7#include "ali_global.hxx"
8
9#define EXCLUSIVE_FLAG_DEFAULT             1
10#define MARK_FAMILY_FLAG_DEFAULT           0
11#define MARK_EXTENSION_FLAG_DEFAULT        0
12#define FIND_FAMILY_MODE_DEFAULT           1
13#define MAX_FAMILY_SIZE_DEFAULT            10
14#define MIN_FAMILY_SIZE_DEFAULT            5
15#define MIN_WEIGHT_DEFAULT                 0.7
16#define EXT_MAX_WEIGHT_DEFAULT             0.2
17#define MULTI_GAP_FACTOR_DEFAULT           0.1
18#define INSERT_FACTOR_DEFAULT              2.0;
19#define MULTI_INSERT_FACTOR_DEFAULT        0.5;
20#define COST_LOW_DEFAULT                   0.25
21#define COST_MIDDLE_DEFAULT                0.5
22#define COST_HIGH_DEFAULT                  0.8
23#define MAX_COST_OF_SUB_PERCENT_DEFAULT    0.5
24#define MAX_COST_OF_HELIX                  2.0
25#define ERROR_COUNT_DEFAULT                2
26#define MAX_NUMBER_OF_MAPS_DEFAULT         10 /* 100 */
27#define MAX_NUMBER_OF_MAPS_ALIGNER_DEFAULT 2
28#define INTERVALL_BORDER_DEFAULT           5
29#define INTERVALL_CENTER_DEFAULT           5
30
31/*
32 * ACHTUNG: muss noch durch parameter belegbar sein
33 */
34#define MATCHES_MIN_DEFAULT          1000
35#define PERCENT_MIN_DEFAULT          0.75
36#define FAM_LIST_MAX_DEFAULT         5
37#define EXT_LIST_MAX_DEFAULT         10
38#define USE_SPECIFIED_FAMILY_DEFAULT 0
39
40
41double default_substitute_matrix[5][5] = {
42    /* a    c    g    u    -          */
43    {0.0, 3.0, 1.0, 3.0, 5.0},  /* a */
44    {3.0, 0.0, 3.0, 1.0, 5.0},  /* c */
45    {1.0, 3.0, 0.0, 3.0, 5.0},  /* g */
46    {3.0, 1.0, 3.0, 0.0, 5.0},  /* u */
47    {5.0, 5.0, 5.0, 5.0, 0.0}   /* - */
48};
49
50double default_binding_matrix[5][5] = {
51    /* a    c    g    u    -          */
52    {9.9, 9.9, 2.0, 0.9, 9.9},  /* a */
53    {9.9, 9.9, 0.6, 9.9, 9.9},  /* c */
54    {2.0, 0.6, 5.0, 1.1, 9.9},  /* g */
55    {0.9, 9.9, 1.1, 9.9, 9.9},  /* u */
56    {9.9, 9.9, 9.9, 9.9, 0.0}   /* - */
57};
58
59
60void ALI_GLOBAL::init(int *argc, char *argv[])
61{
62    int kill, i, h, j, ret;
63    char *pos;
64    struct arb_params *params;
65    float fl;
66
67    params = arb_trace_argv(argc,argv);
68
69    prog_name = argv[0];
70    species_name = params->species_name;
71    default_file = params->default_file;
72    db_server = params->db_server;
73
74    /*
75     * Set the defaults
76     */
77
78    for (i = 0; i < 5; i++)
79        for (j = 0; j < 5; j++) {
80            prof_context.substitute_matrix[i][j] = default_substitute_matrix[i][j];
81            prof_context.binding_matrix[i][j] = default_binding_matrix[i][j];
82        }
83
84    cost_low = COST_LOW_DEFAULT;
85    cost_middle = COST_MIDDLE_DEFAULT;
86    cost_high = COST_HIGH_DEFAULT;
87    preali_context.max_number_of_maps = MAX_NUMBER_OF_MAPS_DEFAULT;
88    preali_context.max_number_of_maps_aligner = 
89        MAX_NUMBER_OF_MAPS_ALIGNER_DEFAULT;
90    preali_context.intervall_border = INTERVALL_BORDER_DEFAULT;
91    preali_context.intervall_center = INTERVALL_CENTER_DEFAULT;
92    preali_context.max_cost_of_sub_percent = MAX_COST_OF_SUB_PERCENT_DEFAULT;
93    preali_context.max_cost_of_helix = MAX_COST_OF_HELIX;
94    preali_context.error_count = ERROR_COUNT_DEFAULT;
95    mark_species_flag = 0;
96
97    prof_context.find_family_mode = FIND_FAMILY_MODE_DEFAULT;
98    prof_context.exclusive_flag = EXCLUSIVE_FLAG_DEFAULT;
99    prof_context.mark_family_flag = MARK_FAMILY_FLAG_DEFAULT;
100    prof_context.mark_family_extension_flag = MARK_EXTENSION_FLAG_DEFAULT;
101    prof_context.max_family_size = MAX_FAMILY_SIZE_DEFAULT;
102    prof_context.min_family_size = MIN_FAMILY_SIZE_DEFAULT;
103    prof_context.min_weight = MIN_WEIGHT_DEFAULT;
104    prof_context.ext_max_weight = EXT_MAX_WEIGHT_DEFAULT;
105    prof_context.multi_gap_factor = MULTI_GAP_FACTOR_DEFAULT;
106    prof_context.insert_factor = INSERT_FACTOR_DEFAULT;
107    prof_context.multi_insert_factor = MULTI_INSERT_FACTOR_DEFAULT;
108
109    pt_context.matches_min = MATCHES_MIN_DEFAULT;
110    pt_context.percent_min = PERCENT_MIN_DEFAULT;
111    pt_context.fam_list_max = FAM_LIST_MAX_DEFAULT;
112    pt_context.ext_list_max = EXT_LIST_MAX_DEFAULT;
113    pt_context.use_specified_family = USE_SPECIFIED_FAMILY_DEFAULT;
114
115    /*
116     * evaluate the parameters
117     */
118
119    for (i = 1; i < *argc;) {
120        kill = 0;
121        if (strcmp("-nx",argv[i]) == 0 && kill == 0) {
122            prof_context.exclusive_flag = 0;
123            kill = i;
124        }
125        if (strncmp("-f",argv[i],2) == 0 && kill == 0) {
126            pt_context.use_specified_family = strdup(argv[i] + 2);
127            kill = i;
128        }
129        if (strcmp("-ms",argv[i]) == 0 && kill == 0) {
130            mark_species_flag = 1;
131            kill = i;
132        }
133        if (strcmp("-mf",argv[i]) == 0 && kill == 0) {
134            prof_context.mark_family_flag = 1;
135            kill = i;
136        }
137        if (strcmp("-mfe",argv[i]) == 0 && kill == 0) {
138            prof_context.mark_family_extension_flag = 1;
139            kill = i;
140        }
141        if (strncmp("-mgf",argv[i],4) == 0 && kill == 0) {
142            kill = i;
143            pos = argv[i] + 4;
144            ret = sscanf(pos,"%f",&prof_context.multi_gap_factor);
145            if (ret != 1) {
146                ali_warning("Wrong format for -mgf");
147                break;
148            }
149        }
150        if (strncmp("-if",argv[i],3) == 0 && kill == 0) {
151            kill = i;
152            pos = argv[i] + 3;
153            ret = sscanf(pos,"%f",&prof_context.insert_factor);
154            if (ret != 1) {
155                ali_warning("Wrong format for -if");
156                break;
157            }
158        }
159        if (strncmp("-mif",argv[i],4) == 0 && kill == 0) {
160            kill = i;
161            pos = argv[i] + 4;
162            ret = sscanf(pos,"%f",&prof_context.multi_insert_factor);
163            if (ret != 1) {
164                ali_warning("Wrong format for -mif");
165                break;
166            }
167        }
168        if (strcmp("-m",argv[i]) == 0 && kill == 0) {
169            mark_species_flag = 1;
170            prof_context.mark_family_flag = 1;
171            kill = i;
172        }
173        if (strncmp("-msub",argv[i],5) == 0 && kill == 0) {
174            kill = i;
175            pos = argv[i] + 5;
176            for (h = 0; h < 5; h++)
177                for (j = 0; j < 5; j++) {
178                    ret = sscanf(pos,"%f",&fl);
179                    if (ret != 1) {
180                        ali_warning("wrong format for -msub");
181                        break;
182                    }
183                    else
184                        prof_context.substitute_matrix[h][j] = (double) fl;
185                    pos = strchr(pos,',');
186                    if ((h != 4 || j != 4) && pos == 0) {
187                        ali_warning("Not enought values for -msub");
188                        break;
189                    }
190                    pos++;
191                }
192        }
193        if (strncmp("-mbind",argv[i],6) == 0 && kill == 0) {
194            kill = i;
195            pos = argv[i] + 6;
196            for (h = 0; h < 5; h++)
197                for (j = 0; j < 5; j++) {
198                    ret = sscanf(pos,"%f",&fl);
199                    if (ret != 1) {
200                        ali_warning("Wrong format for -mbind");
201                        break;
202                    }
203                    else
204                        prof_context.binding_matrix[h][j] = (double) fl;
205                    pos = strchr(pos,',');
206                    if ((h != 4 || j != 4) && pos == 0) {
207                        ali_warning("Not enought values for -mbind");
208                        break;
209                    }
210                    pos++;
211                }
212        }
213        if (strncmp("-maxf",argv[i],5) == 0 && kill == 0) {
214            kill = i;
215            pos = argv[i] + 5;
216            ret = sscanf(pos,"%d",&prof_context.max_family_size);
217            if (ret != 1) {
218                ali_warning("Wrong format for -maxf");
219                break;
220            }
221        }
222        if (strncmp("-minf",argv[i],5) == 0 && kill == 0) {
223            kill = i;
224            pos = argv[i] + 5;
225            ret = sscanf(pos,"%d",&prof_context.min_family_size);
226            if (ret != 1) {
227                ali_warning("Wrong format for -minf");
228                break;
229            }
230        }
231        if (strncmp("-minw",argv[i],5) == 0 && kill == 0) {
232            kill = i;
233            pos = argv[i] + 5;
234            ret = sscanf(pos,"%f",&prof_context.min_weight);
235            if (ret != 1) {
236                ali_warning("Wrong format for -minw");
237                break;
238            }
239        }
240        if (strncmp("-maxew",argv[i],6) == 0 && kill == 0) {
241            kill = i;
242            pos = argv[i] + 6;
243            ret = sscanf(pos,"%f",&prof_context.ext_max_weight);
244            if (ret != 1) {
245                ali_warning("Wrong format for -minw");
246                break;
247            }
248        }
249
250        /*
251         * ACHTUNG: Unused BEGIN
252         */
253        if (strncmp("-cl",argv[i],3) == 0 && kill == 0) {
254            kill = i;
255            pos = argv[i] + 3;
256            ret = sscanf(pos,"%f",&cost_low);
257            if (ret != 1) {
258                ali_warning("Wrong format for -cl");
259                break;
260            }
261        }
262        if (strncmp("-cm",argv[i],3) == 0 && kill == 0) {
263            kill = i;
264            pos = argv[i] + 3;
265            ret = sscanf(pos,"%f",&cost_middle);
266            if (ret != 1) {
267                ali_warning("Wrong format for -cm");
268                break;
269            }
270        }
271        if (strncmp("-ch",argv[i],3) == 0 && kill == 0) {
272            kill = i;
273            pos = argv[i] + 3;
274            ret = sscanf(pos,"%f",&cost_high);
275            if (ret != 1) {
276                ali_warning("Wrong format for -ch");
277                break;
278            }
279        }
280        /*
281         * ACHTUNG: Unused END
282         */
283
284        if (strncmp("-csub",argv[i],5) == 0 && kill == 0) {
285            kill = i;
286            pos = argv[i] + 5;
287            ret = sscanf(pos,"%f",&preali_context.max_cost_of_sub_percent);
288            if (ret != 1) {
289                ali_warning("Wrong format for -csub");
290                break;
291            }
292        }
293        if (strncmp("-chel",argv[i],5) == 0 && kill == 0) {
294            kill = i;
295            pos = argv[i] + 5;
296            ret = sscanf(pos,"%f",&preali_context.max_cost_of_helix);
297            if (ret != 1) {
298                ali_warning("Wrong format for -chel");
299                break;
300            }
301        }
302        if (strncmp("-mma",argv[i],4) == 0 && kill == 0) {
303            kill = i;
304            pos = argv[i] + 4;
305            ret = sscanf(pos,"%ld",&preali_context.max_number_of_maps_aligner);
306            if (ret != 1) {
307                ali_warning("Wrong format for -mma");
308                break;
309            }
310        }
311        if (strncmp("-mm",argv[i],3) == 0 && kill == 0) {
312            kill = i;
313            pos = argv[i] + 3;
314            ret = sscanf(pos,"%ld",&preali_context.max_number_of_maps);
315            if (ret != 1) {
316                ali_warning("Wrong format for -mm");
317                break;
318            }
319        }
320        if (strncmp("-ec",argv[i],3) == 0 && kill == 0) {
321            kill = i;
322            pos = argv[i] + 3;
323            ret = sscanf(pos,"%ld",&preali_context.error_count);
324            if (ret != 1) {
325                ali_warning("Wrong format for -ec");
326                break;
327            }
328        }
329        if (strncmp("-ib",argv[i],3) == 0 && kill == 0) {
330            kill = i;
331            pos = argv[i] + 3;
332            ret = sscanf(pos,"%d",&preali_context.intervall_border);
333            if (ret != 1) {
334                ali_warning("Wrong format for -ib");
335                break;
336            }
337        }
338        if (strncmp("-ic",argv[i],3) == 0 && kill == 0) {
339            kill = i;
340            pos = argv[i] + 3;
341            ret = sscanf(pos,"%d",&preali_context.intervall_center);
342            if (ret != 1) {
343                ali_warning("Wrong format for -ic");
344                break;
345            }
346        }
347
348        if (kill > 0) {
349            for (i++; i < *argc; i++)
350                argv[i-1] = argv[i];
351            (*argc)--;
352            i = kill;
353        }
354        else
355            i++;
356    }
357
358    /*
359     * Check for consistency
360     */
361
362    if (prof_context.min_family_size > prof_context.max_family_size) {
363        ali_warning("minf <= maxf");
364    }
365
366    if (prof_context.ext_max_weight < 0 || prof_context.ext_max_weight > 1.0) {
367        ali_warning("0 <= maxew <= 1.0");
368    }
369
370    if (prof_context.min_weight < 0 || prof_context.min_weight > 1.0) {
371        ali_warning("0 <=  minw <= 1.0");
372    }
373
374    if (cost_low > cost_middle || cost_middle > cost_high ||
375        cost_low < 0 || cost_high > 1.0) {
376        ali_warning("0 <= cl <= cm <= ch <= 1.0");
377    }
378
379    /*
380     * Open Database and Pt server
381     */
382
383    ali_message("Connecting to Database server");
384    if (arbdb.open(db_server) != 0) {
385        ali_error("Can't connect to Database server");
386    }
387    ali_message("Connection established");
388    prof_context.arbdb = &arbdb;
389
390    pt_context.servername = params->pt_server;
391    pt_context.gb_main = arbdb.gb_main;
392
393    pt = new ALI_PT(&pt_context);
394
395    prof_context.pt = pt;
396}
Note: See TracBrowser for help on using the repository browser.