Calculations/MOT Capture Process Simulation/@MOTSimulator/angularDistributionFunction.m

38 lines
1.3 KiB
Matlab

function ret = angularDistributionFunction(this, theta)
%This function calculate the angle distribution of atoms coming out
%from a single channel.
KnudsenNumber = this.MeanFreePath/this.NozzleLength;
alpha=0.5 - (3*this.Beta^2)^-1 * ...
((1 - (2*this.Beta^3) + ((2*this.Beta^2) - 1) * sqrt(1+this.Beta^2)) / ...
(sqrt(1+this.Beta^2) - (this.Beta^2 * asinh((this.Beta^2)^-1))));
eta0 = alpha;
eta1 = 1 - alpha;
delta = (eta0./sqrt(2*KnudsenNumber*(eta1-eta0)))./sqrt(cos(theta));
F = 2/sqrt(pi)* (1-eta1)/eta0 * delta.* exp( -(delta*eta1/eta0).^2 );
q = this.Beta^-1 * tan(theta);
R = acos(q) - (q .* sqrt(1-q.^2));
if abs(q) >= 1
t = linspace(0,1,10000);
S = sum(sqrt(1-t.^2).* ( erf(delta.*(1 + (t.*(eta1-eta0)./(q.*eta0)) ))-erf(delta)))*(t(2)-t(1));
if S == 0 || isnan(S)
ret = eta0*cos(theta);
else
ret = eta0*cos(theta)+ 2/sqrt(pi)*eta0*cos(theta) * (exp(delta.^2)/delta) * S;
end
else
t = linspace(0,q,10000);
S = sum(sqrt(1-t.^2).* ( erf(delta.*(1 + (t.*(eta1-eta0)./(q.*eta0)) ))-erf(delta)))*(t(2)-t(1));
if isnan(S)
S=0;
end
ret = 2/sqrt(pi)*eta0*cos(theta)*(exp(delta.^2)/delta) * (R./2*(erf(delta*eta1/eta0)-erf(delta)+F)+S)+eta0*cos(theta);
end
end