Open dfujim opened 4 years ago
Those sound good to me!
One thought is that we could widen the range of n for the single exponential test, say to 106-109. The lower end might be excessive, but I think this will help show (and possibly exagerate) the convergence of the ILT result to the true value (e.g., in a plot of p(T1) vs. T1). Plus, n < 107 is trivial to simulate!
I think whether the lower stat biexponential test is necessary will probably be clearer once we have the results from the other exponential/biexponential tests.
Ok I have started running data generation on muesli. Gotta get that extra 4 processors. I installed tmux to do this more easily, if you wanted to check in or run extra jobs. If you haven't used it before, tmux allows you to disconnect from the machine and have your jobs keep running. Here's a nice cheatsheet.
With 8 processors this should go fairly quickly.
EDIT: I decided that more data is better than less data. It should take about 5 hours. I also added data collection on the amplitude, just out of curiosity.
So single exponentials are handled pretty well it seems. The data set varying the stats finished, and even with α=0 we get very good results. This, despite the fact that the L-curve predicts we should use α=4x103 or something.
Note, that for the below plots I changed T1 to be 2.5 so make sure there wasn't anything special about the value 1. It seems like there isn't... despite the surprisingly good results. The set on muesli is generated with T1=1, but it's boring because the ILT solver finds a delta function near this value every time. The main result is a small shift. Even with very low stats, if you run the sim more than once, you will often get decent results (red line denotes actual T1).
Varying α basically just changes with width, with only a small shift in the mean of the distribution:
So I wrote a new method for peak finding: see the discriminator. With this we can determine the height, width, and peak location as well as how many peaks exist; so long as they are well separated. We now see that the α = 103 version finds fewer peaks than α = 0, at the cost of a much larger width. None of the plotted quantities seem to depend greatly on n. Perhaps the biexponential analysis will show something more interesting.
Version used to generated plot here
So it turns out I messed up the biexp calculations. Actually most of the file have the same issue: T1 got included in the equations as 1/T1 but remains labelled as T1. In the other cases this is not a problem since T1=1. It matters in the biexp case though since T1 is varying. I fixed this in f368bc357fc0f4a6846d2f1bd45142d6e6fb8c3f and e51a8c38562946fb0528a7bdb8e65ad93b3e8656 and re-generated the data for the biexponential data, but not the others.
Fitting the amplitude variation with single exp fits shows a very clean relationship:
Settings (where the amplitude varies):
A_beta: -0.3333333333333333
T1 (s): 1
amp: 0.1
beam pulse (s): 4.0
histogram n_bins: 1600
histogram t_max: 16.0
histogram t_min: 0.0
lifetime (s): 1.2096
n: 600000000.0
output: amp0p1.root
polarization function f(x): 0.1 * exp(-x)
EDIT: so if we see initial asymmetry of 0.15, this is full amplitude for polarization of 0.7.
Some thoughts:
I agree, the determination of αopt is not very robust. My conclusion at the moment is that the value of α doesn't seem to matter too much in the case of the single exponential. It just makes everything broader, but erroneous peaks still exist even with larger α. My guess is that it won't matter much for biexp either. Perhaps it will for the strexp since it is supposed to be continuous.
It seems in the past 5 years that most SLR runs on the NMR side are on the order of 2x108 counts. Here are the averages and standard deviations in units of 108 counts and for the NMR side only:
(for generating script see here)
However there's a decent amount of skew to the distributions.
Noting that I cut off the histograms at 109 counts for readability (2018 was a strange year for high stats).
I then propose the following tests to show the effectiveness of the transform, with appropriate α:
Is there anything else that we need to show? I had originally thought of a triexponential, but this seems superfluous when you have the biexponential. We could repeat the biexponential test with 2x108 counts, which would represent a more standard runtime (~ 30 mins). We are detecting about 105 counts/s.
EDIT: Originally I suggested we run the biexp at 6e9 counts, I meant 6e8.