This example illustrates an offline double gated sort updating a 2D matrix. The update algorithm is designed to produce spikeless spectra when slices and projections of the matrix are made. The data has been compressed so that all groups have a single item represented the gain matched energy value. The tag bits have been preserved in the first 3 bits of each data word.
! compressed data sortfile ! double 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 ====== mat2d 4096 2D *COMMANDS CREATELIST gamlist FROM gam LOOPIF $c=gamlist.e4 VALID $c.e4=$c.e4/2 if (NUMBER(gamlist)) LT 4 ENDEVENT !! double gated 2D update !! !! Use LOOPIF to decide whether the event satisfies 2, 3 or 4 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 2 gates -- update doubles from listp2 !! 2. satisfy at least 4 gates -- update doubles from gamlist !! 3. satisfy exactly 3 gates -- update g params with singles from listp3 !! 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 { !! >=4 gates !! ...at least 4 gates satisfied in gamlist -- update all parameters INC mat2d(gamlist.e4,gamlist.e4) GOTO endloop1 } LOOPFAIL { !! =3 gates !! ...no gates satisfied in listp3 LOOPIF $a=gamlist.e4 GATEDBY gates1 { INC mat2d($a.e4,listp3.e4) INC mat2d(listp3.e4,$a.e4) } INC mat2d(listp3.e4,listp3.e4) GOTO endloop1 } } LOOPFAIL { !! =2 gates !! ...no gates satisfied in listp2 so listp2 contains just the x parameters INC mat2d(listp2.e4,listp2.e4) GOTO endloop1 } } } LABEL endloop1 *RUNFILES COMP1 RUN1 COMP1 RUN2 COMP2 RUN3 *FINISH