CERN, CMS Experiment

Summer 2017


CERN essentially consists of one main particle accelerator LHC and 4 detectors around it, called CMS,Atlas,Alice, and LHCb, situated at different areas around the LHC. I worked on the Compact Muon Solenoid (CMS) experiment.

CERN's overall goal is to detect particles at higher and higher energy levels, such as quarks, muons and neutrinos, which are produced by colliding accelerated particles in the Large Hadron Collider (LHC). Each detector's goal is to study the particle collisions from different aspects and with different technologies.

However, to be able to get to these ever-increasing levels of energies, the technology of both the LHC and the four main detectors must be regularly upgraded.

As it so happened, the CMS detector, with which my lab was affiliated, was not only upgrading its detectors, but actually adding a different type of technology entirely.

These new detectors, Gas Electron Multipliers (GEMs), which are produced in Korea, India, and Florida, are then tested, in 8 quality control checks (QCs 1-8), at the CMS lab, before being put in production.


My role was being involved in the last quality control to verify the detector’s hardware was functioning appropriately, by having python code run through its triggers to see if it correctly detected small electrical test collisions, and then improving the software used for these tests.

This was done by adding new functionalities to the codebase, such as increasing the step size of the displayed graphs, and changing basic configurations of the detectors, which would allow them behave in different ways under different electrical conditions.


Software development:

Implemented requested features on an existing central code repository, relating to GEM detector’s hardware, using Python scripts, and tested them on a Cosmic Stand (Quality Control Stand 8) while maintaining detailed e-logs of results.

  • Improved the codebase's by adding an optional --stepSize flag to one of the CLI scripts so that physicists could input their custom values on the GEM detector's latency scan for testing.
  • Refined the codebase's efficency by adding a python dictionary to a script containing pre-defined values for the GEM detector's electrical configuration, as an alternative to the default values.
  • Published real-time gas levels of a mixer by writing C++ script on Visual Studio to collect and send data to a shared server via an API, by employing Cern's DIP Server documentation. The published data corresponded to the the latest gas levels of a gas mixer using a .txt file generated from FlowPlot, FlowView and FlowDEE2 softwares.

Data analysis:

  • Installed and learnt Cern’s ROOT C++/Python CLI framework to understand tree and n-tuple data structures, and used them to plot, fit and cut particles physics events such as collisions and trajectories on histograms.
  • Analysed data returned from running latency scans to verify if implemented features were returning expected values.


  • Used a LabVIEW interface connected to a pico-ammeter and radiation stand to get and plot various data relating to irradiated GEM detector foils of various thicknesses in order to observe and understand relationship between X-Ray energies, electrical current, foil properties and the subsequently varying amount of particles detected.

Hardware updates:

  • Replaced a PC's corrupt HDD with a new one, and installed Scientific Linux Cern 6 on it using an ethernet Preboot Execution Environment (PXE) by registering the PC's OS on the CERN IT portal as Linux.

There were several challenges during this internship, mostly related to technicalities and a lack of understanding of the global context (which I've summarised above). Specifically:

  • Steep learning curve
  • Working on undocumented code due to ongoing project
  • Technically dense tasks relating to harware and electronics