Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Determining m^2 and lambda from Wilson Coefficients allowed in global fits in the literature fails #52

Closed
JoseEliel opened this issue Nov 9, 2020 · 7 comments

Comments

@JoseEliel
Copy link

Turning on only some WC's from the Higgs sector (e.g. 'phi', 'phiD', and 'phiBox') and choosing values within allowed ranges in e.g. https://arxiv.org/abs/2007.01296 leads to a crash.

The function 'vMh2_to_m2Lambda(v, Mh2, C)' throws the exception:
"No solution for m^2 and Lambda found. This problem can be caused by very large values for one or several Wilson coefficients."

I think the numerical minimization is not converging for some reason. I tried implementing scipy.optimize.basinhopping instead (slow but a bit better) when the first attempt fails and got more reasonable results (though it still crashes sometimes).

Happy to discuss this and share my temporary fix.

@peterstangl
Copy link
Collaborator

@JoseEliel can you maybe provide a small example code that produces the error? And (if it's not too big) can you also show how you fixed it using scipy.optimize.basinhopping?

@JoseEliel
Copy link
Author

JoseEliel commented Nov 19, 2020

scipy.optimize.basinhopping turns out it was taking a long time and often did not converge or gave a pretty bad solution.
I have now instead implemented a similar workaround using scipy.optimize.minimize instead.
It avoids issues by not necessarily finding a spot-on solution with the exact Higgs mass or VEV, but to my current need, it is good enough. In my tests, it outputs good points, but it does not feel like a general solution without implementing some checks that the points are not really far away from the input Higgs mass or VEV.

Nevertheless, this is what I have now (the method can be changed, I'm using Powell as I want to set bounds on the values for Lambda and m2, I've noticed that several solutions are possible for the same parameter point with Mh2 and v close enough to the wanted values):

def vMh2_to_m2Lambda(v, Mh2, C):
    """Function to numerically determine the parameters of the Higgs potential
    given the physical Higgs VEV and mass."""
    if C['phi'] == 0 and C['phiBox'] == 0 and C['phiD'] == 0:
        return _vMh2_to_m2Lambda_SM(v, Mh2)
    else:  
        def f0_scalar(x):  # function to minimize
            m2, Lambda = x
            d = m2Lambda_to_vMh2(m2=m2.real, Lambda=Lambda.real,
                                 C=C)
            value = abs((d['v'] - v))**2 +  abs(d['Mh2'] - Mh2)
            return value

        dSM = _vMh2_to_m2Lambda_SM(v, Mh2)
        x0 = np.array([dSM['m2'], dSM['Lambda']])
        
        res = scipy.optimize.minimize(f0_scalar, x0, method='Powell')
        xres = res.x
        #print(res)

        return {'m2': xres[0], 'Lambda': xres[1]}

I have nothing in terms of handling an exception, but maybe different methods can be tried in succession. So far I have not had any problems though.
Originally I was getting the error when using Smelli when doing (I've taken away some not-relevant code, let me know if the example is clear enough)

# This sets up the likelihoods
gl = smelli.GlobalLikelihood(include_likelihoods=
        {
          'likelihood_higgs.yaml'
         },fix_ckm=True, basis = 'Warsaw')

glp = gl.parameter_point({'phi':1e-5,'phiD':3e-6, 'phiBox':1e-8}, scale=1000)
print(glp.log_likelihood_global())

@peterstangl
Copy link
Collaborator

I think one big problem here is how vMh2_to_m2Lambda determines the parameters m2 and Lambda. It compare the values of v and Mh2 as computed by m2Lambda_to_vMh2 to the values in the SM, where Mh2 is an input parameter and v is related to the input parameter GF. However, in the presence of a non-zero C['phi'], the relation between v and GF is modified and this modification is currently not implemented. So I think that with the current implementation, a non-zero C['phi'] leads to an inconsistency and this is probably the reason why the determination of m2 and Lambda fails. I'm working on fixing this but it's still work in progress.

@DavidMStraub what was actually the reason for implementing the determination of m2 and Lambda numerically? I think one could use the analytical relations at linear order in the Wilson coefficients between m2 and Lambda on one side and Mh2 and vb on the other side.

@peterstangl
Copy link
Collaborator

I find the analytical expressions

m2 = Mh2 / 2 + vb**4 ( 3/4 * Cphi - Mh2/vb**2 * Ckin )
Lambda = Mh2/vb**2 + vb**2 ( 15/4 * Cphi + 2 * Mh2/vb**2 ( Cv - Ckin ) ) 

where

Ckin = CphiBox - 1/4 * CphiD
Cv = 1/4 * ( Cll_2112 + Cll_1221 - 2 * Cphil3_11 - 2 * Cphil3_22 )
vb = sqrt(1 / sqrt(2) / GF)

I think it would be good if someone (e.g. @jasonaebischerGIT 🙂) could check this, especially the Cv since what I have might be the relation in a redundant basis...

@DavidMStraub
Copy link
Member

I remember that linearization was not possible, so don't invest much time now ... will answer in more detail later when I have time (and if I remember ...)

@peterstangl
Copy link
Collaborator

I remember that linearization was not possible, so don't invest much time now ... will answer in more detail later when I have time (and if I remember ...)

OK, i've implemented it now without linearization in PR #59. I think this should solve the issue.

@jasonaebischerGIT
Copy link
Collaborator

Closing this issue as it is addressed in PR #59.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants