function ret = accelerationDueToPushBeam(this, PositionVector, VelocityVector) % is the distance between the chamber center and the cross point of push beam and z-axis (along the gravity) WaveVectorEndPoint = [0, 1, this.DistanceBetweenPushBeamAnd3DMOTCenter/this.PushBeamDistance]; WaveVectorEndPoint = WaveVectorEndPoint./norm(WaveVectorEndPoint); Origin=[0,0,0]; PushBeamObj = this.Beams{cellfun(@(x) strcmpi(x.Alias, 'Push'), this.Beams)}; PushBeamDetuning = PushBeamObj.Detuning; PushBeamRadius = PushBeamObj.Radius; PushBeamWaist = PushBeamObj.Waist; PushBeamWaveNumber = PushBeamObj.WaveNumber; PushBeamLinewidth = PushBeamObj.Linewidth; PushBeamSaturationParameter = 0.25 * PushBeamObj.SaturationParameter; SaturationIntensity = this.calculateLocalSaturationIntensity(PushBeamSaturationParameter, PositionVector, Origin, WaveVectorEndPoint, PushBeamRadius, PushBeamWaist); DopplerShift = dot(WaveVectorEndPoint(:), VelocityVector) * PushBeamWaveNumber; Detuning = PushBeamDetuning - DopplerShift; s_push = SaturationIntensity/(1 + SaturationIntensity + (4 * (Detuning./PushBeamLinewidth).^2)); a_sat = (Helper.PhysicsConstants.PlanckConstantReduced * PushBeamWaveNumber * WaveVectorEndPoint(:)/Helper.PhysicsConstants.Dy164Mass).*(PushBeamLinewidth * 0.5); a_push = a_sat .* (s_push/(1+s_push)); if this.SpontaneousEmission a_scatter = this.accelerationDueToSpontaneousEmissionProcess(s_push, s_push, PushBeamLinewidth, PushBeamWaveNumber); else a_scatter = [0,0,0]; end a_total = a_push + a_scatter; ret = a_total(1:3); end