Manipulating Muon Events in AMANDA-II

Introduction

The AMANDA detector is buried under the ice at the South Pole where it searches for neutrinos. Neutrinos passing through the Earth interact and produce muons. AMANDA sees the light from these muons using 680 photo-multiplier tubes encased in glass spheres (called optical modules or OMs). Each OM records the time and strength of the hit. Based on this it is possible to reconstruct the track the muon. In order to understand the AMANDA detector better, the detector response is modeled by Monte Carlo simulations. This project's main goal is to manipulate the output of these simulations.
This algoritm can read in events from an input file, filter these events if desired and calculate the probability each event could have been produced by a neutrino. Main.cc has been included which demonstrates all the functionality of this project. Also a sample input file (sample2.txt) has been provided.


Download the source code here

Read my response to comments here




Outline

Classes:

Class Hit: This stores the information that we get from each OM. Each hit has an omnumber, time, amplitude, tot (a measure of the duration of each hit). Since hit is generally only found as a member of event, there are functions that allow the reading (but not the changing) of the parts of hit. Hit also has a function to read in a hit from an input file. The assumed format is:
H OM# amp time tot
Each hit line must start with "H".

Class Track: This stores information about a muon track. Each track has an x, y and z position, a time, an energy, a zenith angle and an azimuth angle. Since track is generally only found as a member of event, there are functions that allow the reading (but not the changing) of the parts of track. Track also has a function to read in a hit from an input file. The assumed format is:
T x y z energy zenith time azimuth
Each track line must start with "T".

Class Event: Each event consists of one track object, a weight and any number of hit objects. The hits are stored using the standard c++ list container. Also variables number of hits and number of hit OMs are stored here. Hits can be added to event either one by one or all at once from an input file. The assumed format for an input file is:
S
T x y z energy zenith time azimuth
H OM# amp time tot
H OM# amp time tot
H OM# amp time tot
E
With S marking the start of an event and E marking the end. It's possible to read and/or remove individual hits from the hit list.

Class Filter: This class filters Events. It can either remove hits from an event (using RemoveHit) or remove an entire event (using RemoveEvent, which sets the weight of the event to zero, but does not delete the event). This functions in this class could have been in Event, but for clarity they are in their own class.

Class Geometry: This class calculates a number of geometrical functions based on an event's track position. It stores variables for the length of the Monte Carlo generation volume (cylindrical in shape), the depth of the AMANDA detector and the radius of the Earth.

Class Probability: This class calculates the probability that a neutrino could have produced the muon track in each event and weights each event with that probability. Probability is derived from Geometry because it uses many of Geometry's functions. It also stores Avogadro's number and the density of ice. The functions are given by:
Probability a neutrino will survive to the edge of the generation volume (function Survival in Class Probability):

Psurv = exp (-(σnc + σcc) * NA * (ρice * Dice)


Probability the neutrino will turn into a muon inside the generation volume (function Change in Probability Class):

Pgen = fcc* (1 - exp(-(σnc + σcc) * NA * (ρice * dice)))


Proper distribution of muon vertices inside the generation volume (function Distribute in Probability Class):

F(x) = [(σnccc) * NA * ρ * exp(-(σnc + σcc) * NA * ρ * x)] / [P(x) * (1 - exp(-d * (σnc + σcc) * NA * ρ))]


where
σnc is the neutral current cross section for νN interaction s, approximated by 2.31 x 10-36 * (Eν0.363)
σcc is the charged current cross section for νN interaction s, approximated by 5.53 x 10-36 * (Eν0.363)
NA is Avogadro's number
ρ is the density of ice (0.93) relative to water
fcc = σcc / (σcc + σnc) which picks out the charged-current component of Pgen
d is the length of the generation volume contained inside the Earth (for non-horizontal theta, part of the generation volume will stick out of the Earth, so effective generation volume length < full generation length)
x is the distance from the end of the generation volume to the muon vertex
The total probability is given by (function Total in Probability Class):

Ptot = Psurv * Pgen * F(x)


Main.cc: This demonstrates some of the functionality of the code. It shows how to create a hit, track and event, add or subract hits from an event, filter an event, calculate the probability of this track came from a neutrino and how to read hits, tracks and events from a text file.