====== LYDAQ installation ======
Documentation {{ :daq_doc.pdf?600 |}}
===== Linux version =====
A debian Jessie (8) is required, more recent version (strech or Ubuntu 16) can be used but some patches in package name are then needed
===== Installation =====
* Create an account //acqilc// with sudoers capability
* download [[https://raw.githubusercontent.com/mirabitl/lydaq/master/lydaq_install]]
* execute it with
* //source lydaq_install//
The code is installed in // /opt/lydaq // and // /opt/zdaq //. Binaries and libraries are in // /op/dhcal/[bin/lib] //.
==== Remarks ====
* One version of ROOT [5.4] is recompiled, it may take one hour depending on the computer CPU.
* During the installation a passphrase is required, use the usual acqilc one.
===== Debian package (binaries only) installation =====
It works only on debian jessie amd64 architecture:
* Download the package [[https://cms-wiki.ipnl.in2p3.fr/software/lydaq_1.0_amd64.deb|lydaq]]
* Run ''sudo dpkg -i lydaq_1.0_amd64.deb''
The binaries of the software is install in ''/data/daq'' and in ''/data/root''
==== New version ====
* [[https://cms-wiki.ipnl.in2p3.fr/software/lydaq_1.01_amd64.deb|lydaq 1.01 amd64 (pc 64 bit Debian jessie)]]
* [[https://cms-wiki.ipnl.in2p3.fr/software/lydaq_1.01_armv7l.deb|lydaq 1.01 armv7l (raspberry raspbian wheezie/jessie)]]
==== Complete raspberry jessie image (ready to use) ====
* [[ftp://lyoftp.in2p3.fr/mirabito/raspbian_jessie_lydaq.img| copy it and change hostname ]]
====== LYDAQ Configuration ======
The description and configuration of all processes is described in a JSON file. It should be edit and then install in the Oracle database host in the CCIN2P3.
===== JSON file =====
==== Structure ====
=== TAGS ===
* **HOSTS** a map of computer . Each computer is a name and a vector of // programs //
* **NAME** the unique name of the configuration
Each program is defined by a set of tags
* **ARGS** array of arguments of the program
* **ENV** array of environnement variables
* The WEBPORT variable must be defined for each application
* The INSTANCE varaible is needed if more than one application of same kind is running on the same PC
* **NAME** Name of the program, the name are specific to each daemon and are used by the run control provided. If you wish to use it keep the name of the following example
* ** PROGRAM** the complete path to the binary
* ** PARAMETER ** a set of parameter for the application. Each application has specific parameters
=== SDHCAL-like DAQ parameters ===
== DIFSERVER ==
* "builderAddress": "tcp:/\/lyosdhcal9:5556", It is the address on which data are collected (builder)
* "dbcache": "tcp:/\/lyosdhcal9:5555", It is the address where DB data are published (dbserver)
* "detectorId": 100, the detector Id for DIF data
== CCCSERVER ==
* "device": "DCCCCC01", the FTDI device name
== FDAQ ==
* "s_ctrlreg": "0x815A1B40", the control register used by all DIF
== WRITER ==
* "dif": 48, Number of DIF (unused )
* "directory": "/data/NAS/stageM2", Directory for writing
* "processor": a list of pluggins library that will process events
* "binarywriter", binary writer
* "lydaq_pluggins_monitor", duplicate event for monitoring
* "lydaq_pluggins_rootwriter", root writing
* "lydaq_pluggins_lciowriter", lcio writing
* "shmpath": "/dev/shm/monitor", Path use for monitor dupication
* "stream": ["tcp:\/\/*:5556"] List of listening ports
== DBSERVER ==
* "mode": "DB", or "WEB" if you do not installed occi (arm pc)
* "path": "/dev/shm/", path wher binaries of configuration is stored
* "publish": "tcp:\/\/*:5555", publish port to DIFSERVER
* "state": "TestChamberLPC", the DB state
=== Monitoring applications ===
Each slow control application has 3 mandatory parameters:
* "TCPPort": 5600, the publication port
* "location": "DOME_STACK", The location of the monitor hardware
* "period": 30, the period of monitoring in second
==== Example ====
{
"HOSTS": {
"lyoilcrpi02": [
{
"ARGS": [],
"ENV": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=42000"
],
"NAME": "CCCSERVER",
"PARAMETER": {
"device": "DCCCCC01"
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Sdcc"
},
{
"ARGS": [],
"ENV": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=41000"
],
"NAME": "GPIO",
"PARAMETER": {
"device": "1"
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_GPIO"
},
{
"ARGS": [],
"ENV": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=40000",
"INSTANCE=12"
],
"NAME": "DIFSERVER",
"PARAMETER": {
"builderAddress": "tcp://lyosdhcal9:5556",
"dbcache": "tcp://lyosdhcal9:5555",
"detectorId": 100
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Dif"
}
],
"lyoilcrpi13": [
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/opt/dhcal/root/lib:/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=31000"
],
"NAME": "HIH",
"PARAMETER": {
"TCPPort": 5600,
"location": "DOME_STACK",
"period": 30
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_hih8000"
}
],
"lyoilcrpi24": [
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/opt/dhcal/root/lib:/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=31000"
],
"NAME": "BMP",
"PARAMETER": {
"TCPPort": 5600,
"location": "DOME_STACK",
"period": 30
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Bmp"
},
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/opt/dhcal/root/lib:/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=32000"
],
"NAME": "ZUP",
"PARAMETER": {
"TCPPort": 5610,
"device": "/dev/ttyUSB0",
"location": "DOME_STACK",
"period": 30,
"port": 1
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Zup"
}
],
"lyosdhcal9": [
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=45000"
],
"NAME": "FDAQ",
"PARAMETER": {
"s_ctrlreg": "0x815A1B40"
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Control"
},
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/opt/dhcal/root/lib:/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=51000"
],
"NAME": "WRITER",
"PARAMETER": {
"dif": 48,
"directory": "/data/NAS/stageM2",
"processor": [
"binarywriter",
"lydaq_pluggins_monitor",
"lydaq_pluggins_rootwriter",
"lydaq_pluggins_lciowriter"
],
"shmpath": "/dev/shm/monitor",
"stream": [
"tcp://*:5556"
]
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Builder"
},
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"CONFDB=ILC/fFQeV52rQy@(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on)(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=ccscanovo.in2p3.fr)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=calice.in2p3.fr)))(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=ccscanodgvo.in2p3.fr)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=calice.in2p3.fr))))",
"CONFDB_WEB=cmsLyon/RPC_2008@ilcconfdb.ipnl.in2p3.fr",
"WEBPORT=44000"
],
"NAME": "DBSERVER",
"PARAMETER": {
"mode": "DB",
"path": "/dev/shm/",
"publish": "tcp://*:5555",
"state": "TestChamberLPC"
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_ConfigurationDB"
},
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=36000"
],
"NAME": "FSLOW",
"PARAMETER": {
"account": "admin/admin@lyoac28",
"deviceName": "SY1527@DOMESTAGEM2",
"first": 0,
"last": 5,
"serverName": "tcp://*:5500"
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Slow_Control"
},
{
"ARGS": [],
"ENV": [
"LD_LIBRARY_PATH=/opt/dhcal/root/lib:/usr/lib:/usr/local/lib:/opt/dhcal/lib:$LD_LIBRARY_PATH",
"WEBPORT=31000"
],
"NAME": "ISEG",
"PARAMETER": {
"TCPPort": 5600,
"address": "lyoilchv01.ipnl",
"first": 0,
"last": 55,
"location": "DOME_STACK",
"period": 120
},
"PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Wiener"
}
]
},
"NAME": "chamber_stack_lpc_2"
}
===== Managment of JSON file=====
In order to store data in the Oracle DB you need a login and password. Please contact Guillaume to get one if you don't know it.
==== Storage of a file ====
Access the [[http://daqcontrol.ipnl.in2p3.fr/login.html|DAQ control]] page.
Go to ''Manage Configuration'' page,end of page and create ''New configuration''
Choose your file and create. Then you must click once on your configuration to have it surrounded by a red line, i.e, it is available
==== List files and access it ====
With the same account goto [[https://ilcconfdb.ipnl.in2p3.fr/config|ilcconfdb]] , you will have a list of all registered configuration
To access one go to [[https://ilcconfdb.ipnl.in2p3.fr/config-content/chamber_stack_lpc_2|one example]] where the last name is the name of the config.
====== LYDAQ Usage ======
===== DAQ control interface =====
The [[http://daqcontrol.ipnl.in2p3.fr/login.html|DAQ control interface]] is accessible from anywhere but the browser should be able to send http commands to the DAQ computers. It should be either in the same network or accessible via SOCKS proxy using a dynamic ssh tunnel.
Once logged in, you can choose the configuration used and control the DAQ whatever the current status is.
The list of command and the sequence of acquisition is the same as the one described in the command line interface bellow (one name differs PREPARE instead of daq-service).
===== Command line interface =====
==== The .daqrc file ====
This file defines 2 aliases and for each of them the login to be used and the configuration file. It then launch the //fdaq// script
alias slccontrol="export DAQLOGIN=cmsLyon:RPCxxxxx;export DAQURL=https://ilcconfdb.ipnl.in2p3.fr/config-content/stageM2_daq_2;/opt/lydaq/apps/bin/fdaq.py"
alias daqcontrol="export DAQLOGIN=cmsLyon:RPCxxxxx;export DAQURL=https://ilcconfdb.ipnl.in2p3.fr/config-content/Testchamber2_23022019;/opt/lydaq/apps/bin/fdaq.py"
** this file should be sourced in the .bashrc **
=== Job control ===
* **create** , //daqcontrol --jc-create //, initialise job control
* **start** , //daqcontrol --jc-start //, start all processes
* **kill** , //daqcontrol --jc-kill //, kills all processes
* **destroy** , //daqcontrol --jc-destroy //, allow new initialisiation with a different file for job control
* **status** , //daqcontrol --jc-status //, Lists status of all processses
=== Data acquisition ===
* **create**, //daqcontrol --daq-create //, initialise the FDAQ process
* **discover**, //daqcontrol --daq-discover //, Ask FDAQ to initialise all processess described inthe configuration file
* **service**, //daqcontrol --daq-service //, configure services like Event Builder, DB server, Trigger control
* **initialise**, //daqcontrol --daq-initialise //, initialise DIF server access
* **configure**, //daqcontrol --daq-configure//, Configure DIFs and ASICs
* **start**,//daqcontrol --daq-start//, start a new run
* **stop**,//daqcontrol --daq-stop//, stop the run
* **destroy**,//daqcontrol --daq-destroy//, go back before the **initialise **
== Status ==
* **state**,//daqcontrol --daq-state//, Current state of the Daq
* **status**, //daqcontrol --daq-status//, List the status of all DIFs
* **Event builder**, //daqcontrol --daq-evbstatus//, run and event writen
Normal sequence from scratch:
- daqcontrol --jc-create
- daqcontrol --jc-start
- daqcontrol --jc-status
- daqcontrol --daq-create
- daqcontrol --daq-discover
- daqcontrol --daq-service
- daqcontrol --daq-initialise
- daqcontrol --daq-status
At this stage the DIFs should all be initialised
- daqcontrol --daq-configure
- daqcontrol --daq-status
At this stage all the DIFs should be CONFIGURED all OK
Then one can start and stop runs
- daqcontrol --daq-start
- daqcontrol --trig-resume
- sleep 7200 (wait 2 hrs)
- daqcontrol --daq-stop