J.Adamczewski-Musch,
M.Al-Turany, D.Bertini, H.G.Essel, S.Linev
23 October 2008
Content
The
Go4 Analysis Framework Introduction V3.4
2.1 New
features in Go4 v3.04
(October08)
2.2 New
features in Go4 v3.03 (May07)
2.3 New features in Go4 v3.02 (July06)
2.4 New features in Go4 v3.01 (May06)
2.5 New features in Go4 v3.00
(November05)
2.6 New features in Go4 v2.10 (June05)
2.7 New features in Go4 v2.9
(February05)
2.8 New features in Go4 v2.8
(September04)
2.9 New features in Go4 v2.7 (June04)
2.10 New features in Go4 v2.6 (May04)
2.11 New features in Go4 v2.5
(December03)
2.12 New features in Go4 v2.4 (August03)
2.13 New features in Go4 v2.3 (May03)
2.14 New features in Go4 v2.2 (April03)
3.1.1 Go4 tasks with all communications
3.1.3 Other analysis functions
4.2 Event classes, interface to MBS
4.5.1 Batch or command line mode
4.5.2 Client mode controlled by Go4 GUI
4.5.3 Analysis in server mode for
multiple Go4 GUIs
4.5.4 MainUserAnalysis example
4.5.8 Start-up of the analysis slave
4.5.9 Submit settings and run analysis
4.5.10 Shutdown of the analysis client
4.5.11 Disconnect or shutdown analysis
server
5.2.3 Using the GUI with rsh or ssh
5.3 Simple example with one step
5.3.1 Main program and analysis
5.3.5 Auto-save file mechanism
5.4.1 Main program and analysis
5.4.4 Auto-save file mechanism
5.5.1 Main program and analysis:
6.1.1 File, Tools, Analysis menus
6.3.1 Launch analysis task in client
mode
6.3.2 Launch analysis task in server
mode
6.3.3 Connect to existing analysis
server
6.4.2 Analysis terminal window
6.4.3 Macro execution in the analysis
6.4.4 Auto-save file mechanism
6.4.6 User defined event sources
6.5.3 Analysis folder controls
6.5.7 Histogram server connection
6.5.8 Resetting and deleting objects
6.6.2 Remote mode (dynamic list
histogram)
6.6.3 Creating a new histogram
6.7.6 Channel and window markers
6.8.1 Conditions editing in viewpanel
marker editor
6.8.4 Conditions bound to pictures
6.11.3 Parameters containing fitters
6.13 Histogram/condition information
7 Analysis Server for ROOT macros
7.1 Methods for object registration
7.2 Methods for run control and
execution
8 Control of remote Go4 analysis from
a ROOT session
8.3 Controlling the analysis by command
9 The Go4 Composite Event Classes
11 Table of Menu Keyboard Shortcuts
Layout used in this document:
Text Times New Roman, 10 pt
Verbatim text Courier new 10 pt
Menu items Arial bold 9 pt
Class names Arial italics , 9 pt
Methods () Arial italics , 9 pt
Go4 screenshots Style
Window, Font Arial 11pt
Einfügen->Referenz->Querverweis:
Überschrift+Überschriftnummer/Seitenzahl
Einfügen->Referenz->Index
und Verzeichnisse: Eintrag festlegen, Indexeintrag+Aktuelle Seite. (search for Feld)
Index entries can be edited in text (first:second)
Index
aktualisieren (RMB)
Inhaltsverzeichnis
aktualisieren (RMB)
a.
Mbs API: streamserver connection timeout was not working correctly (leads to hangup of analysis
control when no data is delivered from streamserver).
b.
Mbs API: several errors at reading of *.lmd files with new event format 100,1
(DABC)
c.
MbsAPI , for f_stccomm.c file. Fixes problem with connecting 64 bit machine to MBS events/stream/trasnport
server. False usage of select()
function.
d.
TreeViewer swapped x/y/z coordinates, convention is
TTree::Draw("z:y:x"))
e.
Viewpanel: "Produce Picture" did not save all draw
options to picture
f.
Viewpanel: Mismatch between Go4 viewpanel range (full visible range) and ROOT user
range (referring to low edges of bins) could cause slight shift of x axis range
on canvas refresh
g.
TGo4Browser: Arrays fVisibleColumns and fIndexes has 1 item less
than required
h.
QRootApplication: in constructor numc argument must be delivered as reference.
i.
TGo4MBSViewer: status record must be cleared in constructor.
j.
Fit package concerning parameters handling when some parameters are fixed
a.
Modifications in makefiles - now only in one place in
Makefile.config one should specify platform - Linux, Solaris or Win32. Other
small changes in makefiles
b.
Small
adjustments for the new ROOT (5.17.05) browser.
c.
Adjustments
for modifications in ROOT signal-slot mechanism syntax (ROOT >=5.19/02);
this caused viewpanel crash.
d.
Two
ROOT libraries (libTree and libGpad) added to Go4 rootmap file that user Go4
analysis library can be loaded in CINT session.
e.
ThreadManager
workaround for ROOT bug in TThread::Delete() (ROOT bug report 31085): for some compilers, Go4 GUI crashed when shutting down or disconnecting analysis.
1.
Viewpanel
a.
Marker
editor: A point- or region marker and its label will pop to the pad foreground when it is selected
with left mouse button. Additionally, selection of a marker in the combo box of
the editor will let it appear frontmost.
b.
In superimpose mode selected histogram can be moved on the top of complete histogram stack via new
menu command "Select/show histo on top".
c.
Draw
options enhanced: support for TGraph draw modes and TGraphErrors error style. Reorganization of draw options for
TH1/TH2. New draw options tool for line, marker, and fill colours of histograms
and graphs.
d.
Menu
"Select" to chose active object from superimposed histograms
and graphs.
e.
Autoscale
checkbox as shortcut on top of each viewpanel
f.
Improvement in
speed of view panel redraw (up to factor of 2).
2.
Fitpanel
improvement: keep y-scaling when fitting on x subrange of histogram
3.
New
Zoom toolbar: added buttons for scaling z-axis of 2d histograms.
4.
New
icons for zoom toolbar and draw options toolbar.
5.
New
additional draw options toolbar to select commonly used drawing options by
buttons (lin/log, line, histo, some 2d styles). The new toolbar is displayed
via the RMB options pull down menu.
6.
New
example macro scalex.C to scale x-axis of histogram with linear calibration
function
7.
Settings
menu: "Show event status" selectable as default
pad option.
Settings menu: "Statistics Box..." dialog to define default pad
options for histogram statistics.
8.
TGo4Picture: new
method AddSpecialObject() to
add any ROOT graphical object (text labels, markers) to the picture
9.
Improvement in TGo4MbsFile for
partial read of lmd file: Corrected mismatch between first event index and real
event number (before: index=event number-1).
10.
TGo4MbsFile: now
can also read list-mode data of old event formats type 4,1 and 4,2. Event will
be converted implicitly into format 10,1 for further processing: User unpack
processor gets TGo4MbsEvent with
one TGo4MbsSubevent that
contains all event data.
11.
GUI command
interface TGo4AbstractInterface.
Added methods:
- GetViewPanelName() - returns view panel name
- SetViewPanelName() - changes view panel name
- RedrawPanel() - updates view panel view
- RedrawItem() - updates all views of specified items
- FindViewPanel() - searches for view panel of specified name
- GetActiveViewPanel() - returns currently active view panel
12.
Maintenance:
a.
Some Makefile and build skript improvements
b.
Added missing includes for <math.h>, required by
some compilers
c.
Due to changes in ROOT in many Go4 files includes like
TROOT.h, TMath.h, TList.h are
missing. Sometimes user should also include these files in user code.
d.
In latest ROOT TBuffer class becomes abstract, therefore one cannot use it directly
in the code. Instead, TBufferFile class
must be used.
e.
Adjustment of Makefile
because of changes in default libraries for ROOT >= 5.13/04 (separated libSpectrum.so)
f.
Adjusted Go4ThreadManager
package due to changes in TTimer copy
constructor for ROOT versions > 5.12.00
g.
Some bug fixes concerning compilation against old ROOT
versions 4.08
13.
Bug
fix
a.
for changes in ROOT>v5.14 pad cleanup: Viewpanel with go4 markers on subpads crashed
when closed or cleared.
b.
1-d histogram drawing. Due to some features of ROOT
histogram painter several draw options (lin, barchart and others) not working
after TH1::SetSumw2() is
called - in there Sumw2 array sum of squares of weights is accumulated.
Modification in Go4 code were done to avoid Sumw2 arrays when it not necessary.
c.
in Go4Socket library (missing include) because of
changes in ROOT version 5.14-00
d.
Problems with view panel scaling functionality when
build with gcc4.0.x compiler (FC5); fixed.
1.
Analsis framework: TGo4EventElement now implements default
method Fill() that calls virtual function TGo4EventSource::BuildEvent(). As a consequence, for a simple analysis the user
only has to implement BuildEvent()
method in his processor class. There is no need to
develop a user output event class. Even if a user output event class shall be used,
methods Fill() and Init() are not necessarily needed for a standard analysis. Go4ExampleSimple and Go4Example1Step were changed accordingly.
2.
Analysis framework: TGo4EventProcessor now implements BuildEvent() and can be used in
steps which are only used as handle for event input (branched steps).
3.
Macro usage: Analysis defines __
4.
Parameter editor offers popup menu GetFromFitPanel for embedded
fitters to update fitter settings from the current fit editor. Useful for
calibration parameters that should be fitted interactively to spectra (see Go4Example2Step).
5.
Rebin in GUI. Now when histogram will be rebinned via right-mouse
menu or via ROOT graphical editor, rebinning will be kept when histogram will
be updated next time from analysis. Many views of the same histogram with
different binning are possible. Binning also kept in hot-start file. TGo4Picture has new SetRebinX(), SetRebinY() methods to configure rebinning of displayed
histogram.
6.
All Go4 macros put into new subfolder $
New macros: savecond.C and saveparam.C to create macros to set conditions and parameters to
their current values (see 4.5.6, page 26).
7.
Bugfixes:
a.
Access to RFIO root
files from Go4 GUI browser was not possible (at GSI), since internal functions
of libRFIO.so
were shadowed by functions of GSI event lib with same names. Solved by separating
Go4 event library package into different modules for analysis and GUI task.
b.
Analysis server
executed UserPostLoop() each time a GUI client was disconnected. Disabled.
c.
Several changes
concerning the cleanup mechanism in GUI object manager
d.
AnalysisClient in CINT mode showed thread deadlock for ROOT versions>
5.02-00
e.
Start client dialog
selects correct analysis directory when choosing the analysis executable
1.
New script
command line widget for GUI: Allows execution of ROOT commands or macros
within Go4 GUI task. Moreover, Go4 hotstart scripts may be invoked here at any
time. The widget offers a file dialog to search for *.C and *.hotstart files.
It also has a selector dialog of preloaded commodity functions for histogram manipulation
(rebinning, addition, projection, etc.). These function template calls may be
completed with existing histogram names by dragging histogram items from the
browser and dropping them on the empty command argument. The history of the
command line may be saved to the current Go4 settings file .go4/go4localrc and
is then restored on next startup. (See 6.17, page 81).
2. New GUI command interface class TGo4AbstractInterface. It
can be accessed by handle "go4->" in GUI
command line. This makes it possible to interact with Go4 GUI views and browser
objects in a ROOT/Go4 script. Additionally, all remote analysis control
commands are available here, like in the hot start scripts. Method reference of
TGo4AbstractInterface is
available in the Go4 help viewer (type "help" in GUI command line, or
use Help►GUI
commandline menu of Go4 main window). Example scripts using this interface are at $
3.
New general
marker label settings dialog. In main window menu Settings►Panel
Defaults►Marker labels.., a
checkbox dialog offers to switch all label properties of the region and point markers
(visibility and information displayed in the label). These settings have effect
on all new markers of the view panel marker editor. They are saved in the go4
preferences file .go4/go4localrc. (see 6.7.6, page 64)
4.
Plain
ROOT canvases in files are better displayed.
5.
New settings feature Settings►Preferences►Fetch
when saving. If enabled, the save browser / save memory button of the file toolbar will
refresh all browser item objects from analysis before saving. Thus the ROOT
file will contain a snapshot of all analysis objects. Otherwise, only the
already fetched objects are saved.
6.
Zoom
tools "set scale" dialog upgraded to non modal MDI
widget. This will appear always on top of workspace widgets and refers to
currently selected view panel pad. Changes include some bug fixes concerning
the range settings of 2d histograms, and the auto-scale property.
7.
MBS
monitor tool: If monitoring switched on, calculation of rates is now
done in Go4, averaged over update time. Parameters of MBS monitor are stored in
Go4 settings file.
8.
TGo4Interface: new
method ExecuteLine to
remotely do CINT call from Go4 master process in the remote slave process
9.
View panel
superimpose mode improvements:
a.
is not changed anymore after superimposed draw of
FitPanel results, i.e. fitter data histogram can now be replaced just by drag and
drop on the view panel
b.
existing axis labels of first histogram are kept
10.
FitPanel
settings are saved/restored in go4 settings file
11.
Fit
GUI: Enhanced draw styles for TGraph
12.
Bugfixes:
a.
Workaround for ROOT crash in histogram rebin editor: Selecting
a histogram in view panel for rebin with the ROOT attributes editor leads to
segmentation violation when original histogram was replaced or deleted.
b.
Crash
in Go4 markers/conditions when histogram in view panel was replaced by drag and
drop.
c.
Update of histogram in GUI failed when histogram
dimensions (ranges) were changed in analysis
d.
Position and size of histogram statistic label may now
be saved in Go4 picture objects. Thus these properties can be restored on Go4
hot start.
e.
Crash
on closing last non-minimized window in view panel
f.
Problem
with empty TGraph as data source
in Fitter
g.
Crash
when FitPanel histogram under work was replaced or deleted in view panel. FitPanel did not react automatically
on changes, happening with histograms (or graphs), displayed on view panel.
Therefore, when superimpose mode was switched off, fitted histogram disappeared
from view panel (and also deleted), while fitter still has pointer on that histogram.
Now FitPanel slot in object
manager registered also against all histogram, used in fitting. If histogram is
deleted, FitPanel will be
automatically refreshed.
h.
Histogram title could not be switched off in
superimpose mode in view panel
13.
Improvements in make files
14.
Adjustments of includes due to changes in new ROOT
version 5.10
1.
Marker editor in view
panel allows for marking channels or
windows. Labels and arrows can be created. All marker elements can be saved and
restored.
2.
New ROOT graphical editor can be called
from view panel. The
editor dynamically adjusts to the graphical object selected by LMB.
3.
View panel window title: can
optionally be set by user and may be kept constant. If a TGo4Picture is displayed, the
picture name defines the view panel title.
4.
Condition editor: the cursor mode has
been removed because the functionality is now provided by the markers
5.
Condition, markers and labels: Implemented correct ROOT streamer (bug fix), i.e. saving and
loading these objects to and from ROOT files is possible with fully recovered
functionality and graphical properties. Support of pad display in linear and log
scale (bug fix). Additional controls in RMB menu of ROOT (set ranges, location,
save default properties, reset). Default label setup stored with Go4 GUI settings.
6.
Polygon condition: Implemented statistics
functions for work histogram under the cut (integral, mean, rms, etc.). Enabled
InsertPoint and RemovePoint functions in RMB menu (bug fix).
7.
Fit GUI: Selection
between sigma and FWHM (default) by Settings►Recalculate gauss width.
Fit results may be printed to terminal or Go4 log file
output.
8.
1D drawing: ROOT "L" (line) "C"
(curve) "B" (bar chart) "P0" (poly-marker) line styles supported.
9.
Histograms: re-binning, projections, and
profiles supported (standard ROOT methods with RMB). Automatic “synchronize
with memory” on pad click to get newly created histograms.
10.
Histogram client: monitoring implemented
(auto-update). Drag and drop support. Display error message when server
connection is not available (bug fix). Store server specification in Go4
settings.
11.
File store: Storing objects into a ROOT
file a title is prompted. This title can be seen in the Go4 browser and the
ROOT browser.
12.
UserObjects folder: With AddObject(...) histograms, parameters and conditions can be put into folders of
the
UserObjects folder. They can be located there by the standard Get methods, e.g. GetHistogram(). Editors work also with objects in these folders. Note: object names must be unique!
13.
Log window: Empty messages are now
suppressed (bug fix).
14.
QtRoot interface: bug fix concerning
initialization order of X11 system (ROOT init now before Qt init). Lead to
crash of the main GUI on newer Linux systems when using Qt versions > 3.1
(FEDORA2, SuSe9.1)
15.
Thread manager:
bug fix: adjusted default exception handling to
work with newer libpthread.so that uses one process for all threads (e.g. FEDORA2). This lead to
a crash when Go4 threads were canceled (shutdown of the go4 GUI).
16.
Analysis Framework:
bug fix: analysis without analysis step (UserEventFunc() only) again possible.
17.
Client startup script: full PATH and LD_LIBRARY_PATH of the Go4 GUI environment
is passed to the analysis process.
1.
Keyboard shortcuts (Alt-1 to Alt-5) to select browser tabs (File, Monitor, Remote, Memory, Histogram
client). Items are selectable with arrow keys (left-right to unfold and shrink
subfolders). Return key acts as double click.
2.
MBS event classes improvements: Method TGo4MbsSubEvent::IsFilled() checks if the sub-event was filled in the previous event built. Iterator
TGo4MbsEvent::NextSubEvent() by default delivers newly filled sub-events only, suppressing
existing sub-events in list of non used ids.
Sub-event data field re-uses the memory allocated by libgsievent instead of copying it to own buffers. New method TGo4MbsEvent::SetPrintEvent() to set verbose mode for the next n events. Format changes in TGo4MbsEvent::PrintEvent().
3.
Performance improvements of analysis
framework in step manager, dynamic list and MBS event classes.
4.
New EventInfo toolwindow to control
printout of an event sample in remote or local terminal. Optionally the user
implemented PrintEvent() method, or the ROOT TTree::Show() output may be used. May control the arguments of TGo4MbsEvent::SetPrintEvent(). Supports drag and drop for event names from remote browser.
5.
Display total memory consumption of
histograms and conditions at the end of PrintHistograms() and PrintConditions() execution, respectively.
6.
TCanvas support in file browser improved: Histograms saved inside a TCanvas in a ROOT file will appear in memory browser whenever this canvas
is displayed
7.
Analysis Terminal window: Limitation of
text history buffer to 100 Kb by default, may be changed in settings menu.
Disabled text wrapping in output for scrollbars.
8.
Scale values dialog window extended by
zmin and zmax fields. Allows setting minimum and maximum thresholds for channel
contents of 2d histograms when auto scale is off.
9.
Conservation of TLateX textfields when changing draw
style or histogram statistics boxes visibility
10.
File browser open file dialog
allows multiple file selection
11.
Analysis configuration window: remember
path to previous selected file in event source, auto-save, and preferences dialogs.
Some layout cleanups.
12.
Superimpose of histograms with same name
from different files possible if overwrite mode is deselected in memory
browser. Histograms will be copied to memory browser with cycle numbers added
to names.
13.
Bugfix: Superimpose THStack does not crash anymore
when deleting histograms
14.
Bugfix: Crash after closing and
re-opening view panel for same histogram with different sub-pad divisions
15.
Bugfix: Analysis did stop when an
analysis step without event processor is disabled
16.
Bugfix: histogram bound to condition was
not fetched from analysis when double clicking on remote condition icon
17.
Bugfix: Double click on histogram in
divided view panel did pop up this histogram magnified in a new view panel, but
did not initialize view panel colours and crosshair settings correctly.
1.
New Go4 Hotstart: The current setup of the GUI (analysis name and settings, view
panel geometry, objects in memory
and monitor browser, displayed objects in pads) may be saved to a hot start
script file (postfix ".hotstart") from the Settings►Generate hotstart menu. The script name may be passed as argument on next Go4 GUI
startup (e.g. "go4 mysetup"),
which will launch the analysis and restore the settings (e.g. from file "mysetup.hotstart").
2.
New TGo4ExportManager class
transforms and saves ROOT objects into other formats. Currently supported:
plain ASCII (*.hdat, *.gdat) and Radware/gf3 (*.spe). An export filter is
available in the GUI memory browser to save selected objects.
3.
Redesign of Go4 Auto-save mechanism. Subfolders are
mapped as TDirectory in TFile
now, thus improving performance for large number of objects. Auto-save file is
closed after each write, avoiding invalid file states in case of analysis
crash. Dynamic list entries are saved as independent objects.
4.
Example macro Go4Example2Step/convertfile.C converts all histograms and graphs from ROOT file into ASCII files,
conserving the subfolder hierarchy.
5.
New TGo4StepFactory class can be
used as standard step factory to simplify the setup of analysis steps for small
analyses. New example package Go4Example1Step shows the usage.
6.
The TGo4Analysis class can now
be used as standard analysis class. New
example package Go4ExampleSimple shows the usage.
7.
New view panel has size of previously active view panel. Default view panel
starting size is stored in settings and recovered on next Go4 startup.
8.
View panel: Switch on/off histogram title display in options menu.
9.
View panel: Switch on/off crosshair for each pad in options menu. Default
crosshair mode can be selected in main window settings menu and is saved and restored
by Go4 settings. Crosshair mode button in condition editor has been removed.
10.
View panel: Default background color can be selected in main window settings
menu and is saved/restored by Go4 settings.
11.
TCanvas objects in analysis task may be send and displayed on GUI. Works
both for memory and monitoring list.
12.
Support of TMultiGraph objects in
analysis and GUI (display, memory and monitoring list update).
13.
New draw option TASImage for 2 dim
histograms in Go4GUI. May improve rendering speed for large maps when updating
and resizing the canvas. Offers own palette editor in right mouse button popup
menu.
14.
Parameter editor: Added column to display the source code comments for each parameter
class member as description.
15.
Condition editor: General editor has button to create a new condition. New condition
is defined in a dialog window and is put into general editor. May be sent to
analysis for registration, or saved into a file then. All types of new
conditions (window, polygon, array of these with variable size) are supported.
16.
Object editors (condition, parameter, dynamic list) may save and load objects
from/to ROOT files.
17.
Status messages of object editors appear in bottom status line of Go4 main window.
18.
Support of dynamic list
entries in file browse: Editor opens on double click.
19.
Histogram and Condition info windows: Object size now takes into account real data size on heap.
20.
New analysis toolbar button for
"re-submit and start" shortcut. Useful when file shall be
re-read from the beginning after changing something in the setup.
21.
Auto-save may be disabled completely from analysis configuration GUI.
22.
New mode for TGo4MbsFile (*.lmd)
wildcard/metafile input: Auto-save file may change its name whenever input file
is changed. Name is automatically derived from input filename. Old behavior
(one auto-save summing up all inputs) is still possible. This can be switched
with method TGo4Analysis::SetAutoSaveFileChange(bool
).
23.
End of .lmd file input gives informational message instead of error message.
24.
Bug fix: avoid log-file
crash when Go4 is started in directory without
write access.
25.
Bug fix in Go4 Mainwindow
exit dialog. Exit via window "x" icon
works properly now, too.
26.
Some adjustments to work with
ROOT versions > 4.00 in Go4Fit and qtroot packages
1.
Histograms may be bound to
conditions by method TGo4Conditions::SetHistogram(). The bound histogram will be fetched automatically in GUI whenever
condition is edited.
2.
TGo4Picture can contain
conditions together with histogram objects.
3.
General condition editor in
addition to the condition specific editors. Supports drag and drop of condition
icons and conditions linked to TGo4Pictures.
4.
Warning label for unsaved changes
in condition editor, and in dynamic list editor.
5.
Condition editor cursor tab can
make copies of the current cursor marker. For printouts with multiple markers.
6.
Analysis log window in GUI
displays date and time of last refresh.
7.
New histogram status window,
and condition status window in GUI.
8.
Redesign of GUI object
management: Added drag and drop support of TGraph, TGo4Picture from all browsers. Bug fix and improvements in
histogram superimpose mode.
9.
Monitoring list supports TGraph, TGo4Picture, and THStack.
10.
Logfile mechanism for GUI
actions. Log output configurable in Settings menu. Logging output on demand
from condition editor, histogram and condition status windows.
11.
View pane can turn on or off
histogram statistics box.
12.
View panel supports fix/auto scale
modes for TH1, THStack, and TGraph objects.
13.
View panel resize speed
improved (redraw only at the end of resize action). View panel does not start
in full screen mode anymore.
14.
Analysis terminal: New buttons
for clearing the terminal, PrintHistograms, PrintConditions. Command line has
shortcut “@” for “TGo4Analysis::Instance()->”. “KillAnalysis” button
buffered with confirmation dialog window.
15.
“Quit Go4” button buffered with
confirmation dialog window.
16.
Dynamic list editor can change
the global dynamic list interval for analysis.
17.
Reorganization of GUI icons.
18.
Performance improvements in
TTimers of Go4 kernel: Removed Turn On/Off statements.
19.
New method TGo4Analysis::NextMatchingObject() for search in analysis objects with wildcard expression.
20.
Analysis: PrintHistograms(), PrintConditions() supports wildcard expressions for output list selection.
21.
New methods: TGo4Analysis::StoreParameter,
StoreCondition, StoreFitter, StoreFolder to write
these objects into event store of an analysis step. Event number will be
appended to object keys for parameter logging.
22.
Consistency checks of analysis
steps can be disabled by new method TGo4Analysis::SetStepChecking(bool). For setting up of non serial type analysis steps with own user
management.
23. TGo4MbsEvent::PrintEvent() extended to display headers and also data field contents of sub-events.
24.
New methods: TGo4MbsEvent::GetMbsBufferHeader(),
TGo4MbsSource::GetBufferHeader() to access the
buffer headers of list-mode files. Implemented example in Go4Example2Step.
25.
Go4 GSI histogram server also
exports TGraph objects as histograms (if possible).
26.
Implementation of TGo4Condition::Paint() to display Go4 conditions in regular ROOT environment. Conditions
may be drawn on TPad which already contains a histogram. New classes for condition painters
and condition views.
27.
Reorganization of the
distribution make files.
1.
New Package Go4Log to handle
all messages and log file. This replaces the old package Go4Trace. Static
method TGo4Log::Message(char*,
...) can be called everywhere to display text on
terminal and optionally write to log file. Modified Go4 message prompt.
2.
Header information of MBS list-mode
data files accessible by new methods s_filhe* TGo4MbsSource::GetInfoHeader()
and s_filhe* TGo4MbsEvent::GetMbsSourceHeader().
3.
Event source class TGo4MbsRandom to deliver random spectra into MBS events without connection to MBS
node or reading list-mode file. Matches event structure of standard example Go4Example2Step.
4.
TGo4Picture objects can be used in the monitoring list.
5.
Changes in Analysis
configuration window: Number of events, start/stop/skip events may be
specified; tag file name and optional socket timeout. File browser for event
source files. Auto-save interval now refers to time (seconds) instead number of
events. Modified layout.
6.
Dynamic list editor with button
to PrintAll
dynamic list entries on analysis terminal.
7.
Improved postscript print
dialog in View-panel menu.
8.
Histogram client API supports
conversion into Radware format.
9.
Go4 histogram server supports
float histograms.
10.
Execution of ROOT interpreter
commands / macros in the analysis task possible by command line in analysis terminal
window.
11.
Re-design of condition editor:
a.
Display all conditions of array
in different colors or hide them optionally. Visibility in editor is property
of TGo4Condition and stored in auto-save file.
b.
Working view-panel pad and
reference histogram of condition may be changed at any time.
c.
Clear counters button applies
clearing to analysis condition immediately and refreshes editor from analysis.
d.
Statistics inside window
condition limits (integral, maximum, mean, rms, etc) are calculated; these
values are displayed in editor and may be drawn in labels on working pad.
Methods to calculate statistical quantities belong to TGo4WindowCondition class and may be used in analysis, too.
e.
Cursor panel with crosshair
mode and optional marker to pick values from displayed histogram. Cursor may be
set by mouse click, by moving the graphical marker object, or by defining
cursor position in the text fields. Cursor values may be drawn in label on
working pad
f.
Extension of polygon condition
/TCutG is calculated and shown like the borders of the window condition.
g.
Improved creation of new TCutG functionality. Assignment to current polygon condition may be cancelled.
Handles pads with multiple TCutGs.
12.
Added class TXXCalibPar to Go4Example2Step. Shows a procedure how to calibrate spectra using the Go4 fitter in
connection with the parameter mechanism and an ASCII file “database” of line
energies.
13.
Make full screen default for
new view panels.
14.
When updating objects in Memory
folder, a redraw is done automatically.
15.
When monitor updates a
View-panel, the pads are updated without blocking the GUI (not yet for picture)
16.
Button besides zoom buttons to
enter display limits by values
17.
Drag pictures from Analysis pad
to View-panel (only empty view panel, or is inserted in pad)
18.
Some buttons on the browser
pads have been rearranged to be consistent. On Memory browser pad the icons for
"update local objects" and "synchronize with directory"
have been exchanged to be consistent with Analysis pad.
1.
TGraph objects can be registered and displayed correctly. Reset of TGraph (clear all points) by “eraser” button from GUI possible.
2. Reset/clear complete folders by selecting them in remote browser and
“eraser” button. New method ClearObjects(“Histograms”) to reset all objects of
named folder, e.g. all histograms at once.
3. “Print” button to printout histogram and condition lists with
statistics in analysis terminal. These buttons are located in the dynamic list
editor.
4.
Parameter classes may contain TGo4Fitter* references or arrays of these. Fit GUI can be used to edit fitter
from within parameter editor. Framework provides new class TGo4FitterEnvelope as example parameter. Example put into TXXXAnalysis.
5.
User defined event source is
possible. New class TGo4UserSourceParameter to be checked in analysis step factory for any kind of input.
Example package Go4ExampleUserSource shows
usage.
6.
New class TGo4Picture to define layout of canvas with histograms. Pictures are registered
in Go4 Pictures folder and stored in auto-save file like histograms; they can
be displayed in any view-panel. Example added in TXXXAnalysis.
7.
Possibility to register
complete TCanvas objects in Go4 Canvases folder to be saved within auto-save file.
Switch TGo4Analysis into ROOT batch mode to suppress drawing actions in analysis client
while canvas is set up.
8.
Go4 GUI can display and compare
objects from different files in the same view panel now.
1.
Possibility to select rsh or
ssh and analysis output in Xterm or GUI window.
2.
Wildcard in input lmd file
names.
3.
Input file name beginning with
@ is interpreted as text file containing lmd file names.
4.
An auto-save file can be
written on demand (button in configuration menu).
5.
Parameter editor. User
parameter objects (subclasses of TGo4Parameter) registered in the analysis can be edited in the GUI by double
click in the browser. Currently supported members are the primary data types
and arrays of these.
6.
New environment variable
7.
Dynamic lists. A dynamic list
editor can be used to create/specify dynamic entries. A dynamic entry consists
of a histogram (can be created new) and a member of an event object which shall
be histogrammed. Optionally a condition can be added. The condition also can be
created new. The event structure is expanded in the browser. Drag&drop is
provided to select members.
8.
The condition editor has been
improved. Arrays are now handled properly. TCutGs for polygon conditions
can be created new.
9.
TGraph objects are supported like histograms.
10.
In the Go4 view panel, the ROOT
"event status" (cursor position) can be displayed.
11.
The new fit GUI is available.
It includes three different peak finders, a simple fitter, a wizard, and full
access to all fitter components. Fitters can be stored/retrieved to/from files
or memory.
12.
User Makefile: the user
executable need to be linked against the make file variable $(
The Go4 (GSI
Object Oriented On-line-Offline) Analysis Framework has been developed at GSI.
It is based on the ROOT system of CERN. Therefore all functionality of ROOT can
be used.
Go4 has two
parts: the analysis framework itself and a Qt based GUI. Both can be used
independently, or together. The separation of the analysis and GUI in two tasks
is especially useful for on-line monitoring. The analysis runs asynchronously
to the GUI which is (almost) never blocked. The same analysis can be run in
batch/interactive mode or in remote GUI controlled mode. The GUI can be used
stand alone as ROOT file browser and as histogram viewer for GSI standard
histogram servers like MBS. Moreover, the analysis task can be run either as a
client bound to one GUI (default), or can be started as an analysis server with
the possibility to connect several GUIs (one controller and arbitrary number of
observers with restricted commands).
gui150
The Go4
framework handles event structures, event processing, and event IO. The
analysis event loop is organized in steps: Each step has an input event, an output event, and an
event processor. The output event calls the event processor to be
filled. The event processor has also access to the input event. In the current
design the analysis is data driven. A first event object (input1) is filled
from some event source (input). An output event object (output1) is filled by
an event processor object (process1) which has access to both, input1 and
output1. Optionally the output event may be written to a file (file1). In the
next step the input event object (input2) can be either the output event object
(output1) from the previous step or retrieved from the file. The second output
event object (output2) is filled by the second event processor object
(process2) and can be optionally written to a second file.
The information
needed to create the event and processor objects (which are deleted when the
event loop terminates) is stored in step factories which are kept in the
analysis.
The processor
and output event classes have to be provided by the user. The input classes for
standard GSI event sources are provided by Go4 (see chapter 4, page 21). Analysis and step factory classes are provided by
Go4 or can be implemented by the user as subclasses.
gui148
For normal
operation, the Go4 analysis steps are designed to run subsequently. But in
addition, each analysis step has access to the output events of all other
previous analysis steps, so it would be possible to let analysis steps
logically run “in parallel”, all starting with the output event of the first
step, and all delivering their results to the last step that may collect and combine
them.
gui149
Outside the
analysis steps the user functions UserPreLoop(),
UserPostLoop(), and
UserEventFunc() located in the user analysis class
are executed as shown in the figure. In principle, they could be used to
implement the full analysis without using the step mechanism. But for setting
up a new analysis the use of steps is strongly recommended, because steps can
be controlled by the GUI and offer event and IO management.
In the event loop,
after processing the steps and UserEventFunc() the Go4 dynamic list processor is executed. This processor can be dynamically
configured from the GUI to check conditions and/or fill histograms.
gui146
The Go4
concept consists of base classes (interfaces) for event structures, algorithms,
and IO, which can be implemented by user subclasses or by framework plug-ins
(general service classes) delivered with Go4. Class descriptions and reference
guides are available on the Go4 Website http://go4.gsi.de.
The interface classes provided by Go4 (a detailed description is in
the reference manual) are normally not seen by the user. Starting with the
examples (see chapter 5, page 30) one can better study derived working classes.
TGo4EventElement: Defines the event structure and methods to clear and fill this
structure. Input and output event structures of each step of the analysis are instantiated
once at initialization. In the event loop the virtual methods Fill() and Clear() are used to update the event data. These methods can be implemented
in the user subclass. By default, Fill calls BuildEvent of event processor.
TGo4EventSource: The source of the event data. This can be e.g.
a file of a certain format, or a socket connection to an event server. Usually,
the event source class has a BuildEvent(TGo4EventElement*) method, e.g., which
can be called by the Fill() method of the event object to be filled with
the data. Therefore, event element and event source implementation classes have
to “know” each other to perform a matching fill procedure. The class
constructor should open (connect) the source; the destructor should close (disconnect)
it properly.
TGo4EventStore: An object responsible for storing the event
data. This can be e.g. a local file of a certain format, but may as well be a
connection to some storage device. The virtual method Store(TGo4EventElement*) is used to store the pointed event object. The class constructor
should open the storage; the destructor should close it properly.
TGo4EventProcessor: An object that contains the algorithm to convert an input event object
into an output event object (both of class TGo4EventElement). This is a subclass of TGo4EventSource, since it delivers the filling of the output event from the input
event. The event processor implementation has to “know” the input and output
event classes. The methods of converting the data (i.e. actually performing the
analysis) are free to be defined by the user. By default a BuildEvent method is provided.
TGo4EventFactory: Defines the actual implementations of all the
above. Go4 uses a factory design pattern to create all event class objects at initialization.
The virtual methods:
CreateInputEvent(), CreateOutputEvent(), CreateEventSource(TGo4EventSourceParameter*),
CreateEventStore(TGo4EventStoreParameter*),
CreateEventProcessor(TGo4EventProcessorParameter*) have to be defined in the user factory. They create the
respective objects and return the pointer to it. The default factory provides
methods
DefEventProcessor(objectname, classname),
DefInputEvent(objectname, classname) and
DefOutputEvent(objectname,classname).
Simple examples of a running Go4 analysis can be found on
directories $
Go4 offers predefined implementations of the event base classes,
including an interface to the GSI data acquisition Multi Branch System MBS, the
GSI list-mode files, and ROOT files.
TGo4EventElement (base
class):
TGo4MbsEvent,
TGo4MbsSubEvent
MBS event format 10-1
TGo4CompositeEvent Base class for all composite event structures
TGo4ClonesElement Clonesarray container for composite event
TGo4EventSource (base class):
TGo4MbsFile
(read
from *.lmd list-mode file with format 10,1)
TGo4MbsEventServer (connect to MBS event server)
TGo4MbsStream (connect
to MBS stream server)
TGo4MbsTransport (connect to MBS transport server)
TGo4RevServ
(connect to remote event server)
TGo4FileSource (read from *.root file from Go4 tree, i.e. one
file containing one TTree per analysis step)
TGo4EventStore (base
class):
TGo4FileStore (write to *.root file with Go4 tree, this file
can be used as TGo4FileSource later)
TGo4BackStore Use
TTree existing only in memory to view and analyze event structures.
These classes can be used directly to write
simple analysis.
Using these implementations,
getting MBS event data into ROOT (without Go4 framework) could look like this:
#include
"Go4EventServer/Go4EventServer.h"
#include
"Go4Event/TGo4EventEndException.h"
int
main() {
TGo4EventSource* input = new TGo4MbsFile("file.lmd"); // MBS
list-mode file
// TGo4EventSource* input= new TGo4MbsTransport("node"); // MBS transport server
// TGo4EventSource* input= new TGo4MbsStream("node"); // MBS stream server
// TGo4EventSource* input= new TGo4MbsEventServer("node");
// MBS event server
// TGo4EventSource* input= new
TGo4RevServ("node"); //
Remote event server
TGo4EventStore* output = new
TGo4FileStore("output",1,5);
// split level, compression
TGo4MbsEvent* event = new TGo4MbsEvent();
event->SetEventSource(input);
event->Init();
Int_t eof = 0, numEvents = 0;
while(eof==0) {
try{
event->Fill(); // read
event
numEvents++; // eof
throws exception
output->Store(event); // write to
file
}
catch(TGo4EventEndException& ex) {
eof=1; } // mark end of file
catch(...) { cout <<
"Error" << endl; eof=2; } // any other error
}
cout << "EOF after "
<< numEvents << " events" << endl;
}
The events in the ROOT
file can be retrieved by program, but not in tree viewers. For the use of tree
viewers, a new output event object should be filled and stored.
As
mentioned above a Go4 analysis is organized in steps. The information needed to
instantiate a step is kept in the step factory.
TGo4EventFactory (base
class):
TGo4EventServerFactory (base class): (contains
factory methods that already know the above implementations. User step
factories must inherit from this class!)
TGo4StepFactory This
TGo4EventServerFactory can be used in most cases as user factory to
set up the analysis steps (examples Simple and 1Step).
TGo4AnalysisStep objects of this class hold the definition of an analysis
step.
Each analysis
step has at least an input event object, an output event object and an event
processor object. Additionally, it can have an event source (e.g. TGo4FileSource) and an event store (TGo4FileStore) instance. An analysis step is set up by a TGo4EventServerFactory subclass, i.e. TGo4StepFactory or a user defined subclass.
Once the user has defined his/her event class implementations, the
analysis steps can be created and registered to the Go4 analysis framework. The
actual framework consists of the TGo4Analysis class, which is a singleton (i.e. there is only one framework
object in each process). This class provides all methods the user needs, it
keeps and organizes the objects (histograms,...), it initializes and saves the
data objects.
The user
analysis is set up in a subclass of TGo4Analysis, i.e. TUserAnalysis. Constructor and destructor of this user class, in addition with
the overridden virtual methods UserEventFunc(),
UserPreLoop(), and
UserPostLoop() specify the user analysis.
If the latter
functions are not needed, one can also use the TGo4Analysis class directly, as shown in the
example Simple.
In the
constructor of the TUserAnalysis class the analysis step objects are created, each containing
instances of its user step factory. The analysis steps are registered at the TGo4Analysis framework, input and output events of subsequent steps are checked
for matching. Furthermore, other objects like histograms, conditions or
parameters can be created in the constructor and registered, so the framework
is responsible for their persistence. Such objects can also be created in the
step processor.
In addition to
the event processors, the UserEventFunc() allows the user to specify analysis operations that are called once
in each analysis cycle, e.g. filling certain histograms from the output events
of all analysis steps. The UserEventFunc() makes it even possible to call an external analysis framework event
by event without using the Go4 Analysis Steps at all, thus taking advantage of
the Go4 object management and remote GUI features.
The UserPreLoop() and UserPostLoop() functions may define actions that are executed before starting, or
after stopping the main analysis loop, respectively.
Once the user
analysis class is defined, there are two modes of operation: The
single-threaded batch mode, and the multi-threaded client mode that connects to
the Go4 GUI.
The constructor of a TGo4Analysis derived
user class could create one analysis step with input from an MBS file with the
following code fragments (note that we use the standard Go4 step factory
class):
TUserAnalysis::TUserAnalysis()
{
//...
TGo4MbsFileParameter* input;
TGo4StepFactory* factory; // standard factory provided by Go4
TGo4AnalysisStep* step;
input =
new TGo4MbsFileParameter("file.lmd");
factory =
new TGo4StepFactory("Factory");
step =
new TGo4AnalysisStep("Analysis",factory,input,0,0);
// the objects specified here will be
created by the framework later:
factory->DefEventProcessor("XXXProc","TXXXProc");//
object name, class name
factory->DefOutputEvent("XXXEvent","TXXXEvent");
// object name, class name
step->SetSourceEnabled(kTRUE);
step->SetProcessEnabled(kTRUE);
AddAnalysisStep(step);
//...
}
// Example of using the event loop
functions for a trivial counting of events
// fEvents must be defined in TUserAnalysis.h:
Int_t
TUserAnalysis::UserPreLoop() {
fEvents=0;
return
0;
}
Int_t TUserAnalysis::UserEventFunc() {
fEvents++;
return
0;
}
Int_t
TUserAnalysis::UserPostLoop() {
cout << " Total events: " <<
fEvents << endl;
return
0;
}
Typically the user provides the main
analysis program. One can use one of the examples. The main program sets up the
analysis. Then it starts two different modes (see example below):
In batch mode,
the constructor of the user analysis class (e.g. TUserAnalysis or TGo4Analysis) creates the
framework.
The InitEventClasses() method uses the factories of all steps to create the event classes
and open the event sources, event stores, etc. It also checks for consistency
of subsequent steps.
The RunImplicitLoop(Int_t
n) calls the implicit event loop and runs the main
analysis cycle (event processing of all enabled steps, UserEventFunc()) for n times.
CloseAnalysis()
deletes all event classes and closes all
input/output files and connection. This method is complementary to InitEventClasses() that creates them.
The destructor
of the user analysis class calls CloseAnalysis(); in addition the auto-save file is closed and the complete framework
is shut down.
In the
interactive GUI mode, the analysis framework is created with the user analysis
class object, as for the batch mode. Additionally, the framework is handed over
to a TGo4AnalysisClient object that manages the connection to the GUI. Usually, the Go4 GUI
is started first and launches the analysis framework in a remote shell. The
user analysis program is called in the shell script
AnalysisStart.sh in the user's working directory. The working directory as well as
the name of the executable is passed from the GUI side. Then the user
executable creates the analysis framework and connects the multi-threaded
analysis client to the Go4 GUI. After the connection is established, the
complete analysis framework can be controlled from the GUI. After the example,
we describe in detail what is happening on startup of the analysis client and
what effect the GUI control actions have.
As a default, the TGo4AnalyisClient object will set up the analysis-GUI connection in a way that the analysis is a single client to a single GUI as server, as described in section 4.5.2. However, it is possible to run the analysis as a server to connect many GUIs (one controlling GUI and many observer GUIs). Still the analysis class object is handed over to the TGo4AnalysisClient object, but the analysis “client” may run in a network server mode by constructor parameter (note: the classname TGo4AnalyisisClient was not changed for backward compatibility , although it should rather be called TGo4AnalysisSlave to point out the role as command receiving entitiy).
The analysis server may be started independently from the GUI from a shell like in the batch mode, and may already start analysis run from preferences setup without any controlling GUI. However, it can as well be launched from the StartAnalysis dialogue of the Go4 GUI when selecting the mode “as server”. A Go4 GUI is ready to connect any such started server. Login of GUI to the analysis server may be with observer, controller, or administrator role, respectively; their passwords can be set in user analysis code. There can be only one controller or administrator, but multiple observer GUIs. Observers may only view exisiting objects, but may not modify them or change analysis setup and running state. Controller may view and modify objects and analysis configuration, but is not allowed to terminate analysis server. Only Administrator may shutdown the analysis server, too.
Additionally, the analysis server may be launched first from one GUI in an xterm, and then connected from this GUI and other GUIs later on. See section 6.3.2 for more details on connection of the GUI client.
The following examples show the essential
structures to start/run the analysis. See also the running examples.
Using user event and processor classes,
but others all Go4 standard:
TROOT go4application("
int main(int argc, char **argv) {
TApplication theApp("Go4App", 0, 0); // ROOT application loop
// ...
TGo4Analysis* analysis = new
TGo4Analysis::Instance();
TGo4StepFactory* factory = new TGo4StepFactory("Factory");
TGo4AnalysisStep* step = new
TGo4AnalysisStep("Analysis",factory,0,0,0);
analysis->AddAnalysisStep(step);
step->SetEventSource(new TGo4MbsFileParameter("myfile.lmd"));
// tell the factory the names of
processor and output event
// both will be created by the
framework later
// Input event is by default an MBS
event
factory->DefEventProcessor("XXXProc","TXXXProc");//
object name, class name
factory->DefOutputEvent("XXXEvent","TXXXEvent");
// object name, class name
if (strcmp(argv[1],"-gui") == 0) // was started from GUI:
create analysis client
TGo4AnalysisClient* client = new TGo4AnalysisClient(argc,argv,analysis,kFALSE,"","");
else { // run implicit event loop
analysis->InitEventClasses();
analysis->RunImplicitLoop(100000); // number of events
delete analysis;
gApplication->Terminate(); // exit
}
theApp.Run(); // needed to run the client, or if gApplication was not
terminated
} // end main
Using user analysis, event and processor
classes (steps set up in TUserAnalysis):
TROOT go4application("
int main(int argc, char **argv) {
TApplication theApp("Go4App", 0, 0); // ROOT application loop
// prepare arguments for TUserAnalysis
// ...
TUserAnalysis* analysis = new TUserAnalysis(...); // arguments as required
if (strcmp(argv[1],"-gui") == 0) // was started from GUI:
create analysis client
TGo4AnalysisClient* client = new
TGo4AnalysisClient(argc,argv,analysis,kFALSE,"","");
else { // run implicit event loop
analysis->InitEventClasses();
analysis->RunImplicitLoop(100000); // number of events
delete analysis;
gApplication->Terminate(); // exit
}
theApp.Run(); // needed to run the client, or if gApplication was not
terminated
} // end main
Objects used in Go4 are organized in ROOT folders. The folder
structure is sent to the GUI. Objects must be registered in the analysis to be
seen in the GUI browser. Registered objects can be located in the processors.
The top folders as seen in the GUI are shown on the left side. The methods to
register/locate objects are (pointer to the appropriate object, optional
subfolder as string, name including subfolder as string):
·
AddHistogram(pointer,subfolder),
GetHistogram(name)
·
AddAnalysisCondition(pointer,subfolder),
GetAnalysisCondition(name)
·
AddParameter(pointer,subfolder),
GetParameter(name)
·
AddPicture(pointer,subfolder),
GetPicture(name)
These methods
are available in TGo4Analysis and TGo4EventProcessor subclasses. Objects created in a TGo4Analysis subclass can be located in all event processors. Objects created in
event processors can be located in all subsequent event processors (steps).
Registered
objects are stored/retrieved to/from the auto-save file, if enabled. Retrieval
is done after creation of the analysis singleton before the
creation of the steps. When an object retrieved from the auto-save file is created
in a processor the retrieved object is replaced (stored data lost). When an
object is created in the analysis singleton it will be replaced by the one
retrieved from the auto-save file except histograms which are not retrieved in
this case. This means that histograms created in the analysis singleton are
always empty after startup.
Parameters used
in the analysis are implemented by the user in classes derived from TGo4Parameter. Such objects
are registered to the framework and can be edited by a generic parameter editor (see chapter 6.11.2, page 74). Parameter objects can be created in the user
analysis or the event processor class. Parameter objects are loaded from an
optional auto-save file after instantiation of
the analysis and before instantiation of the processor objects. When created in
the analysis the values set in the constructor are therefore overwritten by
auto-save. To use the GUI editor, the UpdateFrom() method must be implemented to update the local (active) parameter
object from the modified one delivered by the editor. In this method it is up
to the user to ignore certain members or to execute whatever he wants. E.g. one
could use parameters to execute commands. Parameters in the auto-save file can
be edited. In the editor they can be saved/retrieved to/from files. Several
mechanisms can be implemented to handle the parameter member values. The main
question is how restricted the methods of modification should be.
Conditions are objects holding window limits or polygons. One or two
values can be checked against the limits or the polygon, respectively. In
addition the conditions have test and true counters. They can be set to return
always true or false or return the inverted test result. They can be edited by
the GUI (see chapter 6.8.2, page 67). They can be used to steer the analysis flow. They
are saved/retrieved to/from the auto-save file, if enabled. They can be edited
in the auto-save file. In the editor they can be saved/retrieved to/from files.
If a mechanism like for the parameters (4) is wanted, one can use macro savecond.C([file],wildcard,prefix) from $
Example:
root[0].x savecond.C("myfile.root","*","setcon")
would produce
macros setcon_cond1.C, setcon_cond2.C etc. The macros have three arguments: restore flags, restore
counters, reset counters (0=no, 1=yes), e.g. setcon_cond1(1,0,1).
When
starting the Go4 analysis in GUI mode, the following actions take place in that
order:
1.
The Launch
Analysis GUI panel started by reads some settings from file $
AnalysisStart.sh
in the current directory of the user analysis. Here the user may add his own initializations.
2.
In “as client” mode (default), the executable MainUserAnalysis is started in GUI mode with the parameters:
MainUserAnalysis –gui <analysis name> <host name> <port number>
The parameters analysis name and host name are taken
from the launch client GUI panel, the port number is dynamical (displayed on
GUI start-up in the shell, often=5000). Instead of launching the client from
the GUI, one may start the analysis client manually from a separate shell (do
not forget “.
go4login” !) with the matching host name and port number for the running Go4
GUI. This can be useful if the analysis shall run under gdb, or if
ssh/rsh fails for some reasons.
Started in “as server” mode, the analysis executable (e.g. in Go4Example2Step)
is called with arguments parameters
MainUserAnalysis –server <analysis name>
and starts in server mode (see also 6.3.2, page 46).
3.
TGo4Analysis is created and initializes the analysis framework. Then the
constructor of the user subclass (e.g. TXXXAnalysis) defines the list of analysis
steps with initial event parameters (input and output filenames) and auto-save
settings just as passed from the MainUserAnalysis. Additionally, some
user objects may be created and registered here. Note that histograms
registered here are never updated or replaced from the Go4 auto-save file and
exist only until the analysis client is terminated. Conditions and parameters,
however, are updated when the auto-save file is loaded and if their name is existing
there.
4.
The analysis slave, if in client
mode, connects to the Go4 GUI. Optionally, the Go4 histogram/object
server is created.
Note that the analysis in server mode does not connect automatically to the
starting GUI, but waits for a separate connect request with login and password
from any GUI. Only after this explicit connection the GUI in -client
mode gets control over the analysis server!
5.
The analysis settings are
loaded from the default preferences file Go4AnalysisPrefs.root. A message is sent to the GUI: “Analysis Client MyClient: Status Loaded from file Go4AnalysisPrefs.root ” (if successful). Note
that all settings specified before in the compiled code (auto-save file name,
event sources, etc.) are overwritten if the preferences file exists.
6.
The analysis objects are loaded
and updated from the auto-save file. The file name from the loaded analysis
settings is used, if existing. Otherwise, the filename specified in the preceding
user code by SetAuto-saveFile(Text_t* name) is used. If successful, a message is sent to the GUI: “Analysis Client MyClient: Objects Loaded.” If auto-saving was disabled
completely by calling
SetAutoSave(kFALSE), the
auto-save file is not opened here even if it exists, and no objects are loaded!
The “overwrite filename” option in the auto-save settings must be disabled
to recover objects of a previous auto-save file; otherwise, all objects in an
old file of the same name are lost!
7.
The analysis settings are
displayed on the GUI. At this moment, the analysis configuration window pops up
and shows the active settings. Note that for GUI client at analysis server,
configuration does not pop up automatically after login, but has to be requested
by “arrow right” button of analysis configuration window.
8.
End of analysis start-up. A
message is sent to the GUI: “Analysis Client MyClient has finished initialization”.
Note that
now the analysis itself is not yet initialized, i.e. the event objects have not
been created, and there are still no connections to event sources, etc.
At any
time the user may apply new settings to the analysis and start/stop the run. Note
that if GUI runs as client connected to an analysis server, these operations
are permitted for controller or administrator login only. Here the following is
happening in the described order:
1.
Submit the analysis settings. The
settings as displayed in the analysis configuration window are sent to the analysis
client.
i.
First, an already existing analysis is closed
(see below).
ii.
The analysis is initialized
with the new settings. Objects are loaded from the new auto-save file except
auto-save is disabled by SetAutoSave(kFALSE). The file name is as specified in the configuration window.
iii.
The event objects are created.
Event sources and stores are opened. The constructors of all user events and event
processors are executed. Note that any object (histogram, parameter, etc)
which is created and registered in the user event constructors might replace an
object of same name that was loaded from the auto-save file before! To
continue working with the loaded objects, the user should request pointer to
the object by name from the framework here. Only if the object was not found it
should be created anew.
After
submit, the Analysis browser can be refreshed by . When an analysis was running before, the new
analysis is started immediately and the refresh is done automatically.
2.
Start the analysis with :
i.
The Go4 GUI will send the start
command and refresh the view in the analysis browser.
ii.
The UserPreLoop() function is executed once. Here transient pointers to data might be
initialized, values from a user file might be read, etc.
iii.
The Analysis event loop is
starting. For each event the analysis steps, the dynamic list entries, and the UserEventFunc() are executed. The loop will run until the event source is at the
end, an error occurs, or the stop command is applied by the user.
3.
Stop the analysis with :
i.
The event loop is halted. This
will not close the analysis itself, i.e. all event objects still exist, event
sources and -stores are still open. When restarting the analysis by ,
it will continue with the next event.
ii.
The UserPostLoop() function is executed once. Here transient pointers should be reset
to 0, user files might be written or closed, etc.
4.
Save configuration settings: At any time the current settings can be
saved to a preferences file. This will not affect the running analysis. Note
that after changing the settings in the analysis configuration window they must
first be submitted to save them!
5.
Load Settings: Loading analysis settings from a preferences file will
immediately close the running analysis. The closing actions are just as
described below. However, the loaded settings are not initialized until they
have been Submitted again from the analysis
configuration window!
The
analysis client is shut down with the a button. This will take the following actions
1.
The connection between analysis
and GUI is closed.
2. The destructor of the user analysis class is executed.
3.
Close of the analysis:
i.
Objects are written to the previous auto-save file, if SetAutoSave(kTRUE).
ii.
The event objects are deleted.
Go4 event sources (.lmd files and MBS connections) are closed. Event stores
(.root files) are finally written and closed. The destructors of all user events
and event processor classes are executed. All references to the event objects
are deleted from the Go4 folders.
iii.
The dynamic list is reset. All
pointers to non existing objects are cleaned up.
4. The analysis client executable terminates. The Go4 GUI is ready to connect the next analysis client.
The GUI may
disconnect the analysis server with the button. This
will neither stop the analysis nor shutdown the server task, but just close the
connections to this GUI. Additionally, when connected to an analysis
server, the GUI has a
button in the analysis toolbar and a menu for Shutdown Analysis server. This is
permitted in administrator mode only! This will take the following actions:
1.
Analysis server broadcasts message
about shutdown to all GUI clients connected. The GUIs will cease monitoring
activities and prepare for disconnect.
2.
The destructor of the user
analysis class is executed.
3.
Close of the analysis, see details in 4.5.10
4.
The analysis server disconnects
all GUI clients fast, i.e. without handshaking protocol, and terminates.
To begin with
Go4, there are examples of analysis packages at $
Example |
Analysis |
Step
factories |
Event
objects |
Steps |
Simple |
TGo4Analysis |
TGo4StepFactory |
TGo4EventElement |
Analysis |
1Step |
TXXXAnalysis |
TGo4StepFactory |
TXXXEvent |
Analysis |
2Step |
TXXXAnalysis |
TXXXUnpackFact |
TXXXUnpackEvent |
Unpack |
Mesh |
TMeshAnalysis |
TGo4StepFactory |
|
13 different |
When using Go4 at GSI where it is already
installed, Go4 is set up by
Note that there must be a space behind the
dot. To see all relevant environment variables use command
The output of this command would be helpful
if you report problems.
Copy the content of the directory $
The package consists of the following files
besides the include and source files:
·
Readme.txt
·
AnalysisStart.sh is the standard startup
script for analysis client One may add here definitions needed by the analysis.
·
Makefile
·
Go4UserAnalysisLinkDef.h contains ROOTCINT class pragma definitions
·
rename.sh is a script to set up file/class names.
Before renaming the files, cleanup by
command:
There is one string included in all class
and file names: XXX. It is recommended to replace this by another string more
specific. This is done by
Example:
Note that "myname" will be
part of all class and file names! Hint: do
not use a string which is already in any filename!
Then rebuild the package by command
Shared library libGo4UserAnalysis.so and executable MainUserAnalysis should be created.
rsh
When the analysis program is started from
the GUI, one can choose between rsh and ssh. For rsh shell, make sure that the
file .rhosts exists and that it contains
entries for the machine names you want to run the Go4 analysis client on. The
file .rhosts
could e.g. look like this:
node01
node02
localhost
Note: localhost should be listed here,
since this is the Go4 default.
ssh
To use ssh one must create ssh keys. These
keys are specific to the node where they are created:
cd
~/.ssh
ssh-keygen
-d
This package on Go4ExampleSimple contains a simple running Go4 analysis. It contains one analysis
step. It uses the standard Go4 analysis classes TGo4Analysis, TGo4StepFactory and
TGo4EventElement. Therefore the functions UserPreLoop(),
UserPostLoop(), and
UserEventFunc() are not available. No data can be
stored in the output event. The example uses some conditions and some parameter
objects. The step is reading events from a standard MBS event source filling
some histograms. No output file is written. The analysis processes up to eight
long word values from up to two sub events. A suited input file can be found on
the Go4 web or “MBS Random” event source can be used. All classes are defined
and declared in two files (*.h and *.cxx). Additional descriptions are in the
source files.
The main program
can be started from the Go4 GUI (see chapter 6.3, page 45) or by command line:
./MainUserAnalysis
-file|-trans|-stream|-evserv|-revserv input [-p port] [events]
./MainUserAnalysis -f myfile.lmd
The events can
be read from standard GSI lmd files or MBS or event servers. For each event the
user event processor TXXXProc (function BuildEvent) is called. This user event processor fills some histograms.
The macro MainUserAnalysisMacro.C can run directly in ROOT. It needs a .rootmap
file for automatically loading all necessary libraries. This file is created by
the new files Makefile and Module.mk
from the example.
The analysis,
analysis factory, and analysis step (all standard Go4 classes) are created in
the main program. The input is specified by a set of macros ( file.C, trans.C, stream.C, evserv.C,
revserv.C). Other setups are done in macro setup.C. The macros
are called in the main program by gROOT->ProcessLine.
The event
filled: TGo4EventElement (no
data, no user specific code)
The processor: TXXXProc
The standard
factory created in the main program keeps all information about the step. No
user event class is used in this example. Members of TXXXProc are histogram, condition, and parameter pointers used in the event
function BuildEvent(). In the constructor of TXXXProc the histograms, parameters and conditions are created. Method
BuildEvent() - called event by
event - gets the output event pointer as argument, but do not fill any data.
The input event pointer is retrieved from the framework. In the first part,
data from the raw input MBS event are copied to arrays of TXXXProc. Two sub-events (crate 1,2) are processed. Then the histograms are
filled, the 2d one with polygon conditions.
Parameter class TXXXParam
In this class
one can store parameters, and use them in all steps. Parameters can be modified
from GUI.
See also chapter
6.4.4, page 49. By default auto-save is enabled for batch, disabled
with GUI. The name of the file is built from the input by
<input>_AS.root
If it is enabled all objects are saved into this ROOT file at the end of the event loop. At startup the auto-save file is read and all objects are restored from that file. When TGo4Analysis is created, the auto-save file is not yet loaded. Therefore the objects created here are overwritten by the objects from auto-save file (if any), except histograms. From GUI, objects are loaded from auto-save file when the Submit button is pressed. Note that histograms are not cleared. One can inspect the content of the auto-save file with the Go4 GUI. Note that appropriate user libraries should be loaded into GUI to access data from auto-save file (see chapter 6.2, page 45).
All lines with
**** are from the example classes.
>
MainUserAnalysis –event MBS42 1000
**** Input MBS42 (-e)
process 1000 events
auto save file: MBS42_AS.root
**** evserv.C: Create MBS event server
input MBS42
**** setup.C: Setup analysis
****
**** Factory: Create input event for MBS
**** Factory: Create event processor
XXXProc
**** TXXXProc: Create instance XXXProc
**** TXXXProc: Restored histograms from
autosave
**** TXXXProc: Restored conditions from
autosave
**** TXXXProc: Restored pictures from
autosave
**** Factory: Create output event
XXXEvent
**** Event XXXEvent has source XXXProc
class: TXXXProc
**** TXXXProc: Delete instance
****
Creating a new
class
Provide the
definition and implementation files (.h and .cxx)
Add class in Go4UserAnalysisLinkDef.h
Then make all.
Most probably you
will change TXXXParam to keep useful parameters.
Then definitely you will change TXXXProc to create your histograms, conditions, pictures, and finally write your analysis function BuildEvent().
Before running MainUserAnalysisMacro.C in ROOT CINT it must be changed because all parameters are hard coded.
This package on Go4Example1Step contains a simple running Go4 analysis. It contains one analysis
step. It uses the standard Go4 step factory TGo4StepFactory, but a user written
TXXXAnalysis. In this class the functions UserPreLoop(),
UserPostLoop(), and
UserEventFunc() can be used. It uses some
conditions and some parameter objects. The step is reading events from a
standard MBS event source filling some histograms and an output event. The
analysis processes up to eight long word values from up to two sub events. A
suited input file can be found on the Go4 web. All classes are defined and declared
in two files (*.h and *.cxx). Additional descriptions are in the source files.
Setup: TXXXAnalysis
The main program
can be started from the Go4 GUI (see chapter 6.3, page 45) or by command line:
./MainUserAnalysis
-file|-trans|-stream|-evserv|-revserv input [-output] [events]
./MainUserAnalysis -f myfile.lmd
The events can
be read from standard GSI lmd files or MBS or event servers. For each event the
user event processor TXXXProc (method BuildEvent()) is called. This user event processor fills some histograms and an
output event TXXXEvent (raw event) from the input event. The output events can optionally
be stored in ROOT files. When a ROOT file with raw events exists, it can be
viewed by the Go4 GUI using the tree viewer. Note that appropriate library
should be loaded into GUI to let the viewer know TXXXEvent (see chapter 6.2, page 45).
In TXXXAnalysis the analysis step is created with the step factory and input and
output parameters. Here the defaults are set concerning the event IO. Two parameter
objects are created (TXXXParam and TXXXControl).
The event
filled: TXXXEvent
The processor: TXXXProc
The standard
factory created in TXXXAnalysis keeps all information about the step. The TXXXEvent contains the data members to be filled in TXXXProc from the input event (MBS 10,1). The Clear() method must clear all these members (an array for each crate in the
example). The analysis code is in the event processor TXXXProc. Members are histograms, conditions, and parameter pointers used in
the event function BuildEvent(). In the constructor of TXXXProc the histograms and conditions are created, and the pointers to the
parameter objects (created in TXXXAnalysis) are retrieved. Function BuildEvent ()- called event by event - gets the output event pointer as
argument (TXXXEvent). The input event pointer is retrieved from the framework. In the
first part, data from the raw input MBS event are copied to the members of output
event TXXXEvent. Two sub-events (crate 1,2) are processed. Then the histograms are
filled, the 2d one with polygon conditions.
The name of the
optional output file is built from the input by
<input>_XXXEvent.root
Parameter class TXXXParam
In this class
one can store parameters, and use them in all steps. Parameters can be modified
from GUI.
Parameter class TXXXControl
This class has
one member "fill" which is checked in TXXXProc->Event() to fill histograms or not. The macro
setfill.C(n), n=0,1 can be used in the GUI to switch the filling on or off. It
creates macro histofill.C() which is actually used to set filling on or off (in TXXXProc). You can also modify histofill.C by editor before running
the analysis.
See also chapter
6.4.4, page 49. By default auto-save is enabled for batch, disabled
with GUI. The name of the file is built from the input by
<input>_AS.root
If it is enabled
all objects are saved into this ROOT file at the end of the event loop. At
startup the auto-save file is read and all objects are restored from that file.
When TXXXAnalysis is created, the auto-save file is not yet loaded. Therefore the
objects created here are overwritten by the objects from auto-save file (if
any), except histograms. From GUI, objects are loaded from auto-save file when
the Submit button is pressed. Note that histograms are not cleared. One can
inspect the content of the auto-save file with the Go4 GUI. Note that appropriate
user libraries should be loaded into GUI to access data from auto-save file
(see chapter 6.2, page 45).
All lines with
**** are from the example classes.
> MainUserAnalysis –e MBS42 1000
**** Input MBS42
(-e)
output MBS42_XXXEvent.root disabled
process 1000 events
auto save file: MBS42_AS.root
**** Analysis: Create MBS event server
input MBS42
****
**** TXXXParam Par1 updated from auto
save file
**** TXXXControl Control updated from
auto save file
**** TXXXControl: Histogram filling
enabled
**** Factory: Create input event for MBS
**** Factory: Create event processor
XXXProc
**** TXXXProc: Create instance XXXProc
**** TXXXControl: Histogram filling
enabled
**** TXXXProc: Restored histograms from
autosave
**** TXXXProc: Restored conditions from
autosave
**** TXXXProc: Restored pictures from
autosave
**** Factory: Create output event
XXXEvent
**** TXXXEvent: Create instance
XXXEvent
**** TXXXAnalysis: PreLoop
First event #: -1926055269
**** TXXXAnalysis: PostLoop
Last event #: -1926053525 Total events: 1000
**** TXXXAnalysis: Delete instance
**** TXXXEvent: Delete instance
**** TXXXProc: Delete instance
****
Creating a new
class
Provide the
definition and implementation files (.h and .cxx)
Add class in
Go4UserAnalysisLinkDef.h
Then make all.
Most probably
you will change TXXXParam to keep useful parameters.
Then you might
change TXXXEvent to represent your event data.
Keep the Clear() method consistent with the data members!
Then definitely
you will change TXXXProc to create your histograms, conditions,
pictures, and
finally write your analysis function BuildEvent().
In TXXXAnalysis there are three more functions which eventually can be useful:
UserPreLoop () - called before event
loop starts,
UserEventFunc() - called after each TXXXProc::BuildEvent(),
UserPostLoop () - called after event loop stopped.
This example on Go4Example2Step contains an unpack step and an analysis step. It uses some
conditions and some parameter objects. Step one is reading events from a
standard MBS event source filling some histograms and an output event. Step two
uses this event as input and fills another output event and some more
histograms. The analysis processes up to eight long word values from up to two
sub events. A suited input file can be found on the Go4 web.
The main program
(MainUserAnalysis) can be started from the Go4 GUI (see chapter 6.3, page 45) or by command line:
./MainUserAnalysis
-file|-trans|-stream|-evserv|-revserv|-random
input [-server] [-port #][-output]
[events]
./MainUserAnalysis -f myfile.lmd
The events are
read from standard GSI event sources (in the GUI one can switch to MBS or event
servers). Then the first user event processor is called (Unpack). This
user event processor fills some histograms and the first user event (unpacked
event) from MBS input event. Then the second user event processor is called (Analysis).
This user event processor fills some other histograms and the second user event
(calibrated event) from the first event. The events from the first and second
step can optionally be stored in ROOT files (from GUI). When a ROOT file with
unpacked events exists, the first step can be disabled, and this file can be selected
as input for the second step (from GUI).
The main program
builds the files names needed and creates the TXXXAnalysis. Then it either connects to the GUI (when started from GUI) or
starts the event loop (when started from shell). If –server is specified,
GUIs invoked by go4
–client may connect.
Files created by
the example are
Go4AnalysisPrefs.root:
saved preferences
<input>_AS.root:
auto-save file
<input>_XXXUnpack.root:
event tree output from step 1
<input>_XXXAnl.root:
event tree output from step 2
All classes
are defined and declared in two files (*.h and *.cxx)
In TXXXAnalysis the two steps are created with
their factories and input and output parameters. Here the defaults are set
concerning the event IO. Two parameter objects are created (TXXXParameter). They can be used in both steps.
The
factory: TXXXUnpackFact
The event
filled: TXXXUnpackEvent
The
processor: TXXXUnpackProc
The factory TXXXUnpackFact normally need not to be
changed as long as standard GSI event sources are used.
The TXXXUnpackEvent contains the data members to
be filled from the input event (MBS 10,1). Only the Clear() method must be changed to clear all these members.
The unpacking code is in the event processor TXXXUnpackProc. Members are histograms, conditions, and parameter pointers used in the event method XXXUnpack(). This name can be chosen by the user. In the Fill() method of TXXXUnpackEvent this method must be called. In the constructor of TXXXUnpackProc the histograms and conditions are created, and the pointers to the parameter objects (created in TXXXAnalysis) are set. XXXUnpack() - called event by event - gets the output event TXXXUnpackEvent as argument (poutevt). The input event is retrieved from the framework. The first eight channels of crate one and two are filled in histograms Cr1Ch01-08, Cr2Ch01-08, respectively. His1g is filled under condition cHis1 on channel 0, His2g under condition cHis2 on channel 1. When editing conditions cHis1,2 histograms His1,2 filled by channel 0,1 will be displayed automatically to set/display the condition values. Picture condSet shows histograms His1,2 on top, His1,2g at bottom. Open the condition editor in the view panel of the picture. Conditions cHis1,2 will be selectable. They are displayed in the pad where they should be set. Both conditions are attached to the picture (see chapter 6.8.4, page 69). Histogram Cr1Ch1x2 is filled for three polygon conditions: polycon, polyconar[0], polyconar[1], all on the same values as the histogram.
The
factory: TXXXAnlFact
The event
filled: TXXXAnlEvent
The
processor: TXXXAnlProc
The step two is
build in the same way as step one.
Note that the TXXXUnpackEvent is used two times: once as
output of step one, and once as input of step two. Therefore the Fill() method checks if TXXXUnpackEvent has to
be filled by XXXUnpack() in step one or retrieved from input file of step two which should
be an output file of step one. Step one must be disabled in the second case.
The user method XXXEventAnalysis() always gets the pointer to the correct event. Histogram Sum1 is filled by first 4 channels of crate 1 and first 4 channels of
crate 2. All channels are gated with condition wincon1. Histograms Sum2,3 are
filled similar, but without gate, and shifted by XXXPar1,2->frP1. Histogram Sum1calib is
filled like Sum1 without
gate but with values calibrated by method TXXXCalibPar->Energy()
of parameter calipar.
With the TXXXParameter class one can store parameters, and use them in all steps. Parameters can be modified from GUI by double click.
In TXXXCalibPar is an example how to use fitters in parameters to calibrate
histograms (more chapter 6.11.3, page 75).
There are a few conditions created in TXXXUnpackProc. One (polycon) is used in XXXUnpack() for the accumulation of histogram Cr1Ch1x2. Another one (wincon1) is used in XXXEventAnalysis() of TXXXAnlProc to fill histogram Sum1. Conditions can be modified by double click in the browser. One can attach a histogram to a condition or attach conditions to picture pads to ensure that the condition is displayed/set on the proper display.
This example on Go4ExampleMesh shows
how to set up a Go4 analysis of several steps that build a mesh of parallel
analysis branches with different result generations. Additionally, one can see
how the improved TGo4FileSource class supports partial input from a ROOT tree.
The setup of the mesh analysis is done in
the constructor of the TMeshAnalysis class. As in the Go4ExampleSimple, the general TGo4StepFactory is used to specify the event objects by name and class name. An
overall of 13 analysis steps is defined for this example. Generally, the
analysis mesh consists in two different kinds of steps, the execution steps and
the provider steps. The unpack step, however, is as in the other examples just
delivering sample data from a TGo4MbsSource (standard Go4 gauss example).
The step structure of the example mesh is
as sketched in this figure (arrows show dataflow):
These analysis steps do the actual
analysis work, i.e. they convert some input event into the output event. This
is the same as in the more simple examples (2-Step). However, to realize a mesh
structure, the execution steps do not work directly on their own input event as
assigned from the Go4 framework, but use the input event of one or more
provider steps. The execution steps can access the input event pointers of any
provider step by the provider step name, using the GetInputEvent("stepname") method. Note that the native input event of the execution steps is
never used here (except for the very first "Unpack" step that
processes the initial MBS event directly, without a provider step). There are
no histogramming actions in the execution steps. To view the result data one
has to use a dynamic list histogram or perform a TTree::Draw on the output
event's tree, if existing.
These analysis steps do not perform any
analysis work at all, but only make sure that their own input event is always
set correctly for the following execution steps, depending on the data flow
situation. Generally, there are two cases:
-
the provider step reads the
input event directly from a branch of a ROOT tree (TGo4FileSource). In this case,
the input event remains the native input event of this step as created in the
step factory.
-
the provider step refers to the
result event of a previous execution step.
In this case, the provider processor
itself has to find the correct event pointer by name from the Go4 object management.
The default Go4 framework mechanism to handle these two cases will not suffice
here, since it was designed for a subsequent order of steps and not for a mesh
with parallel execution branches.
To do this job, all provider steps use
the TMeshProviderProc class as general event processor, and the TMeshDummyEvent class as pseudo output event. The TMeshDummyEvent is necessary,
because the Go4 framework will always call the Fill() method of the step's output
event to execute any action of the step. So TMeshDummyEvent::Fill() calls
method TGo4ProviderProc::SetRealInput() to set the pointer to the desired input event correctly.
If the input event is not read from file
(native input event of this step), the provider processor has to search for it
by name using the method TGo4Analysis::GetEventStructure("name"). However, the Go4 framework so far does not offer any additional
parameter to specify the name of the appropriate input for a provider step.
Therefore, this example uses the trick to derive the event name search string
from the name of the provider processor itself: the name of this processor (up
to the "_") is the name of the required event. Note that TGo4StepFactory forbids to use same names for different objects, since the object
name is used as pointer name in the ProcessLine() call; therefore the processor name can not be identical with the
input event name, but must differ by the "_" extension.
Additionally, the provider steps use the
new partial input feature of the TGo4FileSource class (since Go4v2.9). The name
of the event structure defines the name of the TTree branch that should be read
from the input file. The first three provider steps use different parts of the TMeshRawEvent each. If the input event name is set to the name of the corresponding
tree branch (e.g. "RawEvent.fxSub1"), the file source will only read this branch from the tree.
If the input event name is set to the full name of the raw event ("RawEvent",
commented out in this example), the complete event is streamed, including the
not used parts. Note that in both cases the event object must consist in the
full TMeshRawEvent, although in the partial input case only one sub-event is filled.
This is required for a proper event reconstruction due to the ROOT TTree
mechanism. In this example, the partial event input might increase the process
speed by a factor of 2 compared to the full event input.
Although the step configuration can be
defined as usual from the analysis configuration GUI, not all combinations of
enabled and disabled steps make sense to process a subpart of the complete
analysis mesh. For example, if execution step 2 shall be processed, the
corresponding provider step for its input event has to be enabled, too. Note
that the standard step consistency check of the Go4 framework is disabled here
to run such a mesh at all (SetStepChecking(kFALSE)). So it is user responsibility to ensure that all required event objects
are available for a certain setup. Moreover, with >13 analysis steps the standard
analysis configuration GUI becomes quite inconvenient.
Therefore, the example uses a Go4
parameter TMeshParameter for the easy setup of the configuration. This parameter has just a
set of boolean flags to determine which execution step shall be enabled.
Depending on this setup, the UpdateFrom()
method of the parameter also enables or disables
the required provider steps. However, the parameter does not contain the full information
of the input file names for the providers yet (In a "real"
application, this could be implemented in a similar way though).
Thus the configuration procedure looks
like this. The TMeshParameter is edited on the GUI to enable the desired execution steps. The parameter
is send to analysis and switches the steps on and off. Then the analysis
configuration GUI has to be refreshed by the user pressing button to view
the new setup. Here the user may change the names of the event sources for the
provider steps, if necessary. After submitting these settings again from the configuration
GUI, the mesh setup is ready. Note that once the mesh is configured in this
way, the configuration can be stored completely in the analysis preferences and
restored on the next startup.
One could also think of a user defined GUI
that handles both the setup of the TMeshParameter, and the rest of the analysis configuration in one window. This
would offer the additional advantage that it could show the structure of the
analysis mesh in a graphical way. However, such a user GUI is not delivered
here, but can be created according to the hints given in package Go4UserGUI
(see chapter 6.16, page 80).
One way to test the example could look like this:
The following picture shows the GUI with all elements. On the right side you see the Go4 browser. The left side will be the display panel. Below is the Tree viewer, and under this the message window, the mbs monitor, and the analysis status display. With Show/Hide in the Settings one can configure the layout and save/restore it. All buttons in the top row are also available as pull down menus commands.
gui300
This would be the minimal look of a running analysis (the date is updated from the analysis):
There are several screen movies on the Go4 web showing the use of
the Go4 GUI.
There are many keyboard shortcuts to handle windows and actions. See chapter 11, page 92.
The icons in the top line are grouped into
three segments corresponding to the first three pull down menus File, Tools, and Analysis.
Pull
down |
Icon |
Function |
File |
|
Open: opens local ROOT file |
|
|
Open Remote: open TNetFile, TWebFile or TRFIOFile to access remote data |
|
|
Open HServer: open conntection to gsi histogram server |
|
|
Save memory: save content of the memory browser into a ROOT file |
|
|
Close all files: close all ROOT files opened in file browser |
|
|
Exit: closes
window and exit from GUI |
Tools |
|
View Panel: creates window (canvas) to display histogram(s) |
|
|
Fit Panel: opens fit panel |
|
|
Histogram properties: opens window showing histogram properties |
|
|
Create New His: opens
histogram creation window |
|
|
Condition properties: opens window showing conditions properties |
|
|
Condition Editor:
opens central condition editor |
|
|
Event
Printout: examine
current event contents |
|
|
Create Dyn. List Entry: histogramming
on the fly |
|
|
Load Libraries: opens tool to load ROOT libraries |
|
|
User
GUI: starts user GUI |
Analysis |
|
Launch Analysis: starts up the analysis task (as client or server) |
|
|
Connect to Analysis: login to running analysis server |
|
|
Prepare connection: allow external analysis client
connect to this gui |
|
|
Disconnect Analysis: remove connection without analysis server shutdown. |
|
|
Shutdown Analysis server: in administrator mode only! |
|
|
Set+Start: submit setting and start analysis |
|
|
Start: start analysis events loop (after setup and submit) |
|
|
Stop: stop analysis events loop |
|
|
Configuration: open the configuration windows |
|
|
Analysis Window: opens the output window of the analysis |
The help menu provides manuals on-line.
gui357
In the Settings pull down menu as shown on the left side one can set Fonts and Style, Preferences and Panel defaults, where one can
set the histogram Statistics box and view panel layout. Preferences specifies when objects are fetched automatically from analysis.
You can adjust all fields according your needs. Then Save Settings. The next start of the GUI will restore the saved layout. Note that settings also contain other preferences, like window geometry and tools visibility, view panel background color and crosshair mode, graphical marker appearance, connection setup parameters, etc. By default, the settings are stored in text files ./.go4/go4localrc and ./.go4/go4toolsrc. To get the standard setup one may delete these two files. If the current directory does not contain a Go4 settings file on Go4 GUI startup, it will be created using the global account preferences at $HOME/.qt, or from the standard installation settings.
Settings
behavior can be changed using environment variable
With the Show/hide entry of the settings menu (or with RMB in an empty menu region) one gets the window on the right to select which tools shall be visible. The actual content of these windows is preserved even if they are not displayed. This is also available as popup menu when clicking the right mouse button on an empty field of the main window.
The Log actions of the GUI can be
defined in a setup window from the settings menu. By default, the log output
(e.g. condition properties, histogram information) is printed into the shell
window where the GUI was started from. Additionally, a text file may be
specified for output. Logging mode specifies if log output is produced On demand only (i.e. on clicking the log button when available), or Automatic whenever the content
of an editor/information window changes. Priority defines the level of output suppression: Errors, Warnings, Infos, or Debugs. Level Errors will only log in case of
an error, Debugs
will printout even debug information of the Go4 kernel. This reflects the priority
of the TGo4Log::Message() method.
In the Panel defaults►Canvas color menu the default background color for all newly opened view panels
can be set. This color may be saved together with the other settings. Panel defaults►Marker labels specifies the default label layout.
The Crosshair mode entry toggles the
default crosshair cursor on/off for all newly opened view panels. This
crosshair state may be saved together with the other settings. However, the
crosshair can be switched independently for each pad in the menu of the view
panel (see chapter 6.7, page 59).
The Generate hotstart entry will save the current state of the GUI (window geometry,
objects in memory and monitoring list, objects in view panel, analysis settings)
to a Go4 hot start file (*.hotstart). The name of the hot start file can be defined in file dialog
here. When re-starting the Go4, the hot start file may be used as command line
argument, restoring the state of GUI and analysis (see chapter 6.15, page 80).
With Terminal history the buffer size for the analysis output window can be limited.
The Windows pull down menu shown on the right side provides items to arrange the windows and to save and clear the analysis and log windows.
To access data from user defined classes (like parameters or events) a library including the ROOT dictionary is required. This library is produced by the make file and has the name libGo4UserAnalysis.so. It is recommended to load user libraries for non-Go4 classes (for instance, user event classes) before opening a file with a TTree, where object of these classes are stored. There are three different ways to do it.
First, any
external shared library (with or without ROOT dictionary inside) can be loaded
by press of the button on the main window. A file dialog then
asks to specify the library to be loaded.
Second, set the
environment variable
export
Third, the new possibility (since ROOT 4.00/08) for automatic load of libraries with a .rootmap file. This file contains information to automatically load all necessary libraries for user classes. All make files of the Go4 examples generate .rootmap files during compilation. To explicitly generate this file again, type make map after compilation. If this file is located in the current directory (where GUI is started) or in the user home directory, all libraries will be loaded automatically at the time when required. For more details about .rootmap files see the ROOT home page.
Press the button (or Alt a n or Strg n). This will start the Launch analysis window to
execute the analysis task on another host. The operation mode of the analysis
task may be “As client” (default), or “As server”; this has to be specified in
the selection box on top of the Start Anaylsis window.
The difference of these modes is that in client mode the analysis connects as client to the starting GUI and will be finished when the Go4 GUI terminates. There can be only one GUI connected to an analysis in client mode. The starting GUI will connect automatically to the analysis client after launching it with full controller priviliges.
In contrast to this, the analysis started
“as server” will be an external process independent of the starting GUI. Therefore
in server mode the analysis can not run
embedded into the Qt Window of the GUI.
Any number of Go4 GUIs may connect to this analysis server with
different priviliges, but only one GUI may be the authorized controller. Especially
the starting GUI has to login to the analysis server after launching it in a
separate dialog window.