SUBROUTINE CHECK_COMMON_BLOCK() C---------------------------------------------------------------------- C- C- Purpose and Methods : Searches for array values that haven't been C- initialized. The routine is broken into a block for each SECTION. Within C- each block, First a check is made to see if all of the elements that C- should be defined are. If an element that should not be defined is not C- defined, it is set to 0. If an element that should be defined is not, C- then a flag is set. If an element that should not be defined is C- defined, then a message is generated identifying it. C- Then, if it is found that all of the elements that should be defined C- are not, then a message is generated and the entire array is cleared to C- zero. C- If some but not all of the elements that should be defined are not, C- then a message is generated. Then all the elements are scanned, and a C- message is generated identifying each undefined element, and each such C- element is set to 0. C- C- Inputs : uses common block LEVEL1_LOOKUP C- Outputs : none C- Controls: none C- C- Created 18-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C global declarations C INCLUDE 'D0$PARAMS:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$INC:LEVEL1_LOOKUP.INC' INCLUDE 'LSMP$SOURCE:LEVEL1_LOOKUP_EXPANSION.INC' INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.PARAMS' INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.INC' LOGICAL DAC_DEFINED EXTERNAL DAC_DEFINED C C local declarations C INTEGER SIGN_ETA INTEGER ETA INTEGER PHI INTEGER CHANNEL INTEGER LUQ INTEGER LUQ2 INTEGER PAGE INTEGER INDEX INTEGER PROM INTEGER BIN LOGICAL EMPTY_ITEM LOGICAL MISSING_ITEM CHARACTER*80 MESSAGE C C arrays to convert enumerated values to strings C CHARACTER*5 ST_SIGN(POS_ETA:NEG_ETA) CHARACTER*3 ST_CHANNEL(EM_TOWER:TOT_TOWER) CHARACTER*6 ST_LUQ(EM_ET_QUANT:TOT_L2_QUANT) CHARACTER*7 ST_PROM(EM_PROM: PY_PROM) C C array to convert looked up quantity to CHANNEL C INTEGER LUQ_TO_CHANNEL(EM_ET_QUANT:TOT_L2_QUANT) C C array to convert PROM to CHANNEL C INTEGER PROM_TO_CHANNEL(EM_PROM:PY_PROM) C C Don't do any of this if DIAGNOSTICS aren't enabled C IF (DIAGNOSTICS .EQV. .FALSE.) GOTO 999 C C initialize the arrays C ST_SIGN(POS_ETA) = 'PLUS' ST_SIGN(NEG_ETA) = 'MINUS' ST_CHANNEL(EM_TOWER) = 'EM ' ST_CHANNEL(HD_TOWER) = 'HD ' ST_CHANNEL(TOT_TOWER) = 'TOT' ST_LUQ(EM_ET_QUANT) = 'EM ET' ST_LUQ(EM_L2_QUANT) = 'EM L2' ST_LUQ(HD_ET_QUANT) = 'HD ET' ST_LUQ(HD_L2_QUANT) = 'HD L2' ST_LUQ(PX_QUANT) = 'TOT PX' ST_LUQ(PY_QUANT) = 'TOT PY' ST_LUQ(TOT_ET_QUANT) = 'TOT ET' ST_LUQ(TOT_L2_QUANT) = 'TOT L2' ST_PROM(EM_PROM) = 'EM_PROM' ST_PROM(HD_PROM) = 'HD_PROM' ST_PROM(PX_PROM) = 'PX_PROM' ST_PROM(PY_PROM) = 'PY_PROM' LUQ_TO_CHANNEL(EM_ET_QUANT) = EM_TOWER LUQ_TO_CHANNEL(EM_L2_QUANT) = EM_TOWER LUQ_TO_CHANNEL(HD_ET_QUANT) = HD_TOWER LUQ_TO_CHANNEL(HD_L2_QUANT) = HD_TOWER LUQ_TO_CHANNEL(PX_QUANT) = TOT_TOWER LUQ_TO_CHANNEL(PY_QUANT) = TOT_TOWER LUQ_TO_CHANNEL(TOT_ET_QUANT) = TOT_TOWER LUQ_TO_CHANNEL(TOT_L2_QUANT) = TOT_TOWER PROM_TO_CHANNEL(EM_PROM) = EM_TOWER PROM_TO_CHANNEL(HD_PROM) = HD_TOWER PROM_TO_CHANNEL(PX_PROM) = TOT_TOWER PROM_TO_CHANNEL(PY_PROM) = TOT_TOWER C- C---------------------------------------------------------------------- C- C- Check LOOKUP_QUANTITIES C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, PY_QUANT IF (LUQ_PAGE_INDEX(LUQ, PAGE) .EQ. MIN_INTEGER) THEN MISSING_ITEM = .TRUE. ELSE EMPTY_ITEM = .FALSE. ENDIF END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_LUQ_INDEX, ' ') ENDIF C IF (MISSING_ITEM .EQV. .TRUE.) THEN DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, PY_QUANT IF (LUQ_PAGE_INDEX(LUQ, PAGE) .EQ. MIN_INTEGER) THEN LUQ_PAGE_INDEX(LUQ, PAGE) = 0 ENDIF END DO END DO END IF C- C---------------------------------------------------------------------- C- C- Check DOWNLOADED_BYTE C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (DAC_BYTE(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. & MIN_INTEGER) THEN MISSING_ITEM = .TRUE. ELSE EMPTY_ITEM = .FALSE. ENDIF END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_DAC_INDEX, ' ') DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA DAC_BYTE(SIGN_ETA, ETA, PHI, CHANNEL) = 0 END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_DAC_INDEX, ' ') C DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA 50 FORMAT( ' ', A, ' MAGN ETA', I3, & ' PHI', I3, ' ', A) IF (DAC_BYTE(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. & MIN_INTEGER) THEN DAC_BYTE(SIGN_ETA, ETA, PHI, CHANNEL) = 0 WRITE (MESSAGE, 50) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_CHANNEL(CHANNEL) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_DAC_INDEX, & MESSAGE) ENDIF END DO END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check LEVEL_0_BINS_LOW C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO BIN = L0_BIN_MIN, L0_BIN_MAX IF (L0_BIN_COVERAGE(BIN, Z_LOW) .EQ. MIN_REAL) THEN MISSING_ITEM = .TRUE. ELSE EMPTY_ITEM = .FALSE. ENDIF END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_L0L_INDEX, ' ') DO BIN = L0_BIN_MIN, L0_BIN_MAX L0_BIN_COVERAGE(BIN, Z_LOW) = 0.0 END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_L0L_INDEX, ' ') 100 FORMAT( ' ', 'BIN', I3) DO BIN = L0_BIN_MIN, L0_BIN_MAX IF (L0_BIN_COVERAGE(BIN, Z_LOW) .EQ. MIN_REAL) THEN L0_BIN_COVERAGE(BIN, Z_LOW) = 0.0 WRITE(MESSAGE, 100) BIN CALL MESSAGE_OUT(MES_PASS_THROUGH, I_L0L_INDEX, MESSAGE) ENDIF END DO END IF C- C---------------------------------------------------------------------- C- C- Check LEVEL_0_BINS_HIGH C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO BIN = L0_BIN_MIN, L0_BIN_MAX IF (L0_BIN_COVERAGE(BIN, Z_HIGH) .EQ. MIN_REAL) THEN MISSING_ITEM = .TRUE. ELSE EMPTY_ITEM = .FALSE. ENDIF END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_L0H_INDEX, ' ') DO BIN = L0_BIN_MIN, L0_BIN_MAX L0_BIN_COVERAGE(BIN, Z_HIGH) = 0.0 END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_L0H_INDEX, ' ') 110 FORMAT( ' ', 'BIN', I3) DO BIN = L0_BIN_MIN, L0_BIN_MAX IF (L0_BIN_COVERAGE(BIN, Z_HIGH) .EQ. MIN_REAL) THEN L0_BIN_COVERAGE(BIN, Z_HIGH) = 0.0 WRITE(MESSAGE, 110) BIN CALL MESSAGE_OUT(MES_PASS_THROUGH, I_L0H_INDEX, MESSAGE) ENDIF END DO END IF C- C---------------------------------------------------------------------- C- C- Check PAGE_VS_BIN C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO BIN = L0_BIN_MIN, L0_BIN_MAX DO LUQ = EM_ET_QUANT, PY_QUANT IF (LUQ_PAGE_NUMBER(LUQ, BIN) .EQ. MIN_INTEGER) THEN MISSING_ITEM = .TRUE. ELSE EMPTY_ITEM = .FALSE. ENDIF END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_PVB_INDEX, ' ') DO BIN = L0_BIN_MIN, L0_BIN_MAX DO LUQ = EM_ET_QUANT, PY_QUANT LUQ_PAGE_NUMBER(LUQ, BIN) = 0 END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_PVB_INDEX, ' ') 150 FORMAT( ' ', A, ' BIN', I3) DO BIN = L0_BIN_MIN, L0_BIN_MAX DO LUQ = EM_ET_QUANT, PY_QUANT IF (LUQ_PAGE_NUMBER(LUQ, BIN) .EQ. MIN_INTEGER) THEN WRITE (MESSAGE, 150) ST_LUQ(LUQ), BIN CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PVB_INDEX, MESSAGE) LUQ_PAGE_NUMBER(LUQ, BIN) = 0 END IF END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check PAGE_NOMINAL_CENTER C- C- If undefined and should be undefined, set to 0. C- If undefined and should not be undefined, set to 0 and set error. C- If defined and should be undefined, set error. C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, TOT_L2_QUANT IF (PAGE_Z_NOM(LUQ, PAGE) .EQ. MIN_REAL) THEN IF (LUQ_PAGE_INDEX(LUQ, PAGE) .NE. 0) THEN MISSING_ITEM = .TRUE. ELSE LUQ_PAGE_INDEX(LUQ, PAGE) = 0.0 ENDIF ELSE IF (LUQ_PAGE_INDEX(LUQ, PAGE) .NE. 0) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 200) ST_LUQ(LUQ), PAGE CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_PVB_INDEX, & MESSAGE) ENDIF ENDIF END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_PVB_INDEX, ' ') DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, PY_QUANT PAGE_Z_NOM(LUQ, PAGE) = 0.0 END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN 200 FORMAT( ' ', A, ' PAGE', I3) CALL MESSAGE_OUT(MES_MISSING_ITEM, I_PVB_INDEX, ' ') DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, PY_QUANT IF (PAGE_Z_NOM(LUQ, PAGE) .EQ. MIN_REAL) THEN WRITE(MESSAGE, 200) ST_LUQ(LUQ), PAGE CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PVB_INDEX, MESSAGE) PAGE_Z_NOM(LUQ, PAGE) = 0.0 ENDIF END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check GLOBAL_ADC_SCALE C- IF (GLOBAL_ADC_SCALE .EQ. MIN_REAL) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_GAC_INDEX, ' ') GLOBAL_ADC_SCALE = 0.0 ENDIF C- C---------------------------------------------------------------------- C- C- Check GLOBAL_ENERGY_SCALE C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO LUQ = EM_ET_QUANT, TOT_L2_QUANT IF (GLOBAL_ENERGY_SCALE(LUQ) .EQ. MIN_REAL) THEN LUQ2 = LUQ IF (LUQ2 .EQ. TOT_ET_QUANT) LUQ2 = EM_ET_QUANT IF (LUQ2 .EQ. TOT_L2_QUANT) LUQ2 = EM_L2_QUANT IF (LUQ_PAGE_INDEX(LUQ2,0) .NE. 0) THEN MISSING_ITEM = .TRUE. ELSE GLOBAL_ENERGY_SCALE(LUQ) = 0.0 ENDIF ELSE LUQ2 = LUQ IF (LUQ2 .EQ. TOT_ET_QUANT) LUQ2 = EM_ET_QUANT IF (LUQ2 .EQ. TOT_L2_QUANT) LUQ2 = EM_L2_QUANT IF (LUQ_PAGE_INDEX(LUQ2, 0) .NE. 0) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 250) ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_GEC_INDEX, & MESSAGE) ENDIF ENDIF END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_GEC_INDEX, ' ') DO LUQ = EM_ET_QUANT, TOT_L2_QUANT GLOBAL_ENERGY_SCALE(LUQ) = 0.0 END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_GEC_INDEX, ' ') 250 FORMAT( ' ' , A) DO LUQ = EM_ET_QUANT, TOT_L2_QUANT IF (GLOBAL_ENERGY_SCALE(LUQ) .EQ. MIN_REAL) THEN WRITE(MESSAGE,250) ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_GEC_INDEX, MESSAGE) GLOBAL_ENERGY_SCALE(LUQ) = 0.0 ENDIF END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check ELECT_NOISE_CUT_FACT C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO LUQ = EM_ET_QUANT, PY_QUANT IF (ELEC_NOISE_CUT_FACT(LUQ) .EQ. MIN_REAL) THEN IF (LUQ_PAGE_INDEX(LUQ,0) .NE. 0) THEN MISSING_ITEM = .TRUE. ELSE ELEC_NOISE_CUT_FACT(LUQ) = 0.0 ENDIF ELSE IF (LUQ_PAGE_INDEX(LUQ, 0) .NE. 0) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 260) ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_ENC_INDEX, & MESSAGE) ENDIF ENDIF END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_ENC_INDEX, ' ') DO LUQ = EM_ET_QUANT, PY_QUANT ELEC_NOISE_CUT_FACT(LUQ) = 0.0 END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_ENC_INDEX, ' ') 260 FORMAT( ' ' , A) DO LUQ = EM_ET_QUANT, PY_QUANT IF (ELEC_NOISE_CUT_FACT(LUQ) .EQ. MIN_REAL) THEN WRITE(MESSAGE,260) ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_ENC_INDEX, MESSAGE) ELEC_NOISE_CUT_FACT(LUQ) = 0.0 ENDIF END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check TOWER_GEOMETRY_R C- CALL CHECK_SAME(TOWER_RZ_COORD(POS_ETA, ETA_RANGE_MIN, PHI_MIN, & EM_TOWER, R_COORD), I_TRN_INDEX) C- C---------------------------------------------------------------------- C- C- Check TOWER_GEOMETRY_Z C- CALL CHECK_SAME(TOWER_RZ_COORD(POS_ETA, ETA_RANGE_MIN, PHI_MIN, & EM_TOWER, Z_COORD), I_TZN_INDEX) C- C---------------------------------------------------------------------- C- C- Check TOWER_GEOMETRY_PHI C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) .EQ. MIN_REAL) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, EM_TOWER)) THEN MISSING_ITEM = .TRUE. ELSE TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) = 0.0 ENDIF ELSE IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, EM_TOWER)) THEN EMPTY_ITEM = .FALSE. ELSE WRITE (MESSAGE, 300) ST_SIGN(SIGN_ETA), ETA, PHI CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_TPN_INDEX, & MESSAGE) TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) = 0.0 ENDIF ENDIF END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_TPN_INDEX, ' ') DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) = 0.0 END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_TPN_INDEX, ' ') 300 FORMAT(' ', A, ' MAGN_ETA', I3, ' PHI', I3) DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF ( TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) .EQ. MIN_REAL ) & THEN TOWER_PHI_COORD(SIGN_ETA, ETA, PHI) = 0.0 WRITE(MESSAGE,300) ST_SIGN(SIGN_ETA), ETA, PHI CALL MESSAGE_OUT(MES_PASS_THROUGH, I_TPN_INDEX, MESSAGE) ENDIF END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check ANALOG_INPUT_SCALING C- CALL CHECK_SAME(ANALOG_INPUT_SCALING(POS_ETA, ETA_RANGE_MIN, & PHI_MIN, EM_TOWER), I_AIS_INDEX) C- C---------------------------------------------------------------------- C- C- Check INPUT_ENERGY_ERROR C- CALL CHECK_SAME(INPUT_ENERGY_ERROR(POS_ETA, ETA_RANGE_MIN, & PHI_MIN, EM_TOWER), I_IEE_INDEX ) C- C---------------------------------------------------------------------- C- C- Check ADC_ZERESP C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. C DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (ADC_ZERESP(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. & MIN_INTEGER) & THEN IF (DAC_DEFINED( SIGN_ETA, ETA, PHI, CHANNEL)) THEN MISSING_ITEM = .TRUE. ELSE ADC_ZERESP(SIGN_ETA, ETA, PHI, CHANNEL) = 0 ENDIF ELSE IF (DAC_DEFINED( SIGN_ETA, ETA, PHI, CHANNEL)) THEN EMPTY_ITEM = .FALSE. ELSE WRITE (MESSAGE, 400) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_CHANNEL(CHANNEL) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, & I_AZR_INDEX, MESSAGE) ENDIF ENDIF END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_AZR_INDEX, ' ') DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA ADC_ZERESP( SIGN_ETA, ETA, PHI, CHANNEL) = 0 END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_AZR_INDEX, ' ') 400 FORMAT( ' ', A, ' ETA', I3, ' PHI', I3, ' ', A) DO CHANNEL = EM_TOWER, HD_TOWER DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (ADC_ZERESP(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. & MIN_INTEGER) THEN ADC_ZERESP( SIGN_ETA, ETA, PHI, CHANNEL) = 0 WRITE(MESSAGE, 400) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_CHANNEL(CHANNEL) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_AZR_INDEX, & MESSAGE) ENDIF END DO END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check ELECT_NOISE C- CALL CHECK_SAME(ELEC_NOISE_SIGMA(POS_ETA, ETA_RANGE_MIN, PHI_MIN, & EM_TOWER), I_ELN_INDEX) C- C---------------------------------------------------------------------- C- C- Check LOOKUP_ZERESP C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (LOOKUP_ZERESP(SIGN_ETA, ETA, PHI, LUQ) .EQ. & MIN_INTEGER) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & LUQ_TO_CHANNEL(LUQ))) THEN MISSING_ITEM = .TRUE. ELSE LOOKUP_ZERESP(SIGN_ETA, ETA, PHI, LUQ) = 0 ENDIF ELSE IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & LUQ_TO_CHANNEL(LUQ))) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 550) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_LZR_INDEX, & MESSAGE) ENDIF ENDIF END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_LZR_INDEX, ' ') DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA LOOKUP_ZERESP(SIGN_ETA, ETA, PHI, LUQ) = 0 END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_LZR_INDEX, ' ') 550 FORMAT( ' ', A, ' ETA', I3, ' PHI', I3, ' ', A) DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (LOOKUP_ZERESP(SIGN_ETA, ETA, PHI, LUQ) .EQ. & MIN_INTEGER) THEN LOOKUP_ZERESP(SIGN_ETA, ETA, PHI, LUQ) = 0 WRITE(MESSAGE, 550) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_LZR_INDEX, & MESSAGE) ENDIF END DO END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check ENERGY_SCALE_SHIFT C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (LUQ_LOCAL_RESCALING(SIGN_ETA, ETA, LUQ) .EQ. & MIN_INTEGER) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, 1, & LUQ_TO_CHANNEL(LUQ))) THEN MISSING_ITEM = .TRUE. ELSE LUQ_LOCAL_RESCALING(SIGN_ETA, ETA, LUQ) = 0 ENDIF ELSE IF (DAC_DEFINED(SIGN_ETA, ETA, 1, & LUQ_TO_CHANNEL(LUQ))) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 600) ST_SIGN(SIGN_ETA), ETA, & ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, I_ESS_INDEX, & MESSAGE) ENDIF ENDIF END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_ESS_INDEX, ' ') DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA LUQ_LOCAL_RESCALING(SIGN_ETA, ETA, LUQ) = 0 END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_ESS_INDEX, ' ') 600 FORMAT( ' ', A, ' ETA', I3, ' ',A) DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (LUQ_LOCAL_RESCALING(SIGN_ETA, ETA, LUQ) .EQ. & MIN_INTEGER) THEN LUQ_LOCAL_RESCALING(SIGN_ETA, ETA, LUQ) = 0 WRITE(MESSAGE, 550) ST_SIGN(SIGN_ETA), ETA, ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_ESS_INDEX, & MESSAGE) ENDIF END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check FINAL_FITTING C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO PAGE = PAGE_NUM_MIN, PAGE_NUM_MAX DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (FINAL_FITTING(SIGN_ETA, ETA, PHI, LUQ, PAGE) .EQ. & MIN_REAL) THEN IF ((DAC_DEFINED(SIGN_ETA, ETA, PHI, & LUQ_TO_CHANNEL(LUQ))) .AND. (LUQ_PAGE_INDEX(LUQ, & PAGE) .NE. 0)) THEN MISSING_ITEM = .TRUE. ELSE FINAL_FITTING(SIGN_ETA, ETA, PHI, LUQ, PAGE) = 0.0 ENDIF ELSE IF ((DAC_DEFINED(SIGN_ETA, ETA, PHI, & LUQ_TO_CHANNEL(LUQ))) .AND. (LUQ_PAGE_INDEX(LUQ, & PAGE) .NE. 0)) THEN EMPTY_ITEM = .FALSE. ELSE WRITE (MESSAGE, 650) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_LUQ(LUQ), PAGE CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, & I_FNF_INDEX, MESSAGE) ENDIF ENDIF END DO END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_FNF_INDEX, ' ') DO PAGE = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA FINAL_FITTING(SIGN_ETA, ETA, PHI, LUQ, PAGE) = 0.0 END DO END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_FNF_INDEX, ' ') 650 FORMAT(' ', A, ' MAGN_ETA', I3, ' PHI', I3, ' ', A, ' PAGE', I3) DO PAGE = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO LUQ = EM_ET_QUANT, PY_QUANT DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (FINAL_FITTING(SIGN_ETA, ETA, PHI, LUQ, PAGE) .EQ. & MIN_REAL) THEN FINAL_FITTING(SIGN_ETA, ETA, PHI, LUQ, PAGE) = 0.0 WRITE(MESSAGE, 650) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_LUQ(LUQ), PAGE CALL MESSAGE_OUT(MES_PASS_THROUGH, I_FNF_INDEX, & MESSAGE) ENDIF END DO END DO END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check TRANSV_ENERGY_CUT C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. C DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (TRANSV_ENERGY_CUT(SIGN_ETA, ETA, LUQ) .EQ. & MIN_REAL) THEN IF (DAC_DEFINED( SIGN_ETA, ETA, 1, LUQ_TO_CHANNEL(LUQ))) & THEN MISSING_ITEM = .TRUE. ELSE TRANSV_ENERGY_CUT(SIGN_ETA, ETA, LUQ) = 0.0 ENDIF ELSE IF (DAC_DEFINED( SIGN_ETA, ETA, 1, LUQ_TO_CHANNEL(LUQ))) & THEN EMPTY_ITEM = .FALSE. ELSE WRITE (MESSAGE, 680) ST_SIGN(SIGN_ETA), ETA, & ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, & I_TEC_INDEX, MESSAGE) ENDIF ENDIF END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_TEC_INDEX, ' ') DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA TRANSV_ENERGY_CUT( SIGN_ETA, ETA, LUQ) = 0.0 END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_TEC_INDEX, ' ') 680 FORMAT( ' ', A, ' ETA', I3, ' ', A) DO LUQ = EM_ET_QUANT, PY_QUANT DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (TRANSV_ENERGY_CUT(SIGN_ETA, ETA, LUQ) .EQ. & MIN_REAL) THEN TRANSV_ENERGY_CUT(SIGN_ETA, ETA, LUQ) = 0.0 WRITE(MESSAGE, 680) ST_SIGN(SIGN_ETA), ETA, & ST_LUQ(LUQ) CALL MESSAGE_OUT(MES_PASS_THROUGH, I_TEC_INDEX, & MESSAGE) ENDIF END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check PROM_OUTPUT_CUT C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) .EQ. & MIN_INTEGER) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & PROM_TO_CHANNEL(PROM))) THEN MISSING_ITEM = .TRUE. ELSE PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0 ENDIF ELSE IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & PROM_TO_CHANNEL(PROM))) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 700) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_PROM(PROM), INDEX CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PRC_INDEX, & MESSAGE) PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0 ENDIF ENDIF END DO END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_PRC_INDEX, ' ' ) DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0 END DO END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_PRC_INDEX, ' ' ) 700 FORMAT( ' ', A, ' ETA', I3, ' PHI', I3, ' ', A, ' INDEX', & I3) DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) .EQ. & MIN_INTEGER) THEN WRITE(MESSAGE, 700) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_PROM(PROM), INDEX CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PRC_INDEX, & MESSAGE) PROM_CUT(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0 ENDIF END DO END DO END DO END DO END DO ENDIF C- C---------------------------------------------------------------------- C- C- Check PROM_TRANSFER_COEFF C- EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) .EQ. & MIN_REAL) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & PROM_TO_CHANNEL(PROM))) THEN MISSING_ITEM = .TRUE. ELSE PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0.0 ENDIF ELSE IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, & PROM_TO_CHANNEL(PROM))) THEN EMPTY_ITEM = .FALSE. ELSE WRITE(MESSAGE, 750) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_PROM(PROM), INDEX CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PTC_INDEX, & MESSAGE) PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0.0 ENDIF ENDIF END DO END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_PTC_INDEX, ' ' ) DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0.0 END DO END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, I_PTC_INDEX, ' ' ) 750 FORMAT( ' ', A, ' ETA', I3, ' PHI', I3, ' ', A, ' INDEX', & I3) DO INDEX = PAGE_INDEX_MIN, PAGE_INDEX_MAX DO PROM = EM_PROM, PY_PROM DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) .EQ. & MIN_REAL) THEN WRITE(MESSAGE, 750) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_PROM(PROM), INDEX CALL MESSAGE_OUT(MES_PASS_THROUGH, I_PTC_INDEX, & MESSAGE) PROM_SLOPE(SIGN_ETA, ETA, PHI, PROM, INDEX) = 0.0 ENDIF END DO END DO END DO END DO END DO ENDIF C C Check FIRST_LOOKUP_TYPE and SECOND_LOOKUP_TYPE C IF (FIRST_LOOKUP_TYPE .EQ. MIN_INTEGER) THEN FIRST_LOOKUP_TYPE = 0 CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_FLT_INDEX, ' ') ENDIF IF (SECOND_LOOKUP_TYPE .EQ. MIN_INTEGER) THEN FIRST_LOOKUP_TYPE = 0 CALL MESSAGE_OUT(MES_EMPTY_ITEM, I_SLT_INDEX, ' ') ENDIF C C C 999 RETURN END C C C SUBROUTINE CHECK_SAME(ARRAY, SECTION_INDEX) C---------------------------------------------------------------------- C- C- Purpose and Methods : Check if values have been specified in the sections C- TOWER_GEOMETRY_R, TOWER_GEOMETRY_Z, ANALOG_INPUT_SCALING, C- ELECT_NOISE C- C- Inputs : ARRAY the common block array to check C- SECTION_INDEX the identification of the current section C- Outputs : none C- Controls: none C- C- Created 26-JUL-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.PARAMS' INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.INC' INCLUDE 'D0$PARAMS:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$INC:LEVEL1_LOOKUP.INC' INCLUDE 'LSMP$SOURCE:LEVEL1_LOOKUP_EXPANSION.INC' LOGICAL DAC_DEFINED EXTERNAL DAC_DEFINED C C Argument declarations C REAL ARRAY(POS_ETA:NEG_ETA, & ETA_RANGE_MIN:ETA_RANGE_MAX, & PHI_MIN:PHI_MAX, & EM_TOWER:* ) INTEGER SECTION_INDEX C C Local variables C INTEGER SIGN_ETA INTEGER ETA INTEGER PHI INTEGER CHANNEL CHARACTER*80 MESSAGE LOGICAL EMPTY_ITEM LOGICAL MISSING_ITEM INTEGER MAX_CHANNEL C C arrays to convert enumerated values to strings C CHARACTER*5 ST_SIGN(POS_ETA:NEG_ETA) CHARACTER*3 ST_CHANNEL(EM_TOWER:TOT_TOWER) C C Don't do any of this if DIAGNOSTICS aren't enabled C IF (DIAGNOSTICS .EQV. .FALSE.) GOTO 999 C C initialize the arrays C ST_SIGN(POS_ETA) = 'PLUS' ST_SIGN(NEG_ETA) = 'MINUS' ST_CHANNEL(EM_TOWER) = 'EM ' ST_CHANNEL(HD_TOWER) = 'HD ' ST_CHANNEL(TOT_TOWER) = 'TOT' C C C EMPTY_ITEM = .TRUE. MISSING_ITEM = .FALSE. IF ((SECTION_INDEX .EQ. I_TRN_INDEX) .OR. (SECTION_INDEX .EQ. & I_TZN_INDEX)) THEN MAX_CHANNEL = TOT_TOWER ELSE MAX_CHANNEL = HD_TOWER ENDIF C DO CHANNEL = EM_TOWER, MAX_CHANNEL DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (ARRAY(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. MIN_REAL) THEN IF (DAC_DEFINED(SIGN_ETA, ETA, PHI, CHANNEL)) THEN MISSING_ITEM = .TRUE. ELSE ARRAY(SIGN_ETA, ETA, PHI, CHANNEL) = 0.0 ENDIF ELSE IF (DAC_DEFINED( SIGN_ETA, ETA, PHI, CHANNEL)) THEN EMPTY_ITEM = .FALSE. ELSE WRITE (MESSAGE, 100) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_CHANNEL(CHANNEL) CALL MESSAGE_OUT(MES_UNDEFINED_SPECIFIED, & SECTION_INDEX, MESSAGE) ENDIF ENDIF END DO END DO END DO END DO C IF (EMPTY_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_EMPTY_ITEM, SECTION_INDEX, ' ') DO CHANNEL = EM_TOWER, MAX_CHANNEL DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA ARRAY( SIGN_ETA, ETA, PHI, CHANNEL) = 0.0 END DO END DO END DO END DO C ELSEIF (MISSING_ITEM .EQV. .TRUE.) THEN CALL MESSAGE_OUT(MES_MISSING_ITEM, SECTION_INDEX, ' ') 100 FORMAT( ' ', A, ' ETA', I3, ' PHI', I3,' ', A) DO CHANNEL = EM_TOWER, MAX_CHANNEL DO PHI = PHI_MIN, PHI_MAX DO ETA = ETA_RANGE_MIN, ETA_RANGE_MAX DO SIGN_ETA = POS_ETA, NEG_ETA IF (ARRAY(SIGN_ETA, ETA, PHI, CHANNEL) .EQ. MIN_REAL) & THEN ARRAY( SIGN_ETA, ETA, PHI, CHANNEL) = 0.0 WRITE(MESSAGE, 100) ST_SIGN(SIGN_ETA), ETA, PHI, & ST_CHANNEL(CHANNEL) CALL MESSAGE_OUT(MES_PASS_THROUGH, SECTION_INDEX, & MESSAGE) ENDIF END DO END DO END DO END DO ENDIF C 999 RETURN END C C C FUNCTION DAC_DEFINED(SIGN_ETA, ETA, PHI, CHANNEL) C---------------------------------------------------------------------- C- C- Purpose and Methods : Returns whether or not DOWNLOADED_BYTE is defined C- for the given set of coordinates. It is defined for CHANNEL EM or C- HD, if DOWNLOADED_BYTE is non-zero for the given coordinates of C- SIGN_ETA, MAGN_ETA, PHI, and CHANNEL. It is defined for CHANNEL TOT if C- DOWNLOADED_BYTE is non-zero for both CHANNEL EM and HD, given the other C- coordinates. C- C- Returned value : Whether DOWNLOADED_BYTE is defined for the given C- coordinates C- Inputs : SIGN_ETA The coordinates to use C- MAGN_ETA C- PHI C- CHANNEL C- Outputs : none C- Controls: none C- C- Created 27-JUL-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.PARAMS' INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.INC' INCLUDE 'D0$PARAMS:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$INC:LEVEL1_LOOKUP.INC' INCLUDE 'LSMP$SOURCE:LEVEL1_LOOKUP_EXPANSION.INC' C C Argument declarations C INTEGER SIGN_ETA, ETA, PHI, CHANNEL LOGICAL DAC_DEFINED C C Check the status C IF (CHANNEL .NE. TOT_TOWER) THEN IF (DAC_BYTE(SIGN_ETA, ETA, PHI, CHANNEL) .NE. 0) THEN DAC_DEFINED = .TRUE. ELSE DAC_DEFINED = .FALSE. ENDIF ELSE IF ((DAC_BYTE(SIGN_ETA, ETA, PHI, EM_TOWER) .NE. 0) .AND. & (DAC_BYTE(SIGN_ETA, ETA, PHI, HD_TOWER) .NE. 0)) THEN DAC_DEFINED = .TRUE. ELSE DAC_DEFINED = .FALSE. ENDIF ENDIF C 999 RETURN END