Page MenuHomeHEPForge

Use Minuit to automatically determine ASq max for signal in LauIsobarDynamics
ClosedPublic

Authored by andylhcb on Tue, Nov 15, 4:37 PM.

Details

Summary

As described in T202, currently the maximum value of ASq (used for the accept/reject method of toy generation) for a given DP model has to be determined by trial and error and then set by hand.

This revision repurposes the LauFitter class to optimise ASq rather than a likelihood function:
ASqMax is found by minimising -ASq w.r.t. m13Sq and m23Sq.
This is done from multiple starting points: at cos(helicity) = -1, 0, 1 and m = m0 - Gamma0, m0, m0 + Gamma0
for each component in the model (resonant and nonresonant).

We intend to extend this to time-dependent models later.

This revision also takes the opportunity to perform some modernisation of some of the affected classes.

Test Plan

This has been tested and works successfully in GenFit3pi, GenFit3K and GenFitBelleCPKpipi

Diff Detail

Repository
rLAURA laura
Branch
AutoASqMax
Lint
No Lint Coverage
Unit
No Test Coverage
Build Status
Buildable 228
Build 228: arc lint + arc unit

Event Timeline

tlatham changed the visibility from "All Users" to "Public (No Login Required)".
tlatham changed the edit policy from "All Users" to "Laura (Project)".
tlatham added a project: Laura.
tlatham edited the test plan for this revision. (Show Details)

Hi John,

Tom and I have added functionality to have ASqMax automatically determined in LauIsobarDynamics rather than it being a magic number.

If you could please review it we'd like to see if you have any comments before we merge.

Thanks,

-Andy & Tom

This clever solution for finding ASqMax looks OK overall, so I am approving these changes.

This revision is now accepted and ready to land.Thu, Nov 17, 1:41 PM

Thanks for checking it through John.

We've also been taking another look ourselves and there are a few small changes that we're thinking to make, which we should run by you first:

  1. We asked Ao to test this routine with the (very complicated) Dpipi model and it didn't quite find the maximum. It got close but undershot by a few percent. As such, we were thinking to increase the safety factor on line 2299 of LauIsobarDynamics.cc from 1.03 to 1.10. Unless you have some ideas about how to improve the search algorithm? The only thing I can think of would be to do fits at m_0 +/- Gamma_0 as well as at m_0. Not sure if that will really improve things that much, however. Will also add a printout of the value found by the search.
  2. We are thinking to make this search the default behaviour, unless a value has been provided manually. This would involve:
    • Changing kFALSE to kTRUE on line 964 of LauIsobarDynamics.hh
    • Removing the autoSetASqMaxValue function
    • Modifying the setASqMaxValue function to additionally set aSqMaxAuto_ = kFALSE;
  3. The LauFitter::destroyFitter function should probably also restore the default values of fitterType_, fitterVerbosity_, and fitterMaxPars_

Does this sound reasonable to you?

  1. Yes, increasing the safety factor to 10% is sensible.

So I gather from looking at the code that the fit procedure uses certain masses (m0) and cosTheta values to provide an initial guess, then the ASq likelihood is maximised by varying m13Sq and m23Sq as parameters?

Could we instead use a square Dalitz plot with binned m'-theta' values to initialise, test and fit ASq? That way we can systematically cover important areas of the Dalitz plot.

  1. Yes, making the search the default behaviour is a good idea, although allow the user to specify it if required.
  1. Reverting to default values sounds OK when deleting the fitter function.

Hi John,

So I gather from looking at the code that the fit procedure uses certain masses (m0) and cosTheta values to provide an initial guess, then the ASq likelihood is maximised by varying m13Sq and m23Sq as parameters?

Could we instead use a square Dalitz plot with binned m'-theta' values to initialise, test and fit ASq? That way we can systematically cover important areas of the Dalitz plot.

The values of m0 are taken by looping through the components in the model for which we're trying to find the maximum. So I think this is probably better than using a fixed grid pattern (in a similar way to how we tweak the integration scheme depending on the contents of the model). It seems that expanding the nested loop so that it runs over mass : { m0 - Gamma0, m0, m0 + Gamma0 } and cosHel : { -1, 0, +1 } works better than just using m0. We'll upload those changes (and the others mentioned previously) shortly.

Update revision following review discussion

  • Set auto-determination of ASqMax as default behaviour
  • LauFitter:destroyFitter restores default settings
  • Printout auto-determined ASqMax value (with and without 10% safety factor)
  • Use m_0 +/- Gamma_0 as additional ASqMax search starting points

The new updates using the mass ranges look OK.