Diseño del software de adquisición de datos para ANAIS

Post on 13-Jun-2015

1.873 views 2 download

description

Diseño del software de adquisición de datos para ANAIS, un experimento de detección de materia oscura en el laboratorio de Canfranc.

Transcript of Diseño del software de adquisición de datos para ANAIS

Diseño del software de adquisición de datos para

ANAIS

Miguel OlivánGIFNA

Universidad de Zaragoza

Requisitos funcionales

Hardware de adquisición intercambiable  Almacenamiento de los datos en formato ROOT Incorporación de nuevos módulos, vías, fuentes de 

datos, cristales, de modo sencillo  Almacenamiento de la configuración junto a los 

datos de adquisición Monitorización (ritmos de adquisición, otros)

Requisitos no funcionales

Estabilidad (Cuantificar) Maximizar tiempo vivo (Cuantificar)

Rendimiento suficiente en adquisición Respuesta rápida a eventos

Registro de incidencias

Pautas de diseño

Keep it Simple   KISS→ Fácil de entender, de modificar

Don't repeat yourself   DRY→ Fácil de mantener

Fail Fast Salir rápido en caso de error, informando del motivo

Extensibilidad

Un vistazo al diseño

Un vistazo al diseño

Conceptos fundamentales: DAQSource → Fuente de datos, datos elementales DAQEvent → Evento, conjunto de fuentes 

asociadas a un trigger DAQBoard →  Dispositivo que puede esperar al 

trigger, adquirir datos de fuentes, realizar acciones al comienzo o después de cada adquisición

Matacq, LTD, XDC, PU, IORegister ...

Hardware intercambiable

Polimorfismo: Elección de implementación en tiempo de ejecución   → virtual

Requiere un interfaz común e identificar funcionalidades:

Init, WaitForTrigger, Acquire, DoPostAcquire

DAQHardwareFactory instancia las clases en función de la configuración

Hardware intercambiable

Controladores Derivan de la clase cuya funcionalidad implementa: 

DAQBoard

Gestionan tiempos y estado del hardware Gestionan la relación Fuente   Dispositivo↔

Gestionan los buffers internamente

Almacenamiento de datos

Ficheros ROOT Estructuras de datos sencillas con datos 

elementales Legibles en tiempo de ejecución y extensibles

Usando Branch(name, address, leaflist, bufsize) y generando leaflist en tiempo de ejecución (ver TData.h)

Con los nombres de las fuentes de la configuración

Configuración

Formato YAML Legible Editable manual y automáticamente

Permite añadir y modificar hardware  Esquema genérico:

- grupo: nombre

clave: valor

clave: [vector, de, valores]

Ejemplo de adquisición

LTD(VME)

Matacq(VME)

QDC(VME)

Pattern Unit(VME)

IORegister(VME)

Gate GeneratorOR

GATE

DELAYEDSIGNALS

SIGNALS

SOFT RESET

CHANNEL PER SIGNAL

GLOBAL

Ejemplo de configuración- event: Group1

trigger: io_reg_0

source: [matacq1_0,matacq1_1, qdc1_0, qdc1_1, pu0]

post_acquire: [ matacq1, io_reg_0]

- source: matacq1_0

board: matacq1

channel: 0

- source: matacq1_1

board: matacq1

channel: 1

- source: qdc1_0

board: qdc1

channel: 0

- source: qdc1_1

board: qdc1

channel: 1

- source: pu0

board: pu0

- matacq: matacq1

baseaddr: 0x10000

channels: [0, 1, 2]

#...

- xdc: qdc1

baseaddr: 0xA0000

channel: [0, 1]

- ltd814: ltd

baseaddr: 0xC0000

channel: [14 , 15]

threshold: [20, 20]

- io_register: io_reg_0

baseaddr: 0xE0000

- pattern_unit_259: pu0

baseaddr: 0x60000

Ejemplo de captura

Detalles de implementación

Bucle de adquisición: DAQEvent.h

Detalles de implementación

Controlador DAQBoard: hw/Matacq.h

Detalles de implementación

Instanciar controlador: hw/DAQHardwareFactory.cxx

Detalles de implementación

Buenas prácticas en C++: Uso de la librería estándar de C++

std::string Uso de la STL (Standard Template Library) RAII (Resource Acquisition Is Initialization) Otras herramientas: Valgrind, gdb, subversion

Puesta en marcha

Implementación buffering, datos opcionales Análisis de datos  Pruebas de rendimiento y estabilidad   junio→

Instalación en Canfranc  ¿1º semana de julio?→

Ajuste fino de parámetros  julio→

Adquisición prolongada  agosto­septiembre→

Cuestiones abiertas - futuro

Estructura de datos reordenada en fichero ROOT  Guardar datos opcionalmente. Condiciones  Test Interrupciones vs. Polling Kernel realtime vs. Normal Threading en la adquisición Almacenamiento síncrono vs. Asíncrono Configuración gráfica