/***************************************************************************** FILE : $Source: /projects/higgs1/SNNS/CVS/SNNS/xgui/sources/bn_kohonen.c,v $ SHORTNAME : bn_kohonen SNNS VERSION : 4.2 PURPOSE : Bignet generator of n-Component Kohonen Networks NOTES : AUTHOR : Marcus Ritt, Marc Seemann DATE : July 13 1993 CHANGED BY : Guenter Mamier RCS VERSION : $Revision: 2.11 $ LAST CHANGE : $Date: 1998/03/03 14:09:45 $ Copyright (c) 1990-1995 SNNS Group, IPVR, Univ. Stuttgart, FRG Copyright (c) 1996-1998 SNNS Group, WSI, Univ. Tuebingen, FRG ******************************************************************************/ #include #include #include #include #include #include "ui.h" #include "kr_ui.h" #include "ui_mainP.h" #include "ui_xWidgets.h" #include "ui_utilP.h" #include "ui_textP.h" #include "ui_fileP.h" #include "ui_confirmer.h" #include "ui_control.h" #include "bn_basics.h" #include "bn_kohonen.ph" /***************************************************************************** FUNCTION : bn_createKOHONEN PURPOSE : create the kohonen bignet window. NOTES : RETURNS : UPDATE : ******************************************************************************/ void bn_createKOHONEN (void) { Widget box, panel, create_kohonen, done, dummy; Arg arg[25]; Cardinal n; char buf[40]; if(kohonen_widget_open) { XRaiseWindow (XtDisplay (baseWidget), XtWindow (baseWidget)); return; } sprintf (buf, "SNNS BigNet (Kohonen)"); n = 0; XtSetArg(arg[n],XtNminHeight,82); n++; XtSetArg(arg[n],XtNminWidth,254); n++; XtSetArg(arg[n],XtNmaxHeight,82); n++; XtSetArg(arg[n],XtNmaxWidth,254); n++; baseWidget = XtCreatePopupShell (buf, topLevelShellWidgetClass, ui_toplevel, arg, n); n = 0; box = XtCreateManagedWidget ("box", boxWidgetClass, baseWidget, arg, n); panel = XtCreateManagedWidget ("form", formWidgetClass, box, NULL, 0); dummy= ui_xCreateLabelItem("Components:",panel,80,NULL,NULL); Comp = ui_xCreateDialogItem(" ", panel, "", 30, dummy, NULL); dummy= ui_xCreateLabelItem("X-size:", panel, 80, NULL, dummy); Xsize= ui_xCreateDialogItem(" ", panel, "", 30, dummy, Comp); dummy= ui_xCreateLabelItem("Y-size:", panel, 80, Xsize, Comp); Ysize= ui_xCreateDialogItem(" ", panel, "", 30, dummy, Comp); create_kohonen = ui_xCreateButtonItem ("create_net",box,NULL,NULL); XtAddCallback(create_kohonen,XtNcallback, (XtCallbackProc)create_net_PROC,NULL); done = ui_xCreateButtonItem ("done",box,create_kohonen,NULL); XtAddCallback(done,XtNcallback,(XtCallbackProc)done_PROC,NULL); XtPopup (baseWidget, XtGrabNone); kohonen_widget_open = 1; } /***************************************************************************** FUNCTION : done_PROC PURPOSE : callback function of the done-button. NOTES : RETURNS : UPDATE : june 11 1993 ******************************************************************************/ static void done_PROC (void) { XtDestroyWidget (baseWidget); kohonen_widget_open = 0; } /***************************************************************************** FUNCTION : create_net_PROC PURPOSE : callback function of the create-button. NOTES : RETURNS : UPDATE : june 11 1993 ******************************************************************************/ static void create_net_PROC(void) { int create= TRUE; IUnits= ui_xIntFromAsciiWidget(Comp); X = ui_xIntFromAsciiWidget(Xsize); Y = ui_xIntFromAsciiWidget(Ysize); OUnits= 0; HUnits= X*Y; if ((IUnits>0) && (X>0) && (Y>0)) { if(krui_getNoOfUnits() != 0) create= ui_confirmYes("Create will erase current network. Create?"); if (create) { krui_deleteNet(); bn_kohonen_createNet(); bn_basics_refresh(); ui_confirmOk("Network created."); } } else ui_confirmOk("Wrong parameters. Use positive integers."); } /* create_net_PROC */ /***************************************************************************** FUNCTION : errChk PURPOSE : check whether an error occured during a process NOTES : RETURNS : UPDATE : june 6 1993 ******************************************************************************/ static void errChk(krui_err ret) { if (ret != 0) ui_tw_errorMessage(krui_error(ret)); } /***************************************************************************** FUNCTION : bn_kohonen_createNet PURPOSE : create the Kohonen Network NOTES : RETURNS : UPDATE : june 6 1993 ******************************************************************************/ static void bn_kohonen_createNet(void) { int i,j,unit_no; struct PosType unit_pos; krui_err ret; /* Allocate units */ ret = krui_allocateUnits( HUnits + IUnits ); errChk( ret ); /* Create standard (input) Units */ unit_pos.x = 1; for (i = 1; i <= IUnits; i++) { unit_no = krui_createDefaultUnit(); if (unit_no < 0) errChk( unit_no ); ret = krui_setUnitTType( unit_no, INPUT ); errChk( ret ); unit_pos.y = (IUnits