Loading sources/read_data.f90 +20 −22 Original line number Diff line number Diff line Loading @@ -990,7 +990,7 @@ contains type(config_struct), intent(in) :: config ! integer :: iscan, imon integer :: iscan integer :: itp, ixp, iyp integer, dimension(2) :: ilam Loading @@ -1006,20 +1006,18 @@ contains tau_mean = 0 iscan_do: do iscan=1, scan_data%number_of_points associate(scan_point => scan_data%scan_point(iscan)) associate(dspec => scan_point%spectrum(0) ) select case(ftype%inst_id) case (INST_SNSNSE) lam(1) = scan_point%physics%lambda_min lam(2) = scan_point%physics%lambda_max ! IMPORTANT: start from 1! call transform_monitor_spectrum(size(config%monitors), scan_point%spectrum(1:), dspec, config, lam) case (INST_JNSE) lam = scan_point%physics%lambda end select associate(dspec => scan_point%spectrum(0) ) do imon=1, size(config%monitors) call transform_monitor_spectrum(scan_point%spectrum(imon), imon, & dspec, config, lam) end do itp_do: do itp=0, scan_point%no_lam ilam = [1, no_tchans] Loading Loading @@ -1713,14 +1711,14 @@ contains ! ============================================================================== ! transform monitor spectrum (to its position) ! ============================================================================== subroutine transform_monitor_spectrum(mon_spec, imon, det_spec, config, lam) !type(scan_data_struct), intent(inout) :: scan_point type(spectrum_struct), intent(inout) :: mon_spec integer, intent(in) :: imon subroutine transform_monitor_spectrum(num_mon, mon_spec, det_spec, config, lam) integer, intent(in) :: num_mon type(spectrum_struct), intent(inout), dimension(:) :: mon_spec type(spectrum_struct), intent(in) :: det_spec type(config_struct), intent(in) :: config real(kind=DBL), intent(in), dimension(2) :: lam ! integer :: imon integer :: it integer :: nlambda real(kind=DBL) :: dlam Loading @@ -1731,17 +1729,17 @@ contains ! FIXME check monitor spectrum transformation nlambda = det_spec%no_lambda_bins dlam = (lam(2) - lam(1)) / nlambda det_src = config%detector%distance%value - config%source%distance%value do imon=1, num_mon mon_src = config%monitors(imon)%distance%value - config%source%distance%value mon_spec%no_lambda_bins = nlambda mon_scale = det_src/mon_src mon_spec(imon)%no_lambda_bins = nlambda do it=1, nlambda mon_spec%lambda_bin(it) = lam(1) + dlam*(it-0.5)*mon_scale mon_spec%dlambda_bin(it) = det_spec%dlambda_bin(it)*mon_scale mon_spec(imon)%lambda_bin(it) = (det_spec%lambda_bin(it) - lam(1))*mon_scale + lam(1) mon_spec(imon)%dlambda_bin(it) = det_spec%dlambda_bin(it)*mon_scale end do end do !end do end subroutine transform_monitor_spectrum ! ============================================================================== Loading Loading
sources/read_data.f90 +20 −22 Original line number Diff line number Diff line Loading @@ -990,7 +990,7 @@ contains type(config_struct), intent(in) :: config ! integer :: iscan, imon integer :: iscan integer :: itp, ixp, iyp integer, dimension(2) :: ilam Loading @@ -1006,20 +1006,18 @@ contains tau_mean = 0 iscan_do: do iscan=1, scan_data%number_of_points associate(scan_point => scan_data%scan_point(iscan)) associate(dspec => scan_point%spectrum(0) ) select case(ftype%inst_id) case (INST_SNSNSE) lam(1) = scan_point%physics%lambda_min lam(2) = scan_point%physics%lambda_max ! IMPORTANT: start from 1! call transform_monitor_spectrum(size(config%monitors), scan_point%spectrum(1:), dspec, config, lam) case (INST_JNSE) lam = scan_point%physics%lambda end select associate(dspec => scan_point%spectrum(0) ) do imon=1, size(config%monitors) call transform_monitor_spectrum(scan_point%spectrum(imon), imon, & dspec, config, lam) end do itp_do: do itp=0, scan_point%no_lam ilam = [1, no_tchans] Loading Loading @@ -1713,14 +1711,14 @@ contains ! ============================================================================== ! transform monitor spectrum (to its position) ! ============================================================================== subroutine transform_monitor_spectrum(mon_spec, imon, det_spec, config, lam) !type(scan_data_struct), intent(inout) :: scan_point type(spectrum_struct), intent(inout) :: mon_spec integer, intent(in) :: imon subroutine transform_monitor_spectrum(num_mon, mon_spec, det_spec, config, lam) integer, intent(in) :: num_mon type(spectrum_struct), intent(inout), dimension(:) :: mon_spec type(spectrum_struct), intent(in) :: det_spec type(config_struct), intent(in) :: config real(kind=DBL), intent(in), dimension(2) :: lam ! integer :: imon integer :: it integer :: nlambda real(kind=DBL) :: dlam Loading @@ -1731,17 +1729,17 @@ contains ! FIXME check monitor spectrum transformation nlambda = det_spec%no_lambda_bins dlam = (lam(2) - lam(1)) / nlambda det_src = config%detector%distance%value - config%source%distance%value do imon=1, num_mon mon_src = config%monitors(imon)%distance%value - config%source%distance%value mon_spec%no_lambda_bins = nlambda mon_scale = det_src/mon_src mon_spec(imon)%no_lambda_bins = nlambda do it=1, nlambda mon_spec%lambda_bin(it) = lam(1) + dlam*(it-0.5)*mon_scale mon_spec%dlambda_bin(it) = det_spec%dlambda_bin(it)*mon_scale mon_spec(imon)%lambda_bin(it) = (det_spec%lambda_bin(it) - lam(1))*mon_scale + lam(1) mon_spec(imon)%dlambda_bin(it) = det_spec%dlambda_bin(it)*mon_scale end do end do !end do end subroutine transform_monitor_spectrum ! ============================================================================== Loading