This new DAQ control is purely based on python (version 3). The C++ run control (FDAQ/FSLOW) is dropped and all application are directly controlled by python
Il est interfacé avec la base mongodb dans laquelle est stocké les configurations de processus et les informations sur chaque prise de donnée (run par setup avec commentaires)
Pour plus d'informations sur la base il faut se refferer à la page Documentation Mongo DB
Le script mgjob permet de téléverser ou de télécharger une configuration ainsi que visualiser les runs d'un setup donné.
Afin d'utiliser cet environnement il est nécessaire de définir 3 variables d'environnement:
Le contrôle de la prise de donnée se fait en plusieurs étapes. Il faut créer un fichier de description des processus et le téléverser dans la base, gérer les processus d'acquisition (création,destruction,paramètres) et enfin gérer l'exécution séquentielle de la prise de donnée(Initialisiation, configuration, acquisition,reset)
Nous allons prendre comme exemple une acquisition lisant des DIFs USB via un raspberry, synchronisée par une SDCC. Trois processus doivent être déclarés:
Les 3 paragraphes suivants décrivent les paramètres nécessaires par processus
{ "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": "CCCSERVER", "PARAMETER": { "device": "DCCCCC01" <=== FTDI name }, "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Sdcc" }
{ "ARGS": [], "ENV": [ "PATH=/opt/dhcal/bin:/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", "PYTHONPATH=/opt/dhcal/script/:$PYTHONPATH", "CONFDB_WEB=cmsLyon/RPC_2008@ilcconfdb.ipnl.in2p3.fr", "WEBPORT=40000", "INSTANCE=0" ], "NAME": "DIFMANAGER", "PARAMETER": { "detectorId": 100, <== Event builder detector id "dif": { "db": { <== DB access description "mode": "mongo", "state": "DIFTEST_DOME", <== ASICs DB state "version": 3 <== ASICs DB version } }, "publish": "tcp://lyosdhcal9:5556" <== data publication port (obsolete with ZDAQ Event builder) }, "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_DIF" }
{ "ARGS": [], "ENV": [ "LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/zdaq/lib:/opt/zdaq/example/lib: $LD_LIBRARY_PATH", "WEBPORT=46000", "INSTANCE=0" ], "NAME": "BUILDER", "PARAMETER": { "collectingPort": 5556, <== Port sur lequel le DIFMANAGER envoie les données "directory": "/data/local/TELESCOPE", <== Repertoire d'écriture "dummy": 0, <== 1 si les données ne sont pas écrites "processor": [ "binarywriter" <== Liste des pluggins d'écriture et d'analyse, binarywriter est fourni par ZDAQ ], "stream": [ "tcp://*:5556" <== Obsolete ] }, "PROGRAM": "/opt/dhcal/bin/zdaq_daemon_builder" }
Le fichier de configuration est un dictionnaire JSON avec 2 étiquettes
Chaque machine est étiquetée par son nom et contient une liste de description de processus, comme dans l'exemple suivant
{ "HOSTS": { "lyoilc17": [ { "ARGS": [], "ENV": [ "LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/zdaq/lib:/opt/zdaq/example/lib: $LD_LIBRARY_PATH", "WEBPORT=46000", "INSTANCE=0" ], "NAME": "BUILDER", "PARAMETER": { "collectingPort": 5556, "directory": "/data/local/TELESCOPE", "dsnumber": 2, "dummy": 0, "processor": [ "binarywriter" ], "stream": [ "tcp://*:5556" ] }, "PROGRAM": "/opt/dhcal/bin/zdaq_daemon_builder" } ], "lyoilcrpi17": [ { "ARGS": [], "ENV": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "DIM_DNS_NODE=lyosdhcal10", "LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/dhcal/levbdim/lib:/opt/dhcal/lib: /opt/dhcal/DQM4HEP/lib:/opt/dhcal/dim/linux:/opt/dhcal/DQM4HEP/lib:/opt/dhcal/root/lib: /opt/dhcal/lcio/v02-00/lib/:$LD_LIBRARY_PATH", "WEBPORT=42000" ], "NAME": "CCCSERVER", "PARAMETER": { "device": "MDCC01", "spilloff": 1000000, "spillon": 20000, "spillregister": 64 }, "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Sdcc" }, { "ARGS": [], "ENV": [ "PATH=/opt/dhcal/bin:/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", "PYTHONPATH=/opt/dhcal/script/:$PYTHONPATH", "CONFDB_WEB=cmsLyon/RPC_2008@ilcconfdb.ipnl.in2p3.fr", "WEBPORT=40000", "INSTANCE=0" ], "NAME": "DIFMANAGER", "PARAMETER": { "detectorId": 100, "dif": { "db": { "mode": "mongo", "state": "TELESCOPE_DOME", "version": 24 } }, "publish": "tcp://lyoilc17:5556" }, "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_DIF" }, { "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": "GPIOSERVER", "PARAMETER": { "device": "1" }, "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_GPIO" } ] }, "NAME": "diftest_dome_4" }
Dans ce cas le PC lyoilc17 collecte les données et les écrit sur disque, le raspberry PI lyoilcrpi17 lit les DIFs, contrôle la synchronisation et contrôle des alimenations avec le processu GPIOSERVER
Pour controller les processus un programme (daemon) doit être lancé sur chaque machine participant à l'acquisition:
sudo /opt/dhcal/bin/ljcd status
Si le programme n'est pas running il faut le lancer avec:
sudo /opt/dhcal/bin/ljcd start
On vérifie son état avec un accès à http://nomdemachine:9999
Ensuite sur la machine sur laquelle on va controller l'acquisition on utilise le script difdaq
usage: difdaq [-h] [--jc-create | --jc-kill | --jc-destroy | --jc-start | --jc-restart | --jc-status | --jc-info | --jc-appcreate | --daq-initialise | --daq-configure | --daq-startrun | --daq-stoprun | --daq-destroy | --daq-status | --daq-difstatus | --daq-evbstatus | --daq-downloaddb | --dif-ctrlreg] [--config CONFIG] [--dbstate DBSTATE] [--dbversion DBVERSION] [--clock CLOCK] [--directory DIRECTORY] [--vth VTH] [--gain GAIN] [--tdc TDC] [--lines LINES] [--host HOST] [--name NAME] [--jobname JOBNAME] [--jobpid JOBPID] [--value VALUE] [--address ADDRESS] [-v] [--comment COMMENT] [--ctrlreg CTRLREG] [-M METHOD] [-A APPLICATION] [-P PARAMETER] optional arguments: -h, --help show this help message and exit --jc-create Loads configuration in all jobcontrol process --jc-kill kill all running processes --jc-destroy delete all jobcontrol configuration --jc-start start all controled processes described in $DAQCONFIG jsonfile variable --jc-restart restart one job with --jobname=name --jobpid=pid --host=hostname --jc-status show the status all controled processes or of the process specified in --name=PROC --jc-info show the status all controled processesof the host specified in --host=Host --jc-appcreate Create all ZDAQ app on all hosts --daq-initialise Initialise DAQ, data source discovery and Builder final configuration --daq-configure Configure FDAQ, front end ASICs configuration --daq-startrun start the run --daq-stoprun stop the run --daq-destroy destroy the readout, back to the CREATED state --daq-status display DAQ status of all processes --daq-difstatus display DAQ status of all FEBCMS TDC --daq-evbstatus display event builder status --daq-downloaddb download the dbstate specified in --dbstate=state --version=num --dif-ctrlreg Send CTRLREG to DIFMANAGER --ctrlreg=ctrl --config CONFIG json config file --dbstate DBSTATE set the dbstate --dbversion DBVERSION DB state version --clock CLOCK set the number of 20 ns clock --directory DIRECTORY shm publisher directory --vth VTH set the vth for chips --gain GAIN set the gain for chips --tdc TDC set the tdc instance --lines LINES set the number of lines to be dump --host HOST host for log --name NAME application name --jobname JOBNAME job name --jobpid JOBPID job pid --value VALUE value to pass --address ADDRESS address to pass -v, --verbose Raw Json output --comment COMMENT Comment for start run --ctrlreg CTRLREG Hexadecimal string ctrlreg -M METHOD, --Method METHOD Command name -A APPLICATION, --Application APPLICATION Application name -P PARAMETER, --Parameter PARAMETER parameter set
Avec difdaq –jc-info on a le PID de chaque processus créé, on peut accéder a ses log sur la machine correspondante dans /tmp/fsmjobPID#pid.log
Je donne un exemple avec des DIFs version LAPP et une SDCC
Pour rappel la liste des runs s'obtient avec mgjob –runs
Je crée souvent un fichier .daqsetup avec des alias vers ces commandes et la definition des variables dénvironnement:
source .daqsetup
en se connectant doit suffire a les definir.