source: tags/arb-6.0.5/STAT/ST_window.cxx

Last change on this file was 12267, checked in by westram, 10 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.6 KB
Line 
1// ================================================================ //
2//                                                                  //
3//   File      : ST_window.cxx                                      //
4//   Purpose   :                                                    //
5//                                                                  //
6//   Institute of Microbiology (Technical University Munich)        //
7//   http://www.arb-home.de/                                        //
8//                                                                  //
9// ================================================================ //
10
11#include "st_ml.hxx"
12#include "st_quality.hxx"
13
14#include <gui_aliview.hxx>
15#include <ColumnStat.hxx>
16
17#include <aw_awars.hxx>
18#include <aw_root.hxx>
19#include <aw_msg.hxx>
20#include <item_sel_list.h>
21#include <awt_filter.hxx>
22
23#define ST_ML_AWAR "tmp/st_ml/"
24
25#define ST_ML_AWAR_COLSTAT_PREFIX ST_ML_AWAR "colstat/"
26#define ST_ML_AWAR_COLSTAT_NAME   ST_ML_AWAR_COLSTAT_PREFIX "name"
27
28#define ST_ML_AWAR_FILTER_PREFIX    ST_ML_AWAR "filter/"
29#define ST_ML_AWAR_FILTER_ALIGNMENT ST_ML_AWAR_FILTER_PREFIX "alignment"
30#define ST_ML_AWAR_FILTER_NAME      ST_ML_AWAR_FILTER_PREFIX "name"
31#define ST_ML_AWAR_FILTER_FILTER    ST_ML_AWAR_FILTER_PREFIX "filter"
32#define ST_ML_AWAR_FILTER_SIMPLIFY  ST_ML_AWAR_FILTER_PREFIX "simplify"
33
34#define ST_ML_AWAR_CQ_BUCKET_SIZE  ST_ML_AWAR "bucket_size"
35#define ST_ML_AWAR_CQ_MARKED_ONLY  ST_ML_AWAR "marked_only"
36#define ST_ML_AWAR_CQ_DEST_FIELD   ST_ML_AWAR "dest_field"
37#define ST_ML_AWAR_CQ_REPORT       ST_ML_AWAR "report"
38#define ST_ML_AWAR_CQ_KEEP_REPORTS ST_ML_AWAR "keep_reports"
39
40static void st_ok_cb(AW_window *aww, ST_ML *st_ml) {
41    AW_root *root           = aww->get_root();
42    char    *alignment_name = root->awar_string(AWAR_DEFAULT_ALIGNMENT, "-none-", st_ml->get_gb_main())->read_string();
43    char    *tree_name      = root->awar_string(AWAR_TREE, "", st_ml->get_gb_main())->read_string();
44    int      marked_only    = root->awar_int(ST_ML_AWAR_CQ_MARKED_ONLY)->read_int();
45
46    GB_ERROR error = GB_push_transaction(st_ml->get_gb_main());
47    if (!error) {
48        error = st_ml->calc_st_ml(tree_name, alignment_name, NULL, marked_only, st_ml->get_column_statistic(), NULL);
49        if (!error) st_ml->do_postcalc_callback();
50    }
51
52    error = GB_end_transaction(st_ml->get_gb_main(), error);
53    aww->hide_or_notify(error);
54
55    free(tree_name);
56    free(alignment_name);
57}
58
59void STAT_set_postcalc_callback(ST_ML *st_ml, AW_CB0 postcalc_cb, AW_window *cb_win) {
60    st_ml->set_postcalc_callback(postcalc_cb, cb_win);
61}
62
63AW_window *STAT_create_main_window(AW_root *root, ST_ML *st_ml) {
64    AW_window_simple *aws = new AW_window_simple;
65    aws->init(root, "COLUMN_STATISTIC", "COLUMN STATISTIC");
66
67    aws->load_xfig("stat_main.fig");
68
69    aws->callback(AW_POPDOWN);
70    aws->at("close");
71    aws->create_button("CLOSE", "CLOSE", "C");
72
73    aws->callback(makeHelpCallback("st_ml.hlp"));
74    aws->at("help");
75    aws->create_button("HELP", "HELP", "H");
76
77    root->awar_string(ST_ML_AWAR_COLSTAT_NAME, "");
78    root->awar_int(ST_ML_AWAR_CQ_MARKED_ONLY, 1);
79
80    AW_awar *awar_default_alignment = root->awar_string(AWAR_DEFAULT_ALIGNMENT, "-none-", st_ml->get_gb_main());
81    root->awar_string(AWAR_TREE, "", st_ml->get_gb_main());
82
83    st_ml->create_column_statistic(root, ST_ML_AWAR_COLSTAT_NAME, awar_default_alignment);
84
85    aws->at("GO");
86    aws->callback(makeWindowCallback(st_ok_cb, st_ml));
87    aws->create_button("GO", "GO", "G");
88
89    aws->at("awt_csp");
90    aws->callback(makeCreateWindowCallback(COLSTAT_create_selection_window, st_ml->get_column_statistic()));
91    aws->button_length(20);
92    aws->create_button("SELECT_CSP", ST_ML_AWAR_COLSTAT_NAME);
93
94    aws->at("marked");
95    aws->create_toggle_field(ST_ML_AWAR_CQ_MARKED_ONLY, "Calculate for ..", "");
96    aws->insert_toggle("All species", "A", 0);
97    aws->insert_toggle("Marked species", "M", 1);
98    aws->update_toggle_field();
99
100    return aws;
101}
102
103ST_ML *STAT_create_ST_ML(GBDATA *gb_main) {
104    return new ST_ML(gb_main);
105}
106
107ST_ML_Color *STAT_get_color_string(ST_ML *st_ml, char *species_name, AP_tree *node, int start_ali_pos, int end_ali_pos) {
108    return st_ml->get_color_string(species_name, node, start_ali_pos, end_ali_pos);
109}
110
111bool STAT_update_ml_likelihood(ST_ML *st_ml, char *result[4], int& latest_update, const char *species_name, AP_tree *node) {
112    //! @see ST_ML::update_ml_likelihood()
113    return st_ml->update_ml_likelihood(result, latest_update, species_name, node);
114}
115
116AP_tree *STAT_find_node_by_name(ST_ML *st_ml, const char *species_name) {
117    return st_ml->find_node_by_name(species_name);
118}
119
120struct st_check_cb_data : public Noncopyable {
121    GBDATA         *gb_main;
122    ColumnStat     *colstat;
123    WeightedFilter *filter;
124
125    st_check_cb_data(GBDATA *gb_main_, AW_root *root, const char *columnStatAwarName, const char *filterAwarName, AW_awar *awar_default_alignment) {
126        gb_main = gb_main_;
127        colstat = new ColumnStat(gb_main, root, columnStatAwarName, awar_default_alignment);
128        filter  = new WeightedFilter(gb_main, root, filterAwarName, NULL, awar_default_alignment);
129    }
130};
131
132static void st_check_cb(AW_window *aww, st_check_cb_data *data) {
133    GB_transaction ta(data->gb_main);
134
135    AW_root *r = aww->get_root();
136
137    char *alignment_name = r->awar(ST_ML_AWAR_FILTER_ALIGNMENT)->read_string();
138    int   bucket_size    = r->awar(ST_ML_AWAR_CQ_BUCKET_SIZE)->read_int();
139    char *tree_name      = r->awar(AWAR_TREE)->read_string();
140    char *dest_field     = r->awar(ST_ML_AWAR_CQ_DEST_FIELD)->read_string();
141    int   marked_only    = r->awar(ST_ML_AWAR_CQ_MARKED_ONLY)->read_int();
142
143    st_report_enum report = (st_report_enum) r->awar(ST_ML_AWAR_CQ_REPORT)->read_int();
144
145    GB_ERROR error = st_ml_check_sequence_quality(data->gb_main, tree_name, alignment_name, data->colstat, data->filter, bucket_size, marked_only, report, dest_field);
146   
147    free(dest_field);
148    free(alignment_name);
149    free(tree_name);
150
151    error = ta.close(error);
152    if (error) aw_message(error);
153}
154
155static void STAT_create_awars(AW_root *root, GBDATA *gb_main) {
156    root->awar_string(AWAR_DEFAULT_ALIGNMENT, "-none-",    gb_main);
157    root->awar_string(AWAR_TREE,              "", gb_main);
158
159    root->awar_string(ST_ML_AWAR_COLSTAT_NAME, "none");
160
161    root->awar_string(ST_ML_AWAR_FILTER_ALIGNMENT, "none");
162    root->awar_string(ST_ML_AWAR_FILTER_NAME,      "none");
163    root->awar_string(ST_ML_AWAR_FILTER_FILTER,    "");
164    root->awar_int   (ST_ML_AWAR_FILTER_SIMPLIFY,  0);
165
166    root->awar_int   (ST_ML_AWAR_CQ_BUCKET_SIZE,  300);
167    root->awar_int   (ST_ML_AWAR_CQ_MARKED_ONLY,  0);
168    root->awar_string(ST_ML_AWAR_CQ_DEST_FIELD,   "tmp");
169    root->awar_int   (ST_ML_AWAR_CQ_REPORT,       0);
170    root->awar_int   (ST_ML_AWAR_CQ_KEEP_REPORTS, 0);
171
172    root->awar_string(ST_ML_AWAR_FILTER_ALIGNMENT)->map(AWAR_DEFAULT_ALIGNMENT);
173}
174
175static void st_remove_entries(AW_window */*aww*/) {
176    // @@@ shall remove created all entries (from current alignment)
177}
178
179AW_window *STAT_create_chimera_check_window(AW_root *root, GBDATA *gb_main) {
180    static AW_window_simple *aws = 0;
181    if (!aws) {
182        aws = new AW_window_simple;
183        aws->init(root, "CHIMERA_CHECK", "Chimera Check of marked sequences");
184        aws->load_xfig("chimera_check.fig");
185
186        STAT_create_awars(root, gb_main);
187
188        aws->callback(AW_POPDOWN);
189        aws->at("close");
190        aws->create_button("CLOSE", "CLOSE", "C");
191
192        aws->callback(makeHelpCallback("chimera_check.hlp"));
193        aws->at("help");
194        aws->create_button("HELP", "HELP", "H");
195
196        AW_awar *awar_default_alignment = root->awar_string(AWAR_DEFAULT_ALIGNMENT, "-none-", gb_main);
197        st_check_cb_data *cb_data = new st_check_cb_data(gb_main, root, ST_ML_AWAR_COLSTAT_NAME, ST_ML_AWAR_FILTER_NAME, awar_default_alignment); // bound to cb (not freed)
198
199        aws->at("which");
200        {
201            aws->create_option_menu(ST_ML_AWAR_CQ_MARKED_ONLY, true);
202            aws->insert_option("All in tree", "t", 0);
203            aws->insert_option("Only marked and in tree", "m", 1);
204            aws->update_option_menu();
205        }
206
207        aws->at("colstat");
208        aws->callback(makeCreateWindowCallback(COLSTAT_create_selection_window, cb_data->colstat));
209        aws->create_button("SELECT_CSP", ST_ML_AWAR_COLSTAT_NAME);
210
211       
212        aws->at("filter");
213        aws->callback(makeCreateWindowCallback(awt_create_select_filter_win, cb_data->filter->get_adfiltercbstruct()));
214        aws->create_button("SELECT_FILTER", ST_ML_AWAR_FILTER_NAME);
215       
216        aws->at("sb");
217        aws->create_input_field(ST_ML_AWAR_CQ_BUCKET_SIZE);
218
219        create_selection_list_on_itemfields(gb_main, aws, ST_ML_AWAR_CQ_DEST_FIELD, true, 1 << GB_STRING, "dest", 0, SPECIES_get_selector(), 20, 10, SF_STANDARD, "SELECT_REPORT_FIELD");
220
221        aws->at("report");
222        {
223            aws->create_option_menu(ST_ML_AWAR_CQ_REPORT, true);
224            aws->insert_option("No", "N", 0);
225            aws->insert_option("to temporary entry", "t", 1);
226            aws->insert_option("to permanent entry", "p", 2);
227            aws->update_option_menu();
228        }
229
230        {                                           // @@@ not implemented yet
231            aws->sens_mask(AWM_DISABLED);
232
233            aws->at("keep");
234            aws->create_toggle(ST_ML_AWAR_CQ_KEEP_REPORTS);
235
236            aws->at("del");
237            aws->callback(st_remove_entries);
238            aws->create_button("DEL_ENTRIES", "Remove them now!", "R");
239
240            aws->sens_mask(AWM_ALL);
241        }
242
243        aws->at("GO");
244        aws->callback(makeWindowCallback(st_check_cb, cb_data));
245        aws->create_button("GO", "GO", "G");
246    }
247    return aws;
248}
Note: See TracBrowser for help on using the repository browser.