1function [grad] = scaleGrad(grad, scale, system)
2% scaleGrad just scales the gradint with the scalar
3% if the optional parameter 'system' is provided the result is schecked
4% against the system limits (amolityde and slew rate)
6 if isfield(grad,'id')
7 error('attempting to scale readily registered object! please register objects after calling this function or deregister the argument by calling rmfield(...,''id'')');
8 end
10 if strcmp(grad.type,'trap')
11 grad.amplitude=grad.amplitude*scale;
12 grad.area=grad.area*scale;
13 grad.flatArea=grad.flatArea*scale;
14 if nargin>2
15 if system.maxGrad<abs(grad.amplitude)
16 error("mr.scaleGrad: maximum amplitude exceeded (%g %%)",100*abs(grad.amplitude)/system.maxGrad);
17 end
18 if abs(grad.amplitude)>eps && system.maxSlew<abs(grad.amplitude)/min(grad.riseTime,grad.fallTime)
19 error("mr.scaleGrad: maximum slew rate exceeded (%g %%)",100*abs(grad.amplitude)/min(grad.riseTime,grad.fallTime)/system.maxSlew);
20 end
21 end
22 else
23 grad.waveform=grad.waveform*scale;
24 grad.first=grad.first*scale;
25 grad.last=grad.last*scale;
26 if nargin>2
27 if system.maxGrad<max(abs(grad.waveform))
28 error("mr.scaleGrad: maximum amplitude exceeded (%g %%)",100*max(abs(grad.waveform))/system.maxGrad);
29 end
30 if max(abs(grad.waveform))>eps
31 grad_max_abs_slew=max(abs(diff(grad.waveform)./diff(grad.tt)));
32 if system.maxSlew<grad_max_abs_slew
33 error("mr.scaleGrad: maximum slew rate exceeded (%g %%)",100*grad_max_abs_slew/system.maxSlew);
34 end
35 end
36 end
37 end
38end