HSF Software Training Center

Idea

Training in software and computing are essential ingredients for the success of any HEP experiment. As most experiments have similar basic prerequisites (Unix shell, Python, C++, …) we want to join our efforts and create one introductory software training curriculum that serves HEP newcomers the software skills needed as they enter the field, and in parallel, instill best practices for writing software.

The curriculum is comprised of a set of standardized modules, so that students can focus on what is most relevant to them.

The modules

Basics

The UNIX Shell
A guide through the basics of the file systems and the shell.
Start learning now! Contribute!
Version controlling with git
Track code changes, undo mistakes, collaborate. This module is a must.
Start learning now! Contribute!
Programming with python
Get started with an incredibly popular programming language.
Start learning now! Contribute!
SSH
Introduction to the Secure Shell (SSH)
Status: Early development
Start learning now! Contribute!
Machine learning
Get behind the buzzword and teach machines to work for you intelligently!
Start learning now! Watch the videos! Contribute!
Matplotlib for HEP
Make science prettier with beautiful plots!
Status: Beta testing
Start learning now! Contribute!
ROOT
The most famous data analysis framework used in HEP.
Start learning now! Contribute!

Software Development and Deployment

Version controlling with git
Track code changes, undo mistakes, collaborate. This module is a must.
Start learning now! Contribute!
Advanced git
Learn to work with branches and more with this interactive webpage.
Start learning now! Contribute!
Docker
Introduction to the docker container image system.
Start learning now! Watch the videos! Contribute!
Singularity
Introduction to containerization with Singularity/Apptainer.
Status: Beta testing
Start learning now! Watch the videos! Contribute!
Unit testing
Unit testing in python.
Status: Beta testing
Start learning now! Contribute!
Level up your python
Advanced bits of python (testing, debugging, logging, and more)
Start learning now! Contribute!

C++ corner

HEP C++ Course
A full introduction to C++ based on a series of slides and exercises.
Start learning now! Watch the videos! Contribute!
Build systems: cmake
Building code is hard. CMake makes it easier.
Start learning now! Contribute!

Machine learning and other analysis tools

Machine learning
Get behind the buzzword and teach machines to work for you intelligently!
Start learning now! Watch the videos! Contribute!
Machine learning on GPU
Speed up your machine learning using massive parallelization!
Start learning now! Watch the videos! Contribute!

HEP specific tools

Scikit-HEP
A collection of packages for particle physics analyses in Python.
Start learning now! Contribute!
ROOT
The most famous data analysis framework used in HEP.
Start learning now! Contribute!
UnROOT
Open ROOT files in Julia!
Status: Beta testing
Start learning now! Contribute!
Reproducible analyses with REANA
Run containerised data analysis pipelines on remote compute clouds.
Status: Beta testing
Start learning now! Contribute!

Analysis preservation

Version controlling with git
Track code changes, undo mistakes, collaborate. This module is a must.
Start learning now! Contribute!
Docker
Introduction to the docker container image system.
Start learning now! Watch the videos! Contribute!
Singularity
Introduction to containerization with Singularity/Apptainer.
Status: Beta testing
Start learning now! Watch the videos! Contribute!
Unit testing
Unit testing in python.
Status: Beta testing
Start learning now! Contribute!
Reproducible analyses with REANA
Run containerised data analysis pipelines on remote compute clouds.
Status: Beta testing
Start learning now! Contribute!

Miscellaneous

A simple analysis
A simple analysis using CMS open data.
Start learning now! Watch the videos! Contribute!

Planned, in early development, or archived

uproot
Reading and writing ROOT files without having to install ROOT.
Status: Beta testing
Start learning now! Contribute!
Distributed file systems and grid computing
Status: Early development
Parallel programming
Status: Early development
alpaka
alpaka is a header-only C++ abstraction library for accelerator development.
Status: Early development
Contribute!
Workflows & reproducibility
E.g. yadage and reana
Status: Early development
Documentation
sphinx, doxygen, etc.
Status: Early development
Event generation and MC
pythia, sherpa, madgraph, etc.
Status: Early development

Further reads