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
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',
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],
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],
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
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
], [ 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]))
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
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]) *
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.-',