SUBROUTINE DRAW_SPEC_TRIG(CURRENT_TRIG) C---------------------------------------------------------------------- C- C- Purpose and Methods : Draw the Monitor Specific Trigger display for C- the given trigger number. C- C- Inputs : CURRENT_TRIG The number of the trigger to display (1:32) C- Outputs : screen output C- Controls: none C- C- Created 3-DEC-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 19-MAR-1992 Philippe Laurens, Steven Klocek C- Add Specific Trigger exposition and Dead time. C- Remove Auxiliary Veto. C- Updated 2-JUL-1992 Philippe Laurens, Steven Klocek C- Display ST Events Transferred rather than ST C- Fired count. C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_DERIVED.INC' INCLUDE 'LV1_MPOOL_FORMATTED.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_SCREEN_LAYOUT.PARAMS' INTEGER TRULEN EXTERNAL TRULEN C INTEGER CURRENT_TRIG C CHARACTER*132 BUFFER CHARACTER*80 BUF1, BUF2, BUF3 REAL TEMPREAL INTEGER COUNT, COUNT2 C C Write the specific trigger number C CALL INTTOSTR(CURRENT_TRIG, BUFFER(1:2), 1) CALL PUT_STRING(ST_NUMBER_L, ST_NUMBER_C, BUFFER(1:2)) C C Is this a L1.5 Trigger C Write display toggle message C IF (TRIGGER_DATA(CURRENT_TRIG).IS_L15 .EQV. .TRUE.) THEN CALL PUT_STRING(ST_NUMBER_L, ST_NUMBER_C+2, & ', Uses Level 1.5') CALL PUT_STRING(ST_L15_SWITCH_L, ST_L15_SWITCH_C, & ' ( for L1.5 Display)') ELSE CALL PUT_STRING(ST_NUMBER_L, ST_NUMBER_C+2, & ' ') CALL PUT_STRING(ST_L15_SWITCH_L, ST_L15_SWITCH_C, & ' ') ENDIF C C Write the current time C CALL PUT_STRING(ST_CURRENT_TIME_L, ST_CURRENT_TIME_C, & CURRENT_TIME) C C Write global event transfer rate C CALL BUILD_REAL_STRING(GLOB_TRANSFER_RATE, 2, & BUFFER(1:ST_EVENT_TRANS_W)) CALL PUT_STRING(ST_EVENT_TRANS_L, ST_EVENT_TRANS_C, & BUFFER(1:ST_EVENT_TRANS_W)) C C Write monitoring info status C IF (FRAMEWORK_RUNNING .EQV. .TRUE.) THEN CALL PUT_STRING(ST_MONIT_STATUS_L, ST_MONIT_STATUS_L1_C, & 'Running') ELSE CALL PUT_STRING(ST_MONIT_STATUS_L, ST_MONIT_STATUS_L1_C, & 'Paused ') ENDIF C IF (INFO_FRESH .EQV. .TRUE.) THEN CALL PUT_STRING(ST_MONIT_STATUS_L, ST_MONIT_STATUS_DB_C, & 'Fresh') ELSE CALL PUT_STRING(ST_MONIT_STATUS_L, ST_MONIT_STATUS_DB_C, & 'Stale') ENDIF C C Write specific trigger event transfer count C IF (TRIGGER_DATA(CURRENT_TRIG).EVENT_TRANS_COUNT_GIGAS & .NE. 0) THEN IF (TRIGGER_DATA(CURRENT_TRIG).EVENT_TRANS_COUNT_GIGAS & .GE. 1E4) THEN BUFFER = '****G/**********' ELSE BUFFER = ' G/ ' CALL INTTOSTR( & TRIGGER_DATA(CURRENT_TRIG).EVENT_TRANS_COUNT_GIGAS, & BUFFER(1:4), 1) CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).EVENT_TRANS_COUNT, & BUFFER(7:16), 10) ENDIF ELSE BUFFER = ' ' CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).EVENT_TRANS_COUNT, & BUFFER(1:16), 1) ENDIF CALL PUT_STRING(ST_FIRED_COUNT_L, ST_FIRED_COUNT_C, BUFFER(1:16)) C C Write specific trigger fired for this event C IF (TRIGGER_DATA(CURRENT_TRIG).TRIGGER_FIRED .EQV. .TRUE.) THEN CALL PUT_STRING(ST_FIRED_EVENT_L, ST_FIRED_EVENT_C, 'Yes') ELSE CALL PUT_STRING(ST_FIRED_EVENT_L, ST_FIRED_EVENT_C, 'No ') ENDIF C C Write spec. trig. fired rate C TEMPREAL = SPTRG_FIRE_RATE(CURRENT_TRIG) CALL BUILD_REAL_STRING(TEMPREAL, 2, BUFFER(1:ST_FIRED_RATE_W)) CALL PUT_STRING(ST_FIRED_RATE_L, ST_FIRED_RATE_C, & BUFFER(1:ST_FIRED_RATE_W) ) C C Write prescaling ratio C CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).PRSCL_RATIO, & BUFFER(1:ST_PRSCL_W), 1) CALL PUT_STRING(ST_PRSCL_L, ST_PRSCL_C, BUFFER(1:ST_PRSCL_W)) C C Write spec. trig. AndOr rate C CALL BUILD_REAL_STRING(TRIGGER_DATA(CURRENT_TRIG).ANDOR_FIRE_RATE, & 2, BUFFER(1:ST_TRGAO_RATE_W)) CALL PUT_STRING(ST_TRGAO_RATE_L, ST_TRGAO_RATE_C, & BUFFER(1:ST_TRGAO_RATE_W) // ' Hz') C C Write Readout Time C CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).READ_TIME, & BUFFER(1:ST_RO_TIME_W), 1) CALL PUT_STRING(ST_RO_TIME_L, ST_RO_TIME_C, & BUFFER(1:ST_RO_TIME_W)) CALL PUT_STRING(ST_RO_TIME_L, ST_RO_TIME_C+ST_RO_TIME_W, ' ms') C C Level 1.5 input C CALL BUILD_REAL_STRING(TRIGGER_DATA(CURRENT_TRIG).L15_INPUT_HZ, & 2, BUFFER(1:ST_L15_INPUT_W) ) CALL PUT_STRING(ST_L15_INPUT_L, ST_L15_INPUT_C, & BUFFER(1:ST_L15_INPUT_W) ) C C Level 1.5 reject C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).ST_L15_REJECT_PCT, & 1, BUFFER(1:ST_L15_REJECT_W) ) CALL PUT_STRING(ST_L15_REJECT_L, ST_L15_REJECT_C, & BUFFER(1:ST_L15_REJECT_W) ) C C Dead Beam Crossing % C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).L15_DEADX_PCT, & 1, BUFFER(1:ST_L15_DEADX_W) ) CALL PUT_STRING(ST_L15_DEADX_L, ST_L15_DEADX_C, & BUFFER(1:ST_L15_DEADX_W) ) C C Write Specific Trigger Exposition Count C BUFFER = ' ' IF (TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_COUNT_GIGAS & .NE. 0) THEN IF (TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_COUNT_GIGAS & .GE. 1E4) THEN BUFFER = '****G/**********' ELSE BUFFER = ' G/ ' CALL INTTOSTR( & TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_COUNT_GIGAS, & BUFFER(1:4), 1) CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_COUNT, & BUFFER(7:16), 9) ENDIF ELSE BUFFER = ' ' CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_COUNT, & BUFFER(1:16), 1) ENDIF BUFFER(ST_EXPOS_W+1:ST_EXPOS_W+1) = '=' TEMPREAL = TRIGGER_DATA(CURRENT_TRIG).GLOB_EXPOS_HZ CALL BUILD_REAL_STRING(TEMPREAL, 2, & BUFFER(ST_EXPOS_W+2:ST_EXPOS_W+1+ST_EXPOS_HZ_W) ) CALL PUT_STRING(ST_EXPOS_L, ST_EXPOS_C, & BUFFER(1:ST_EXPOS_W+1+ST_EXPOS_HZ_W)//' Hz' ) C C Write Specific Trigger Exposition and Level 0 C BUFFER = ' ' IF (TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0_GIGAS & .NE. 0) THEN IF (TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0_GIGAS & .GE. 1E4) THEN BUFFER = '****G/**********' ELSE BUFFER = ' G/ ' CALL INTTOSTR( & TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0_GIGAS, & BUFFER(1:4), 1) CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0, & BUFFER(7:16), 9) ENDIF ELSE BUFFER = ' ' CALL INTTOSTR(TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0, & BUFFER(1:16), 1) ENDIF CALL PUT_STRING(ST_EXPOS_L0_L, ST_EXPOS_L0_C, BUFFER(1:16)//'=') C C Write Exposition and Level 0 Hz C BUFFER = ' ' TEMPREAL = TRIGGER_DATA(CURRENT_TRIG).TRIGGER_EXPOS_AND_L0_HZ CALL BUILD_REAL_STRING(TEMPREAL, 2, BUFFER(1:ST_EXPOS_L0_HZ_W) ) CALL PUT_STRING(ST_EXPOS_L0_HZ_L, ST_EXPOS_L0_HZ_C, & BUFFER(1:ST_EXPOS_L0_HZ_W)//' Hz') C C Write Dead Time % C BUFFER = ' ' CALL BUILD_PERCENT_STRING( & 100. - TRIGGER_DATA(CURRENT_TRIG).GLOB_EXPOS_PERCENT, & 2, BUFFER(1:ST_DEAD_TIME_W) ) CALL PUT_STRING(ST_DEAD_TIME_L, ST_DEAD_TIME_C, & BUFFER(1:ST_DEAD_TIME_W) ) C C Write Prescaling Veto line C BUFFER = ' ' C IF (TRIGGER_DATA(CURRENT_TRIG).PRSCLV_PROG .EQV. .TRUE.) THEN BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' ENDIF BUFFER(ST_STATE_O:ST_STATE_O+1) = 'NA' C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).PRSCLV_PERCENT, & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' CALL PUT_STRING(ST_PRSCLV_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) CC CC Write Level 1.5 Veto line CC C BUFFER = ' ' CC C IF (TRIGGER_DATA(CURRENT_TRIG).LEV15V_PROG .EQV. .TRUE.) THEN C BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' C ENDIF C BUFFER(ST_STATE_O:ST_STATE_O+1) = 'NA' CC C CALL BUILD_PERCENT_STRING( C & TRIGGER_DATA(CURRENT_TRIG).LEV15V_PERCENT, C & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) CC C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' C CALL PUT_STRING(ST_LEV15V_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) C C Write Level 2.0 Veto line C BUFFER = ' ' C IF (TRIGGER_DATA(CURRENT_TRIG).LEV20V_PROG .EQV. .TRUE.) THEN BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' ENDIF C IF (TRIGGER_DATA(CURRENT_TRIG).LEV20V_STATE .EQV. .TRUE.) THEN BUFFER(ST_STATE_O:ST_STATE_O+1) = 'T ' ELSE BUFFER(ST_STATE_O:ST_STATE_O+1) = 'F ' ENDIF C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).LEV20V_PERCENT, & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' CALL PUT_STRING(ST_LEV20V_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) C C Write Global Veto line C BUFFER = ' ' C IF (TRIGGER_DATA(CURRENT_TRIG).GLOBV_PROG .EQV. .TRUE.) THEN BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' ENDIF BUFFER(ST_STATE_O:ST_STATE_O+1) = 'NA' C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).GLOBV_PERCENT, & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' CALL PUT_STRING(ST_GLOBV_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) C C Write Front-End Busy Veto line C BUFFER = ' ' C IF (TRIGGER_DATA(CURRENT_TRIG).FEV_PROG .EQV. .TRUE.) THEN BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' ENDIF C IF (TRIGGER_DATA(CURRENT_TRIG).FEV_STATE .EQV. .TRUE.) THEN BUFFER(ST_STATE_O:ST_STATE_O+1) = 'T ' ELSE BUFFER(ST_STATE_O:ST_STATE_O+1) = 'F ' ENDIF C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).FEV_PERCENT, 2, & BUFFER(ST_PERCENT_O:ST_PERCENT_E)) C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' CALL PUT_STRING(ST_FEBV_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) C C Write Auxilary Veto line C C The Auxilary Veto info is not available, so remove it from the display C to make room for other information. CC C BUFFER = ' ' CC C IF (TRIGGER_DATA(CURRENT_TRIG).AUX2V_PROG .EQV. .TRUE.) THEN C BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' C ENDIF C BUFFER(ST_STATE_O:ST_STATE_O+1) = 'NA' CC C CALL BUILD_PERCENT_STRING(TRIGGER_DATA(CURRENT_TRIG).AUX2V_PERCENT, C & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) CC C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' C CALL PUT_STRING(ST_AUXV_L, ST_PROGRAM_C, BUFFER(1:ST_PROGRAM_E)) C C Write Autodisable Veto line C BUFFER = ' ' C IF (TRIGGER_DATA(CURRENT_TRIG).AUTOV_PROG .EQV. .TRUE.) THEN BUFFER(ST_PROGRAM_O:ST_PROGRAM_O) = 'T' ENDIF BUFFER(ST_STATE_O:ST_STATE_O+1) = 'NA' C CALL BUILD_PERCENT_STRING( & TRIGGER_DATA(CURRENT_TRIG).AUTOV_PERCENT, & 2, BUFFER(ST_PERCENT_O:ST_PERCENT_E)) C BUFFER(ST_PROGRAM_E-1:ST_PROGRAM_E) = ' %' CALL PUT_STRING(ST_AUTODISV_L, ST_PROGRAM_C, & BUFFER(1:ST_PROGRAM_E)) C C Write Geographic Section Lines C C Front End Busy programming C BUFFER = ' ' DO COUNT = GEO_NUM_MIN, GEO_NUM_MAX IF (TRIGGER_DATA(CURRENT_TRIG).WATCHBUSY(COUNT) .EQV. .TRUE.) & THEN BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'T' ENDIF END DO COUNT = TRULEN(BUFFER) CALL PUT_STRING(ST_FEB_PROG_L, ST_FEB_PROG_C, & BUFFER(1:GEO_NUM_MAX*2+1)) C C Front End Busy States C BUFFER = ' ' DO COUNT = GEO_NUM_MIN, GEO_NUM_MAX IF (GEO_SECT_DATA(COUNT).ALLOCATED .EQV. .TRUE.) THEN IF (GEO_SECT_DATA(COUNT).FE_BUSY_STATE .EQ. & .TRUE.) THEN BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'T' ELSE BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'F' ENDIF ENDIF END DO COUNT = TRULEN(BUFFER) CALL PUT_STRING(ST_FEB_STAT_L, ST_FEB_STAT_C, & BUFFER(1:GEO_NUM_MAX*2+1)) C C Start Digitize programming C BUFFER = ' ' DO COUNT = GEO_NUM_MIN, GEO_NUM_MAX IF (TRIGGER_DATA(CURRENT_TRIG).ST_DIG(COUNT) .EQV. .TRUE.) & THEN BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'T' ENDIF END DO COUNT = TRULEN(BUFFER) CALL PUT_STRING(ST_STD_PROG_L, ST_STD_PROG_C, & BUFFER(1:GEO_NUM_MAX*2+1)) C C Start Digitize states C BUFFER = ' ' DO COUNT = GEO_NUM_MIN, GEO_NUM_MAX IF (GEO_SECT_DATA(COUNT).ALLOCATED .EQV. .TRUE.) THEN IF (GEO_SECT_DATA(COUNT).ST_DIG_STATE & .EQV. .TRUE.) THEN BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'T' ELSE BUFFER((COUNT)*2+1:(COUNT)*2+1) = 'F' ENDIF ENDIF END DO COUNT = TRULEN(BUFFER) CALL PUT_STRING(ST_STD_STAT_L, ST_STD_STAT_C, & BUFFER(1:GEO_NUM_MAX*2+1)) C C Write AndOr Required Term # line C Can put up to 16 terms on screen at once C BUF1 = ' ' BUF2 = ' ' BUF3 = ' ' COUNT2 = 0 DO COUNT = ANDOR_NUM_MIN, ANDOR_NUM_MAX IF (TRIGGER_DATA(CURRENT_TRIG).ANDOR_ACTIVE(COUNT)) THEN COUNT2 = COUNT2 + 1 IF (COUNT2 .EQ. 17) THEN CALL PUT_STRING(ST_MANY_TERMS_L, ST_MANY_TERMS_C, & 'More than 16 And-Or terms required') GOTO 100 ELSE CALL INTTOSTR(COUNT, & BUF1((COUNT2-1)*4+1:(COUNT2-1)*4+3), 1) IF (TRIGGER_DATA(CURRENT_TRIG).ANDOR_POLARIZATION(COUNT)) & THEN BUF2((COUNT2-1)*4+3:(COUNT2-1)*4+3) = 'T' ELSE BUF2((COUNT2-1)*4+3:(COUNT2-1)*4+3) = 'F' ENDIF IF (ANDOR_STATE(COUNT)) THEN BUF3((COUNT2-1)*4+3:(COUNT2-1)*4+3) = 'T' ELSE BUF3((COUNT2-1)*4+3:(COUNT2-1)*4+3) = 'F' ENDIF ENDIF ENDIF END DO C CALL PUT_STRING(ST_MANY_TERMS_L, ST_MANY_TERMS_C, & '..................................') 100 CONTINUE C C The following needs to be changed to accomadate paging C CALL PUT_STRING(ST_REQTERM_NUM_L, ST_REQTERM_NUM_C, & BUF1(1:ST_AOTERM_E)) C CALL PUT_STRING(ST_REQPOLAR_L, ST_REQPOLAR_C, & BUF2(1:ST_AOTERM_E)) C CALL PUT_STRING(ST_CURSTATE_L, ST_CURSTATE_C, & BUF3(1:ST_AOTERM_E)) C CALL MOVE_CURSOR_SAFE() C C---------------------------------------------------------------------- 999 CONTINUE CALL FLUSH_SCREEN() RETURN END