graphical user interface of CEDAR
When you start CEDAR, this is (kind of) what is looks like:
The central part of the main window is the architecture area. Here, you can assemble dynamic field architectures by drag-and-drop. The elements you can use to assemble architectures are shown at the top in the elements area.
Drag an element (for example, a "NeuralField") from the elements area onto the architecture area and drop it there; this will create a new instance of the element (for example, a neural field) in your architecture that you can simulate or connect to other elements.
Inside the architecture area, you can left-click an element to select it and bring up a list of all its parameters in the properties area. This enables you to change parameters of elements on the fly, most of them even during simulations. You can right-click elements in the architecture area to bring up a list of actions, most notably opening different types of plots for the element.
To delete an element from the architecture area, first select it with a left-click and then press the delete key on your keyboard.
Inputs, outputs, and connections
Elements can have multiple inputs and outputs; both are optional. Inputs are shown as small circles hovering on the left side of an element; outputs are circles on the right side of an element. Two elements, A and B, can be connected such that the output of element A becomes the input of element B. To do so, draw a line from the output of element A to the input of element B. The line should turn green if everything worked. If it turns red, there is a problem with the connection - most often the size or dimensionality of the input does not match that of the element getting the input.
Usually, you can only connect one connection to any input. Some elements (for example, the neural field) have special inputs that allow for multiple incoming connections. These inputs are depicted as a small diamond instead of a circle (see figure above).
Looped and non-looped
CEDAR distinguishes between looped and non-looped elements. They differ in the way their computation is triggered. A non-looped element computes a new output whenever it receives a new input. A looped element computes a new output whenever it is triggered from the outside, independent from its inputs. Looped elements are used, most notably, to implement Euler approximations of dynamical systems, which are computed as often as possible. An example of a looped element is the processing step NeuralField, an implementation of a dynamic neural field. Looped elements are depicted with a small icon in the bottom right corner (a circular arrow). This icon will turn green when a simulation is running and the element is actively computing output.
An example of a non-looped element is the processing step StaticGain, which multiplies any input with an adjustable scalar value. Non-looped elements do not have an icon in the bottom right corner and are often depicted with a smaller box in general.
Plots
To monitor the state of an architecture you are running in CEDAR, you can plot the buffer of any processing step you have used. Right-click on the step in the architecture area to open a context menu. In this menu, under "plot", you will find all the buffers that can be plotted.
CEDAR automatically choses a fitting plotting type for the data in the buffer you select to plot. The figure below shows a plot of the activation of a two-dimensional dynamic neural field. The plot visualizes the activation at every position in the field using a color coding according to the color map on the right.
Once you have opened a plot window, you can adjust it by clicking on the small button with the downward arrow (top left corner) to select different types of plots. To adjust parameters of the current plot, right-click inside the plot to bring up a context menu.
Some steps, for instance NeuralField, have additional predefined plot combinations that visualize multiple buffers simultaneously. These are listed in the context menu under "defined plots". The figure below shows the "field plot" of the NeuralField step.
Recorder
You can record data from CEDAR simulations using the recorder function. For every processing step in the architecture area, you can specify which of its buffers are to be recorded and at which time intervals you want to make the recording. These settings can be accessed through the tab Recorder, on the right side of the CEDAR window, above the properties pane.
Once you have selected everything you would like to record, you can make two types of recordings.
By pressing the recording button in the top toolbar, you start a recording of the architecture of all the buffers you selected, at the time interval you selected, until you press the button a second time.
Alternatively, by pressing the snapshot button in the top toolbar, you record a momentary snapshot of the architecture. This means, CEDAR will record the content of all buffers you selected for recording only for the exact moment when you press the snapshot button. This function ignores the recording intervals.
Recordings are saved into your home directory in the folder "cedarRecordings". Each buffer is saved into a separate file. The file format is CSV (comma separated value), which is a plain text file, where values are separated by commas. Every file has a short header section that specifies the type of data in the file, for instance the dimensionality and size of a matrix you recorded (most buffers are matrices). Every line in the file represents a different recording time, which has a time-stamp at the beginning of the line.
Groups
One of the processing steps available in the elements pane at the top, is the step Group. This step does not do any processing by itself but enables you to group together sets of processing steps. You can drag steps into and out of groups, create and delete inputs and outputs to a group (through a right-click context menu).
To save some space in your architecture, you can also collapse groups into a box of the size of a regular step.
Toolbars
Above the architecture area, CEDAR has a toolbar comprising a lot of different functions. Here is a list and explanation of the most important tools you will find there.
This icon saves the current architecture (if a filename was already chosen).
These icons allow you to start/pause and reset all looped triggers in your architecture. You can also do a single step of computation, with an optional duration. The slider allows you to apply a global factor to the real-time measurements of all looped triggers, effectively slowing down or speeding up your architecture.
With these icons, you can start and stop a recording of data or save a snapshot of data. Note that you first have to select which data you want to record by selecting an element, going to the Recorder tab in the property pane and marking data to be recorded.
This icon opens the boost control widget, allowing you to control each Boost source in your architecture.
This icon opens the advanced simulation control widget, allowing you to control each trigger of the architecture separately.
These three icons allow to use a different plotting mode for connections, activate a grid for precise placement of steps and hide/show the assignment of looped elements to looped triggers in the architecture canvas.
This part of the tool bar allows you to close all open plots, hide the current plots and define custom plot groups that you can restore later. You cann show, add, rename, store, and delete custom plot groups.
Tutorial: Assembling a simple architecture
Start assembling the simple architecture by clicking on the sources tab of the elements area and drag a GaussInput into the architecture area. A new elements of this class pops up in the middle of the area. Go to the DFT tab and drag a NeuralField onto the area as well. Note that GaussInput provides an output slot, while NeuralField has both an output and an input slot. Create a connection between the output slot of the GaussInput to the input of NeuralField. A green-colored connection should appear, linking up these two slots. Start the simulation by clicking on the play button. The architecture is now running. You can inspect the ongoing processing in NeuralField by right-clicking on the element and choosing field plot. If you change the centers property of the GaussInput, you can see how a change in input affects the neural field.
This is the result of the assembly described above: