Citizen science: Exploring a neutrino mass signal at CERN’s LHC

in StemSociallast year
We're already halfway the year 2022 and my schedule for the past weeks have been so crazy. Early this year, I applied for an online course regarding Agent-Based Modeling, which started a few weeks ago (which I'd love to talk about in the future since it requires us to design our own model). I didn't realize that it would run simultaneously with my other commitments. For 2022, I decided to be intentional in learning new skills and exploring different research interests —that's also the reason why I joined Citizen Science on Hive. The learning process has been a mix of short and long strides, but it's great! I have been learning a lot from @lemouth and the progress reports of the other participants.

The set of tasks for this episode of Citizen science is very enjoyable to work on, especially now that particle physicists all over the world are excited as LHC Run 3 started a few weeks ago. And also, one of our tasks involves reproducing a plot from the reference journal of this project.

Just a recap on what we have done so far:
  1. Installation of the tools [MG5aMC] necessary for particle physics simulation
  2. Using the MG5aMC to simulate top quark production at CERN's LHC
  3. Installation and use of MadAnalysis 5 for detector simulation and event reconstruction
  4. Investigating top quark production at CERN's LHC using MadAnalysis 5

Our current tasks is somewhat a realization that we're nearing to the focus of this project, which tackles the testing of neutrino mass models. A great article about neutrino masses can be read here, surely you can get an understanding of how neutrino masses are investigated beyond the Standard model.

On the second episode of the Citizen Science project, we have used the software MG5aMC for the simulations. And again, it will be our tool for simulating a signal of a new phenomenon. Simulated collisions produced in MG5aMC comprise the signal and the background. Our goal is to to design an appropriate analysis, or a selection strategy, in which various event properties are calculated. Then afterwards, use these calculations to determine whether a given event is kept or rejected. But for this episode, our focus will be on the signal only. So let's begin!

Installing a particle physics model in MG5aMC

To simulate the signal in MG5aMC, we first need to add the model of physics considered in its model database. The UFO model is documented in this scientific paper which I have added to my reading list already. The addition of this model is done by:

cd MG5_aMC_v2_9_9/models
curl > model.tgz
tar xf model.tgz
rm -f model.tgz

This will require you to go to your working directory of MG5aMC. After entering those commands in your terminal, you will be able to see the folder SM_HeavyN_NLO in the models sub-directory of MG5_aMC. Before I proceed, this report would focus on the steps of the simulation tasks of up to the reproducing the plot of the signal rate dependence on the neutrino mass.

Preparing the simulation of a heavy neutrino signal

To start, we start MG5aMC using the command ./bin/mg5_aMC. I have set my terminal to run on Python 3 as default, so I needed to convert the UFO model using the first line of the code block below.

MG5_aMC>set auto_convert_model T
MG5_aMC>import model SM_HeavyN_NLO
MG5_aMC>define p = g u c d s u~ c~ d~ s~
MG5_aMC>define j = p
MG5_aMC>generate p p > mu+ mu+ j j QED=4 QCD=0 $$ w+ w- / n2 n3
MG5_aMC>add process p p > mu- mu- j j QED=4 QCD=0 $$ w+ w- / n2 n3
MG5_aMC>output test_signal

The rest of the code in this block tells MG5aMC of the process we are interested of generating simulations of, which is a proton-proton collision. This results to the Feynman diagrams associated with the process. The different Feynman diagrams show the particle interactions of the sub processes. Each sub processes are unique with its corresponding initial and final state. The different Feynman diagrams which accounts the quarks that make up the protons that collided in the simulation.

Screen Shot 2022-07-16 at 12.16.29 AM.png

Calculating the signal production rate

Following the parameters needed to be changed in the param_card.dat and run_card.dat in the reference blog , I was able to obtain a cross section of 0.012 pb. This took around 6-7 minutes using my computer, although the terminal shows around 21 minutes since I had to redo the parameters I have input, I missed one and got an error.

Screen Shot 2022-07-16 at 12.47.26 AM.png

Signal rate dependence on the neutrino mass

Here's the last part of this progress report, which was exciting for me since for my initial simulation, I have considered 10 points for the mass parameter. This results to 10 runs of the previous task. I had a waiting time of around 47 minutes for this task. The image below shows the result of my scan, the masses I have considered are 10 point interval between the range [50,10000] using numpy linspace: mass = np.linspace(50,10000,10) . I did this since my initial goal is to see if I can reproduce the plot.

Screen Shot 2022-07-16 at 12.59.50 AM.png

Since I plan to add more data points to achieve a smooth curve and a good representation as well, I have made a Python script to plot the results from this .txt file using matplotlib. I had to make trial and error with setting the delimeter as I try to read this .txt file into a dataframe. Since the unit of the rate in the reference is in fb, I added a multiplier 1000 to the resulting cross section which is in pb.

Screen Shot 2022-07-16 at 1.04.52 AM.png

Here's the plot of the results I got, comparing it to the reference paper, I think that the points follow on the curve. I plan to redo this part of the task and consider more mass data points. For now, I used scatter plot since I only considered 10 data points for the masses. The runs I have done only total to 20mb in size, this includes the 10 data points for the masses and the run for calculating the signal production rate.


That's it for now. I'll continue on the simulations of the other tasks when I'd get to sit in front of my computer again after this weekend.

Thanks a lot for this partial report. You look to be on the right tracks to finalise the episode, and I am really happy. I don't have much to write, but let me point out two things.

1] The plot you finally obtained, at the end, looks OK to me. As a simple suggestion, you could maybe reduce the maximum value of the X axis.

Each sub processes are unique with its corresponding initial and final state. The different Feynman diagrams which accounts the quarks that make up the protons that collided in the simulation.

2] The above answer to the assignment is the correct one. @eniolw: this should answer the question you raised in your own report :)


Noted :)

Sure, will do that when I run the simulation again. 😀


The rewards earned on this comment will go directly to the people( @lindoro, @lemouth ) sharing the post on Twitter as long as they are registered with @poshtoken. Sign up at

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

You may also include @stemsocial as a beneficiary of the rewards of this post to get a stronger support. 


Thank you for your support! 🤩


You have received a 1UP from @luizeba!

The @oneup-cartel will soon upvote you with:
@stem-curator, @vyb-curator, @pob-curator, @neoxag-curator
And they will bring !PIZZA 🍕.

Learn more about our delegation service to earn daily rewards. Join the Cartel on Discord.

Dear @travelingmercies, sorry to jump in a bit off topic but may I ask you to support the HiveBuzz proposal?
It recently lost its funding, is struggling to get back above the HBD stabilizer proposal, and is in dire need of help.
You can support it on Peakd, Ecency, or using HiveSigner.

On behalf of The HiveBuzz team, thank you!

Done. Great work as always HiveBuzz team! 👏🏻

Thank you for your support @travelingmercies, really appreciate it! ❤️