source: branches/profile/NTREE/AP_conservProfile2Gnuplot.cxx

Last change on this file was 11948, 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: 4.8 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : AP_conservProfile2Gnuplot.cxx                     //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#include "NT_local.h"
12#include "AP_conservProfile2Gnuplot.h"
13
14#include <aw_window.hxx>
15#include <aw_file.hxx>
16#include <aw_awar.hxx>
17#include <aw_msg.hxx>
18#include <aw_root.hxx>
19#include <arbdbt.h>
20
21static void AP_conservProfile2Gnuplot_callback(AW_window *aww) {
22    GB_ERROR  error   = 0;
23    char     *command_file;
24    char     *cmdName = GB_unique_filename("arb", "gnuplot");
25    FILE     *cmdFile = GB_fopen_tempfile(cmdName, "wt", &command_file);
26
27    if (!cmdFile) error = GB_await_error();
28    else {
29        char *fname   = aww->get_root()->awar(AP_AWAR_CONSPRO_FILENAME)->read_string();
30        char *smooth  = aww->get_root()->awar(AP_AWAR_CONSPRO_SMOOTH_GNUPLOT)->read_string();
31        char *legend  = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_LEGEND)->read_string();
32        int   dispPos = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_DISP_POS)->read_int();
33        int   minX    = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_MIN_X)->read_int();
34        int   maxX    = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_MAX_X)->read_int();
35        int   minY    = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_MIN_Y)->read_int();
36        int   maxY    = aww->get_root()->awar(AP_AWAR_CONSPRO_GNUPLOT_MAX_Y)->read_int();
37
38        if (minX>0 || maxX>0)   fprintf(cmdFile, "set xrange [%i:%i]\n", minX, maxX);
39        if (minY>0 || maxY>0)   fprintf(cmdFile, "set yrange [%i:%i]\n", minY, maxY);
40
41        fprintf(cmdFile, "plot \"%s\" %s title \"%s\"\n", fname, smooth, legend);
42
43        if (dispPos) fprintf(cmdFile, "replot \"%s\" title \"Base Positions\"\n", fname);
44
45        fprintf(cmdFile, "pause -1 \"Press RETURN to close gnuplot\"\n");
46
47        free(legend);
48        free(smooth);
49        free(fname);
50
51        fclose(cmdFile);
52    }
53
54    if (!error) {
55        char *script = GBS_global_string_copy("gnuplot %s && rm -f %s", command_file, command_file);
56        GB_xcmd(script, true, true);          // execute GNUPLOT using command_file
57        free(script);
58    }
59    free(command_file);
60    free(cmdName);
61
62    if (error) aw_message(error);
63}
64
65
66static AW_window *AP_createConservationProfileWindow(AW_root *root) { // @@@ unused! test and add to menu if useful
67
68    AW_window_simple *aws = new AW_window_simple;
69
70    aws->init(root, "DISP_CONSERV_PROFILE_GNUPLOT", "Conservation Profile Using Base Frequency Filter");
71    aws->load_xfig("conservProfile2Gnuplot.fig");
72
73    root->awar_string(AP_AWAR_CONSPRO_SMOOTH_GNUPLOT);
74    root->awar_string(AP_AWAR_BASE_FREQ_FILTER_NAME);
75
76    AW_create_fileselection_awars(root, AP_AWAR_CONSPRO, "", ".gnu", "noname.gnu");
77
78    root->awar_string(AP_AWAR_CONSPRO_GNUPLOT_LEGEND);
79    root->awar_int(AP_AWAR_CONSPRO_GNUPLOT_DISP_POS);
80    root->awar_int(AP_AWAR_CONSPRO_GNUPLOT_MIN_X);
81    root->awar_int(AP_AWAR_CONSPRO_GNUPLOT_MAX_X);
82    root->awar_int(AP_AWAR_CONSPRO_GNUPLOT_MIN_Y);
83    root->awar_int(AP_AWAR_CONSPRO_GNUPLOT_MAX_Y);
84
85    aws->at("close"); aws->callback((AW_CB0)AW_POPDOWN);
86    aws->create_button("CLOSE", "CLOSE", "C");
87
88    aws->at("help"); aws->callback(makeHelpCallback("conservProfile2Gnuplot.hlp"));
89    aws->create_button("HELP", "HELP", "H");
90
91    AW_create_standard_fileselection(aws, AP_AWAR_CONSPRO);
92
93    aws->at("baseFreqFlt");
94    aws->create_button("SELECT_FILTER", AP_AWAR_BASE_FREQ_FILTER_NAME);
95
96    aws->at("minX");
97    aws->create_input_field(AP_AWAR_CONSPRO_GNUPLOT_MIN_X);
98
99    aws->at("maxX");
100    aws->create_input_field(AP_AWAR_CONSPRO_GNUPLOT_MAX_X);
101
102    aws->at("minY");
103    aws->create_input_field(AP_AWAR_CONSPRO_GNUPLOT_MIN_Y);
104
105    aws->at("maxY");
106    aws->create_input_field(AP_AWAR_CONSPRO_GNUPLOT_MAX_Y);
107
108    aws->at("legend");
109    aws->create_input_field(AP_AWAR_CONSPRO_GNUPLOT_LEGEND);
110
111    aws->at("smooth");
112    aws->create_toggle_field(AP_AWAR_CONSPRO_SMOOTH_GNUPLOT, 1);
113    aws->insert_default_toggle("None", "N", "");
114    aws->insert_toggle("Unique", "U", "smooth unique");
115    aws->insert_toggle("Bezier", "B", "smooth bezier");
116    aws->update_toggle_field();
117
118    aws->at("dispPos");
119    aws->create_toggle(AP_AWAR_CONSPRO_GNUPLOT_DISP_POS);
120
121    aws->at("dispProfile");
122    aws->callback(AP_conservProfile2Gnuplot_callback);
123    aws->create_button("DISPLAY_PROFILE", "SAVE & DISPLAY CONSERVATION PROFILE");
124
125    return aws;
126}
127
Note: See TracBrowser for help on using the repository browser.