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]; SaturationIntensity = this.calculateLocalSaturationIntensity(this.PushBeamSaturationParameter, PositionVector, Origin, WaveVectorEndPoint, this.PushBeamRadius, this.PushBeamWaist); DopplerShift = (VelocityVector * WaveVectorEndPoint(1:3)') * this.PushBeamWaveNumber; Detuning = this.PushBeamDetuning - DopplerShift; s_push = SaturationIntensity/(1 + SaturationIntensity + (4 * (Detuning./this.PushBeamLinewidth).^2)); a_push = (Helper.PhysicsConstants.PlanckConstantReduced * this.PushBeamWaveNumber * WaveVectorEndPoint(1:3)/Helper.PhysicsConstants.Dy164Mass).*(this.PushBeamLinewidth * 0.5) .* (s_push/(1+s_push)); if this.SpontaneousEmission a_scatter = this.accelerationDueToSpontaneousEmissionProcess(s_push, s_push, Detuning, this.PushBeamLinewidth, this.PushBeamWaveNumber); else a_scatter = [0,0,0]; end a_total = a_push + a_scatter; ret = a_total(1:3); end