The IF command allows conditional execution
of <statements1
> or
<statements2
>
depending on the result of a test.
If the result is true, then
<statements1
> are executed,
otherwise <statements2
> are executed (if specified).
The various forms of the IF command are described below in
more detail.
where VALID means `present in the event' or `set true
by some previous statement in the sortfile',
i.e. by an arithmetic assignment, EXTRACT,
LOOPEXTRACT or CALL statement.
For each such word, <statements1
> are executed.
The first <sortword
> or <expression
> is compared with the second
according to the operator specified,
where expressions may be used to define <lower-limit
> and <upper-limit
>.
IF...PASSES is true if
<sortword
> or <expression
> falls inside the gate defined by
<lower-limit
> and <upper-limit
> inclusive,
Example
IF GAMA PASSES (100 , HLIMIT) INC SPEC1(GAMB)
causes spectrum SPEC1 to be incremented if the value of sortword GAMA lies between 100 and the value of HLIMIT (inclusive).
If <upper-limit
> is less than <lower-limit
>
then the IF test will always give the result FALSE.
where <index
> is an integer expression which gives the array element
number used to obtain a gate defined in <gate-array-name
>.
See gate-array command.
Conversely IF...FAILS is true
only if <sortword
> or <expression
> is present in the event and
falls outside the limits of the gate,
IF...MASKEDBY is true only if all the bits set in the 16-bit mask are present in the sortword or expression being tested,
Example
IF GAMA MASKEDBY %00110101 INC SPEC1(MB1)
causes SPEC1 to be incremented if all the bits set in GAMA are also set in the bit pattern %00110101.
This form of the command is true if there is a bit pattern in
<bitmask-set-name
> for which all the bits set are present in
<sortword
> or <expression
>.
The gate number of the bit pattern which satisfies this condition
is placed in the reserved word GATE.
IF...GATEDBY is true if
the value or <sortword
> or <expression
> falls within the set of gates
associated with <gate-expression
>.
The gate number passed is placed in the reserved
variable GATE.
This variable is only recognised within
<statements
>.
See section group name for definition of gate limits.
Example
IF GAMTOT GATEDBY GLIST1 { INC SPEC1(GAMTOT) INC SUMSPEC(SUMEN) } ELSE EVENTEND
where the spectra SPEC1 and SUMSPEC are incremented if sortword GAMTOT passes any of the 1D gates defined in the gate-map GLIST1. If no gates are passed then command processing is terminated for that event (EVENTEND command).
In the 2D gate test command the gate is passed if the coordinates
given by <exprx
> and <expry
> fall within the set of
2D polygonal or elliptical gates specified in <2d-gate-expr
>.
The intersection of two polygons is given the gate number of
the later defined gate.
Example
IF EDELTE SUMEN GATEDBY GREC1 { INC MASS1(GAMTOT) SELECT(GATE) ... commands dependent upon which gate passed ... } ELSE { IF EDELTE SUMEN GATEDBY GREC2 INC MASS2(GAMTOT) }
If EDELTE (x-coordinate) and SUMEN (y-coordinate) pass any of the gates defined in the gate-map GREC1 then the commands within the first set of braces will be executed, otherwise if they pass any of the gates defined in GREC2 then the commands within the second set of braces will be obeyed: