Ejemplo n.º 1
0
def Sim_fit(x1, x2, left, right, gamma, Q, T, St, mu, W, F, Tf, Ts, R, a, eta,
            PEs):
    f = np.sum(make_recomb(np.arange(1000 * 20) / 100, a,
                           eta).reshape(1000, 20),
               axis=1)
    i = 2
    while 1 - np.sum(f) > 1e-4:
        f = np.sum(make_recomb(np.arange(i * 1000 * 20) / 100, a,
                               eta).reshape(i * 1000, 20),
                   axis=1)
        i += 1
    if np.sum(f) - 1 > 1e-4:
        print('In recombenation model:')
        print('sum(f):', np.sum(f))
        sys.exit()
    else:
        f = f / np.sum(f)

    N_events = 10000
    d = np.zeros((N_events, 100, len(Q)))
    H = np.zeros((50, 100, len(Q)))
    spectra = np.zeros((len(PEs), len(Q)))
    cov = np.zeros((11, 15))
    v = make_v(N_events, mu, x1, x2)
    N = np.random.poisson(1000 * gamma / W, N_events)
    p = multiprocessing.Pool(processes=2)
    d = p.map(make_d, make_iter(N, Q, T, St, F, Tf, Ts, R, a, eta, f, v))
    p.close()
    p.join()
    # d=make_d_loop(N, Q, T, St, F, Tf, Ts, R, a, eta, f, v)

    s = np.sum(np.sum(d, axis=1), axis=1)
    ind = np.nonzero(np.logical_and(s > left, s < right))[0]
    if len(ind) == 0:
        w = np.abs(np.mean(s) - (left + right) / 2)
        return H - w, spectra - w, cov - w
    d = np.array(d)[ind]

    for i in range(len(Q)):
        spectra[:, i] = np.histogram(np.sum(d[:, :, i], axis=1),
                                     bins=np.arange(len(PEs) + 1) - 0.5)[0]

    k = 0
    for i in range(5):
        Si = np.sum(d[:, :, i], axis=1)
        Mi = np.mean(Si)
        for j in range(i + 1, 6):
            Sj = np.sum(d[:, :, j], axis=1)
            Mj = np.mean(Sj)
            cov[:, k] = np.histogram((Si - Mi) * (Sj - Mj) / (Mi * Mj),
                                     bins=11,
                                     range=[-0.1, 0.1])[0]
            k += 1

    for k in range(100):
        for j in range(len(Q)):
            H[:, k,
              j] = np.histogram(d[:, k, j],
                                bins=np.arange(np.shape(H)[0] + 1) - 0.5)[0]
    return H / len(ind), spectra / len(ind), cov / len(ind)
Ejemplo n.º 2
0
def Sim_fit(x1, x2, left, right, gamma, Q, W, nLXe, mu, Bins, bins):
    spectra=np.zeros((len(bins)-1, len(Q)))
    cov=np.zeros(15)
    N_events=1000
    N=np.random.poisson(1000*122/W, N_events)
    v=make_v(N_events, mu, x1, x2)
    p=multiprocessing.Pool(processes=2)
    s=p.map(make_d, make_iter(N, Q, v, nLXe))
    p.close()
    p.join()
    s=np.array(s)
    up=s[:,0]+s[:,1]
    dn=s[:,-1]+s[:,-2]+s[:,-3]
    ind=np.nonzero(np.logical_and(np.logical_and(np.sum(s, axis=1)>left, np.sum(s, axis=1)<right), dn<3*up+18))[0]
    if len(ind)==0:
        w=np.abs(np.mean(np.sum(s, axis=1))-(left+right)/2)
        return np.zeros(len(Bins)-1)-w, spectra-w, cov-w

    s=np.array(s)[ind]
    spectrum=np.histogram(np.sum(s, axis=1), bins=Bins)[0]
    for i in range(len(Q)):
        spectra[:,i]=np.histogram(s[:,i], bins=bins)[0]

    M=np.mean(s, axis=0)
    k=0
    for i in range(5):
        for j in range(i+1,6):
            cov[k]=np.mean((s[:,i]-M[i])*(s[:,j]-M[j]))
            k+=1

    return spectrum/len(ind), spectra/len(ind), cov
Ejemplo n.º 3
0
def Sim_fit(x1, x2, left, right, gamma, Q, T, St, W, std, nLXe, sigma_smr, mu,
            R, a, F, Tf, Ts, Bins, bins):
    spectra = np.zeros((len(bins) - 1, len(Q)))
    N_events = 1000
    H = np.zeros((15, 100, len(Q)))
    G = np.zeros((5, 50, 100))
    N = np.array([]).astype(int)
    while len(N) < N_events:
        n = np.round(np.random.normal(1000 * gamma / W, std,
                                      N_events - len(N))).astype(int)
        N = np.append(N, n[n > 0])
    v = make_v(N_events, mu, x1, x2)
    p = multiprocessing.Pool(processes=2)
    ret = p.map(make_d,
                make_iter(N, Q, T, St, nLXe, sigma_smr, R, a, F, Tf, Ts, v))
    p.close()
    p.join()
    Ret = np.array(ret)
    s = np.sum(Ret[:, 0], axis=1)
    up = s[:, 0] + s[:, 1]
    dn = s[:, -1] + s[:, -2] + s[:, -3]
    ind = np.nonzero(
        np.logical_and(
            np.logical_and(
                np.sum(s, axis=1) >= left,
                np.sum(s, axis=1) <= right), dn < 3 * up + 18))[0]
    if len(ind) == 0:
        print('len in<0')
        w = np.abs(np.mean(np.sum(s, axis=1)) - (left + right) / 2)
        return np.zeros(len(Bins) - 1) - w, spectra - w, G, H

    Ret = Ret[ind]
    for i in range(np.shape(Ret)[2]):
        G[0, :, i] = np.histogram(np.sum(Ret[:, 0, i, :], axis=1),
                                  bins=np.arange(
                                      (np.shape(G)[1] + 1)) - 0.5)[0]
        G[1, :, i] = np.histogram(np.sum(Ret[:, 1, i, :], axis=1),
                                  bins=np.arange(
                                      (np.shape(G)[1] + 1)) - 0.5)[0]
        G[2, :, i] = np.histogram(np.sum(Ret[:, 2, i, :], axis=1),
                                  bins=np.arange(
                                      (np.shape(G)[1] + 1)) - 0.5)[0]
        G[3, :, i] = np.histogram(np.sum(Ret[:, 3, i, :], axis=1),
                                  bins=np.arange(
                                      (np.shape(G)[1] + 1)) - 0.5)[0]
        G[4, :, i] = np.histogram(np.sum(Ret[:, 4, i, :], axis=1),
                                  bins=np.arange(
                                      (np.shape(G)[1] + 1)) - 0.5)[0]
        for j in range(len(Q)):
            H[:, i, j] = np.histogram(Ret[:, 0, i, j],
                                      bins=np.arange(
                                          (np.shape(H)[0] + 1)) - 0.5)[0]

    spectrum = np.histogram(np.sum(np.sum(Ret[:, 0], axis=1), axis=1),
                            bins=Bins)[0]
    for i in range(len(Q)):
        spectra[:, i] = np.histogram(np.sum(Ret[:, 0, :, i], axis=1),
                                     bins=bins)[0]
    return spectrum / len(ind), spectra / len(ind), G / len(ind), H / len(ind)
Ejemplo n.º 4
0
def Sim_show(x1, x2, left, right, gamma, Q, T, St, Sa, mu, W, F, Tf, Ts, R, a, PEs):

    N_events=10000
    H=np.zeros((50, 200, len(Q)))
    G=np.zeros((250,200))
    Gtrp=np.zeros((250,200))
    Gsng=np.zeros((250,200))
    GRtrp=np.zeros((250,200))
    GRsng=np.zeros((250,200))
    spectra=np.zeros((len(PEs),len(Q)))
    cov=np.zeros((11, 15))

    v=make_v(N_events, mu, x1, x2)
    N=np.random.poisson(1000*gamma/W, N_events)
    p=multiprocessing.Pool(processes=2)
    ds=p.map(make_d_show, make_iter(N, Q, T, St, Sa, F, Tf, Ts, R, a, v))
    p.close()
    p.join()

    ds=np.array(ds)
    s=np.sum(np.sum(ds[:,0,:100],axis=1), axis=1)
    ind=np.nonzero(np.logical_and(s>left, s<right))[0]
    if len(ind)==0:
        w=np.abs(np.mean(s)-(left+right)/2)
        print('No events in the left-right band')
        return H-w, spectra-w, cov-w, G-w, G-w, G-w, G-w, G-w, 0
    ds=ds[ind]
    d=ds[:,0]
    trp=ds[:,1]
    sng=ds[:,2]
    Rtrp=ds[:,3]
    Rsng=ds[:,4]

    for i in range(len(Q)):
        spectra[:,i]=np.histogram(np.sum(d[:,:100,i], axis=1), bins=np.arange(len(PEs)+1)-0.5)[0]

    # k=0
    # for i in range(5):
    #     Si=np.sum(d[:,:,i], axis=1)
    #     Mi=np.mean(Si)
    #     for j in range(i+1,6):
    #         Sj=np.sum(d[:,:,j], axis=1)
    #         Mj=np.mean(Sj)
    #         cov[:,k]=np.histogram((Si-Mi)*(Sj-Mj)/(Mi*Mj), bins=11, range=[-0.5,0.5])[0]
    #         k+=1

    for k in range(200):
        G[:,k]=np.histogram(np.sum(d[:,k,:], axis=1), bins=np.arange(np.shape(G)[0]+1)-0.5)[0]
        Gtrp[:,k]=np.histogram(np.sum(trp[:,k,:], axis=1), bins=np.arange(np.shape(G)[0]+1)-0.5)[0]
        Gsng[:,k]=np.histogram(np.sum(sng[:,k,:], axis=1), bins=np.arange(np.shape(G)[0]+1)-0.5)[0]
        GRtrp[:,k]=np.histogram(np.sum(Rtrp[:,k,:], axis=1), bins=np.arange(np.shape(G)[0]+1)-0.5)[0]
        GRsng[:,k]=np.histogram(np.sum(Rsng[:,k,:], axis=1), bins=np.arange(np.shape(G)[0]+1)-0.5)[0]
        for j in range(len(Q)):
            H[:,k,j]=np.histogram(d[:,k,j], bins=np.arange(np.shape(H)[0]+1)-0.5)[0]
    return H/N_events, spectra/N_events, cov/N_events,  G/N_events, Gtrp/N_events, Gsng/N_events, GRtrp/N_events, GRsng/N_events, N_events
Ejemplo n.º 5
0
def Sim_fit(x1, x2, left, right, gamma, Q, T, St, mu, W, g, F, Tf, Ts, R, a,
            PEs):
    N_events = 10000
    d = np.zeros((N_events, 100, len(Q)))
    H = np.zeros((50, 100, len(Q)))
    spectra = np.zeros((len(PEs), len(Q)))
    cov = np.zeros((11, 15))
    v = make_v(N_events, mu, x1, x2)
    gamma = np.random.choice([gamma1, gamma2], size=1, p=[g, 1 - g])
    N = np.random.poisson(1000 * gamma / W, N_events)
    p = multiprocessing.Pool(processes=2)
    d = p.map(make_d, make_iter(N, Q, T, St, F, Tf, Ts, R, a, v))
    p.close()
    p.join()

    s = np.sum(np.sum(d, axis=1), axis=1)
    ind = np.nonzero(np.logical_and(s > left, s < right))[0]
    if len(ind) == 0:
        w = np.abs(np.mean(s) - (left + right) / 2)
        return H - w, spectra - w, cov - w
    d = np.array(d)[ind]

    for i in range(len(Q)):
        spectra[:, i] = np.histogram(np.sum(d[:, :, i], axis=1),
                                     bins=np.arange(len(PEs) + 1) - 0.5)[0]

    k = 0
    for i in range(5):
        Si = np.sum(d[:, :, i], axis=1)
        Mi = np.mean(Si)
        for j in range(i + 1, 6):
            Sj = np.sum(d[:, :, j], axis=1)
            Mj = np.mean(Sj)
            cov[:, k] = np.histogram((Si - Mi) * (Sj - Mj) / (Mi * Mj),
                                     bins=11,
                                     range=[-0.1, 0.1])[0]
            k += 1

    for k in range(100):
        for j in range(len(Q)):
            H[:, k,
              j] = np.histogram(d[:, k, j],
                                bins=np.arange(np.shape(H)[0] + 1) - 0.5)[0]
    return H / len(ind), spectra / len(ind), cov / len(ind)
Ejemplo n.º 6
0
def Sim_fit(x1, x2, left, right, gamma, Q, W, Sa, g, Bins, bins):
    spectra = np.zeros((len(bins) - 1, len(Q)))
    cov = np.zeros(15)
    N_events = 10000
    N122 = np.random.binomial(N_events, g)
    N136 = N_events - N122
    N = np.append(np.random.poisson(1000 * 122 / W, N122),
                  np.random.poisson(1000 * 136 / W, N136))
    # N=np.random.poisson(1000*gamma/W, N_events)
    p = multiprocessing.Pool(processes=2)
    s = p.map(make_d, make_iter(N, Q, Sa, x1, x2))
    p.close()
    p.join()
    s = np.array(s)
    up = s[:, 0] + s[:, 1]
    dn = s[:, -1] + s[:, -2] + s[:, -3]
    ind = np.nonzero(
        np.logical_and(
            np.logical_and(
                np.sum(s, axis=1) > left,
                np.sum(s, axis=1) < right), True))[0]
    if len(ind) == 0:
        print('len in<0')
        w = np.abs(np.mean(np.sum(s, axis=1)) - (left + right) / 2)
        return np.zeros(len(Bins) - 1) - w, spectra - w, cov - w

    s = np.array(s)[ind]
    spectrum = np.histogram(np.sum(s, axis=1), bins=Bins)[0]
    for i in range(len(Q)):
        spectra[:, i] = np.histogram(s[:, i], bins=bins)[0]

    M = np.mean(s, axis=0)
    k = 0
    # fig, ax=plt.subplots(3,5)
    for i in range(5):
        for j in range(i + 1, 6):
            cov[k] = np.mean((s[:, i] - M[i]) * (s[:, j] - M[j]))
            # np.ravel(ax)[k].hist2d(s[:,i]-M[i], s[:,j]-M[j] ,bins=[50,50], range=[[-50, 50], [-50,50]], norm=mcolors.PowerNorm(0.3))
            k += 1
    # plt.show()
    return spectrum / len(ind), spectra / len(ind), cov
Ejemplo n.º 7
0
def Sim_fit(x1, x2, left, right, gamma, Q, W, PEs):
    spectra = np.zeros((len(PEs), len(Q)))
    N_events = 10000
    N = np.random.poisson(1000 * gamma / W, N_events)
    v = make_v(N_events)
    p = multiprocessing.Pool(processes=2)
    s = p.map(make_d, make_iter(N, Q, v))
    p.close()
    p.join()
    ind = np.nonzero(
        np.logical_and(np.sum(s, axis=1) > left,
                       np.sum(s, axis=1) < right))[0]
    if len(ind) == 0:
        w = np.abs(np.mean(np.sum(s, axis=1)) - (left + right) / 2)
        return spectra - w
    s = np.array(s)[ind]

    for i in range(len(Q)):
        spectra[:, i] = np.histogram(s[:, i],
                                     bins=np.arange(len(PEs) + 1) - 0.5)[0]
    return spectra / N_events
Ejemplo n.º 8
0
def Sim_fit(x1, x2, left, right, gamma, Q, Sa, W, std, Bins, bins, Abins):
    spectra = np.zeros((len(bins) - 1, len(Q)))
    N_events = 1000
    # N=np.random.poisson(1000*gamma/W, N_events)
    N = np.array([]).astype(int)
    while len(N) < N_events:
        n = np.round(np.random.normal(1000 * gamma / W, std,
                                      N_events - len(N))).astype(int)
        N = np.append(N, n[n > 0])
    v = make_v(N_events)
    p = multiprocessing.Pool(processes=2)
    ret = p.map(make_d, make_iter(N, Q, Sa, v, Abins))
    p.close()
    p.join()
    s = np.zeros((N_events, len(Q)))
    Areas = np.zeros((len(Q), len(Abins[0]) - 1))
    for i in range(N_events):
        s[i] = ret[i][0]
        Areas += ret[i][1]
    up = s[:, 0] + s[:, 1]
    dn = s[:, -1] + s[:, -2] + s[:, -3]
    ind = np.nonzero(
        np.logical_and(
            np.logical_and(
                np.sum(s, axis=1) >= left,
                np.sum(s, axis=1) <= right), dn < 3 * up + 18))[0]
    if len(ind) == 0:
        print('len in<0')
        w = np.abs(np.mean(np.sum(s, axis=1)) - (left + right) / 2)
        return np.zeros(len(Bins) - 1) - w, spectra - w, Areas * 0

    s = np.array(s)[ind]
    spectrum = np.histogram(np.sum(s, axis=1), bins=Bins)[0]
    for i in range(len(Q)):
        spectra[:, i] = np.histogram(s[:, i], bins=bins)[0]

    return spectrum / len(ind), spectra / len(ind), (Areas.T /
                                                     np.sum(Areas, axis=1))
Ejemplo n.º 9
0
def make_3D(x1, x2, gamma, Q, T, St, mu, W, F, Tf, Ts, R, a, eta, PEs, Xcov):
    v = make_v(10000, mu, x1, x2)
    V_mash, dS = make_dS(v)
    t = np.arange(200)
    dt = 1
    r = np.arange(t[0], t[-1] + dt, dt / 100)
    dr = r[1] - r[0]
    N = gamma * 1000 / W
    n = np.arange(np.floor(N - 3 * np.sqrt(N)), np.ceil(N + 3 * np.sqrt(N)))
    pois = poisson.pmf(n, N)
    nu = np.arange(20)
    model = np.sum(((1 - R) * Promt(r, F, Tf, Ts, T, St) + R *
                    (1 - eta) * Recomb(r, F, Tf, Ts, T, St, a, eta)).reshape(
                        len(t), 100, len(T)),
                   axis=1)
    frac = np.sum(model[:int(np.mean(T) + 100)], axis=0)
    s = np.zeros((len(PEs), len(Q), len(n)))

    p = multiprocessing.Pool(processes=2)
    Bs = p.map(make_B, make_iter(V_mash, dS, nu, n, model, Q))
    p.close()
    p.join()

    B = np.sum(np.array(Bs), axis=0)
    B[np.logical_and(B > 1, B < 1 + 1e-6)] = 1
    I = np.arange(len(PEs) * len(Q) * len(n) * len(V_mash))
    s = binom.pmf(
        PEs[I // (len(Q) * len(n) * len(V_mash))],
        (n[(I // len(V_mash)) % len(n)]).astype(int),
        dS[I % len(V_mash), (I // (len(n) * len(V_mash))) % len(Q)] *
        Q[(I // (len(n) * len(V_mash))) % len(Q)] *
        frac[(I // (len(n) * len(V_mash))) % len(Q)]).reshape(
            len(PEs), len(Q), len(n), len(V_mash))
    S = np.sum(np.sum(s * V_mash, axis=-1) * pois, axis=-1)

    M = np.sum(S.T * PEs, axis=1)
    Mcov = np.zeros((len(Xcov), 15))
    k = 0
    for i in range(5):
        for j in range(i + 1, 6):
            for p1, pe1 in enumerate(PEs):
                for p2, pe2 in enumerate(PEs):
                    c = (pe1 - M[i]) * (pe2 - M[j]) / (M[i] * M[j])
                    if np.abs(c) <= 0.1:
                        Mcov[np.argmin(np.abs(c - Xcov)), k] += np.sum(
                            np.sum(s[p1, i] * s[p2, j] * V_mash, axis=-1) *
                            pois,
                            axis=-1)
            k += 1

    P0 = np.vstack((np.ones(len(n)), np.cumprod(np.prod(B[0], axis=0),
                                                axis=0)[:-1]))
    P1 = (P0 * (1 - np.prod(B[0], axis=0)))
    P = np.zeros((100, len(nu), len(Q)))
    for i in range(len(Q)):
        P2 = P0 * (1 - np.prod(B[0, np.delete(np.arange(len(Q)), i)], axis=0))
        P[0, 0, i] = np.sum(np.sum(B[0, i] * P2 * pois, axis=1), axis=0)
    P[0, 1:] = np.sum(np.sum(B[1:] * P0 * pois, axis=3), axis=2)
    for i in range(1, 100):
        P[i] = np.sum(np.sum(B[:, :, i:, :] * P1[:len(t) - i, :] * pois,
                             axis=3),
                      axis=2)
    return np.transpose(P, (1, 0, 2)), S, Mcov
Ejemplo n.º 10
0
def Sim_show(x1, x2, left, right, gamma, Q, T, St, mu, W, F, Tf, Ts, R, a, eta,
             PEs):
    f = np.sum(make_recomb(np.arange(1000 * 20) / 100, a,
                           eta).reshape(1000, 20),
               axis=1)
    i = 2
    while 1 - np.sum(f) > 1e-4:
        f = np.sum(make_recomb(np.arange(i * 1000 * 20) / 100, a,
                               eta).reshape(i * 1000, 20),
                   axis=1)
        i += 1
    if np.sum(f) - 1 > 1e-4:
        print('In recombenation model:')
        print('sum(f):', np.sum(f))
        sys.exit()
    else:
        f = f / np.sum(f)

    N_events = 10000
    H = np.zeros((50, 200, len(Q)))
    G = np.zeros((250, 200))
    Gtrp = np.zeros((250, 200))
    Gsng = np.zeros((250, 200))
    GRtrp = np.zeros((250, 200))
    GRsng = np.zeros((250, 200))
    spectra = np.zeros((len(PEs), len(Q)))
    cov = np.zeros((11, 15))

    v = make_v(N_events, mu, x1, x2)
    N = np.random.poisson(1000 * gamma / W, N_events)
    p = multiprocessing.Pool(processes=2)
    ds = p.map(make_d_show, make_iter(N, Q, T, St, F, Tf, Ts, R, a, eta, f, v))
    p.close()
    p.join()

    ds = np.array(ds)
    s = np.sum(np.sum(ds[:, 0, :100], axis=1), axis=1)
    ind = np.nonzero(np.logical_and(s > left, s < right))[0]
    if len(ind) == 0:
        w = np.abs(np.mean(s) - (left + right) / 2)
        return H - w, spectra - w, cov - w, G - w, G - w, G - w, G - w, G - w, 0
    ds = ds[ind]
    d = ds[:, 0]
    trp = ds[:, 1]
    sng = ds[:, 2]
    Rtrp = ds[:, 3]
    Rsng = ds[:, 4]

    for i in range(len(Q)):
        spectra[:, i] = np.histogram(np.sum(d[:, :100, i], axis=1),
                                     bins=np.arange(len(PEs) + 1) - 0.5)[0]

    k = 0
    for i in range(5):
        Si = np.sum(d[:, :, i], axis=1)
        Mi = np.mean(Si)
        for j in range(i + 1, 6):
            Sj = np.sum(d[:, :, j], axis=1)
            Mj = np.mean(Sj)
            cov[:, k] = np.histogram((Si - Mi) * (Sj - Mj) / (Mi * Mj),
                                     bins=11,
                                     range=[-0.5, 0.5])[0]
            k += 1

    for k in range(200):
        G[:, k] = np.histogram(np.sum(d[:, k, :], axis=1),
                               bins=np.arange(np.shape(G)[0] + 1) - 0.5)[0]
        Gtrp[:, k] = np.histogram(np.sum(trp[:, k, :], axis=1),
                                  bins=np.arange(np.shape(G)[0] + 1) - 0.5)[0]
        Gsng[:, k] = np.histogram(np.sum(sng[:, k, :], axis=1),
                                  bins=np.arange(np.shape(G)[0] + 1) - 0.5)[0]
        GRtrp[:, k] = np.histogram(np.sum(Rtrp[:, k, :], axis=1),
                                   bins=np.arange(np.shape(G)[0] + 1) - 0.5)[0]
        GRsng[:, k] = np.histogram(np.sum(Rsng[:, k, :], axis=1),
                                   bins=np.arange(np.shape(G)[0] + 1) - 0.5)[0]
        for j in range(len(Q)):
            H[:, k,
              j] = np.histogram(d[:, k, j],
                                bins=np.arange(np.shape(H)[0] + 1) - 0.5)[0]
    return H / len(ind), spectra / len(ind), cov / len(ind), G / len(
        ind), Gtrp / len(ind), Gsng / len(ind), GRtrp / len(ind), GRsng / len(
            ind), len(ind)