source: branches/profile/EDIT4/ED4_naligner.cxx

Last change on this file was 12757, checked in by westram, 5 years ago
  • unify selectionlist creator names
  • awt_create_selection_list_on_pt_servers
    • remove param 'popup', instead split into two function (button and list) as done for SAIs
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.7 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : ED4_naligner.cxx                                  //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#include "ed4_naligner.hxx"
12
13#include <aw_window.hxx>
14#include <aw_awars.hxx>
15#include <aw_root.hxx>
16#include <awt_sel_boxes.hxx>
17#include <arbdbt.h>
18#include <arb_strbuf.h>
19
20#include <iostream>
21
22extern GBDATA *GLOBAL_gb_main;
23
24static void aed_start_naligning(AW_window *aw) {
25    AW_root *root = aw->get_root();
26    char    *buffer;
27    int      i, j;
28
29    GBS_strstruct *strstruct = GBS_stropen(1000);
30    GBS_strcat(strstruct, "xterm -sl 1000 -sb -e sh -c 'LD_LIBRARY_PATH=\"");
31    GBS_strcat(strstruct, GB_getenv("LD_LIBRARY_PATH"));
32    GBS_strcat(strstruct, "\";export LD_LIBRARY_PATH;for i in ");
33    if (root->awar("naligner/what")->read_int()) {
34        GB_transaction ta(GLOBAL_gb_main);
35        for (GBDATA *gb_species = GBT_first_marked_species(GLOBAL_gb_main);
36             gb_species;
37             gb_species = GBT_next_marked_species(gb_species))
38        {
39            GBS_chrcat(strstruct, '\"');
40            GBS_strcat(strstruct, GBT_read_name(gb_species));
41            GBS_strcat(strstruct, "\" ");
42        }
43    }
44    else {
45        char *species_name = root->awar(AWAR_SPECIES_NAME)->read_string();
46        GBS_strcat(strstruct, "\"");
47        GBS_strcat(strstruct, species_name);
48        GBS_strcat(strstruct, "\" ");
49        delete species_name;
50    }
51
52
53    GBS_strcat(strstruct, "; do arb_naligner");
54
55
56    if (root->awar("naligner/against")->read_int()) {
57        GBS_strcat(strstruct, " -PARB_PT_SERVER");
58        GBS_intcat(strstruct,   root->awar("naligner/pt_server")->read_int());
59    }
60    else {
61        GBS_strcat(strstruct, " \"-f");
62        char *family = root->awar("naligner/sagainst")->read_string();
63        GBS_strcat(strstruct, family);
64        delete family;
65        GBS_strcat(strstruct, "\"");
66    }
67    GBS_strcat(strstruct, " \"-s$i\" ");
68
69    if (root->awar("naligner/mark_profile")->read_int()) GBS_strcat(strstruct, " -mf");
70    if (root->awar("naligner/unmark_sequence")->read_int()) GBS_strcat(strstruct, " -us");
71
72    GBS_strcat(strstruct, " -minf");    GBS_intcat(strstruct, root->awar("naligner/minf")->read_int());
73    GBS_strcat(strstruct, " -maxf");    GBS_intcat(strstruct, root->awar("naligner/maxf")->read_int());
74    GBS_strcat(strstruct, " -minw");    GBS_floatcat(strstruct, root->awar("naligner/minw")->read_float());
75    GBS_strcat(strstruct, " -maxew");   GBS_floatcat(strstruct, root->awar("naligner/maxew")->read_float());
76    GBS_strcat(strstruct, " -ib");      GBS_intcat(strstruct, root->awar("naligner/det/ib")->read_int());
77    GBS_strcat(strstruct, " -ic");      GBS_intcat(strstruct, root->awar("naligner/det/ic")->read_int());
78
79    GBS_strcat(strstruct, " -cl");      GBS_floatcat(strstruct, root->awar("naligner/det/cl")->read_float());
80
81
82
83
84    GBS_strcat(strstruct, " -cm");      GBS_floatcat(strstruct, root->awar("naligner/det/cm")->read_float());
85    GBS_strcat(strstruct, " -ch");      GBS_floatcat(strstruct, root->awar("naligner/det/ch")->read_float());
86    GBS_strcat(strstruct, " -mgf");     GBS_floatcat(strstruct, root->awar("naligner/igap_panelty")->read_float());
87    GBS_strcat(strstruct, " -mma1");
88    GBS_strcat(strstruct, " -msub");
89    for (i=0; i<5; i++) {
90        for (j=0; j<5; j++) {
91            if (i==4 || j==4) {                 // gap panelty
92                if (i==4 && j==4) {
93                    GBS_floatcat(strstruct, 0.0);
94                }
95                else {
96                    GBS_floatcat(strstruct, root->awar("naligner/gap_panelty")->read_float());
97                    GBS_chrcat(strstruct, ',');
98                }
99            }
100            else {
101                char var[100];
102                if (i<j) sprintf(var, "naligner/%c%c", "acgt-"[i], "acgt-"[j]);
103                else     sprintf(var, "naligner/%c%c", "acgt-"[j], "acgt-"[i]);
104                GBS_floatcat(strstruct, root->awar(var)->read_float());
105                if (i<4 || j<4) GBS_chrcat(strstruct, ',');
106            }
107        }
108    }
109    GBS_strcat(strstruct, " || echo \"Aligner failed\";done;");
110
111
112    GBS_strcat(strstruct, "echo press \"(return)\" to close window;read a' &");
113    buffer         = GBS_strclose(strstruct);
114    GB_ERROR error = GBK_system(buffer);
115    if (error) fputs(error, stderr);
116    free(buffer);
117}
118
119
120void create_naligner_variables(AW_root *root, AW_default db1) {
121    root->awar_int("naligner/what", 0, db1);
122
123    root->awar_int   ("naligner/against",   0,  db1);
124    root->awar_string("naligner/sagainst",  "", db1);
125    root->awar_int   ("naligner/pt_server", -1, db1);
126
127    root->awar_int("naligner/mark_profile",    1, db1);
128    root->awar_int("naligner/unmark_sequence", 0, db1);
129
130    root->awar_float("naligner/aa",           0.0, db1);
131    root->awar_float("naligner/ac",           3.0, db1);
132    root->awar_float("naligner/ag",           1.0, db1);
133    root->awar_float("naligner/at",           3.0, db1);
134    root->awar_float("naligner/cc",           0.0, db1);
135    root->awar_float("naligner/cg",           3.0, db1);
136    root->awar_float("naligner/ct",           1.0, db1);
137    root->awar_float("naligner/gg",           0.0, db1);
138    root->awar_float("naligner/gt",           3.0, db1);
139    root->awar_float("naligner/tt",           0.0, db1);
140    root->awar_float("naligner/gap_panelty",  5.0, db1);
141    root->awar_float("naligner/igap_panelty", 0.2, db1);
142    root->awar_int  ("naligner/minf",         3,   db1);
143    root->awar_int  ("naligner/maxf",         30,  db1);
144
145    root->awar_float("naligner/minw",  .7, db1);
146    root->awar_float("naligner/maxew", .2, db1);
147
148    root->awar_float("naligner/det/cl", .25, db1);
149    root->awar_float("naligner/det/cm", .5,  db1);
150    root->awar_float("naligner/det/ch", .8,  db1);
151    root->awar_int  ("naligner/det/ib", 5,   db1);
152    root->awar_int  ("naligner/det/ic", 5,   db1);
153}
154
155static AW_window *create_expert_naligner_window(AW_root *root)
156{
157    const       int     mwidth = 5;
158    AW_window_simple *aws = new AW_window_simple;
159    aws->init(root, "ALIGNER_V2_EXPERT2", "ALIGNER V2.0 EXPERT 2");
160    aws->load_xfig("ed_al_ex.fig");
161
162    aws->at("close");
163    aws->callback     ((AW_CB0)AW_POPDOWN);
164    aws->create_button("CLOSE", "CLOSE", "C");
165
166    aws->at("minw"); aws->create_input_field("naligner/minw", mwidth);
167    aws->at("maxew"); aws->create_input_field("naligner/maxew", mwidth);
168
169    aws->at("ib"); aws->create_input_field("naligner/det/ib", mwidth);
170    aws->at("ic"); aws->create_input_field("naligner/det/ic", mwidth);
171    aws->at("cl"); aws->create_input_field("naligner/det/cl", mwidth);
172    aws->at("cm"); aws->create_input_field("naligner/det/cm", mwidth);
173    aws->at("ch"); aws->create_input_field("naligner/det/ch", mwidth);
174
175    return (AW_window *)aws;
176}
177
178static AW_window *create_special_naligner_window(AW_root *root, AW_CL /*cd2*/) {
179    AW_window_simple *aws    = new AW_window_simple;
180    const       int   mwidth = 3;
181
182    aws->init(root, "ALIGNER_V2_EXPERT", "ALIGNER V2.0 EXPERT");
183    aws->load_xfig("ed_al_sp.fig");
184
185    aws->label_length(22);
186
187    aws->at("close");
188    aws->callback((AW_CB0)AW_POPDOWN);
189    aws->create_button("CLOSE", "CLOSE", "C");
190
191    aws->at("minr"); aws->create_input_field("naligner/minf", 6);
192    aws->at("maxr"); aws->create_input_field("naligner/maxf", 6);
193
194    aws->at("aa"); aws->create_input_field("naligner/aa", mwidth);
195    aws->at("ac"); aws->create_input_field("naligner/ac", mwidth);
196    aws->at("ag"); aws->create_input_field("naligner/ag", mwidth);
197    aws->at("at"); aws->create_input_field("naligner/at", mwidth);
198
199    aws->at("ca"); aws->create_input_field("naligner/ac", mwidth);
200    aws->at("cc"); aws->create_input_field("naligner/cc", mwidth);
201    aws->at("cg"); aws->create_input_field("naligner/cg", mwidth);
202    aws->at("ct"); aws->create_input_field("naligner/ct", mwidth);
203
204    aws->at("ga"); aws->create_input_field("naligner/ag", mwidth);
205    aws->at("gc"); aws->create_input_field("naligner/cg", mwidth);
206    aws->at("gg"); aws->create_input_field("naligner/gg", mwidth);
207    aws->at("gt"); aws->create_input_field("naligner/gt", mwidth);
208
209    aws->at("ta"); aws->create_input_field("naligner/at", mwidth);
210    aws->at("tc"); aws->create_input_field("naligner/ct", mwidth);
211    aws->at("tg"); aws->create_input_field("naligner/gt", mwidth);
212    aws->at("tt"); aws->create_input_field("naligner/tt", mwidth);
213
214    aws->at("gap");  aws->create_input_field("naligner/gap_panelty",  4);
215    aws->at("igap"); aws->create_input_field("naligner/igap_panelty", 4);
216
217    aws->at("expert");
218    aws->callback((AW_CB1)AW_POPUP, (AW_CL)create_expert_naligner_window);
219    aws->create_button("EXPERT_OPTIONS", "EXPERT2", "E");
220
221    return (AW_window *)aws;
222}
223
224AW_window *create_naligner_window(AW_root *root, AW_CL /*cd2*/) {
225    AW_window_simple *aws = new AW_window_simple;
226    aws->init(root, "ALIGNER_V2", "ALIGNER V2.0");
227    aws->load_xfig("awt/align.fig");
228
229    aws->label_length(10);
230    aws->button_length(10);
231
232    aws->at("close");
233    aws->callback     ((AW_CB0)AW_POPDOWN);
234    aws->create_button("CLOSE", "CLOSE", "O");
235
236    aws->at("help");
237    aws->callback(makeHelpCallback("ne_align_seq.hlp"));
238    aws->create_button("HELP", "HELP");
239
240    aws->at("align");
241    aws->callback     (aed_start_naligning);
242    aws->highlight();
243    aws->create_button("GO", "GO", "G");
244
245    aws->at("expert");
246    aws->callback     ((AW_CB1)AW_POPUP, (AW_CL)create_special_naligner_window);
247    aws->create_button("OPTIONS", "PARAMETERS", "E");
248
249    aws->at("what");
250    aws->create_toggle_field("naligner/what", "Align", "A");
251    aws->insert_toggle("Selected Species:", "S", 0);
252    aws->insert_default_toggle("Marked Species", "M", 1);
253    aws->update_toggle_field();
254
255    aws->at("swhat");
256    aws->create_input_field(AWAR_SPECIES_NAME, 2);
257
258    aws->at("against");
259    aws->create_toggle_field("naligner/against", "Reference", "g");
260    aws->insert_toggle("Species by name", "S", 0);
261    aws->insert_default_toggle("Auto search by pt_server", "S", 1);
262    aws->update_toggle_field();
263
264    aws->at("sagainst");
265    aws->create_input_field("naligner/sagainst", 2);
266
267    aws->label_length(25);
268
269    aws->at("pt_server");
270    aws->label("PT_SERVER:");
271    awt_create_PTSERVER_selection_button(aws, "naligner/pt_server");
272
273    aws->at("mark");
274    aws->label_length(40);
275    aws->label("Mark sequences found by the pt_server");
276    aws->create_toggle("naligner/mark_profile");
277
278    return (AW_window *)aws;
279}
Note: See TracBrowser for help on using the repository browser.