SUBROUTINE GENERATE_PROM_TABLE_PY(SIGN_ETA, MAGN_ETA, PHI, & PROM_TABLE, PAGE_SIZE ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Generate the table of bytes for the selected PROM. C- C- Inputs : SIGN_ETA | C- MAGN_ETA | Tower coordinates C- PHI | C- C- Outputs : PROM_TABLE An array of integers that represents the contents of C- the PROM. Must have enough members to hold C- ( number of pages needed by lookups in prom C- * PAGE_SIZE ) values. C- C- Controls: PAGE_SIZE The number of bytes to use with each page. C- C- Created 13-SEP-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C- Notes: This routine makes no attempt to verify the C- validity of the arguments it is called with. C- If the change is ever made to use 9 bits of data C- addressing and 2 bits of page addressing with the C- proms, then this routine needs to be changed. C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$PARAMS:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$INC:LEVEL1_LOOKUP.INC' INTEGER MOMENTUM_PROM_ADDRESS C C Argument declarations C INTEGER SIGN_ETA, MAGN_ETA, PHI INTEGER PROM_TABLE(*) INTEGER PAGE_SIZE C C Local variables C INTEGER TEMP_BYTE INTEGER COUNT INTEGER INDEX INTEGER PAGE INTEGER LOOKUP INTEGER EM_ADC_ZERESP, HD_ADC_ZERESP INTEGER SATURATION PARAMETER (SATURATION = 255) C C Search for each INDEX. Could be assigned to any PAGE of any LOOKUP in C the PROM. C EM_ADC_ZERESP = ADC_ZERESP(SIGN_ETA,MAGN_ETA,PHI,EM_TOWER) HD_ADC_ZERESP = ADC_ZERESP(SIGN_ETA,MAGN_ETA,PHI,HD_TOWER) C DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX IF (LUQ_PAGE_INDEX(PY_QUANT, PAGE) .EQ. INDEX) THEN LOOKUP = PY_QUANT GOTO 1000 ENDIF END DO C no match DO COUNT = 1, PAGE_SIZE C Kludged 6-DEC-1990 To have Page Index 8 be ONE-TO-ONE PROM_TABLE(MOMENTUM_PROM_ADDRESS( & (INDEX -1) * PAGE_SIZE + COUNT)) = COUNT - 1 END DO GOTO 2000 ! Next iteration of loop C C Fill the table C 1000 CONTINUE DO COUNT = 1, PAGE_SIZE TEMP_BYTE = NINT( ( FLOAT( COUNT-1 ) & - FLOAT( EM_ADC_ZERESP + EM_ADC_ZERESP ) / 2.0 & + 0.25 ) & * PROM_SLOPE (SIGN_ETA, MAGN_ETA, PHI, PY_PROM, INDEX) ) IF ( ABS( TEMP_BYTE ) & .LT. PROM_CUT (SIGN_ETA, MAGN_ETA, PHI, PY_PROM, INDEX) ) & TEMP_BYTE = 0 TEMP_BYTE = TEMP_BYTE & + LOOKUP_ZERESP (SIGN_ETA, MAGN_ETA, PHI, LOOKUP) IF ( TEMP_BYTE .LT. 0 ) TEMP_BYTE = 0 IF ( TEMP_BYTE .GT. SATURATION ) TEMP_BYTE = SATURATION C PROM_TABLE(MOMENTUM_PROM_ADDRESS( & (INDEX -1) * PAGE_SIZE + COUNT )) = TEMP_BYTE END DO C 2000 CONTINUE END DO C 999 RETURN END C