33 #define FORWARD_STRAND 1
34 #define COMPLEMENTARY_STRAND 2
35 #define DB_FIELD_STRAND 3
37 #define FORWARD_STRANDS 3
38 #define COMPLEMENTARY_STRANDS 3
39 #define DB_FIELD_STRANDS 1
59 bool bTerminalsFound =
true;
98 if ((all && (all_f1 || all_f2 || all_f3 || all_c1 || all_c2 || all_c3 || all_db)) ||
99 (sel && (sel_db || sel_f1 || sel_f2 || sel_f3 || sel_c1 || sel_c2 || sel_c3)) ||
100 (mrk && (mrk_db || mrk_f1 || mrk_f2 || mrk_f3 || mrk_c1 || mrk_c2 || mrk_c3)) ||
101 (cur && (cur_db || cur_f1 || cur_f2 || cur_f3 || cur_c1 || cur_c2 || cur_c3)))
106 bTerminalsFound =
true;
110 bTerminalsFound =
false;
113 return bTerminalsFound;
141 int all, af_1, af_2, af_3, ac_1, ac_2, ac_3, adb;
151 int mrk, mf_1, mf_2, mf_3, mc_1, mc_2, mc_3, mdb;
161 int sel, sf_1, sf_2, sf_3, sc_1, sc_2, sc_3, sdb;
171 int cur, cf_1, cf_2, cf_3, cc_1, cc_2, cc_3, cdb;
184 switch (aaStrandType) {
187 switch (aaStartPos) {
217 switch (aaStartPos) {
267 if (terminal->is_orf_terminal()) {
286 ED4_terminal *terminal = spNameTerm->corresponding_sequence_terminal();
308 if (terminal->is_sequence_terminal()) {
309 ED4_species_manager *speciesManager = terminal->get_parent(
LEV_SPECIES)->to_species_manager();
310 if (speciesManager->is_species_seq_terminal()) {
314 if (speciesManager->is_highlighted()) {
318 terminal = terminal->get_next_terminal()->get_next_terminal();
320 if (terminal->is_orf_terminal()) {
371 int seqLen = strlen(sequence);
374 strcpy(sequence, complementarySeq);
375 free(complementarySeq);
384 if (!gb_species) error =
GBS_global_string(
"Species '%s' does not exist", spName);
391 :
GBS_global_string(
"Species '%s' has no data in alignment '%s'", spName, defaultAlignment);
400 if (compl_err) error =
GBS_global_string(
"Failed to calc complementary strand (Reason: %s)", compl_err);
404 char newAlignmentName[100];
407 switch (aaStrandType) {
408 case FORWARD_STRAND: sprintf(newAlignmentName,
"ali_pro_ProtView_forward_start_pos_%ld", (
long)aaStartPos);
break;
409 case COMPLEMENTARY_STRAND: sprintf(newAlignmentName,
"ali_pro_ProtView_complementary_start_pos_%ld", (
long)aaStartPos);
break;
410 case DB_FIELD_STRAND: sprintf(newAlignmentName,
"ali_pro_ProtView_database_field_start_pos_%ld", (
long)aaStartPos);
break;
421 if (gb_alignment_exists) {
423 char *question =
NULp;
427 question =
GBS_global_string_copy(
"\"%s\" contain data in the alignment \"%s\"!", spName, newAlignmentName);
428 skip_sp =
ASKtoOverWriteData->get_answer(
"overwrite_translated", question,
"Overwrite, Skip Species",
"all",
false);
442 gb_new_alignment =
GBT_create_alignment(gb_main, newAlignmentName, aliLen/3+1, 0, 1,
"ami",
"by Protein Viewer");
445 if (!gb_new_alignment) {
486 if (terminal->is_species_seq_terminal()) {
487 const char *speciesName = terminal->to_sequence_terminal()->species_name;
491 terminal = terminal->get_next_terminal()->get_next_terminal();
493 if (terminal->is_orf_terminal()) {
503 if (giNewAlignments>0) {
504 char *msg =
GBS_global_string_copy(
"Protein data saved to NEW alignments.\n%d new alignments were created and named ali_prot_ProtView_XXXX", giNewAlignments);
519 if (!gb_species) error =
GBS_global_string(
"Species '%s' does not exist", speciesName);
526 :
GBS_global_string(
"Species '%s' has no data in alignment '%s'", speciesName, defaultAlignment);
529 e4_assert(startPos4Translation>=0 && startPos4Translation<=2);
537 switch (translationMode) {
544 if (compl_err) error =
GBS_global_string(
"Failed to calc complementary strand for '%s' (Reason: %s)", speciesName, compl_err);
550 if (gb_translTable) {
555 gMissingTransTable++;
560 if (startPos4Translation<0 || startPos4Translation>2) {
561 error =
GB_export_errorf(
"'%s' has invalid codon_start entry %i (allowed: 1..3)", speciesName, startPos4Translation+1);
565 gMissingCodonStart++;
566 startPos4Translation = 0;
573 translate_nuc2aa(translationTable, str_SeqData, len, startPos4Translation,
false,
true,
false,
NULp);
575 char *
s =
new char[len+1];
580 char *gc =
new char[len+1];
582 for (i=0, j=0; i<len && j<len;) {
584 for (; i<startPos4Translation; ++i) {
589 char base = str_SeqData[j++];
593 e4_assert(AAname && strlen(AAname) == 3);
594 for (
int n = 0; n<3 && i<len; ++n,++i) {
605 int k = startPos4Translation+1;
606 for (i=0, j=0; i<len; i++) {
607 if ((k==i) && (j<len)) {
608 s[i] = str_SeqData[j++];
630 if (gMissingCodonStart>0) {
634 gMissingCodonStart = 0;
636 if (gMissingTransTable>0) {
637 aw_message(
GBS_global_string(
"WARNING: 'translation table' entry not found in %d of %d species! Using selected translation table as a default table...",
640 gMissingTransTable = 0;
651 if (terminal->is_species_seq_terminal()) {
652 const char *speciesName = terminal->to_sequence_terminal()->species_name;
659 terminal = terminal->get_next_terminal()->get_next_terminal();
661 if (terminal->is_orf_terminal()) {
699 char *speciesName = cursorTerminal->to_sequence_terminal()->species_name;
723 int translationMode = 0;
730 sprintf(namebuffer,
"Sequence_Manager.%ld.%d",
ED4_counter, count++);
738 else sprintf(namebuffer,
"DBProteinInfo_Term%ld.%d",
ED4_counter, count++);
744 ED4_sequence_info_terminal *seqInfoTerminal = speciesManager->search_spec_child_rek(
LEV_SEQUENCE_INFO)->to_sequence_info_terminal();
745 new_SeqInfoTerminal->set_both_links(seqInfoTerminal);
750 sprintf(namebuffer,
"AA_Sequence_Term%ld.%d",
ED4_counter, count++);
799 cout<<marked--<<
". "<<spName<<endl;
802 ED4_terminal *terminal = spNameTerm->corresponding_sequence_terminal();
827 if (bTerminalsFound)
return;
834 PV_AA_Terminals4Species = aaTerminalsToBeCreated;
845 if (speciesManager->is_species_seq_manager()) {
966 static AW_window_simple *aws =
NULp;
969 aws =
new AW_window_simple;
971 aws->init(aw_root,
"PROTEIN_VIEWER",
"Protein Viewer");
972 aws->load_xfig(
"proteinViewer.fig");
976 aws->button_length(0);
977 aws->create_button(
"REFRESH",
"#refresh_text.xpm");
981 aws->button_length(0);
982 aws->create_button(
"HELP",
"#help_text.xpm");
986 aws->button_length(0);
987 aws->create_button(
"CLOSE",
"#close_text.xpm");
996 aws->update_option_menu();
1022 aws->at(
"dispOption");
1024 aws->insert_toggle(
"Single Letter Code",
"S", 0);
1025 aws->insert_toggle(
"Triple Letter Code",
"T", 1);
1026 aws->insert_toggle(
"Colored Box",
"B", 2);
1027 aws->update_toggle_field();
1031 aws->button_length(0);
1032 aws->create_button(
"COLORMAPS",
"#colorMaps.xpm");
1036 aws->button_length(0);
1037 aws->create_button(
"COLORS",
"#colors.xpm");
1070 aws->button_length(5);
1071 aws->create_button(
"SAVE",
"#save.xpm");
GB_ERROR GB_begin_transaction(GBDATA *gbd)
static void PV_PrintMissingDBentryInformation()
#define AWAR_PV_MARKED_DB
void set_both_links(ED4_base *ref)
void PV_SequenceUpdate_CB(GB_CB_TYPE gbtype)
#define AWAR_PV_MARKED_CS_3
#define AWAR_PROTVIEW_COMPLEMENTARY_STRAND_1
#define COMPLEMENTARY_STRAND
bool is_species_seq_terminal() const
#define AWAR_PROTVIEW_FORWARD_STRAND_2
GBDATA * GBT_first_marked_species(GBDATA *gb_main)
static void PV_RefreshDisplay(AW_root *root)
static bool PV_LookForNewTerminals(AW_root *root)
GB_ERROR GB_write_string(GBDATA *gbd, const char *s)
ED4_terminal * get_first_terminal(int start_index=0) const
static int gMissingTransTable
static void PV_HideTerminal(ED4_orf_terminal *orfTerm)
static void TranslateGeneToAminoAcidSequence(AW_root *, ED4_orf_terminal *seqTerm, const char *speciesName, int startPos4Translation, int translationMode)
char * GBT_complementNucSequence(const char *s, int len, char T_or_U)
bool in_species_seq_terminal() const
#define AWAR_PV_SELECTED_FS_2
#define COMPLEMENTARY_STRANDS
#define AWAR_PV_MARKED_CS_1
GBDATA * GBT_get_alignment(GBDATA *gb_main, const char *aliname)
#define AWAR_PV_SELECTED_FS_1
#define AWAR_PROTVIEW_FORWARD_STRAND_1
static AW_repeated_question * ASKtoOverWriteData
void GB_end_transaction_show_error(GBDATA *gbd, GB_ERROR error, void(*error_handler)(GB_ERROR))
static void PV_ManageTerminalDisplay(AW_root *root, ED4_orf_terminal *orfTerm, long int DispMode)
const char * GBS_global_string(const char *templat,...)
void PV_CallBackFunction(AW_root *root)
static bool gbWritingData
long GBT_get_alignment_len(GBDATA *gb_main, const char *aliname)
static void PV_DisplayAminoAcidNames(AW_root *root)
void AW_POPDOWN(AW_window *window)
ED4_terminal * owner_of_cursor
void SET_aaSequence(const char *aaSeq)
AW_gc_manager * gc_manager
static GB_ERROR PV_ComplementarySequence(char *sequence)
AW_awar * add_callback(const RootCallback &cb)
GB_ERROR GBT_add_alignment_changekeys(GBDATA *gb_main, const char *ali)
#define AWAR_PV_CURSOR_CS_3
#define AWAR_PV_SELECTED_CS_1
int TTIT_embl2arb(int embl_code_nr)
NOT4PERL GBDATA * GBT_add_data(GBDATA *species, const char *ali_name, const char *key, GB_TYPES type) __ATTR__DEPRECATED_TODO("better use GBT_create_sequence_data()")
static void PV_SaveData(AW_window *)
#define SEQUENCE_INFO_WIDTH
size_t GB_read_string_count(GBDATA *gbd)
GB_ERROR GB_await_error()
#define AWAR_PV_CURSOR_FS_2
WindowCallback makeHelpCallback(const char *helpfile)
void append_member(ED4_base *new_member)
AW_window * ED4_CreateProteinViewer_window(AW_root *aw_root)
static void PV_HideAllTerminals()
static void PV_RefreshProtViewDisplay(AW_window *aww)
#define AWAR_PV_MARKED_FS_1
static void PV_WriteTranslatedSequenceToDB(ED4_orf_terminal *aaSeqTerm, const char *spName)
GBDATA * get_gb_main() const
#define AWAR_PV_MARKED_FS_3
#define AWAR_PV_MARKED_CS_2
ED4_species_name_terminal * ED4_find_species_name_terminal(const char *species_name)
int translate_nuc2aa(int arb_code_nr, char *data, size_t size, size_t pos, bool translate_all, bool create_start_codon, bool append_stop_codon, int *translatedSize)
static void PV_CreateAllTerminals(AW_root *root)
ED4_window * first_window
#define AWAR_PROTVIEW_DISPLAY_OPTIONS
ED4_terminal * get_next_terminal()
static void error(const char *msg)
#define AWAR_PV_SELECTED_FS_3
void PV_AddOrfTerminalsToLoadedSpecies()
#define AWAR_PV_SELECTED_CS_2
void PV_RefreshWindow(AW_root *root)
#define AWAR_PV_SELECTED_CS_3
AW_window * ED4_create_seq_colors_window(AW_root *awr, ED4_seq_colors *sc)
GBDATA * GBT_next_marked_species(GBDATA *gb_species)
#define AWAR_PROTVIEW_COMPLEMENTARY_STRAND_2
ED4_root_group_manager * root_group_man
static bool gTerminalsCreated
#define AWAR_SPECIES_NAME
ED4_main_manager * main_manager
void PV_CreateAwars(AW_root *root, AW_default aw_def)
#define AWAR_PV_DISPLAY_ALL
AW_awar * awar(const char *awar)
#define AWAR_PV_CURSOR_DB
GBDATA * GBT_find_sequence(GBDATA *gb_species, const char *aliname)
GB_alignment_type alignment_type
static void PV_UnHideTerminal(ED4_orf_terminal *orfTerm)
long GBT_count_marked_species(GBDATA *gb_main)
static int PV_AA_Terminals4Species
const char * AWT_get_codon_code_name(int code)
#define AWAR_PV_SELECTED_DB
static void PV_ManageTerminals(AW_root *root)
void PV_AddCorrespondingOrfTerminals(ED4_species_name_terminal *spNameTerm)
static int gMissingCodonStart
int is_orf_terminal() const
GB_ERROR GB_export_errorf(const char *templat,...)
ED4_base * search_spec_child_rek(ED4_level level)
ED4_cursor & current_cursor()
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
#define AWAR_PROTVIEW_DEFINED_FIELDS
void set_property(ED4_properties prop)
void SET_aaSeqFlags(int startPos, int strandType)
const char * get_alignment_name() const
char * GB_read_string(GBDATA *gbd)
const int AWAR_PROTEIN_TYPE_bacterial_code_index
ED4_seq_colors * sequence_colors
#define AWAR_PROTEIN_TYPE
static void PV_AddCallBacks(AW_root *awr)
#define AWAR_PV_CURSOR_FS_1
bool ED4_is_gap_character(char chr)
#define AWAR_PROTVIEW_FORWARD_STRAND_3
void aw_message(const char *msg)
int AWT_default_protein_type(GBDATA *gb_main)
void ED4_popup_gc_window(AW_window *awp, AW_gc_manager *gcman)
GBDATA * GB_find_string(GBDATA *gbd, const char *key, const char *str, GB_CASE case_sens, GB_SEARCH_TYPE gbs)
#define AWAR_PV_CURSOR_CS_2
GBDATA * GBT_create_alignment(GBDATA *gb_main, const char *name, long len, long aligned, long security, const char *type, const char *why_created)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
static int giNewAlignments
#define AWAR_PV_MARKED_FS_2
void SET_aaColor(const char *aaSeq)
int is_sequence_terminal() const
#define AWAR_PV_CURSOR_FS_3
GB_transaction ta(gb_var)
static void PV_AddNewAAseqTerminals(ED4_sequence_terminal *seqTerminal, ED4_species_manager *speciesManager)
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
GB_ERROR GBT_check_data(GBDATA *Main, const char *alignment_name)
GBDATA * GBT_get_presets(GBDATA *gb_main)
GB_CSTR GBT_get_name_or_description(GBDATA *gb_item)
int is_spacer_terminal() const
#define AWAR_PV_CURSOR_CS_1
ED4_manager * get_parent(ED4_level lev) const
#define AWAR_PROTVIEW_COMPLEMENTARY_STRAND_3
GBDATA * GB_entry(GBDATA *father, const char *key)
int is_species_name_terminal() const
char * GBS_global_string_copy(const char *templat,...)
NOT4PERL GB_ERROR GBT_determine_T_or_U(GB_alignment_type alignment_type, char *T_or_U, const char *supposed_target)
const char * getAminoAcidAbbr(char aa)
ED4_window * get_most_recently_used_window() const
GB_write_int const char s