Activity 2: Hadron Production


Today you will explore the physics processes that produce and modify hadrons in neutrino beamlines, at least according to our simulations. Today we'll be concentrating on the LBNF optimized engineered neutrino beam design, and focusing on the "ancestor" branch of the dk2nu class, which gives a list of ancestor particles that lead to each simulated neutrino. You will look at the number and type of interactions are typically involved in making a neutrino. Then you will quantify the most important classes of interactions that should be measured (or better measured) in order to reduce neutrino flux uncertainties. Good luck!


  1. Prepare a work area
    • Create a new working area for todays activity
    • Copy the tarball of LBNF optimized engineered beam flux files to your working area and unpack it (see yesterday's instructions for unpacking tarballs).
    • Download the c++ root template you'll be working with today, the makefile , and a tarball of xml files .
    • In order to pick up libraries that you'll need today, download this environment setup script and source it:
  2. Open one of the files in the tarball and familiarize yourself the various elements in the ancestor branch.
  3. Run compiled root to plot the number of ancestor interactions per neutrino
  5. View the image file that it makes:
    display Interactions_fardet_all.png  &
    This is a plot of the number of interactions (not including the final hadron decay) that are in a neutrino's ancestor chain versus the neutrino's energy. For neutrinos between 6 and 14 GeV, there are about 1.6 interactions per neutrino. It drops slighly around 4.5 GeV and then increases at low energy, so that neutrinos below 1 GeV have about 2.3 interactions in the ancestor list on average. Now you will explore these interactions more.
  6. Modify study to make divide the plot above into the category according the identity of the incident particle (protons/antiprotons, charged pions, charged kaons, neutral kaons, neutrons, lambdas, other). Check out Interactions_fardet_overlay.png, that gets you started by breaking out interactions with incident protons. A list of PDG particle codes is available in the printed material provided for the course. Make the plot on both a linear and log y-axis scale.

    As you are modifying code inside the loop over interactions for this and the following question, please note that ancestor[i].pdg will give you the pdg code of the child particle in the interaction, ancestor[i+1].pdg will give you the parent pdg, ancestor[i].imat will tell you the material on which the parent interacted to create the child. Note in particular that the [i] is the correct index for imat (not [i-1]).
  7. Question 7: Provide the linear and log scale plots of number of interactions versus neutrino energy, divided by incident particle.
  8. Bonus Question 1: What is the "Other" category mostly made of?
  9. Next modify study to make divide the plot according to what type of material the interaction happened on. I suggest the following categorizations: Carbon, Aluminum, Titanium, Concrete, Air, Steel/Iron, and 'Other'. Make use of the 'imat' branch. Make both linear and log versions.
  10. Question 8: Provide the linear and log scale plots of number of interactions versus neutrino energy, divided by target material.
  11. Make another and this time, divide it by the following categories: pC->piX (charged pions only), pC->KX (charged kaons and klongs/kshorts), nC->piX (charged pions only), pC->nucleonX, other nucleon incident, meson incident, and others.
  12. Question 9: Provide the (linear scale only) plot of number of interactions versus neutrino energy, divided interaction type.
  13. Make another, but this time for the first four categories, only include interactions that are covered by hadron production data. There is a "ancestor_is_covered" function in your c++ template that will help you identify these. You will want something like this in your code:
    bool is_covered = false;
    is_covered = ancestor_is_covered(xF,pT,pZ,dk2nu->ancestor[i].pdg,dk2nu->ancestor[i-1].pdg,inc_P);
    Nucleon incident interactions that no longer satisfy your first four categories should now go in the "other nucleon incident" category. The final two categories will be the same as before.
  14. Question 10: Provide the plot of number of interactions versus neutrino energy, divided by interaction type, where interaction type has been modified according to current hadron production data.
  15. Question 11: What are the key differences between the plots produced for Questions 9 and 10?
  16. The uncertainties that we assume in our DUNE flux uncertainties correspond roughly to these:
    • pC->piX covered by data: 5%
    • nC->piX covered by data: 5%
    • pC->kX covered by data: 15%
    • pC->pX and pC->nX covered by data: 3%
    • other nucleon incident: 15%
    • meson incident: 20%
    • other: 20%
    Scale each of the histograms you made in the last step by the fractions above, then add them all in quadrature to get the total hadron production uncertainty (excluding absorption uncertainties that will be discussed in the lectures).
  17. Question 12: Provide a plot of the approximate hadron production uncertainty.
  18. Question 13: If you were designing a hadron production experiment, what three types measurements would you aim to make, in order to improve DUNE's flux uncertainties?
  19. Bonus question 2: What are the largest classes of interactions in the "other nucleon incident" category above?