Release notes for DAQ/HLT-I S/W Release tdaq-02-00-00
General notes from s/w librarian
Packages and tags used in the release
| ac |
v4r4p5 |
| AccessManager |
AccessManager-00-06-02 |
| clips |
clips-06-24-00 |
| cmdl |
cmdl-01-04-14 |
| cmem_rcc |
v2r0p23 |
| coca |
coca-01-09-03 |
| config |
config-02-00-00 |
| coral_auth |
coral_auth-01-10-00 |
| dal |
dal-01-15-05 |
| DAQPanel |
DAQPanel-07-00-04 |
| DataflowPolicy |
v1r6p0 |
| dbe |
dbe-00-01-02 |
| dccommon |
v1r1p19 |
| dcmessages |
v2r4p6 |
| ddc |
ddc-05-05-00 |
| DFConfiguration |
v9r4p6 |
| DFDebug |
v2r0p19 |
| DFExceptions |
v3r1p0 |
| DFM |
v2r21p2 |
| DFRelease |
DFnightly-00-01-01 |
| DFSubSystemItem |
v6r4p0 |
| DFTests |
v2r1p6 |
| DFThreads |
v2r4p1 |
| dnc |
dnc-01-00-06 |
| dqm_config |
dqm_config-00-06-01 |
| dqm_display |
dqm_display-00-01-04 |
| dqmf |
dqmf-00-06-01 |
| dvs |
dvs-00-33-02 |
| dvs_gui |
dvs_gui-00-00-06 |
| dynlibs |
v1r3p2 |
| ed |
ed-00-02-20 |
| efd |
efd-01-15-18 |
| efio |
v2r10p2 |
| emon |
emon-00-04-02 |
| errorRecovery |
v3r2p21 |
| ErrorReporting |
v3r0p1 |
| FarmTools |
FarmTools-02-01-04 |
| file_sampler |
tdaq-02-00-00 |
| gatherer |
v8r8p81 |
| genconfig |
genconfig-03-00-00 |
| gnam |
gnam-04-02-00 |
| gnamDummyLib |
gnamDummyLib-01-03-00 |
| histmon |
histmon-00-02-27 |
| hltinterface |
v0r0p21 |
| igui |
igui-01-01-52 |
| Igui |
Igui-00-00-04 |
| instrumentation |
v1r3p7 |
| io_rcc |
v2r0p41 |
| ipc |
ipc-04-08-09 |
| is |
is-05-06-03 |
| ispy |
ispy-00-00-27 |
| Jers |
Jers-01-00-05 |
| ktidbexplorer |
ktidbexplorer_pre-02-00-00_00 |
| l2dummy |
v1r8p17 |
| l2pu |
v1r19p28 |
| l2rh |
v2r1p7 |
| L2streamTest |
v1r2p1 |
| l2sv |
v1r14p17 |
| ls |
ls-01-02-09 |
| mda |
mda-05-00-01 |
| mda_browser |
mda_browser-00-00-03 |
| MonaIsa |
tdaq-02-00-00 |
| MonGatherer |
MonGatherer-02-16-00 |
| mrs |
mrs-01-09-09 |
| msg |
v1r2p4 |
| msgconf |
v1r4p10 |
| msginput |
v1r3p1 |
| msgsctp |
v1r2p3 |
| msgtcp |
v1r2p1 |
| msgudp |
v1r2p3 |
| NetPanel |
NetPanel-01-01-01 |
| NSG |
NSG-02-00-02 |
| oh |
oh-00-00-88 |
| ohp |
ohp-03-03-02 |
| ohpplugins |
ohpplugins-01-01-00 |
| oks |
oks-04-00-05 |
| oks2cool |
oks2cool_pre-02-00-01_00 |
| oks2coral |
oks2coral-02-02-00 |
| oksconfig |
oksconfig-02-03-02 |
| OMD |
OMD-00-00-44 |
| omni |
omni-04-01-03 |
| omniPy |
omniPy-00-00-01 |
| onasic |
onasic_pre-02-00-01_00 |
| OnlinePolicy |
online-00-23-00 |
| OnlineRecovery |
OnlineRecovery-02-02-04 |
| OnlineRelease |
OnlineRelease-00-00-63 |
| opmon |
opmon-00-00-09 |
| owl |
owl-00-00-27 |
| PackageID |
v1r0p19 |
| PartitionMaker |
PartitionMaker-06-06-05 |
| PmgGui |
PmgGui-00-00-11 |
| ProcessManager |
ProcessManager-01-02-30 |
| pt |
v4r5p2 |
| ptdummy |
v3r12p3 |
| PTIO |
PTIO-03-10-06 |
| queues |
v1r0p16 |
| rcc_corbo |
v2r0p4 |
| rcc_error |
v2r0p5 |
| rcc_rodbusy |
v2r0p8 |
| rcc_time_stamp |
v2r0p9 |
| rcdal |
rcdal-00-02-00 |
| RCDBitString |
v1r4p2 |
| RCDExampleModules |
v2r3p5 |
| RCDExampleTriggers |
v0r3p2 |
| RCDJtagChain |
v1r3p0 |
| RCDLtp |
v2r0p3 |
| RCDLtpi |
v2r0p1 |
| RCDLtpiModule |
v2r0p1 |
| RCDLTPModule |
v2r0p3 |
| RCDMenu |
v1r4p0 |
| RCDModuleDesign |
v4r1p0 |
| RCDTtc |
v2r0p0 |
| RCDUtilities |
v1r4p0 |
| RCDVme |
v2r0p0 |
| RCInfo |
RCInfo-00-02-03 |
| RCUtils |
RCUtils-01-03-01 |
| rdb |
rdb-06-00-02 |
| rdbconfig |
rdbconfig-01-08-00 |
| rm |
rm-02-02-16 |
| Rm-Gui |
Rm-Gui-01-00-03 |
| rn |
rn-02-00-00 |
| robin_ppc |
v0r0p89 |
| RobinTestSuite |
v2r1p26 |
| RODBusy |
v2r0p0 |
| RODBusyModule |
v2r0p0 |
| roib |
v2r7p5 |
| ROSApplication |
v6r6p5 |
| ROSBufferManagement |
v2r4p0 |
| ROSCore |
v9r0p1 |
| rose |
v1r19p14 |
| ROSEventFragment |
v2r2p2 |
| ROSEventInputManager |
v2r2p0 |
| ROSfilar |
v2r0p35 |
| ROSGetInput |
v2r0p4 |
| ROSInterruptScheduler |
v1r0p5 |
| ROSIO |
v7r3p6 |
| ROSMemoryPool |
v2r2p1 |
| ROSModules |
v2r8p6 |
| ROSMonitor |
v1r1p7 |
| ROSObjectAllocation |
v2r0p1 |
| ROSRCDdrivers |
ROSRCDdrivers-00-00-43 |
| ROSRobin |
v0r1p71 |
| ROSslink |
v2r0p11 |
| ROSsolar |
v2r0p50 |
| ROSUtilities |
v2r5p0 |
| RunController |
RunController-01-08-14 |
| SFI |
v4r11p13 |
| SFIOEmulators |
SFIOEmulators-00-08-05 |
| SFO |
v2r17p5 |
| siom |
v1r12p0 |
| sysmon |
v2r2p15 |
| sysmonapps |
v2r3p10 |
| system |
system-00-00-12 |
| TDAQExternal |
TDAQExternal-00-12-02 |
| TDAQPolicy |
TDAQPolicy-00-07-12 |
| thread_allocator |
v1r0p7 |
| threads |
v1r1p13 |
| tidb2 |
tidb2_pre-02-00-00_00 |
| tmgr |
tmgr-01-06-01 |
| training |
training-00-05-02 |
| transport |
v1r1p12 |
| TriP |
TriP-00-00-43 |
| ttcpr |
v2r2p0 |
| TTCviModule |
v2r0p0 |
| vme_rcc |
v2r0p50 |
| wmi |
wmi-00-05-01 |
| xmext |
xmext-01-02-09 |
Changes in packages (in ABC order)
AccessManager |
clips |
config |
DAQPanel |
dbe |
dcmessages |
DFConfiguration |
DFM |
dqm_config |
dqmf |
dvs |
dvs_gui |
efd |
efio |
emon |
gatherer |
genconfig |
gnam |
igui |
Igui |
ispy |
ls |
mda_browser |
MonGatherer |
mrs |
oks |
oks2coral |
oksconfig |
OMD |
OnlineRecovery |
PmgGui |
ProcessManager |
PTIO |
rcc_time_stamp |
RCDLtp |
RCDLtpi |
RCDLtpiModule |
RCDLTPModule |
rdbconfig |
rn |
RODBusy |
RODBusyModule |
ROSCore |
ROSEventFragment |
ROSInterruptScheduler |
ROSIO |
ROSModules |
ROSRCDdrivers |
ROSRobin |
RunController |
SFI |
SFO |
tmgr |
training |
TriP |
TTCviModule |
vme_rcc |
wmi |
AccessManager
Policies
The XACML policies generated by the Policy Adminitration
Point code use the "Ordered Permit Overrides" policy algorithm instead of
"Deny Overrides" policy algorithm.
New resource categories:
-
DataBase category for OKS editor and administration
tools.
-
ResourceManager category for the Resource Manager
TDAQ component.
- BCM category for the BCM subdetector panel.
Server
- Allow to set the server backlog size through an
environment variable TDAQ_AM_SERVER_SOCKET_BACKLOG.
- Added the PAP_UPDATE control message to invalidate
the internal PAP cache when the policies are changed.
- Reads the configuration variables from an LDAP
server if provided
- Logging levels naming changed: NORMAL -> MINIMUM, VERBOSE -> NORMAL, VERY VERBOSE -> VERBOSE
Client API
Reads first the configuration from the file /sw/tdaq/AccessManager/cfg/client.cfg, then from
environment. If the configuration file is not found, then an information
messages is logged to indicate this. The production environment must make sure the file is available (even if it's empty). The configuration file must contain lines with the following format:
#The line with comments must start
with '#' character
VARIABLE_NAME=VARIABLE_VALUE
C++ API
- Contact the next AM server in the list in case a
timeout occurs during answer receiving from the server.
- The am server history contains now the server ip
addresses next to their names.
- Use poll function for the
socket timeout operations.
- Changed the gethostbyname
function with getaddrinfo because the former is not thread safe.
Java API
- Set the log level to none if the AM authorization is
disabled so that no log files and directories are created.
- Fixed the RunControlResource object to get the partition name from the ResourceTypePartition input value
Tools
-
amUserRoles:
-
added the "-G" flag to specify a role category to
prefix the roles to be processed
-
allow to process more users in the same time
provided either in the command line or in a input text file
-
amPAP:
-
added the functionality to update the policies on the local disk of AM servers defined in LDAP
clips
Description
The package is importing third-party s/w package, CLIPS - "C" Language
Intagrated Production System, a framework for building embeddable
rule-based expert systems. It is used in tdaq s/w in diagnostics and
recovery packages.
CLIPS home page
Changes in tdaq-02-00-00
New CLIPS version
Package updated with latest production version of CLIPS, 6.24.00
Documentation
config
C++ API Changes
To support 64-bits platform the ConfiObject get() and set() methods use typedefs from
<stdint.h> instead of non-safe built-in C++ types. One has to
replace any occurrences of explicitly used in such methods signed and
unsigned char, short and long types as shown in the following table:
OKS Type |
Old C++ Type |
New C++ Type |
s8 (8-bits signed integer) |
unsigned char |
uint8_t |
u8 (8-bits unsigned integer) |
signed char |
int8_t |
s16 (16-bits signed integer) |
unsigned short |
uint16_t |
u16 (16-bits unsigned integer)
|
signed
short
|
int16_t
|
s32 (32-bits signed integer)
|
unsigned
long
|
uint32_t
|
u32 (32-bits unsigned integer)
|
signed
long
|
int32_t
|
Java Changes
The methods of config.Configuration
class are synchronized for multi-thread safety.
DAQPanel
The DAQPanel is part of the
TDAQ release since tdaq-02-00-00.
A detailed descripion of changes is available in the ChangeLog file available in the
package root directory.
To start the DAQPanel just
execute the daqPanel binary;
the following command line options are available:
- --setup_dir
<setup_dir> Directory
containing setup scripts [default is $HOME]
- --db_dir
<db_dir>
Directory containing database files [default is $HOME]
- --general_dir <general_dir> Directory used to save/get
files [default is $HOME]
To have default values for the setup script, database name and
partition name when the Get Default
button is pushed the following environment variables have to be
defined: TDAQ_SETUP_SCRIPT (the setup script full path),
TDAQ_DB_DATA_DEFAULT (the database file full path),
TDAQ_PARTITION_DEFAULT (the partition name).
Some applications will not be started because only available (or using
customized scripts) at P1:
- General tab:
Busy Presenter;
- Mon Advanced:
MDA Browser, SFO Display, Det Mask;
- Ctrl Advanced:
(De)Activate Automatic Recovery.
dbe
General description
Official web page of DBE package contain links to known issues, User Guide etc.
What is implemented:
- DB access by oksconfig (oks xml files), rdbconfig (RDB servers) and roksconfig (DB in Oracle archives) plugin.
- Data preview in table and tree widgets
- Object creating and change
- UNDO history of user change
- Plugin interface with example how to write customized consistency check
- Python interface to run python scripts
- Search by string matching the name of classes or objects or searching by matching UID of objects in DB
What is NOT implemented:
- Query builder and standalone find interface
- Local copy saving of DB changes
- Open multiple configurations
- Bulk operations over data
Options/Arguments:
dcmessages
Changes since tdaq-01-09-03
- The messages along the trigger path (L2PU-->L2SV-->SFI-->DFM) have been modified following the new version (2.5) of dc-022. The changes were needed to support multiple pROSs in the system and consist in trasporting the pROS NodeID, event by event, from L2PU to the SFI.
DFConfiguration
General changes
....
Configuration Schema Changes since tdaq-01-09-01
Changes related to EF
- Removed EF_SubFarm class
- use HLTSegemnt instead
- IS/OH server names retrieved from envirnoment variable
automatically set by InfrastructureApplication::SegmentProcEnvVarName
- Added class for configuration of EFD event sampler
(EFD_SamplingTask)
- Added parameters to enable event stripping at EFD output
(EFD_OutptTask::eventStripping)
Changes related to EB
- Added a fourth value "Preload" to the TriggerSource attribute of the DFMConfiguration class
- Added a relationship to a SFODBConnection object in the SFIConfiguration class
Information Service Info Description Changes
since tdaq-01-09-01
dc_is_info
- EFD, added parameters: EventsRecovered, latestGID,
EventDuplicWarnings
- DFM, added parameters: event duplication warnings, failed assignments
- SFI, added parameters: NumBCIDErrors, EventDuplicWarnings, NumMissingL2Results
ros_is_info
Configuration Data Changes (examples) since
tdaq-01-09-01
DFM
Changes since tdaq-01-09-03
- A new triggering mode, "Preloaded", has been added. This is an extended internal mode, in which L1IDs are preloaded from files. The files must be specified in the DFParameters object. If files are not found or are not readable, the DFM will fall-back in internal mode.
-
When an assignment message cannot be sent, the corresponding event is reassigned to another SFI without decreasing the event credits.
-
The size of the Clear messages can now be set to any value (i.e. even larger than 100). The DFM will never send a clear messages larger than the defined size
-
Two new IS variables have been added: number of possibly duplicated events (reassign) and the number of failed assignments
dqm_config
New features:
- DQM.schema.xml changes to
accomodate new features:
- geometrical description (layout and shape) of DQRegions and
DQParameters to be used by the DQM Display application
- plugins to define DQInput and DQOutput to be used by the
dqm_agent application
dqmf
New features:
DQM Agent application provides
now a possibility of adding user-specific plug-ins as its Input or
Output streams. An implementation of the Input stream can be used to
get histograms which have to be checked by DQ algorithms. A user
specific instance of the Output stream is usable for writing the DQ
Results to some user specific place, e.g. text file, database, HTML
pages, etc.
Some changes are required for all DQ configurations !!!
Now each DQAgent must have at least 1 DQInput and 1
DQOutput streams associated with it in the OKS configuration database.
The file daq/sw/dqm-default-streams.data.xml
provides configuration objects for the default general streams.
Each agent must reference at least the DefaultInput
(via the DQInputs
relationship) and DefaultOutput
(via the DQOutputs
relationship) objects. In addition to that an agent which want its
results to be written to the COOL database must be linked with the CoolOutput
object as well.
Implementing custom stream
In order to implement a custom Output (or
Input) stream a user has to do the following steps:
- Declare a class which inherits from the dqm_core::Output interface and
implements the publishResult,
activate and deactivate functions (empty
implementations should be provided for the two addListener functions). The main
work is done by the publishResult
function which will be called any time a new DQ Result is produced. For
example:
class DQFileOutput : public dqm_core::Output
{
bool m_active;
std::string m_filename;
std::ofstream m_out;
// Constructor mas have fixed format. The parameters vector
// contains parameters from the OKS configuration DB
// Constructor may throw any exception which is based on ers::Issue
DQFileOutput( const std::vector<std::string> & parameters ) throw ( ers::Issue )
: m_active( false )
m_filename( parameters.size() ? parameters[0].s_str() : "" )
m_out( m_filename )
{
if ( !m_out )
throw ers::CantOpenFile( m_filename );
}
void publishResult( const std::string & name, const dqm_core::Result & result )
throw ( dqm_core::Exception )
{
if ( m_active )
m_out << result << " has been produced for the '" << name << "' parameter" << std::endl;
}
void activate() {
m_active = true;
}
void deactivate() {
m_active = false;
}
};
- Create the OutputFactory class for your specific Output and
register it with the FactoryManager. One can do this "manually" by
declaring a new class which inherits from the dqm_core::OutputFactory and
implement the createOutput
function. A more simple (and preferred solution) is to use the helper
template class and just place a sinlgle line of code into your stream
implementation .cxx file, e.g.:
namespace
{
dqm_core::OutputFactoryT<DQFileOutput> __factory__( "DQFileOutput" );
}
- Compile and build a shared library from your class. Create OKS
configuration object of the DQOutput class which describes the
DQFileOutput.
IMPORTANT:
The value of the Name
attribute must be the same as the string which has been passed to the
factory registration object, i.e. "DQFileOutput".
<obj class="DQOutput" id="MyFileOutput">
<attr name="Name" type="string">"DQFileOutput"</attr>
<attr name="Library" type="string">"lib_my_dq_output.so"</attr>
<attr name="Parameters" type="string" num="1">
"/tmp/DQResults.txt"
</attr>
</obj>
- Last step is to add this object to the DQOutputs relationship of
the DQAgent.
<obj class="DQAgent" id="Calorimeter">
...
<rel name="DQInputs" num="1">
"DQInput" "DefaultInput"
</rel>
<rel name="DQOutputs" num="2">
"DQOutput" "DefaultOutput"
"DQOutput" "MyFileOutput"
</rel>
</obj>
dvs
dvs_gui
New package to implement
gui for dvs core
- This application (Qt4 implemetation) is supposed to be the
replacement of the java implementation of the dvs display.
- It should provide the same functionalities as the old gui.
- New gui is started with:
- dvs_start_gui.sh db_name
partition_name
- igui starts the new dvs gui
-
Options not implemented yet:
- Combine tests output
- Save tests output
- Refresh test output panel
- Interactive session
- Test mask selector
- Log viewer settings
efd
General changes
- Implemented TCP_KeepAlive option for EFIO communication (see EFIO
oks class)
- Finalized flow control implementation, now he can chose among:
SizeAlgo, TimeAlgo and OldestTimeAlgo. See EFD_SharedHeap oks class.
- Added configuration options for events tagged as "Express"
- Removed RoutingTask (useless)
- Randomized access to request queue. This makes the ExtPT behaving
like a FIFO in all the running conditions
- Implemented SharedHeap recovery procedure. If the efd is
restarted with the "-recover" command line option, the events contained
in the previous sharedHeap file are recovered and forwarded to the SFO
(with tag="debug"). The mechanism is configurable via the
EFD_SharedHeap::recovery parameter
- Added support for event stripping in outputTask. If the event is
only tagged as "Calibration", the vent is stripped according to the
list of RoBs hosted in DaqEvent header. This facility can be enabled
via EFD_OutputTask::eventStripping parameter
- The name of IS/OH servers are retrieved from environment:
$TDAQ_IS_SERVER and $TDAQ_OH_SERVER. N.B.: the EF_SubFarm oks class has
been removed
- Added a samplingTask in charge of providing events to the emon
infrastructure. Added a correspaonding oks class in the schema
efio
Changes since tdaq-01-09-03
-
EFIO Server
- Support for the TCP_KEEPALIVE mechanism has been added. The mechanism is turned on and cotrolled by three dedicated parameters of the acceptConnection method: tcp_keep_idle, tcp_keep_int and tcp_keep_cnt. If tcp_keep_idle is zero, TCP_KEEPALIVE is not activated. Individual handlers are notified about the keepalive status
-
SFO EFIO Handler
-
The TCPrealAll wrapper class has been removed. We now use directly the TCP class from the transport package. In particular, for message reception, the receive_count methods are used
-
In the TCP_KEEPALIVE mechanism is active, the event reception is performed without timeouts. In fact we rely on TCP_KEEPALIVE for the handling of dead connections
-
SFI EFIO Handler
- A new class SFIEFIOEvent has been added. The aim of this class is to provide a standard data interface to the SFIEFIOHandler, shielding it from the actual data implementation. Moreover the class allows for EFIO information to be returned to the callers (e.g. number of re-sends). The default implementation of the SFIEFIOEvent class includes the daqevent plus the eformat FullEventFragment
-
Helper functions
-
efio::getPort: an efio::PortError exception is thrown if the provided application is not either a SFIApplication or a SFOApplication
-
efio::strip: generic stripping function to be used by EFD and SFO. The struct iovevc * &strip_iovec and eformat::write::FullEventFragment * &stripped must be empty pointers. The corresponding resources will be allocated by the function. It is then responsability of the caller deleting them.
emon
General changes
- EMON provides common OKS schema for defining event sampling
parameters for the monitoring frameworks used in the TDAQ
environment (e.g. GNAM, Athena PT). OKS schema file is called daq/schema/emon.schema.xml and
defines 2 abstract classes - SamplingAddress
and SelectionCriteria
and SelectionParameters class
which inherits from both of them.
- All applications which are using EMON must be linked with 2
libraries:
libemon.so and libemon-dal.so.
C++ API changes
New Monitoring task API
- Both emon::SamplingAddress
and emon::SelectionCriteria
classes provide
constructors taking IPCPartition
and emon::dal::SelectionParametrs
objects
as parameters. This is the easiest way of creating them.
- There are 3 possible ways of creating an emon::SamplingAddress without using
OKS configuration:
Using this address a monitoring task
will be attached to a single sampler of the given name and type.
This address can be used to attach the
monitor to the list of samplers (defined by the given names) of the given type.
Using this address a monitoring task
will be attached to the number
of samplers of the given type.
- Creating an instance of emon::SelectionCriteria manually (not by
reading it from the OKS configuration) is now a bit tricky. Here is an
example:
unsigned int lvl1_type = ...;
std::vector<unsigned char> lvl1_bits;
lvl1_bits.push_back( 13 );
lvl1_bits.push_back( 131 );
std::string stream_type = "physics";
std::vector<std::string> stream_names;
stream_names.push_back( "electron" );
stream_names.push_back( "photon" );
emon::SelectionCriteria criteria(
lvl1_type,
emon::SmartBitValue( lvl1_bits, emon::logic::AND, emon::origin::BEFORE_VETO ),
emon::SmartStreamValue( stream_type, stream_names, emon::logic::OR ),
emon::StatusWord( ) );
Empty emon::StatusWord constructor will
create a value with the Ignore
flag set to true, i.e. it will
be ignored in the process of event selection.
- Global emon::select
function has been removed. Now in order to start receiving
events one has to create a new instance of emon::EventIterator class.
This class provides 2 constructors:
EventIterator( const IPCPartition & partition,
const SamplingAddress & address,
const SelectionCriteria & criteria,
size_t buffer_size = 100,
bool dispersion = false ) throw ( emon::Exception );
EventIterator( const IPCPartition & partition,
const emon::dal::SamplingParameters & params )
throw ( emon::Exception );
The second constructor reads all the
necessary
parameters from the given DAL object.
New Event Sampler API
- Virtual functions startSampling
of both PushSamplingFactory
and PullSamplingFactory
classes do not have anymore emon::SamplingAddress
as their first parameter.
- An emon::SelectionCriteria object which is passed to those
functions as parameter
has the following structure:
m_lvl1_trigger_type.
m_value (unsigned char);
m_ignore (bool);
m_lvl1_trigger_bits.
m_bit_positions (std::vector<unsigned char>)
m_logic (enum emon::Logic { emon::logic::AND, emon::logic::OR, emon::logic::IGNORE })
m_origin (enum emon::Origin { emon::origin::BEFORE_PRESCALE, emon::origin::AFTER_PRESCALE, emon::origin::AFTER_VETO } )
m_stream_tags.
m_type (std::string);
m_names (std::vector<std::string>)
m_logic (enum emon::Logic { emon::logic::AND, emon::logic::OR, emon::logic::IGNORE })
m_status_word.
m_value (unsigned int);
m_ignore (bool);
gatherer
The parameters of type string 'SumAlgorithm' and 'SumOrAverage' were substituted with enum 'SummingMode' and 'ResultContent' respectively. For the range of parameters see the schema.
genconfig
C++ API Changes
Integer Types
To support 64-bits platform the generated get() and set() methods use typedefs from
<stdint.h> instead of non-safe built-in C++ types. One has to
replace any occurrences of explicitly used in such methods signed and
unsigned char, short and long types as shown in the following table:
OKS
Type
|
Old
C++ Type
|
New
C++ Type
|
s8 (8-bits signed integer)
|
unsigned
char
|
uint8_t
|
u8 (8-bits unsigned integer)
|
signed
char
|
int8_t
|
s16 (16-bits signed integer)
|
unsigned
short
|
uint16_t
|
u16 (16-bits unsigned integer)
|
signed
short
|
int16_t
|
s32 (32-bits signed integer)
|
unsigned
long
|
uint32_t
|
u32 (32-bits unsigned integer)
|
signed
long
|
int32_t
|
Generated Enum Values
The valid values of enumeration types are generated. Such generated
values can be used for get and set methods.
The user's code in such case can look like:
const TestModule& obj;
if(obj.get_Frequency() == TestModule::Frequency::Low)
{ ... }
else if(obj.get_Frequency() == TestModule::Frequency::High)
{ ... }
else if(obj.get_Frequency() == TestModule::Frequency::Default)
{ ... }
else ...
instead of:
const TestModule& obj;
if(obj.get_Frequency() == "low")
{ ... }
else if(obj.get_Frequency() == "High")
{ ... }
else if(obj.get_Frequency() == "default")
{ ... }
else ...
This allows to write more safe code from the following points of view:
- reduce chances of various typos,
- be informed during compilation if used enumeration value was
removed (i.e. get compilation error instead of run-time error or wrong
program behavior).
Also, this simplifies possible future replacement of strings used for
enumeration by more appropriate C++ enum type (using new code no
changes from user side will be need at all).
The valid values are generated as const strings put inside wrapper type
(struct)
with name of attribute. To avoid clushes with C++ keywords and to
satisfy variable name syntax requrements, the following rules are
applied:
- names of attribute and valid values are capitalized
- names of attribute and valid values started from non-alpha
characted (e.g. digit) is prefixed by undescore symbol
Example of generated code for TestModule::frequency enum
attribute with range="default,low,High,1KHz,5KHz":
/**
* Valid enumeration values for
get and
set "Frequency" attribute methods.
*/
struct Frequency {
static const std::string Default;
static const std::string Low;
static const std::string High;
static const std::string _1KHz;
static const std::string _5KHz;
};
Java Changes
The generated methods of DAL
classes are synchronized for multi-thread safety.
gnam
Changes from tdaq-01-09-01 to tdaq-02-00-00
New configuration schema
- The gnam schema has been changed following the new emon APIs. The GnamSampler class has been deleted, since the same configuration information is now prodided by the SamplingParameters class defined by emon. Thereby, the GnamApplication class now requires a SamplingParameters instances in the SamplerSpecification relationship. Moreover the SamplerBufferSize attribute has been deleted, since the information is carried by the SamplingParameters class.
GnamHisto changes
-
Added a new wrapper method:
- const char *GetTitle (void) const
igui
Introduction
The IGUI (Integrated Graphical User Interface) web page is at:
http://atlas-onlsw.web.cern.ch/Atlas-onlsw/components/igui/welcome.html
General changes
- The following changes have been done for the IguiPanel interface:
- Add Run Control state as a parameter for connectInfrastructure(String state)
method
- Add old Run Control state as a parameter for runStateChanged(String oldState, String
newState) method
- Add a new method (String
elogString()) to allow to insert user panel specific information
in the elog entry
- The following changes have been implemented in the interface with
the Resource Manager:
- The default mode for an IGUI is Status Display
- The option useRM has
been added; if the igui_start
uses the option -DuseRM, IGUI
tries to obtain the highest
control level according to the resources available in Resource Manager
and to the user role in Access Manager
- IGUI is using now the requestResourceForMyProcess
method to obtain resources from Resource Manager. This
allow to free the RM resources at the igui_start
script exit.
- The folowing changes have been implemented in the IGUI - ELOG
interface:
- move the TTC partition list from an attribute to the message
text
- add HLT Prescale Key in
the automatic e-log entry, in the message text
- add Project Tag in
the automatic e-log entry, in the message text
- The Statistics sub-panel
in the Monitor panel has been
updated taking into account the emon
changes in the statistics information published in the Monitoring IS server (information
names, information structures).
- For the event counters
and rates displayed in the
IGUI, the sources of information are taken from the new configuration
database classes IS_InformationSources
and IS_EventsAndRates.
- A RunParams confirmation dialog
has been added after the Start
command. For the moment the user is requested to check the Beam Type,
the Recording option and the Project Tag.
- The button get wait condition
has been added. The button is
enabled if the application selected in the RC tree is alive, is a
controller and is busy. As a response to the command sent using
this button (CMD_CONDITION
command), the controller in the busy state sends a message (with
severity INFORMATION) listing
the children that it is waiting for.
- For mrs_monitor the following feature requests have been
implemented:
- Add Pause and Continue buttons (at Pause the mrs_monitor subscription
to MRS is removed, at Continue
the subscription is done again)
- Add default number of displayed messages as a command line
option (-n messages-number)
Bug fixes
- Try to improve the re-connection
of an IGUI in Status Display
mode to the new infrastructure if there are problems restarting the
partition.
- In the MRS table, insert a space between text and pid in the long
messages.
Igui
This is the new IGUI
implementation. The current version has limited functionalities but can
be used to control a running partition (it is not possible yet to use
it during the partition start up).
It includes:
- A panel to send transition commands to the RootController;
- A panel containing the run control tree;
- A panel to enable or disable segments and resources.
Recovery commands may be sent to controllers selecting one of them and
using the contextual menu appearing when the right mouse button is
clicked.
Database committing and reloading is handled centrally (via the Commit & Reload button placed
in the tool-bar at the top of the main frame) and all the panels do not
need anymore to implement such an action using custom buttons.
The IguiPanel interface has
been modified to meet the changes in the Igui core design and user
panel developers can find any needed information in the javadoc
documentation:
$TDAQ_INST_PATH/share/doc/Igui/javadoc/Igui/index.html.
To start the new Igui the following script can be used:
Igui_start -p <partition> -d
<database> <vm properties>
ispy
The ispy package is a Python interface to IPC, the Information Service (IS)
and the Online Histogramming Service (OH).
It allows easy access from a scripting language to all the information in IS and OH.
To use the package, simply start the tdaq_python interpreter:
% tdaq_python
Python 2.5 (r25:51908, Oct 18 2007, 16:26:11)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ipc
>>> import ispy
>>> import oh
The following classes from IS are available in Python:
- IPCPartition
- ISCriteria
- ISInfo
- ISInfoAny
- ISServerIterator
- ISInfoIterator
- ISInfoDictionary
- ISInfoAttribute
- ISType
- ISObject (a more dynamic version of ISNamedInfo)
The following minimal script shows how to use them in a simple way:
#!/usr/bin/env tdaq_python
part_name = 'rhauser_test'
import sys
from ipc import IPCPartition
from ispy import *
p = IPCPartition(part_name)
if not p.isValid():
print "Partition:",p.name(),"is not valid"
sys.exit(1)
x = ISObject(p, 'DF.L2SV-1', 'L2SV')
print "Exists: ",x.isExist()
x.checkout()
print x
sum = ISObject(p,'DF.L2SV-Summary', 'L2SV')
sum.LVL2_events = x.LVL2_events
sum.checkin(False)
Several utility classes are provide to make it easier to read
arbitrary information from IS. See the examples directory
for how to use them.
The ispygui.py is a simple application using Tcl/Tk to
give an overview of the dataflow part of a running partition.
The callback routines can now be used in separate python threads, the
actual code is protected and deals nicely with the interpreter.
The following classes are available from the OH package. Note that many
methods are pythonized in such a way that the user does not have
to use a method that is specific for TH1, TGraph etc.
- getRootObject(partition, server, provider, histoname) (free function).
- OHRootReceiver (override single receive() method).
- OHRootProvider (single publish() method).
- OHSubscriber
ls
Introduction
This package substitues the obsolete logService. A new requirement whereby database technologies
other than ORACLE had to be dropped came in around spiring 2007. This new requirement meant the
re-writing of the logService package, which was higly dependent on MySQL. This opportunity was taken
to refactorize the code, especially the log manager, which was never very user friendly. The database
access in C++ is done using the CORAL interface, which hides the underlying technology. For the log manager,
JAVA was the language chosen, since it brings in the flexibility requiered to make this tool more intuitive.
The resulting java application can be run from the console, or remotely using the Java Web Start technology.
Known issues/bugs
In the Log Manager, when righ-clicking on the Messages Table (right hand side panel) or Partition Table
(left hand side panel) a Refresh button pops up. This is used to update the current view of partitions and
messages, respectively. Refreshing these objects only works if one right-clicks the mouse without moving it;
that is, press and release without changing the X and Y pointer of the mouse. This may be a problem with Java.
In the meantime, one can also perform a Refresh via the options in the top menu File: 'Refresh tree' and
'Refresh table'.
To be implemented
Add an option to display statistics, internal and from IS.
Changes from previous release
The layout of the Log Manager has slightly changed. There are two distinctive search criterias now. One
related to the Log Message table (the same as in the previous release) and a new search associated to the
Partition Tree (left panel). This new search allows users to find a node, be it a Partition or Partition and
User, among the hundreds that form the left hand side Tree panel. The Log Manager expands this node and makes
it visible, thus facilitaing the navigation through this tree. One can also enter a run number - the Partition
and User are not needed but they can also be specified - which will expand the Parition.User node and display
the corresponding Log Messages in the table.
Migrate to the deSEALed
version of CORAL.
Example applications
None exist at the moment.
Applications
Log Manager
Usage: log_manager
Instruction on how to use to be written.
The Log Manager can also be run using Java Web Start technology from the link:
If possible, it is preferrable to launch this tool as a Java application rather than from the link above.
lsReceiver
Description: This application subscribes to the MRS service to receive and log on a database messages produced by TDAQ applications.
Usage: lsReceiver [-p partition-name] [-u user-name] [-n IS-server-name] [-s threshold-size] -c connect-string [-S subscribe-expression]
Options/Arguments:
-p partitionName Partition name
-u userName User name
-n ISserverName Name of the Information Service to publish the message rate into.
-c connectionString Database connection string.
Test units
logTest
Description: Test binary for the Log Receiver application.
Usage: logTest -c connect-string [-p partition-name] [-l complexity-level]
Options/Arguments:
-p partitionName Partition name
-l level Level of Complexity of the test [1: open/close - 2: tests the Log Service Infrastructure].
-c connectionString Database connection string.
Utilities
logSelect
Description: Application to retrieve log messages for a given partition according to the search criteria specified. By default, messages are dumped on std::cout.
Usage: logSelect -c connect-string -p partition-name [-i message-name] [-m machine-name]
[-a application-name] [-l time-low] [-u time-up] [-s severity]
[-x text] [-r parameters] [-d order-list] [-e max-rows] [-f offset-row]
Options/Arguments:
-p partitionName Partition name
-c connectionString Database connection string.
-i message-name Message name or ID.
-m machine-name Machine name where the message was issued.
-a application-name Application name where the message was issued.
-l time-low Lower time threshold.
-u time-up Upper time threshold.
-s severity Message severity:
1 - FATAL
2 - ERROR
3 - WARNING
4 - DEBUG
5 - INFORMATION
6 - SUCCESS
-x text Text in the message body.
-r parameters Message parameters.
-d order-list Parameter to sort the messages by.
-e max-rows Maximum number of rows to retrieve from the database; 100 by default. If 0, all entries are retrieved.
-f offset-row Offset in the table to retrieve the messages from.
logDelete
Description: Application to remove log messages for a given partition according to the search criteria specified.
Usage: logDelete -c connect-string -p partition-name [-i message-name] [-m machine-name]
[-a application-name] [-l time-low] [-u time-up] [-s severity]
[-x text] [-r parameters]
Options/Arguments:
-p partitionName Partition name
-c connectionString Database connection string.
-i message-name Message name or ID.
-m machine-name Machine name where the message was issued.
-a application-name Application name where the message was issued.
-l time-low Lower time threshold.
-u time-up Upper time threshold.
-s severity Message severity:
1 - FATAL
2 - ERROR
3 - WARNING
4 - DEBUG
5 - INFORMATION
6 - SUCCESS
-x text Text in the message body.
-r parameters Message parameters.
logGetPartitionNames
Description: Application to retrieve the list of partition names.
Usage: logGetPartitionNames -c connectionString
Options/Arguments:
-c connectionString Database connection string.
logCleanDatabase
Description: Application to clean the database by removing all the existing tables.
Usage: logCleanDatabase -c connectionString
Options/Arguments:
-c connectionString Database connection string.
mda_browser
General features
This is new package which provides single binary called mda_browser. This applications can
be used to browser archived histograms. The GUI is based on the one of
the OH Display and the way of interacting with it is quite
straightforward. Just run it and browse the tree on the left side which
consists from 4 main layers:
- List of archived TDAQ Partition names
- List of archived Run Numbers
- List of archived histogram providers
Each type of items has different icon so they can be easily
distinguishable. For any item which is selected in the tree all
available histograms appear in the right hand panel. Double clicking on
a histogram will result in an attempt to display it. Here there are
several possibilities which are automatically checked by the browser:
- If this histogram is available in the file which has already been
downloaded from CASTOR then it will be immediately displayed
- Otherwise if the browser is running in ATCN (on a Point 1
machine) then it will try to get this histogram from the COCA cache
directory
- If all of the above failed then a user will see a pop-up message
asking whether he/she wants to download the necessary file from CASTOR.
If the "Yes" button is pressed then download is started in the
background and it's possible to continue browsing the archive content.
As soon as download is finished the new ROOT Canvas window will be
created with the requested histogram. In order to monitor the status of
the CASTOR files download one can switch on the Download Monitor window
by pressing the last button in the browser's tool bar.
MonGatherer
Changed the schema.
The parameters of type string 'SumAlgorithm' and 'SumOrAverage' were substituted with enum 'SummingMode' and 'ResultContent' respectively.
For the range of parameters see the schema.This mainly concerns the gatherer, but since the MonGatherer reads parameters from the gatherer, I'm documenting this change here.
Removed delay between updating of histogramming and updating the sums collected by the Gatherer.
In tdaq-01-09-01 the sums were published when one of histograms is updated. This caused a delay.
This is fixed by keeping the total number of providers in memory and publishing the sums only when the current number of providers equal one, kept in memory.
Synchromization of different tiers of the gatherers at STOP transition.
After STOP, the MonGatherer exits only after publish. If no publish, it exits after the timeout.
AdvancedMerge for 1D labeled histograms.
As in root, only 1D and TProfile are implemented.
If a new labels occurs, it is added to the list of labels.
mrs
General changes
A new application (mrs_mirror)
was added. mrs_mirror is a MRS
receiver sending all received messages to the mirror partition. This
application allows to see the MRS messages in the mirror partition used
for remote monitoring.
Options/Arguments:
-
-p partition-name partition name.
-
-c subscribe-expression subscribe expression.
-
-s use PMG synchronization.
New message suppression control on private MRS servers (workers) is implemented.
If suppression is turned on, the time from last appearance of suppressed message is measured.
If measured time interval is larger then limit (parameter "-d", by default 30 s),
the suppression for given similar messages is reset and published information about number
of suppressed messages.
For log information the ERS_LOG macro is used.
The functions MRSCallbackMsg::getERSTime() and MRSCallbackMsg::getERSPackageName()
are NOT producing error message in case of usage on message without ERS content (i.e. message
created by MRS API). No change in user code is required.
oks
C++ API Changes
Use new integer types from <stdint.h> to support 64-bits platform
as shown in the following table:
OKS
Type
|
Old
C++ Type
|
New
C++ Type
|
s8 (8-bits signed integer)
|
unsigned
char
|
uint8_t
|
u8 (8-bits unsigned integer)
|
signed
char
|
int8_t
|
s16 (16-bits signed integer)
|
unsigned
short
|
uint16_t
|
u16 (16-bits unsigned integer)
|
signed
short
|
int16_t
|
s32 (32-bits signed integer)
|
unsigned
long
|
uint32_t
|
u32 (32-bits unsigned integer)
|
signed
long
|
int32_t
|
OKS Server
On Point-1 access to database repository will be controoled by the OKS
Server. Read more about it on the TWiki
page.
OKS Data Editor Changes
- Add search by file name in the main window
- Add search by class and object ID in the Data File dialog
- Add group file operations from the File menu:
- Save all updated files (<Ctrl-S> shortcut)
- OKS server related operations:
- Release User Repository (<Ctrl-D> shortcut)
- Update User Repository (<Ctrl-U> shortcut)
- Commit User Repository (<Ctrl-C> shortcut)
- Add "Referenced By" function from Object dialog (available on
right mouse click from dialog's icon)
oks2coral
- Migrate to deSEALed
version of CORAL.
oksconfig
- Migrate to deSEALed
version of CORAL (roksconfig plugin).
- Follow config changes to support 64-bits platforms.
OMD
Changes
- Support for vector fields in IS objects is reintroduced and can be
enabled from Subscription Editor.
- There are two small applets in the status bar,
an animated icon showing updates, another showing
the partition status and run number. Partition status widget is
under testing
- Cleaned up the menus, removing unused actions.
OnlineRecovery
Introduction
The OnlineRecovery package is responsible for all recovery mechanisms from the RunControl point of view. It consists of two main parts. The first is a
plug-in to the new RunController and will reproduce all recovery related behavior seen in the old RunControl (such as restart, ignore, etc). In addition it
will include some more advanced recovery mechanism and also better statistics. The second part is a stand-alone server which will handle errors with a
system wide impact and will also receive information from the RunController plug-ins.
RunController expert system
This is integrated as a plug-in to the new RunController. It receives updates directly from the controller and decides what to do in error-cases (such
as ignoring, restarting, etc). It implements the ExpertSystemInterface defined in the RunController package.
Server
The OnlineRecovery server is responsible for handling all system wide errors. Currently the automatic disabling of RODs and the notification to the
corresponding ROS has been enabled.
Core functionality
The OnlineRecovery takes the decision what to do in case of applications dying, going into the error state, failed test, etc.
Normally the action taken will be according to the configuration settings for the specific application (IF-FAILS, IF-DIES, IF-ERROR)
with the following exceptions:
-
An application with decision set to RESTART will be restarted up to a maximum of 5 times. After this restarts will not happen and it will be considered an error instead.
If the last restart happened more than 30 min ago the counter is reset (it is also reset if the controller goes back to NONE state).
-
An application with a failed test will be re-tested up to a maximum of 3 times. After this a failed test is considered an error. If the last retest was more than
10 min ago the counter is reset.
-
If specific recovery is defined (through extra rules files) these might override the database settings.
- An application with decision IGNORE will not be ignored if they are depended upon by an application that is running and has membership IN. In this case it is considered
and error and an ers message will be sent containing all the applications depending upon it.
A detailed description of core and specialized OnlineRecovery behavior can be found at on the cc webpage
Expert system server
Currently the main responsibility of the expert system server is dealing with stopless recovery.
This is done whenever a ROD is reported as faulty by a RODBusyModule.
The corresponding InputChannels and their ROS(s) are found. The ROD and the channels are them automatically disabled.
The information about disabled channels are stored in COOL.
The behavior of the recovery can be dynamically configured with a combination of three different settings:
- State - if false no recovery is done.Otherwise recovery is performed according to the following settings.
- Ignore Xoff - if true ROS XOff is not taken into account, otherwise recovery is not done if ROS Xoff is the cause of busy ROD.
- Automatic - if false the user is asked before recovery is performed. If true recovery is done without user input.
These settings can be modified either using the error_viewer application described below, or using the dedicated buttons in the DAQPanel (P1 only).
Changes since tdaq-01-09-01
- Automatic disabling on dbproxy failure
- Automatic disabling of PTs if their EFD is disabled by OnlineRecovery
- In specialized recovery applications are now terminated directly (no longer attempting to cycle them down nicely)
Known bugs
Utilities
A graphical utility that allows a complete view of all errors in the system is available.
It is possible to select partition and expert system server to retrieve the list of errors from.
error_viewer
PmgGui
Introduction
The PmgGui package
includes GUI interfaces to the ProcessManager
system.
Changes wrt tdaq-01-09-01
PmgISPanel
- Fixed null pointer exception in button event handler;
- Adapted to the IS process info name change done in the ProcessManager package;
- Fixed small EDT violation.
ProcessManager
Changes since tdaq-01-09-01
Server
- IS process information name has been modified to make process
search simple and more efficient. It now includes the name of the host
where the process is started: <host>|<process
name>;
- Added some additional verbosity when the AccessManager reports some error.
Helpers
- pmg_start_app: Added
option to wait for the process to exit; two more options are available:
-W [ --Wait
]
Wheter to wait for the process to exit (defau
lt is
FALSE). If TRUE then the process err
and out
logs will be printed on the terminal
-T [ --WaitTimeout ] arg
(=0) Time to wait for the process to start or exit
PTIO
Introduction
Library providing event input interface for PT. There are 3 available
implementations that allows the PT to get events from EFD, emon or file.
Changes since tdaq-01-09-01
- ptioInterface: added new parameter in getEvent() method in order
to forward DaqEvent pointer. The parameter has a default value (NULL),
so the interface change is transparent for other packages.
- ptioEfd: added a configuration switch
(ptioEfd::eventChangePolicy) that permits very specific configuration
characterized by the use of 2 ExtPTsTask in series. Indeed, if the
value is set to "Flat" it triggers the serialization of the modified
event in a contiguous chunk of memory. However in all the other
scenarios, the default behaviour (that keeps the data scattered in 2
different blocks) must be used.
rcc_time_stamp
Introduction
Please contact markus.joos@cern.ch if you need the documentation for
this package.
General changes since release tdaq-01-08-00
- Linux usleep added to ts_wait for long durations. This shoudl
save some CPU time
- Some of the issues with 64-bit platforms fixed. Final tests
pending
Changes in API
None.
Known bugs, problems and limitations
Currently none.
RCDLtp
Introduction
This package contains low-level software for the Local Trigger Processor. Please see https://edms.cern.ch/document/584060/1 for further details.
General changes
No major changes.
RCDLtpi
Introduction
This package contains low-level software for the Local Trigger Processor. Please see https://edms.cern.ch/document/584060/1 for further details.
General changes
No major changes
RCDLtpiModule
Introduction
This package allows the LTPi to be configured in the standard way. More details can be found on TWiki: LTPi user guide
General changes
RCDLTPModule
Introduction
This package contains RCD Software for the Local Trigger Processor. Please see ATLAS Timing Signal Distribution and https://edms.cern.ch/document/588024/1 for further details.
General changes
- added new class: LTPCTPParasiteConfig to be used when running in parasitic mode (LTP is master, but still uses the timing signals from the CTP)
- moved setting of the run mode of the pattern generator into connect() transition in order allow to set up other boards that need to be synchronised with the LTP
rdbconfig
- Follow config changes to support 64-bits platforms.
rn
- Migrate to deSEALed
version of CORAL.
- Add close() method to
put final information on run stop and to avoid possible exception in
the destructor.
- Always disconnect with database at destructor and re-connect in
the close() method.
RODBusy
Introduction
This package contains C++ version of low-level software for the RODBusy module based on RCDVme.
General changes
No major changes
RODBusyModule
Introduction
This package contains RCD Software for the RODBusyModule. Please see for further details.
General changes
ROSCore
Introduction
The ROSCore package is the heart of a ROS/RCD implementation. It
includes the IOManager class that some people like to use as the name
of the whole application.
Changes since tdaq-01-09-01
- SequentialDataChannel & SequentialInputHandler:
- Use new ROSHandler interface
ROSEventFragment
General changes since
release
tdaq-01-09-00
- Add exception specific clone and get_uid (by Gordon)
- RODFragment and FullFragment classes updated to new
emon::SelectionCriteria API
Changes in API
Known bugs, problems and limitations
ROSInterruptScheduler
Introduction
Contact markus.joos@cern.ch if you need documentation for this package.
Changes with respect to release tdaq-01-09-00
- Globally:
- Use new ROSHandler interface (implemented by Gordon)
- RobinInterruptCatcher:
- Some bug fixes (mostly what already was available as a patch
for tdaq-01-09-01)
- error messages clarified
- InterruptCatcher:
- Replace cout by DEBUG_TEXT
- signal handler will only be installed (and remove) if the
thread gets started
- ScheduledUserAction:
- getAge() added (required for CPU time-economic scheduling)
- UserActionScheduler:
- More CPU time-economic task scheduling
Known bugs, problems and
limitations
Currently none.
ROSIO
Changes since tdaq-01-09-00
ROSModules
Introduction
The package is described in EDMS_IOM and EDMS_RCD.
General changes since release TDAQ-01-09-00
- RobinReadoutModule / RobinDataChannel: Support for stopless
recovery
- RobinReadoutModule:
- Update for new RobinInterruptCatcher interface
Known bugs, problems and
limitations
Currently none.
ROSRCDdrivers
Introduction
The documentation for this package is kept in EDMS.
General changes since release tdaq-01-09-00
- Globally: SLC5 compilation errors fixed
- robin:
- partial redesign of the ISR for better IRQ handling (only what
already existed as a patch for tdaq-01-09-01)
Changes in API
None.
Known bugs, problems and limitations
Currently none.
ROSRobin
Introduction
If you need documentation for this package please contact
markus.joos@cern.ch
General changes since release tdaq-01-09-00
- configureDiscardMode added. This mode allows disabling or
re-enabling a ROL on the fly (for the "stopless recovery")
- Bug fixes for the interrupt handling (only what already existed
as a patch for tdaq-01-09-01)
Changes in API
- Rol.cpp: method configureDiscardMode() added
Known bugs, problems and limitations
Currently none.
RunController
Introduction
This package contains the Run Control for the TDAQ. It provides two
C++ interfaces which allow the user to introduce case-specific actions
carried out when a command is received: UserRoutines.h and
Controllable.h. The two interfaces have completely different purposes!
A developer shall extend from UserRoutines.h only if he is customizing
a controller at an intermediate level of the run control tree (i.e.
with child applications). He can create UserRoutines objects to be
called
at the corresponding state-transitions and commands before and/or after
they are processed by the Controller itself (i.e. transmitted to the
children).
A developer of leaf applications (run control applications without
children) shall only extend the Controllable.h interface. He creates a
Controllable object to be called
at the corresponding state-transitions and commands.
Changes from previous release
The major change with respect to tdaq-01-09-01 sees the rc_setup as a
standalone binary completly decoupled from the RunController framework.
This makes for a more robust application that can better recover or output
information in case of errors. It should now be easier to understand and maintain
the code.
Also important is the migration of the initial PMG and HW testing from the
Online Recovery to the RunController. It is now the latter that drives this initial
testing procedure and reports to the Online Recovery accordingly.
Other changes refer to bug fixes.
Migration to the new Run Controller
In oder to migrate from the old Run Control to the new Run Controller
interface, users must follow these steps:
- In the requirements file (only applicable to TDAQ packages),
remove the statement 'use ClipsServer' and/or 'use
RunControl' and add instead 'use RunController'
- The namespace for all run control classes is now daq::rc::,
while it was a mixture of RC::, CS:: and rc::
in the past.
- The old Run Control headers must be replaced as follows:
- RunControl/Controllable.h --> RunController/Controllable.h
- RunControl/ItemCtrl.h --> RunController/ItemCtrl.h
- rc/UserRoutines.h --> RunController/UserRoutines.h
- rc/Controller.h -->
RunController/Controller.h
- RunControl/UserExceptions.h
--> RunController/UserExceptions.h
- In the databases, the Binary rc_empty_controller must be
replaced by run_controller. The script RCUtils: old2newRC.sh is
available to perform this action automatically.
- The Constructor of the Controller class has changed. The new
constructor needs the following parameters:
Controller (const std::string
& partitionName, const std::string & segmentName, const
std::string & parentName, const std::string &expertSystemRules,
UserRoutines * preUserRoutines, const std::string &
postUserRoutinesLib)
- The API of the UserRoutines class has changed:
- dropped controller method
- dropped send method
- dropped raiseError method (and ers::fatal message automatically
causes the controller to go into ERROR state)
- mout method dropped
- mrsReceiver method dropped
- noAction method dropped
- resetAction dropped
- clearError replaced by clearAction
- runParameter and updateRunParameter methods replaced by
getRunParameter.
Dealing with substates
Substates can be introduced into an intermediate Controller by
extending the UserRoutines class and passing it to the Controller as a
plug-in. More on this below. Substates are performed when the FSM
transition they
are associated to is 'finished'. Before the Controller transitions to
this FSM state it performs all the substates
(there can one on or more) by broadcasting them to the children and
waiting for these to acknowledge the termination
of a given state. Only when all the substates have been perfromed, does
the Controller tranistion to the original
FSM state.
For leaf applications substates are dealt with as before, as special
types of user commands.
Operation
The Root Controller is now in charge of doing the bootsrapping of
the system. When launching the setup_daq script, rc_setup is invoked to
start the pmsgerver, IPC server, RDB server and the IS servers: Setup
and RunCtrl. Once these applications are running, rc_setup exits, and
the setup_daq script launches the actual Root Controller. This two-step
operation is necessary
since the Root Controller requires of the above mentioned applications
to start running the remaining
Online Segment infrastructure applications. The main reason in fact is
that rc_setup reads the database configuration from OKS (since there is
not RDB server running). The Root Controller must however access and
subscribe to the database via RDB, and logically can only do so if this
service is running beforehand. The Setup and RunCtrl IS servers are
required to publish the status, state, test result, etc. of the
applications being controlled by the Root Controller and any other
controller.
This information is read by the IGUI to update the inforamtion
displayed to the user.
With this new philosphy, the setup server has been removed completly
from the TDAQ system.
Each controller is in charge of starting, stopping, distributing
commands to and reacting to errors from its children (other controllers
or applications). If a Controller dies and is restarted, it goes into
the state of its children (if they are all in a consistent state); if
there are no children, it goes through all required state transitions
in order to reach the state of the parent. This mimics the behaviour of
applications that extend from the Controllable interface.
Errors
The RunController hardly takes any decisions when errors occurred.
Instead,
the corresponding error are forwarded to the Expert System (Online
Recovery) which
takes a decision accordingly. This decision currently depends on the
settings defined on the configuration database. Three fields are
available to the user to define the behaviour: IfFails, IfDies,
IfError. Note on restart: If the option restart is selected
for any of these fields and the restart fails repeatedly, it will cause
an error instead.
Timeouts
There are currently two different timeouts:
Action timeout - used for transition and standard commands
(RESTART, STOP, etc).
For a controller the actual transition timeout used is its
action-timout plus the highest action timeout among its
children.
Short timeout - Used for killing applications.
Init timeout - After an application is started by a controller,
the former must send a pmg_sync to notify that it has started
correctly. Not doing this within the init timeout,
will cause an error on the controller side. This implies that the init
timeout should always be LESS than the ACTION timeout). This
synchronization is handled internally for all
RunControl applications and should not be done in the user code.
Substates
Substates are performed before the Controller transitions to a given
FSM state, that is, when all its children
have successfully moved to that state. Before the Controller actually
transitions, it propagates the user-defined substates to its children.
When all these perform the action associated to the substate, the
Controller will either
propagate the next substate if any, or terminate the original FSM
transition.
Substating is possible by extending the UserRoutines class. The user
must generate a library and pass it
to the Controller via the command line argument -u. This
facilitates the development of the substates
logic as there is no need to recompile the controller code and allows
the loading of any substate plugin by simply changing the Parameters
field of the Controller in the configuration database.
The example RunController/examples/ExampleSubstate.cc can be
taken as a starting point. In order to define substates
for, let's say, transition Configure, the user must extend
daq::rc::UserRoutines::configureAction as follows:
bool MySubstates::configureAction()
{
if (true == currentSubstate_.empty()) {
currentSubstate_ = "configureSubstate_1";
}
else if (0 == currentSubstate_.compare("configureSubstate_1")) {
currentSubstate_ = "configureSubstate_2";
}
else {
currentSubstate_ = "";
}
doSubstate(currentSubstate_);
return true;
}
In this example MySubstates inherits from daq::rc::UserRoutines.
The user must keep
track of which substate is currently being handled and the order of
substates if there are more than one. In the
example above, we use the string currentSubstate_. The method daq::rc::UserRoutines::doSubstate(const
std::string& substate) is the interface to the Run Controller
to pass the next substate name. When the last substate is processed,
the user must call doSubstate("") with an empty string.
This informs the Controller that substating is finished.
Known issues/bugs
None
To be implemented
The Controller that launches the initial applications in the
rc_setup binary is reactive to the
Online Recovery. In other words, it waits for the latter to 'tell it'
what to do: start, test, exit, etc.
However, the Expert System should be reactive and not active.
Therefore, it should be the controller in the rc_setup the one that
drives this initial bootstrapping, updating the Online Recovery as
necessary.
Example applications
None exist at the moment.
Applications
rc_setup
Description: Binary to start the basic infrastructure needed by the Root Controller.
Options/Arguments:
-p partition Name of the IPC partition (default $TDAQ_PARTITION)
-d database Name of the database (TDAQ_DB)
-s segmentname Name of the segment
-n controller Name of the controller
-R expertSystem Expert System library name (without the 'lib' prefix or the '.so' extension, followed by the arguments if any.
run_controller
Description: The RunController is a general purpose control entity for the ATLAS Online infrastructure.
Options/Arguments:
-p partition Name of the IPC partition (default $TDAQ_PARTITION)
-P parentname Name of the parent
-s segmentname Name of the segment
-n controller Name of the controller
-u substates Library with the substates definition. The library name has to be given without the 'lib' prefix nor the '.so' extension.
-R expertSystem Expert System library name (without the 'lib' prefix or the '.so' extension, followed by the arguments if any.
rc_test_controller
Description: Test unit for rc_controller binaries.
Options/Arguments:
-p partition IPC partition name (default $TDAQ_PARTITION)
-n controller Controller names
SFI
Changes since tdaq-01-09-03
-
Monitoring event selection
-
The event selection for monitoring purposes has been updated following the new emon selection criteria. In particular one can now select on:
-
Status word
-
L1 Trigger Type
-
Stream Tags
-
L1 Items (before prescale, after prescale, after veto)
The old magic values, like -1,-2,-3 for the status word, have been removed, since emon now provides a ignore flag for each selection item. The ignore flags are respected by the SFI (i.e. ignored criteria always matchs).
-
Multiple pROS support
-
The support for multiple pROS has been implemented. For each event, the SFI expects to receive the NodeID of the pROS holding the L2Result via the assignment message. If the received NodeID is zero, the pROS request is silently skipped. In the received NodeID in unknown, a warning is issued and the pROS request is skipped. In both cases an IS counter, 'NumMissingL2Results', is increased.
-
BCID Check
-
The BCID check is now always performed and a dedicated IS counter is increased in case of errors ('NumBCIDErrors');
The configuration switch in the database ('BCIDcheckEnabled') only controls the SFI verbosity in case of detected BCID errors.
-
SFO-Tier0 Handshake database
-
The SFI is now able to register files into the SFO-Tier0 Handshake database. In order to activate this functionality, a proper SFODBConnection object should be linked in the SFIConfiguration.
Currently the SFI do not provide any streaming capabilities, therefore the produced files will look like:
project_tag.runnr.No_Streaming.daq.RAW._lblbnr._AppName._filenr.data
SFO
Changes since tdaq-01-09-03
SFO-Tier0 handshake DB
-
The SFOTZ is now a standalone library which provides all the SFO-Tier0 functionalities:
- Integrated DataWriter callbacks
- Database handler thread which provide a single antry point for any database activity
The support a new, optional, table has been added. The "overlap" table will hold end-of-run counters per stream as well as stream overlaps.
Database connection has been ported to the new "non-Seal" Coral version. In order to enable Coral debugging one should set the environmental variable SFO_DEBUG_CORAL
SFO Application
-
Events with an empty stream name field are written into files with a "NoName" stream name. In fact, at the file level a stream name is always needed in order to preserve the database consistency
-
Stripping functionality has been implemented. Events with non-empty ROB and/or SubDetector lists and a calibration tag are stripped following the received lists. The stripped copy is written into the calibration files, while full copies are written in other file types (physics, express, ...).
-
New histograms have been added:
- Event Size vs. Streamtype_Streamname, filled after the SFO stream processing and stripping ("/SHIFT/SFO/EventSizePerFileStream").
- Stream correlation after the SFO stream processing ("/SHIFT/SFO/FileStreamCorrelation")
-
Do not check anymore for event tagged physics_express since the express stream is now a defined type, which will always be streamed inclusively
-
The workaroud for events with multiple tags, including a debug tag, has been removed, since this is now configurable in the steering. See bug 41448
tmgr
Changes since tdaq-01-09-xx
Fixes and improvements
Fixed issue with non-displaying output of a test, retrieved via process
manager API.
New features
Core schema change: OnlineSegment has a new
relationship "TestHosts"
to a ComputerSet object. This
computer set may contain Computers which will be randomly selected for
launching tests (for those tests which have no explicit host defined).
This mechanism replaces finding this set by a hardcoded ID, as it was
in previous implementation.
Partition default host is not considered anymore as default host to
start tests which have no explicitly host defined. Now, only local host
is counted (unless "TestHosts" is
Known bugs, problems and limitations
Changes forseen for next major release
training
Introduction
A new version of the Training Manual (Version 4.0) is available at:
$TDAQ_INST_PATH/share/doc/training/training_doc.pdf
General changes
- The sampler and monitoring task applications in the Event Monitoring exercise have been
updated according to the changes in emon
package.
- The get_eventcount
application in the Controller
exercise has been modified to follow database schema changes on event
counter information source.
- The ROD Crate DAQ
exercise has been removed from the training package (developers of the
RCD will use directly the RCD users' guide).
- Some database files have been updated according to the schema
changes.
To be done
- Update some database files according to the schema changes.
TriP
General changes in tdaq-02-00-00
- Memory consumption reduced by factor of less than 4.
- Fixed memory leaks.
- History depth for L1 longer, 120 points.
- L1 Trigger Items list widget responsiveness fixed.
- Added current time on L1 graphs.
- Butons color on HLT chains put back to Red, instead of DarkRed.
Changes for the user
To be implemented
- Total change in structure under way, with the new project name - Trigger Rate Presenter.
TTCviModule
Introduction
This package contains RCD Software for the TTCvi Module. Please see for further details.
General changes
- changed attribute "Retransmit" to "Retransmission"
vme_rcc
Introduction
The documentation for this package is kept in EDMS.
General changes since release tdaq-01-09-00:
- Some issues for 64-bit kernels fixed. Not yet tested.
Changes in API:
None.
Known bugs, problems and limitations:
Currently none.
wmi
Introduction
Web Monitoring Interface, one of the software components of the TDAQ Software sub-system of the ATLAS TDAQ, is intended to give to remote users a view of the status of the data acquisition system and its sub-systems.
New features
- Added mode of WMI which don not use fork()
- Remove from WMI DQMF plug-in all partitions wich end of name "_mirror".
- Added support frame.
- Not write attributes cellpadding and cellspacing if these values are 0 (in Table class).
- Plot implementation use java.
- Accelerated copy files to WEB server.
Generated: Thu Dec 18 00:34:18 CET 2008 by /afs/cern.ch/atlas/project/tdaq/cmt/adm/bin/do_release_notes (c)