source: tags/arb_5.2/MULTI_PROBE/MP_noclass.cxx

Last change on this file was 6009, checked in by westram, 15 years ago
  • avoid call of calc_color if no tree exists
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 28.0 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <time.h>
5#include <math.h>
6
7#include <arbdb.h>
8#include <arbdbt.h>
9#include <aw_root.hxx>
10#include <aw_window.hxx>
11#include <awt.hxx>
12#include <awt_canvas.hxx>
13#include <awt_tree.hxx>
14#include <awt_dtree.hxx>
15#include <awt_tree_cb.hxx>
16
17#include "MultiProbe.hxx"
18#include "mp_proto.hxx"
19
20BOOL MP_is_probe(char *seq);
21int  get_random(int min, int max); //gibt eine Zufallszahl x mit der Eigenschaft : min <= x <= max
22void init_system3_tab();
23
24char *glob_old_seq = NULL;
25
26int        **system3_tab      = NULL;
27static int   system3_tab_size = 0;
28
29unsigned char **hamming_tab   = NULL;
30BOOL            new_pt_server = TRUE;
31struct Params   P;
32
33long k_aus_n(int k, int n) {
34    int a = n, b = 1, i;
35
36    if (k > (n / 2)) k = n - k;
37    if (k <= 0) return (k == 0);
38    for (i = 2; i <= k; n--, a *= n, b *= i, i++) ;
39    return a / b;
40}
41
42int get_random(int min,int max) {
43    mp_assert(min <= max);
44    return GB_random(max-min+1)+min;
45}
46
47void MP_new_sequence(AW_window *aww) {
48    AWUSE(aww);
49    mp_main->get_aw_root()->awar_string(MP_AWAR_SEQUENZEINGABE)->write_string("");
50
51    delete glob_old_seq;
52    glob_old_seq = NULL;
53
54    char *res = aw_input2awar("Enter target sequence", MP_AWAR_SEQUENZEINGABE);
55    free(res);
56
57    MP_take_manual_sequence(aww);
58}
59
60
61void MP_close_main(AW_window *aww)
62{
63    AWT_canvas  *ntw = mp_main->get_ntw();
64
65    if (mp_main->get_mp_window()->get_result_window())
66        mp_main->get_mp_window()->get_result_window()->hide();
67
68    GB_transaction dummy(ntw->gb_main);
69
70    AP_tree *ap_tree = AWT_TREE(ntw)->tree_root;
71    if (ap_tree) ap_tree->calc_color();
72
73    if (ntw->gb_main)
74        ntw->tree_disp->update(ntw->gb_main);
75
76    ntw->refresh();
77
78    AW_POPDOWN(aww);
79    delete mp_main->get_p_eval();
80    mp_main->set_p_eval(NULL);
81    delete mp_main->get_stc();
82    mp_main->set_stc(NULL);
83
84    delete glob_old_seq;
85    glob_old_seq = NULL;
86    new_pt_server = TRUE;
87}
88
89void MP_gen_quality(AW_root *awr,AW_CL cd1,AW_CL cd2)
90{
91    BOOL firsttime = TRUE;
92
93    AWUSE(cd1);
94    AWUSE(cd2);
95
96    if (firsttime)
97    {
98        firsttime = FALSE;
99        return;
100    }
101
102    char *probe, *new_qual, *ecol_pos;
103    char *selected = awr->awar(MP_AWAR_SELECTEDPROBES)->read_string();
104    AW_window *aww= mp_main->get_mp_window()->get_window();
105
106    if (!selected || !selected[0])
107        return;
108
109    probe = MP_get_probes(selected);
110    if (!probe || !probe[0])
111        return;
112
113    ecol_pos = MP_get_comment(3,selected);
114
115    aww->delete_selection_from_list( selected_list, selected);
116
117    new_qual = new char[5 + 7 + strlen(probe)];     //5 = Zahl und Separator und Zahl und Separator und Nullzeichen
118    sprintf(new_qual,"%1ld#%1ld#%6d#%s",mp_gl_awars.probe_quality,mp_gl_awars.singlemismatches,atoi(ecol_pos),probe);
119    delete probe;
120
121    aww->insert_selection( selected_list, new_qual, new_qual );
122    aww->insert_default_selection( selected_list, "", "" );
123    aww->sort_selection_list( selected_list, 0, 1);
124    aww->update_selection_list( selected_list );
125    awr->awar(MP_AWAR_SELECTEDPROBES)->write_string(new_qual);
126    delete new_qual;
127    delete ecol_pos;
128}
129
130void MP_modify_selected(AW_root *awr,AW_CL cd1,AW_CL cd2)   //setzt den 2.Parameter in selected_list
131{
132    char    *com1, *com2, *com3, *probes, *ptr2, temp[120];
133    AW_window   *aww = mp_main->get_mp_window()->get_window();
134    List<char>  *l = new List<char>;
135
136    AWUSE(cd1);
137    AWUSE(cd2);
138
139    aww->init_list_entry_iterator(selected_list); //initialisieren
140
141    while ((ptr2 = (char *)aww->get_list_entry_char_value())) {
142        aww->iterate_list_entry(1);
143
144        com1 =  MP_get_comment(1,ptr2);
145        com2 =  MP_get_comment(2,ptr2);
146        com3 =  MP_get_comment(3,ptr2);
147        probes =MP_get_probes(ptr2);
148
149        if (!probes || !probes[0])
150            break;
151
152        sprintf(temp,"%1d#%1ld#%6d#%s",atoi(com1), mp_gl_awars.no_of_mismatches, atoi(com3), probes);
153
154        l->insert_as_last(strdup(temp));
155
156        delete probes;
157        delete com1;
158        delete com2;
159        delete com3;
160    }
161
162    aww->clear_selection_list( selected_list );
163
164    ptr2 = l->get_first();
165    while (ptr2)
166    {
167        l->remove_first();
168        aww->insert_selection( selected_list, ptr2, ptr2 );
169        delete ptr2;
170        ptr2 = l->get_first();
171    }
172
173    aww->insert_default_selection( selected_list, "", "" );
174    aww->sort_selection_list( selected_list, 0, 1);
175    aww->update_selection_list( selected_list );
176    awr->awar(MP_AWAR_SELECTEDPROBES)->write_string("");
177
178    remembered_mismatches = mp_gl_awars.no_of_mismatches;
179    delete l;
180}
181
182void MP_gen_singleprobe(AW_root *awr,AW_CL cd1,AW_CL cd2)
183{
184    AWUSE(cd1);
185    AWUSE(cd2);
186
187    char *probe, *new_sing;
188    char *selected = awr->awar(MP_AWAR_SELECTEDPROBES)->read_string();
189    AW_window *aww= mp_main->get_mp_window()->get_window();
190
191    if (!selected || !selected[0])
192        return;
193
194    probe = MP_get_probes(selected);
195    aww->delete_selection_from_list( selected_list, selected);
196
197    new_sing = new char[5 + 7 + strlen(probe)];     //5 = Zahl und Separator und Zahl und Separator und Nullzeichen
198    sprintf(new_sing,"%1ld#%1ld#%6ld#%s",mp_gl_awars.probe_quality,mp_gl_awars.singlemismatches, mp_gl_awars.ecolipos,probe);
199    delete probe;
200
201    aww->insert_selection( selected_list, new_sing, new_sing );
202    aww->insert_default_selection( selected_list, "", "" );
203    aww->sort_selection_list( selected_list, 0, 1);
204    aww->update_selection_list( selected_list );
205    awr->awar(MP_AWAR_SELECTEDPROBES)->write_string(new_sing);
206    delete new_sing;
207}
208
209void MP_popup_result_window(AW_window *aww) {
210    AWUSE(aww);
211    mp_main->get_mp_window()->create_result_window(mp_main->get_aw_root())->activate();
212    init_system3_tab();
213}
214
215BOOL    check_status(int gen_cnt, double avg_fit, double min_fit, double max_fit)
216{
217    char view_text[150];
218
219    if (gen_cnt == 0)
220        sprintf(view_text,"Evaluating first generation");
221    else
222        sprintf(view_text,"Gen:%d Avg:%5i Min:%5i Max:%5i",gen_cnt,int(avg_fit),int(min_fit),int(max_fit));
223
224    if (aw_status(view_text) == 1)
225    {
226        aw_closestatus();
227        return FALSE;                   //Berechnungen abbrechen !!!!!!
228    }
229
230    return TRUE;
231}
232
233void init_system3_tab()
234{
235    int i, j, k,
236        size_hamming_tab,
237        hamm_dist;
238    int **dummy_int;
239    int counter, wert;
240
241    if (system3_tab) {
242        for (j=0; j< system3_tab_size; j++)
243            delete [] system3_tab[j];
244
245        delete [] system3_tab;
246    }
247    system3_tab      = new int*[mp_gl_awars.no_of_probes];
248    system3_tab_size = mp_gl_awars.no_of_probes;
249    for (j=0; j<mp_gl_awars.no_of_probes; j++)
250    {
251        system3_tab[j] = new int[3];
252        memset(system3_tab[j],0, sizeof(int) * 3 );
253    }
254
255    for (j=0; j< mp_gl_awars.no_of_probes; j++)
256    {
257        for (k=0; k<3; k++)
258        {
259            if (!j) system3_tab[j][k] = k;
260            else    system3_tab[j][k] = system3_tab[j-1][k] * 3;
261        }
262    }
263
264
265    //** hamming_tab
266        if (hamming_tab)
267            delete [] hamming_tab;
268
269        size_hamming_tab = (int)pow(3.0, (double) mp_gl_awars.no_of_probes);
270        hamming_tab = new unsigned char*[size_hamming_tab];
271        dummy_int = new int*[size_hamming_tab];
272
273        for (i=0; i<size_hamming_tab; i++)
274        {
275            hamming_tab[i] = new unsigned char[size_hamming_tab];
276            memset(hamming_tab[i], 0, sizeof(unsigned char) * size_hamming_tab );
277
278            dummy_int[i] = new int[mp_gl_awars.no_of_probes];
279            memset(dummy_int[i], 0, sizeof(int) * mp_gl_awars.no_of_probes);
280        }
281
282        counter = 1;
283        for (i=0; i< mp_gl_awars.no_of_probes; i++)
284        {
285            for (j=0; j<size_hamming_tab; j++)
286            {
287                for (wert = 0; wert < 3; wert++)
288                {
289                    for (k=0; k<counter; k++)
290                    {
291                        dummy_int[j++][i] = wert;
292                    }
293                }
294                j--;
295            }
296            counter *= 3;
297        }
298
299        for (i=0; i<size_hamming_tab; i++)
300        {
301            for (j=0; j<size_hamming_tab; j++)
302            {
303                hamm_dist = 0;
304                for (k=0; k<mp_gl_awars.no_of_probes; k++)
305                {
306                    if ((dummy_int[i][k] == 2 && dummy_int[j][k] == 0) ||
307                        (dummy_int[i][k] == 0 && dummy_int[j][k] == 2))
308                        hamm_dist++;
309                }
310                hamming_tab[i][j] = hamm_dist;
311            }
312        }
313        /*
314          for (i=0; i<size_hamming_tab; i++)
315          {
316          for (j=0; j<size_hamming_tab; j++)
317          {
318          printf("%d ", hamming_tab[i][j]);
319          }
320          printf("\n");
321
322          }
323        */
324
325        for (i=0; i<size_hamming_tab; i++)
326        {
327            delete [] dummy_int[i];
328        }
329        delete [] dummy_int;
330
331
332
333}
334
335void MP_compute(AW_window *aww)
336{
337    AW_root         *aw_root    = mp_main->get_aw_root();
338    AW_window           *aww2;
339    int             i       = 0;
340    int             *bew_array;
341    char            *ptr, *ptr2, *qual;
342    char            **probe_field;
343    int             *single_mismatch;
344    ProbeValuation      *p_eval = NULL;
345
346
347    if (aww->get_no_of_entries( selected_list )-1 < mp_gl_awars.no_of_probes)
348    {
349        aw_message("Not enough probes selected for computation !!!");
350        return;
351    }
352
353    if (mp_main->get_stc())
354    {
355        delete mp_main->get_stc();
356        mp_main->set_stc(NULL);
357        new_pt_server = TRUE;
358    }
359
360    init_system3_tab();
361
362    aww2 = mp_main->get_mp_window()->create_result_window(aw_root);
363
364    aww2->clear_selection_list( result_probes_list );
365    aww2->insert_default_selection( result_probes_list, "", "");
366    aww2->update_selection_list( result_probes_list);
367
368    aww->init_list_entry_iterator(selected_list); //initialisieren
369    probe_field = new char*[aww->get_no_of_entries(selected_list)-1];       //-1 wegen default entry
370    bew_array   = new int[aww->get_no_of_entries(selected_list)-1];
371    single_mismatch = new int[aww->get_no_of_entries(selected_list)-1];
372
373    aw_openstatus("Computing multiprobes");
374
375    while ((ptr2 = (char *)aww->get_list_entry_char_value()))
376    {
377        aww->iterate_list_entry(1);
378        ptr = MP_get_probes(ptr2);      //hier sind es einfachsonden
379        if (ptr && ptr[0] != ' ' && ptr[0] != '\t' && ptr[0] != '\0') {
380            qual         = MP_get_comment(1,ptr2);
381            bew_array[i] = atoi(qual);
382            free(qual);
383
384            qual               = MP_get_comment(2,ptr2);
385            single_mismatch[i] = atoi(qual); //single mismatch kann zwar eingestellt werden, aber wird noch nicht uebergeben
386            free(qual);
387
388            probe_field[i++] = ptr;
389        }
390    }
391
392    p_eval = mp_main->new_probe_eval(probe_field,i,bew_array, single_mismatch);
393    p_eval->init_valuation();
394
395    if (pt_server_different)
396    {
397        pt_server_different = FALSE;
398        aw_message("There are species in the tree which are\nnot included in the PT-Server");
399    }
400
401    mp_main->destroy_probe_eval();
402
403    aw_closestatus();
404    aww2->activate();
405
406}
407
408void    MP_take_manual_sequence(AW_window *aww)
409{
410    AW_window_simple    *aws = mp_main->get_mp_window()->get_window();
411    char        *seq = mp_gl_awars.manual_sequence,
412        *new_seq;
413
414    AWUSE(aww);
415
416    if (! MP_is_probe(seq)){
417        aw_message("This is not a valid probe !!!");
418        return;
419    }
420
421
422    if (glob_old_seq){
423        aww->delete_selection_from_list( selected_list, glob_old_seq );
424    }
425
426    new_seq = new char[strlen(seq)+5+7];
427    sprintf(new_seq,"%1ld#%1ld#%6d#%s",mp_gl_awars.probe_quality,mp_gl_awars.singlemismatches,0,seq);
428
429    aws->insert_selection( selected_list,new_seq,new_seq );
430
431    aws->insert_default_selection(selected_list, "", "");
432    aws->sort_selection_list( selected_list, 0, 1);
433    aws->update_selection_list( selected_list );
434    mp_main->get_aw_root()->awar(MP_AWAR_SEQUENZEINGABE)->write_string("");
435    mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->write_string(new_seq);
436    delete new_seq;
437}
438
439
440void MP_cache_sonden(AW_window *) { new_pt_server = TRUE; }
441void MP_cache_sonden2(AW_root *) { new_pt_server = TRUE; }
442
443void MP_show_probes_in_tree_move(AW_window *aww, AW_CL cl_backward, AW_CL cl_result_probes_list) {
444    bool               backward           = bool(cl_backward);
445    AW_selection_list *resultProbesList = (AW_selection_list*)cl_result_probes_list;
446
447    //     aw_message(GBS_global_string("backward='%i'", int(backward)));
448
449    //     aww->move_selection(resultProbesList, mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES), backward ? -1 : 1);
450    aww->move_selection(resultProbesList, MP_AWAR_RESULTPROBES, backward ? -1 : 1);
451
452    MP_show_probes_in_tree(aww);
453}
454
455void MP_show_probes_in_tree(AW_window *aww)
456{
457    AWT_canvas *ntw                = mp_main->get_ntw();
458    char       *mism, *mism_temp;
459    char       *a_probe, *another_probe, *the_probe, *mism_temp2;
460    int         i, how_many_probes = 0;
461
462    AWUSE(aww);
463
464    {
465        char *sel = mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES)->read_string();
466        a_probe   = MP_get_probes(sel); //haelt jetzt Sondenstring
467        if (! a_probe || ! a_probe[0]) {
468            free(a_probe);
469            free(sel);
470            return;
471        }
472
473        mism_temp2 = MP_get_comment(2,sel);
474        mism_temp  = mism_temp2;
475        free(sel);
476    }
477
478    char **probe_field = new char*[MAXMISMATCHES];
479    int   *mismatches  = new int[MAXMISMATCHES];
480
481    for (i=0; i<MAXMISMATCHES; i++)
482    {
483        probe_field[i] = NULL;
484        mismatches[i] = 0;
485    }
486
487    another_probe = a_probe;
488    for (i=0; i< MAXPROBECOMBIS; i++)       //generiert  probe_field und mismatches array
489    {
490        mism = strchr(mism_temp,' ');
491        if (mism)
492            *(mism++) = 0;
493
494        mismatches[i] = atoi(mism_temp);
495        mism_temp = mism;
496
497
498        probe_field[i] = NULL;
499        the_probe = another_probe;
500        another_probe = strchr(another_probe,' ');
501        if (another_probe)
502        {
503            *(another_probe++) = 0;
504            while (*another_probe == ' ' || *another_probe == '\t')
505                another_probe++;
506        }
507        else
508        {
509            probe_field[i] = strdup(the_probe);
510            how_many_probes ++;
511            break;
512        }
513
514        if (the_probe && the_probe[0])
515        {
516            probe_field[i] = strdup(the_probe);
517            how_many_probes ++;
518        }
519    }
520
521    free(a_probe);
522    free(mism_temp2);
523
524    if (new_pt_server)
525    {
526        new_pt_server = FALSE;
527
528        if (mp_main->get_stc())
529            delete mp_main->get_stc();
530
531        mp_main->set_stc(new ST_Container(MAXSONDENHASHSIZE));
532        if (pt_server_different)
533        {
534            mp_main->set_stc(NULL);
535            new_pt_server = TRUE;
536            aw_message("There are species in the tree which are\nnot included in the PT-Server");
537            pt_server_different = FALSE;
538            return;
539        }
540    }
541
542    delete mp_main->get_stc()->sondentopf;
543    mp_main->get_stc()->sondentopf = new Sondentopf(mp_main->get_stc()->Bakterienliste,mp_main->get_stc()->Auswahlliste );
544
545    for (i=0; i<MAXMISMATCHES; i++){
546        if (probe_field[i]){
547            mp_main->get_stc()->sondentopf->put_Sonde(probe_field[i],mismatches[i], mismatches[i] + mp_gl_awars.outside_mismatches_difference);
548        }
549    }
550
551    mp_main->get_stc()->sondentopf->gen_color_hash(mp_gl_awars.no_of_probes);
552
553    GB_transaction dummy(ntw->gb_main);
554    AWT_TREE(ntw)->tree_root->calc_color_probes(mp_main->get_stc()->sondentopf->get_color_hash());
555
556    if (ntw->gb_main)
557        ntw->tree_disp->update(ntw->gb_main);
558
559    ntw->refresh();
560
561    for (i=0; i<MAXMISMATCHES; i++)
562        free(probe_field[i]);
563
564    delete [] probe_field;
565    delete [] mismatches;
566}
567
568void MP_mark_probes_in_tree(AW_window *aww)
569{
570    AWT_canvas  *ntw                = mp_main->get_ntw();
571    char        *mism, *mism_temp;
572    char        *a_probe, *another_probe, *the_probe, *mism_temp2;
573    int          i, how_many_probes = 0;
574    GBDATA      *gb_species;
575
576    AWUSE(aww);
577
578    {
579        char *sel = mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES)->read_string();
580        a_probe   = MP_get_probes(sel); //haelt jetzt Sondenstring
581        if (! a_probe || ! a_probe[0]) {
582            free(a_probe);
583            free(sel);
584            return;
585        }
586
587        mism_temp2 = MP_get_comment(2,sel);
588        mism_temp  = mism_temp2;
589    }
590
591    char **probe_field = new char*[MAXMISMATCHES];
592    int   *mismatches  = new int[MAXMISMATCHES];
593
594    for (i=0; i<MAXMISMATCHES; i++)
595    {
596        probe_field[i] = NULL;
597        mismatches[i] = 0;
598    }
599
600    another_probe = a_probe;
601    for (i=0; i< MAXPROBECOMBIS; i++)       //generiert  probe_field und mismatches array
602    {
603        mism = strchr(mism_temp,' ');
604        if (mism)
605            *(mism++) = 0;
606
607        mismatches[i] = atoi(mism_temp);
608        mism_temp = mism;
609
610        probe_field[i] = NULL;
611        the_probe = another_probe;
612        another_probe = strchr(another_probe,' ');
613        if (another_probe) {
614            *(another_probe++) = 0;
615            while (*another_probe == ' ' || *another_probe == '\t')
616                another_probe++;
617        }
618        else {
619            probe_field[i] = strdup(the_probe);
620            how_many_probes ++;
621            break;
622        }
623
624        if (the_probe && the_probe[0]) {
625            probe_field[i] = strdup(the_probe);
626            how_many_probes ++;
627        }
628    }
629
630    free(a_probe);
631    free(mism_temp2);
632
633    if (new_pt_server) {
634        new_pt_server = FALSE;
635
636        if (mp_main->get_stc())
637            delete mp_main->get_stc();
638
639        mp_main->set_stc(new ST_Container(MAXSONDENHASHSIZE));
640        if (pt_server_different)
641        {
642            mp_main->set_stc(NULL);
643            new_pt_server = TRUE;
644            aw_message("There are species in the tree which are\nnot included in the PT-Server");
645            pt_server_different = FALSE;
646            return;
647        }
648    }
649
650    delete mp_main->get_stc()->sondentopf;
651    mp_main->get_stc()->sondentopf = new Sondentopf(mp_main->get_stc()->Bakterienliste,mp_main->get_stc()->Auswahlliste );
652
653    for (i=0; i<MAXMISMATCHES; i++){
654        if (probe_field[i]){
655            mp_main->get_stc()->sondentopf->put_Sonde(probe_field[i],mismatches[i], mismatches[i] + mp_gl_awars.outside_mismatches_difference);
656        }
657    }
658    mp_main->get_stc()->sondentopf->gen_color_hash(mp_gl_awars.no_of_probes);
659
660    {
661        GB_push_transaction(ntw->gb_main);
662        GB_HASH *col_hash = mp_main->get_stc()->sondentopf->get_color_hash();
663        for (gb_species = GBT_first_species(ntw->gb_main); gb_species; gb_species = GBT_next_species(gb_species)) {
664            GB_write_flag(gb_species, GBS_read_hash(col_hash, GBT_read_name(gb_species)) > AWT_GC_BLACK);
665        }
666    }
667    GB_pop_transaction(ntw->gb_main);
668
669    GB_transaction dummy(ntw->gb_main);
670
671    if (ntw->gb_main)
672        ntw->tree_disp->update(ntw->gb_main);
673
674    ntw->refresh();
675
676    for (i=0; i<MAXMISMATCHES; i++)
677        free(probe_field[i]);
678
679    delete [] probe_field;
680    delete [] mismatches;
681
682    MP_normal_colors_in_tree(aww);
683}
684
685void MP_Comment(AW_window *aww, AW_CL com)      //Comment fuer Auswahl eintragen
686{
687    char       *new_list_string;
688    AW_root    *awr             = mp_main->get_aw_root();
689    char       *aw_str          = awr->awar(MP_AWAR_RESULTPROBESCOMMENT)->read_string();
690    char       *aw_str2         = awr->awar(MP_AWAR_RESULTPROBES)->read_string();
691    char       *comment         = ((char *) com) ? (char *) com : aw_str ;
692    char       *new_val;
693    char       *misms;
694    char        spaces[21];
695    int         len_spaces      = 0;
696    char       *ecol;
697    const char *successor_value = aww->get_element_of_index(result_probes_list,
698                                                            aww->get_index_of_element(result_probes_list, aw_str2)+1);
699
700    // remove all '#' from new comment
701    for (char *aw_str3 = aw_str; aw_str3[0]; ++aw_str3) {
702        if (aw_str3[0] == SEPARATOR[0]) {
703            aw_str3[0] = '|';
704        }
705    }
706
707    new_val = MP_get_probes(aw_str2);
708    if (!new_val || !new_val[0])
709    {
710        delete new_val;
711        return;
712    }
713
714    misms = MP_get_comment(2,aw_str2);
715    ecol = MP_get_comment(3,aw_str2);
716
717    spaces[0] = 0;
718    len_spaces = (strlen(comment) > 20) ? 20 : strlen(comment);
719
720    for (int  i=0; i< 20 - len_spaces; i++)
721        strcat(spaces, " ");
722
723    new_list_string = new char[21+strlen(aw_str2)+2*strlen(SEPARATOR)+1+strlen(ecol)+1];    //1 fuer 0-Zeichen
724    sprintf(new_list_string,"%.20s%s%s%s%s%s%s%s",comment,spaces,SEPARATOR,misms,SEPARATOR,ecol,SEPARATOR,new_val);
725    delete new_val;
726    delete misms;
727    delete ecol;
728
729    aww->delete_selection_from_list( result_probes_list, aw_str2 );
730    aww->insert_selection( result_probes_list, new_list_string, new_list_string );
731    aww->update_selection_list( result_probes_list );
732    if (awr->awar(MP_AWAR_AUTOADVANCE)->read_int() && successor_value) {
733        awr->awar(MP_AWAR_RESULTPROBES)->write_string(successor_value);
734    }
735    else {
736        awr->awar(MP_AWAR_RESULTPROBES)->write_string(new_list_string);
737    }
738    delete new_list_string;
739}
740
741void    MP_leftright(AW_window *aww)
742{
743    char *sel = mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->read_string();
744
745    if (!sel ||  !sel[0])
746        return;
747
748    aww->insert_selection( selected_list, sel, sel );
749    aww->delete_selection_from_list( probelist, sel);
750    aww->insert_default_selection( probelist, "", "" );
751    mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->write_string("");
752    aww->sort_selection_list( selected_list, 0, 1);
753    aww->update_selection_list( selected_list );
754    aww->update_selection_list( probelist );
755}
756
757void    MP_rightleft(AW_window *aww)    // von rechts nach links
758{
759    char *sel = mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->read_string();
760
761    if (!sel ||  !sel[0])
762        return;
763
764    aww->insert_selection( probelist, sel, sel );
765    aww->delete_selection_from_list( selected_list, sel);
766    aww->insert_default_selection( selected_list, "", "" );
767    mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->write_string("");
768    aww->update_selection_list( selected_list );
769    aww->sort_selection_list( probelist, 0, 1);
770    aww->update_selection_list( probelist );
771}
772
773BOOL MP_is_probe(char *seq)
774{
775    BOOL    result=TRUE;
776    char    *s,
777        *seq2;
778
779    if (! seq)
780        return FALSE;
781
782    seq2 = MP_get_probes(seq);
783    if (!seq2 || ! seq2[0])
784        return FALSE;
785
786    s = seq2;
787    while (*s && result)
788    {
789        result = result && MP_probe_tab[(unsigned char)*s];
790        s++;
791    }
792    free(seq2);
793    return result;
794}
795
796void MP_selected_chosen(AW_window *aww)
797{
798    char *selected = mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->read_string();
799    char *probe;
800
801    AWUSE(aww);
802
803    if (!selected || !selected[0])
804        return;
805
806    glob_old_seq = strdup(selected);
807
808    probe = MP_get_comment(3,selected);
809    mp_main->get_aw_root()->awar(MP_AWAR_ECOLIPOS)->write_int(atoi(probe));
810    free(probe);
811
812    probe = MP_get_comment(1,selected);
813    mp_main->get_aw_root()->awar(MP_AWAR_QUALITY)->write_int(atoi(probe));
814    free(probe);
815
816    probe = MP_get_comment(2,selected);
817    mp_main->get_aw_root()->awar(MP_AWAR_SINGLEMISMATCHES)->write_int(atoi(probe));
818    free(probe);
819
820    probe = MP_get_probes(selected);
821    mp_main->get_aw_root()->awar_string(MP_AWAR_SEQUENZEINGABE)->write_string(MP_get_probes(probe));
822    free(probe);
823}
824
825void MP_group_all_except_marked(AW_window */*aww*/) {
826    AWT_canvas  *ntw = mp_main->get_ntw();
827    NT_group_not_marked_cb(0, ntw);
828}
829
830void MP_normal_colors_in_tree(AW_window *aww)
831{
832    AWT_canvas  *ntw = mp_main->get_ntw();
833
834    AWUSE(aww);
835
836    GB_transaction dummy(ntw->gb_main);
837
838    AWT_TREE(ntw)->tree_root->calc_color();
839
840    if (ntw->gb_main)
841        ntw->tree_disp->update(ntw->gb_main);
842
843    ntw->refresh();
844}
845
846void MP_all_right(AW_window *aww)
847{
848    aww->conc_list( probelist, selected_list );
849    mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->write_string("");
850    aww->sort_selection_list( selected_list, 0, 1);
851    aww->update_selection_list( selected_list );
852    aww->update_selection_list( probelist );
853}
854
855void MP_del_all_sel_probes(AW_window *aww)
856{
857    mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->write_string("");
858    aww->clear_selection_list( selected_list );
859    aww->insert_default_selection( selected_list, "", "" );
860    aww->update_selection_list( selected_list );
861}
862
863void MP_del_all_probes(AW_window *aww)
864{
865    mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->write_string("");
866    aww->clear_selection_list( probelist );
867    aww->insert_default_selection( probelist, "", "" );
868    aww->update_selection_list( probelist );
869}
870
871void MP_del_all_result(AW_window *aww)
872{
873    mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES)->write_string("");
874    aww->clear_selection_list( result_probes_list );
875    aww->insert_default_selection( result_probes_list, "", "" );
876    aww->update_selection_list( result_probes_list );
877}
878
879void MP_del_sel_result(AW_window *aww)
880{
881    char *val = mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES)->read_string();
882    aww->delete_selection_from_list( result_probes_list, val);
883    aww->insert_default_selection( result_probes_list, "", "" );
884    mp_main->get_aw_root()->awar(MP_AWAR_RESULTPROBES)->write_string("");
885    aww->update_selection_list( result_probes_list );
886}
887
888void MP_del_sel_probes(AW_window *aww)
889{
890    char *val = mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->read_string();
891    aww->delete_selection_from_list( selected_list, val);
892    aww->insert_default_selection( selected_list, "", "" );
893    mp_main->get_aw_root()->awar(MP_AWAR_SELECTEDPROBES)->write_string("");
894    aww->update_selection_list( selected_list );
895}
896
897void MP_del_probes(AW_window *aww)
898{
899    char *val = mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->read_string();
900    aww->delete_selection_from_list( probelist, val);
901    aww->insert_default_selection( probelist, "", "" );
902    mp_main->get_aw_root()->awar(MP_AWAR_PROBELIST)->write_string("");
903    aww->update_selection_list( probelist );
904}
905
906char *MP_get_comment(int which, char *str)      //faengt bei eins an
907{
908    char *result, *first;
909    char *ret_res;
910    int i;
911
912    result = first = str;
913    result = strchr(result,'#');
914
915    for (i=1; i<which; i++)
916    {
917        first = result+1;
918        result = strchr(first,'#');
919    }
920
921    if (!result)
922        return NULL;
923
924    *result = 0;
925    ret_res = strdup(first);
926    *result = '#';
927
928    return ret_res;
929}
930
931char *MP_remove_comment(char *old_str)
932{
933    char *result = strrchr(old_str,'#');
934    char *help;
935    char *ret_res;
936
937    if (!result)
938        return strdup(old_str);
939
940    *result = 0;
941    help = old_str;
942    while (*help == ' ' || *help == '\t')
943        help ++;
944
945    ret_res = strdup(help);
946    *result = '#';
947
948    return ret_res;
949}
950
951char *MP_get_probes(char *str)
952{
953    char *result = strrchr(str,'#');
954
955    if (!result)
956        return strdup(str);
957
958    result++;
959    while (*result == ' ' || *result == '\t')
960        result ++;
961
962    return strdup(result);
963}
964
965void MP_result_chosen(AW_window *aww)
966{
967    AW_root     *aw_root    = mp_main->get_aw_root();
968    char    *str        = aw_root->awar(MP_AWAR_RESULTPROBES)->read_as_string(),
969        *new_str;
970
971    AWUSE(aww);
972
973    new_str = MP_get_comment(1, str);
974
975    aw_root->awar(MP_AWAR_RESULTPROBESCOMMENT)->write_string(new_str);
976    free(str);
977    free(new_str);
978}
979
980
981
982//
983// functions concerning the server
984//
985
986int MP_init_local_com_struct()
987{
988    const char *user = GB_getenvUSER();
989
990    if( aisc_create(mp_pd_gl.link, PT_MAIN, mp_pd_gl.com,
991                    MAIN_LOCS, PT_LOCS, &mp_pd_gl.locs,
992                    LOCS_USER, user,
993                    NULL)){
994        return 1;
995    }
996    return 0;
997}
998
999const char *MP_probe_pt_look_for_server()
1000{
1001    char choice[256];
1002    sprintf(choice,"ARB_PT_SERVER%ld",mp_gl_awars.ptserver);
1003#if defined(DEVEL_RALF)
1004#warning use GBS_ptserver_id_to_choice here ?
1005#endif // DEVEL_RALF
1006    GB_ERROR error;
1007    error = arb_look_and_start_server(AISC_MAGIC_NUMBER,choice,0);
1008    if (error) {
1009        aw_message((char *)error);
1010        return 0;
1011    }
1012    return GBS_read_arb_tcp(choice);
1013}
1014
1015
1016int MP_probe_design_send_data(T_PT_PDC  pdc)
1017{
1018    if (aisc_put(mp_pd_gl.link,PT_PDC, pdc,
1019                 PDC_CLIPRESULT,    P.DESIGNCPLIPOUTPUT,
1020                 NULL)) return 1;
1021    return 0;
1022}
1023
Note: See TracBrowser for help on using the repository browser.