Written to perform a complete analysis of Majorana Demonstrator DS0-6A low-energy data. Current analysis was performed with the LATv2 tag.
Base: ROOT, MGDO, and GAT.
Python Packages: Python (2.7 or 3.x), SciPy ecosystem (NumPy, SciPy, and Matplotlib), pyROOT, tinydb, and PyWavelets.
Optional Python packages: Pandas, Seaborn, pymc3, theano, PyTables
lat-jobs.py
: This is a script that wraps all the codes and submits all of the codes in order onto PDSF/CORI/etc. Also can run some diagnostics.lat-checks.py
: This script runs basic file integrity checks after every stage in LAT up to the end oflat.py
. This script verifies that no events are lost during the LAT production process.skim_mjd_data.cc
: Standard MJD code that creates skim files, except we use the option to include additional parameters as well as lower the thresholdwave-skim.cc
: Matches skim data events with built data events to pull waveforms, applies basic data cleaning cuts ("!(C==1&&isLNFill1) && !(C==2&&isLNFill2) && C!=0 && P!=0 && D!=0 && isGood && !muVeto && mH==1 && gain==0 && trapENFCal > 0.7”
). It also writes the applied cut into the ROOT file.splitTree
andwriteCuts
: These are functions inlat-jobs.py
. The functionsplitTree
takes the skim files with waveforms and splits them into manageable chunks (~50 MB each). The functionwriteCuts
writes the applied cut (inwave-skim.cc
) into each split file; this is necessary as the ROOT automatically splitting does not write the cut into each split file.lat.py
: Evaluates additional PSA parameters, saves into skim files.lat-settings.py
: Scans the headers of all runs for changes in the HV settings and on-board trapezoid threshold settings. These settings determine which run ranges we need to evaluate thresholds.auto-thresh.cc
: Standard MJD code that evaluates thresholds. This code is already run during auto-production per run, however, we run it again according to each subDS. This can be run in parallel withlat.py
.ds_livetime.cc
: Standard MJD code that evaluates exposure and livetime. However, we use an additional option to output granular data (run + channel + exposure of all data in the 0νββ analysis) into a ROOT file for additional analysis. This allows us to re-evaluate the exposure as necessary with any combination of run+channel selection. This can be run in parallel withlat.py
.lat2.py
: Tunes and applies PSA cuts (must be run afterlat.py
). Applies and saves threshold cut to skim files. Loads and saves all m2s238 calibration data, evaluates proper cut value for the slowness + high frequency cut for each detector. Generates new skim files with the PSA cuts applied.lat3.py
: Calculates rate of each ch+subDS in order to perform outlier removal (burst cut). Makes skim files with addition of burst cut applied. Must be run afterlat2.py
andds_livetime.cc
.lat-expo.py
: Evaluates the livetime and exposure of each ch+subDS with any combination of cuts. Evaluates efficiency and saves into files. Makes final skim files withtOffset
cut applied. Makes movies of waveforms after all cuts are applied.dsi.py
: Helper module that contains properties of the data sets, including background, calibration, special runs, and detector infowaveLibs.py
: Helper module that contains a variety of convenience functions (basic waveform processing, histogramming, various commonly used functions, simple filter, etc)./data/runs*.json
: run lists for bkg runs (matchDataSetInfo.cc
), calibration, and special runsspec-fit.py
: Final spectrum fits using RooFit
There are a lot of half-baked ideas, some useful, in LAT/sandbox
.
Clint Wiseman and Brian Zhu, with input from the Majorana Collaboration.
700 commits strong!