SUBROUTINE COMPILE_QUANT_SLOPES ( LOOKUP_QUANT, CHANNEL, PROM, & QUANT_VS_ET ) C---------------------------------------------------------------------- C- C- Purpose and Methods : For a given lookup quantity, compile the vertex C- correction (from tower geometry page nominal C- center), the tweak and the lookup quantity type C- and produce the prom slopes for each page. C- C- Inputs : common block level1_llokup.inc C- Outputs : PROM_SLOPE, in level1_llokup.inc C- C- Created 17-AUG-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 22-JUL-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Trapped a possible divide by zero C- C---------------------------------------------------------------------- IMPLICIT NONE C INCLUDE 'D0$PARAMS:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$INC:LEVEL1_LOOKUP.INC' INCLUDE 'LSMP$SOURCE:LEVEL1_LOOKUP_EXPANSION.INC' C INTEGER LOOKUP_QUANT, CHANNEL, PROM REAL QUANT_VS_ET C INTEGER SIGN_ETA, MAGN_ETA, PHI, PAGE, INDEX REAL TWR_R, TWR_Z_TO_DETECT_CENTER, TWR_Z_TO_PAGE_CENTER REAL VERTEX_CORRECTION, TWEAK C C---------------------------------------------------------------------- C C Scan all possible logical pages DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX C C retrieve the PROM page index INDEX = LUQ_PAGE_INDEX ( LOOKUP_QUANT, PAGE ) C skip the logical pages that are not implemented IF ( INDEX .EQ. 0 ) GOTO 99 C DO PHI = PHI_MIN, PHI_MAX DO MAGN_ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA C IF ( CHANNEL .EQ. TOT_TOWER ) & THEN IF ( ( DAC_BYTE(SIGN_ETA,MAGN_ETA,PHI,EM_TOWER) .EQ. 0 ) & .AND. ( DAC_BYTE(SIGN_ETA,MAGN_ETA,PHI,HD_TOWER) .EQ. 0 ) ) & GOTO 9 ELSE IF ( DAC_BYTE(SIGN_ETA,MAGN_ETA,PHI,CHANNEL) .EQ. 0 ) & GOTO 9 END IF C TWR_R = TOWER_RZ_COORD ( SIGN_ETA, MAGN_ETA, PHI, CHANNEL, & R_COORD) C TWR_Z_TO_DETECT_CENTER = & TOWER_RZ_COORD ( SIGN_ETA, MAGN_ETA, PHI, CHANNEL, & Z_COORD) C IF ( SIGN_ETA .EQ. POS_ETA ) THEN TWR_Z_TO_PAGE_CENTER = TWR_Z_TO_DETECT_CENTER & - PAGE_Z_NOM(LOOKUP_QUANT,PAGE) ELSE TWR_Z_TO_PAGE_CENTER = TWR_Z_TO_DETECT_CENTER & + PAGE_Z_NOM(LOOKUP_QUANT,PAGE) END IF C IF ((TWR_R .EQ. 0) .AND. (TWR_Z_TO_PAGE_CENTER .EQ. 0)) THEN VERTEX_CORRECTION = 0 ELSE VERTEX_CORRECTION = SQRT ( & ( TWR_R**2 + TWR_Z_TO_DETECT_CENTER**2 ) & / ( TWR_R**2 + TWR_Z_TO_PAGE_CENTER**2 ) ) ENDIF C TWEAK = 1. + FINAL_FITTING ( SIGN_ETA, MAGN_ETA, PHI, & LOOKUP_QUANT, PAGE ) / 100. C PROM_SLOPE ( SIGN_ETA, MAGN_ETA, PHI, PROM, INDEX ) = & VERTEX_CORRECTION & * QUANT_VS_ET ( SIGN_ETA, MAGN_ETA, PHI, CHANNEL ) & * TWEAK C 9 CONTINUE C END DO END DO END DO C 99 CONTINUE END DO C C---------------------------------------------------------------------- RETURN END C