function [LoadingRate, StandardError, ConfidenceInterval] = jackknifeErrorEstimation(this, ovenObj, NumberOfLoadedAtoms) n = this.NumberOfAtoms; Autocorrelation = zeros(1, n); for i = 1:n-1 FirstTerm = 0; SecondTerm = 0; for j = 1:n-i FirstTerm = FirstTerm + NumberOfLoadedAtoms(j) / j; SecondTerm = SecondTerm + (NumberOfLoadedAtoms(i+j)) / (i+j); Autocorrelation(i) = Autocorrelation(i) + ((NumberOfLoadedAtoms(j) / j) .*(NumberOfLoadedAtoms(i+j) / (i+j))); end Autocorrelation(i) = (1/(n-i)) * (Autocorrelation(i) - ((1/(n-i)) * FirstTerm * SecondTerm)); end if Autocorrelation(1)~=0 Autocorrelation = Autocorrelation./Autocorrelation(1); x = linspace(1,n,n); [FitParams,~] = fit(x',Autocorrelation',"exp(-x/tau)", 'Startpoint', 100); CorrelationFactor = FitParams.tau; SampleLength = 2*CorrelationFactor+1; NumberOfJackknifeSamples = floor(n/SampleLength); CaptureRatioInEachSample = zeros(1,NumberOfJackknifeSamples); SampleNumberLimit = min(NumberOfJackknifeSamples-1,5); for i=1:NumberOfJackknifeSamples-SampleNumberLimit CaptureRatioInEachSample(i) = NumberOfLoadedAtoms(n-ceil((i-1)*SampleLength))/(n-ceil((i-1)*SampleLength)); end MeanCaptureRatio = sum(CaptureRatioInEachSample) / (NumberOfJackknifeSamples-SampleNumberLimit); LoadingRate = MeanCaptureRatio * ovenObj.ReducedFlux; Variance=0; for i=1:NumberOfJackknifeSamples-SampleNumberLimit Variance=Variance+(CaptureRatioInEachSample(i) - MeanCaptureRatio)^2; end StandardError = sqrt(Variance/(NumberOfJackknifeSamples-SampleNumberLimit)); ConfidenceInterval = LoadingRate + 1.96*StandardError; % 95% Confidence Intervals else LoadingRate = nan; StandardError = nan; ConfidenceInterval = [nan nan]; end end