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.