This project contains analysis code to place a new limit on the Electric Dipole Moment (EDM) of the muon using the g-2 tracking detectors
The g−2 experiment at Fermilab, near Chicago, is closing on a tantalising sign of New Physics (e.g. new particles or forces) - deviation between an experimentally measured and theoretically predicted value of the muon magnetic moment. There is also an additional measurement that will be made using the trackers: setting a new limit on the electric dipole moment (EDM) of the muon, which, if found to be non-zero, would provide a new source of charge-parity (CP) violation - a promising key in understanding the matter-antimatter asymmetry of the universe! EDM signal manifests itself as an oscillation in the observed vertical angle of the tracks.
The EDM signal in simulation can be extracted from the fitted amplitude of the oscillation of the average (binned/profiled) vertical angle of the tracks in the detector.
The oscillation in the number of the observed tracks in the detector can be plotted and fitted
The difference between the observation and the fit (i.e. residuals) can also be computed, to extract even more information (i.e. missing fit parameters) from the above plot using the Fast Fourier Transform (FFT) analysis (FFT converts residuals from time to frequency domain):
- This work led to a publication (arXiv:1909.12900): https://arxiv.org/pdf/1909.12900.pdf, where EDM analysis strategy with data is discussed.
- The detectors were previously calibrated in https://github.com/glukicov/alignTrack
- The analysis guide using Python and ROOT is here: https://cdcvs.fnal.gov/redmine/projects/gm2analyses/wiki/Python-based_EDM_analysis
- Example of reading tracker ROOT Trees into a pandas data frame is here: https://github.com/glukicov/EDMTracking/blob/master/JupyterNB/PYReadTree.ipynb (quick demo on how to load, make cuts, plot data, and fit from ROOT Trees)
Blinding/
- Blinding libraries to hide a signal in data or simulationCMacros/
- C-based analysis macrosCommonUtils/
- Commonly used Python functionsJupyterNB/
- Jupyter notebooks for prototypingUKGrid/
- Bash scripts to run data processing on the griddocs/
- Manuals/images/etc.
A. Add changes to your local files from this commit: https://github.com/glukicov/EDMTracking/commit/8c1ecff08ceb905aa449d6e18a858b5ec73980b7
B. Re-compile (in the Blinders.cc directroy):
g++ -I rlib/include -I /usr/local/opt/openssl/include Blinders.cc -std=c++11 -Wall -Wextra -Werror -pedantic-errors -fpic -c
C. Now re-create a shared object library that can be used with both ROOT and Python:
g++ -shared -o libBlinders.so Blinders.o rlib/src/Random.o -L/usr/local/opt/openssl/lib -lssl -lcrypto
D. Now construct your blinder with 4 input arguments as follows (e.g.):
edmBlinded = Blinders(FitType.Omega_a, blinding_string, boxWidth, gausWidth)
E. Test that EDM-blinding works with
python3 testBlindingPy3.py
The official blinding guide is here: https://cdcvs.fnal.gov/redmine/projects/gm2analyses/wiki/Library_installation
Example of EDM Tracking art (C++) code is here https://cdcvs.fnal.gov/redmine/projects/gm2analyses/wiki/Tracker_EDM_analysis