32 #define PROBE_PREFIX_LENGTH 9
33 #define PROBE_SUFFIX_LENGTH 9
45 (strchr(buf, 0)-1)[0] =
'0'+awarNo;
59 "Selected Probe$#FF0000",
62 "+-COLOR 0$#FFFFFF",
"-COLOR 1$#E0E0E0",
63 "+-COLOR 2$#C0C0C0",
"-COLOR 3$#A0A0A0",
64 "+-COLOR 4$#909090",
"-COLOR 5$#808080",
65 "+-COLOR 6$#707070",
"-COLOR 7$#505050",
66 "+-COLOR 8$#404040",
"-COLOR 9$#303030",
76 exports.set_standard_default_padding();
78 this->aw_root = aw_rooti;
85 if (clicked && clicked->
is_text()) {
86 int clicked_idx = (
int)clicked->
cd1();
87 const char *species_name = g_pbdata->
probeSpecies[clicked_idx].c_str();
104 unsigned char charUsed[256]; memset(charUsed, 255, 256);
106 for (
int i=0; i<10; i++) {
108 for (
int c=0; awarString_next[c]; ++c) {
109 charUsed[(
unsigned char)awarString_next[c]] = i;
111 free(awarString_next);
115 for (
int c = 0; awarString[c]; ++c) {
116 charUsed[(
unsigned char)awarString[c]] = awarNo;
120 typedef unsigned char mystr[256];
122 for (
int i=0; i<10; i++) s[i][0]=0;
124 for (
int i=0; i<256; i++) {
125 int table = charUsed[i];
127 char *eos = strchr((
char *)s[table], 0);
133 for (
int i=0; i<10; i++) {
151 for (
int i = 0; i < 10; i++) {
159 RootCallback refresh_cb = makeRootCallback(
refreshCanvas, scr);
171 static int seqBufferSize = 0;
172 static char *saiColors =
NULp;
174 if (start >= end)
return NULp;
176 int seqSize = (end -
start) + 1;
178 if (seqSize > seqBufferSize) {
180 seqBufferSize = seqSize;
185 memset(saiColors,
'0'-1, seqSize);
186 memset(saiValues,
'0'-1, seqSize);
197 if (!alignment_name) {
203 const char *saiData =
NULp;
204 const char *seqData =
NULp;
205 bool free_saiData =
false;
213 saiSequence =
GB_entry(gb_ali,
"bits");
220 const char *species_name = g_pbdata->
probeSpecies[speciesNo].c_str();
227 char trans_table[256];
233 memset(trans_table,
'0'-1, 256);
236 int clrRange = i +
'0';
238 for (
const char *d = def; *d; ++d) {
239 trans_table[(
unsigned char)*d] = clrRange;
247 for (i = start, j = 0; i <= end; ++i) {
249 saiColors[j] = trans_table[(
unsigned char)saiData[i]];
250 saiValues[j] = saiData[i];
258 free(const_cast<char*>(saiData));
261 free(alignment_name);
267 saiColors[positions] = 0;
268 saiValues[positions] = 0;
286 if (!alignment_name) {
290 const char *species_name = g_pbdata->
probeSpecies[speciesNo].c_str();
298 error =
GBS_global_string(
"species '%s' has no data in alignment '%s'", species_name, alignment_name);
305 else error =
"can't read data";
313 for (i = startPos; baseCntr < probeLen; ++i) {
319 for (i = startPos; baseCntr < PROBE_PREFIX_LENGTH && i >= 0; --i) {
335 free(alignment_name);
347 const char *saiCols,
int dispSai)
351 for (
size_t j = 0; j<probeRegionLen; j++) {
352 if (saiCols[j] >=
'0') {
355 if (dispSai && saiValues[j]) {
357 saiVal[0] = saiValues[j];
369 for (
size_t j = 0; probe_info[j]; ++j) {
370 if (probe_info[j] ==
'=') {
371 AW_pos yl = y-maxDescent-(yoff-maxDescent)/3;
376 probeChar[0] = probe_info[j];
385 char *displayInfo =
NULp;
391 char *field_content =
NULp;
395 field_content =
ARB_strdup(
"no field, no content");
408 error =
GBS_global_string(
"No entry '%s' in species '%s'", dbFieldName, speciesName);
417 GBL_env env(gb_main, default_tree_name);
425 if (displayInfo && strlen(displayInfo)>displayWidth) displayInfo[displayWidth] = 0;
429 if (error) freedup(displayInfo, error);
438 double xStep_info = 0;
439 double xStep_border = 0;
440 double xStep_target = 0;
442 double maxDescent = 0;
452 xStep_info = fgFontLim.
width;
453 xStep_border = pbFontLim.
width;
454 xStep_target = target_font_limits.
width;
457 maxDescent = all_font_limits.
descent;
469 if (strcmp(saiSelected,
"")==0) sprintf(buf,
"Selected SAI = Not Selected!");
470 else sprintf(buf,
"Selected SAI = %s", saiSelected);
474 double yLineStep = dispSai ? yStep*2 : yStep;
479 char *default_tree = aw_root->awar(
AWAR_TREE)->read_string();
482 for (
size_t j = 0; j < g_pbdata->
probeSpecies.size(); ++j) {
489 if (strcmp(selectedProbe, name) == 0) {
508 AW_pos pbRgX1 = ((displayWidth+1) * xStep_info);
509 AW_pos pbX = pbRgX1 + (9 * xStep_border) + spacer;
520 if (parser.get_error()) {
524 for (
size_t i = 0; i < g_pbdata->
probeSeq.size(); ++i) {
529 if ((error = parsed.get_error())) {
533 const char *probeRegion = parsed.get_probe_region();
535 char *probeRegion_copy =
ARB_strdup(probeRegion);
537 const char *tok_prefix = strtok(probeRegion_copy,
"-");
538 const char *tok_infix = tok_prefix ? strtok(
NULp,
"-") :
NULp;
539 const char *tok_suffix = tok_infix ? strtok(
NULp,
"-") :
NULp;
543 const char *end = strchr(probeRegion, 0);
544 if (end>probeRegion && end[-1] ==
'-') tok_suffix =
"";
547 const char *err =
NULp;
551 int startPos = parsed.get_position();
552 if (parsed.get_error()) {
553 err =
GBS_global_string(
"Could not parse match position (Reason: %s).", parsed.get_error());
567 int positions = strlen(saiCols);
570 paintBackgroundAndSAI(device, positions, pbRgX1+skipLeft*xStep_border, pbY, xStep_border, yStep, saiCols, dispSai);
585 size_t post_start_pos = endPos;
592 if (saiCols)
paintBackgroundAndSAI(device, strlen(tok_suffix), pbRgX2, pbY, xStep_border, yStep, saiCols, dispSai);
602 free(probeRegion_copy);
607 lineXpos = pbRgX2 + (9 * xStep_border);
614 double vert_x1 = pbX-spacer/2;
615 double vert_x2 = pbRgX2-spacer/2;
633 "Use with SAIs containing binary columns\ne.g. \'markerline\'",
634 "0='-.0=';1='';2='';3='';4='';5='';6='';7='';8='';9='1x'"
637 "*column_weights_09",
638 "Use with SAIs containing column weights (0-9)\ne.g. MAX_FREQUENCY",
639 "0='0';1='1';2='2';3='3';4='4';5='5';6='6';7='7';8='8';9='9'"
642 "*column_weights_0Z_posvar",
643 "Use with SAIs containing column weights (0-9,A-Z)\ne.g. POS_VAR_BY_PARSIMONY",
644 "0='012';1='345';2='678';3='9AB';4='CDE';5='FGH';6='IJK';7='LMN';8='OPQ';9='RST'"
648 "Use with SAIs containing nucleotide sequence data",
649 "0='-.';1='';2='';3='A';4='';5='C';6='';7='G';8='';9='TU'"
653 "Use with SAI:HELIX",
654 "0='';1='';2='';3='<[';4='';5='';6='>]';7='';8='';9=''"
660 for (
int i = 0; i < 10; i++) {
662 cdef.
add(awarDef,
"", i);
668 static AW_window_simple *aws =
NULp;
670 aws =
new AW_window_simple;
671 aws->init(aw_root,
"SAI_CTT",
"Color Translation Table");
672 aws->load_xfig(
"probeSaiColors.fig");
676 aws->create_button(
"CLOSE",
"CLOSE",
"C");
680 aws->create_button(
"HELP",
"HELP");
684 char at_name[] =
"rangex";
685 char *dig = strchr(at_name, 0)-1;
705 static AW_window_simple *aws =
NULp;
707 aws =
new AW_window_simple;
708 aws->init(aw_root,
"SELECT_DISPLAY_FIELD",
"Select display field");
709 aws->load_xfig(
"displayField.fig");
711 aws->button_length(10);
715 aws->create_button(
"CLOSE",
"CLOSE",
"C");
719 aws->create_button(
"HELP",
"HELP",
"H");
723 aws->at(
"aciSelect");
724 aws->button_length(12);
726 aws->create_button(
"SELECT_ACI",
"Select ACI");
750 awm->
init(awr,
"MATCH_SAI",
"PROBE and SAI", 200, 300);
AW_window * AW_create_gc_window_named(AW_root *aw_root, AW_gc_manager *gcman, const char *wid, const char *windowname)
void paint(AW_device *device)
void add(const char *awar_name, const char *config_name)
const AW_bitset AW_SCREEN
GB_ERROR GB_incur_error()
std::vector< std::string > probeSeq
void insert_menu_topic(const char *id, const char *name, const char *mnemonic, const char *help_text_, AW_active mask, const WindowCallback &wcb)
const char * getProbeTarget() const
#define PROBE_PREFIX_LENGTH
const char * get_window_id() const
size_t getProbeTargetLen() const
#define AWAR_SPV_DB_FIELD_NAME
SAI_graphic(AW_root *aw_root, GBDATA *gb_main)
void set_line_attributes(int gc, short width, AW_linestyle style)
AW_window * createSaiProbeMatchWindow(AW_root *awr, GBDATA *gb_main)
#define AWAR_SPV_DISP_SAI
GB_ERROR GB_end_transaction(GBDATA *gbd, GB_ERROR error)
static void addCallBacks(AW_root *awr, AWT_canvas *scr)
static bool in_colorDefChanged_callback
char * ARB_strdup(const char *str)
void AWT_insert_config_manager(AW_window *aww, AW_default default_file_, const char *id, const StoreConfigCallback &store_cb, const RestoreConfigCallback &load_or_reset_cb, const char *macro_id, const AWT_predefined_config *predef)
char * GB_read_as_string(GBDATA *gbd)
#define AWAR_SPV_DB_FIELD_WIDTH
const char * GBS_global_string(const char *templat,...)
static char * alignment_name
void AW_POPDOWN(AW_window *window)
static const char * translateSAItoColors(AW_root *awr, GBDATA *gb_main, int start, int end, int speciesNo)
static AW_window * create_colorTranslationTable_window(AW_root *aw_root)
AW_gc_manager * AW_manage_GC(AW_window *aww, const char *gc_base_name, AW_device *device, int base_drag, AW_GCM_AREA area, const GcChangedCallback &changecb, const char *default_background_color,...)
static char * GetDisplayInfo(AW_root *root, GBDATA *gb_main, const char *speciesName, size_t displayWidth, const char *default_tree_name)
static void colorDefChanged_callback(AW_root *awr, int awarNo)
#define PROBE_SUFFIX_LENGTH
GB_ERROR GB_push_transaction(GBDATA *gbd)
CONSTEXPR long FIELD_FILTER_NDS
#define NO_FIELD_SELECTED
AW_awar * add_callback(const RootCallback &cb)
void awt_popup_SAI_selection_list(AW_window *, const char *awar_name, GBDATA *gb_main)
void create_itemfield_selection_button(AW_window *aws, const FieldSelDef &selDef, const char *at)
static HelixNrInfo * start
const AW_font_limits & get_font_limits(int gc, char c) const
static void paintProbeInfo(AW_device *device, const char *probe_info, AW_pos x, AW_pos y, AW_pos xoff, AW_pos yoff, AW_pos maxDescent, int textCOLOR)
#define AWAR_SPV_SELECTED_PROBE
GBDATA * GBT_find_SAI(GBDATA *gb_main, const char *name)
const char * read_char_pntr() const
GB_ERROR GB_await_error()
WindowCallback makeHelpCallback(const char *helpfile)
const char * getHeadline() const
static saiProbeData * g_pbdata
TYPE * ARB_alloc(size_t nelem)
void NDS_popup_select_srtaci_window(AW_window *aww, const char *acisrt_awarname)
const char * get_gc_base_name() const
static int calculateEndPosition(GBDATA *gb_main, int startPos, int speciesNo, int mode, int probeLen, GB_ERROR &error)
void transferProbeData(saiProbeData *spd)
void create_menu(const char *name, const char *mnemonic, AW_active mask=AWM_ALL)
bool line(int gc, const AW::LineVector &Line, AW_bitset filteri=AW_ALL_DEVICES_SCALED)
GBDATA * GBT_expect_species(GBDATA *gb_main, const char *name)
static void error(const char *msg)
#define AWAR_SPV_SAI_COLOR
void insert_help_topic(const char *labeli, const char *mnemonic, const char *helpText, AW_active mask, const WindowCallback &cb)
#define AWAR_SPECIES_NAME
static const char * getAwarName(int awarNo)
AW_gc_manager * init_devices(AW_window *, AW_device *, AWT_canvas *scr) OVERRIDE
char * read_string() const
void show(AW_device *device) OVERRIDE
AW_awar * awar(const char *awar)
static AWT_predefined_config predefined_saiColorDefinitions[]
GBDATA * GBT_find_sequence(GBDATA *gb_species, const char *aliname)
static AW_window * createSaiColorWindow(AW_root *aw_root, AW_gc_manager *gc_manager)
static AW_window_menu_modes_opengl * awm
std::vector< std::string > probeSpecies
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
void handle_command(AW_device *device, AWT_graphic_event &event) OVERRIDE
static void refreshCanvas(AW_root *, AWT_canvas *scr)
AW_gc_manager * gc_manager
static AW_window * createDisplayField_window(AW_root *aw_root, GBDATA *gb_main)
ItemSelector & SPECIES_get_selector()
AW_event_type type() const
bool is_std_gap(const char c)
static void setup_saiColorDefs_config(AWT_config_definition &cdef)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
GB_ERROR write_string(const char *aw_string)
char * GBT_get_default_alignment(GBDATA *gb_main)
NOT4PERL char * GB_command_interpreter_in_env(const char *str, const char *commands, const GBL_call_env &callEnv)
GB_transaction ta(gb_var)
bool box(int gc, AW::FillStyle filled, const AW::Rectangle &rect, AW_bitset filteri=AW_ALL_DEVICES_SCALED)
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
GBDATA * GB_search(GBDATA *gbd, const char *fieldpath, GB_TYPES create)
#define AWAR_SPV_ACI_COMMAND
bool text(int gc, const SizedCstr &cstr, const AW::Position &pos, AW_pos alignment=0.0, AW_bitset filteri=AW_ALL_DEVICES_UNSCALED)
GBDATA * GB_entry(GBDATA *father, const char *key)
void aw_message_if(GB_ERROR error)
void AWT_GC_changed_cb(GcChange whatChanged, AWT_canvas *scr)
static void paintBackgroundAndSAI(AW_device *device, size_t probeRegionLen, AW_pos pbRgX1, AW_pos pbY, AW_pos pbMaxWidth, AW_pos pbMaxHeight, const char *saiCols, int dispSai)
static void createSaiProbeAwars(AW_root *aw_root)
#define AWAR_SPV_SAI_2_PROBE
GB_write_int const char s