* NTFILL.KUMAC Fill a vector from an Ntuple with selection function * * 950428 Michael Kelsey * 971201 Ilias Efthymiopoulos MACRO NTFILL IDN VARSEL VNAME='V' UWFUNC='!' NEVENT=999999 IFIRST=1 IF [1]='?' THEN MESSAGE '* NTFILL IDN VARSEL VNAME [ UWFUNC NEVENT IFIRST ]' MESSAGE MESSAGE ' IDN C "Ntuple Identifier"' MESSAGE ' VARSEL R "Ntuple variable to use "' MESSAGE ' VNAME C "Vector Name" D="V"' MESSAGE ' UWFUNC C "Selection Function" D="1"' MESSAGE ' NEVENT I "No of events" D=999999' MESSAGE ' IFIRST I "First event" D=1' MESSAGE MESSAGE ' Fills the specified KUIP vector VNAME with data extracted' MESSAGE ' from an N-tuple IDN (see NT/PLOT for one-dimensional' MESSAGE ' IDN expressions), with optional selection function UWFUNC.' MESSAGE ' If the vector exists, it will be overwritten.' MESSAGE EXITM ENDIF IF [UWFUNC]='!' THEN | Check for default UWFUNC UWFUNC = 1 ENDIF NN = $HINFO([IDN],'ENTRIES') NLOOP=$SIGMA(MIN([NEVENT],[NN])) * Create temporary array for COMIS function. IF $VEXIST(VTEMP) THEN VEC/DEL VTEMP ENDIF NN = [NN]+1 VEC/CREATE VTEMP([NN]) R [NN]*0.0 * Define COMIS function to perform selection and filling APPLICATION COMIS QUIT INTEGER FUNCTION NTFILL(AVAR,NTOT) IMPLICIT NONE INCLUDE ? REAL AVAR INTEGER NTOT VECTOR VTEMP INTEGER I DATA I /0/ I = I + 1 VTEMP(I) = AVAR VTEMP(NTOT) = I NTFILL = 1 END QUIT NT/LOOP [IDN] [UWFUNC].AND.BOOL(ntfill([VARSEL],[NN])) [NLOOP] [IFIRST] NDIM=$SIGMA(INT(VTEMP(NCO(VTEMP)))) IF $VEXIST([VNAME]) THEN VECT/DEL [VNAME] ENDIF VEC/CREATE [VNAME]([NDIM]) R VEC/COPY VTEMP(1:[NDIM]) [VNAME] VEC/DELETE VTEMP MESSAGE Vector [VNAME] created with [NDIM] entries RETURN