2021-06-29 15:44:28 +02:00
|
|
|
function ret = calculateTotalAcceleration(this, PositionVector, VelocityVector)
|
|
|
|
|
|
|
|
WaveVectorEndPoint = zeros(2,3);
|
|
|
|
WaveVectorEndPoint(1,:) = [1,0,1];
|
|
|
|
WaveVectorEndPoint(1,:) = WaveVectorEndPoint(1,1:3)/norm(WaveVectorEndPoint(1,:));
|
|
|
|
WaveVectorEndPoint(2,:) = [-1,0,1];
|
|
|
|
WaveVectorEndPoint(2,:) = WaveVectorEndPoint(2,1:3)/norm(WaveVectorEndPoint(2,:));
|
|
|
|
|
|
|
|
Sigma = [1,-1];
|
|
|
|
Origin = [0,0,0];
|
|
|
|
|
|
|
|
% Calculate the Saturation Intensity at the specified point along its Gaussian Profile
|
2021-07-11 21:14:31 +02:00
|
|
|
CoolingBeamLocalSaturationIntensity = [this.calculateLocalSaturationIntensity(0.25 * this.CoolingBeamSaturationParameter, PositionVector, Origin, WaveVectorEndPoint(1,:), this.CoolingBeamRadius, this.CoolingBeamWaist), ...
|
|
|
|
this.calculateLocalSaturationIntensity(0.25 * this.CoolingBeamSaturationParameter, PositionVector, Origin, WaveVectorEndPoint(2,:), this.CoolingBeamRadius, this.CoolingBeamWaist)];
|
2021-06-29 15:44:28 +02:00
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
SidebandLocalSaturationIntensity = [this.calculateLocalSaturationIntensity(0.25 * this.SidebandSaturationParameter, PositionVector, Origin, WaveVectorEndPoint(1,:), this.SidebandBeamRadius, this.SidebandBeamWaist), ...
|
|
|
|
this.calculateLocalSaturationIntensity(0.25 * this.SidebandSaturationParameter, PositionVector, Origin, WaveVectorEndPoint(2,:), this.SidebandBeamRadius, this.SidebandBeamWaist)];
|
2021-06-29 15:44:28 +02:00
|
|
|
|
|
|
|
TotalAcceleration = zeros(1,3);
|
|
|
|
|
|
|
|
Delta_Cooling = [0,0,0,0];
|
|
|
|
Delta_Sideband = [0,0,0,0];
|
|
|
|
|
|
|
|
for i = 1:2
|
|
|
|
|
|
|
|
LocalMagneticField = this.magneticFieldForMOT(PositionVector);
|
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
B = sign(dot(LocalMagneticField(1:3), WaveVectorEndPoint(i,:))) * LocalMagneticField(4);
|
2021-06-29 15:44:28 +02:00
|
|
|
|
2021-07-11 14:45:18 +02:00
|
|
|
ZeemanShift = this.LandegFactor * this.MagneticSubLevel * (Helper.PhysicsConstants.BohrMagneton / Helper.PhysicsConstants.PlanckConstantReduced) * B;
|
2021-06-29 15:44:28 +02:00
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
DopplerShift = dot(WaveVectorEndPoint(i,:), VelocityVector) * this.CoolingBeamWaveNumber;
|
2021-06-29 15:44:28 +02:00
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
Delta_Cooling(i*2-1) = this.CoolingBeamDetuning + DopplerShift + (ZeemanShift * Sigma(i));
|
|
|
|
Delta_Cooling(i*2) = this.CoolingBeamDetuning - DopplerShift - (ZeemanShift * Sigma(i));
|
2021-06-29 15:44:28 +02:00
|
|
|
|
|
|
|
if this.Sideband
|
2021-07-11 21:14:31 +02:00
|
|
|
Delta_Sideband(i*2-1) = this.SidebandDetuning + DopplerShift + (ZeemanShift * Sigma(i));
|
|
|
|
Delta_Sideband(i*2) = this.SidebandDetuning - DopplerShift - (ZeemanShift * Sigma(i));
|
2021-06-29 15:44:28 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
SaturationParameter = [0,0,0,0,0,0,0,0];
|
|
|
|
|
|
|
|
for i = 1:2
|
2021-07-14 20:05:40 +02:00
|
|
|
SaturationParameter(2*i-1) = CoolingBeamLocalSaturationIntensity(i) /(1 + 4 * (Delta_Cooling(2*i-1)/this.CoolingBeamLinewidth)^2);
|
|
|
|
SaturationParameter(2*i) = CoolingBeamLocalSaturationIntensity(i) /(1 + 4 * (Delta_Cooling(2*i) /this.CoolingBeamLinewidth)^2);
|
2021-06-29 15:44:28 +02:00
|
|
|
if this.Sideband
|
2021-07-14 20:05:40 +02:00
|
|
|
SaturationParameter(2*i-1+4) = SidebandLocalSaturationIntensity(i) /(1 + 4 * (Delta_Sideband(2*i-1)/this.CoolingBeamLinewidth)^2);
|
|
|
|
SaturationParameter(2*i+4) = SidebandLocalSaturationIntensity(i) /(1 + 4 * (Delta_Sideband(2*i)/this.CoolingBeamLinewidth)^2);
|
2021-06-29 15:44:28 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
TotalSaturationParameter = sum(SaturationParameter);
|
|
|
|
|
2021-06-29 15:44:28 +02:00
|
|
|
for i = 1:2
|
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
a_sat = (Helper.PhysicsConstants.PlanckConstantReduced * this.CoolingBeamWaveNumber * WaveVectorEndPoint(i,1:3)/Helper.PhysicsConstants.Dy164Mass).*(this.CoolingBeamLinewidth * 0.5);
|
|
|
|
a_1 = a_sat .* (SaturationParameter(2*i-1)/(1 + TotalSaturationParameter));
|
|
|
|
a_2 = a_sat .* (SaturationParameter(2*i) /(1 + TotalSaturationParameter));
|
2021-06-29 15:44:28 +02:00
|
|
|
|
|
|
|
if this.SpontaneousEmission
|
2021-07-11 21:14:31 +02:00
|
|
|
a_scattering = this.accelerationDueToSpontaneousEmissionProcess(SaturationParameter(2*i-1), TotalSaturationParameter, this.CoolingBeamLinewidth, this.CoolingBeamWaveNumber) + ...
|
|
|
|
this.accelerationDueToSpontaneousEmissionProcess(SaturationParameter(2*i), TotalSaturationParameter, this.CoolingBeamLinewidth, this.CoolingBeamWaveNumber);
|
2021-06-29 15:44:28 +02:00
|
|
|
else
|
|
|
|
a_scattering = [0,0,0];
|
|
|
|
end
|
|
|
|
|
|
|
|
if this.Sideband
|
2021-07-11 21:14:31 +02:00
|
|
|
a_1 = a_1 + a_sat .* (SaturationParameter(2*i-1+4)/(1 + TotalSaturationParameter));
|
|
|
|
a_2 = a_2 + a_sat .* (SaturationParameter(2*i+4) /(1 + TotalSaturationParameter));
|
2021-06-29 15:44:28 +02:00
|
|
|
|
|
|
|
if this.SpontaneousEmission
|
|
|
|
a_scattering = a_scattering + ...
|
2021-07-11 21:14:31 +02:00
|
|
|
this.accelerationDueToSpontaneousEmissionProcess(SaturationParameter(2*i-1+4), TotalSaturationParameter, this.CoolingBeamLinewidth, this.CoolingBeamWaveNumber) + ...
|
|
|
|
this.accelerationDueToSpontaneousEmissionProcess(SaturationParameter(2*i+4), TotalSaturationParameter, this.CoolingBeamLinewidth, this.CoolingBeamWaveNumber);
|
2021-06-29 15:44:28 +02:00
|
|
|
else
|
|
|
|
a_scattering = [0,0,0];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
TotalAcceleration = TotalAcceleration + (a_2 - a_1) + a_scattering;
|
|
|
|
end
|
|
|
|
|
2021-07-11 21:14:31 +02:00
|
|
|
if this.PushBeam
|
2021-06-29 15:44:28 +02:00
|
|
|
TotalAcceleration = TotalAcceleration + this.accelerationDueToPushBeam(PositionVector, VelocityVector);
|
|
|
|
end
|
|
|
|
|
|
|
|
ret = TotalAcceleration(1:3);
|
|
|
|
|
|
|
|
end
|