applications/guiThe Java archive (".jar") file used to run the GUI itself is in:
applications/gui/gui/dist/gui.jarThis directory also contains a number of other ".jar" files that are necessary to run the GUI. If you want to move the GUI to another disk location it is best to simply copy the complete contents of the "dist" directory.
applications/gui/doc/intro.htmlThe guiServer application is also part of the DiFX software tree, in:
application/guiServerUsing DiFX build procedures (such as difxbuild) will compile guiServer and install it and gui.jar file in the appropriate bin directories. The ".jar" files do not need compilation.
guiServer [PORT #]The optional port number is the TCP connection port used to communicate with the GUI. If it is not specified, guiServer will use a default port number (it uses the value given by the DIFX_MESSAGE_PORT environment variable, or 50200 if that is not available). As soon as it is started, guiServer will produce a message indicating the port it is using:
server at port 50200The GUI itself is a Java program that can be run anywhere that a network connection to the DiFX cluster is available. Because the GUI and guiServer communicate using insecure TCP connections there must be no intervening firewalls between them (there are ways to deal with firewalls and in fact run the GUI anywhere - see Running DiFX Remotely). Run the GUI using its ".jar" (Java archive) file:
java -jar [GUI DIST PATH]/gui.jarThe "GUI DIST PATH" is the location of the "dist" subdirectory in the gui portion of the DiFX installation tree (see here). Once the GUI is running, the address of the DiFX Host (where guiServer is running) and the port number (what guiServer told you above) can be entered in the Settings menu to connect the two (see DiFX Control Connection in the Settings documentation for details). A proper connection will be pretty obvious - the guiServer Connection Monitor will turn green, a "connection successful" message will appear, and, assuming you have mk5daemon operating properly, the GUI should start displaying information about the components of the DiFX cluster.
For the GUI to work properly it is important that the mk5daemon process be running on every DiFX hardware component (processors, MK5 units, etc.) in the DiFX cluster. The reason for this is that mk5daemon produces the periodic "heartbeats" for each component, including such information as CPU and memory load and read/write operations. Mk5daemon is also important because it is the only way the GUI knows that a component exists and is available as a resource - without it the component will not be utilized in DiFX processing. Your DiFX cluster may be set up such that mk5daemon is started by each component when it boots, but in the event it is not you will need to log into each component (use the DIFX_USER) and start it by typing:
mk5daemon &
Soon after mk5daemon is run on a component, the component should appear in the GUI Hardware Monitor (see Monitoring the DiFX Cluster).
It is possible to run DiFX using the GUI with mk5daemon
absent on some or all components, but this is not a subject
covered
here.
The GUI has many options the user can set to govern processing,
how
data are stored, and where necessary components are located.
Most
of these needn't be touched on a job-by-job basis as long as the
GUI is
running smoothly and appears to be doing things correctly.
Below
is a list of some of the settings that are more likely to require
user
changes (each item is linked to detailed explanations). A
comprehensive list of all settings and their options is
contained in the Settings
Documentation.
Note that settings are preserved between GUI sessions, so once
you
have things set up and running properly you should be able to
restart
the GUI and have it run properly right away. You can also
save specific setting configurations to files that can later be
loaded. See here.
The Queue Browser is described in greater detail here.
The Queue Browser organizes DiFX jobs under a three-level
hierarchy
with "Experiments" at the top level.
To create a new experiment all that is required is a .vex file
and
appropriate data. The GUI will perform (or facilitate) the
various steps required to set up an experiment for DiFX processing
based on instructions from the user. In short, these steps
amount
to:
bleah
Once you have obtained .vex data from some source, the data are
displayed in the ".vex File Editor" panel. This panel
provides a
(rather rudimentary) text editor that can be used to edit the .vex
data
by hand. The final edited text is used in the .vex file
assigned
to your created experiment, a copy of which is put in your working
directory.
Some care should be taken in directly editing .vex data as it is
trivial to corrupt the .vex to the point where it can't be used
(the
DiFX operational paradigm says that users should never need to do
this), but editing this content does not alter the original source
.vex
file, only the final .vex file associated with the experiment - so
playing around with things is not permanently harmful.
The Correlation Tuning Parameters section includes values that
can
be changed to adjust the quality of the correlation results,
and/or the
total time processing takes. Adjustments to many of these
values
is something of an art in itself, and the details of what things
do and
what their "best" values should be is not covered here (some talks
at
DiFX Users Meetings have covered the subject - slides can be
viewed
here).
Each item has an associated "apply" check box. If this box
is
not checked, no instructions regarding the item will be put in the
.v2d file and
vex2difx
will be allowed to pick its own defaults. Unless you
know
what you are doing, don't check the apply box - let vex2difx
pick the values! The GUI has default values for all
items but
they are not based on anything - they are essentially
placeholders. The default values that are picked by vex2difx
are far better.
Each antenna involved in the observations described by the .vex
data
triggers the creation of a panel in the "Stations" section.
The
two-letter code station/antenna code is used as a panel title
(associated with each station is a check box that can be used to
eliminate the station from the experiment - see below).
Each
station panel contains four sub-sections: Data Source; Antenna;
Site;
and Settings.
IMAGE OF A STATION PANEL
In most cases users only make changes to the Settings and Data
Source sections.
The Data Source section tells DiFX where the data for a
particular
station/antenna can be found.
Because filling out the Data Source section can be tedious, the
DiFX
GUI provides a way of pre-defining all Data Source settings for a
station/antenna in the Settings "Job Creation Settings" section
(see Antenna
Defaults).
The Settings section contains settings for Tone, Phase
Calibration
Interval and Delta Clock. The Delta Clock value is often
gleaned
by running a "Clock Pass" on a subset of the experiment's data
(see
some sort of explanation here).
Stations
can be eliminated from individual scans by putting a "-1" in the
"code"
column within the appropriate "scan" section in the "source" .vex
data. When the GUI encounters the "-1", it will remove the
station from the scan. This duplicates hardware correlator
behavior. Starting with the .vex file snippet below, the
final
.vex file will not include the station "Bd" because of the "-1" in
the
final column.
scan 128-1703;If you do not want the GUI to pay attention to the "-1" code in this way, un-check the Eliminate Stations With "-1" Code box in the Settings menu.
start = 2014y128d17h03m34s;
mode = GEOSX8N.8F;
source = 1846+322;
station = Bd : 0 sec : 20 sec : 0 ft : 1A : &n : -1;
station = Ho : 0 sec : 20 sec : 0 ft : 1A : &n : 1;
station = Kk : 0 sec : 20 sec : 0 ft : 1A : &cw : 1;
station = Ny : 0 sec : 20 sec : 0 ft : 1A : &ccw : 1;
station = Ts : 0 sec : 20 sec : 0 ft : 1A : &cw : 1;
endscan;
The "Stations" section is primarily set up to change parameters
related to each antenna involved in an experiment, and to select
the
data sources associated with them (see above). However it
also
includes a check box that can be used to completely remove each
station
from the experiment. Any scans that no longer have enough stations
to
form a baseline (i.e. less than two) will be eliminated.
IMAGE
The "Scan/Station Timeline" section provides a visual map of all
scans and the stations used in them in a timeline. It allows
the
selection/deselection of individual stations within scans or the
inclusion of data from different stations based on time.
IMAGE
Somewhat more complex explanation here.
The "Sources" section shows all sources and the stations used to
observe them. It allows sources to be selected and
deselected,
and stations to be selectively used or eliminated from sources.
IMAGE
The Sources section is something of a work in progress, and not something anyone uses at the USNO, so it is a little confused at this point as to what it wants to be. It was developed originally with the idea that astronomical observers would be interested in sources (in geodesy they are uninteresting). Suggestions are welcome.
At any time in the scan/station selection process, the "Scan
Selection" editor will show which scans will be included in the
final
experiment (included scans are green, scans not included are
gray). It allows the user to make selections on a
scan-by-scan
basis by clicking on individual scans, or by turning all scans on
or
off using the "Select All" and "Clear All" buttons.
IMAGE OF SCAN SELECTION PANEL WITH LABELS HERE
The Scan Selection Editor includes a "Time Limits" plot that
shows
all scans from the original .vex file as a time sequence (again,
scans
in green are included, those in gray are not included). The
mouse
wheel can be used to "zoom in" on different time limits, and the
red
and blue triangles can be grabbed and dragged to limit the final
experiment in time. This widget is somewhat redundant with
the
Scan/Station Timeline Editor, but it may be useful to someone.
ssh -N -L [LOCALPORT]:[WHAT FIREWALL CALLS DIFX HEADNODE]:[CONNECTION PORT] USER@FIREWALL
When guiServer runs multi-core processes, it needs to be
able to execute things remotely on the other nodes in the DiFX
cluster. If remote keys are not set up correctly, remote
hosts
will prompt for permission keys. GuiServer has no
way of
intercepting these requests, so the runs will fail. You need
to
make sure all of your keys are in place beforehand.
To do so, log into your head node - where you are running guiServer - using the same user name (I'm calling this user name the "DiFX user" below) and network route that you are using to run guiServer itself. The latter is quite important - if you are running guiServer by logging into the head node remotely, log in again that way. If you are running guiServer from the head node console, log in that way.
Next, try using ssh to remotely log into all of the nodes
on
your cluster. If you can do so without any key or password
requests, you should be set.
Okay, let's say you can't. What do you do about it?.
The
following may work (or you may wish to bother a system
administrator or
somebody who knows what they are doing). Make sure you have
an
RSA key (in the file .ssh/id_rsa.pub
in DiFX user's home directory). If you don't, create one
with the
following command (answer any questions by hitting "return"):
ssh-keygen -t rsaYou will have to log out and log back in for the new key to be active, or type:
ssh-addThen type this for every node you are using, including the head node itself. You should use complete addresses for machine names, not aliases (it is not entirely clear that this is a problem, but we had some issues with it):
ssh-copy-id user@nodeFor instance, if your DiFX user is "difx", your head node is "king" and your other processing nodes and mark 5's are "pawn1", "pawn2", "mark5-1" and "mark5-2" you would need to do the following (as the DiFX user on "king"):
ssh-copy-id difx@kingTo test whether this has worked, you should be able to "ssh" to your DiFX user on all nodes from root on the DiFX head node without entering a password or key. If you can't do this, things are not set up right and jobs will not run. Seek professional help.
ssh-copy-id difx@pawn1
ssh-copy-id difx@pawn2
ssh-copy-id difx@mark5-1
ssh-copy-id difx@mark5-2