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
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
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
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)
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
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