How to Set Up an Interactive Session
Introduction
Roles of the "intercoms" category
The "intercoms" category
provides an expandable command interpreter. It is the key mechanism
of Geant4 to realize user interactions of all categories without
being annoyed by the dependencies among categories. The direct use
of Geant4 classes in a C++ program offers a first ground level of
interactivity, i.e., the batch session. As seen in the
examples/novice/N01, Geant4 commands and macros are to be
hard-coded in the program.
User Interfaces to steer the simulation
To avoid too much programming, the
"intercoms" category provides the abstract class G4UIsession
that captures interactive commands . The concrete implementation of
the user interface and Graphical User Interfaces (GUI) is left to
the interfaces category. This interfacing strategy opens an
important door towards various user interface tools and allows
Geant4 to utilize the state-of-the-art GUI tools such as Motif and
Java, etc..The richness of the collaboration has permitted for
different groups to offer various user interfaces to the Geant4
command system. Currently available are the following;
Character terminal (dumb terminal and tcsh(bash)-like terminal),
the default user interface of Geant4,
Xm, Xaw, Win32, variations of the upper terminal by using a
Motif, Athena or Windows widget to retrieve commands, and
GAG, a fully Graphical User Interface and its extension
GainServer of the client/server type.
Full implementation of the character
terminals (1 and 2) is included in the standard Geant4 distribution
in the source/interfaces/basic directory. As for GAG
with rich GUI functionalities, its front-end classes are included
in the Geant4 distribution in the source/interfaces/GAG directory.
The corresponding GUI package is available either from the author's
Web pages (see URL below) or in the distributed package under the
environments/MOMO directory.
GAG, GainServer's client GUI Gain:
http://erpc1.naruto-u.ac.jp/~geant4
A Short Description of Available Interface Classes
G4UIterminal and G4UItcsh classes
These interfaces open a session on the character terminal.
G4UIterminal runs on all platform supported by Geant4,
including cygwin on Windows,
while G4UItcsh runs on Solaris and Linux. G4UItcsh
supports user-friendly key bindings a-la-tcsh (or bash);
^A
move cursor to the top
^B
backward cursor ([LEFT] cursor)
^C (except Windows terminal)
abort a run (soft abort) during event processing.
A program will be terminated while accepting a user command.
^D
delete/exit/show matched list
^E
move cursor to the end
^F
forward cursor ([RIGHT] cursor)
^K
clear after the cursor
^N
next command ([DOWN] cursor)
^P
previous command ([UP] cursor)
TAB
command completion
DEL
backspace
BS
backspace
In addition, the following string substitutions are supported;
%s
current application status
%/
current working directory
%h
history number
G4UIXm, G4UIXaw and
G4UIWin32 classes
These interfaces are versions of G4UIterminal
implemented over libraries Motif, Athena and WIN32 respectively.
G4UIXm uses the Motif XmCommand widget,
G4UIXaw the Athena dialog
widget, and G4UIWin32 the Windows "edit" component to do the
command capturing. These interfaces are useful if working in
conjunction with visualization drivers that use the Xt library or
the WIN32 one.
A command box is at disposal for entering or recalling Geant4 commands.
Command completion by typing “TAB” key is
available on the command line. The shellcommands "exit, cont,
help, ls, cd..." are also supported. A menu bar could be customized
through the AddMenu and
AddButton method. Ex:
/gui/addMenu
test Test
/gui/addButton
test Init /run/initialize
/gui/addButton
test "Set gun" "/control/execute gun.g4m"
/gui/addButton
test "Run one event" "/run/beamOn 1"
G4UIXm runs on Unix/Linux with Motif. G4UIXaw,
less user friendly, runs on Unix with Athena widgets.
G4UIWin32 runs on Windows.
G4UIGAG and G4UIGainServer classes
They are the front-end classes of Geant4 which interface with their
respective graphical user interfaces, GAG (Geant4 Adaptive GUI) and Gain
(Geant4 adaptive interface for network). While GAG must run on the same
system (Windows or Unixen) as a Geant4 application, Gain can run on a
remote system (Windows, Linux, etc.) to which JVM (Java Virtual
Machine) is installed. A Geant4 application is invoked on a Unix
(Linux) system and behaves as a network server. It opens a port,
waiting the connection from the Gain. Gain is capable to connect to
multiple Geant4 "servers" on Unixen systems at different
institutes.
Client GUI, GAG and Gain have almost similar look-and-feel. So,
GAG's functionalities are briefly introduced here. Please refer to
the above URL for details and to download the client GUIs.
GAG is a Graphical User Interface tool with which user
can set parameters and execute commands. It is adaptive, since GAG
reflects the internal states of Geant4 that is a state machine. GAG
is based on the server-client model; GAG is the server, while
Geant4 executables are clients. Hence, GAG does nothing by itself
and it must invoke an executable simulation program. Geant4's
front-end class G4UIGAG must be instantiated to
communicate with GAG. This runs on Linux and Windows 2000.
GAG is written in Java and
its Jar (Java Archive) file is available from the above URL. See
the same pages to know how to install and run Java programs.
GAG has following functions.
GAG Menu:
The menus are to choose and run a GEANT4 executable file, to kill or exit
a GEANT4 process and to exit GAG. Upon the normal exit or an
unexpected death of the Geant4 process, GAG window are
automatically reset to accept another GEANT4 executable.
GEANT4 Command tree:
Upon the establishment of the pipe with the GEANT4 process, GAG displays
the command menu tree whose look and feel is quite similar to
Windows' file browser. Disabled commands are shown opaque. GAG
doesn ’t display commands that are just below the root of
the command hierarchy. Direct type-in field is available for such
input. Guidance of command categories and commands are displayed
upon focusing. GAG has a command history function. User can
re-execute a command with old parameters, edit the history, or save
the history to create a macro file.
Command Parameter panel:
GAG's parameter panel is the user-friendliest part. It displays parameter
name, its guidance, its type(s) (integer, double, Boolean or string),
omittable, default value(s), expression(s) of its range and candidate list(s)
(for example, of units). Range check is done by intercoms and
the error message from it is shown in the pop-up dialog box. When a
parameter component has a candidate list, a list box is
automatically displayed . When a file is requested by a command,
the file chooser is available.
Logging:
Log can be redirected to the terminal (xterm or cygwin
window) from which GAG is invoked. It can be interrupted as will,
in the middle of long session of execution. Log can be saved to a
file independent of the above redirection . GAG displays warning or
error messages from GEANT4 in a pop-up warning widget.
Building the Interface Libraries
The libraries that don't depend on external packages are made by default.
They include G4UIterminal, G4UItcsh
and G4UIGAG in libraries libG4UIbasic.a/so and
libG4UIGAG.a/so. G4UIGainServer.o is packed in
the libG4UIGAG.
To make the libraries of G4UIXm, G4UIXaw and
G4UIWin32 , respective environment variables
G4UI_BUILD_XM_SESSION,
G4UI_BUILD_XAW_SESSION or
G4UI_BUILD_WIN32_SESSION must be set
explicitly.
However, if the environment variable G4UI_NONE is
set, no interface libraries are built at all.
Build scheme of the user interface libraries is
specified in "$G4INSTALL/config/G4UI_BUILD.gmk" makefile and the
dependencies on the external packages are specified in
"$G4INSTALL/config/interactivity.gmk".
How to Use the Interface
To use a given interface
(G4UIxxx where xxx = terminal,Xm, Xaw, Win32,
GAG, GainServer) in a user's program, he has the following
lines in his main program;
// to include the class definition in his main program:
#include "G4Uixxx.hh"
// to instantiate a session of his choice and start the session
G4UIsession* session = new G4UIxxx;
session->SessionStart();
// the line next to the "SessionStart" is usually to finish the session
delete session;
For a tcsh session, the second line must be :
G4UIsession* session = new G4UIterminal(new G4UItcsh);
See the examples in "examples/novice/N0x" in which the terminal session
is used.
If the user wants to deactivate the default signal handler (soft abort)
raised by "Ctr-C", the false flag can be set in the second argument
of the G4UIterminal constructor like;
G4UIsession* session = new G4UIterminal(new G4UItcsh, false).
Again, environment variable selects a given interface. But for your
convenience, some of them are set defaults.
G4UIterminal, G4UItcsh,
G4UIGAG and G4UIGainServer
can be used without any environment
variables. Sessions not needing external packages or libraries are
always built (see "G4UI_BUILD.gmk") and linked, so the user can
instantiate one of these sessions without rebuilding the libraries
and without setting any environment variables. For backwards
compatibility with user code, as typified by geant4/examples main
programs, the C-pre-processor variables corresponding to the
original environment variables for the above three (i.e.,
G4UI_USE_TERMINAL,
G4UI_USE_TCSH and
G4UI_USE_GAG ) are set. However,
if he/she sets no environment variables, then the C-pre-processor variable
G4UI_USE_TERMINAL is set by default,
although there is no need to use it.
The environment variable G4UI_USE_XM,
G4UI_USE_XAW or
G4UI_USE_WIN32 must be set to use the
respective interface. The file "$G4INSTALL/config/interactivity.gmk"
resolves their dependencies on external packages.
If the environment variable G4UI_NONE is
set, no externa ibraries are selected. Also, for your convenience, if any
G4UI_USE_XXX environment variable is set,
then the corresponding C-pre-processor flag is also set. However, if the
environment variable G4UI_NONE is set,
no C-pre-processor flags are set.