Пример #1
0
def chi2_2t4ebins_newpull(n, ac, meas, epsee, epsmm, epsem, epset, epsmt,
                          alpha, beta, gamma):
    chi = 0
    sig = signalcomp(epsee, epsmm, epsem, epset, epsmt)
    sig_n = add_lists_2(sig, n, alpha, beta)
    smeared = acc.smearing_fct(sig_n)
    pred = acc.data_eff(smeared)
    #add bkg
    lista = add_lists_1(pred, ac, gamma)
    obss = switch_te(meas)

    #rebin
    preddev = rebin_list_4E2t(lista)
    obssev = rebin_list_4E2t(obss)

    for i in range(len(preddev)):
        if preddev[i, 2] >= 0:
            numevents = preddev[i, 2]
        else:
            numevents = 10000  #in case the minimizer leads to a negative number of events
        numobs = obssev[i, 2]
        if numobs == 0:
            add = numevents - numobs
        else:
            add = numevents - numobs + numobs * np.log(numobs / numevents)

        chi += add
    if (alpha + 1.) <= 0 or (beta + 1.) <= 0 or (gamma + 1.) <= 0:
        return np.abs(alpha * 1000.0) + np.abs(beta * 1000.0) + np.abs(
            gamma * 1000.0) + 2 * chi
    else:
        return 2 * chi + 2 * (alpha - np.log(alpha + 1.)) / 0.28**2 + 2 * (
            beta - np.log(beta + 1.)) / 0.25**2 + 2 * (
                gamma - np.log(gamma + 1.)) / 0.0855**2
Пример #2
0
def chi2_144bins_newpull(n, ac, meas, epsee, epsmm, epsem, epset, epsmt, alpha,
                         beta, gamma):
    chi = 0
    #add signal and neutron bkg
    sig = signalcomp(epsee, epsmm, epsem, epset, epsmt)
    sig_n = add_lists_2(sig, n, alpha, beta)
    smeared = acc.smearing_fct(sig_n)
    pred = acc.data_eff(smeared)
    #add bkg
    lista = add_lists_1(pred, ac, gamma)
    for i in range(len(pred)):
        if lista[i, 2] >= 0:
            numevents = lista[i, 2]
        else:
            numevents = 10000  #in case the minimizer leads to a negative number of events

        numobs = meas[i, 2]
        if numobs == 0:
            add = numevents - numobs
        else:
            add = numevents - numobs + numobs * np.log(numobs / numevents)

        chi += add
    if (alpha + 1.) <= 0 or (beta + 1.) <= 0 or (gamma +
                                                 1.) <= 0:  #avoid log(0)
        return np.abs(alpha * 1000.0) + np.abs(beta * 1000.0) + np.abs(
            gamma * 1000.0) + 2 * chi
    else:
        return 2 * chi + 2 * (alpha - np.log(alpha + 1.)) / 0.28**2 + 2 * (
            beta - np.log(beta + 1.)) / 0.25**2 + 2 * (
                gamma - np.log(gamma + 1.)) / 0.171**2
def chi2_bins(n,ac,meas,epsee,epsmm,epsem,epset,epsmt,alpha,beta,gamma):
        chi=0
        sig=csir.signalcomp(epsee,epsmm,epsem,epset,epsmt) #calculate signal for given NSI parameters
        sig_n=csir.add_lists_2(sig,n,alpha,beta) #add signal and neutron background
        smeared=acc.smearing_fct(sig_n) #apply smearing and efficiency
        pred=acc.data_eff(smeared)
        #add bkg                                                                                                                                                                    
        lista=csir.add_lists_1(pred,ac,gamma)
        #that's the prediction 
        preddev=lista
        for i in range(len(preddev)):
                if preddev[i,2]>=0:
                        numevents = preddev[i, 2]
                else:
                        numevents=10000 #in case the minimizer goes to a negative number of events   
                numobs = meas[i, 2] #that's the data
                if numobs == 0: #if data is zero
                        add = numevents - numobs
                else:
                        add = numevents - numobs + numobs*np.log(numobs/numevents)

                chi += add
       # return 2*chi+(alpha/0.28)**2+(beta/0.25)**2+(gamma/0.171)**2 #uncomment if Gaussian pull terms are used
        if (alpha + 1.)<=0 or (beta + 1.)<=0 or (gamma + 1.)<=0: #if asymmetric pull terms are used prevent that the log(0) case
                return np.abs(alpha*1000.0)+np.abs(beta*1000.0)+np.abs(gamma*1000.0)+2*chi
        else:
                return 2*chi+ 2*(alpha - np.log(alpha + 1.))/0.28**2+2*(beta - np.log(beta + 1.))/0.25**2+2*(gamma - np.log(gamma + 1.))/0.171**2
def randompred(sig,alphabf,betabf,gammabf,n,bkg):
        sig_n=csir.add_lists_2(sig,n,alphabf,betabf) #adds signal and neutron background
        smeared=acc.smearing_fct(sig_n) #applies smearing 
        pred=acc.data_eff(smeared) #applies efficiency
        #add bkg                          
        lista=csir.add_lists_1(pred,bkg,gammabf)
        return lista
def randompred(sig, n, bkg):
    alpha = np.random.normal(0, 0.28)
    beta = np.random.normal(0, 0.25)
    sig_n = csir.add_lists_2(sig, n, alpha, beta)
    smeared = acc.smearing_fct(sig_n)
    pred = acc.data_eff(sig_n)
    #add bkg
    lista = csir.add_lists_1(pred, bkg, 0)
    return lista
def chi2_bins(n, ac, meas, alpha, beta, gamma):
    chi = 0
    sig = csir.signalcomp(0.0, 0.0, 0.0, 0.0, 0.0)
    sig_n = csir.add_lists_2(sig, n, alpha, beta)
    smeared = acc.smearing_fct(sig_n)
    pred = acc.data_eff(smeared)
    #add bkg
    lista = csir.add_lists_1(pred, ac, gamma)
    preddev = lista

    for i in range(len(preddev)):
        numevents = preddev[i, 2]
        numobs = meas[i, 2]
        if numobs == 0:
            add = numevents - numobs
        else:
            add = numevents - numobs + numobs * np.log(numobs / numevents)

        chi += add
    return 2 * chi + (alpha / 0.28)**2 + (beta / 0.25)**2 + (gamma / 0.171)**2