source: branches/lib/EDIT4/ED4_naligner.cxx

Last change on this file was 19549, checked in by westram, 5 weeks ago
  • reintegrates 'sync' into 'trunk'
    • fixes #869
      • introduces synchronisation of external commands via DB
      • macros now wait for these external commands to finish ⇒ macro can continue with results
  • adds: log:branches/sync@19535:19548
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.8 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
22static void aed_start_naligning(AW_window *aw, GBDATA *gb_main) {
23    AW_root *root = aw->get_root();
24    int      i, j;
25
26    GBS_strstruct cmd(1000);
27    cmd.cat("xterm -sl 1000 -sb -e sh -c 'LD_LIBRARY_PATH=\"");
28    cmd.cat(GB_getenv("LD_LIBRARY_PATH"));
29    cmd.cat("\";export LD_LIBRARY_PATH;for i in ");
30    if (root->awar("naligner/what")->read_int()) {
31        GB_transaction  ta(gb_main);
32
33        for (GBDATA *gb_species = GBT_first_marked_species(gb_main);
34             gb_species;
35             gb_species = GBT_next_marked_species(gb_species))
36        {
37            cmd.put('\"');
38            cmd.cat(GBT_get_name_or_description(gb_species));
39            cmd.cat("\" ");
40        }
41    }
42    else {
43        const char *species_name = root->awar(AWAR_SPECIES_NAME)->read_char_pntr();
44        cmd.put('\"');
45        cmd.cat(species_name);
46        cmd.cat("\" ");
47    }
48
49
50    cmd.cat("; do arb_naligner");
51
52
53    if (root->awar("naligner/against")->read_int()) {
54        cmd.cat(" -PARB_PT_SERVER");
55        cmd.putlong(root->awar("naligner/pt_server")->read_int());
56    }
57    else {
58        const char *family = root->awar("naligner/sagainst")->read_char_pntr();
59        cmd.cat(" \"-f");
60        cmd.cat(family);
61        cmd.put('\"');
62    }
63    cmd.cat(" \"-s$i\" ");
64
65    if (root->awar("naligner/mark_profile")->read_int()) cmd.cat(" -mf");
66    if (root->awar("naligner/unmark_sequence")->read_int()) cmd.cat(" -us");
67
68    cmd.cat(" -minf");  cmd.putlong (root->awar("naligner/minf")->read_int());
69    cmd.cat(" -maxf");  cmd.putlong (root->awar("naligner/maxf")->read_int());
70    cmd.cat(" -minw");  cmd.putfloat(root->awar("naligner/minw")->read_float());
71    cmd.cat(" -maxew"); cmd.putfloat(root->awar("naligner/maxew")->read_float());
72    cmd.cat(" -ib");    cmd.putlong (root->awar("naligner/det/ib")->read_int());
73    cmd.cat(" -ic");    cmd.putlong (root->awar("naligner/det/ic")->read_int());
74    cmd.cat(" -cl");    cmd.putfloat(root->awar("naligner/det/cl")->read_float());
75
76    cmd.cat(" -cm");    cmd.putfloat(root->awar("naligner/det/cm")->read_float());
77    cmd.cat(" -ch");    cmd.putfloat(root->awar("naligner/det/ch")->read_float());
78    cmd.cat(" -mgf");   cmd.putfloat(root->awar("naligner/igap_panelty")->read_float());
79    cmd.cat(" -mma1");
80    cmd.cat(" -msub");
81
82    for (i=0; i<5; i++) {
83        for (j=0; j<5; j++) {
84            if (i==4 || j==4) {                 // gap panelty
85                if (i==4 && j==4) {
86                    cmd.putfloat(0.0);
87                }
88                else {
89                    cmd.putfloat(root->awar("naligner/gap_panelty")->read_float());
90                    cmd.put(',');
91                }
92            }
93            else {
94                char var[100];
95                if (i<j) sprintf(var, "naligner/%c%c", "acgt-"[i], "acgt-"[j]);
96                else     sprintf(var, "naligner/%c%c", "acgt-"[j], "acgt-"[i]);
97                cmd.putfloat(root->awar(var)->read_float());
98                if (i<4 || j<4) cmd.put(',');
99            }
100        }
101    }
102    cmd.cat(" || echo \"Aligner failed\";done;");
103    cmd.cat("echo press \"(return)\" to close window;read a' &");
104
105    GB_ERROR error = GBK_system(cmd.get_data());
106    if (error) fputs(error, stderr);
107}
108
109
110void create_naligner_variables(AW_root *root, AW_default db1) {
111    root->awar_int("naligner/what", 0, db1);
112
113    root->awar_int   ("naligner/against",   0,  db1);
114    root->awar_string("naligner/sagainst",  "", db1);
115    root->awar_int   ("naligner/pt_server", -1, db1);
116
117    root->awar_int("naligner/mark_profile",    1, db1);
118    root->awar_int("naligner/unmark_sequence", 0, db1);
119
120    root->awar_float("naligner/aa",           0.0, db1);
121    root->awar_float("naligner/ac",           3.0, db1);
122    root->awar_float("naligner/ag",           1.0, db1);
123    root->awar_float("naligner/at",           3.0, db1);
124    root->awar_float("naligner/cc",           0.0, db1);
125    root->awar_float("naligner/cg",           3.0, db1);
126    root->awar_float("naligner/ct",           1.0, db1);
127    root->awar_float("naligner/gg",           0.0, db1);
128    root->awar_float("naligner/gt",           3.0, db1);
129    root->awar_float("naligner/tt",           0.0, db1);
130    root->awar_float("naligner/gap_panelty",  5.0, db1);
131    root->awar_float("naligner/igap_panelty", 0.2, db1);
132    root->awar_int  ("naligner/minf",         3,   db1);
133    root->awar_int  ("naligner/maxf",         30,  db1);
134
135    root->awar_float("naligner/minw",  .7, db1);
136    root->awar_float("naligner/maxew", .2, db1);
137
138    root->awar_float("naligner/det/cl", .25, db1);
139    root->awar_float("naligner/det/cm", .5,  db1);
140    root->awar_float("naligner/det/ch", .8,  db1);
141    root->awar_int  ("naligner/det/ib", 5,   db1);
142    root->awar_int  ("naligner/det/ic", 5,   db1);
143}
144
145static AW_window *create_expert_naligner_window(AW_root *root) {
146    const       int     mwidth = 5;
147    AW_window_simple *aws = new AW_window_simple;
148    aws->init(root, "ALIGNER_V2_EXPERT2", "ALIGNER V2.0 EXPERT 2");
149    aws->load_xfig("ed_al_ex.fig");
150
151    aws->at("close");
152    aws->callback(AW_POPDOWN);
153    aws->create_button("CLOSE", "CLOSE", "C");
154
155    aws->at("minw"); aws->create_input_field("naligner/minw", mwidth);
156    aws->at("maxew"); aws->create_input_field("naligner/maxew", mwidth);
157
158    aws->at("ib"); aws->create_input_field("naligner/det/ib", mwidth);
159    aws->at("ic"); aws->create_input_field("naligner/det/ic", mwidth);
160    aws->at("cl"); aws->create_input_field("naligner/det/cl", mwidth);
161    aws->at("cm"); aws->create_input_field("naligner/det/cm", mwidth);
162    aws->at("ch"); aws->create_input_field("naligner/det/ch", mwidth);
163
164    return aws;
165}
166
167static AW_window *create_special_naligner_window(AW_root *root) {
168    AW_window_simple *aws    = new AW_window_simple;
169    const       int   mwidth = 3;
170
171    aws->init(root, "ALIGNER_V2_EXPERT", "ALIGNER V2.0 EXPERT");
172    aws->load_xfig("ed_al_sp.fig");
173
174    aws->label_length(22);
175
176    aws->at("close");
177    aws->callback(AW_POPDOWN);
178    aws->create_button("CLOSE", "CLOSE", "C");
179
180    aws->at("minr"); aws->create_input_field("naligner/minf", 6);
181    aws->at("maxr"); aws->create_input_field("naligner/maxf", 6);
182
183    aws->at("aa"); aws->create_input_field("naligner/aa", mwidth);
184    aws->at("ac"); aws->create_input_field("naligner/ac", mwidth);
185    aws->at("ag"); aws->create_input_field("naligner/ag", mwidth);
186    aws->at("at"); aws->create_input_field("naligner/at", mwidth);
187
188    aws->at("ca"); aws->create_input_field("naligner/ac", mwidth);
189    aws->at("cc"); aws->create_input_field("naligner/cc", mwidth);
190    aws->at("cg"); aws->create_input_field("naligner/cg", mwidth);
191    aws->at("ct"); aws->create_input_field("naligner/ct", mwidth);
192
193    aws->at("ga"); aws->create_input_field("naligner/ag", mwidth);
194    aws->at("gc"); aws->create_input_field("naligner/cg", mwidth);
195    aws->at("gg"); aws->create_input_field("naligner/gg", mwidth);
196    aws->at("gt"); aws->create_input_field("naligner/gt", mwidth);
197
198    aws->at("ta"); aws->create_input_field("naligner/at", mwidth);
199    aws->at("tc"); aws->create_input_field("naligner/ct", mwidth);
200    aws->at("tg"); aws->create_input_field("naligner/gt", mwidth);
201    aws->at("tt"); aws->create_input_field("naligner/tt", mwidth);
202
203    aws->at("gap");  aws->create_input_field("naligner/gap_panelty",  4);
204    aws->at("igap"); aws->create_input_field("naligner/igap_panelty", 4);
205
206    aws->at("expert");
207    aws->callback(create_expert_naligner_window);
208    aws->create_button("EXPERT_OPTIONS", "EXPERT2", "E");
209
210    return aws;
211}
212
213AW_window *create_naligner_window(AW_root *root, GBDATA *gb_main) {
214    AW_window_simple *aws = new AW_window_simple;
215    aws->init(root, "ALIGNER_V2", "ALIGNER V2.0");
216    aws->load_xfig("awt/align.fig");
217
218    aws->label_length(10);
219    aws->button_length(10);
220
221    aws->at("close");
222    aws->callback(AW_POPDOWN);
223    aws->create_button("CLOSE", "CLOSE", "O");
224
225    aws->at("help");
226    aws->callback(makeHelpCallback("ne_align_seq.hlp"));
227    aws->create_button("HELP", "HELP");
228
229    aws->at("align");
230    aws->callback(makeWindowCallback(aed_start_naligning, gb_main));
231    aws->highlight();
232    aws->create_button("GO", "GO", "G");
233
234    aws->at("expert");
235    aws->callback(create_special_naligner_window);
236    aws->create_button("OPTIONS", "PARAMETERS", "E");
237
238    aws->at("what");
239    aws->create_toggle_field("naligner/what", "Align");
240    aws->insert_toggle("Selected Species:", "S", 0);
241    aws->insert_default_toggle("Marked Species", "M", 1);
242    aws->update_toggle_field();
243
244    aws->at("swhat");
245    aws->create_input_field(AWAR_SPECIES_NAME, 2);
246
247    aws->at("against");
248    aws->create_toggle_field("naligner/against", "Reference");
249    aws->insert_toggle("Species by name", "S", 0);
250    aws->insert_default_toggle("Auto search by pt_server", "S", 1);
251    aws->update_toggle_field();
252
253    aws->at("sagainst");
254    aws->create_input_field("naligner/sagainst", 2);
255
256    aws->label_length(25);
257
258    aws->at("pt_server");
259    aws->label("PT_SERVER:");
260    awt_create_PTSERVER_selection_button(aws, "naligner/pt_server");
261
262    aws->at("mark");
263    aws->label_length(40);
264    aws->label("Mark sequences found by the pt_server");
265    aws->create_toggle("naligner/mark_profile");
266
267    return aws;
268}
Note: See TracBrowser for help on using the repository browser.