Juraj Smieško (CERN) as part of the FCC Software team
Future Colliders for Early-Career Researchers: CZ/SK Edition
Prague, CZ
27 September 2024
Energy and luminosity upgrade in an integrated program
source: FCC Layout — Aerial View
Set of common software packages, tools, and standards for different Detector/Collider Concepts
Describes event data with the set of standard objects
Example object:
#------------- CalorimeterHit edm4hep::CalorimeterHit: Description: "Calorimeter hit" Author: "EDM4hep authors" Members: - uint64_t cellID // detector specific (geometrical) cell id - float energy [GeV] // energy of the hit - float energyError [GeV] // error of the hit energy - float time [ns] // time of the hit - edm4hep::Vector3f position [mm] // position of the hit in world coordinates - int32_t type // type of hit
v0.99.0
Generates Event Data Model and serves as I/O Layer
1.0.1
Constructs the EDM4hep objects for the user
Example usage of Podio Reader in Pyhton:
from podio.root_io import Reader reader = Reader("one or many input files") for event in reader.get("events"): hits = store.get("hits") for hit in hits: # ...
To inspect contents of the EDM4hep file use:
podio-dump
Battle tested event processing framework
Gaudi::Functional
Hello World in Gaudi:
from Gaudi.Configuration import * from Configurables import HelloWorldEx alg = HelloWorldEx() ApplicationMgr( EvtMax = 10, EvtSel = 'NONE', HistogramPersistency = 'NONE', TopAlg = [alg], )
Source: Gaudi
Package with Key4hep Gaudi components
IOSvc
, DataHandle
,
MetaDataHandle
k4run
#include "Gaudi/Property.h" #include "edm4hep/MCParticleCollection.h" #include "k4FWCore/Consumer.h" #include <stdexcept> #include <string> struct ExampleFunctionalConsumer final : k4FWCore::Consumer<void(const edm4hep::MCParticleCollection& input)> { // The pair in KeyValues can be changed from python and it corresponds // to the name of the input collection ExampleFunctionalConsumer(const std::string& name, ISvcLocator* svcLoc) : Consumer(name, svcLoc, KeyValues("InputCollection", {"MCParticles"})) {} // This is the function that will be called to transform the data // Note that the function has to be const, as well as the collections // we get from the input void operator()(const edm4hep::MCParticleCollection& input) const override { debug() << "Received MCParticle collection with " << input.size() << " elements" << endmsg; if (input.size() != 2) { fatal() << "Wrong size of MCParticle collection, expected 2 got " << input.size() << endmsg; throw std::runtime_error("Wrong size of MCParticle collection"); } int i = 0; for (const auto& particle : input) { if ((particle.getPDG() != 1 + i + m_offset) || (particle.getGeneratorStatus() != 2 + i + m_offset) || (particle.getSimulatorStatus() != 3 + i + m_offset) || (particle.getCharge() != 4 + i + m_offset) || (particle.getTime() != 5 + i + m_offset) || (particle.getMass() != 6 + i + m_offset)) { std::stringstream error; error << "Wrong data in MCParticle collection, expected " << 1 + i + m_offset << ", " << 2 + i + m_offset << ", " << 3 + i + m_offset << ", " << 4 + i + m_offset << ", " << 5 + i + m_offset << ", " << 6 + i + m_offset << " got " << particle.getPDG() << ", " << particle.getGeneratorStatus() << ", " << particle.getSimulatorStatus() << ", " << particle.getCharge() << ", " << particle.getTime() << ", " << particle.getMass(); throw std::runtime_error(error.str()); } i++; } } Gaudi::Property<int> m_offset{this, "Offset", 10, "Integer to add to the dummy values written to the edm"}; }; DECLARE_COMPONENT(ExampleFunctionalConsumer)
Integration of tools developed by linear collider community
The detector is completely described with the help of DD4hep
ddsim
—
standalone simulation executable
/FCCee
Package management for supercomputing centers
source /cvmfs/sw.hsf.org/key4hep/setup.sh
source /cvmfs/sw-nightlies.hsf.org/key4hep/setup.sh
source /cvmfs/fcc.cern.ch/sw/latest/setup.sh
source: G. Ganis
Theoretical efforts for ee generators is rumping up
ddsim
Propagation of particles or decay products through detector
ddsim
(part of DD4hep)
Gaussino
on back burner
Analysis framework build on top of ROOT RDataFrame
with
input from EDM4hep
Access to CVMFS is crucial
Start by sourcing Key4hep stack from CVMFS source /cvmfs/sw.hsf.org/key4hep/setup.sh # or source /cvmfs/sw-nightlies.hsf.org/key4hep/setup.sh
Usually, the packages are build with CMake
mkdir build install cd build cmake -DCMAKE_INSTALL_PREFIX=install .. make -j4 make install cd ..
To make your local version visible in your current shell, run
k4_local_repo