Added a switch to change between 2D and 3D MOT cases to allow for this code to be expanded and generalized in the future.
This commit is contained in:
parent
ba621f3c32
commit
1a8975c218
@ -1,24 +1,28 @@
|
||||
function ret = calculateCaptureVelocity(this, PositionVector, VelocityVector)
|
||||
|
||||
switch this.SimulationMode
|
||||
case "2D"
|
||||
VelocityUnitVector = VelocityVector./norm(VelocityVector);
|
||||
UpperLimit = 500;
|
||||
LowerLimit = 0;
|
||||
|
||||
VelocityVector = VelocityVector./norm(VelocityVector);
|
||||
UpperLimit = 500;
|
||||
LowerLimit = 0;
|
||||
this.AtomicBeamCollision = false;
|
||||
for Index = 1:500
|
||||
InitialVelocity = (0.5 * (UpperLimit + LowerLimit)) * VelocityUnitVector;
|
||||
ParticleDynamicalQuantities = this.solver(PositionVector, InitialVelocity);
|
||||
FinalPositionVector = ParticleDynamicalQuantities(end, 1:3);
|
||||
if rssq(FinalPositionVector) <= this.OvenDistance
|
||||
LowerLimit = 0.5 * (UpperLimit + LowerLimit);
|
||||
else
|
||||
UpperLimit = 0.5 * (UpperLimit + LowerLimit);
|
||||
end
|
||||
|
||||
for Index = 1:500
|
||||
InitialVelocity = 0.5 * (UpperLimit + LowerLimit) * VelocityVector;
|
||||
[~, FinalDynamicalQuantities] = this.solver(PositionVector, InitialVelocity);
|
||||
FinalPositionVector = FinalDynamicalQuantities(1:3);
|
||||
if rssq(FinalPositionVector) <= this.OvenDistance
|
||||
LowerLimit = 0.5 * (UpperLimit + LowerLimit);
|
||||
else
|
||||
UpperLimit = 0.5 * (UpperLimit + LowerLimit);
|
||||
end
|
||||
|
||||
if UpperLimit - LowerLimit < 1
|
||||
ret = InitialVelocity;
|
||||
break;
|
||||
end
|
||||
if UpperLimit - LowerLimit < 1
|
||||
ret = (0.5 * (UpperLimit + LowerLimit)) * VelocityUnitVector;
|
||||
break;
|
||||
end
|
||||
end
|
||||
case "3D"
|
||||
% Development In progress
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user