This example is similar to the previous one except that it contains a triple gate instead of a double one.
! compressed data sortfile ! triple gates updating 2D matrix ! *FORMATS gam[1:134] (tag:3, e4:13) *DATA !! gates for energy=e4/2 GATEMAP 1D gates1 [2050] ( 672 680) (1165 1175) (1346 1358) (1474 1486) (1544 1556) (1686 1698) (1566 1578) (2036 2048) (998 1006) (1239 1249) (1433 1443) *SPECTRA !== sort spectra ====== triple2d 4096 2D *COMMANDS CREATELIST gamlist FROM gam LOOPIF $c=gamlist.e4 VALID $c.e4=$c.e4/2 if (NUMBER(gamlist)) LT 5 ENDEVENT !! triple gated 2D update !! !! Use LOOPIF to decide whether the event satisfies 3, 4 or 5 gates !! Then loop over the appropriate words in event to update matrix !! and exit loop !! !! Update Algorithm: !! For m-dim update and p gates, words which satisfy gates are g parameters, !! all others are x parameters. Have 3 possible cases: !! 1. satisfy exactly p gates -- update m-tuples from x params !! 2. satisfy at least p+m gates -- update m-tuples from g+x params !! 3. satisfy p+k gates, k<= m -- update m-tuples which involve <= k g params } !! !! for this case: !! 1. satisfy exactly 3 gates -- update doubles from listp3 !! 2. satisfy at least 5 gates -- update doubles from gamlist !! 3. satisfy exactly 4 gates -- update g params with singles from listp4 !! LOOPIF gamlist.e4 GATEDBY gates1 NEWLISTX=listp1 { !! >=1 gate LOOPIF listp1.e4 GATEDBY gates1 NEWLISTX=listp2 { !! >=2 gates LOOPIF listp2.e4 GATEDBY gates1 NEWLISTX=listp3 { !! >=3 gates LOOPIF listp3.e4 GATEDBY gates1 NEWLISTX=listp4 { !! >=4 gates LOOPIF listp4.e4 GATEDBY gates1 { !! ...at least 5 gates satisfied in gamlist -- update all parameters INC triple2d(gamlist.e4,gamlist.e4) GOTO endloop1 } LOOPFAIL { !! =4 gates !! ...no gates satisfied in listp4 LOOPIF $a=gamlist.e4 GATEDBY gates1 { INC triple2d($a.e4,listp4.e4) INC triple2d(listp4.e4,$a.e4) } INC triple2d(listp4.e4,listp4.e4) GOTO endloop1 } } LOOPFAIL { !! =3 gates !! ...no gates satisfied in listp3 so listp3 contains just the x parameters INC triple2d(listp3.e4,listp3.e4) GOTO endloop1 } } } } LABEL endloop1 *RUNFILES COMP1 RUN1 COMP1 RUN2 COMP2 RUN3 *FINISH