whizard is hosted by Hepforge, IPPP Durham

Opened 15 years ago

Closed 5 years ago

#40 closed enhancement (duplicate)

Helicity selection rules

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 numerical heuristics for helicity selection rules by statically computed ones.

Change History (25)

comment:1 Changed 15 years ago by ohl

Status: newassigned

comment:2 Changed 15 years ago by Juergen Reuter

Milestone: v2.0-finalv2.0-beta

comment:3 Changed 15 years ago by ohl

Milestone: v2.0-betav2.0-final

comment:4 Changed 15 years ago by Juergen Reuter

Priority: P2P1
Severity: criticalblocker

Highest priority for 2.0_final now!!!

comment:5 Changed 15 years ago by Juergen Reuter

Milestone: v2.0finalv2.0-rc1

comment:6 Changed 15 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 15 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 15 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 15 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 15 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 15 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.

comment:12 Changed 15 years ago by ohl

Milestone: v2.0finalv2.0-rc1
Priority: P2P3
Severity: majornormal

Back to RC1 for an improvement of the logic and a test case. Neither is a big deal and could be moved to RC2.

comment:13 Changed 15 years ago by ohl

Description: modified (diff)

... no longer defunct ...

comment:14 Changed 15 years ago by ohl

Priority: P3P2
Severity: normalmajor

It probably can wait until RC2, but here's the situation. The current version (checkpointed in

svn+ssh://login.hepforge.org/hepforge/svn/whizard/tags/ohl/helicity_tuning/agressive_2010_01_31

(sic!) is very aggressive and kills a helicity after CUTOFF zeros anywhere in the sequence. This appears to work, but is dangerous in very long simulations. A more conservative version

svn+ssh://login.hepforge.org/hepforge/svn/whizard/tags/ohl/helicity_tuning/conservative_2010_02_02

requires CUTOFF zeros at the beginning. To my surprise, it is significantly slower (keeps more helicities), but produces the same results. I have to investigate

  • where the conservative version is tricked into believing that a vanishing helicity combination in nonvanishing and
  • whether the aggressive version is safe.

Since it can be switched off, the aggressive version is probably OK for RC1.

comment:15 Changed 15 years ago by ohl

Milestone: v2.0-rc1v2.0-rc2
Priority: P2P3
Severity: majornormal

Implemented a much more robust heuristic in r1655: comparing the maximum with the average of the first CUTOFF evaluations. A good new default for THRESHOLD is 1E10.

Further tuning can go to RC2 and later.

comment:16 Changed 15 years ago by Juergen Reuter

Milestone: v2.0-rc2v2.0final

comment:17 Changed 15 years ago by Juergen Reuter

Milestone: v2.0.0finalv2.0.1

comment:18 Changed 15 years ago by ohl

Milestone: v2.0.1v2.0.2

comment:19 Changed 15 years ago by Juergen Reuter

Milestone: v2.0.2v2.1

As TO has two major tasks before this, moving to 2.1

comment:20 Changed 14 years ago by Juergen Reuter

Milestone: v2.1.0v2.1.1

comment:21 Changed 8 years ago by Juergen Reuter

Milestone: v2.4.0v2.5.0

Milestone renamed

comment:22 Changed 8 years ago by Juergen Reuter

Milestone: v2.5.0v2.6.0

Milestone renamed

comment:23 Changed 8 years ago by ohl

Milestone: v2.6.0v3.0.0

comment:24 Changed 8 years ago by ohl

Milestone: v3.0.0v4.0

comment:25 Changed 5 years ago by Juergen Reuter

Resolution: duplicate
Status: assignedclosed

Transferred to Gitlab issue 328.

Note: See TracTickets for help on using tickets.