~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Tina6/tina-tools/tinatool/tlmedical/tlmedSroi_tool.c

Version: ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /**********
  2  *
  3  * Copyright (c) 2003, Division of Imaging Science and Biomedical Engineering,
  4  * University of Manchester, UK.  All rights reserved.
  5  *
  6  * Redistribution and use in source and binary forms, with or without modification,
  7  * are permitted provided that the following conditions are met:
  8  *
  9  *   . Redistributions of source code must retain the above copyright notice,
 10  *     this list of conditions and the following disclaimer.
 11  *
 12  *   . Redistributions in binary form must reproduce the above copyright notice,
 13  *     this list of conditions and the following disclaimer in the documentation
 14  *     and/or other materials provided with the distribution.
 15  *
 16  *   . Neither the name of the University of Manchester nor the names of its
 17  *     contributors may be used to endorse or promote products derived from this
 18  *     software without specific prior written permission.
 19  *
 20  *
 21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 31  * POSSIBILITY OF SUCH DAMAGE.
 32  *
 33  **********
 34  *
 35  * Program :    TINA
 36  * File    :  
 37  * Date    :  
 38  * Version : 
 39  * CVS Id  : 
 40  *
 41  *********
 42 */
 43 
 44 #include <stdio.h>
 45 #include <math.h>
 46 #include <string.h>
 47 
 48 #include <tina/sys/sysDef.h>
 49 #include <tina/sys/sysPro.h>
 50 #include <tina/math/mathDef.h>
 51 #include <tina/math/mathPro.h>
 52 #include <tinatool/draw/drawDef.h>
 53 #include <tinatool/draw/drawPro.h>
 54 #include <tina/image/imgDef.h>
 55 #include <tina/image/imgPro.h>
 56 #include <tina/geometry/geomDef.h>
 57 #include <tina/geometry/geomPro.h>
 58 #include <tinatool/draw/drawDef.h>
 59 #include <tinatool/draw/drawPro.h>
 60 #include <tinatool/wdgts/wdgtsDef.h>
 61 #include <tinatool/wdgts/wdgtsPro.h>
 62 #include <tinatool/tlbase/tlbase_InfrDef.h>
 63 #include <tinatool/tlbase/tlbase_InfrPro.h>
 64 
 65 #define PROFILE_MASK       1
 66 #define MSE_MASK   2
 67 
 68 #include <tina/medical/med_SroiDef.h>
 69 #include <tina/medical/med_SroiPro.h>
 70 #include <tinatool/tlmedical/tlmedSroi_poly.h>
 71 #include <tinatool/tlmedical/tlmedSroi_mouse.h>
 72 #include <tinatool/tlmedical/tlmedSroi_tool.h>
 73 #include "tlmedSroi_view.h"
 74 
 75 Imrect *tv_get_imrect(Tv *tv);
 76 /*
 77  * Prototypes
 78  *
 79  */
 80 
 81 /*
 82 extern void       *tw_fglobal();
 83 extern void       *tw_iglobal();
 84 */
 85 
 86 /*
 87  * Parameters
 88  *
 89  */
 90 
 91 static Sroi_dparams sroi_dparams;
 92 
 93 /*
 94  * Param pointers
 95  *
 96  */
 97 
 98 static Model *model = NULL;
 99 static void *normalise_choice = NULL; /* search using normalised grey level profiles */  
100 static void *global_choice = NULL; /* build joint grey level and shape PCA model assuming */
101 static void *currenttv;
102 
103 static void *ptx, *pty, *psc, *pth;
104 static void *pw0, *pw1, *pw2, *pw3, *pw4;
105 static void *pw5, *pw6, *pw7, *pw8, *pw9;
106 static void *pdtx, *pdty, *pdsc, *pdth;
107 static void *pdwx;
108 static void *ppt, *pot, *pvs, *ppv;
109 /*
110 static void *prw, *ppl;
111 */
112 static void *pmm, *ppm, *psx;
113 static void *psm, *ptm, *ptmx, *pmx, *ppx, *pgx;
114 
115 /*
116  * Local variables
117  *
118  */
119 
120 static char  pcafname[512];
121 static char  meanfname[512];
122 static char  modelfname[512];
123 static char  fname[512];
124 static char  pname[512];
125 static char  tv_namestr[256] = "";
126 
127 Model *get_model()
128 {
129   return (model);
130 }
131 
132 static void global_choice_proc(int val)
133 {
134     if (model !=NULL) prof_global_on(model, val);
135     printf(" global %d \n",val);
136 }
137 
138 static void normalise_choice_proc(int val)
139 {
140     if (model !=NULL) prof_normalise_on(model, val);
141     printf(" normalise %d \n",val);
142 }
143 
144 void set_model(Model * m)
145 {
146   if (m == NULL || m == model)
147     return;
148 
149   model_free(model);
150   model = m;
151 }
152 
153 Sroi_dparams  *sroi_get_dparams()
154 {
155     return(&sroi_dparams);
156 }
157 
158 static void reset_weights()
159 {
160   int  i;
161 
162   for (i = 4; i < PLEN; i++)
163     sroi_dparams.sparams[i] = 0.0;
164 }
165 
166 static void sroitool_tv_update(void)
167 {
168    Tv     *tv = tv_get_next ();
169 
170    if (tv!=NULL) strcpy(tv_namestr, tv->label);
171      (void)tw_sglobal_reset(currenttv);
172 }
173 
174 static void prof_check_proc(int val)
175 {
176    prof_profile_on(&sroi_dparams, val & PROFILE_MASK);
177    prof_mse_on(&sroi_dparams, val & MSE_MASK);
178 }
179 
180 static void update_dparams()
181 {
182   Model  *mdl;
183   double *mw, *M_Eval;
184   int     i;
185 
186   if ((mdl = get_model()) == NULL)
187     return;
188   
189   mw = (double *) mdl->m_weight->data;
190   M_Eval = (double *) mdl->M_Eval->data;
191   sroi_dparams.sparams[0] = mdl->tx;
192   sroi_dparams.sparams[1] = mdl->ty;
193   sroi_dparams.sparams[2] = mdl->s;
194   sroi_dparams.sparams[3] = mdl->theta;
195   
196   for (i = 0; (i < PLEN-4 && i < mdl->m_modes); i++)
197   {
198     if (M_Eval[i] != 0.0)
199       sroi_dparams.sparams[i+4] = mw[i]/M_Eval[i];
200     else 
201       sroi_dparams.sparams[i+4] = 0.0;
202   }
203   for (i = mdl->m_modes; i < PLEN - 4; i++)
204     sroi_dparams.sparams[i+4] = 0.0;
205  
206   sroi_dparams.s_min = mdl->s_min;
207   sroi_dparams.s_max = mdl->s_max; 
208   sroi_dparams.theta_min = mdl->theta_min;
209   sroi_dparams.theta_max = mdl->theta_max;
210   sroi_dparams.m_max = mdl->m_max;
211   sroi_dparams.p_max = mdl->p_max;
212   sroi_dparams.g_max = mdl->g_max;
213 
214   sroi_dparams.points = mdl->c;
215   sroi_dparams.outer = mdl->o;
216   sroi_dparams.rows = mdl->r;
217   sroi_dparams.vsize = mdl->vsize;
218   sroi_dparams.pcavsize = mdl->pcavsize;
219   sroi_dparams.m_modes = mdl->m_modes;
220   sroi_dparams.p_modes = mdl->p_modes;
221   sroi_dparams.p_length = mdl->p_length;
222 } 
223 
224 static void update_model()
225 {
226   Model  *mdl;
227   double *mw, *M_Eval;
228   int     i;
229 
230   if ((mdl = get_model()) == NULL)
231     return;
232   
233   mw = (double *) mdl->m_weight->data;
234   M_Eval = (double *) mdl->M_Eval->data;
235   mdl->tx = sroi_dparams.sparams[0]; 
236   mdl->ty = sroi_dparams.sparams[1]; 
237   mdl->s = sroi_dparams.sparams[2]; 
238   mdl->theta = sroi_dparams.sparams[3]; 
239   mdl->p_modes = sroi_dparams.p_modes;
240   mdl->m_modes = sroi_dparams.m_modes;
241   
242   for (i = 4; i < PLEN; i++)
243     sroi_dparams.lambda[i] = sroi_dparams.lambda[4];
244 
245   for (i = 0; (i < (PLEN - 4) && i < mdl->m_modes); i++)
246     mw[i] = sroi_dparams.sparams[i+4]*M_Eval[i];
247  
248   mdl->c = sroi_dparams.points; 
249   mdl->o = sroi_dparams.outer; 
250   mdl->r = sroi_dparams.rows; 
251   mdl->vsize = sroi_dparams.vsize; 
252   mdl->pcavsize = sroi_dparams.pcavsize; 
253   
254   mdl->s_min = sroi_dparams.s_min;
255   mdl->s_max = sroi_dparams.s_max;
256   mdl->theta_min = sroi_dparams.theta_min;
257   mdl->theta_max = sroi_dparams.theta_max;
258   mdl->m_max = sroi_dparams.m_max;
259   mdl->p_max = sroi_dparams.p_max;
260   mdl->g_max = sroi_dparams.g_max;
261 } 
262 
263 
264 static void flush_dialog()
265 {
266   (void) tw_fglobal_reset(ptx);
267   (void) tw_fglobal_reset(pty);
268   (void) tw_fglobal_reset(psc);
269   (void) tw_fglobal_reset(pth);
270   (void) tw_fglobal_reset(pw0);
271   (void) tw_fglobal_reset(pw1);
272   (void) tw_fglobal_reset(pw2);
273   (void) tw_fglobal_reset(pw3);
274   (void) tw_fglobal_reset(pw4);
275   (void) tw_fglobal_reset(pw5);
276   (void) tw_fglobal_reset(pw6);
277   (void) tw_fglobal_reset(pw7);
278   (void) tw_fglobal_reset(pw8);
279   (void) tw_fglobal_reset(pw9);
280   
281   (void) tw_fglobal_reset(pdtx);
282   (void) tw_fglobal_reset(pdty);
283   (void) tw_fglobal_reset(pdsc);
284   (void) tw_fglobal_reset(pdth);
285   (void) tw_fglobal_reset(pdwx);
286   
287   (void) tw_iglobal_reset(ppt);
288   (void) tw_iglobal_reset(pot);
289 /*
290   (void) tw_iglobal_reset(prw);
291 */
292   (void) tw_iglobal_reset(pvs);
293   (void) tw_iglobal_reset(ppv);
294   (void) tw_iglobal_reset(pmm);
295   (void) tw_iglobal_reset(ppm);
296 /*
297   (void) tw_iglobal_reset(ppl);
298 */
299   
300   (void) tw_fglobal_reset(psx);
301   (void) tw_fglobal_reset(psm);
302   (void) tw_fglobal_reset(ptm);
303   (void) tw_fglobal_reset(ptmx);
304   (void) tw_fglobal_reset(pmx);
305   (void) tw_fglobal_reset(ppx);
306   (void) tw_fglobal_reset(pgx);
307 }
308 
309 
310 
311 static void input_model_proc()
312 {
313   Model *mdl;
314   mdl = get_model();
315   mdl = input_model(fname,mdl);
316   update_model_sparams(mdl, &sroi_dparams);
317   set_model( mdl);
318   asm_position(mdl);
319   asm_angle_points(mdl);
320   update_dparams();
321   reset_weights();
322   flush_dialog();
323 }
324 
325 static void output_model_proc()
326 {
327   Model *mdl;
328   if ((mdl = get_model()) == NULL)
329     return;
330 
331   update_model();
332   asm_iposition(mdl);
333   asm_angle_points(mdl);
334   output_model(fname,mdl);
335 }
336 
337 static void show_model_proc()
338 {
339   Tv  *tv;
340   Model *mdl;
341 
342   if ((tv = tv_get_next()) == NULL)
343     return;
344   mdl = get_model();
345 
346   update_model();
347   asm_position(mdl);
348   asm_angle_points(mdl);
349   tv_repaint(tv);
350   draw_sample_outer(tv,mdl);
351   draw_sample_inner(tv,mdl);
352 }
353 
354 static  void sroi_mouse_proc(Tv_mouse(*func) ( /*???*/ ))
355 {
356   Tv  *tv;
357 
358   if ((tv = tv_get_next()) == NULL)
359        return;
360   
361   tv_set_mouse(tv, (*func) ());
362   (void) tv_set_activity(tv, MOUSE);
363 }
364 
365 static void export_outer_proc()
366 {
367   Tv *tv;
368 
369   if ((tv = tv_get_next()) == NULL)
370     return;
371 
372   tv_poly_set(export_outer(get_model()));
373   tv_reset_draw(tv);
374   tv_repaint(tv);
375   tv_set_color(tv, red);
376   tv_poly_draw(tv);
377 }
378 
379 static void export_inner_proc()
380 {
381   Tv *tv;
382 
383   if ((tv = tv_get_next()) == NULL)
384     return;
385 
386   tv_poly_set(export_inner(get_model()));
387   tv_reset_draw(tv);
388   tv_repaint(tv);
389   tv_set_color(tv, red);
390   tv_poly_draw(tv);
391 }
392 
393 
394 static void make_model_proc()
395 {
396   List  *poly = (List *)sroi_get_markup();
397   Imrect *im= tv_get_imrect(tv_get_next());
398   Model *mdl;
399   
400   if (im==NULL)  
401   {
402        format("error: no image to sample\n");
403        return;
404   }
405   mdl = sample_markup(poly, &sroi_dparams);
406   asm_iposition(mdl);
407   asm_angle_points(mdl);
408   draw_sample_outer(tv_get_next(),mdl);
409   draw_sample_inner(tv_get_next(),mdl);
410   set_model(mdl);
411   update_dparams();
412   reset_weights();
413   flush_dialog();
414   asm_sample_profile(im, mdl);
415 }
416 
417 
418 static void build_pca_proc()
419 {
420    sprintf(modelfname, "%s", fname);
421    sprintf(pcafname, "%s%s", fname, ".pca");
422    sprintf(meanfname, "%s%s", fname, ".mml");
423    pca_model(modelfname, pcafname, meanfname, &sroi_dparams);
424 }
425 
426 
427 static void input_pca_proc()
428 {
429    Model *mdl;
430    sprintf(pcafname, "%s%s", fname, ".pca");
431    if ((mdl = get_model()) == NULL)
432        return;
433    input_pca(pcafname, get_model());
434    tw_choice_reset(global_choice,(int)(mdl->global_on));
435    tw_choice_reset(normalise_choice,(int)(mdl->normalise_on));
436 }
437 
438 
439 static void search_proc()
440 {
441   Imrect *im;
442   Model   *mdl;
443 
444 
445   if ((im = tv_get_imrect(tv_get_next())) == NULL)
446     return;
447 
448   if ((mdl = get_model()) == NULL)
449       return;
450   update_model();
451   find_simplex(im, &sroi_dparams, mdl);
452   asm_position(mdl);
453   asm_angle_points(mdl);
454   update_dparams();
455   flush_dialog();
456   draw_sample_outer(tv_get_next(),mdl);
457   draw_sample_inner(tv_get_next(),mdl);
458 }
459 
460 
461 static void input_poly_proc()
462 {
463   Model   *mdl;
464   Tv      *tv = tv_get_next();
465   double **pos;
466 
467   if (((mdl = get_model()) == NULL) || (tv == NULL)) 
468     return;
469 
470   if ((mdl->m == NULL) || ((pos = mdl->m->el.double_v) == NULL))
471     return;
472 
473   sroi_polygon(pos, mdl->m->m, mdl->m->n, pname);
474   tv_reset_draw(tv);
475   tv_repaint(tv);
476   tv_set_color(tv, red);
477   tv_poly_draw(tv);
478 }
479 
480 
481 void init_dparams()
482 {
483   int  i;
484 
485   sroi_dparams.lambda[0] = 10.0;
486   sroi_dparams.lambda[1] = 10.0;
487   sroi_dparams.lambda[2] = 5.0;
488   sroi_dparams.lambda[3] = 0.05;
489 
490   for (i = 4; i < PLEN; i++)
491     sroi_dparams.lambda[i] = 0.5;
492   
493   sroi_dparams.sparams[0] = 0.0;
494   sroi_dparams.sparams[1] = 0.0;
495   sroi_dparams.sparams[2] = 0.0;
496   sroi_dparams.sparams[3] = 0.0;
497 
498   reset_weights();
499    
500   sroi_dparams.s_min = 0.0;
501   sroi_dparams.s_max = 70;
502   sroi_dparams.theta_min = 0.0;
503   sroi_dparams.theta_max = 2*PI;
504   sroi_dparams.m_max = 3;
505   sroi_dparams.p_max = 3;
506   sroi_dparams.g_max = 3;
507   sroi_dparams.ftol = 1e-06;
508 
509   sroi_dparams.points = 0;
510   sroi_dparams.outer = 0;
511   sroi_dparams.rows = 8;
512   sroi_dparams.vsize = 10;
513   sroi_dparams.pcavsize = 10;
514   sroi_dparams.m_modes = 8;
515   sroi_dparams.p_modes = 0;
516   sroi_dparams.p_length = 10;
517 }
518 
519 
520 
521 static void param_dialog()
522 {
523   static void  *dialog = NULL;
524 
525   if (dialog)
526   {
527     tw_show_dialog(dialog);
528     return;
529   }
530 
531   dialog = tw_dialog("smartROI Params");
532   
533   tw_label("Model  ");
534   tw_button("show", show_model_proc, NULL);
535   tw_newrow();
536   ppt = (void *) tw_iglobal(" points : ", &(sroi_dparams.points), 7);
537   pot = (void *) tw_iglobal(" outer :", &(sroi_dparams.outer), 7);
538 /* default value O.K. for co-ordinate storage (>4) NAT 
539   prw = (void *) tw_iglobal(" rows :", &(sroi_dparams.rows), 7);
540 */
541   pmm = (void *) tw_iglobal(" mdl modes :", &(sroi_dparams.m_modes), 7);
542   tw_newrow();
543   pvs = (void *) tw_iglobal(" vsize :", &(sroi_dparams.vsize), 7);
544   ppv = (void *) tw_iglobal(" pca vsize :", &(sroi_dparams.pcavsize), 7);
545   ppm = (void *) tw_iglobal(" prf modes :", &(sroi_dparams.p_modes), 7);
546 /* not used NAT
547   ppl = (void *) tw_iglobal(" prf length :", &(sroi_dparams.p_length), 7);
548 */
549   tw_newrow();
550   ptx = (void *) tw_fglobal(" tx :", &(sroi_dparams.sparams[0]), 10);
551   pty = (void *) tw_fglobal(" ty :", &(sroi_dparams.sparams[1]), 10);
552   psc = (void *) tw_fglobal(" scale :", &(sroi_dparams.sparams[2]), 10);
553   tw_newrow();
554   pth = (void *) tw_fglobal(" theta :", &(sroi_dparams.sparams[3]), 10);
555   pw0 = (void *) tw_fglobal(" w0:", &(sroi_dparams.sparams[4]), 10);
556   pw1 = (void *) tw_fglobal(" w1:", &(sroi_dparams.sparams[5]), 10);
557   tw_newrow();
558   pw2 = (void *) tw_fglobal(" w2:", &(sroi_dparams.sparams[6]), 10);
559   pw3 = (void *) tw_fglobal(" w3:", &(sroi_dparams.sparams[7]), 10);
560   pw4 = (void *) tw_fglobal(" w4:", &(sroi_dparams.sparams[8]), 10);
561   tw_newrow();
562   pw5 = (void *) tw_fglobal(" w5:", &(sroi_dparams.sparams[9]), 10);
563   pw6 = (void *) tw_fglobal(" w6:", &(sroi_dparams.sparams[10]), 10);
564   pw7 = (void *) tw_fglobal(" w7:", &(sroi_dparams.sparams[11]), 10);
565   tw_newrow();
566   pw8 = (void *) tw_fglobal(" w8:", &(sroi_dparams.sparams[12]), 10);
567   pw9 = (void *) tw_fglobal(" w9:", &(sroi_dparams.sparams[13]), 10);
568   tw_newrow();
569   
570   tw_label("Initial search");
571   
572   tw_newrow();
573   pdtx = (void *) tw_fglobal(" dtx :", &(sroi_dparams.lambda[0]), 10);
574   pdty = (void *) tw_fglobal(" dty :", &(sroi_dparams.lambda[1]), 10);
575   pdsc = (void *) tw_fglobal(" dscale :", &(sroi_dparams.lambda[2]), 10);
576   tw_newrow();
577   pdth = (void *) tw_fglobal(" dtheta :", &(sroi_dparams.lambda[3]), 10);
578   pdwx = (void *) tw_fglobal(" dwx:", &(sroi_dparams.lambda[4]), 10);
579   tw_newrow();
580 
581   tw_label("Search limits");
582 
583   tw_newrow();
584   psm = (void *) tw_fglobal(" scale min :", &(sroi_dparams.s_min), 10);
585   psx = (void *) tw_fglobal(" scale max :", &(sroi_dparams.s_max), 10); 
586   tw_newrow();
587   ptm = (void *) tw_fglobal(" theta min :", &(sroi_dparams.theta_min), 10);
588   ptmx = (void *) tw_fglobal(" theta max :", &(sroi_dparams.theta_max), 10);
589   tw_newrow();
590   pmx = (void *) tw_fglobal(" model max :", &(sroi_dparams.m_max), 10);
591   ppx = (void *) tw_fglobal(" profile max :", &(sroi_dparams.p_max), 10);
592   pgx = (void *) tw_fglobal(" global max :", &(sroi_dparams.g_max), 10);
593   
594   tw_end_dialog();
595 }
596 
597 
598 void sroi_tool(int x, int y)
599 {
600   static void *tool = NULL;
601 
602   if (tool)
603   {
604     tw_show_tool(tool);
605     return;
606   }
607   tool = tw_tool("smartROI Tool", x, y);
608 
609   init_dparams();
610   
611   tw_check("cost:", prof_check_proc, 1, "prof", "mse", NULL);
612   tw_button("smartROI params", param_dialog, NULL);
613   tw_newrow();
614   currenttv = (void *)tw_sglobal("current tv: ", tv_namestr, 20);
615   set_sroi_tool_func((void (*) ())sroitool_tv_update);
616   tw_newrow();
617   tw_sglobal("filename :", fname, 40);
618   tw_newrow();
619   tw_sglobal("polyname :", pname, 40);
620   tw_newrow();
621   tw_button("input", input_model_proc, NULL);
622   tw_button("output", output_model_proc, NULL);
623 /*
624   tw_button("sample", sroi_sample_proc, NULL);
625 */
626   tw_newrow();
627   tw_menubar("Mouse: ",
628              "markup",
629              "p axis", sroi_mouse_proc, sroi_parall_axis,
630              "r axis", sroi_mouse_proc, sroi_radial_axis,
631 /*           "markup", sroi_mouse_proc, sroi_markup_mouse,
632 */
633              NULL, NULL);
634   tw_button("make", make_model_proc, NULL);
635   tw_button("outer2roi", export_outer_proc, NULL);
636   tw_button("inner2roi", export_inner_proc, NULL);
637   tw_newrow();
638   normalise_choice = tw_choice(" Normalise:    ", normalise_choice_proc, 0,
639         "OFF", "ON", NULL);
640   global_choice = tw_choice(" Global:    ", global_choice_proc, 0,
641         "OFF", "ON", NULL);
642   tw_newrow();
643   tw_button("build pca", build_pca_proc, NULL);
644   tw_button("input pca", input_pca_proc, NULL);
645   tw_button("search", search_proc, NULL);
646   tw_newrow();
647   tw_button("poly2roi", input_poly_proc, NULL);
648   tw_end_tool();
649 }
650 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.