예제 #1
0
def create_detector_plane(R, theta, phi):
    x, y, z = spher_2_cart(R, theta, phi)

    origin = array([x, y, z])
    normal = array([x, y, z])

    return origin, normal
예제 #2
0
def create_detector_plane(R, theta, phi):
    x, y, z = spher_2_cart(R, theta, phi)

    origin = Point3D(x, y, z)

    normal_vector = (x, y, z)

    return Plane(origin, normal_vector), origin, normal_vector
예제 #3
0
def create_particle_line(theta, phi):
    """ odredujemo dva vektora
    jedan je ishodiste (tocka na pravcu)
    drugi je usmjerenje sa theta i phi,
    a nalazi se na proizvoljnoj udaljenosti 1
    """
    point = array([0, 0, 0])
    direction = array(spher_2_cart(1., theta, phi))

    return point, direction
예제 #4
0
def create_particle_line(theta, phi):
    """ odredujemo dvije tocke
    jedna je ishodiste
    druga je usmjerena sa theta i phi,
    a nalazi se na proizvoljnoj udaljenosti 1
    """
    p_0 = Point3D(0, 0, 0)
    p_1 = Point3D(spher_2_cart(1., theta, phi))

    return Line3D(p_0, p_1)
예제 #5
0
def is_3particle_event_detected(detectors, theta_X, phi_X, Q_1, E_12, E_p, m_p,
                                m_t, m_X, m_E, m_C, m_D, m_F, m_G, Emin_F,
                                Emin_G, Emin_D, **kwargs):

    E_in = E_p * m_t / (m_t + m_p)

    #print "E_in", E_in

    E_out = E_in + Q_1

    #print "E_out", E_out

    E_X = E_out * m_E / (m_X + m_E)

    E_E = E_out - E_X

    theta_E = np.deg2rad(180 - np.rad2deg(theta_X))

    if np.rad2deg(phi_X) > 0.0:
        phi_E = np.deg2rad(np.rad2deg(phi_X) - 180)

    if np.rad2deg(phi_X) < 0.0:
        phi_E = np.deg2rad(np.rad2deg(phi_X) + 180)

    #print "E_X, E_E", E_X, E_E
    """
    treba nam iznos brzine čestice X u laboratorijskom sustavu. Racunamo ga iz E_X_lab
    """

    a_X = np.sqrt(m_X * m_p * E_p) / (m_t + m_p)
    E_X_lab = E_X + 2.0 * np.sqrt(E_X) * a_X * np.cos(theta_X) + a_X * a_X
    v_X_iznos_lab = np.sqrt(2.0 * E_X_lab / m_X)

    theta_X_lab = np.arccos(
        (np.sqrt(E_X) * np.cos(theta_X) + a_X) /
        (np.sqrt(E_X + 2.0 * np.sqrt(E_X) * a_X * np.cos(theta_X) +
                 a_X * a_X)))
    phi_X_lab = phi_X

    v_X_cart_lab = spher_2_cart(v_X_iznos_lab, theta_X_lab, phi_X_lab)

    a_E = np.sqrt(m_E * m_p * E_p) / (m_t + m_p)
    E_E_lab = E_E + 2.0 * np.sqrt(E_E) * a_E * np.cos(theta_E) + a_E * a_E
    v_E_iznos_lab = np.sqrt(2.0 * E_E_lab / m_E)

    theta_E_lab = np.arccos(
        (np.sqrt(E_E) * np.cos(theta_E) + a_E) /
        (np.sqrt(E_E + 2.0 * np.sqrt(E_E) * a_E * np.cos(theta_E) +
                 a_E * a_E)))
    phi_E_lab = phi_E
    """
    RASPAD X -> C + D
    slucajno odabiremo theta, phi za cesticu C
    kuteve biramo u odnosu na smjer gibanja cestice X
    """
    theta_C = get_random_theta()
    phi_C = get_random_phi()

    #print  "theta_C, phi_C", np.rad2deg(theta_C), np.rad2deg(phi_C)
    """
    Energija koja je na raspolaganju za ovaj raspad je E_12
    """
    E_C = m_D * E_12 / (m_C + m_D)
    """ brzina cestice C
    """
    v_C_iznos = np.sqrt(2.0 * E_C / m_C)
    v_C_cart = spher_2_cart(v_C_iznos, theta_C, phi_C)

    #print "v_C_cart", v_C_cart
    """ brzina čestice D
    """
    E_D = m_C * E_12 / (m_C + m_D)

    theta_D = np.deg2rad(180 - np.rad2deg(theta_C))

    if np.rad2deg(phi_C) > 0.0:
        phi_D = np.deg2rad(np.rad2deg(phi_C) - 180)

    if np.rad2deg(phi_C) < 0.0:
        phi_D = np.deg2rad(np.rad2deg(phi_C) + 180)

    v_D_iznos = np.sqrt(2 * E_D / m_D)
    v_D_cart = spher_2_cart(v_D_iznos, theta_D, phi_D)

    #print "v_D_cart", v_D_cart

    #print  "theta_D, phi_D", np.rad2deg(theta_D), np.rad2deg(phi_D)
    """
    TRANSFORMACIJA IZ SUSTAVA U KOJEM X MIRUJE U LABORATORIJSKI SUSTAV
    """
    v_C_lab_cart = v_C_cart[0] + v_X_cart_lab[0], v_C_cart[1] + v_X_cart_lab[
        1], v_C_cart[2] + v_X_cart_lab[2]

    v_C_lab_iznos = np.sqrt(v_C_lab_cart[0] * v_C_lab_cart[0] +
                            v_C_lab_cart[1] * v_C_lab_cart[1] +
                            v_C_lab_cart[2] * v_C_lab_cart[2])

    E_C_lab = m_C * v_C_lab_iznos * v_C_lab_iznos / 2.0

    v_C_lab_spher = cart_2_spher(v_C_lab_cart[0], v_C_lab_cart[1],
                                 v_C_lab_cart[2])

    v_D_lab_cart = v_D_cart[0] + v_X_cart_lab[0], v_D_cart[1] + v_X_cart_lab[
        1], v_D_cart[2] + v_X_cart_lab[2]

    v_D_lab_iznos = np.sqrt(v_D_lab_cart[0] * v_D_lab_cart[0] +
                            v_D_lab_cart[1] * v_D_lab_cart[1] +
                            v_D_lab_cart[2] * v_D_lab_cart[2])

    E_D_lab = m_D * v_D_lab_iznos * v_D_lab_iznos / 2.0

    v_D_lab_spher = cart_2_spher(v_D_lab_cart[0], v_D_lab_cart[1],
                                 v_D_lab_cart[2])
    """
    Prvo gledamo je li detektirana čestica D, ako jest idemo na sljedeci raspad
    """

    particle_D = {}
    particle_D['theta'] = v_D_lab_spher[1]
    particle_D['phi'] = v_D_lab_spher[2]
    particle_D['E_lab'] = E_D_lab
    initialize_particle(particle_D)

    ind_D_detected = is_particle_detected(particle_D, detectors, Emin_D)
    """ ako cestica C nije detektirana
    onda odmah skoci na slijedeci event
    """
    if ind_D_detected < 0:
        return False
    """
    RASPAD C -> F + G
    slucajno odabiremo theta, phi za cesticu F
    kuteve biramo u odnosu na smjer gibanja cestice C
    """
    theta_F = get_random_theta()
    phi_F = get_random_phi()

    #print  theta_C, phi_C
    """
    Energija koja je na raspolaganju za ovaj raspad je UP

    """

    E_UP = 0.09184
    E_F = m_G * E_UP / (m_F + m_G)
    """ brzina cestice F
    """
    v_F_iznos = np.sqrt(2.0 * E_F / m_F)
    v_F_cart = spher_2_cart(v_F_iznos, theta_F, phi_F)
    """ brzina čestice G
    """
    E_G = m_F * E_UP / (m_F + m_G)

    theta_G = np.deg2rad(180 - np.rad2deg(theta_F))

    if np.rad2deg(phi_F) > 0.0:
        phi_G = np.deg2rad(np.rad2deg(phi_F) - 180)

    if np.rad2deg(phi_F) < 0.0:
        phi_G = np.deg2rad(np.rad2deg(phi_F) + 180)

    v_G_iznos = np.sqrt(2 * E_G / m_G)
    v_G_cart = spher_2_cart(v_G_iznos, theta_G, phi_G)
    """
    TRANSFORMACIJA IZ SUSTAVA U KOJEM C MIRUJE U LABORATORIJSKI SUSTAV
    """
    v_F_lab_cart = v_F_cart[0] + v_C_lab_cart[0], v_F_cart[1] + v_C_lab_cart[
        1], v_F_cart[2] + v_C_lab_cart[2]

    v_F_lab_iznos = np.sqrt(v_F_lab_cart[0] * v_F_lab_cart[0] +
                            v_F_lab_cart[1] * v_F_lab_cart[1] +
                            v_F_lab_cart[2] * v_F_lab_cart[2])

    E_F_lab = m_F * v_F_lab_iznos * v_F_lab_iznos / 2.0

    v_F_lab_spher = cart_2_spher(v_F_lab_cart[0], v_F_lab_cart[1],
                                 v_F_lab_cart[2])

    #print v_C_lab_iznos, v_C_lab_spher[0]

    v_G_lab_cart = v_G_cart[0] + v_C_lab_cart[0], v_G_cart[1] + v_C_lab_cart[
        1], v_G_cart[2] + v_C_lab_cart[2]

    v_G_lab_iznos = np.sqrt(v_G_lab_cart[0] * v_G_lab_cart[0] +
                            v_G_lab_cart[1] * v_G_lab_cart[1] +
                            v_G_lab_cart[2] * v_G_lab_cart[2])

    E_G_lab = m_G * v_G_lab_iznos * v_G_lab_iznos / 2.0

    v_G_lab_spher = cart_2_spher(v_G_lab_cart[0], v_G_lab_cart[1],
                                 v_G_lab_cart[2])
    """
    GLEDAMO JE LI ČESTICE F I G POGAĐAJU DETEKTORE SLOŽENE U POSTAV 1 ILI 2 ILI 3
    """

    particle_F = {}
    particle_F['theta'] = v_F_lab_spher[1]
    particle_F['phi'] = v_F_lab_spher[2]
    particle_F['E_lab'] = E_F_lab
    initialize_particle(particle_F)

    ind_F_detected = is_particle_detected(particle_F, detectors, Emin_F)
    """ ako cestica F nije detektirana
    onda odmah skoci na slijedeci event
    """
    if ind_F_detected < 0:
        return False

    particle_G = {}
    particle_G['theta'] = v_G_lab_spher[1]
    particle_G['phi'] = v_G_lab_spher[2]
    particle_G['E_lab'] = E_G_lab
    initialize_particle(particle_G)

    ind_G_detected = is_particle_detected(particle_G, detectors, Emin_G)
    """ ako cestica D nije detektirana
    onda odmah skoci na slijedeci event
    """
    if ind_G_detected < 0:
        return False
    """ ispis u datoteku
    E_12, E_pob, brojac, theta_C, phi_C, theta_D, phi_D
    
    log_line = "%f, %f, %d, %f, %f, %f, %f" % (E_12,
                                               E_pob,
                                               brojac,
                                               np.rad2deg(particle_C['theta']),
                                               np.rad2deg(particle_C['phi']),
                                               np.rad2deg(particle_D['theta']),
                                               np.rad2deg(particle_D['phi']),
                                            )
    #print log_line
    target.write(log_line)
    target.write("\n")
    """
    result = [ind_D_detected, ind_F_detected, ind_G_detected]

    return result
예제 #6
0
def is_2particle_event_detected(detectors, theta_X, phi_X, Q_1, E_12, E_p, m_p, m_t, m_X, m_E, m_C, m_D, Emin_C, Emin_D, **kwargs):
    
    E_in = E_p * m_t / (m_t + m_p)
    
    #print "E_in", E_in
        
    E_out = E_in  + Q_1
        
    #print "E_out", E_out
    
    E_X = E_out * m_E / (m_X + m_E)
    
        
    E_E = E_out - E_X
    
    
    theta_E = np.deg2rad(180 - np.rad2deg(theta_X))
            
    if np.rad2deg(phi_X) > 0.0:
        phi_E = np.deg2rad(np.rad2deg(phi_X)-180)
            
    if np.rad2deg(phi_X) < 0.0:
        phi_E = np.deg2rad(np.rad2deg(phi_X) + 180)
     
     
    #print "E_X, E_E", E_X, E_E
            
    """
    treba nam iznos brzine čestice X u laboratorijskom sustavu. Računamo ga iz E_X_lab
    """   
        
    a_X = np.sqrt(m_X * m_p * E_p)/(m_t + m_p)
    try:
    	E_X_lab = E_X + 2.0 * np.sqrt(E_X) * a_X * np.cos(theta_X) + a_X * a_X
    except:
	print "Unexpected error", E_X, theta_X
	raise	
    v_X_iznos_lab = np.sqrt(2.0 * E_X_lab / m_X)
        
    theta_X_lab =  np.arccos((np.sqrt(E_X) * np.cos(theta_X) + a_X) / (np.sqrt(E_X + 2.0 * np.sqrt(E_X) * a_X * np.cos(theta_X) + a_X * a_X)))       
    phi_X_lab = phi_X
        
    v_X_cart_lab = spher_2_cart(v_X_iznos_lab, theta_X_lab, phi_X_lab)
      
    #print "thetaX_lab",  np.rad2deg(theta_X_lab)  
    #print  v_X_cart_lab   
       
      
      
    a_E = np.sqrt(m_E * m_p * E_p)/(m_t + m_p)
    E_E_lab = E_E + 2.0 * np.sqrt(E_E) * a_E * np.cos(theta_E) + a_E * a_E
    v_E_iznos_lab = np.sqrt(2.0 * E_E_lab / m_E)
        
    theta_E_lab =  np.arccos((np.sqrt(E_E) * np.cos(theta_E) + a_E) / (np.sqrt(E_E + 2.0 * np.sqrt(E_E) * a_E * np.cos(theta_E) + a_E * a_E)))       
    phi_E_lab = phi_E
    
    #hist4.Fill(np.rad2deg(theta_E_lab), np.rad2deg(theta_X_lab)) 
    """
    RASPAD X -> C + D
    slucajno odabiremo theta, phi za cesticu C
    kuteve biramo u odnosu na smjer gibanja cestice X
    """ 
    theta_C = get_random_theta()
    phi_C = get_random_phi()
        
    #print  "theta_C, phi_C", np.rad2deg(theta_C), np.rad2deg(phi_C)
    """
    Energija koja je na raspolaganju za ovaj raspad je E_12
    """        
    E_C = m_D * E_12 / (m_C + m_D)
        
        
    """ brzina cestice C
    """
    v_C_iznos = np.sqrt(2.0 * E_C / m_C)
    v_C_cart = spher_2_cart(v_C_iznos, theta_C, phi_C)
    
    #print "v_C_cart", v_C_cart
        
        
    """ brzina čestice D
    """
    E_D = m_C * E_12 / (m_C + m_D)
        
    theta_D = np.deg2rad(180 - np.rad2deg(theta_C))
            
    if np.rad2deg(phi_C) > 0.0:
        phi_D = np.deg2rad(np.rad2deg(phi_C)-180)
            
    if np.rad2deg(phi_C) < 0.0:
        phi_D = np.deg2rad(np.rad2deg(phi_C) + 180)
        
    v_D_iznos = np.sqrt(2 * E_D / m_D)
    v_D_cart = spher_2_cart(v_D_iznos, theta_D, phi_D)
    
    """
    TRANSFORMACIJA IZ SUSTAVA U KOJEM X MIRUJE U LABORATORIJSKI SUSTAV
    """
    v_C_lab_cart = v_C_cart[0] + v_X_cart_lab[0], v_C_cart[1] + v_X_cart_lab[1], v_C_cart[2] + v_X_cart_lab[2]
                
    v_C_lab_iznos = np.sqrt(v_C_lab_cart[0] * v_C_lab_cart[0] + v_C_lab_cart[1] * v_C_lab_cart[1] + v_C_lab_cart[2] * v_C_lab_cart[2])
            
    E_C_lab = m_C * v_C_lab_iznos * v_C_lab_iznos/2.0  
        
    v_C_lab_spher =  cart_2_spher(v_C_lab_cart[0], v_C_lab_cart[1], v_C_lab_cart[2])      
        
   
    """
    PARAMETRI KOJI NAM TREBAJU SU E_C_lab, theta_C_lab, phi_C_lab
                                      E_D_lab, theta_D_lab, phi_D_lab    
    theta_C_lab = np.rad2deg(v_C_lab_spher[1])
    phi_C_lab = np.rad2deg(v_C_lab_spher[2]) 
    """
      
    v_D_lab_cart = v_D_cart[0] + v_X_cart_lab[0], v_D_cart[1] + v_X_cart_lab[1], v_D_cart[2] + v_X_cart_lab[2]
        
        
    v_D_lab_iznos = np.sqrt(v_D_lab_cart[0] * v_D_lab_cart[0] + v_D_lab_cart[1] * v_D_lab_cart[1] + v_D_lab_cart[2] * v_D_lab_cart[2])
            
    E_D_lab = m_D * v_D_lab_iznos * v_D_lab_iznos/2.0   
            
    v_D_lab_spher =  cart_2_spher(v_D_lab_cart[0], v_D_lab_cart[1], v_D_lab_cart[2]) 


    """
    Prvo gledamo je li detektirana čestica C jer je to 6Li, a njih ima manje nego 4He
    Ako jest, onda gledamo je li detektirana 4He
    """
        
    particle_C = {}
    particle_C['theta'] = v_C_lab_spher[1]
    particle_C['phi'] = v_C_lab_spher[2]
    particle_C['E_lab'] = E_C_lab
    initialize_particle(particle_C)
        
    ind_C_detected = is_particle_detected(particle_C, detectors, Emin_C)
        
    """ ako cestica C nije detektirana
    onda odmah skoci na slijedeci event
    """
    if ind_C_detected < 0:
        return False
        
        
    particle_D = {}
    particle_D['theta'] = v_D_lab_spher[1]
    particle_D['phi'] = v_D_lab_spher[2]
    particle_D['E_lab'] = E_D_lab
    initialize_particle(particle_D)
                
                
    ind_D_detected = is_particle_detected(particle_D, detectors, Emin_D)
        
    """ ako cestica D nije detektirana
    onda odmah skoci na slijedeci event
    """
    if ind_D_detected < 0:
        return False            
    
    
    
   
    result = [ind_C_detected, ind_D_detected]
    
    return result