root/trunk/EDIT4/graph_aligner_gui.cxx

Revision 8696, 22.3 KB (checked in by westram, 3 weeks ago)
  • merge from saiali [8634:8695]
    • unalign center (blockop)
    • modify SAI range (using ACI/SRT)
    • align ranges defined by SAI
    • refactorings
      • block ops
      • selection lists
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : graph_aligner_gui.cxx                             //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Coded by Elmar Pruesse in October 2008                        //
7//   Institute of Microbiology (Technical University Munich)       //
8//   http://www.arb-home.de/                                       //
9//                                                                 //
10// =============================================================== //
11
12#include "graph_aligner_gui.hxx"
13
14#include "ed4_defs.hxx"
15
16// need to use AlignDataAccess defined here to get selected species
17#include <fast_aligner.hxx>
18
19#include <aw_awars.hxx>
20#include <aw_msg.hxx>
21#include <aw_root.hxx>
22#include <awt_sel_boxes.hxx>
23#include <servercntrl.h>
24#include <PT_com.h>
25#include <client.h>
26#include <arbdbt.h>
27#include <arb_strbuf.h>
28
29#include <sys/types.h>
30#include <sys/wait.h>
31
32#include <unistd.h>
33
34#include <string>
35#include <sstream>
36#include <iostream>
37#include <vector>
38
39
40using std::cerr;
41using std::cout;
42using std::endl;
43
44#define GA_AWAR_ROOT "sina/"
45#define GA_AWAR_CMD GA_AWAR_ROOT "command"
46#define GA_AWAR_TGT GA_AWAR_ROOT "target"
47#define GA_AWAR_SAI GA_AWAR_ROOT "sai"
48#define GA_AWAR_ALIGNMENT GA_AWAR_ROOT "alignment"
49#define GA_AWAR_PROTECTION GA_AWAR_ROOT "protection"
50#define GA_AWAR_TURN_CHECK GA_AWAR_ROOT "turncheck"
51#define GA_AWAR_LOGLEVEL GA_AWAR_ROOT "loglevel"
52#define GA_AWAR_REALIGN GA_AWAR_ROOT "realign"
53#define GA_AWAR_PTLOAD GA_AWAR_ROOT "ptload"
54#define GA_AWAR_COPYMARKREF GA_AWAR_ROOT "copymarkref"
55#define GA_AWAR_MATCH_SCORE GA_AWAR_ROOT "match_score"
56#define GA_AWAR_MISMATCH_SCORE GA_AWAR_ROOT "mismatch_score"
57#define GA_AWAR_GAP_PEN GA_AWAR_ROOT "gap_pen"
58#define GA_AWAR_GAP_EXT GA_AWAR_ROOT "gap_ext"
59#define GA_AWAR_ADVANCED GA_AWAR_ROOT "advanced"
60#define GA_AWAR_FS_MIN GA_AWAR_ROOT "fs_min"
61#define GA_AWAR_FS_MAX GA_AWAR_ROOT "fs_max"
62#define GA_AWAR_FS_MSC GA_AWAR_ROOT "fs_msc"
63#define GA_AWAR_MIN_FULL GA_AWAR_ROOT "min_full"
64#define GA_AWAR_FULL_MINLEN GA_AWAR_ROOT "full_minlen"
65#define GA_AWAR_OVERHANG GA_AWAR_ROOT "overhang"
66#define GA_AWAR_THREADS GA_AWAR_ROOT "threads"
67#define GA_AWAR_QSIZE GA_AWAR_ROOT "qsize"
68#define GA_AWAR_KMER_LEN GA_AWAR_ROOT "kmer_len"
69#define GA_AWAR_KMER_MM GA_AWAR_ROOT "kmer_mm"
70#define GA_AWAR_MIN_LEN GA_AWAR_ROOT "min_len"
71#define GA_AWAR_WEIGHT GA_AWAR_ROOT "weight"
72#define GA_AWAR_INSERT GA_AWAR_ROOT "insert"
73#define GA_AWAR_LOWERCASE GA_AWAR_ROOT "lowercase"
74#define GA_AWAR_AUTOFILTER GA_AWAR_ROOT "autofilter"
75#define GA_AWAR_KMER_NOREL GA_AWAR_ROOT "kmer_norel"
76#define GA_AWAR_KMER_NOFAST GA_AWAR_ROOT "kmer_nofast"
77#define GA_AWAR_SHOW_DIST GA_AWAR_ROOT "show_dist"
78#define GA_AWAR_SHOW_DIFF GA_AWAR_ROOT "show_diff"
79#define GA_AWAR_COLOR GA_AWAR_ROOT "color"
80#define GA_AWAR_GENE_START GA_AWAR_ROOT "gene_start"
81#define GA_AWAR_GENE_END GA_AWAR_ROOT "gene_end"
82#define GA_AWAR_FS_COVER_GENE GA_AWAR_ROOT "fs_cover_gene"
83
84void create_sina_variables(AW_root *root, AW_default db1) {
85    root->awar_string(GA_AWAR_CMD, "sina", db1);
86    root->awar_int(GA_AWAR_TGT, 2, db1);
87    root->awar_int(AWAR_PT_SERVER, 0, db1);
88    root->awar_string(GA_AWAR_SAI, "none", db1);
89    root->awar_int(GA_AWAR_PROTECTION, 0, db1);
90    root->awar_string(GA_AWAR_LOGLEVEL, "3", db1); // @@@ change to int?
91    root->awar_int(GA_AWAR_TURN_CHECK, 1, db1);
92    root->awar_int(GA_AWAR_REALIGN, 1, db1);
93    root->awar_int(GA_AWAR_PTLOAD, 0, db1);
94    root->awar_int(GA_AWAR_COPYMARKREF, 0, db1);
95    root->awar_float(GA_AWAR_GAP_PEN, 5.0, db1);
96    root->awar_float(GA_AWAR_GAP_EXT, 2.0, db1);
97    root->awar_float(GA_AWAR_MATCH_SCORE, 2.0, db1);
98    root->awar_float(GA_AWAR_MISMATCH_SCORE, -1.0, db1);
99    root->awar_int(GA_AWAR_ADVANCED, 0, db1);
100    root->awar_int(GA_AWAR_FS_MIN, 40, db1);
101    root->awar_int(GA_AWAR_FS_MAX, 40, db1);
102    root->awar_float(GA_AWAR_FS_MSC, .7, db1);
103    root->awar_int(GA_AWAR_MIN_FULL, 1, db1);
104    root->awar_int(GA_AWAR_FULL_MINLEN, 1400, db1);
105    root->awar_string(GA_AWAR_OVERHANG, "attach", db1);
106    root->awar_int(GA_AWAR_THREADS, 1, db1);
107    root->awar_int(GA_AWAR_QSIZE, 1, db1);
108    root->awar_int(GA_AWAR_KMER_LEN, 10, db1);
109    root->awar_int(GA_AWAR_KMER_MM, 0, db1);
110    root->awar_int(GA_AWAR_MIN_LEN, 150, db1);
111    root->awar_float(GA_AWAR_WEIGHT, 1, db1);
112    root->awar_string(GA_AWAR_INSERT, "shift", db1);
113    root->awar_string(GA_AWAR_LOWERCASE, "none", db1);
114    root->awar_string(GA_AWAR_AUTOFILTER, "none", db1);
115    root->awar_int(GA_AWAR_KMER_NOREL, 0, db1);
116    root->awar_int(GA_AWAR_KMER_NOFAST, 0, db1);
117    root->awar_int(GA_AWAR_SHOW_DIST, 0, db1);
118    root->awar_int(GA_AWAR_SHOW_DIFF, 0, db1);
119    root->awar_int(GA_AWAR_COLOR, 1, db1);
120    root->awar_int(GA_AWAR_GENE_START, 0, db1);
121    root->awar_int(GA_AWAR_GENE_END, 0, db1);
122    root->awar_int(GA_AWAR_FS_COVER_GENE, 1, db1);
123}
124
125AW_active sina_mask(AW_root *root) {
126    const char *sinaName    = root->awar(GA_AWAR_CMD)->read_char_pntr();
127    char       *sina        = GB_executable(sinaName);
128    const char *fail_reason = 0;
129
130    if (sina) {
131        int exitstatus = system(GBS_global_string("%s --has-cli-vers ARB5.99", sina));
132        exitstatus     = WEXITSTATUS(exitstatus);
133
134        switch (exitstatus) {
135        case EXIT_SUCCESS:
136            break;
137
138        case EXIT_FAILURE:
139            fail_reason = "Incompatible SINA and ARB versions";
140            break;
141
142        case 127:                                   // libs missing
143        default:                                    // unexpected
144            fail_reason = GBS_global_string("Could execute SINA binary '%s' (exitstatus was %i)",
145                                            sinaName, exitstatus);
146            break;
147        }
148        free(sina);
149    }
150    else {
151        fail_reason = GBS_global_string("%s not found", sinaName);
152    }
153
154    if (fail_reason) {
155        fprintf(stderr,
156                "Note: SINA (SILVA Aligner) disabled (Reason: %s)\n"
157                "      Visit http://www.ribocon.com/sina/ for more information.\n",
158                fail_reason);
159    }
160
161    return fail_reason ? AWM_DISABLED : AWM_ALL;
162}
163
164inline const char *stream2static(const std::stringstream& str) {
165    return GBS_global_string("%s", str.str().c_str());
166}
167
168static void sina_start(AW_window *window, AW_CL cl_AlignDataAccess) {
169    cerr << "Starting SINA..." << endl;
170
171    // make string from pt server selection
172    AW_root *root = window->get_root();
173    int      pt   = root->awar(AWAR_PT_SERVER)->read_int();
174
175    std::stringstream ptnam;
176    ptnam << "ARB_PT_SERVER" << pt;
177
178    const char *pt_server = GBS_read_arb_tcp(ptnam.str().c_str());
179    GB_ERROR    gb_error  = NULL;
180
181    if (!pt_server) gb_error = "Unable to find definition for chosen PT-server";
182    else {
183        const char *pt_db = pt_server + strlen(pt_server) + 1;
184        pt_db += strlen(pt_db)+3;
185
186        // start pt server if necessary
187        gb_error = arb_look_and_start_server(AISC_MAGIC_NUMBER, ptnam.str().c_str());
188        if (gb_error) {
189            std::stringstream tmp;
190            tmp << "Cannot contact PT server. Aborting" << endl
191                << " ID: \"" << tmp.str().c_str()
192                << "\" PORT: \"" << pt_server
193                << "\" DB: \"" << pt_db  << endl
194                << "\" GBERROR: \"" << gb_error << "\"" << endl;
195            gb_error = stream2static(tmp);
196        }
197        else {
198            // create temporary file
199            char* tmpfile;
200            FILE* tmpfile_F;
201            {
202                char* tmpfile_tpl = GB_unique_filename("sina_select", "tmp");
203                tmpfile_F         = GB_fopen_tempfile(tmpfile_tpl, "w", &tmpfile);
204                free(tmpfile_tpl);
205            }
206
207            if (!tmpfile_F) {
208                std::stringstream tmp;
209                tmp << "Error: Unable to create temporary file \"" << tmpfile << "\"!";
210                gb_error = stream2static(tmp);
211            }
212            else {
213                GB_remove_on_exit(tmpfile);
214
215                std::vector<std::string> spec_names;
216                switch (root->awar(GA_AWAR_TGT)->read_int()) {
217                    case 0: { // current
218                        char *spec_name = root->awar(AWAR_SPECIES_NAME)->read_string();
219                        if (spec_name) {
220                            fwrite(spec_name, strlen(spec_name), 1, tmpfile_F);
221                            fwrite("\n", 1, 1, tmpfile_F);
222                        }
223                        else {
224                            gb_error = "Unable to get name of currently active species";
225                        }
226                        free(spec_name);
227                        break;
228                    }
229                    case 1: { // selected
230                        const AlignDataAccess *data_access = (const AlignDataAccess *)cl_AlignDataAccess;
231                        GB_begin_transaction(GLOBAL_gb_main);
232                        int num_selected = 0;
233                        for (GBDATA *gb_spec = data_access->get_first_selected_species(&num_selected);
234                             gb_spec;
235                             gb_spec = data_access->get_next_selected_species())
236                        {
237                            GBDATA *gbd_name = GB_find(gb_spec, "name", SEARCH_CHILD);
238                            if (gbd_name) {
239                                const char *str = GB_read_char_pntr(gbd_name);
240                                fwrite(str, strlen(str), 1, tmpfile_F);
241                                fwrite("\n", 1, 1, tmpfile_F);
242                            }
243                        }
244                        GB_commit_transaction(GLOBAL_gb_main);
245                        break;
246                    }
247                    case 2: { // marked
248                        GB_begin_transaction(GLOBAL_gb_main);
249                        for (GBDATA *gb_spec = GBT_first_marked_species(GLOBAL_gb_main);
250                             gb_spec; gb_spec = GBT_next_marked_species(gb_spec)) {
251                            GBDATA *gbd_name = GB_find(gb_spec, "name", SEARCH_CHILD);
252                            if (gbd_name) {
253                                const char *str = GB_read_char_pntr(gbd_name);
254                                fwrite(str, strlen(str), 1, tmpfile_F);
255                                fwrite("\n", 1, 1, tmpfile_F);
256                            }
257                        }
258                        GB_commit_transaction(GLOBAL_gb_main);
259                        break;
260                    }
261                }
262                fclose(tmpfile_F);
263
264                if (!gb_error) {
265                    // build command line
266                    GBS_strstruct *cl = GBS_stropen(2000);
267
268                    GBS_strcat(cl, root->awar(GA_AWAR_CMD)->read_char_pntr());
269                    GBS_strcat(cl, " -i :");
270                    GBS_strcat(cl, " --ptdb ");        GBS_strcat(cl,   root->awar(GA_AWAR_PTLOAD)->read_int() ? pt_db : ":");
271                    GBS_strcat(cl, " --ptport ");      GBS_strcat(cl,   pt_server);
272                    GBS_strcat(cl, " --turn ");        GBS_strcat(cl,   root->awar(GA_AWAR_TURN_CHECK)->read_int() ? "all" : "none");
273                    GBS_strcat(cl, " --overhang ");    GBS_strcat(cl,   root->awar(GA_AWAR_OVERHANG)->read_char_pntr());
274                    GBS_strcat(cl, " --filter ");      GBS_strcat(cl,   root->awar(GA_AWAR_SAI)->read_char_pntr());
275                    GBS_strcat(cl, " --fs-min ");      GBS_intcat(cl,   root->awar(GA_AWAR_FS_MIN)->read_int());
276                    GBS_strcat(cl, " --fs-msc ");      GBS_floatcat(cl, root->awar(GA_AWAR_FS_MSC)->read_float());
277                    GBS_strcat(cl, " --fs-max ");      GBS_intcat(cl,   root->awar(GA_AWAR_FS_MAX)->read_int());
278                    GBS_strcat(cl, " --fs-req 1");
279                    GBS_strcat(cl, " --fs-req-full "); GBS_intcat(cl,   root->awar(GA_AWAR_MIN_FULL)->read_int());
280                    GBS_strcat(cl, " --fs-full-len "); GBS_intcat(cl,   root->awar(GA_AWAR_FULL_MINLEN)->read_int());
281                    GBS_strcat(cl, " --fs-kmer-len "); GBS_intcat(cl,   root->awar(GA_AWAR_KMER_LEN)->read_int());
282                    GBS_strcat(cl, " --fs-kmer-mm ");  GBS_intcat(cl,   root->awar(GA_AWAR_KMER_MM)->read_int());
283                    GBS_strcat(cl, " --fs-min-len ");  GBS_intcat(cl,   root->awar(GA_AWAR_MIN_LEN)->read_int());
284                    GBS_strcat(cl, " --fs-weight ");   GBS_intcat(cl,   root->awar(GA_AWAR_WEIGHT)->read_float());
285                    GBS_strcat(cl, " --pen-gap ");     GBS_floatcat(cl, root->awar(GA_AWAR_GAP_PEN)->read_float());
286                    GBS_strcat(cl, " --pen-gapext ");  GBS_floatcat(cl, root->awar(GA_AWAR_GAP_EXT)->read_float());
287                    GBS_strcat(cl, " --match-score "); GBS_floatcat(cl, root->awar(GA_AWAR_MATCH_SCORE)->read_float());
288                    GBS_strcat(cl, " --mismatch-score "); GBS_floatcat(cl, root->awar(GA_AWAR_MISMATCH_SCORE)->read_float());
289                    GBS_strcat(cl, " --prot-level ");  GBS_intcat(cl,   root->awar(GA_AWAR_PROTECTION)->read_int());
290                    GBS_strcat(cl, " --select-file "); GBS_strcat(cl,   tmpfile);
291                    GBS_strcat(cl, " --insertion ");   GBS_strcat(cl,   root->awar(GA_AWAR_INSERT)->read_char_pntr());
292                    GBS_strcat(cl, " --lowercase ");   GBS_strcat(cl,   root->awar(GA_AWAR_LOWERCASE)->read_char_pntr());
293                    GBS_strcat(cl, " --auto-filter-field "); GBS_strcat(cl, root->awar(GA_AWAR_AUTOFILTER)->read_char_pntr());
294                    GBS_strcat(cl, " --gene-start ");  GBS_intcat(cl,   root->awar(GA_AWAR_GENE_START)->read_int());
295                    GBS_strcat(cl, " --gene-end ");    GBS_intcat(cl,   root->awar(GA_AWAR_GENE_END)->read_int());
296                    GBS_strcat(cl, " --fs-cover-gene ");GBS_intcat(cl,   root->awar(GA_AWAR_FS_COVER_GENE)->read_int());
297
298
299                    if (root->awar(GA_AWAR_KMER_NOREL)->read_int()) GBS_strcat(cl, " --fs-kmer-norel ");
300                    if (root->awar(GA_AWAR_KMER_NOFAST)->read_int()) GBS_strcat(cl, " --fs-kmer-no-fast ");
301                    if (root->awar(GA_AWAR_SHOW_DIST)->read_int()) GBS_strcat(cl, " --show-dist ");
302                    if (root->awar(GA_AWAR_SHOW_DIFF)->read_int()) GBS_strcat(cl, " --show-diff ");
303                    if (root->awar(GA_AWAR_COLOR)->read_int())     GBS_strcat(cl, " --color");
304                    if (root->awar(GA_AWAR_REALIGN)->read_int())     GBS_strcat(cl, " --realign");
305
306                    gb_error = GB_xcmd(GBS_mempntr(cl), true, false);
307                    GBS_strforget(cl);
308                }
309
310                if (!gb_error) aw_message("SINA finished aligning.");
311            }
312            free(tmpfile);
313        }
314    }
315   
316    aw_message_if(gb_error);
317}
318
319
320
321static char* filter_sai(GBDATA *gb_extended, AW_CL) {
322    char   *result = 0;
323    GBDATA *gbd    = GB_search(gb_extended, "ali_16s/_TYPE", GB_FIND);
324    if (gbd) {
325        const char* type = GB_read_char_pntr(gbd);
326        if (type && strncmp("PV", type, 2) == 0) {
327            gbd    = GB_find(gb_extended, "name", SEARCH_CHILD);
328            result = GB_read_string(gbd);
329        }
330    }
331    return result;
332}
333
334static AW_window_simple* new_sina_simple(AW_root *root, AW_CL cl_AlignDataAccess, bool adv) {
335    int closex, closey, startx, starty, winx, winy;
336    const int hgap = 10;
337    AW_window_simple *aws = new AW_window_simple;
338
339    aws->init(root, "SINA", "SINA (SILVA Incremental Aligner)");
340
341    aws->button_length(12);
342    aws->at(10, 10);
343    aws->auto_space(5, 5);
344
345    aws->callback(AW_POPDOWN);
346    aws->create_button("CLOSE", "CLOSE", "O");
347    aws->get_at_position(&closex, &closey);
348
349    aws->at_shift(10, 0);
350    aws->callback(show_sina_window, cl_AlignDataAccess, 0);
351    aws->label_length(0);
352    aws->label("Show advanced options");
353    aws->create_toggle(GA_AWAR_ADVANCED);
354
355    aws->at_newline();
356    aws->at_shift(0, hgap);
357    aws->label_length(15);
358    aws->create_toggle_field(GA_AWAR_TGT, "Align what?", "A");
359    aws->insert_toggle("Current Species:", "C", 0);
360    aws->insert_toggle("Selected Species", "S", 1);
361    aws->insert_default_toggle("Marked Species", "M", 2);
362    aws->update_toggle_field();
363
364    aws->at_shift(0, 3);
365    aws->create_input_field(AWAR_SPECIES_NAME, 20);
366
367    aws->at_newline();
368    aws->at_shift(0, hgap);
369    aws->button_length(24);
370    aws->label("PT Server:");
371    awt_create_selection_list_on_pt_servers(aws, AWAR_PT_SERVER, true);
372
373    aws->at_newline();
374    aws->label_length(0);
375    aws->create_option_menu(GA_AWAR_OVERHANG, "Overhang placement");
376    aws->insert_option("keep attached", 0, "attach");
377    aws->insert_option("move to edge", 0, "edge");
378    aws->insert_option("remove", 0, "remove");
379    aws->update_option_menu();
380
381    aws->at_newline();
382    aws->create_option_menu(GA_AWAR_INSERT, "Handling of unmappable insertions", "I");
383    aws->insert_option("Shift surrounding bases", 0, "shift");
384    aws->insert_option("Forbid during DP alignment", 0, "forbid");
385    aws->insert_option("Delete bases", 0, "remove");
386    aws->update_option_menu();
387
388    aws->at_newline();
389    aws->create_option_menu(GA_AWAR_LOWERCASE, "Character Case","C");
390    aws->insert_option("Do not modify", 0, "original");
391    aws->insert_option("Show unaligned bases as lower case", 0, "unaligned");
392    aws->insert_option("Uppercase all", 0, "none");
393    aws->update_option_menu();
394
395    aws->at_newline();
396    aws->label("Family conservation weight (0-1)");
397    aws->create_input_field(GA_AWAR_WEIGHT, 3);
398
399    aws->at_newline();
400    aws->label("Size of full-length sequences");
401    aws->create_input_field(GA_AWAR_FULL_MINLEN, 5);
402
403    if (adv) {
404        aws->at_newline();
405        aws->at_shift(0, hgap);
406
407        aws->at_newline();
408
409        aws->label("Pos. Var.:");
410        awt_create_SAI_selection_button(GLOBAL_gb_main, aws, GA_AWAR_SAI, filter_sai, 0);
411
412        aws->at_newline();
413        aws->label("Field used for automatic filter selection");
414        aws->create_input_field(GA_AWAR_AUTOFILTER, 20);
415
416        aws->label("Turn check");
417        aws->create_toggle(GA_AWAR_TURN_CHECK);
418
419        aws->at_newline();
420        aws->label("Realign");
421        aws->create_toggle(GA_AWAR_REALIGN);
422
423        aws->at_newline();
424        aws->label("Load reference sequences from PT-Server");
425        aws->create_toggle(GA_AWAR_PTLOAD);
426
427        /*
428        aws->at_newline();
429        aws->label("(Copy and) mark sequences used as reference");
430        aws->create_toggle(GA_AWAR_COPYMARKREF);
431        */
432
433        aws->at_newline();
434        aws->at_shift(0, hgap);
435        aws->label_length(0);
436
437        aws->label("Gap insertion/extension penalties");
438        aws->create_input_field(GA_AWAR_GAP_PEN, 5);
439        aws->create_input_field(GA_AWAR_GAP_EXT, 5);
440
441        aws->at_newline();
442        aws->label("Match score");
443        aws->create_input_field(GA_AWAR_MATCH_SCORE, 3);
444        aws->label("Mismatch score");
445        aws->create_input_field(GA_AWAR_MISMATCH_SCORE, 3);
446
447        aws->at_newline();
448        aws->label("Family search min/min_score/max");
449        aws->create_input_field(GA_AWAR_FS_MIN, 3);
450        aws->create_input_field(GA_AWAR_FS_MSC, 3);
451        aws->create_input_field(GA_AWAR_FS_MAX, 3);
452
453        aws->at_newline();
454        aws->label("Minimal number of full length sequences");
455        aws->create_input_field(GA_AWAR_MIN_FULL, 3);
456
457        aws->at_newline();
458        aws->label("Family search oligo length / mismatches");
459        aws->create_input_field(GA_AWAR_KMER_LEN, 3);
460        aws->create_input_field(GA_AWAR_KMER_MM, 3);
461
462        aws->at_newline();
463        aws->label("Minimal reference sequence length");
464        aws->create_input_field(GA_AWAR_MIN_LEN, 5);
465
466        aws->at_newline();
467        aws->label("Alignment bounds: start");
468        aws->create_input_field(GA_AWAR_GENE_START, 6);
469        aws->label("end");
470        aws->create_input_field(GA_AWAR_GENE_END, 6);
471
472        aws->at_newline();
473        aws->label("Number of references required to touch bounds");
474        aws->create_input_field(GA_AWAR_FS_COVER_GENE, 3);
475
476        aws->at_newline();
477        aws->label("Disable fast search");
478        aws->create_toggle(GA_AWAR_KMER_NOFAST);
479
480        aws->at_newline();
481        aws->label("Score search results by absolute oligo match count");
482        aws->create_toggle(GA_AWAR_KMER_NOREL);
483
484        aws->at_newline();
485        aws->label("SINA command");
486        aws->create_input_field(GA_AWAR_CMD, 20);
487
488        aws->at_shift(0, hgap);
489    }
490
491    aws->at_newline();
492    aws->at_shift(0, hgap);
493
494    aws->label_length(17);
495    aws->create_option_menu(GA_AWAR_PROTECTION, "Protection Level", "P");
496    aws->insert_option("0", 0, 0);
497    aws->insert_option("1", 0, 1);
498    aws->insert_option("2", 0, 2);
499    aws->insert_option("3", 0, 3);
500    aws->insert_option("4", 0, 4);
501    aws->insert_option("5", 0, 5);
502    aws->insert_option("6", 0, 6);
503    aws->update_option_menu();
504
505    /*
506    aws->at_newline();
507    aws->create_option_menu(GA_AWAR_LOGLEVEL, "Logging level", "L");
508    aws->insert_option("silent", 0, "1");
509    aws->insert_option("quiet", 0, "2");
510    aws->insert_default_option("normal", 0, "3");
511    aws->insert_option("verbose", 0, "4");
512    aws->insert_option("debug", 0, "5");
513    aws->insert_option("debug more", 0, "6");
514    aws->update_option_menu();
515    */
516
517    aws->at_newline();
518    aws->label("Show changed sections of alignment");
519    aws->create_toggle(GA_AWAR_SHOW_DIFF);
520    aws->label("color bases");
521    aws->create_toggle(GA_AWAR_COLOR);
522
523    aws->at_newline();
524    aws->label("Show statistics");
525    aws->create_toggle(GA_AWAR_SHOW_DIST);
526
527    aws->get_window_size(winx, winy);
528    aws->get_at_position(&startx, &starty);
529
530    aws->button_length(12);
531
532    aws->at(winx-closex+5, closey);
533    aws->callback(AW_POPUP_HELP, (AW_CL) "sina_main.hlp");
534    aws->create_button("HELP", "HELP");
535
536    aws->at(winx-closex+5, starty);
537    aws->callback(sina_start, cl_AlignDataAccess);
538    aws->highlight();
539    aws->create_button("Start", "Start", "S");
540
541    return aws;
542}
543
544void show_sina_window(AW_window *aw, AW_CL cl_AlignDataAccess, AW_CL) {
545    static AW_window_simple *ga_aws = 0;
546    static AW_window_simple *ga_aws_adv = 0;
547
548    AW_root *root = aw->get_root();
549    if (root->awar(GA_AWAR_ADVANCED)->read_int()) {
550        if (!ga_aws_adv) ga_aws_adv = new_sina_simple(root, cl_AlignDataAccess, true);
551        ga_aws_adv->show();
552        if (ga_aws) ga_aws->hide();
553    }
554    else {
555        if (!ga_aws) ga_aws = new_sina_simple(root, cl_AlignDataAccess, false);
556        ga_aws->show();
557        if (ga_aws_adv) ga_aws_adv->hide();
558    }
559}
Note: See TracBrowser for help on using the browser.