Congreso SMF 2026 · Partículas y Campos

SIMEX
RACSO

Simulador de eventos de colisión con clúster MPI de Raspberry Pi. Validación cinemática contra datos reales del CMS Open Data y generación Monte Carlo con masa invariante controlada.

4
Kernels MPI
24
Referencias
100K
Eventos CMS
v1.0.0
Versión actual
μ⁺ μ⁻
01 · El proyecto

Dos frentes, un objetivo

SIMEX-RACSO junta dos cosas que raramente conviven en un mismo proyecto: física experimental de partículas y computación distribuida de bajo costo. No es un visor de datos ni un framework genérico: es una herramienta que reproduce la cinemática relativista desde cero, la valida contra la realidad del detector del CMS, y la ejerce en un clúster de Raspberry Pi conectado por SSH.

① Validación contra el CMS

El dataset público DoubleMu 2011A del CMS Open Data contiene 100,000 eventos con dos muones cada uno. Son colisiones protón-protón que el detector CMS registró en el LHC durante 2011 a una energía de centro de masa de √s = 7 TeV.

La aplicación recalcula la masa invariante de cada par de muones a partir de las variables cinemáticas publicadas (pT, η, φ) y compara el resultado contra la columna M que el propio CMS ya calculó. Si la diferencia media entre ambas distribuciones es casi cero, mi implementación de la cinemática relativista es correcta.

② Simulación Monte Carlo

Un segundo kernel genera eventos desde cero, sin leer ningún archivo. El usuario fija la masa objetivo y la resolución experimental σ. En vez de generar al azar y filtrar por masa (lo cual sería ineficiente), el kernel despeja cos(Δφ) de la fórmula de masa invariante, garantizando que cada evento cumpla la restricción física por construcción.

Con σ = 0, la simulación da un pico ideal (delta de Dirac). Con σ > 0, el pico adquiere ancho, comparable al que mide el detector real. Eso permite comparar teoría y experimento en la misma gráfica y estimar la resolución efectiva del CMS.

Fórmula de masa invariante

m² = 2 · pT₁ · pT₂ · [ cosh(η₁ − η₂) − cos(φ₁ − φ₂) ]

Sale de sumar los cuadrimomentos relativistas de los dos muones y aplicar la identidad hiperbólica cosh(a−b) = cosh a cosh b − sinh a sinh b.

02 · Características

Todo lo que hace la app

Nueve módulos organizados por familia. Cada uno usa su propio kernel MPI y puede correr en la PC local o repartirse entre los nodos del clúster Raspberry Pi.

⚡

Hilos Local

Benchmark Monte Carlo puro. Mide el overhead de MPI sin I/O de disco, para ver cuánto mejora al agregar procesos en la misma máquina.

🎯

Colisiones Local

Recalcula la masa invariante del dataset del CMS con 4 pruebas base: J/ψ, Υ, Z y Higgs. Compara contra la columna M del propio CMS.

🍓

Hilos RPi

Igual que Hilos Local pero repartido entre las Raspberry Pi detectadas en la red. La detección es automática vía tabla ARP.

🖧

Colisiones RPi

Valida la cinemática contra el CMS repartiendo el trabajo entre los nodos del clúster. Mide el speedup real.

🎲

Simulación Local

Genera eventos Monte Carlo con masa invariante controlada. Edita masa, σ, pT y η desde la interfaz sin recompilar.

🌐

Simulación RPi

Genera eventos en paralelo repartiendo el trabajo entre los nodos. Cada evento tiene exactamente la masa pedida.

🎬

Reconstrucción 3D

Anima cada evento real del CMS como una colisión 3D de 5 segundos. Recorre eventos con un slider o pide uno al azar.

✨

Reconstrucción Sim

Lo mismo pero con los eventos generados por Monte Carlo. Útil para comparar visualmente un evento simulado con uno real.

📄

Reporte PDF

Compila tablas, gráficas y estadísticas de los benchmarks en un PDF académico listo para presentar en el congreso.

03 · Arquitectura

Tres capas, cuatro kernels

La aplicación está construida en capas estrictas para separar responsabilidades. Cada capa se puede auditar, reemplazar o extender de forma independiente.

Las tres capas

Capa 3 · Python

Interfaz gráfica con Tkinter

Paneles, sliders, botones, gráficas con Matplotlib, exportación de reportes con FPDF. Es la única capa que el usuario ve directamente. Se encarga de gestionar los subprocesos y de parsear las salidas de los kernels.

Capa 2 · C++ / MPI

Kernels distribuidos con OpenMPI

El trabajo pesado real. Cuatro ejecutables que se compilan con mpicxx -O3 la primera vez que arranca la app. Reparten la carga entre procesos con MPI_Scatterv y juntan los resultados con MPI_Reduce / MPI_Gatherv.

Capa 1 · WSL2

Puente Windows ↔ Linux

WSL2 permite compilar y ejecutar binarios Linux directamente desde Windows. También funciona como punto de entrada SSH hacia las Raspberry Pi del clúster, sin necesidad de configurar red adicional.

Los cuatro kernels

mc_core
Monte Carlo puro
sin I/O
colision_core
Valida CSV
del CMS
anim_core
Precomputa
eventos 3D
sim_core
Genera eventos
desde cero

Optimizaciones aplicadas

  • Lectura del CSV con fgets + strtod (C puro, sin excepciones)
  • Caché binario .dat creado la primera ejecución
  • MPI_Scatterv en lugar de MPI_Scatter para no perder eventos
  • Reutilización de artistas 3D en Matplotlib (sin fugas de memoria)
  • subprocess.Popen + terminate() para no dejar procesos zombis
  • Semilla Monte Carlo por rank para evitar correlación cruzada
mpirun -np 8 ./sim_core
# Generar 100,000 eventos con masa 91.1876 GeV (Z) $ wsl bash -c "cd /mnt/c/proyecto && mpirun -np 8 ./sim_core 100000 91.1876 10 100 -2.4 2.4 2.5" [+] Eventos simulados: 100000 [+] Masa objetivo: 91.1876 GeV (sigma = 2.5 GeV) [+] Intentos totales: 187432 | 8 | 0.0152 s | SIMULACION # El CSV queda en simulacion_eventos.csv listo para reconstrucción 3D
04 · Física

Las cuatro resonancias

Cada prueba base filtra el CSV del CMS a una ventana alrededor de la masa teórica de la resonancia. Los valores vienen del Particle Data Group (2012), la fuente oficial de masas y constantes en física de partículas.

J/ψ
3.096 GeV/c²
Mesón descubierto en 1974 por Richter y Ting. Confirmó la existencia del quark charm. Nobel de Física 1976.
Rango: [2.5, 3.7] GeV
σ = 0.05 GeV
Υ
9.460 GeV/c²
Mesón bottomonium descubierto en 1977 en Fermilab. Confirmó el quark bottom y validó el modelo de quarks.
Rango: [8.5, 10.5] GeV
σ = 0.15 GeV
Z
91.1876 GeV/c²
Bosón Z descubierto en 1983 en el CERN por Rubbia y van der Meer. Una de las masas más precisas de la física. Nobel 1984.
Rango: [80, 100] GeV
σ = 2.5 GeV
H
125.0 GeV/c²
Bosón de Higgs descubierto en 2012 por ATLAS y CMS en el LHC. Explica el origen de la masa de las partículas. Nobel 2013.
Rango: [115, 135] GeV
σ = 4.0 GeV
Nota sobre el Higgs: el dataset del CMS que uso es de 2011, cuando el bosón de Higgs aún no se había descubierto oficialmente (eso fue en 2012). Por eso la prueba del Higgs no tiene estadística en los datos reales: la ventana 115-135 GeV aparece prácticamente vacía. Ese preset sirve para simulación Monte Carlo pero no para validación contra CMS. En la aplicación está documentado así explícitamente.
05 · Bibliografía

Referencias completas

24 referencias organizadas en seis bloques temáticos. Cada una respalda una decisión específica del proyecto: los datos usados, la física aplicada, las técnicas de cómputo paralelo, el hardware del clúster y las librerías de software.

[1]
Events with two muons from 2011 (Primary dataset DoubleMu 2011A)
CMS Collaboration · 2019 · CERN Open Data Portal
Es el dataset original que lee la aplicación. Contiene 100,000 eventos con dos muones cada uno, extraídos de la toma de datos del LHC durante 2011 a √s = 7 TeV. Está publicado bajo licencia CC0 (dominio público). Todas las gráficas de la aplicación que muestran "Columna M del CMS" salen de este archivo.
[2]
Dimuon spectrum (educational)
McCauley, T. · 2019 · CERN Open Data Portal
Tutorial oficial del CERN que explica paso a paso cómo reconstruir el espectro de masa invariante de dos muones con el dataset anterior. Es la documentación del método que replico en mi kernel colision_core. Incluye ejemplos con Python (ROOT, pandas) y las selecciones estándar de calidad de muones.
[3]
Primary Datasets - 2011 Data Taking
CMS Collaboration · 2011 · CERN Document Server
Documentación técnica de la toma de datos de 2011 en el LHC. Explica los triggers DoubleMu con los que se filtraron los eventos, los cortes de calidad aplicados y el contexto físico de la época (energía de √s = 7 TeV, luminosidad integrada, etc.). Es la fuente de la información sobre cómo se tomaron los datos del CSV.
[4]
Observation of a new boson at a mass of 125 GeV with the CMS experiment at the LHC
CMS Collaboration · 2012 · Physics Letters B, 716(1), 30-61
Paper del descubrimiento del bosón de Higgs. En sus figuras se ven espectros de masa invariante m(mu mu) del mismo tipo que los que genera mi código. Los picos del J/ψ, Υ y Z que aparecen en las gráficas de mi app son el mismo tipo de estructura: un exceso de eventos alrededor de una masa característica.
[5]
Performance of CMS muon reconstruction in pp collision events at √s = 7 TeV
CMS Collaboration · 2010 · JINST, 5, T03022
Describe cómo el detector CMS reconstruye los muones a partir de las señales de las cámaras de muones y el tracker. Es el origen físico de las columnas pt, eta, phi del CSV. También explica las resoluciones típicas del detector (~1% en pT, ~0.01 en η, ~0.01 rad en φ), que son las que justifican los valores de σ que uso en cada resonancia.
[6]
The CMS experiment at the CERN LHC
CMS Collaboration · 2008 · JINST, 3, S08004
Descripción técnica completa del detector CMS: el imán superconductor de 3.8 T, el tracker de silicio, los calorímetros y las cámaras de muones. Lo consulté para entender qué se mide exactamente y cómo se traduce a las variables cinemáticas que uso. Contexto experimental para interpretar los datos del CSV.
[7]
Zur Elektrodynamik bewegter Körper
Einstein, A. · 1905 · Annalen der Physik, 17, 891-921
El paper fundacional de la relatividad especial. Introduce la idea de que el espacio y el tiempo no son absolutos, y de que la energía y el momento de una partícula forman un cuadrivector p^μ = (E/c, px, py, pz). De aquí sale la equivalencia masa-energía E = mc² y el concepto de masa invariante que uso en toda la app.
[8]
Raum und Zeit
Minkowski, H. · 1908 · 80. Versammlung deutscher Naturforscher und Ärzte
Conferencia donde Minkowski le dio forma geométrica a la relatividad de Einstein. Introdujo el espacio-tiempo de cuatro dimensiones y notó que la cantidad E² − p²c² es un invariante Lorentz: no cambia al pasar de un sistema inercial a otro. Esa invariancia es lo que permite identificar partículas por su masa en un colisionador.
[9]
The Classical Theory of Fields (4th ed.)
Landau, L. D. & Lifshitz, E. M. · 1975 · Pergamon Press
Libro de texto clásico de teoría de campos. El capítulo 2 contiene la derivación formal del cuadrimomento y de la masa invariante a partir del principio de mínima acción. Es la referencia rigurosa que uso cuando quiero justificar los pasos matemáticos que llevan a la fórmula compacta m² = 2·pT₁·pT₂·[cosh(Δη) − cos(Δφ)].
[10]
Review of Particle Physics
Particle Data Group (Beringer, J. et al.) · 2012 · Physical Review D, 86, 010001
Fuente oficial de las masas y constantes de física de partículas. Los valores que uso como referencia vienen todos de aquí: J/ψ = 3.096 GeV, Υ = 9.460 GeV, Z = 91.1876 GeV, Higgs = 125.0 GeV. El PDG publica una revisión actualizada cada dos años con los promedios mundiales de todas las medidas publicadas.
[11]
QCD and Collider Physics
Ellis, R. K., Stirling, W. J. & Webber, B. R. · 1996 · Cambridge University Press
Referencia teórica para entender el fondo QCD que se ve debajo de los picos en el espectro de masa invariante. Los procesos Drell-Yan (producción de pares de leptones vía un bosón virtual) son los que dominan la región del continuo entre picos. Los capítulos 5 y 9 cubren los cálculos de secciones eficaces que explican la forma del espectro.
[12]
Validity of the single processor approach to achieving large scale computing capabilities
Amdahl, G. M. · 1967 · AFIPS SJCC, 30, 483-485
El paper donde Amdahl formuló su ley: el speedup máximo de cualquier programa paralelo está limitado por la fracción secuencial del mismo. En mi caso, es la base teórica de las gráficas de escalabilidad que muestra la aplicación. Explica por qué al llegar a 8 hilos el speedup empieza a caer: hay partes del kernel que son intrínsecamente secuenciales (lectura del CSV, reducción de resultados).
[13]
Reevaluating Amdahl's Law
Gustafson, J. L. · 1988 · Communications of the ACM, 31(5), 532-533
Extensión de la Ley de Amdahl para el caso en que la carga de trabajo crece con el número de procesadores. En mi caso, es relevante porque cuando paso de 8 hilos a 4 nodos Raspberry Pi no mantengo el mismo número de eventos: escalo la carga proporcionalmente. La ley de Gustafson describe mejor el comportamiento en ese régimen.
[14]
MPI: A Message-Passing Interface Standard, Version 4.0
Message Passing Interface Forum · 2021 · University of Tennessee
Especificación oficial del estándar MPI. Es el documento al que me refiero cuando uso MPI_Scatterv, MPI_Gatherv, MPI_Reduce o MPI_Bcast en los kernels. La versión 4.0 añadió soporte para procesos en múltiples arquitecturas (útil para mezclar x86 y ARM en el mismo clúster, como hago en este proyecto).
[15]
Using MPI: Portable Parallel Programming with the Message-Passing Interface (3rd ed.)
Gropp, W., Lusk, E. & Skjellum, A. · 2014 · MIT Press
Referencia práctica para las funciones de MPI que uso. Los capítulos sobre comunicación colectiva (Scatterv, Gatherv, Reduce) fueron mi guía principal para escribir los kernels. También cubre patrones comunes como la distribución de trabajo desbalanceada, que aplico cuando el total de eventos no es múltiplo del número de procesos.
[16]
The Monte Carlo Method
Metropolis, N. & Ulam, S. · 1949 · Journal of the American Statistical Association, 44(247), 335-341
Paper original del método Monte Carlo. Es la base metodológica del kernel mc_core y del proceso de generación aleatoria que uso para muestrear los eventos. En la época en que se publicó, se usaba para simular procesos de difusión de neutrones en el proyecto Manhattan. Ahora es una técnica estándar en física de partículas, finanzas y machine learning.
[17]
Mersenne Twister: A 623-dimensionally equidistributed uniform pseudo-random number generator
Matsumoto, M. & Nishimura, T. · 1998 · ACM TOMACS, 8(1), 3-30
Algoritmo PRNG que uso con std::mt19937 en los kernels C++. Tiene un periodo de 2¹⁹⁹³⁷ − 1 y pasa todas las pruebas estadísticas estándar (Diehard, TestU01). Es el generador por defecto en muchas herramientas científicas (Python, R, GSL) porque ofrece un buen balance entre velocidad y calidad estadística.
[18]
Iridis-pi: a low-cost, compact demonstration cluster
Cox, S. J., Cox, J. T., Boardman, R. P., Johnston, S. J., Scott, M. & O'Brien, N. S. · 2013 · The Journal of Supercomputing, 69(2), 1247-1257
Clúster de 64 Raspberry Pi para docencia en computación paralela. Es el precedente académico más directo de mi proyecto: ellos usaron Raspberry Pi para enseñar MPI a estudiantes, con un enfoque didáctico similar al mío. Miden speedup con benchmarks estándar (Linpack, HPL) y muestran que el clúster es útil para docencia aunque no compita con servidores profesionales.
[19]
The Glasgow Raspberry Pi Cloud: A Scale Model for Cloud Computing Infrastructures
Tso, F. P., White, D. R., Jouet, S., Singer, J. & Pezaros, D. P. · 2013 · ICDCSW, 108-112
Nube a pequeña escala hecha con Raspberry Pi, usada para investigar y enseñar conceptos de centros de datos. Confirma que hay una línea de investigación activa con esta plataforma y valida la idea de usar ARM de bajo costo para cargas distribuidas reales. Los autores discuten también las limitaciones de red (Ethernet 100 Mbps) y su impacto en aplicaciones con mucha comunicación.
[20]
Raspberry Pi 5 Product Brief
Raspberry Pi Foundation · 2023
Especificación técnica oficial del hardware del clúster. Da los datos del SoC BCM2712 (ARM Cortex-A76 a 2.4 GHz), la cantidad de RAM (4, 8 o 16 GB) y las capacidades de red (Gigabit Ethernet, WiFi 5, Bluetooth 5). Es la fuente para los datos de hardware que menciono en la pestaña de Referencias de la aplicación.
[21]
Matplotlib: A 2D graphics environment
Hunter, J. D. · 2007 · Computing in Science & Engineering, 9(3), 90-95
Librería con la que hago todas las gráficas 2D y 3D de la aplicación: espectros de masa, curvas de tiempo, gráficas de speedup, histogramas comparativos y animaciones 3D. El paper original describe la arquitectura orientada a objetos que uso para reutilizar artistas en la animación y evitar fugas de memoria.
[22]
Array programming with NumPy
Harris, C. R., Millman, K. J., van der Walt, S. J. et al. · 2020 · Nature, 585, 357-362
Uso NumPy para leer el CSV con np.loadtxt, manipular los arrays de eventos, calcular histogramas con np.histogram y hacer operaciones vectoriales sobre las masas recalculadas. El paper describe la arquitectura de ndarray y las optimizaciones SIMD que la hacen tan rápida.
[23]
The Secure Shell (SSH) Protocol Architecture
Ylonen, T. & Lonvick, C. · 2006 · IETF RFC 4251
Especificación del protocolo SSH que uso para conectarme a las Raspberry Pi del clúster desde WSL. Los detalles de la autenticación con llaves (usando Ed25519) y el modo BatchMode que uso en los comandos automáticos vienen de aquí. Es lo que permite ejecutar mpirun remotamente sin tener que meter contraseña cada vez.
[24]
Windows Subsystem for Linux
Microsoft Learn · 2024
Documentación de WSL, el subsistema que uso como puente entre Windows y Ubuntu. Permite compilar los kernels C++ con mpicxx nativo de Linux y ejecutarlos con mpirun directamente desde un comando de Windows. También sirve como punto de entrada SSH para el clúster Raspberry Pi sin necesidad de configurar red adicional.
06 · Instalación

Cinco minutos y listo

El instalador pesa ~50 MB y no requiere permisos de administrador. Solo necesita WSL2 con OpenMPI para compilar y ejecutar los kernels C++.

Paso 1 · Instalar WSL2

Abre PowerShell como administrador y ejecuta:

PowerShell (Administrador)
PS> wsl --install -d Ubuntu # Esto descarga la imagen de Ubuntu. Reinicia si te lo pide. # Después del reinicio, Ubuntu se abre sola y pide usuario/contraseña.

Paso 2 · Instalar OpenMPI

Abre la terminal de Ubuntu (menú Inicio → Ubuntu) y ejecuta:

Ubuntu · bash
$ sudo apt update $ sudo apt install -y libopenmpi-dev openmpi-bin build-essential # Verificación: $ mpicxx --version g++ (Ubuntu 13.2.0-...) ... $ mpirun --version mpirun (Open MPI) 4.1.6

Opción A · Instalador

Descarga el .exe desde la sección de Releases del repositorio. Doble clic, sigue el wizard y listo. La app aparece en el menú Inicio y opcionalmente en el escritorio. No requiere permisos de administrador.

↓ Descargar último release

Opción B · Código fuente

Clona el repositorio, instala las dependencias con pip y ejecuta el script principal. Requiere Python 3.10 o superior.

$ git clone https://github.com/OscarPab/SIMEX-RACSO.git $ cd SIMEX-RACSO $ pip install -r requirements.txt $ python ClusterApp.py
Primer arranque: cuando abres la app por primera vez, compila los cuatro kernels C++ con mpicxx -O3 dentro de WSL. Tarda unos segundos y muestra el progreso en la consola. Las siguientes veces arranca instantáneo porque ya están compilados.
07 · Tecnologías

Stack técnico

Herramientas elegidas por estabilidad, disponibilidad y licencia libre. Todas son de código abierto o se pueden usar sin costo para proyectos académicos.

Python 3.10+
Interfaz principal
Tkinter
GUI multiplataforma
Matplotlib
Gráficas 2D y 3D
NumPy
Arrays numéricos
FPDF2
Reportes PDF
C++17
Kernels
OpenMPI 4.x
Distribución paralela
WSL2
Puente Windows-Linux
PyInstaller
Empaquetado .exe
Inno Setup
Instalador Windows
RPi OS
Nodos del clúster
PHP 8.3.33
Este sitio web