Refactoring

This commit is contained in:
2023-03-20 22:50:56 +04:00
parent 8958bf5204
commit 74231472c9
32 changed files with 240 additions and 201 deletions

View File

@@ -1,106 +0,0 @@
%all distances in m
close all
clear
clc
format compact
% These calculations are based on Ashkin's article "Forces of a single-beam
% gradient laser trap on a dielectric sphere in the ray optics regime".
% There are transverse forces only
n1 = 1.33; % index of refraction of the immersion medium
n2 = 1.6; % index of refraction of the fused silica at wavelength 523 nm
n = n2/n1; % n2/n1
c0 = 3e8; % speed of light
NA = 1.25; % numerical aperture
th_max = asin(NA/n1); % maximum angle of incidence
f = 100.0e-3; % objective lens focus or WD
r_max = f*tan(th_max); % radius of a Gaussian beam (1:1 with input aperture condition)
Rsp = 1.0e-6; % sphere radius
P = 20.0e-3; % power of the laser
thr = @(th) asin(n1/n2*sin(th)); % refraction angle
%reflectivity
R = @(th,psi) (tan(th-thr(th)).^2./tan(th+thr(th)).^2).*cos(psi).^2+...
(sin(th-thr(th)).^2./sin(th+thr(th)).^2).*sin(psi).^2;
%transparency
T = @(th,psi) 1-R(th,psi);
% Factors
Qs = @(th, psi) 1 + R(th, psi) .* cos(2*th) - T(th,psi).^2 .* (cos(2*th -...
2*thr(th)) + R(th, psi) .* cos(2*th)) ./ (1 + R(th,psi).^2 +...
2*R(th,psi) .* cos(2*thr(th)));
Qg = @(th, psi) R(th, psi) .* sin(2*th) - T(th,psi).^2 .* (sin(2*th -...
2*thr(th)) + R(th, psi) .* sin(2*th)) ./ (1 + R(th,psi).^2 +...
2*R(th,psi) .* cos(2*thr(th)));
% Average factors (circular polarization
Qs_avg = @(th) 0.5*(Qs(th, 0) + Qs(th, pi/2));
Qg_avg = @(th) 0.5*(Qg(th, 0) + Qg(th, pi/2));
% Angles
phi = @(r) atan(r/f);
gamma = @(beta,r) acos(cos(pi/2-phi(r)).*cos(beta));
thi = @(beta,r,y) asin(y/Rsp.*sin(gamma(beta,r)));
Qgy = @(beta,r,y) Qg_avg(thi(beta,r,y)).*cos(phi(r));
Qsy = @(beta,r,y) Qs_avg(thi(beta,r,y)).*sin(gamma(beta,r));
% Intensity profile
a = 1.0;
w0 = a*r_max;
%I = @(r) P/(pi*r_max^2); % uniform distribution
A = (1-exp(-2*r_max.^2/w0^2));
I0 = 2*P/(pi*w0^2)*A;
I = @(r) I0*exp(-2*r.^2/w0^2); % Gaussian TEM00 beam
%P0 = exp(0.5)*w0*0.0025/4.81;
%A = 2*pi*integral(@(r) r.*besselj(0,2.405/w0*r).^2,0,r_max)/P0;
%I = @(r) 1/(A*P0)*besselj(0,2.405/w0*r).^2; % Bessel beam
% Intensity profile graphics
rho = linspace(-r_max, r_max, 500);
figure
plot(rho, I(rho)/max(I(rho)),'k')
grid
xlabel('r, m')
ylabel('I(r)')
sdf('my')
% Integration
Qres_g = @(y) 1/(pi*r_max^2)*integral2(@(beta,r) r.*I(r).*...
iscomplex(Qgy(beta,r,y)),0,2*pi,0,r_max,...
'Method','iterated','AbsTol',1e-6,'RelTol',1e-6);
Qres_s = @(y) 1/(pi*r_max^2)*integral2(@(beta,r) r.*I(r).*...
iscomplex(Qsy(beta,r,y)),0,2*pi,0,r_max,...
'Method','iterated','AbsTol',1e-6,'RelTol',1e-6);
% Calulation
N = 150;
y = linspace(-2*Rsp,2*Rsp,N);
Transverse_g = zeros(1,N);
Transverse_s = zeros(1,N);
for ii = 1:N
Transverse_g(ii) = abs(Qres_g(y(ii)));
Transverse_s(ii) = Qres_s(y(ii));
end
Transverse = abs(Transverse_g) + Transverse_s;
F0 = n1*P/c0; % net force;
%Graphics
figure
plot(y,F0*Transverse_g,'r--',y,F0*Transverse_s,'b-.',y,F0*Transverse,'k')
legend('F_{g}','F_{s}','F_{t}')
xlabel('r, ì')
ylabel('F, Í')
grid
sdf('my')

View File

@@ -1,21 +0,0 @@
load_constants
function angle = th_r(theta)
angle = asin(n1 / n2 * sin(theta));
end
function angle = ph_i(r)
angle = atan(r / f);
end
function angle = th_i(r, z)
angle = asin(z / Rsp .* sin(ph_i(r)));
end
function angle = gamma(beta, r)
angle = acos(cos(pi/2 - ph_i(r)) .* cos(beta));
end
function angle = theta(beta, r, y)
angle = asin(y / Rsp .* sin(gamma(beta, r)));
end

70
Matlab/axial.asv Normal file
View File

@@ -0,0 +1,70 @@
clear
close all
clc
format compact
% These calculations are based on Ashkin's article "Forces of a single-beam
% gradient laser trap on a dielectric sphere in the ray optics regime".
% There are axial forces only
load_constants
% Factors plots
theta = linspace(0, pi/2, 500);
figure
plot(theta, qs_factor(theta, pi/4, n1, n2), ...
theta, -qg_factor(theta, pi/4, n1, n2), ...
theta, qmag_factor(theta, pi/4, n1, n2))
grid
xlabel('$\theta$, $^{\circ}$', 'Interpreter', 'latex')
ylabel('Q')
% Intensity profile plots
rho = linspace(-r_max, r_max, 500);
figure
I = gauss(rho, r_max, w0, P);
I0 = max(I);
plot(rho, I/I0, 'k')
grid
xlabel('r, м')
ylabel('I(r)')
% Integration
G0 = gauss_peak(r_max, w0, P);
Qres_g = @(z) 2 * pi * G0 * integral2(@(beta, r) r .* gauss(r, r_max, w0, P) .* ...
iscomplex(qg_z_factor(r, z, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method', 'iterated', 'AbsTol', 1e-6, 'RelTol', 1e-6);
Qres_s = @(z) 1 / (pi * r_max^2) * integral2(@(beta, r) r .* gauss(r, r_max, w0, P) .* ...
iscomplex(qs_z_factor(r, z, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method', 'iterated', 'AbsTol', 1e-6, 'RelTol', 1e-6);
% Calulation
N = 200;
z = linspace(-2*Rsp, 2*Rsp, N);
Axial_g = zeros(1, N);
Axial_s = zeros(1, N);
wb = waitbar(0, 'Calculating...');
for ii = 1:N
Axial_g(ii) = Qres_g(z(ii));
Axial_s(ii) = Qres_s(z(ii));
waitbar(ii / N, wb, 'Calculating...');
end
close(wb);
Axial_g = fliplr(Axial_g);
Axial_s = fliplr(Axial_s);
Axial = Axial_g + Axial_s;
z = -fliplr(z);
% Plots
figure
plot(z, F0 * Axial_g, 'b-.', ...
z, F0 * Axial_s, 'r--', ...
z, F0 * Axial, 'k')
legend('F_{g}','F_{s}','F_{t}')
xlabel('r, м')
ylabel('F, Н')
grid

View File

@@ -8,13 +8,14 @@ format compact
% There are axial forces only % There are axial forces only
load_constants load_constants
import factors.*
% Factors plots % Factors plots
theta = linspace(0, pi/2, 500); theta = linspace(0, pi/2, 500);
figure figure
plot(theta, Qs(theta, pi/4), theta, -Qg(theta, pi/4), theta, Qmag(theta, pi/4)) plot(theta, qs_factor(theta, pi/4, n1, n2), ...
theta, -qg_factor(theta, pi/4, n1, n2), ...
theta, qmag_factor(theta, pi/4, n1, n2))
grid grid
xlabel('$\theta$, $^{\circ}$', 'Interpreter', 'latex') xlabel('$\theta$, $^{\circ}$', 'Interpreter', 'latex')
ylabel('Q') ylabel('Q')
@@ -22,26 +23,28 @@ ylabel('Q')
% Intensity profile plots % Intensity profile plots
rho = linspace(-r_max, r_max, 500); rho = linspace(-r_max, r_max, 500);
figure figure
plot(rho, I(rho)/max(I(rho)),'k') I = gauss(rho, r_max, w0);
I0 = max(I);
plot(rho, I/I0, 'k')
grid grid
xlabel('r, м') xlabel('r, м')
ylabel('I(r)') ylabel('I(r)')
% Integration % Integration
G0 = 2/(A*pi^2*r_max^2*w0^2); G0 = gauss_peak(r_max, w0);
Qres_g = @(z) G0 * integral2(@(beta,r) r.*I(r).*... Qres_g = @(z) 2 * pi * G0 * integral2(@(beta, r) r .* gauss(r, r_max, w0) .* ...
iscomplex(Qgz(r,z)),0,2*pi,0,r_max,... iscomplex(qg_z_factor(r, z, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method','iterated','AbsTol',1e-6,'RelTol',1e-6); 'Method', 'iterated', 'AbsTol', 1e-12, 'RelTol', 1e-6);
Qres_s = @(z) G0 * integral2(@(beta,r) r.*I(r).*... Qres_s = @(z) 2 * pi * G0 * integral2(@(beta, r) r .* gauss(r, r_max, w0) .* ...
iscomplex(Qsz(r,z)),0,2*pi,0,r_max,... iscomplex(qs_z_factor(r, z, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method','iterated','AbsTol',1e-6,'RelTol',1e-6); 'Method', 'iterated', 'AbsTol', 1e-12, 'RelTol', 1e-6);
% Calulation % Calulation
N = 200; N = 200;
z = linspace(-2*Rsp,2*Rsp,N); z = linspace(-2*Rsp, 2*Rsp, N);
Axial_g = zeros(1,N); Axial_g = zeros(1, N);
Axial_s = zeros(1,N); Axial_s = zeros(1, N);
wb = waitbar(0, 'Calculating...'); wb = waitbar(0, 'Calculating...');
for ii = 1:N for ii = 1:N
@@ -58,7 +61,9 @@ z = -fliplr(z);
% Plots % Plots
figure figure
plot(z,F0*Axial_g,'b-.',z,F0*Axial_s,'r--',z,F0*Axial,'k') plot(z, F0 * Axial_g, 'b-.', ...
z, F0 * Axial_s, 'r--', ...
z, F0 * Axial, 'k')
legend('F_{g}','F_{s}','F_{t}') legend('F_{g}','F_{s}','F_{t}')
xlabel('r, м') xlabel('r, м')
ylabel('F, Н') ylabel('F, Н')

4
Matlab/bessel.m Normal file
View File

@@ -0,0 +1,4 @@
% Bessel beam
function b = bessel(r, r_max, w0, P)
b = bessel_peak(r_max, w0, P) * besselj(0, 2.405/w0 * r).^2;
end

3
Matlab/bessel_peak.m Normal file
View File

@@ -0,0 +1,3 @@
function peak = bessel_peak(r_max, w0, P)
peak = P * 4.81 / (w0 * r_max * exp(0.5)) * 2 * pi * integral(@(r) r.*besselj(0, 2.405/w0 * r).^2, 0, r_max) / P0;
end

View File

@@ -1,9 +0,0 @@
function reflectivity = R(th, psi)
reflectivity = (tan(th - th_r(th)).^2 ./ tan(th + th_r(th)).^2) .* ...
cos(psi).^2 + ...
(sin(th - th_r(th)).^2 ./ sin(th + th_r(th)).^2) .* sin(psi).^2;
end
function transparency = T(th, psi)
transparency = 1 - R(th, psi);
end

View File

@@ -1,37 +0,0 @@
% Factors
function factor = Qs(th, psi)
factor = 1 + R(th, psi) .* cos(2*th) - T(th, psi).^2.*...
(cos(2*th - 2*th_r(th)) + R(th, psi) .* cos(2*th)) ./ ...
(1 + R(th, psi).^2 + 2*R(th, psi) .* cos(2*th_r(th)));
end
function factor = Qg(th, psi)
factor = R(th, psi) .* sin(2*th) - T(th, psi).^2 .* ...
(sin(2*th - 2*th_r(th)) + R(th, psi) .* sin(2*th)) ./ ...
(1 + R(th, psi).^2 + 2*R(th, psi) .* cos(2*th_r(th)));
end
function factor = Qmag(th, psi)
factor = sqrt(Qs(th, psi).^2 + Qg(th, psi).^2);
end
% Average factors
function factor = Qs_avg(th)
factor = 0.5*(Qs(th, 0) + Qs(th, pi/2));
end
function factor = Qg_avg(th)
factor = 0.5*(Qg(th, 0) + Qg(th, pi/2));
end
function factor = Qmag_avg(th)
factor = sqrt(Qs_avg(th).^2 + Qg_avg(th).^2);
end
function factor = Qgz(r, z)
factor = -Qg_avg(th_i(r, z)) .* sin(ph_i(r));
end
function factor = Qsz(r, z)
factor = Qs_avg(th_i(r, z)) .* cos(ph_i(r));
end

3
Matlab/gamma_angle.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = gamma_angle(beta, r, focus)
angle = acos(cos(pi/2 - phi_i(r, focus)) .* cos(beta));
end

4
Matlab/gauss.m Normal file
View File

@@ -0,0 +1,4 @@
% Gaussian TEM00 beam
function g = gauss(r, r_max, w0)
g = exp(-2 * r.^2 / w0^2);
end

4
Matlab/gauss_peak.m Normal file
View File

@@ -0,0 +1,4 @@
function peak = gauss_peak(r_max, w0)
A = (1 - exp(-2*r_max.^2 / w0^2));
peak = 2*A / (pi * w0^2);
end

View File

@@ -1,7 +0,0 @@
load_constants
function g = gauss(r)
A = (1-exp(-2*r_max.^2 / w0^2));
I0 = 2*P / (pi * w0^2 * A);
g = I0 * exp(-2 * r.^2 / w0^2); % Gaussian TEM00 beam
end

View File

@@ -1,13 +1,14 @@
Rsp = 1.0e-6; % sphere radius [m] Rsp = 1.03e-6; % sphere radius [m]
n1 = 1.33; % index of refraction of the immersion medium n1 = 1.3337; % index of refraction of the immersion medium
n2 = 1.6; % index of refraction of the fused silica at wavelength 523 nm n2 = 1.4607; % index of refraction of the fused silica at wavelength 523 nm
n = n2/n1; % relative refraction index n = n2/n1; % relative refraction index
c0 = 3e8; % speed of light [m/s] c0 = 3e8; % speed of light [m/s]
NA = 1.25; % numerical apertur e NA = 1.25; % numerical apertur e
f = 100.0e-3; % objective lens focus or WD [m] f = 2.0e-3; % objective lens focus or WD [m]
P = 20.0e-3; % power of the laser [W] P = 51.7e-3; % power of the laser [W]
F0 = n1*P/c0; % resulting force [N] F0 = n1*P/c0; % resulting force [N]
th_max = asin(NA/n1); % maximum incidence angle th_max = asin(NA/n1); % maximum incidence angle
ratio = 1.0; % the ratio of the beam radius to the aperture radius
r_max = f * tan(th_max); % radius of a Gaussian beam (1:1 with input aperture condition) r_max = f * tan(th_max); % radius of a Gaussian beam (1:1 with input aperture condition)
aperture = 1.0; w0 = ratio * r_max; % Gaussian beam waist radius [m]
w0 = aperture * r_max; % Gaussian beam waist radius [m]

3
Matlab/phi_i.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = phi_i(r, focus)
angle = atan(r / focus);
end

3
Matlab/qg_avg_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qg_avg_factor(th, n1, n2)
factor = 0.5*(qg_factor(th, 0, n1, n2) + qg_factor(th, pi/2, n1, n2));
end

8
Matlab/qg_factor.m Normal file
View File

@@ -0,0 +1,8 @@
function factor = qg_factor(th, psi, n1, n2)
R = reflectivity(th, psi, n1, n2);
T = transmittance(th, psi, n1, n2);
theta_refl = th_r(th, n1, n2);
factor = R .* sin(2*th) - T.^2 .* ...
(sin(2*th - 2*theta_refl) + R .* sin(2*th)) ./ ...
(1 + R.^2 + 2*R .* cos(2*theta_refl));
end

3
Matlab/qg_y_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qg_y_factor(beta, r, y, n1, n2, Rsp, focus)
factor = qg_avg_factor(th_i_y(beta, r, y, Rsp, focus), n1, n2).*sin(gamma_angle(beta, r, focus));
end

3
Matlab/qg_z_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qg_z_factor(r, z, n1, n2, Rsp, focus)
factor = -qg_avg_factor(th_i_z(r, z, Rsp, focus), n1, n2) .* sin(phi_i(r, focus));
end

3
Matlab/qmag_avg_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qmag_avg_factor(th, n1, n2)
factor = sqrt(qs_avg_factor(th, n1, n2).^2 + qg_avg_factor(th, n1, n2).^2);
end

3
Matlab/qmag_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qmag_factor(th, psi, n1, n2)
factor = sqrt(qs_factor(th, psi, n1, n2).^2 + qg_factor(th, psi, n1, n2).^2);
end

3
Matlab/qs_avg_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qs_avg_factor(th, n1, n2)
factor = 0.5*(qs_factor(th, 0, n1, n2) + qs_factor(th, pi/2, n1, n2));
end

9
Matlab/qs_factor.m Normal file
View File

@@ -0,0 +1,9 @@
function factor = qs_factor(th, psi, n1, n2)
R = reflectivity(th, psi, n1, n2);
T = transmittance(th, psi, n1, n2);
theta_refl = th_r(th, n1, n2);
factor = 1 + R .* cos(2*th) - T.^2.*...
(cos(2*th - 2*theta_refl) + R .* cos(2*th)) ./ ...
(1 + R.^2 + 2*R .* cos(2*theta_refl));
end

3
Matlab/qs_y_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qs_y_factor(beta, r, y, n1, n2, Rsp, focus)
factor = qs_avg_factor(th_i_y(beta, r, y, Rsp, focus), n1, n2).*cos(phi_i(r, focus));
end

3
Matlab/qs_z_factor.m Normal file
View File

@@ -0,0 +1,3 @@
function factor = qs_z_factor(r, z, n1, n2, Rsp, focus)
factor = qs_avg_factor(th_i_z(r, z, Rsp, focus), n1, n2) .* cos(phi_i(r, focus));
end

6
Matlab/reflectivity.m Normal file
View File

@@ -0,0 +1,6 @@
function R = reflectivity(th, psi, n1, n2)
theta_refl = th_r(th, n1, n2);
R = (tan(th - theta_refl).^2 ./ tan(th + theta_refl).^2) .* ...
cos(psi).^2 + ...
(sin(th - theta_refl).^2 ./ sin(th + theta_refl).^2) .* sin(psi).^2;
end

3
Matlab/th_i_y.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = th_i_y(beta, r, y, Rsp, focus)
angle = asin(y / Rsp .* sin(gamma_angle(beta, r, focus)));
end

3
Matlab/th_i_z.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = th_i_z(r, z, Rsp, focus)
angle = asin(z / Rsp .* sin(phi_i(r, focus)));
end

3
Matlab/th_r.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = th_r(theta, n1, n2)
angle = asin(n1 / n2 * sin(theta));
end

3
Matlab/theta_angle.m Normal file
View File

@@ -0,0 +1,3 @@
function angle = theta_angle(beta, r, y, Rsp, focus)
angle = asin(y / Rsp .* sin(gamma(beta, r, focus)));
end

3
Matlab/transmittance.m Normal file
View File

@@ -0,0 +1,3 @@
function T = transmittance(th, psi, n1, n2)
T = 1 - reflectivity(th, psi, n1, n2);
end

56
Matlab/transverse.m Normal file
View File

@@ -0,0 +1,56 @@
%all distances in m
close all
clear
clc
format compact
% These calculations are based on Ashkin's article "Forces of a single-beam
% gradient laser trap on a dielectric sphere in the ray optics regime".
% There are transverse forces only
load_constants
% Intensity profile graphics
rho = linspace(-r_max, r_max, 500);
I = gauss(rho, r_max, w0);
I0 = max(I);
figure
plot(rho, I/I0, 'k')
grid
xlabel('r, m')
ylabel('I(r)')
% Integration
Qres_g = @(y) integral2(@(beta, r) r .* gauss(r, r_max, w0) .* ...
iscomplex(qg_y_factor(beta, r, y, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method', 'iterated', 'AbsTol', 1e-6, 'RelTol', 1e-6);
Qres_s = @(y) integral2(@(beta, r) r .* gauss(r, r_max, w0) .* ...
iscomplex(qs_y_factor(beta, r, y, n1, n2, Rsp, f)), 0, 2*pi, 0, r_max, ...
'Method', 'iterated', 'AbsTol', 1e-6, 'RelTol', 1e-6);
% Calulation
N = 150;
y = linspace(-2*Rsp, 2*Rsp, N);
Transverse_g = zeros(1, N);
Transverse_s = zeros(1, N);
wb = waitbar(0, 'Calculating...');
for ii = 1:N
Transverse_g(ii) = abs(Qres_g(y(ii)));
Transverse_s(ii) = Qres_s(y(ii));
waitbar(ii / N, wb, 'Calculating...');
end
close(wb);
Transverse = abs(Transverse_g) + Transverse_s;
%Graphics
figure
plot(y, F0 * Transverse_g,'r--', ...
y, F0 * Transverse_s, 'b-.', ...
y, F0*Transverse, 'k')
legend('F_{g}','F_{s}','F_{t}')
xlabel('r, ì')
ylabel('F, Í')
grid

4
Matlab/uniform.m Normal file
View File

@@ -0,0 +1,4 @@
% Beam with uniform distribution
function u = uniform(r, w0, r_max, P)
u = P / (pi*r_max^2);
end