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
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