Beispiel #1
0
def L(p):
    global dS, PEs, r_mash, V_mash, counter, l_min, ls
    print('Counter', counter)
    counter += 1
    rec = p_to_rec(p)
    Names = ['Q', 'Ts', 'T', 'F', 'Tf', 'Ts', 'R', 'a', 'eta']
    for name in Names:
        if np.any(rec[name] < 0):
            return 1e10 * (1 - np.amin(rec[name]))

    Names = ['F', 'R', 'eta', 'a']
    for name in Names:
        if np.any(rec[name] > 1):
            return 1e10 * (np.amax(rec[name]))
    l = 0
    m, s = make_3D(t, N, rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0],
                   rec['a'][0], rec['eta'][0], rec['Q'][0], rec['T'][0],
                   rec['St'][0], dS, PEs, r_mash, V_mash)
    model = np.sum(H[:, 0, 0]) * np.ravel(m)
    data = np.ravel(H[:, :100, :])
    if np.any(model < 0):
        print('model<0', np.amin(model))
        sys.exit()
        return 1e10 * (1 - np.amin(model))
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    data = np.ravel(spectra)
    model = np.sum(H[:, 0, 0]) * np.ravel(s)
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    for i in range(len(pmts) - 1):
        for j in range(i + 1, len(pmts)):
            x = delays[names == '{}_{}'.format(pmts[i], pmts[j])]
            data = delay_hs[names == '{}_{}'.format(pmts[i], pmts[j])]
            rng = np.nonzero(
                np.logical_and(x > x[np.argmax(data)] - 3,
                               x < x[np.argmax(data)] + 3))[0]
            model = (x[1] - x[0]) * np.exp(
                -0.5 * (x[rng] - rec['T'][0, j] + rec['T'][0, i])**2 /
                (rec['St'][0, i]**2 + rec['St'][0, j]**2)) / np.sqrt(
                    2 * np.pi * (rec['St'][0, i]**2 + rec['St'][0, j]**2))
            model = model / np.amax(model) * np.amax(data)
            data = data[rng]
            l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) +
                        data - model)

    if -l < l_min:
        l_min = -l
        np.savez('best_p', p=p, l_min=l_min)
    Rec[counter - 1] = rec[0]
    ls.append(-l)
    np.savez('Rec', Rec=Rec, ls=ls, time=time.time() - start_time)
    return -l
Beispiel #2
0
    1.34047633e+00, 6.54632148e-01, 6.41646582e-01, 1.02866161e+00,
    1.04377416e+00, 7.57914588e-01
], 6.15129303e+00, 3.30747763e+04, 9.06991646e-02, 1.36137465e+00,
          3.58038043e+01, 5.71828126e-01, 3.66017987e-01, 3.05918824e-01)

# p=minimize(L, make_ps(rec_to_p(rec)))
# rec=p_to_rec(p.x)
V = V_mash * np.exp(-(r_mash[:, x1] + np.sqrt(
    (10 / 40)**2 - r_mash[:, x2]**2 - r_mash[:, -1]**2)) / rec[0]['mu'])
s, GS, GS_spectrum, Sspectra, Gtrp, Gsng, GRtrp, GRsng, Scov = Sim(
    rec['N'][0], rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0],
    rec['a'][0], rec['eta'][0], rec['Q'][0], rec['T'][0], rec['St'][0], PEs,
    rec[0]['mu'], x1, x2, r_mash, V / np.sum(V))
start_time = time.time()
m, s_model, Mcov = make_3D(t, rec['N'][0], rec['F'][0], rec['Tf'][0],
                           rec['Ts'][0], rec['R'][0], rec['a'][0],
                           rec['eta'][0], rec['Q'][0], rec['T'][0],
                           rec['St'][0], dS, PEs, r_mash, V / np.sum(V), Xcov)
dT = time.time() - start_time

fig, ax = plt.subplots(2, 3)
for i in range(len(pmts)):
    np.ravel(ax)[i].plot(
        t,
        np.sum(H[:, :, i].T * np.arange(np.shape(H)[0]), axis=1) /
        np.sum(H[:, 0, i]),
        'ko',
        label='Data - PMT{}'.format(pmts[i]))
    np.ravel(ax)[i].plot(t[:100],
                         np.sum(m[:, :, i].T * np.arange(np.shape(m)[0]),
                                axis=1),
                         'ro',
Beispiel #3
0
    ls.append(-l)
    np.savez('Rec', Rec=Rec, ls=ls, time=time.time() - start_time)
    return -l


rec[0] = ([
    0.20943015, 0.1609747, 0.14237847, 0.23220429, 0.23181889, 0.4519858
], [
    42.73610057, 42.40555684, 42.4383545, 42.82072981, 42.45310635, 42.55993533
], [1.04916959, 0.56848552, 0.90283598, 1.25384056, 0.86560551, 0.6160742
    ], 0.10776426, 2.20348296, 35.26396902, 0.56295857, 0.41240389, 0.22790822)

# p=minimize(L, make_ps(rec_to_p(rec)))
# rec=p_to_rec(p.x)
m, s_model = make_3D(t, N, rec['F'][0], rec['Tf'][0], rec['Ts'][0],
                     rec['R'][0], rec['a'][0], rec['eta'][0], rec['Q'][0],
                     rec['T'][0], rec['St'][0], dS, PEs, r_mash, V_mash)
s, GS, GS_spectrum, Sspectra, Gtrp, Gsng, GRtrp, GRsng, Scov = Sim(
    N, rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0], rec['a'][0],
    rec['eta'][0], rec['Q'][0], rec['T'][0], rec['St'][0], PEs)

fig, ax = plt.subplots(2, 3)
for i in range(len(pmts)):
    np.ravel(ax)[i].plot(
        t,
        np.sum(H[:, :, i].T * np.arange(np.shape(H)[0]), axis=1) /
        np.sum(H[:, 0, i]),
        'ko',
        label='Data - PMT{}'.format(pmts[i]))
    np.ravel(ax)[i].plot(
        t[:100],
Beispiel #4
0
    params = np.vstack((params, np.append(p[-5:], -l)))
    np.savez('params', params=params)
    return -l


rec[0] = ([
    0.15031393, 0.10126694, 0.0980743, 0.15169108, 0.13757894, 0.27692865
], [
    42.6965627, 42.79534384, 42.98685503, 42.85373486, 42.54194199, 42.92884848
], [0.85148873, 0.82144334, 0.75498879, 0.84165176, 1.09559689,
    0.82225653], 0.10919454, 1.65475904, 32.72410862, 0.51185353, 5.27711599)

p = minimize(L, make_ps(rec_to_p(rec)))
rec = p_to_rec(p.x)

m = make_3D(t, N, rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0],
            rec['b'][0], rec['Q'][0], rec['T'][0], rec['St'][0])
s, GS, GS_spectrum, Gtrp, Gsng, GRtrp, GRsng = Sim(t, N, rec['F'][0],
                                                   rec['Tf'][0], rec['Ts'][0],
                                                   rec['R'][0], rec['b'][0],
                                                   rec['Q'][0], rec['T'][0],
                                                   rec['St'][0])

fig, ax = plt.subplots(2, 3)
for i in range(len(pmts)):
    np.ravel(ax)[i].plot(t,
                         np.sum(H[:, :, i].T * np.arange(np.shape(H)[0]),
                                axis=1),
                         'ko',
                         label='Data - PMT{}'.format(pmts[i]))
    np.ravel(ax)[i].plot(
        t[:100],
Beispiel #5
0
def L(p):
    global counter, l_min, params
    counter += 1

    nams = ['Q', 'Ts', 'T', 'F', 'Tf', 'Ts', 'R', 'b']
    for name in nams:
        if np.any(rec[name] < 0):
            return 1e10 * (1 - np.amin(rec[name]))
    nams = ['F', 'R']
    for name in nams:
        if np.any(rec[name] > 1):
            return 1e10 * (np.amax(rec[name]))
    if rec['Ts'][0] > 100:
        return 1e10 * rec['Ts'][0]
    if np.any(rec['St'][0] < 0.5):
        return 1e10 * (1 + np.abs(np.amin(rec['St'][0])))
    if np.any(rec['T'][0] < 10):
        return 1e10 * (10 - np.amin(rec['T'][0]))
    if np.any(rec['b'][0] < 1):
        return 1e10 * (1 / np.abs(rec['b'][0]))
    if np.isinf(expi((t[-1] + rec['b'][0]) / rec['Tf'][0])):
        return 1e10 / rec['Tf'][0]

    l = 0
    m = make_3D(t, N, rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0],
                rec['b'][0], rec['Q'][0], rec['T'][0], rec['St'][0])
    model = np.sum(H[:, 0, 0]) * np.ravel(m)
    data = np.ravel(H[:, :100, :])
    if np.any(model < 0):
        return 1e10 * (1 - np.amin(model))
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    data = np.ravel(spectra)
    lmda = np.sum(np.matmul(
        np.transpose(m, (2, 1, 0)),
        np.arange(np.shape(m)[0]).reshape(np.shape(m)[0], 1))[:, :, 0],
                  axis=1)
    I = np.arange(len(PEs) * len(lmda))
    model = poisson.pmf(PEs[I // len(lmda)],
                        lmda[I % len(lmda)]).reshape(len(PEs), len(lmda))
    model = np.ravel(model / np.amax(model, axis=0) * np.amax(spectra, axis=0))
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    for i in range(len(pmts) - 1):
        for j in range(i + 1, len(pmts)):
            x = delays[names == '{}_{}'.format(pmts[i], pmts[j])]
            data = delay_hs[names == '{}_{}'.format(pmts[i], pmts[j])]
            rng = np.nonzero(
                np.logical_and(x > x[np.argmax(data)] - 3,
                               x < x[np.argmax(data)] + 3))[0]
            model = (x[1] - x[0]) * np.exp(
                -0.5 * (x[rng] - rec['T'][0, j] + rec['T'][0, i])**2 /
                (rec['St'][0, i]**2 + rec['St'][0, j]**2)) / np.sqrt(
                    2 * np.pi * (rec['St'][0, i]**2 + rec['St'][0, j]**2))
            model = model / np.amax(model) * np.amax(data)
            data = data[rng]
            l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) +
                        data - model)

    if -l < l_min:
        l_min = -l
        np.savez('best_p', p=p, l_min=l_min)
        print('$$$$$$$$$$$ NEW best p $$$$$$$$$$$$$$$$$$$$')
    if True:
        print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
        print('iteration=', int(counter / (len(p) + 1)), 'fanc=', -l)
        print('--------------------------------')
        print(rec)
    params = np.vstack((params, np.append(p[-5:], -l)))
    np.savez('params', params=params)
    return -l
Beispiel #6
0
def L(p):
    rec=p_to_rec(p)
    global counter, l_min, params, ls
    counter+=1

    nams=['Q', 'Ts', 'T', 'F', 'Tf', 'Ts', 'R', 'a', 'eta']
    for name in nams:
        if np.any(rec[name]<0):
            Rec[counter-1]=rec[0]
            ls.append(1e10*(1-np.amin(rec[name])))
            np.savez('Rec', Rec=Rec, ls=ls)
            return 1e10*(1-np.amin(rec[name]))
    nams=['F', 'R', 'eta', 'a']
    for name in nams:
        if np.any(rec[name]>1):
            Rec[counter-1]=rec[0]
            ls.append(1e10*(np.amax(rec[name])))
            np.savez('Rec', Rec=Rec, ls=ls)
            return 1e10*(np.amax(rec[name]))
    if rec['Ts'][0]>100:
        Rec[counter-1]=rec[0]
        ls.append(1e10*rec['Ts'][0])
        np.savez('Rec', Rec=Rec, ls=ls)
        return 1e10*rec['Ts'][0]
    if np.any(rec['St'][0]<0.5):
        Rec[counter-1]=rec[0]
        ls.append(1e10*(1+np.abs(np.amin(rec['St'][0]))))
        np.savez('Rec', Rec=Rec, ls=ls)
        return 1e10*(1+np.abs(np.amin(rec['St'][0])))
    if np.any(rec['T'][0]<10):
        Rec[counter-1]=rec[0]
        ls.append(1e10*(10-np.amin(rec['T'][0])))
        np.savez('Rec', Rec=Rec, ls=ls)
        return 1e10*(10-np.amin(rec['T'][0]))


    l=0
    m=make_3D(t, N, rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['R'][0], rec['a'][0], rec['eta'][0], rec['Q'][0], rec['T'][0], rec['St'][0])
    model=np.sum(H[:,0,0])*np.ravel(m)
    data=np.ravel(H[:,:100,:])
    if np.any(model<0):
        Rec[counter-1]=rec[0]
        ls.append(1e10*(1-np.amin(model)))
        np.savez('Rec', Rec=Rec, ls=ls)
        return 1e10*(1-np.amin(model))
    l+=np.sum(data*np.log((model+1e-10)/(data+1e-10))+data-model)

    data=np.ravel(spectra)
    model=np.ravel(np.sum(spectra[:,0])*make_spectra(m, PEs))
    l+=np.sum(data*np.log((model+1e-10)/(data+1e-10))+data-model)

    for i in range(len(pmts)-1):
        for j in range(i+1, len(pmts)):
            x=delays[names=='{}_{}'.format(pmts[i], pmts[j])]
            data=delay_hs[names=='{}_{}'.format(pmts[i], pmts[j])]
            rng=np.nonzero(np.logical_and(x>x[np.argmax(data)]-3, x<x[np.argmax(data)]+3))[0]
            model=(x[1]-x[0])*np.exp(-0.5*(x[rng]-rec['T'][0,j]+rec['T'][0,i])**2/(rec['St'][0,i]**2+rec['St'][0,j]**2))/np.sqrt(2*np.pi*(rec['St'][0,i]**2+rec['St'][0,j]**2))
            model=model/np.amax(model)*np.amax(data)
            data=data[rng]
            l+=np.sum(data*np.log((model+1e-10)/(data+1e-10))+data-model)

    if -l<l_min:
        l_min=-l
        np.savez('best_p', p=p, l_min=l_min)
        print('$$$$$$$$$$$ NEW best p $$$$$$$$$$$$$$$$$$$$')
    if True:
        print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
        print('iteration=', int(counter/(len(p)+1)), 'fanc=',-l)
        print('--------------------------------')
        print(rec)
    # params=np.vstack((params, np.append(p[-5:], -l)))
    Rec[counter-1]=rec[0]
    ls.append(-l)
    np.savez('Rec', Rec=Rec, ls=ls)
    return -l
Beispiel #7
0
], [
    7.08836162e-01, 1.10146273e+00, 1.58123658e+00, 1.92190596e+00,
    7.89546120e-01, 8.25660856e-01
], [3.89209041e+04,
    8.50216818e+03], [8.02020474e-02,
                      1.15605912e-01], [4.25063975e-01, 4.19293224e-01],
          [3.74194703e-01,
           2.53987575e-01], 1.87200329e+00, 3.58456460e+01, 5.29547734e-01)

# p=minimize(L, make_ps(rec_to_p(rec)))
# rec=p_to_rec(p.x)

for j in range(len(Datas)):
    PEs = np.arange(len(spectra[j][:, 0]))
    m = make_3D(t, rec['N'][0, j // 2], rec['F'][0, j // 2], rec['Tf'][0],
                rec['Ts'][0], rec['R'][0], rec['a'][0, j // 2],
                rec['eta'][0, j // 2], rec['Q'][0], rec['T'][0], rec['St'][0])
    s, GS, GS_spectrum, S_spectra, Gtrp, Gsng, GRtrp, GRsng = Sim(
        rec['N'][0, j // 2], rec['F'][0, j // 2], rec['Tf'][0], rec['Ts'][0],
        rec['R'][0], rec['a'][0, j // 2], rec['eta'][0, j // 2], rec['Q'][0],
        rec['T'][0], rec['St'][0], PEs)

    fig, ax = plt.subplots(2, 3)
    fig.suptitle(Datas[j])
    for i in range(len(pmts)):
        np.ravel(ax)[i].plot(
            t,
            np.sum(H[j][:, :, i].T * np.arange(np.shape(H[j])[0]), axis=1) /
            np.sum(H[j][:, 0, i]),
            'ko',
            label='Data - PMT{}'.format(pmts[i]))
Beispiel #8
0
def L(p):
    rec = p_to_rec(p)
    global counter
    counter += 1

    nams = ['Q', 'Ts', 'T', 'F1', 'F2', 'Tf', 'Ts']
    for name in nams:
        if np.any(rec[name] < 0):
            return 1e10 * (1 - np.amin(rec[name]))
    nams = ['F1', 'F2']
    for name in nams:
        if np.any(rec[name] > 1):
            return 1e10 * (np.amax(rec[name]))
    if rec['Ts'][0] > 100:
        return 1e10 * rec['Ts'][0]
    if np.any(rec['St'][0] < 0.5):
        return 1e10 * (1 + np.abs(np.amin(rec['St'][0])))

    l = 0
    m = make_3D(t, dt, rec['N'][0], np.zeros(len(pmts)), rec['F1'][0],
                rec['F2'][0], rec['Tf'][0], rec['Tm'][0], rec['Ts'][0],
                rec['Q'][0], rec['T'][0], rec['St'][0])
    model = np.ravel(m * np.sum(H[:, 0, :], axis=0))
    data = np.ravel(H)
    if np.any(model < 0):
        print('Model<0')
        sys.exit()
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    data = np.ravel(spectra)
    lmda = np.sum(np.matmul(
        np.transpose(m, (2, 1, 0)),
        np.arange(np.shape(m)[0]).reshape(np.shape(m)[0], 1))[:, :, 0],
                  axis=1)
    I = np.arange(len(PEs) * len(lmda))
    model = poisson.pmf(PEs[I // len(lmda)],
                        lmda[I % len(lmda)]).reshape(len(PEs), len(lmda))
    model = np.ravel(model / np.amax(model, axis=0) * np.amax(spectra, axis=0))
    l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) + data - model)

    for i in range(len(pmts) - 1):
        for j in range(i + 1, len(pmts)):
            x = delays[names == '{}_{}'.format(pmts[i], pmts[j])]
            data = delay_hs[names == '{}_{}'.format(pmts[i], pmts[j])]
            rng = np.nonzero(
                np.logical_and(x > x[np.argmax(data)] - 3,
                               x < x[np.argmax(data)] + 3))[0]
            model = (x[1] - x[0]) * np.exp(
                -0.5 * (x[rng] - rec['T'][0, j] + rec['T'][0, i])**2 /
                (rec['St'][0, i]**2 + rec['St'][0, j]**2)) / np.sqrt(
                    2 * np.pi * (rec['St'][0, i]**2 + rec['St'][0, j]**2))
            model = model / np.amax(model) * np.amax(data)
            data = data[rng]
            l += np.sum(data * np.log((model + 1e-10) / (data + 1e-10)) +
                        data - model)

    if counter % (len(p) + 1) == 0:
        # if True:
        print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
        print('iteration=', int(counter / (len(p) + 1)), 'fanc=', -l)
        print('--------------------------------')
        print(rec)
    return -l
Beispiel #9
0

rec[0] = ([
    0.30878609, 0.22992061, 0.18489446, 0.30308087, 0.30266814, 0.48582283
], [
    5.08976768e-01, 2.24425730e-09, 4.35594578e-01, 2.15423030e-01,
    2.35416538e-01, 4.77517045e-01
], [0.78569348, 0.9, 0.97304069, 0.936820594, 1.16424185,
    1.02137693], 115.72704788, 0.15770965, 13.82264744, 37.57653787)

print(L(rec_to_p(rec)))
# p=minimize(L, rec_to_p(rec), method='Nelder-Mead', options={'disp':True, 'maxfev':100000})
# rec=p_to_rec(p.x)

m = make_3D(t, dt, rec['N'][0], np.zeros(len(pmts)), rec['F1'][0],
            rec['F2'][0], rec['Tf'][0], rec['Tm'][0], rec['Ts'][0],
            rec['Q'][0], rec['T'][0], rec['St'][0])
s, GS, GS_spectrum = Sim(rec['N'][0], rec['Q'][0], rec['T'][0], 5,
                         np.zeros(len(pmts)), rec['F'][0], rec['Tf'][0],
                         rec['Ts'][0], rec['St'][0])

fig, ax = plt.subplots(2, 3)
for i in range(len(pmts)):
    np.ravel(ax)[i].plot(t,
                         np.sum(H[:, :, i].T * np.arange(np.shape(H)[0]),
                                axis=1),
                         'ko',
                         label='Data - PMT{}'.format(pmts[i]))
    np.ravel(ax)[i].plot(
        t,
        np.sum(H[:, 0, i]) *
Beispiel #10
0
rec[0] = ([
    1.52955643e-01, 1.21685760e-01, 1.12773659e-01, 1.57756046e-01,
    1.49101133e-01, 3.07357999e-01
], [
    4.21813089e+01, 4.23137955e+01, 4.23327547e+01, 4.21586313e+01,
    4.23591370e+01, 4.22545259e+01
], [
    9.79864208e-01, 8.01769269e-01, 8.52056472e-01, 9.65873999e-01,
    5.71299405e-01, 8.97126437e-01
], 1.70502766e-02, 5.39283739e+00, 4.70872930e+01)
# print(L(rec_to_p(rec)))
# p=minimize(L, rec_to_p(rec), method='Nelder-Mead', options={'disp':True, 'maxfev':100000})
# rec=p_to_rec(p.x)

m = make_3D(t, dt, N, np.zeros(len(pmts)), rec['F'][0], rec['Tf'][0],
            rec['Ts'][0], rec['Q'][0], rec['T'][0], rec['St'][0])
# s, GS, GS_spectrum=Sim2(rec['N'][0], rec['Q'][0], rec['T'][0], 5,  rec['R'][0], rec['F'][0], rec['Tf'][0], rec['Ts'][0], rec['St'][0])
s = m

fig, ax = plt.subplots(2, 3)
for i in range(len(pmts)):
    np.ravel(ax)[i].plot(t,
                         np.sum(H[:, :, i].T * np.arange(np.shape(H)[0]),
                                axis=1),
                         'ko',
                         label='Data - PMT{}'.format(pmts[i]))
    np.ravel(ax)[i].plot(
        t[:100],
        np.sum(H[:, 0, i]) *
        np.sum(m[:, :, i].T * np.arange(np.shape(m)[0]), axis=1),
        'r.-',