SUBROUTINE REZEST_FDC_CDC(P, LAMBDA, M, X DP_P_TOT, DPHI_TOT, DTHETA_TOT) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C This routine estimates the resolution in GlueX for charged particles C in tranverse momentum, azimuthal angle, and polar angle. C C Input arguments, all REAL*4 C C P Magnitude of total momentum (GeV/c) C LAMBDA Dip angle, difference in polar angle in lab between track C and pi/2 (i. e., 90 degrees) (radians) C M Mass of the particle (GeV/c^2) C C Output arguments, all REAL*4 C C DP_P_TOT Relative resolution in transvers momentum ("sigma_{p_t}/p_t") C DPHI_TOT Resolution in azimuthal angle ("sigma_phi") C DTHETA_TOT Resolution in polar angle ("sigma_theta") C C This is a wrapper around the routine REZEST_COMPONENTS which appears C below. That routine combines the measurements in the FDC and CDC where C appropriate. Parameters describing the geometry and materials are C defined in there as well. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC REAL*4 P, LAMBDA, M REAL*4 DP_P_TOT, DPHI_TOT, DTHETA_TOT REAL*4 DP_P_MS(2), DP_P_RES(2), DP_P(2) REAL*4 DPHI_MS(2), DPHI_RES(2), DPHI_K(2), DPHI(2) REAL*4 DTHETA_MS(2), DTHETA_RES(2), DTHETA(2) CALL REZEST_COMPONENTS(P, LAMBDA, M, X DP_P_TOT, DPHI_TOT, DTHETA_TOT, X DP_P_MS, DP_P_RES, DP_P, X DPHI_MS, DPHI_RES, DPHI_K, DPHI, X DTHETA_MS, DTHETA_RES, DTHETA) RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE REZEST_COMPONENTS(P, LAMBDA, M, X DP_P_TOT, DPHI_TOT, DTHETA_TOT, X DP_P_MS, DP_P_RES, DP_P, X DPHI_MS, DPHI_RES, DPHI_K, DPHI, X DTHETA_MS, DTHETA_RES, DTHETA) IMPLICIT NONE CHARACTER*3 DET(2) REAL*4 B, EPSILON(2), N_RL(2), N_RL_FRONT(2) REAL*4 N_RL_ST, N_RL_ENDPLATE REAL*4 LAMBDA, L(2), L_ST REAL*4 N_M_EFF(2), N_M_EFF_POLAR(2), M, P, R_M(2), STEREO REAL*4 DK_MS(2), DK_RES(2), DK(2) REAL*4 DPHI_MS(2), DPHI_RES(2), DPHI_K(2), DPHI(2) REAL*4 DTHETA_MS(2), DTHETA_RES(2), DTHETA(2) REAL*4 DK_INV2TOT, DPHI_INV2TOT, DTHETA_INV2TOT REAL*4 DK_TOT, DPHI_TOT, DTHETA_TOT REAL*4 PT, K, DP_P_TOT REAL*4 DP_P_MS(2), DP_P_RES(2), DP_P(2) REAL*4 N_M(2), N_M_POLAR(2), Z_LENGTH_CDC REAL*4 LAMBDA_CDC_OUTER, LAMBDA_CDC_INNER REAL*4 LAMBDA_CDC_ST_OUTER, LAMBDA_CDC_ST_INNER REAL*4 LAMBDA_FDC_FRONT, LAMBDA_FDC_BACK REAL*4 PIOVER2, L_EFF(2), L_EFF_POLAR(2), Z_MIN_FDC, Z_MAX_FDC REAL*4 R_MIN_CDC, R_MAX_CDC, R_MAX_FDC REAL*4 R_MIN_ST_CDC, R_MAX_ST_CDC REAL*4 N_RL_EFF(2), N_RL_EFF_POLAR(2) REAL*4 TAN_THETA, R, TWO_R, R_INNER, R_OUTER INTEGER*4 I DATA PIOVER2 /1.5707963/ DATA B /2.0/ DATA EPSILON /0.00015, 0.00020/ DATA N_RL /0.03437, 0.028258/ DATA N_RL_FRONT /0.01437, 0.01437/ DATA N_RL_ENDPLATE /0.02810/ DATA R_M /.377475, 0.293/ DATA N_M /25, 24/ DATA N_M_POLAR /8, 24/ DATA DET /'CDC', 'FDC'/ DATA R_MIN_CDC /0.10960/, R_MAX_CDC /0.56534/ DATA R_MIN_ST_CDC /0.16304/, R_MAX_ST_CDC /0.39473/ STEREO = 6.0*3.14159/180.0 R_MAX_FDC = R_MAX_CDC Z_MIN_FDC = 1.90 - 0.65 Z_MAX_FDC = 3.57 - 0.65 Z_LENGTH_CDC = 1.67 - 0.65 L(1) = R_MAX_CDC - R_MIN_CDC L(2) = Z_MAX_FDC - Z_MIN_FDC L_ST = R_MAX_ST_CDC - R_MIN_ST_CDC N_RL_ST = N_RL(1)*L_ST/L(1) LAMBDA_CDC_OUTER = ATAN(Z_LENGTH_CDC/R_MAX_CDC) LAMBDA_CDC_INNER = ATAN(Z_LENGTH_CDC/R_MIN_CDC) LAMBDA_CDC_ST_OUTER = ATAN(Z_LENGTH_CDC/R_MAX_ST_CDC) LAMBDA_CDC_ST_INNER = ATAN(Z_LENGTH_CDC/R_MIN_ST_CDC) LAMBDA_FDC_FRONT = ATAN(Z_MIN_FDC/R_MAX_FDC) LAMBDA_FDC_BACK = ATAN(Z_MAX_FDC/R_MAX_FDC) C C general quantities C PT = P*COS(LAMBDA) K = 0.3*B/PT R = 1.0/K TWO_R = 2.0*R TAN_THETA = TAN(PIOVER2 - LAMBDA) C C CDC angular cases C IF (LAMBDA .GE. LAMBDA_CDC_INNER .OR. TWO_R .LT. R_MIN_CDC) THEN C in the previous, the first, original requirement should be redundant, need to remove it later once this is demonstrated N_M_EFF(1) = 0.0; ELSE IF (LAMBDA .GE. LAMBDA_CDC_OUTER) THEN L_EFF(1) = Z_LENGTH_CDC*TAN(PIOVER2 - LAMBDA) - R_MIN_CDC N_M_EFF(1) = N_M(1)*L_EFF(1)/L(1) N_RL_EFF(1) = N_RL(1)*L_EFF(1)/L(1) R_OUTER = MIN(Z_LENGTH_CDC*TAN_THETA, TWO_R) R_M(1) = 0.5*(R_MIN_CDC + R_OUTER) C Overwrite the material in front of the FDC with the endplate material C if particle passes through endplate. Effect of target will already be C accounted for in the CDC estimate. N_RL_FRONT(2) = N_RL_ENDPLATE ELSE N_M_EFF(1) = N_M(1) L_EFF(1) = L(1) N_RL_EFF(1) = N_RL(1); R_OUTER = MIN(R_MAX_CDC, TWO_R) R_M(1) = 0.5*(R_MIN_CDC + R_OUTER) END IF C write (6,*) 'two_r ', two_r, ' r_outer ', r_outer, C x ' r_m ', r_m(1), C x ' n_m_eff ', n_m_eff(1) C C CDC angular cases, stereo layers C IF (LAMBDA .GE. LAMBDA_CDC_ST_INNER) THEN N_M_EFF_POLAR(1) = 0.0; ELSE IF (LAMBDA .GE. LAMBDA_CDC_ST_OUTER) THEN L_EFF_POLAR(1) = Z_LENGTH_CDC*TAN(PIOVER2 - LAMBDA) X - R_MIN_ST_CDC N_M_EFF_POLAR(1) = N_M_POLAR(1)*L_EFF_POLAR(1)/L_ST N_RL_EFF_POLAR(1) = N_RL_ST*L_EFF_POLAR(1)/L_ST ELSE L_EFF_POLAR(1) = L_ST N_M_EFF_POLAR(1) = N_M_POLAR(1) N_RL_EFF_POLAR(1) = N_RL_ST END IF C C FDC angular cases C IF (LAMBDA .LT. LAMBDA_FDC_FRONT) THEN N_M_EFF(2) = 0.0 N_M_EFF_POLAR(2) = 0.0 ELSE IF (LAMBDA .LT. LAMBDA_FDC_BACK) THEN L_EFF(2) = R_MAX_FDC*TAN(LAMBDA) - Z_MIN_FDC N_M_EFF(2) = N_M(2)*L_EFF(2)/L(2) N_M_EFF_POLAR(2) = N_M_POLAR(2)*L_EFF(2)/L(2) N_RL_EFF(2) = N_RL(2)*L_EFF(2)/L(2) R_OUTER = R_MAX_FDC IF (TWO_R .GT. R_OUTER) THEN R_INNER = TAN_THETA*Z_MIN_FDC R_M(2) = 0.5*(R_INNER + R_OUTER) ELSE R_M(2) = R END IF ELSE L_EFF(2) = L(2) N_M_EFF(2) = N_M(2) N_M_EFF_POLAR(2) = N_M_POLAR(2) N_RL_EFF(2) = N_RL(2) R_OUTER = TAN_THETA*Z_MAX_FDC IF (TWO_R .GT. R_OUTER) THEN R_INNER = TAN_THETA*Z_MIN_FDC R_M(2) = 0.5*(R_INNER + R_OUTER) ELSE R_M(2) = R END IF END IF L_EFF_POLAR(2) = L_EFF(2) N_RL_EFF_POLAR(2) = N_RL_EFF(2); C write (6,*) 'two_r ', two_r, ' r_outer ', r_outer, C x ' r_m ', r_m(2), C x ' n_m_eff ', n_m_eff(2) C C loop over two chambers, CDC then FDC C DK_INV2TOT = 0.0 DPHI_INV2TOT = 0.0 DTHETA_INV2TOT = 0.0 DO I = 1, 2 C WRITE (6, *) DET(I) CALL REZEST_CURVE(DET(I), LAMBDA, L_EFF(I), EPSILON(I), X N_M_EFF(I), P, M, N_RL_EFF(I), B, X DK_MS(I), DK_RES(I), DK(I)) C WRITE (6, *) 'curve', DK_MS(I), DK_RES(I), DK(I) DK_INV2TOT = DK_INV2TOT + 1.0/(DK(I)*DK(I)) DP_P_MS(I) = DK_MS(I)/K DP_P_RES(I) = DK_RES(I)/K DP_P(I) = DK(I)/K CALL REZEST_AZIMUTH(DET(I), LAMBDA, L_EFF(I), EPSILON(I), X N_M_EFF(I), P, M, N_RL_EFF(I), N_RL_FRONT(I), B, X R_M(I), DK(I), X DPHI_MS(I), DPHI_RES(I), DPHI_K(I), DPHI(I)) C WRITE (6, *) 'azimu', DPHI_MS(I), DPHI_RES(I), DPHI_K(I), C X DPHI(I) DPHI_INV2TOT = DPHI_INV2TOT + 1.0/(DPHI(I)*DPHI(I)) CALL REZEST_POLAR(DET(I), LAMBDA, L_EFF_POLAR(I), EPSILON(I), X STEREO, N_M_EFF_POLAR(I), P, M, N_RL_EFF_POLAR(I), X N_RL_FRONT(I), DTHETA_MS(I), DTHETA_RES(I), DTHETA(I)) C WRITE (6, *) 'polar', DTHETA_MS(I), DTHETA_RES(I), DTHETA(I) DTHETA_INV2TOT = DTHETA_INV2TOT + 1.0/(DTHETA(I)*DTHETA(I)) PT = P*COS(LAMBDA) END DO DK_TOT = 1.0/SQRT(DK_INV2TOT) DPHI_TOT = 1.0/SQRT(DPHI_INV2TOT) DTHETA_TOT = 1.0/SQRT(DTHETA_INV2TOT) DP_P_TOT = DK_TOT/K RETURN END C END OF FORTRAN CODE