PROGRAM test_comptonprofiles USE, INTRINSIC :: ISO_C_BINDING USE, INTRINSIC :: ISO_FORTRAN_ENV USE :: xraylib USE :: libtest IMPLICIT NONE TYPE(xrl_error), POINTER :: error => NULL() REAL (C_DOUBLE) :: profile, profile1, profile2 ! pz == 0.0 profile = ComptonProfile(26, 0.0_C_DOUBLE, error) CALL assert(abs(profile - 7.060_C_DOUBLE) < 1E-6) CALL assert(.NOT. ASSOCIATED(error)) profile = ComptonProfile_Partial(26, N1_SHELL, 0.0_C_DOUBLE, error) CALL assert(abs(profile - 1.550_C_DOUBLE) < 1E-6) CALL assert(.NOT. ASSOCIATED(error)) profile1 = ComptonProfile_Partial(26, L2_SHELL, 0.0_C_DOUBLE, error) profile2 = ComptonProfile_Partial(26, L3_SHELL, 0.0_C_DOUBLE, error) CALL assert(abs(profile1 - profile2) < 1E-6) CALL assert(abs(profile1 - 0.065_C_DOUBLE) < 1E-6) CALL assert(.NOT. ASSOCIATED(error)) ! pz == 100.0 profile = ComptonProfile(26, 100.0_C_DOUBLE, error) CALL assert(abs(profile - 1.800E-05_C_DOUBLE) < 1E-8) CALL assert(.NOT. ASSOCIATED(error)) profile = ComptonProfile_Partial(26, N1_SHELL, 100.0_C_DOUBLE, error) CALL assert(abs(profile - 5.100E-09_C_DOUBLE) < 1E-12) CALL assert(.NOT. ASSOCIATED(error)) profile1 = ComptonProfile_Partial(26, L2_SHELL, 100.0_C_DOUBLE, error) profile2 = ComptonProfile_Partial(26, L3_SHELL, 100.0_C_DOUBLE, error) CALL assert(abs(profile1 - profile2) < 1E-10) CALL assert(abs(profile1 - 1.100E-08_C_DOUBLE) < 1E-10) CALL assert(.NOT. ASSOCIATED(error)) ! pz == 50.0 -> interpolated! profile = ComptonProfile(26, 50.0_C_DOUBLE, error) CALL assert(abs(profile - 0.0006843950273082384_C_DOUBLE) < 1E-8) CALL assert(.NOT. ASSOCIATED(error)) profile = ComptonProfile_Partial(26, N1_SHELL, 50.0_C_DOUBLE, error) CALL assert(abs(profile - 2.4322755767709126e-07_C_DOUBLE) < 1E-10) CALL assert(.NOT. ASSOCIATED(error)) profile1 = ComptonProfile_Partial(26, L2_SHELL, 50.0_C_DOUBLE, error) profile2 = ComptonProfile_Partial(26, L3_SHELL, 50.0_C_DOUBLE, error) CALL assert(abs(profile1 - profile2) < 1E-10) CALL assert(abs(profile1 - 2.026953933016568e-06_C_DOUBLE) < 1E-10) CALL assert(.NOT. ASSOCIATED(error)) ! bad input profile = ComptonProfile(0, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile(0, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile(102, 0.0_C_DOUBLE, error) CALL assert(.NOT. ASSOCIATED(error)) profile = ComptonProfile(103, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile(103, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile(26, -1.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile(26, -1.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile_Partial(0, K_SHELL, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile_Partial(0, K_SHELL, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile_Partial(102, K_SHELL, 0.0_C_DOUBLE, error) CALL assert(.NOT. ASSOCIATED(error)) profile = ComptonProfile_Partial(103, K_SHELL, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile_Partial(103, K_SHELL, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile_Partial(26, K_SHELL, -1.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile_Partial(26, K_SHELL, -1.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile_Partial(26, -1, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile_Partial(26, -1, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) profile = ComptonProfile_Partial(26, N2_SHELL, 0.0_C_DOUBLE) CALL assert(profile == 0.0) profile = ComptonProfile_Partial(26, N2_SHELL, 0.0_C_DOUBLE, error) CALL assert(profile == 0.0) CALL assert(ASSOCIATED(error)) CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT) DEALLOCATE(error) ENDPROGRAM test_comptonprofiles