Skip to content

Add a model for double gaussian? #9

Description

@ch2ohch2oh

Can we have a model for double Gaussian? A double Gaussian is the sum of two Gaussians with the same mean. I tried the code below but it did not work.

class DoubleGauss(pyroofit.PDF):
    def __init__(self,
                 observable,
                 mean = (-1, 0, 1),
                 sigma = (0, 1),
                 sigma_ratio = (1, 10),
                 name = 'double_gaussian',
                 **kwds):
        # observable is the variable in the dataframe i.e. mass
        super(DoubleGauss, self).__init__(name = name, **kwds)
        
        x = self.add_observable(observable)
        
        # Add parameters
        mean = self.add_parameter(mean, "mean")
        sigma1 = self.add_parameter(sigma, "sigma1")
        s2overs1 = self.add_parameter(sigma_ratio, "s2overs1")
        sigma2 = ROOT.RooFormulaVar("sigma2", "sigma2", "@0 * @1", ROOT.RooArgList(sigma1, s2overs1))
        sigma2 = self.add_parameter(sigma2, "sigma2")
        sig1 = Gauss(x, mean, sigma1, name = 'Narrow Gaussian')
        sig2 = Gauss(x, mean, sigma2, name = 'Wide Gaussian')
        total = sig1 + sig2
        self.roo_pdf = total.roo_pdf

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions