C---------------------------------------------------------------------- C- C- Created 12-OCT-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- C C The following is a collection of miscellaneous functions and C subroutines for the trigger monitor program. C FUNCTION TIME_SINCE_INIT() C---------------------------------------------------------------------- C- C- Purpose and Methods : Returns the time in seconds since the trigger C- control node has been initialized. C- C- Returned value : Time in seconds C- Inputs : data block information C- Outputs : none C- Controls: none C- C- NOTE: The common block variable DATABLOCK must have been loaded prior to C- calling this function. C- C- Created 12-OCT-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LEVEL1_LOOKUP.PARAMS' INCLUDE 'LEVEL1_CAL_TRIG.PARAMS' INCLUDE 'LEVEL1_FRAMEWORK.PARAMS' INCLUDE 'LEVEL1_TRIGGER_DATA_BLOCK.INC' INCLUDE 'LV1_MPOOL_RAW.INC' REAL BEAM_CROSSING_PERIOD EXTERNAL BEAM_CROSSING_PERIOD C INTEGER TIME_SINCE_INIT C C Get the time since last initialization C TIME_SINCE_INIT = 0 CALL MVBITS(DATABLOCK(BEAM_CROSS_SCALER+2), 0, 8, & TIME_SINCE_INIT, 0) CALL MVBITS(DATABLOCK(BEAM_CROSS_SCALER+3), 0, 8, & TIME_SINCE_INIT, 8) CALL MVBITS(DATABLOCK(BEAM_CROSS_SCALER+4), 0, 8, & TIME_SINCE_INIT, 16) C C Convert to seconds C TIME_SINCE_INIT = IFIX( FLOAT( TIME_SINCE_INIT) * & (BEAM_CROSSING_PERIOD(DELTA_TIME, DELTA_BEAM_CROSSING)*2**16)) C C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE NUM_EVENTS_TRANSFERRED(UNITS, GIGAS) C---------------------------------------------------------------------- C- C- Purpose and Methods : Find the number of events transferred so far by the C- trigger control node. C- C- Inputs : Data block information C- Outputs : UNITS The number of events transferred MOD 2**30 C- GIGAS The number of events transferred / 2** 30 C- Controls: none C- C- NOTE: The common block array DATABLOCK must be initialized prior to C- calling this routine. C- C- Created 12-OCT-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 19-MAR-1992 Philippe Laurens, Steven Klocek C- This now calls L1_EXTRACT_5BYTE_SCALER.FOR C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LEVEL1_LOOKUP.PARAMS' INCLUDE 'LEVEL1_CAL_TRIG.PARAMS' INCLUDE 'LEVEL1_FRAMEWORK.PARAMS' INCLUDE 'LEVEL1_TRIGGER_DATA_BLOCK.INC' INCLUDE 'LV1_MPOOL_RAW.INC' C INTEGER UNITS INTEGER GIGAS C CALL L1_EXTRACT_5BYTE_SCALER(L1_CRATE_HEADER, & TRG_NUM_SCALER, & UNITS, & GIGAS ) C C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE NUM_SPEC_TRIG_FIRED(SPTRG, UNITS, GIGAS) C---------------------------------------------------------------------- C- C- Purpose and Methods : Find the number specific trigger firings so far C- as counted by the trigger control node. C- C- Inputs : SPTRG The number of the specific trigger to get info on C- Data block information C- Outputs : UNITS The number of events transferred MOD 2**30 C- GIGAS The number of events transferred / 2** 30 C- Controls: none C- C- NOTE: The common block array DATABLOCK must be initialized prior to C- calling this routine. C- C- Created 22-FEB-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 19-MAR-1992 Philippe Laurens, Steven Klocek C- This now calls L1_EXTRACT_5BYTE_SCALER.FOR C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LEVEL1_LOOKUP.PARAMS' INCLUDE 'LEVEL1_CAL_TRIG.PARAMS' INCLUDE 'LEVEL1_FRAMEWORK.PARAMS' INCLUDE 'LEVEL1_TRIGGER_DATA_BLOCK.INC' INCLUDE 'LV1_MPOOL_RAW.INC' C INTEGER SPTRG INTEGER UNITS INTEGER GIGAS C CALL L1_EXTRACT_5BYTE_SCALER(L1_CRATE_HEADER, & SP_TRG_SCALERS+10*SPTRG, & UNITS, & GIGAS ) C C---------------------------------------------------------------------- 999 RETURN END C C C FUNCTION EXTRACT_GLOB_E_SUM(INDEX, SCALE, SIGNED) C---------------------------------------------------------------------- C- C- Purpose and Methods : Extract a 3 byte global energy sum from the C- datablock, and return a value in GeV. C- C- Returned value : The value in GeV (REAL) C- Inputs : C- INDEX The offset into the Data Block C- SCALE A value for GeV/least count C- Outputs : none C- Controls: C- SIGNED Whether the value is a signed 2's complement value C- C- Created 26-APR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_RAW.INC' C REAL EXTRACT_GLOB_E_SUM INTEGER INDEX REAL SCALE LOGICAL SIGNED C INTEGER TEMP INTEGER SIGN_BIT, SIGN_BYTE PARAMETER (SIGN_BIT = 7, SIGN_BYTE = 2) C IF ((SIGNED .EQV. .TRUE.) & .AND. (BTEST(DATABLOCK(INDEX+SIGN_BYTE), SIGN_BIT) & .EQV. .TRUE.)) THEN TEMP = -1 ELSE TEMP = 0 ENDIF C CALL MVBITS(DATABLOCK(INDEX), 0, 8, TEMP, 0) CALL MVBITS(DATABLOCK(INDEX+1), 0, 8, TEMP, 8) CALL MVBITS(DATABLOCK(INDEX+2), 0, 8, TEMP, 16) EXTRACT_GLOB_E_SUM = FLOAT(TEMP) * SCALE C---------------------------------------------------------------------- 999 RETURN END C C C FUNCTION MON_STRIP_STRING(STRING) C---------------------------------------------------------------------- C- C- Purpose and Methods : Strip certain 4 character escape codes from C- the given string. Limit 100 characters in length. C- C- Returned value : The stripped string C- Inputs : STRING the string to be stripped C- Outputs : none C- Controls: none C- C- Created 14-MAY-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE CHARACTER*100 MON_STRIP_STRING CHARACTER*(*) STRING C INTEGER SCOUNT, MCOUNT C MCOUNT = 1 SCOUNT = 1 MON_STRIP_STRING = ' ' DO WHILE (SCOUNT .LE. MIN(LEN(STRING), 100)) IF (STRING(SCOUNT:SCOUNT) .EQ. CHAR(27)) THEN SCOUNT = SCOUNT + 4 ELSE MON_STRIP_STRING(MCOUNT:MCOUNT) = STRING(SCOUNT:SCOUNT) MCOUNT = MCOUNT + 1 SCOUNT = SCOUNT + 1 ENDIF END DO C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE CHECK_L15_OPERATIONAL(L15_OPERATIONAL) C---------------------------------------------------------------------- C- C- Purpose and Methods : Check if Level 1.5 is operational. This is done by C- looking at the state of a particular Andor Term with the logical name C- 'L15_OPERATIONAL'. NOTE that INIT_GLOB_THRSH_AO must be called prior to C- this routine in order to initialize the Andor Term names. C- C- Inputs : Common block data C- Outputs : L15_OPERATIONAL Whether Level 1.5 is operational C- Controls: none C- C- Created 5-MAY-1992 Philippe Laurens, Steven Klocek C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_RAW.INC' INCLUDE 'LV1_GLOB_THRSH_AO.INC' C LOGICAL STATE_AOTERM EXTERNAL STATE_AOTERM C LOGICAL L15_OPERATIONAL C CHARACTER*(*) OPERATIONAL_KEY PARAMETER (OPERATIONAL_KEY = 'LV15_OPERATIONAL') C INTEGER OPERATIONAL_TERM LOGICAL TERM_FOUND LOGICAL FIRST SAVE OPERATIONAL_TERM, FIRST, TERM_FOUND DATA FIRST / .TRUE. / C INTEGER COUNT C IF (FIRST .EQV. .TRUE.) THEN FIRST = .FALSE. TERM_FOUND = .FALSE. DO COUNT = ANDOR_NUM_MIN, ANDOR_NUM_MAX IF (ANDOR_TERM_NAME(COUNT) .EQ. OPERATIONAL_KEY) THEN OPERATIONAL_TERM = COUNT TERM_FOUND = .TRUE. GOTO 100 ENDIF END DO ENDIF C 100 CONTINUE IF (TERM_FOUND .EQV. .TRUE.) THEN L15_OPERATIONAL = STATE_AOTERM(OPERATIONAL_TERM) ELSE L15_OPERATIONAL = .FALSE. ENDIF C C Test mode C C L15_OPERATIONAL = .TRUE. C---------------------------------------------------------------------- 999 RETURN END