Finding the mass of the Z boson though a pure Z -> ee sample

The goal of this project is to reconstruct the invariant mass of oppositely charged electron pairs from simulated samples of Z decays. The mass of the Z boson is given by M = √s=√(p4+p4)^2. Here the p4 is the 4-momenta of the electrons with the highest and the second highest transverse momentum. We call these electrons the leading and sub-leading electrons. To find these electrons, their pT, energy and at last their reconstructed invariant mass I used TTrees/N-tuples and other analysis tools. Atlas data are presented to users in a format called xAOD. These data must be processed further into n-tuples containing relevant information for a specific analysis. This project was selected because it fits well with my masters project, both are looking at decays of different boson, for my masters it will be the Higgs-boson, and in phys291 it is the Z boson.

Table of contents


The assignment was done using Cern's Lxplus facility, not UIB, as this will make it easier to continue with my masters. The first thing that was needed was a workplace to make xAOD analysis in the Athena framework. To do this I worked through Here was everything needed to construct a good work area with a build directory, a source directory and a run directory. The source directory is where all the files the athena framework needs to work. The build directory is where the files that do the compiling. And lastly the run directory is where the programs actually gets run, like athena and the plot macro for the histograms.

The next step is to create the algorithm Athena will do. I called this algorithm MyxAODAnalysis and created the files MyxAODAnalysis.h and MyxAODAnalysis.cxx. MyxAODAnalysis.h is the headerfile, and MyxAODAnalysis.cxx is a source file with a initialize(), which is where the very first part of the algorithm goes, an execute(), here is the part that is called once per event in my xAOD sample, and finally a finalize(), which is only called once at the very end of the algorithm. At first, I followed the tutorial, only changing the Jets over to electrons. I made changes to MyzAODAnalysis to be able to make Tree branches for the electrons η, φ, pT and E for the different electrons. I used the plotting macro Plot.C to plot the branches and got:
Eta Phi
These are plots for the different angels η and φ. The y-axis is the number of electron candidates per bin and the x-axis tells what the value of the bins. The φ plot spans the entire 2π range and has a uniform distribution. This makes sense there is no preferred direction in space. The Eta plot isn't as uniform. This is because the Atlas detector has higher electron identificaation around η.
Energi Transverse momentum

For the pT and E plots looks like expected in the 30GeV to 60GeV range. This is around half of the expected Z boson mass of 91.19GeV. The pT is particularly sharp. However, both of the plots have many electrons with very low energy. These low energy electrons are probably false electron detections and I will look more at them after this assignment. Up until this point the Atlas tutorial was very helpful, but to get a reconstructed Z-boson mass I needed some other plots.

To get the Z-boson mass one can take the absolute value of the 4-momenta of the electrons with the highest and second highest transverse momenta. We need a program that looks at only 2 electrons per event, if there is fewer there is not a sub-leading electron and if there is more than two we have to find the leading and sub-leading electrons. To see how many electrons there are per event I made a plot of the size of each event. First I added another branch to the Tree by adding another term in the MyxAODAnalysis.h, then filled it in MyxAODAnalysis.cxx, like the tutorial shows how to do with the angles and added the necessary lines to the Plot.C macro.
Number of electrons
One can see, on the size plot above, that there is a clear peak for 2 electrons, but there are events with both less than two electrons and more than two electrons. I used an if statement to ignore the events with less than 2 electrons, this worked nicely. To get plots for the leading and sub-leading electrons I first added 2 more branches to the Tree inside MyxAODAnalysis.h and then made some changes to MyxAODAnalysis.cxx to be able to fill those branches. The first thing was a for loop that went over all the electrons in the event and found the electron with the highest pT. Then another loop over the event which found the electron with highest moment that wasn't the leading electron. Again, filled in the branches the same way as explained by the tutorial and added leading and sub-leading to the Plot.C macro. Here is the pT plots for these electrons.
Transverse momentum for leading electron Transverse momentum for sub-leading electron
These plots show us that the leading and sub-leading electrons have a clear peak at 45GeV, or a bit less for the sub-leading electrons. This is exactly where we expect these peaks to be. The leading electrons have on average a higher momentum than the sub-leading. There is also a sharp drop before 60GeV for the leading electrons and before 50GeV for the sub-leading electrons. The problem of very low energy electrons still exists, especially for the sub-leading electrons. This problem can give some weird peaks for the Z-boson mass. To make sure that the low energy electrons in one of the plot don't match up with high energy electrons from the other plot and to make sure that the leading electron really do have the highest transverse momentum, a scatterplot can be used. To get the scatterplot I added a 2D histogram to the Plot.C macro where the x axis is the leading and the y axis is the sub-leading.
scatterplot for the transverse momentum
Since there is not a single point over the y=x axis we can see that the leading electrons are the electrons with highest momentum. Another thing one can see is that there is a yellow spot at around 45Gev on both axis, that some of the low energy sub-leading electrons are match up with high energy leading electrons and that there are very few electrons outside the 50GeV mark. This is good, as it tells us that most events are not low energy. One can also see that there is a yellow mark close to the origo and a light blue colour near the x axis, so the low energy events are still there.


As mentioned earlier, to get the Z-boson mass one can take the absolute value of the 4-momenta of the leading and sub-leading electrons, one then get the formula √(2E1*E2*(1-cos(θ)). To do this one can use root. First, we add a new branch to the Tree, a branch that will be filled by the invariant mass of the events. Since we already found the leading and sub-leading electrons for every event, and not just their pT, we can use them over again here. To get the Z-boson mass we set it to be equal to "(electron_leading->p4() + electron_sub_leading->p4()).M();". This automatically gives out the √s, which is the reconstructed Z-boson mass. I then filled in the branch and added the necessary part to the plot macro.
The Z-boson mass
The plot has a very clear peak at 91±1MeV and since the Z-boson mass is 91.19GeV then this result is very good. There is another bump on the plot around 20GeV. This bump is there because of the low energy electrons we saw earlier. We will look more at this with the master group and figure out what this is.


By looking at the pT of the electrons in an event we were able to find the leading and sub-leading electrons. Then by adding the 4-momenta of these electrons we got the reconstructed Z-boson mass for this event. By plotting this Z-boson masses we can see that the Z-boson mass is 91±1GeV, this lines up nicely with the Z-boson mass of 91.19GeV. There is however a problem with the low energy electrons we saw in all the momentum and energy plots. These electrons give a bump around 20GeV in the Z mass plot and we will continue to look at them in the master group.
Phys291 was the first time I ever used C++ or root. The Atlas tutorial made it easy to understand how to make and use Trees/Ntuples and other useful types of analysis tools, writing algorithms and use xAOD files. It was easy to make the different plots and even more complicated computations like finding the Z mass was easy with the different tools available in root.

General HTML: and
Table of content: