SUBROUTINE DERIVE_TREE_OFFSETS ( LOOKUP_QUANT ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Builds the global tree offset by summing the C- individual tower offsets over the whole detector. C- C- Inputs : quantity type, cf. parameters in level1_lookup.params C- common block level1_lookup.inc C- Outputs : tree_offset, in level1_lookup.inc C- C- Created 6-AUG-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 8-JUL-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Now takes into account both positive and negative C- contributions to PX and PY. C- Updated 8-OCT-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Now only sums those towers whose DAC_BYTE exists. 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 INTEGER SIGN_ETA, MAGN_ETA, PHI INTEGER QUADRANT C C---------------------------------------------------------------------- C TREE_OFFSET ( LOOKUP_QUANT ) = 0 C C If the Lookup Quantity is Px or Py, the TREE_OFFSET calculation C must take into account that some towers contribute positive momentum C while the others contribute negative momentum. C DO PHI = PHI_MIN, PHI_MAX DO MAGN_ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA C C Only consider those towers that exist. C IF ( ( (LOOKUP_QUANT .EQ. EM_ET_QUANT) .OR. & (LOOKUP_QUANT .EQ. EM_L2_QUANT) .OR. & (LOOKUP_QUANT .EQ. PX_QUANT) .OR. & (LOOKUP_QUANT .EQ. PY_QUANT) .OR. & (LOOKUP_QUANT .EQ. TOT_ET_QUANT) .OR. & (LOOKUP_QUANT .EQ. TOT_L2_QUANT) ) & .AND.(DAC_BYTE(SIGN_ETA, MAGN_ETA, PHI, EM_TOWER) & .EQ. 0) ) THEN GOTO 1000 ENDIF C IF ( ( (LOOKUP_QUANT .EQ. HD_ET_QUANT) .OR. & (LOOKUP_QUANT .EQ. HD_L2_QUANT) .OR. & (LOOKUP_QUANT .EQ. PX_QUANT) .OR. & (LOOKUP_QUANT .EQ. PY_QUANT) .OR. & (LOOKUP_QUANT .EQ. TOT_ET_QUANT) .OR. & (LOOKUP_QUANT .EQ. TOT_L2_QUANT) ) & .AND.(DAC_BYTE(SIGN_ETA, MAGN_ETA, PHI, HD_TOWER) & .EQ. 0) ) THEN GOTO 1000 ENDIF C C Find which quadrant this tower is in C QUADRANT = (PHI-1)/8 C C increment tree offset IF (((LOOKUP_QUANT .EQ. PX_QUANT) .AND. & ((QUADRANT .EQ. 1) .OR. (QUADRANT .EQ. 2))) & .OR. ((LOOKUP_QUANT .EQ. PY_QUANT) .AND. & ((QUADRANT .EQ. 2) .OR. (QUADRANT .EQ. 3)))) THEN C C negative contribution TREE_OFFSET (LOOKUP_QUANT) = TREE_OFFSET (LOOKUP_QUANT) & - LOOKUP_ZERESP (SIGN_ETA,MAGN_ETA,PHI,LOOKUP_QUANT) ELSE C C positive contribution TREE_OFFSET (LOOKUP_QUANT) = TREE_OFFSET (LOOKUP_QUANT) & + LOOKUP_ZERESP (SIGN_ETA,MAGN_ETA,PHI,LOOKUP_QUANT) ENDIF C 1000 CONTINUE C END DO END DO END DO C C---------------------------------------------------------------------- 999 RETURN END C