Example #1
0
def Sim2(NQ, T, Strig, R, F, Tf, Ts, St):
    pmt_mid, pmt_r, pmt_l, pmt_up, pmt_dn, r = make_pmts(PMTs)
    N_events = 10000
    d = np.zeros((N_events, 200, len(PMTs)))
    H = np.zeros((25, 200, len(PMTs)))
    G = np.zeros((50, 200))
    NGlob = (np.amax(NQ) * 4 * np.pi / r**2) * len(PMTs)
    Q = NQ / np.amax(NQ)
    for i in range(N_events):
        print(i)
        t0 = np.zeros(len(PMTs))
        trig = np.random.normal(0, 5 * Strig, 1)
        N = np.random.poisson(NGlob)
        costheta = np.random.uniform(-1, 1, N)
        phi = np.random.uniform(0, 2 * np.pi, N)
        # n=np.unique(whichPMT(costheta, phi, pmt_mid, pmt_r, pmt_up), return_counts=True)
        n = whichPMT(costheta, phi, pmt_mid, pmt_r, pmt_up, r, [0, 0, 0])
        for j, pmt in enumerate(PMTs):
            ch = np.random.choice(
                3,
                size=np.random.binomial(n[j], Q[j]),
                replace=True,
                p=[R[j], (1 - R[j]) * F, (1 - R[j]) * (1 - F)])
            nd = len(np.nonzero(ch == 0)[0])
            nf = len(np.nonzero(ch == 1)[0])
            ns = len(np.nonzero(ch == 2)[0])
            td = np.random.normal(trig + 5 * T[j], 5 * St[j], nd)
            tf = np.random.normal(
                trig + 5 * T[j] + np.random.exponential(5 * Tf, nf), 5 * St[j],
                nf)
            ts = np.random.normal(
                trig + 5 * T[j] + np.random.exponential(5 * Ts, ns), 5 * St[j],
                ns)
            t = np.append(td, np.append(tf, ts))
            h, bins = np.histogram(t, bins=np.arange(201) * 5)
            t0[j] = np.amin(np.nonzero(h > 0)[0])
            d[i, :, j] = h
        for j in range(len(PMTs)):
            d[i, :, j] = np.roll(d[i, :, j], -int(np.amin(t0)))
    spectrum = np.histogram(np.sum(np.sum(d, axis=2), axis=1),
                            bins=np.arange(400) - 0.5)[0]
    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]
        for j in range(len(PMTs)):
            H[:, k,
              j] = np.histogram(d[:, k, j],
                                bins=np.arange(np.shape(H)[0] + 1) - 0.5)[0]
    return H / N_events, G / N_events, spectrum
Example #2
0
def mash(pmts):
    mid, rt, pmt_l, up, pmt_dn = make_pmts(pmts)
    R = 0.36
    r = 1 * R
    V = [4 * np.pi * r**3 / 3]
    X = [0]
    Y = [0]
    Z = [0]

    v = (1 - R**3) * np.pi / 6 * np.cos(3 * np.pi / 8)
    r = 0.75 * (1 - R**4) / (1 - R**3)
    for i in range(8):
        X.append(r * np.cos(i * np.pi / 4))
        Y.append(r * np.sin(i * np.pi / 4))
        Z.append(0)
        V.append(v)

    v = (1 - R**3) / 3 * np.pi / 3 * (np.cos(np.pi / 8) -
                                      np.cos(3 * np.pi / 8))
    for i in range(6):
        X.append(r * np.cos(i * np.pi / 3 + np.pi / 6) * np.sin(np.pi / 4))
        Y.append(r * np.sin(i * np.pi / 3 + np.pi / 6) * np.sin(np.pi / 4))
        Z.append(r * np.cos(np.pi / 4))
        V.append(v)

        X.append(r * np.cos(i * np.pi / 3 + np.pi / 6) * np.sin(np.pi / 4))
        Y.append(r * np.sin(i * np.pi / 3 + np.pi / 6) * np.sin(np.pi / 4))
        Z.append(-r * np.cos(np.pi / 4))
        V.append(v)

    v = (1 - R**3) / 3 * 2 * np.pi * (1 - np.cos(np.pi / 8))
    X.append(0)
    Y.append(0)
    Z.append(-r)
    V.append(v)
    X.append(0)
    Y.append(0)
    Z.append(r)
    V.append(v)

    r_mash = np.vstack((X, np.vstack((Y, Z)))).T / 4
    dS = np.zeros((len(r_mash), len(pmts)))
    for i in range(len(r_mash)):
        dS[i] = make_dS(r_mash[i], mid, rt, up)

    return r_mash, np.array(V) / (4 * np.pi / 3), dS
Example #3
0
    P1 = (P0 * (1 - np.prod(B[0], axis=0)))
    P = np.zeros((len(t[t < 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, len(t[t < 100])):
        # P[i]=np.sum(np.sum(B[:,:,i:,:]*P1[:len(t)-i,:]*pois, axis=3), axis=2)
        P[i] = np.sum(np.sum(B[:, :, i:, :] * P1[:len(t) - i, :] * pois /
                             dt[i],
                             axis=3),
                      axis=2)
    return np.transpose(P, (1, 0, 2)), S, Mcov


mid, rt, up = make_pmts(pmts)


def whichPMT(v, us, mid, rt, up):
    hits = np.zeros(len(us[0])) - 1
    for i in range(len(mid)):
        a = (1 - np.sum(mid[i] * v, axis=0)) / np.sum(us.T * mid[i], axis=1)
        r = v + (a * us).T - mid[i]
        hits[np.nonzero(
            np.logical_and(
                a > 0,
                np.logical_and(
                    np.abs(np.sum(r * rt[i], axis=1)) < np.sum(rt[i]**2),
                    np.abs(np.sum(r * up[i], axis=1)) < np.sum(up[i]**
                                                               2))))[0]] = i
    return hits
Example #4
0
import numpy as np
import matplotlib.pyplot as plt
import time
import os
import sys
from scipy.optimize import minimize
from scipy.stats import poisson, binom
from scipy.special import erf as erf
import warnings
from minimize import minimize, make_ps
from PMTgiom import make_pmts
from make_mash import mash
from scipy.signal import convolve2d, convolve


pmt_mid, pmt_r, pmt_l, pmt_up, pmt_dn, r=make_pmts(np.arange(20))
r_mash, V_mash=mash()
def make_dS(d, m, rt, up):
    dS=np.zeros(len(m))
    a=np.linspace(-1,1,100, endpoint=True)
    I=np.arange(len(a)**2)
    for i in range(len(dS)):
        x=m[i,0]+a[I//len(a)]*rt[i,0]+a[I%len(a)]*up[i,0]-d[0]
        y=m[i,1]+a[I//len(a)]*rt[i,1]+a[I%len(a)]*up[i,1]-d[1]
        z=m[i,2]+a[I//len(a)]*rt[i,2]+a[I%len(a)]*up[i,2]-d[2]
        dS[i]=np.sum((1-np.sum(d*m[i]))/(np.sqrt(x**2+y**2+z**2)**3))*((a[1]-a[0])*r/2)**2
    return dS
make_dS([0.2,0.2,0.2], pmt_mid, pmt_r, pmt_up)
Example #5
0
            b = np.sum(mid[i] * (mid[i] - d))
            R = np.array([x[j], y[j], z[j]])
            a = b / np.sum(R * mid[i])
            if a > 0:
                v = mid[i] - d - a * R
                if np.abs(np.sum(v * up[i])) < (0.5 * r)**2 and np.abs(
                        np.sum(v * rt[i])) < (0.5 * r)**2:
                    n[i] += 1
                    hit += 1
            if hit > 1:
                print('FFFFFFFFFFFFFFFFFFuck!!!!')
                sys.exit()
    return n


pmt_mid, pmt_r, pmt_l, pmt_up, pmt_dn, r = make_pmts()

h = np.zeros(20)
K = 15
d = [0, 0, 0]
pmts = np.arange(len(pmt_mid))
for i in range(K):
    print(i)
    N = 7000
    costheta = np.random.uniform(-1, 1, N)
    phi = np.random.uniform(0, 2 * np.pi, N)
    n = whichPMT(costheta, phi, pmt_mid, pmt_r, pmt_up, r, d)
    h += n

plt.figure()
plt.bar(pmts, h / K)
Example #6
0
def whichPMT(v, us, mid, rt, up):
    hits = np.zeros(len(us[0])) - 1
    for i in range(len(mid)):
        a = (1 - np.sum(mid[i] * v, axis=0)) / np.sum(us.T * mid[i], axis=1)
        r = v + (a * us).T - mid[i]
        hits[np.nonzero(
            np.logical_and(
                a > 0,
                np.logical_and(
                    np.abs(np.sum(r * rt[i], axis=1)) < np.sum(rt[i]**2),
                    np.abs(np.sum(r * up[i], axis=1)) < np.sum(up[i]**
                                                               2))))[0]] = i
    return hits


pmt_mid, pmt_r, pmt_l, pmt_up, pmt_dn = make_pmts(pmts)


def Sim2(N, F, Tf, Ts, R, a, eta, Q, T, St, PEs, prm):
    f = np.sum(make_recomb(np.arange(1000 * 20) / 100, a,
                           eta).reshape(1000, 20),
               axis=1)
    f[-1] = 1 - np.sum(f[:-1])
    N_events = 10000
    Strig = 2
    d = np.zeros((N_events, 200, len(Q)))
    H = np.zeros((30, 200, len(Q)))
    G = np.zeros((250, 200))
    trp = np.zeros((N_events, 200, len(Q)))
    sng = np.zeros((N_events, 200, len(Q)))
    Rtrp = np.zeros((N_events, 200, len(Q)))
Example #7
0
    spectrum=np.histogram(np.sum(np.sum(d, axis=2), axis=1), bins=np.arange(1000)-0.5)[0]
    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, G/N_events, spectrum, Gtrp/N_events, Gsng/N_events, GRtrp/N_events, GRsng/N_events

PMTs=[0,1,4,7,8,14]
mid, rt, pmt_l, up, pmt_dn, r=make_pmts(PMTs)
def Sim2(N, Q, T, Strig, R, F, Tf, Ts, St):
    N_events=10
    d=np.zeros((N_events, 200, len(Q)))
    H=np.zeros((50, 200, len(Q)))
    G=np.zeros((250,200))
    for i in range(N_events):
        print(i)
        t0=np.zeros(len(Q))
        trig=np.random.normal(0, 5*Strig, 1)
        N_glob=np.random.poisson(N)
        ch=np.random.choice(3, size=N_glob, replace=True, p=[R, (1-R)*F, (1-R)*(1-F)])
        nd=len(np.nonzero(ch==0)[0])
        nf=len(np.nonzero(ch==1)[0])
        ns=len(np.nonzero(ch==2)[0])
        tf=np.random.exponential(5*Tf, nf)