whizard is hosted by Hepforge, IPPP Durham

Opened 15 years ago

Last modified 4 years ago

#40 closed enhancement

Helicity selection rules — at Version 11

Reported by: ohl Owned by: ohl
Priority: P3 Milestone: v4.0
Component: omega Version: 2.0.0alpha
Severity: normal Keywords:
Cc:

Description (last modified by ohl)

Replace the (defunct) numerical heuristics for helicity selection rules by statically computed ones.

Change History (11)

comment:1 Changed 15 years ago by ohl

Status: newassigned

comment:2 Changed 14 years ago by Juergen Reuter

Milestone: v2.0-finalv2.0-beta

comment:3 Changed 14 years ago by ohl

Milestone: v2.0-betav2.0-final

comment:4 Changed 14 years ago by Juergen Reuter

Priority: P2P1
Severity: criticalblocker

Highest priority for 2.0_final now!!!

comment:5 Changed 14 years ago by Juergen Reuter

Milestone: v2.0finalv2.0-rc1

comment:6 Changed 14 years ago by ohl

Milestone: v2.0-rc1v2.0-rc2
Severity: blockercritical

Let's be realistic: TO and WK have to coordinate this. Let's concentrate on getting a tested (but slow) RC1 this weekend and implement helicity selection next week for RC2.

Moving the ticket to v2.0-rc2.

comment:7 Changed 14 years ago by Juergen Reuter

Milestone: v2.0-rc2v2.0-rc1

According to Wolfgang, the W1 method for helicities has to be implemented before release of rc1.

comment:8 Changed 14 years ago by ohl

Re-implemented the old heuristics in r1629. It's not yet validated, but it compiles.

Algorithm (in omegalib):

pure subroutine omega_update_helicity_selection (amp, mask, zeros, threshold, cutoff)
  complex(kind=default), dimension(:,:,:), intent(in) :: amp
  logical, dimension(:), intent(inout) :: mask
  integer, dimension(:), intent(inout) :: zeros
  real(kind=default), intent(in) :: threshold
  integer, intent(in) :: cutoff
  integer :: h
  real(kind=default) :: avg
  if (threshold .gt. 0) then
     avg = sum (abs (amp)) / size (amp)
     do h = lbound (amp, 2), ubound (amp, 2)
        if (mask(h)) then
           if (all (abs (amp(:,h,:)) .lt. threshold * epsilon (avg) * avg )) then
              zeros(h) = zeros(h) + 1
              if (zeros(h) .gt. cutoff) then
                 mask(h) = .false.
              end if
           end if
        end if
     end do
  end if
end subroutine omega_update_helicity_selection

new interface function

  subroutine reset_helicity_selection (threshold, cutoff)
    real(kind=default), intent(in) :: threshold
    integer, intent(in) :: cutoff
    hel_is_allowed = .true.
    hel_zeros = 0
    hel_threshold = threshold
    hel_cutoff = cutoff
  end subroutine reset_helicity_selection

where threshold = O(100) and cutoff = O(1000).

Obviously, a negative threshold will disable the helicity selection.

comment:9 Changed 14 years ago by ohl

Priority: P1P2
Severity: criticalnormal

Performed some basic tests. Appears to work correctly and to be efficient. Needs tuning of THRESHOLD and CUTOFF. Access from SINDARIN would be nice.

Downgrading the priority and severity.

comment:10 Changed 14 years ago by kilian

The SINDARIN interface is done. There are three variables:

  • ?helicity_selection_active (default true) as overall switch
  • real helicity_selection_threshold (default 100)
  • int helicity_selection_cutoff (default 100)

Please check.

comment:11 Changed 14 years ago by ohl

Description: modified (diff)
Milestone: v2.0-rc1v2.0final
Severity: normalmajor

Passed some more tests. Further tests of the heuristics belong to validation.

Moving this ticket to 2.0final for further optimizations and (maybe later) for an implementation of an analytical approach.

Note: See TracTickets for help on using tickets.