GUI package¶
Graphical User Interface¶
GUI main class - Charter¶
Main class for Cadbiom gui
-
class
cadbiom_gui.gt_gui.charter.
Charter
(cad)[source]¶ Mainwindow class, FULL initialization of the GUI in MVC pattern
-
add_edit_mvc
(model_name, model=None, layout=False, w_destroy=True)[source]¶ Create, register and display a new edit_mvc with the given model
Parameters: model_name (<str>) – Name of the model
Key model: (optional) Chart model
Key layout: (optional) Flag to activate the default layout (hierarchical_LR). Default False.
Key w_destroy: (optional) If True, we will allow the closing of all windows associated with the EditMVC when it will be closed.
If False, we will not allow the closing of auxiliary windows; This is the case when it is called by
cadbiom_gui.gt_gui.chart_simulator.chart_simul_controler.ChartSimulControler.on_extract()
in order to extract the part of a model used in last simulation.
-
add_image
(widget, image_file)[source]¶ Add image to a Button from http://www.pygtk.org/docs/pygtk/gtk-stock-items.html
-
check_curent_model
()[source]¶ Decorator that checks if there is a current model.
It is used before the call of functions that do some processing on models.
If there is no model, the function juste returns None.
Create the buttons to control drawing
The connection is made via drawing_buttons_connect(), called in an EditMVC object.
Disable graphic editor buttons Carefull: do not change value of handler for efficiency reason
Disconnect graphic editor buttons Carefull: do not change value of handler for efficiency reason
Enable graphic editor buttons Carefull: do not change value of handler for efficiency reason
Connect the buttons to the controler of the graphic view Remember for each button the handler
-
get_em_with_model_name
(name)[source]¶ Get EditMVC object in list of edit_MVC (not used)
Parameters: name (<str>) – Name of a model Returns: EditMVC object Return type: <EditMVC>
-
import_from_xml
(xml_data, string_data=False)[source]¶ Open and parse an xml file or a text
Parameters: - xml_data (<str>) – File of a model or a model in text form.
- string_data (<boolean>) – Boolean to force xml text parsing instead of file parsing.
Handle zoom based on mouse wheel scroll event on the overview
Go to the doc of the command line
-
on_destroy
(widget, _dummy_event)[source]¶ Called when the application is exiting
- destroy if everything OK
- Prevent accidental loose of the currently modified model
-
on_display_states
(widget)[source]¶ Display influencing simple places on the selected transition
This is a callback attached to the current
ChartInfo
objectNote
Influencing places control transitions via their conditions.
Go to the doc of the GUI
Go to the example workflow
-
open_macro
(macro_node)[source]¶ Open a MacroNode state in an other tab
Parameters: macro_node (<CMacroNode>) – MacroNode to be edited
-
set_current_edit_mvc
(edm, w_destroy=True)[source]¶ Register and display a new current edit item
Key w_destroy: (optional) If True (default), the window and its children are destroyed.
-
update
(mnode)[source]¶ Observer method used by ChartControler to inform Charter that a MacroNode will be edited
=> Open the MacroNode in a new tab (but it is still linked to the current model)
-
Graph views - ChartView¶
Main views for the Cadbiom gui
Classes available and inheritance hierarchy:
-
class
cadbiom_gui.gt_gui.chart_view.
ChartPage
(width, height, drst, controler, model)[source]¶ A simple graph editor for pages: a graph area wrapped in a scroll window
-
class
cadbiom_gui.gt_gui.chart_view.
ChartView
(width, height, drawing_style, controler, model)[source]¶ Class for the main drawing window of charter
Note
Also instanciated by the overview widget.
Note
DrawingArea can capture key-press-events:
- add gtk.gdk.KEY_PRESS_MASK mask to event
- be sure that the DrawingArea has the focus by using grab_focus() on mouse events.
Todo
Optimize events handling:
- on_motion_notify: Mouse over the widget, causing multiple calls to find_element() of the top node.
- on_expose_event: When the window is covered/partially covered; all the pixmap is redrawn.
On button_press event set the focus on the current widget, then redirect the event to the controller. We need this in order to test some keyboard shortcuts in the controller.
is_focus(): Determines if the widget is the focus widget within its toplevel. (This does not mean that the has-focus property is necessarily set; has-focus will only be set if the toplevel widget additionally has the global input focus.)
Specialized ChartView for navigator (used by the overview widget)
As it says
Initialization and change in size
Redisplay drawing after cover and exposure of the window
Updating function used when the linked window is scrolled
Display a new drawing of the model
Notified by the model when changes have been made (move/delete/add item)
MVC management - EditMVC¶
Class for managing a triple (Model, View, Controler) associated with a model
-
class
cadbiom_gui.gt_gui.edit_mvc.
EditMVC
(chart, model_name, model=None, layout=False)[source]¶ Editor object composed of a MVC pattern
Each instance of EditMVC is corresponding to an independant tab in the Cadbiom GUI.
- We use the following classes:
ChartModel: Model ChartControler: Model controller NavControler: Overview controller
ChartPage: Graph editor container NavView: Graph editor overview
-
connect
(chart)[source]¶ Initialize the GUI when the user switches from an EditMVC to another
We connect the buttons and of the graphical interface to the components of the current EditMVC. Then the UI is sync with the current model
Parameters: chart (<Charter>) – Mainwindow class
GUI controllers¶
Main GUI controllers + auxiliary class (ChartClipboard)
ChartClipboard
: A clipboard to handle the copy of nodes through modelsChartControler
: A controler for graphical viewsNavControler
: A controler for navigation view (overview section in the GUI)
-
class
cadbiom_gui.gt_gui.chart_controler.
ChartClipboard
[source]¶ A clipboard used by ChartControler to handle the copy of nodes through models.
-
class
cadbiom_gui.gt_gui.chart_controler.
ChartControler
(model, clipboard)[source]¶ Implement a controler for graphical views
Used by:
- the main graph editor widget as this - NavControler for the overview widget through inheritance
Signals:
- current_change: Inform CharterInfo that the currently selected transition, model or node has changed. Used to dispatch related information in the GUI. - edit_node: Inform Charter that a MacroNode will be edited.
TODO: just show metadata on double click on another item => add a signal to inform CharterInfo objects
Parameters: - model (<ChartModel>) – Current chart model
- mouse_role (<str>) – Mouse action “select”, “resizing”, “moving”
- current_node (<CNode>) – Currently selected node
- current_node_center (<tuple <float>,<float>>) – Tuple of coordinates (x, y) of the current node
- current_handle (<int>) – Id of the node corner currently selected for resizing (only for MacroNodes)
- current_transition (<CTransition>) – Currently selected transition
- m_vscreen_coord (<tuple <float>,<float>>) – Mouse virtual screen coordinates (xloc, yloc)
- lastx (<float>) – coordinates of last click in view
- lasty (<float>) – coordinates of last click in view
- clipboard (<ChartClipboard>) – Clipboard object used to copy nodes through models
- drawing_style –
- signal_dict (<dict <str>:<list>>) – Structure to assign observers to each signal of ChartControler
- gen_name (<generator>) – Generator of unique names for new nodes
- node_copy_count (<generator>) – Generator of ints used in the naming of copied nodes
-
attach
(signal, obs)[source]¶ Register an observer for the given signal
Parameters: - signal (<str>) – Name of the signal (“current_change” or “edit_node”)
- obs (<CharterInfo> or <Charter>) – The observer
Menu appearing on right click
-
detach
(signal, obs)[source]¶ Remove an observer for the given signal
Parameters: - signal (<str>) – Name of the signal (“current_change” or “edit_node”)
- obs (<CharterInfo> or <Charter>) – The observer
-
draft_transition
(xmo, ymo)[source]¶ draw a transition arrow in dotted line @param xmo,ymo: mouse coordinates
Callback for the context menu described in context_menu()
Parameters: - action (<str>) – Option selected
- item (<CTransition> or <CNode>) – Current selected node
- widget – Widget that emitted the event
-
new_node
(node_type)[source]¶ Creation of a new node
Called during the
on_button_release()
callback.@param node_type: type of the node (string)
-
new_transition
(xmo, ymo)[source]¶ Create a new transition
Called during the
on_button_release()
callback.@param xmo, ymo: int mouse screen coordinates
-
nodes_names_generator
()[source]¶ Return a generator of names for new nodes.
Names are generated in lexicographic order and we try to avoid names that are already in the model (this is important in order to avoid overwriting of nodes).
-
notify
(signal)[source]¶ Emit a signal subsequently to a mouse action
- current_change: Tell CharterInfo that the current selection has changed
- edit_node: Tell Charter that the current MacroNode will be edited
Parameters: signal (<str>) – name of the signal
Callback when a mouse button is pressed on the DrawingArea (contained in the ChartView object)
Detect the current element under the mouse (node or transition)
Select it, and notify observers
Interpret mouse actions according to the current mouse role:
- Double click: Edit the node if it is a MacroNode - Left click: Resize (a MacroNode) or move - Right click: Open context menu
TODO: just show metadata on double click on another item
Parameters: - widget (<NavView> or <ChartView>) – gtk DrawingArea that emit the event
- event (<gtk.gdk.Event>) – gdk mouse event with attributes (x, y)
Callback when a mouse button is released on the DrawingArea (in the ChartView object)
Parameters: - widget (<NavView> or <ChartView>) – gtk DrawingArea that emit the event
- event (<gtk.gdk.Event>) – gdk mouse event with attributes (x, y)
-
on_motion_notify
(widget, event)[source]¶ Callback moving the cursor in the DrawingArea (in the ChartView object)
Parameters: - widget (<NavView> or <ChartView>) – gtk DrawingArea that emit the event
- event (<gtk.gdk.Event>) – gdk mouse event with attributes (x, y)
Controler for navigation view (overview section in the GUI) Implement a controler for navigation views
observer management
observer management
observer management
action when a mouse button is pressed
action when a mouse button is released
callback
As it says
GUI auxiliary widgets - CharterInfo¶
Widget for displaying information on the elements of the model
CharterInfo: Contains 3 classes inheriting from Info
:
-
class
cadbiom_gui.gt_gui.charter_info.
CharterInfo
(frame)[source]¶ Windows for displaying information on the elements of the model
Contains 3 classes whose role is to update in real time the fields in the GUI about the currently selected transition, model or node.
This class is directly linked to the observers of the
ChartControler
thanks to the signal current_change.
-
class
cadbiom_gui.gt_gui.charter_info.
Info
[source]¶ Abstract class
Implementing a “notes window” for metadata of transitions and nodes
Used by:
:class:`ModelInfo` :class:`NodeInfo` :class:`TransInfo`
-
class
cadbiom_gui.gt_gui.charter_info.
ModelInfo
(cin)[source]¶ Object used as a model - store information for CharterInfo
-
class
cadbiom_gui.gt_gui.charter_info.
NodeInfo
(cin)[source]¶ A component of CharterInfo used for nodes
Todo
Display node notes; move notes code from TransInfo to Info
-
set_node
(widget)[source]¶ Called when the node has been modified by a user - set the node settings, - then notify the model.
-
-
class
cadbiom_gui.gt_gui.charter_info.
TransInfo
(cin)[source]¶ A component of CharterInfo used for transitions
-
set_note
(widget)[source]¶ Associate a text note to a transition
Use the method of the parent class
Info
to display the note.
-
GUI auxiliary widgets - Miscellaneous¶
Small widgets for Cadbiom gui:
- SearchManager: List of simple nodes for searching
- SearchFrontier: Same as SearchManager but specialized on frontier nodes
- LegendWindow: Widget to display the legend
- ImportPIDParam: Widget for model importing
- ImportBioPAXParams: Widget for BioPAX model importing
-
class
cadbiom_gui.gt_gui.chart_misc_widgets.
ImportBioPAXParams
(chart, parent=None)[source]¶ Widget for BioPAX model importing
Note
requires biopax2cadbiom module
-
class
cadbiom_gui.gt_gui.chart_misc_widgets.
ImportPIDParam
(chart, parent=None)[source]¶ Widget for model importing
-
class
cadbiom_gui.gt_gui.chart_misc_widgets.
LegendWindow
(parent=None)[source]¶ Widget to display the legend
-
class
cadbiom_gui.gt_gui.chart_misc_widgets.
SearchFrontier
(chart, notebook, label)[source]¶ Same as SearchManager but specialized on frontier nodes
-
class
cadbiom_gui.gt_gui.chart_misc_widgets.
SearchManager
(chart, notebook, label)[source]¶ List of simple nodes for searching
Parameters: model_changed (<boolean>) – Flag updated to True by the model. Its value is True until the user clicks on the “update” button. This operation is manual since it can be costly. -
display_nodes
()[source]¶ Display node names on the widget
- On
set_model()
at the initialization of the model - On
on_update()
by a click on the button “update” by the user
- On
-
get_selected_or_matching_node_names
()[source]¶ Get nodes names of interest
- Methods used to find nodes:
- nodes selected in the list of the GUI
- parse regex inserted in the search entry
Note
selected items work in conjunction with regular expressions in the search entry.
Returns: List of names or None Return type: <list <str>> or None
-
on_extract
(widget)[source]¶ Extract nodes environment
- Get selected nodes
- Get all transitions of interest: - ori and ext nodes are concerned - ori or ext are concerned and the second node is a Start/Trap node
-
on_show
(widget)[source]¶ Show button callback: Show nodes of interest in the graph editor
Transitions with conditions where the selected nodes are involved are also marked
-
Property checking - controllers & widgets¶
Collection of widgets for properties checking
Classes:
ChartChecker
: GUI interface for query checkingQueryCheckingForm
: Main form of ChartChecker WindowSolutionWindow
: Show solutions found by the solverPropertyVisitor
: Used to parse places in a start property and force their use by the simulatorInhibWindow
: Show inhibitors - Not used anymore
-
class
cadbiom_gui.gt_gui.chart_checker.chart_checker_controler.
ChartChecker
(emvc, reporter, parent=None)[source]¶ Provides a GUI interface for query checking
-
class
cadbiom_gui.gt_gui.chart_checker.chart_checker_controler.
InhibWindow
(l_solutions, emvc, reporter, parent)[source]¶ Show inhibitors of the current solution
Not used anymore (code disabled)
-
class
cadbiom_gui.gt_gui.chart_checker.chart_checker_controler.
PropertyVisitor
[source]¶ Translate a SigExpression (condition of a transition) into a set of nodes that satisfy the condition.
Used to force the simulator to use nodes mentioned in a start property by the user.
Non mandatory nodes (inhibitors) are not retained. Activators can be accessed in the attribute ‘nodes’
-
visit_sig_not
(node)[source]¶ translate a not
Do not retain the subnode if it is an “ident” node. Retain only subnodes if they are in a binary expression linked by a logical “and”.
Because:
- not (a or b) is valid only if a and b are False; thus we don’t care of a and b
- not (a and b) is valid only if a or b are True, or if a and b are False; thus a and b can be True alternately and it is sufficient for us.
-
-
class
cadbiom_gui.gt_gui.chart_checker.chart_checker_controler.
QueryCheckingForm
(emvc, er_rep)[source]¶ General simple query checking; used by ChartChecker
Todo
Exemple example_model.bcx: Final property: “C” Start property: A and G
Pourquoi G se retrouve dans les places frontières des solutions et pas A ? Car c’est déjà une frontière et pas A… => bug ?
-
class
cadbiom_gui.gt_gui.chart_checker.chart_checker_controler.
SolutionWindow
(l_fsol, emvc, reporter, parent, title='')[source]¶ Show solutions (non-optimal or Minimal Activation Conditions)
???
-
on_save
(widget, all_sol=True)[source]¶ open a window to save as xml file @param all_sol : boolean - True if we take all solutions
-
on_simul
(widget)[source]¶ Launch simulation of a solution
Note
We also parse the start property since it can activate some places (other than frontiers), whose are required for the simulator to operate properly. Indeed, the simulator accepts to fire transitions only if places are activated for a given step.
Note
Mentionner une place frontière en start property va l’activer directement et graphiquement; init_places va donc la contenir et les solutions également. Cela n’est pas le cas pour une place autre, non frontière. Ici nous rétablissons simplement la liste de places init_places pour que le simulateur fonctionne correctement en activant dans le graph editor les bonnes places/transitions à chaque étape.
Todo
Mettre à jour les solutions en y ajoutant les places dans start property?
Simulation - controllers & widgets¶
Controller and auxiliary widgets for simulations with gui.
-
class
cadbiom_gui.gt_gui.chart_simulator.chart_simul_controler.
ChartSimulControler
(emvc, sim_option, reporter, init_places=None, icseq=None, parent=None)[source]¶ Control different parameters of a simulation and display panel
-
class
cadbiom_gui.gt_gui.chart_simulator.chart_simul_controler.
DisplayError
(report, model_name, text=None)[source]¶ auxiliary widget for simulator
-
class
cadbiom_gui.gt_gui.chart_simulator.chart_simul_controler.
SelectPlaceWindow
(simulator, frontier_bool)[source]¶ Select the activated place for initialization
Statical analysis - controllers & widgets¶
Collection of widgets and controlers for static analysis
-
class
cadbiom_gui.gt_gui.chart_static.chart_stat_controler.
BAGWindow
(l_fsol, emvc, reporter, parent=None)[source]¶ ???
-
class
cadbiom_gui.gt_gui.chart_static.chart_stat_controler.
ChartStatControler
(emvc, reporter)[source]¶ Control of static analysis
/!This class is fully deprecated and is no longer used /!
-
class
cadbiom_gui.gt_gui.chart_static.chart_stat_controler.
DependencyGraphWindow
(emvc, reporter, parent)[source]¶ Dialog for dependency graph analysis and export /!This class is fully deprecated and is no longer used /!
-
class
cadbiom_gui.gt_gui.chart_static.chart_stat_controler.
SCCWindow
(l_fsol, emvc, reporter, parent=None)[source]¶ Class used for displaying frontier isolated components. This class is the matherclass for Basal Activated Genes, and Information windows linked to the current model (via Static Analysis menu).
Display info on each isolated SCC
-
on_destroy
(widget)[source]¶ when leaving the window useless ? no sub window is created from this mother class and from subclasses…
Tools¶
Search areas management¶
Widgets for lists of nodes used in Cadbiom Gui
-
class
cadbiom_gui.gt_gui.utils.listDisplay.
ChoiceList
(l_names, callback, title)[source]¶ Display a list with marks (this class is not used)
-
class
cadbiom_gui.gt_gui.utils.listDisplay.
ToggleList
[source]¶ List view with toggle button (Simple/frontier nodes list)
-
set_list_pairs
(l_pairs)[source]¶ initialize from a list of pairs - all unselected @param l_pairs: list< pair<string,bool> >
-
set_list_select
(l_keywords)[source]¶ initialize from a list of name - all unselected @param l_keywords: list<string>
-
Tabs decoration¶
Utilities for notebooks
Add a close button to tab Called by :meth:create_custom_tab
Error reporters¶
To adapt message handling to different environment we use reporters
-
class
cadbiom_gui.gt_gui.utils.reporter.
CompilReporter
[source]¶ register errors and info - must be checked after compilation memory contains all the messages
Used in the GUI to show Errors from the model checking functions.
Text editors¶
Collection of widgets for text handling
-
class
cadbiom_gui.gt_gui.utils.text_page.
BioSignalEditor
(name, master, on_leave)[source]¶ Biosignal simple editor - can load and save files
Used by the Charter to view/edit the constraints of a model.
@param on_leave: method to be used when quitting the editor
-
class
cadbiom_gui.gt_gui.utils.text_page.
TextArea
(language=None)[source]¶ GtkSourceView with supplementary attributes
Graph Editor Design¶
Drawing routines¶
A drawing style contains all the information to display a chart model and its items. We use essentially two styles Navigator and Plain corresponding to the two views displayed on the gui.
Classes available:
:class:`DrawingStyle`
:class:`PlainDrawing`: For graph editor
:class:`NavDrawing`: For overview widget
:class:`Arrow`: For Transitions
-
class
cadbiom_gui.gt_gui.graphics.drawing_style.
DrawingStyle
[source]¶ Abstract class for chart model drawing
-
draw_input
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_macro
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_perm
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_simple
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_start
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_top_node
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_transition
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_transition_group
(tgr, xfv, yfv, wfv, hfv)[source]¶ Draw transitions with common extremities @param tgr: is a list of transitions with same extremities @param xfv,yfv: view coordinates of the macro node @param wfv,hfv: affinity ratios father node -> virtual screen
-
draw_trap
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
Drawing style for the overview widget
As it says
@param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
As it says
Draw transitions with common extremities @param tgr: is a list of transitions with same extremities @param xfv,yfv: view coordinates of the macro node @param wfv,hfv: affinity ratios father node -> virtual screen
@return: (v_width, v_height, 0.0)
@return: (v_width, v_height, v_h_top_limit, handle_w_limit, handle_h_limit)
@return: (v_width, v_height, v_h_top_limit)
@return: (v_width, v_height, v_h_top_limit)
@return: (v_width, v_height, 0.0)
@return:(0.0, 0.0, 0.0)
@return: (v_w_detect_limit, v_h_detect_limit
@return: (v_width, v_height, 0.0)
-
class
cadbiom_gui.gt_gui.graphics.drawing_style.
PlainDrawing
[source]¶ Main drawing style used in main window of charter
-
draw_macro
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_macro_node_gen
(view, xxr, yyr, wir, her, hlabel, name, color, line_color)[source]¶ Rectangle with round corners
-
draw_node_gen
(view, xxr, yyr, wir, her, name, color, line_color)[source]¶ @param xxr,yyr: coordinates in view @param wir, her: size in view
-
draw_perm
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
draw_simple
(node, xfv, yfv, wfv, hfv)[source]¶ @param xfv: x coordinate of father in virtual view @param yfv: y coordinate of father in virtual view @param wfv: width of father in virtual view @param hfv: height of father in virtual view
-
Layout routines¶
Layouts are performed by a visitor of the chart model
-
class
cadbiom_gui.gt_gui.layout.
LayoutVisitor
(view, layout_style)[source]¶ Visitor used to do a gt graph layout
Available layouts:
- dot - "hierarchical" or layered drawings of directed graphs. This is the default tool to use if edges have directionality. - neato - "spring model" layouts. This is the default tool to use if the graph is not too large (about 100 nodes) and you don't know anything else about it. Neato attempts to minimize a global energy function, which is equivalent to statistical multi-dimensional scaling. - fdp - "spring model" layouts similar to those of neato, but does this by reducing forces rather than working with energy. - sfdp - multiscale version of fdp for the layout of large graphs. - twopi - radial layouts, after Graham Wills 97. Nodes are placed on concentric circles depending their distance from a given root node. - circo - circular layout, after Six and Tollis 99, Kauffman and Wiese 02. This is suitable for certain diagrams of multiple cyclic structures, such as certain telecommunications networks.
See also