Much simpler handling of timestamp errors. Return an error to the user
[rrdtool.git] / doc / rrdgraph_rpn.pod
index c24be0f..aabd738 100644 (file)
@@ -1,4 +1,4 @@
-=head1 NAME  
+=head1 NAME
 
 rrdgraph_rpn - About RPN Math in rrdtool graph
 
@@ -15,11 +15,12 @@ takes as many elements from the stack as needed. Pushing is done
 implicitly, so whenever you specify a number or a variable, it gets
 pushed onto the stack automatically.
 
-At the end of the calculation there should be one and only one
-value left on the stack.  This is the outcome of the function and
-this is what is put into the I<vname>.  For B<CDEF> instructions,
-the stack is processed for each data point on the graph. B<VDEF>
-instructions work on an entire data set in one run.
+At the end of the calculation there should be one and only one value left on
+the stack.  This is the outcome of the function and this is what is put into
+the I<vname>.  For B<CDEF> instructions, the stack is processed for each
+data point on the graph. B<VDEF> instructions work on an entire data set in
+one run. Note, that currently B<VDEF> instructions only support a limited
+list of functions.
 
 Example: C<VDEF:maximum=mydata,MAXIMUM>
 
@@ -29,7 +30,7 @@ of your RRD script.
 Example: C<CDEF:mydatabits=mydata,8,*>
 
 This means:  push variable I<mydata>, push the number 8, execute
-the operator I<+>. The operator needs two elements and uses those
+the operator I<*>. The operator needs two elements and uses those
 to return one value.  This value is then stored in I<mydatabits>.
 As you may have guessed, this instruction means nothing more than
 I<mydatabits = mydata * 8>.  The real power of B<RPN> lies in the
@@ -69,15 +70,12 @@ Z<>
 
 =item Comparing values
 
-B<MIN, MAX> 
+B<MIN, MAX>
 
 Pops two elements from the stack and returns the smaller or larger,
-respectively.  The two numbers shouldn't be I<infinite> or I<unknown>,
-if they are that value is pushed back onto the stack as the result.
-
-= for comment
-XXX What happens above if both a infinite and undefined value are on the 
-XXX stack? Fritz
+respectively.  Note that I<infinite> is larger than anything else.
+If one of the input numbers is I<unknown> then the result of the operation will be
+I<unknown> too.
 
 B<LIMIT>
 
@@ -101,6 +99,11 @@ B<+, -, *, /, %>
 
 Add, subtract, multiply, divide, modulo
 
+B<ADDNAN>
+
+NAN-safe addition. If one parameter is NAN/UNKNOWN it'll be treated as
+zero. If both parameters are NAN/UNKNOWN, NAN/UNKNOWN will be returned.
+
 B<SIN, COS, LOG, EXP, SQRT>
 
 Sine and cosine (input in radians), log and exp (natural logarithm),
@@ -110,11 +113,28 @@ B<ATAN>
 
 Arctangent (output in radians).
 
+B<ATAN2>
+
+Arctangent of y,x components (output in radians).
+This pops one element from the stack, the x (cosine) component, and then
+a second, which is the y (sine) component.
+It then pushes the arctangent of their ratio, resolving the ambiguity between
+quadrants.
+
+Example: C<CDEF:angle=Y,X,ATAN2,RAD2DEG> will convert C<X,Y>
+components into an angle in degrees.
+
 B<FLOOR, CEIL>
 
 Round down or up to the nearest integer.
 
-Z<>
+B<DEG2RAD, RAD2DEG>
+
+Convert angle in degrees to radians, or radians to degrees.
+
+B<ABS>
+
+Take the absolute value.
 
 =item Set Operations
 
@@ -128,7 +148,14 @@ Example: C<CDEF:x=v1,v2,v3,v4,v5,v6,6,SORT,POP,5,REV,POP,+,+,+,4,/> will
 compute the average of the values v1 to v6 after removing the smallest and
 largest.
 
-B<TREND>
+B<AVG>
+
+Pop one element (I<count>) from the stack. Now pop I<count> elements and build the
+average, ignoring all UNKNOWN values in the process.
+
+Example: C<CDEF:x=a,b,c,d,4,AVG>
+
+B<TREND, TRENDNAN>
 
 Create a "sliding window" average of another data series.
 
@@ -143,7 +170,7 @@ average is essentially computed as shown here:
                        delay     t0
                  <--------------->
                          delay       t1
-                     <--------------->  
+                     <--------------->
                               delay      t2
                          <--------------->
 
@@ -152,6 +179,12 @@ average is essentially computed as shown here:
      Value at sample (t1) will be the average between (t1-delay) and (t1)
      Value at sample (t2) will be the average between (t2-delay) and (t2)
 
+TRENDNAN is - in contrast to TREND - NAN-safe. If you use TREND and one 
+source value is NAN the complete sliding window is affected. The TRENDNAN 
+operation ignores all NAN-values in a sliding window and computes the 
+average of the remaining values.
+
+
 =item Special values
 
 B<UNKN>
@@ -180,13 +213,11 @@ function cannot be used in B<VDEF> instructions.
 
 B<COUNT>
 
-Pushes the number 1 if this is the first value of the data set, the 
-number 2 if it is the second, and so on. This special value allows 
-you to make calculations based on the position of the value within 
+Pushes the number 1 if this is the first value of the data set, the
+number 2 if it is the second, and so on. This special value allows
+you to make calculations based on the position of the value within
 the data set. This function cannot be used in B<VDEF> instructions.
 
-Z<>
-
 =item Time
 
 Time inside RRDtool is measured in seconds since the epoch. The
@@ -220,7 +251,7 @@ Z<>
 
 =head1 VARIABLES
 
-These operators work only on B<VDEF> statements.
+These operators work only on B<VDEF> statements. Note that currently ONLY these work for B<VDEF>.
 
 =over 4
 
@@ -231,6 +262,12 @@ the first occurrence of that value in the time component.
 
 Example: C<VDEF:avg=mydata,AVERAGE>
 
+=item STDEV
+
+Returns the standard deviation of the values.
+
+Example: C<VDEF:stdev=mydata,STDEV>
+
 =item LAST, FIRST
 
 Return the last/first value including its time.  The time for
@@ -262,6 +299,18 @@ finite numbers and are always more than the I<Unknown> numbers.
 
 Example: C<VDEF:perc95=mydata,95,PERCENT>
 
+=item LSLSLOPE, LSLINT, LSLCORREL
+
+Return the parameters for a B<L>east B<S>quares B<L>ine I<(y = mx +b)> 
+which approximate the provided dataset.  LSLSLOPE is the slope I<(m)> of
+the line related to the COUNT position of the data.  LSLINT is the 
+y-intercept I<(b)>, which happens also to be the first data point on the 
+graph. LSLCORREL is the Correlation Coefficient (also know as Pearson's 
+Product Moment Correlation Coefficient).  It will range from 0 to +/-1 
+and represents the quality of fit for the approximation.   
+
+Example: C<VDEF:slope=mydata,LSLSLOPE>
+
 =back
 
 =head1 SEE ALSO
@@ -275,6 +324,6 @@ Make sure to read L<rrdgraph_examples> for tipsE<amp>tricks.
 
 =head1 AUTHOR
 
-Program by Tobias Oetiker E<lt>oetiker@ee.ethz.chE<gt>
+Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
 
 This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>