User Tools

Site Tools


daq_control_python

This is an old revision of the document!


DAQ Control (July 2020)

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:

  1. MGDBLOGIN=monId/monPasswd@mamachinedeDB:27017@MaBase , cette variable est également définie dans le fichier /etc/ljc.conf sur chaque machine
  2. DAQMONGO=maconfig:maversion , c'est la configuration de processus qui sera utilisée
  3. DAQSETUP=Nom_de_lexperience , il sera utilisé pour avoir une série de numéros de runs unique par expérience (début à 1000)

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)

Le fichier de description

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:

  1. le contrôle de la SDCC: CCCSERVER
  2. le contrôle des DIFs: DIFMANAGER
  3. le contrôle de l'écriture : BUILDER

Les 3 paragraphes suivants décrivent les paramètres nécessaires par processus

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": "CCCSERVER", 
      "PARAMETER": {
        "device": "DCCCCC01"         <=== FTDI name
      }, 
      "PROGRAM": "/opt/dhcal/bin/lydaq_daemon_Sdcc"
    }
    

DIFManager

    {
      "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"
    }

Builder

    {
      "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"
    }

Structure du fichier

Le fichier de configuration est un dictionnaire JSON avec 2 étiquettes

  • HOSTS : Un dictionnaire des machines de la configuration
  • NAME : Le nom de la configuration (typiquement nom_version)

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

daq_control_python.1594371818.txt.gz · Last modified: 2021/07/10 23:20 (external edit)