SUBROUTINE GET_LUM_DATA_FROM_TCC ( BEAM_X_COUNT, & FAST_L0_COUNT, & SLOW_L0_COUNT, & TURN_COUNT, & P_HALO_6X6, & A_HALO_6X6, & P_HALO_WINDOW, & A_HALO_WINDOW, & FZ_LUM_WINDOW ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Request monitoring information from TCC C- and retrieve the Fast L0 Good per bunch scaler counts C- and Slow L0 (|Z| < 120 cm) per bunch scaler counts C- for purpose of luminosity calculation. C- C- These counts are collected by TCC C- The information on TCC is only updated at 5s interval C- and repeated calls to this routine should not be made C- at less than this minimum interval. C- TCC might not be able to update this information when C- the DAQ system is preventing the flow of events C- through Level 1. C- C- The object file and the supporting routines are C- accessed by Dan Owen in C- D0::USER1:[TRGUSER.TRGMON]TRGMON/LIB C- C- Inputs : None C- C- Outputs : BEAM_X_COUNT [I] The total number of beam crossings C- Only the lower 31 bits of this 40 bit C- scaler are returned. C- Return 0 in case of failure. C- This number only applies to C- FAST_L0_COUNT(Pi) and SLOW_L0_COUNT(Pi) C- C- FAST_L0_COUNT(Pi) [I] The number of Fast L0 good scaler count C- for bunch Pi with Pi = 1..6 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- SLOW_L0_COUNT(Pi) [I] The number of Slow L0 (|Z|<120cm) count C- for bunch Pi with Pi = 1..6 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- TURN_COUNT [I] The total number of TURNS around the C- accelerator. ----- C- Only the lower 31 bits of this 40 bit C- scaler are returned. C- Return 0 in case of failure. C- This is a reference number that only C- applies to P_HALO_6X6, A_HALO_6X6, C- P_HALO_WINDOW, A_HALO_WINDOW, C- and FZ_LUM_WINDOW C- C- P_HALO_6X6(Pi) [I] The scaler count of Fast L0 Proton Halo C- for bunch Pi with Pi = 1..6 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- A_HALO_6X6(Pi) [I] The scaler count of Fast L0 Antiproton Halo C- for bunch Pi with Pi = 1..6 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- P_HALO_WINDOW(Wi) [I] The scaler count of Fast L0 Proton Halo C- for Window Wi with Wi = 0..53 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- A_HALO_WINDOW(Wi) [I] The scaler count of Fast L0 Antiproton Halo C- for Window Wi with Wi = 0..53 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- FZ_LUM_WINDOW(Wi) [I] The scaler count of Fast L0 Luminosity signal C- for Window Wi with Wi = 0..53 C- Only the lower 31 bits of these 40 bit C- scalers are returned. C- Return 0 in case of failure. C- C- Created 5-MAY-1995 Philippe Laurens - MSU L1 Trigger C- C- Updated 19-OCT-1995 Philippe Laurens - MSU L1 Trigger C- Add variables for 36x36 bunch tests C- C---------------------------------------------------------------------- IMPLICIT NONE C C Arguments C --------- INTEGER BEAM_X_COUNT PARAMETER P1 = 1, P6 = 6 INTEGER FAST_L0_COUNT ( P1:P6 ) INTEGER SLOW_L0_COUNT ( P1:P6 ) INTEGER TURN_COUNT INTEGER P_HALO_6X6 ( P1:P6 ) INTEGER A_HALO_6X6 ( P1:P6 ) PARAMETER W0 = 0, W53 = 53 INTEGER P_HALO_WINDOW ( W0:W53 ) INTEGER A_HALO_WINDOW ( W0:W53 ) INTEGER FZ_LUM_WINDOW ( W0:W53 ) C C Common blocks and parameters C ---------------------------- INCLUDE 'LV1_MPOOL.PARAMS/LIST' INCLUDE 'LV1_MPOOL_RAW.INC/LIST' C INCLUDE 'LEVEL1_LOOKUP.PARAMS' INCLUDE 'LEVEL1_CAL_TRIG.PARAMS' INCLUDE 'LEVEL1_FRAMEWORK.PARAMS' INCLUDE 'LEVEL1_TRIGGER_DATA_BLOCK.INC' C C Local variables and constants C --------------- INTEGER BUNCH INTEGER WINDOW PARAMETER LOW_24_BITS = 1 PARAMETER HIGH_16_BITS = 2 INTEGER WASTE ( LOW_24_BITS:HIGH_16_BITS, P1:P6 ) INTEGER BUFFER ( LOW_24_BITS:HIGH_16_BITS, P1:P6 ) INTEGER X_7FFFFFFF C C External Functions C ------------------ INTEGER FILL_MONIT_POOL EXTERNAL FILL_MONIT_POOL C C----------------------------------------------------------------------- C build a mask with all bits set except for the MSB X_7FFFFFFF = IBCLR (-1, 31) C IF ( FILL_MONIT_POOL (MP_DATABLOCK) .EQ. 0) THEN C C Success getting information from TCC C ------------------------------------ C CALL L1EXTRACT_BEAMX_SCALER( L1_CRATE_HEADER, & BUFFER, & WASTE ) BEAM_X_COUNT = BUFFER(LOW_24_BITS,1) CALL MVBITS ( BUFFER(HIGH_16_BITS,1), 0, 7, & BEAM_X_COUNT, 24 ) C CALL L1EXTRACT_L0_FAST_Z_SCALERS( L1_CRATE_HEADER, & WASTE, & BUFFER ) C DO BUNCH = P1, P6 C FAST_L0_COUNT(BUNCH) = BUFFER( LOW_24_BITS, BUNCH ) CALL MVBITS ( BUFFER( HIGH_16_BITS, BUNCH ), 0, 7, & FAST_L0_COUNT(BUNCH), 24 ) C END DO C CALL L1EXTRACT_LIVEX_SCALERS ( L1_CRATE_HEADER, & WASTE, & WASTE, & WASTE, & WASTE, & BUFFER ) C DO BUNCH = P1, P6 C SLOW_L0_COUNT(BUNCH) = BUFFER( LOW_24_BITS, BUNCH ) CALL MVBITS ( BUFFER( HIGH_16_BITS, BUNCH ), 0, 7, & SLOW_L0_COUNT(BUNCH), 24 ) C END DO C ELSE C C Failure getting information from TCC C ------------------------------------ C PRINT *, 'GET_LUM_DATA_FROM_TCC failed, ' & //'return zeroes for Lum data' BEAM_X_COUNT = 0 C DO BUNCH = P1, P6 FAST_L0_COUNT (BUNCH) = 0 SLOW_L0_COUNT (BUNCH) = 0 END DO C ENDIF C C IF ( FILL_MONIT_POOL (MP_36X36_SCALERS) .EQ. 0) THEN C C Success getting information from TCC C ------------------------------------ TURN_COUNT = FZLUM_36X36_COUNT(63) IF ( TURN_COUNT .LT. 0 ) & TURN_COUNT = IAND ( TURN_COUNT, X_7FFFFFFF ) C DO BUNCH = P1, P6 P_HALO_6X6 (BUNCH) = PHALO_36X36_COUNT(56+BUNCH) A_HALO_6X6 (BUNCH) = AHALO_36X36_COUNT(56+BUNCH) IF ( P_HALO_6X6 (BUNCH) .LT. 0 ) & P_HALO_6X6 (BUNCH) = IAND ( P_HALO_6X6 (BUNCH), X_7FFFFFFF ) IF ( A_HALO_6X6 (BUNCH) .LT. 0 ) & A_HALO_6X6 (BUNCH) = IAND ( A_HALO_6X6 (BUNCH), X_7FFFFFFF )5 END DO C DO WINDOW = W0, W53 P_HALO_WINDOW (WINDOW) = PHALO_36X36_COUNT(1+WINDOW) A_HALO_WINDOW (WINDOW) = AHALO_36X36_COUNT(1+WINDOW) FZ_LUM_WINDOW (WINDOW) = FZLUM_36X36_COUNT(1+WINDOW) IF ( P_HALO_WINDOW (WINDOW) .LT. 0 ) & P_HALO_WINDOW (WINDOW) = IAND ( P_HALO_WINDOW (WINDOW), & X_7FFFFFFF ) IF ( A_HALO_WINDOW (WINDOW) .LT. 0 ) & A_HALO_WINDOW (WINDOW) = IAND ( A_HALO_WINDOW (WINDOW), & X_7FFFFFFF ) IF ( FZ_LUM_WINDOW (WINDOW) .LT. 0 ) & FZ_LUM_WINDOW (WINDOW) = IAND ( FZ_LUM_WINDOW (WINDOW), & X_7FFFFFFF ) END DO C ELSE C C Failure getting information from TCC C ------------------------------------ C PRINT *, 'GET_LUM_DATA_FROM_TCC failed, ' & //'return zeroes for 36x36 scalers' TURN_COUNT = 0 C DO BUNCH = P1, P6 P_HALO_6X6 (BUNCH) = 0 A_HALO_6X6 (BUNCH) = 0 END DO C DO WINDOW = W0, W53 P_HALO_WINDOW (WINDOW) = 0 A_HALO_WINDOW (WINDOW) = 0 FZ_LUM_WINDOW (WINDOW) = 0 END DO C ENDIF C C---------------------------------------------------------------------- 999 RETURN END