Commit 8c2adadb authored by Zolnierczuk, Piotr's avatar Zolnierczuk, Piotr
Browse files

fixed monitor spectrum transformation (SNS)

notes:
- we should have it fixed at the DAQ level
- it is not used for J-NSE (no need)
parent 0f384497
Loading
Loading
Loading
Loading
+20 −22
Original line number Diff line number Diff line
@@ -990,7 +990,7 @@ contains
      type(config_struct), intent(in)  :: config
      !

      integer :: iscan, imon
      integer :: iscan
      integer :: itp, ixp, iyp

      integer, dimension(2)        :: ilam
@@ -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]
@@ -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
@@ -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

  ! ==============================================================================