sfclip is very simple yet very useful program. It “clips” the data to the specified maximum by the absolute value.

Here is a simple test. First, let us make some data.

bash$sfmath n1=10 output="sin(x1)" > data.rsf bash$ < data.rsf sfdisfil
0:             0       0.8415       0.9093       0.1411      -0.7568
5:       -0.9589      -0.2794        0.657       0.9894       0.4121


Now clip it to 0.5 by maximum absolute value.

bash$< data.rsf sfclip clip=0.5 > clip.rsf bash$ < clip.rsf sfdisfil
0:           0.5          0.5          0.5       0.1411         -0.5
5:          -0.5      -0.2794          0.5          0.5       0.4121


What if you need to clip the data not by the maximum value but to a specified range? Use sfclip2.

bash$< data.rsf sfclip2 lower=0 upper=0.9 > clip2.rsf bash$ < clip2.rsf sfdisfil
0:             0       0.8415          0.9       0.1411            0
5:             0            0        0.657          0.9       0.4121


sfclip should handle correctly infinite values, for example those resulting from division by zero.

bash$sfmath n1=10 output=1/x1 > data.rsf bash$ < data.rsf sfdisfil
0:           inf            1          0.5       0.3333         0.25
5:           0.2       0.1667       0.1429        0.125       0.1111
bash$< data.rsf sfclip clip=0.3 > clip.rsf bash$ < clip.rsf sfdisfil
0:           0.3          0.3          0.3          0.3         0.25
5:           0.2       0.1667       0.1429        0.125       0.1111


A prototype of sfclip is used as an example in Guide to madagascar API. The actual program is a little different.