source: tags/cvs_2_svn/MULTI_PROBE/MultiProbe.hxx

Last change on this file was 5148, checked in by westram, 16 years ago
  • replaced global gb_main by GLOBAL_gb_main
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.0 KB
Line 
1
2#ifndef MULTIPROBE_HXX
3#define MULTIPROBE_HXX
4
5#include <mpdefs.h>     //unsere Definitionen
6#include <MP_externs.hxx>
7#include <SoTl.hxx>
8#include <string.h>
9
10#ifndef AW_AWARS_HXX
11#include <aw_awars.hxx>
12#endif
13#define mp_assert(x) arb_assert(x)
14
15class MP_Main;
16class MP_Window;
17class AW_window;
18class AW_root;
19class AW_window_simple;
20class AWT_canvas;
21class ProbeValuation ;
22
23class ST_Container;
24class Bitvector;
25class Sonde;
26
27#ifndef MP_PROBE_HXX
28#include "MP_probe.hxx"
29#endif
30
31#define MP_AWAR_SEQUENZEINGABE      "mp/sequenzeingabe"
32#define MP_AWAR_SELECTEDPROBES      "mp/selectedprobes"
33#define MP_AWAR_PROBELIST       "mp/probelist"
34#define MP_AWAR_WEIGHTEDMISMATCHES  "mp/weightedmismatches"
35#define MP_AWAR_COMPLEMENT      "mp/complement"
36#define MP_AWAR_MISMATCHES      "mp/mismatches"
37#define MP_AWAR_PTSERVER        AWAR_PT_SERVER
38#define MP_AWAR_LOADLIST        "mp/loadlist"
39#define MP_AWAR_RESULTPROBES        "mp/resultprobes"
40#define MP_AWAR_RESULTPROBESCOMMENT "mp/resultprobescomment"
41#define MP_AWAR_NOOFPROBES      "mp/noofprobes"
42#define MP_AWAR_QUALITY         "mp/quality"
43#define MP_AWAR_SINGLEMISMATCHES        "mp/singlemismatches"
44#define MP_AWAR_OUTSIDEMISMATCHES   "mp/outsidemismatches"
45#define MP_AWAR_QUALITYBORDER1      "mp/qualityborder1"
46#define MP_AWAR_GREYZONE        "mp/greyzone"
47#define MP_AWAR_EMPHASIS        "mp/emphasis"
48#define MP_AWAR_ECOLIPOS        "mp/ecolipos"
49#define MP_AWAR_AUTOADVANCE     "mp/auto_advance"
50
51#define MINQUALITY  1.0     // schlechteste Qualitaet einer Sonde
52#define MAXQUALITY  5.0     // beste Qualitaet einer Sonde
53#define QUALITYDEFAULT  3
54#define MAXPROBECOMBIS  6       // Maximale Anzahl der Sondenkombinationen
55#define MAXMISMATCHES   6       // von 0 bis 5 !!!!
56#define MAXRESULTSINLIST    40  //groesse der Ergebnisliste, die im Ergebnisfenster angezeigt wird
57#define FITNESSSCALEFACTOR  10  //wird benutzt um intern die hammingtabelle feiner zu granulieren
58//siehe probe_combi_statistic::calc_fitness
59
60#define MULTROULETTEFACTOR  10  //macht aus z.B. 4,231 42
61#define MAXINITPOPULATION 50        // Ausgangsgroesse der Population
62#define MAXPOPULATION   MAXINITPOPULATION
63#define CROSSOVER_WS    60      // Crossoverwahrscheinlichkeit liegt bei CROSSOVER_WS Prozent !!!
64#define MUTATION_WS 33      // Mutationswahrscheinlichkeit liegt bei 1/MUTATION_WS Prozent!!!
65#define SIGMATRUNCATION_CONST 2     // die Standardwerte liegen zwischen 1 und 3
66#define C_MULT      1.4     // Werte zwischen 1.2 und 2.0
67//#define USE_SIGMATRUNCATION       // diesen Namen definieren, wenn sigma_truncation in der linearen Skal. (=fitness skalierung) verwendet werden soll
68//#define USE_LINEARSCALING     // diesen Namen definieren, wenn lineare_skalierung (=fitness skalierung) verwendet werden soll
69//#define USE_DUP_TREE          //definieren, wenn eine Sondenkombination nur einmal pro generation vorkommen darf !!!
70
71#define ABS(x)          (x<0) ? -x : x
72#define LIST(TYP)       ((List<Sonde>*) TYP)
73
74#define MAXSONDENHASHSIZE   1000        //max 1000 Sonden koennen gecached werden, bei Bedarf aendern !!!!
75
76
77typedef struct
78{
79    char    *manual_sequence;
80    char    *selected_probes;
81    char    *probelist;
82    char    *result_probes;
83    char    *result_probes_comment;
84    float   outside_mismatches_difference;
85    long    weightedmismatches;
86    long    complement;
87    long    no_of_mismatches;
88    long    no_of_probes;
89    long    singlemismatches;
90    long    ptserver;
91    long    probe_quality;
92    long    qualityborder_best;
93    long    emphasis;
94    long    ecolipos;
95    float   min_weight;
96    float   max_weight;
97    float   greyzone;
98}awar_vars;
99
100class AW_selection_list;
101extern BOOL Stop_evaluation;
102extern AW_selection_list *selected_list;            //globale id's fuer
103extern AW_selection_list *probelist;            //identifizierung der Listen
104extern char MP_probe_tab[256];
105extern AW_selection_list *result_probes_list;
106extern int  remembered_mismatches;
107extern int  anz_elem_marked;
108extern int  anz_elem_unmarked;
109extern unsigned char **hamming_tab;
110extern int  **system3_tab;
111extern int  outside_mismatches;
112extern BOOL pt_server_different;
113extern BOOL new_pt_server;
114
115long            k_aus_n(int k, int n);                      // Berechnung k aus n
116extern int      get_random(int min, int max);       //gibt eine Zufallszahl x mit der Eigenschaft : min <= x <= max
117
118//********************************************************
119
120extern GBDATA    *GLOBAL_gb_main; //global gb_main
121extern MP_Main   *mp_main;
122extern awar_vars  mp_gl_awars;  //globale Variable, die manuell eingegebene Sequenz enthaelt
123
124//********************************************************
125
126
127
128class MP_Main
129{
130private:
131    MP_Window   *mp_window;
132    AW_root *aw_root;
133    AWT_canvas  *ntw;
134    ST_Container *stc;
135    ProbeValuation *p_eval;
136private:
137    void    create_awars();
138
139
140
141public:
142    MP_Window   *get_mp_window()    { return mp_window; };
143    AW_root *get_aw_root()      { return aw_root; };
144    AWT_canvas  *get_ntw()      { return ntw; };
145    ProbeValuation *get_p_eval()    { return p_eval; };
146    ST_Container *get_stc()         { return stc; };
147    void    set_stc(ST_Container *stopfC) { stc = stopfC;}
148    void    set_p_eval (ProbeValuation *y) { p_eval = y; };
149    ProbeValuation  *new_probe_eval(char **field, int size, int* array, int *mismatches);
150    void        destroy_probe_eval();
151
152    MP_Main(AW_root *awr,AWT_canvas *ntwt);
153    ~MP_Main();
154};
155
156
157
158class MP_Window
159{
160private:
161    AW_window_simple *aws;
162    AW_window_simple *result_window;
163
164private:
165    void        build_pt_server_list();
166    //zeigt auf naechstes Zeichen
167
168public:
169    AW_window_simple    *get_window()       { return aws; };
170    AW_window_simple    *get_result_window()    { return result_window; };
171
172    AW_window_simple *create_result_window(AW_root *aw_root);
173    //     char          *load_selection_list(  AW_window *aww, int selection_list, char *filename); //modifiziert von AW_window
174
175    MP_Window(AW_root *aw_root);
176    ~MP_Window();
177};
178
179
180
181//*****************************************************
182// Globale Klassenlose Funktionen
183//*****************************************************
184void    MP_compute(AW_window *);
185
186class MP_list
187// class which implements a general purpose linked list of void*
188{
189public:
190    MP_list_elem           *first;
191    MP_list_elem           *last;
192    long                   no_of_entries;
193
194    void            append_elem( void *elem );
195    void            delete_elem( void *elem );
196    void            append_elem_backwards( void *elem );
197    short           is_elem( void *elem );
198
199    MP_list();
200    ~MP_list();
201};
202
203
204
205
206//##################################### Bakt_Info ###########################
207class Bakt_Info
208{
209private:
210    char*       name;
211    long        hit_flag;
212
213public:
214    char*       get_name() {return name;};
215    long        inc_hit_flag() { return(++hit_flag);};
216    long        get_hit_flag() { return(hit_flag);};
217    void        kill_flag() { hit_flag = 0; };
218
219    Bakt_Info(const char* n);
220    ~Bakt_Info();
221};
222//##################################### Hit #####################################
223class Hit
224{
225    //nds
226private:
227    double  *mismatch;
228    long    baktid;
229
230public:
231    double*     get_mismatch()  { return mismatch; };
232    long    get_baktid()    { return baktid; };
233    void    set_mismatch_at_pos(int pos, double mm) { mismatch[pos] = mm; };
234    double  get_mismatch_at_pos(int pos) { return mismatch[pos]; };
235
236    Hit(long baktnummer);
237    ~Hit();
238};
239
240//##################################### Sondentopf ##################################
241class probe_tabs;
242
243class Sondentopf
244{
245private:
246    List<void*>     *Listenliste;
247    GB_HASH     *color_hash;
248    MO_Liste        *BaktList;
249    MO_Liste        *Auswahllist;
250
251public:
252    probe_tabs*     fill_Stat_Arrays();
253    double**        gen_Mergefeld();
254    void        put_Sonde(char *name, int allowed_mis, double outside_mis);
255    long        get_length_hitliste();
256    void        gen_color_hash(positiontype anz_sonden);
257    GB_HASH         *get_color_hash() { return color_hash;};
258
259    Sondentopf(MO_Liste *BL, MO_Liste *AL);
260    ~Sondentopf();
261};
262//##################################### Sonde #####################################
263class Sonde
264{
265private:
266    char*       kennung;        // Nukleinsaeuren, z.B. "atgatgatg"
267    Bitvector*      bitkennung;     // Sonde 1 Platz eins, ...zwei..., ... Analog zum Aufbau der Listenliste
268    Hit         **hitliste;     // start bei index 0, letztes element enthaelt NULL
269    long        length_hitliste;
270    long        minelem;
271    long        maxelem;
272    positiontype    kombi_far,kombi_mor;
273    long        *Allowed_Mismatch;
274    double      *Outside_Mismatch;
275
276public:
277    double              get_Allowed_Mismatch_no(int no) { return ( (Allowed_Mismatch) ? Allowed_Mismatch[no] : 100);};
278    double              get_Outside_Mismatch_no(int no) { return ( (Outside_Mismatch) ? Outside_Mismatch[no] : 100);};
279    char*       get_name(){ return kennung; };
280    Hit*        get_hitdata_by_number(long index);
281    Hit**       get_Hitliste() {    return hitliste;};
282    long        get_length_hitliste(){     return length_hitliste;};
283    long        get_minelem() { return minelem;};
284    long        get_maxelem() { return maxelem;};
285    positiontype    get_far() { return kombi_far; };
286    positiontype    get_mor() { return kombi_mor; };
287    Bitvector*      get_bitkennung() { return bitkennung;};
288
289    void        set_Allowed_Mismatch_no(int pos, int no) { Allowed_Mismatch[pos] = no; };
290    void        set_Outside_Mismatch_no(int pos, int no) { Outside_Mismatch[pos] = no; };
291    void        set_bitkennung(Bitvector* bv);  //Setzt eine Leere Bitkennung der laenge bits
292    void        set_name(char* name) {  kennung = strdup(name); };
293    void        set_Hitliste(Hit** hitptr) {     hitliste = hitptr;};
294    void        set_length_hitliste(long lhl) { length_hitliste = lhl;} ;
295    void        set_minelem(long min) { minelem = min;};
296    void        set_maxelem(long max) {maxelem = max;};
297    void        set_far(positiontype far) {  kombi_far = far; };
298    void        set_mor(positiontype mor) {  kombi_mor = mor; };
299
300    void        print();
301    void        sink(long i, long t,MO_Mismatch** A);
302    void        heapsort(long feldlaenge,MO_Mismatch** Nr_Mm_Feld);
303    double      check_for_min(long k, MO_Mismatch** probebacts, long laenge);
304
305    MO_Mismatch**   get_matching_species(BOOL match_kompl,
306                                         int match_weight,
307                                         int match_mis,
308                                         char *match_seq,
309                                         MO_Liste *convert,
310                                         long *number_of_species);
311    int         gen_Hitliste(MO_Liste *Bakterienliste);
312
313    Sonde(char* bezeichner, int allowed_mis, double outside_mis);
314    ~Sonde();
315};
316//##################################### Sondentopf Container  ###########################
317
318class ST_Container
319{
320public:
321    MO_Liste        *Bakterienliste;
322    MO_Liste        *Auswahlliste;
323    Sondentopf      *sondentopf; //Wird einmal eine Sondentopfliste
324    List<Sondentopf>    *ST_Liste;
325    int         anzahl_basissonden;
326    GB_HASH*        cachehash;
327    List<char>      *Sondennamen;
328
329    Sonde*      cache_Sonde(char *name, int allowed_mis, double outside_mis);
330    Sonde*      get_cached_sonde(char* name);
331    ST_Container(int anz_sonden);
332    ~ST_Container();
333};
334
335//##################################### MO_Liste #####################################
336/* Die Namen werden in die Hashtabelle mit fortlaufender Nummer abgespeichert
337 * Die Nummer bezeichnet das Feld in einem Array, indem momentan der B.-Name steht,
338 * spaeter
339 * aber auch z.B. ein Pointer auf eine Klasse mit mehr Informationen stehen kann
340 ACHTUNG:: Es kann passieren, dass eine Sonde mehrmals an einen Bakter bindet. Dann wird der Bakter nur einmal in die
341 Liste eingetragen, und damit ist die laenge nicht mehr aussagekraeftig. current-1 enthaelt das letzte element der liste, die
342 Liste beginnt bei 1
343*/
344
345class MO_Liste
346{
347private:
348    Bakt_Info**  mo_liste;
349    long    laenge;
350    long    current;        //zeigt auf den ersten freien eintrag
351    GB_HASH*    hashptr;
352
353
354public:
355    positiontype    fill_marked_bakts();
356    void        get_all_species();
357    long        debug_get_current();
358    long        get_laenge();
359    long        put_entry(const char* name);
360    char*       get_entry_by_index(long index);
361    long        get_index_by_entry(const char* key);
362    Bakt_Info*      get_bakt_info_by_index(long index);
363    Bakt_Info**     get_mo_liste() { return mo_liste;}
364    MO_Liste();
365    ~MO_Liste();
366};
367
368
369class Bitvector
370{
371    /* Bitpositionen sind 0 bis 7 !! */
372private:
373    char*   vector;
374    int     len;
375    int     num_of_bits;
376public:
377    int     gen_id();
378    Bitvector*  merge(Bitvector* x);
379    int     subset(Bitvector* Obermenge);
380    int     readbit(int pos);
381    int     setbit(int pos);
382    int     delbit(int pos);
383    void    rshift();
384    void    print();
385
386    char*   get_vector() { return vector; };
387    int     get_num_of_bits() { return num_of_bits;};
388    int     get_len() { return len;};
389
390    void    set_vector(char* back) { vector = back; };
391
392    Bitvector(int bits);
393    ~Bitvector();
394};
395
396#else
397#error MultiProbe.hxx included twice
398#endif
Note: See TracBrowser for help on using the repository browser.