def sig_uncert_pdf(name_year): name, _ = name_year.rsplit('_',1) kind, tau, mass = name2details(name) tau = int(tau*1000) # back to um fcns = { 300: lambda x: 1.780e-07*x**2 + -0.0002978*x + 0.1333 if x < 877 else 3.109e-05*x + -0.01826, 1000: lambda x: 1.180e-07*x**2 + -0.0001803*x + 0.07347 if x < 873 else 2.069e-05*x + -0.01206, 10000: lambda x: 1.203e-07*x**2 + -0.0002023*x + 0.08985 if x < 877 else 1.413e-05*x + -0.007393, } ab = None if tau <= 300: p = fcns[300](mass) elif tau >= 10000: p = fcns[10000](mass) elif 300 < tau <= 1000: ab = 300,1000 elif 1000 < tau <= 10000: ab = 1000,10000 if ab is not None: a,b = ab fa = fcns[a](mass) fb = fcns[b](mass) p = lerp(tau, a, b, fa, fb) return p
def sig_uncert_alphas(name_year): name, year = name_year.rsplit('_',1) kind, tau, mass = name2details(name) tau = int(tau*1000) # back to um fcns = { ('mfv_neu', 300, '2017') : lambda x: 8.412357E-02 + -1.492608E-04*x if x < 500 else 1.366428E-02 + -8.342191E-06*x if x < 1000 else 5.163025E-03, ('mfv_stopdbardbar', 300, '2017') : lambda x: 4.162419E-02 + -6.643979E-05*x if x < 500 else 1.544804E-02 + -1.408750E-05*x if x < 1000 else 2.704658E-03, ('mfv_neu', 1000, '2017') : lambda x: 2.482616E-02 + -1.677113E-05*x if x < 500 else 2.930580E-02 + -2.573041E-05*x if x < 1000 else 3.386116E-03, ('mfv_stopdbardbar', 1000, '2017') : lambda x: 2.941164E-02 + -4.224396E-05*x if x < 500 else 1.485796E-02 + -1.313661E-05*x if x < 1000 else 1.379749E-03, ('mfv_neu', 10000, '2017') : lambda x: 7.566047E-02 + -1.147594E-04*x if x < 500 else 3.476814E-02 + -3.297473E-05*x if x < 1000 else 1.611145E-03, ('mfv_stopdbardbar', 10000, '2017') : lambda x: 3.286446E-02 + -4.490090E-05*x if x < 500 else 1.932494E-02 + -1.782184E-05*x if x < 1000 else 1.427578E-03, ('mfv_neu', 300, '2018') : lambda x: 3.826184E-02 + -3.562455E-05*x if x < 500 else 3.727006E-02 + -3.570847E-05*x if x < 1000 else 4.543582E-03, ('mfv_stopdbardbar', 300, '2018') : lambda x: 5.826609E-02 + -9.844897E-05*x if x < 500 else 1.450902E-02 + -1.250891E-05*x if x < 1000 else 2.639510E-03, ('mfv_neu', 1000, '2018') : lambda x: 1.381364E-01 + -2.434682E-04*x if x < 500 else 3.364486E-02 + -3.615300E-05*x if x < 1000 else 2.315426E-03, ('mfv_stopdbardbar', 1000, '2018') : lambda x: 4.604910E-02 + -6.757893E-05*x if x < 500 else 2.369948E-02 + -2.466162E-05*x if x < 1000 else 1.553165E-03, ('mfv_neu', 10000, '2018') : lambda x: 1.395761E-01 + -2.494418E-04*x if x < 500 else 2.779135E-02 + -2.693736E-05*x if x < 1000 else 1.683538E-03, ('mfv_stopdbardbar', 10000, '2018') : lambda x: 6.065365E-02 + -1.067197E-04*x if x < 500 else 1.328695E-02 + -1.332486E-05*x if x < 1000 else 1.429334E-03, } ab = None if tau <= 300: p = fcns[(kind, 300, year)](mass) elif tau >= 10000: p = fcns[(kind, 10000, year)](mass) elif 300 < tau <= 1000: ab = 300,1000 elif 1000 < tau <= 10000: ab = 1000,10000 if ab is not None: a,b = ab fa = fcns[(kind, a, year)](mass) fb = fcns[(kind, b, year)](mass) p = lerp(tau, a, b, fa, fb) return p
def sig_trackmover_per_event_unc(name_year, debug=False, syst=''): name, year = name_year.rsplit('_',1) kind, tau, mass = name2details(name) tau = int(tau*1000) # back to um masses = [400,600,800,1200,1600,3000] taus = [100,300,1000,10000,30000] kind = kind + syst trackmover = { # after kind and year indices, rows are masses, cols are taus, each in same order as above two lists 'mfv_stopdbardbar': { '2017': ( (0.2384, 0.1904, 0.1492, 0.1050, 0.1002), (0.2496, 0.2014, 0.1604, 0.1152, 0.1104), (0.2534, 0.2100, 0.1716, 0.1264, 0.1194), (0.2584, 0.2142, 0.1756, 0.1278, 0.1204), (0.2582, 0.2144, 0.1752, 0.1264, 0.1192), (0.2684, 0.2186, 0.1760, 0.1244, 0.1158), ), '2018': ( (0.3068, 0.2600, 0.2344, 0.2010, 0.1968), (0.3084, 0.2616, 0.2396, 0.2044, 0.1886), (0.3084, 0.2654, 0.2438, 0.1900, 0.1910), (0.3120, 0.2690, 0.2274, 0.1940, 0.1926), (0.3140, 0.2594, 0.2320, 0.1974, 0.1940), (0.3104, 0.2634, 0.2364, 0.2004, 0.1950), ), }, 'mfv_neu': { '2017': ( (0.276, 0.193, 0.11, 0.058, 0.059), (0.243, 0.166, 0.093, 0.043, 0.044), (0.22, 0.153, 0.088, 0.036, 0.037), (0.189, 0.138, 0.081, 0.029, 0.029), (0.163, 0.124, 0.075, 0.024, 0.024), (0.132, 0.101, 0.063, 0.019, 0.016), ), '2018': ( (-0.054, -0.002, 0.015, 0.01, 0.008), (-0.012, 0.019, 0.018, 0.008, 0.01), (0.003, 0.022, 0.018, 0.009, 0.009), (0.017, 0.028, 0.022, 0.009, 0.01), (0.029, 0.034, 0.027, 0.01, 0.009), (0.042, 0.043, 0.032, 0.011, 0.009), ), }, 'mfv_neu_stat_unc': { '2017': ( (5.157, 2.619, 1.565, 1.108, 1.516), (2.543, 1.175, 0.667, 0.395, 0.48), (1.811, 0.766, 0.422, 0.218, 0.245), (1.522, 0.592, 0.323, 0.151, 0.16), (1.381, 0.536, 0.286, 0.128, 0.133), (1.471, 0.486, 0.253, 0.107, 0.098), ), '2018': ( (8.097, 3.639, 2.159, 1.6, 2.058), (3.7, 1.563, 0.836, 0.511, 0.608), (2.675, 1.024, 0.522, 0.273, 0.31), (2.186, 0.784, 0.399, 0.189, 0.202), (2.036, 0.694, 0.358, 0.165, 0.166), (1.966, 0.622, 0.313, 0.133, 0.127), ), }, 'mfv_neu_toc_unc': { '2017': ( (4.769, 1.527, 1.973, 4.487, 4.841), (4.752, 1.456, 1.061, 2.644, 3.087), (2.92, 0.477, 0.324, 1.73, 2.078), (0.176, 1.229, 0.894, 0.64, 0.972), (1.346, 2.293, 1.784, 0.181, 0.423), (3.692, 3.568, 2.717, 0.492, 0.182), ), '2018': ( (13.768, 8.186, 6.416, 8.13, 7.676), (13.729, 7.804, 4.942, 4.641, 5.165), (12.017, 6.554, 4.069, 3.446, 3.771), (8.099, 4.175, 2.24, 2.102, 2.355), (5.819, 2.845, 1.346, 1.337, 1.51), (1.54, 0.141, 0.598, 0.28, 0.511), ), }, 'mfv_neu_closeseedtk_unc': { '2017': ( (3.155, 1.88, 1.087, 0.666, 0.718), (2.656, 1.586, 0.875, 0.481, 0.502), (2.248, 1.424, 0.807, 0.389, 0.409), (1.767, 1.191, 0.687, 0.291, 0.307), (1.423, 1.003, 0.593, 0.229, 0.24), (0.97, 0.7, 0.43, 0.156, 0.145), ), '2018': ( (4.168, 2.175, 1.178, 0.791, 0.799), (3.21, 1.829, 0.936, 0.484, 0.497), (2.838, 1.633, 0.858, 0.393, 0.394), (2.2, 1.386, 0.762, 0.304, 0.296), (1.835, 1.17, 0.667, 0.249, 0.23), (1.182, 0.838, 0.507, 0.174, 0.159), ), }, } vtm = trackmover[kind][year] # just do linear interpolation--could fit, but the final result in the limits won't depend strongly on this mass, ms, mia, mib, mxa, mxb = mmm = hlp(mass, masses) tau, ts, tia, tib, txa, txb = ttt = hlp(tau, taus) if mia == mib and tia == tib: vtm = vtm[mia][tia] elif mia == mib: vtm = lerp(tau, txa, txb, vtm[mia][tia], vtm[mia][tib]) elif tia == tib: vtm = lerp(mass, mxa, mxb, vtm[mia][tia], vtm[mib][tia]) else: points = [(mxa, txa, vtm[mia][tia]), (mxa, txb, vtm[mia][tib]), (mxb, txa, vtm[mib][tia]), (mxb, txb, vtm[mib][tib])] vtm = bilerp(mass, tau, points) if debug: print name_year, 'mmm', mmm, 'ttt', ttt return vtm