NAME ccube - cube/image computer SYNOPSIS ccube [options] <arithmetic_expression> [outcube] DESCRIPTION ccube is a calculator which allows operation between cubes, between cubes and constants, and also between constants (for the same price, you won a wonderful on-line calculator). EXPRESSIONS Arithmetic expressions support both standard and polish reverse notation operations. Be careful however, that to avoid all ambiguities, FITS files given in an expression are only identified by the fact that they contain a "fits" or "FITS" extension (suffix), or if they are prefixed with an arobas (@). All other symbols will be interpreted as numeri- cal operators or operands. This is mainly due to avoid con- flicts between operands/operators and Unix file names. Exam- ples: the slash (/) is both a division sign and the root directory, "1/2" may be the result of the division of 1 by 2, or a file named '2' located in a directory named '1', and so on. See the following paragraphs for a detailed description of supported expressions and operators. POLISH REVERSE NOTATION (PRN) Int this mode (default) all arithmetic expressions use the Polish Reverse Notation (PRN). An arithmetic expression must be provided enclosed in quotes. Separate arguments by spaces. "2 1+" is invalid, "2 1 +" is Ok. Cube arguments are names which contain "fits" or "FITS", or any character string which begins with an arobas '@'. The arobas is stripped and the rest of the string is taken as an input file name. e.g. to compute with a file named 'b012', give as argument '@b012' in the arithmetic expression. Possible arithmetic operations are: addition (+), subtrac- tion (-), multiplication (*), division (/), exponentiation (^), logarithm (l). Operands are processed from left to right. e.g. to divide an image by 2, the order is "image.fits 2 /". Two cubes may be added/subtracted/multiplied/divided if and only if: 1. They have the same number of planes: The operation is repeated plane by plane: plane n of first cube operates with plane n of second cube. 2. The second cube has only one plane: The operation is repeated on all planes of first cube, with the only plane in second cube. All operators are binary. To use the minus '-' as unary operator, subtract from zero (see examples below). A logarithm (l) is also considered as a binary operator. Its first argument is the object which logarithm will be taken, the second argument (cannot be omitted) is the logarithm base (cannot be a cube!). STANDARD ARITHMETIC EXPRESSIONS Use the -s or --standard option to input standard arithmetic expressions. The possible operators are as above: addition '+', subtrac- tion '-', multiplication '*', division '/', exponentiation '^', logarithm 'l'. To these, add the possibility to use parentheses '(' and ')' to enforce operator priority. The operator priority is given below, in decreasing order of priority: exponentiation logarithm multiplication and division (same priority level) addition and subtration (same prioriry level) Blanks are stripped off before processing an arithmetic expression, so feel free to make notations clear by adding some. As in PRN above, file names are identified as character strings containing 'fits' or 'FITS', or any character string containing an arobas '@'. The arobas is stripped and the rest of the string is taken as an input file name e.g. to compute with a file named 'b012', give as argument '@b012' in the arithmetic expression. EXAMPLES All the following examples are given first in PRN and then in standard notation. To compute: out.fits = in.fits * 2 > ccube "in.fits 2 *" out.fits > ccube -s "in.fits * 2" out.fits To compute: out.fits = (obj.fits - sky.fits) / ff.fits > ccube "obj.fits sky.fits - ff.fits /" out.fits > ccube -s "(obj.fits - sky.fits)/ff.fits" out.fits To compute: out.fits = (obj1 + obj2)/2 > ccube "@obj1 @obj2 + 2 /" out.fits > ccube -s "(@obj1 + @obj2) / 2" out.fits > ccube -s "(@obj1+@obj2)/2" out.fits To compute the log in base 10 of an image named 'image.fits', type: > ccube "image.fits 10 l" out.fits > ccube -s "image.fits l 10" out.fits To compute the square of an image: out.fits = in.fits ^ 2 > ccube "in.fits 2 ^" out.fits > ccube -s "in.fits^2" out.fits To exponentiate an image, e.g. out.fits = 1.01 ^ input_im > ccube "1.01 @input_im ^" out.fits > ccube -s "1.01 ^ @input_im" out.fits Here is an example showing that PRN does not use parentheses: > ccube -s "(2*3) + 2*(4*(1+2))" is equivalent to: > ccube "2 3 * 2 1 + 4 * 2 * +" With images: "(obj.fits - sky.fits) / (ff.fits - dark.fits)" Becomes: "obj.fits sky.fits - ff.fits dark.fits - /" Invalid syntax with PRN may be due to lack of separators: "1 3+" and "1 2 3 +*" are invalid. "1 3 +" and "1 2 3 + *" are Ok. In standard notation, it is Ok to stack operators, as long as there is no ambiguity ("1 2" differs from "12" !): "1+3" and "1*(2+3)" are ok. With PRN, invalid syntax may be returned if some objects are still on the stack when no operator remains. The following: "@im1 @im2 2 *" will cause an error message, because an object (im1) is still on the stack after all operators have been used. To use the minus '-' as unary operator to negate an image subtract it from zero: out = - in is given as: > ccube "0 @in -" out > ccube -s "0-@in" out OPTIONS --polish or -p Polish reverse notation for arithmetic expressions. This is the default. --standard or -s Standard notation for arithmetic expressions. FILES Input files shall all comply with FITS format. Default output file name is 'comp.fits'. BUGS Unary operators are not supported, they should.