import numpy as np
from decimal import Decimal
c=299792458 #km/s
mp=1.6726*10**(-27)
me=9.1094*10**(-31)
elec=1.6*10**(-19)
def gamma(v):
  return 1./np.sqrt(1-(v**2/c**2))

def p_v_to_e(v):
  e=gamma(v)*mp*c**2-mp*c**2
  print "kin_e (MeV)= ",e/elec/10**6

def p_e_to_v(e):
  v=c*np.sqrt(1-(mp*c**2/e)**2)
  print "v (m/s),v/c= ", v, v/c

def e_v_to_e(v):
  e=gamma(v)*me*c**2-me*c**2
  print "kin_e (MeV)= ",e/elec/10**6

def e_e_to_v(e):
  v=c*np.sqrt(1-(me*c**2/e)**2)
  print "v (m/s),v/c= ",v, v/c

def p_e_to_bg(e):
  v=c*np.sqrt(1-(mp*c**2/e)**2)
  b=v/c
  g=1/(np.sqrt(1-b**2))
  print "beta*gamma = ", b*g

def e_e_to_bg(e):
  v=c*np.sqrt(1-(me*c**2/e)**2)
  b=v/c
  g=1./(np.sqrt(1.-b**2))
  print "beta*gamma = ", b*g

print "Select Particle:"
print "(1) proton energy to velocity"
print "(2) proton velocity to energy"
print "(3) electron energy to velocity"
print "(4) electron velocity to energy"
print "(5) proton energy to beta*gamma"
print "(6) electron energy to beta*gamma"

mode=raw_input("Mode: ")
if mode=="1" or mode=="3" or mode=="5" or mode=="6":
  e=np.float64(raw_input("kinetic energy in MeV: "))
  if mode=="1" or mode=="5":
    e=e*10**6*elec+mp*c**2
  if mode=="3" or mode=="6":
    e=e*10**6*elec+me*c**2
  if mode=="1": p_e_to_v(e)
  if mode=="3": e_e_to_v(e)
  if mode=="5": p_e_to_bg(e)
  if mode=="6": e_e_to_bg(e)

else:
  v=float(raw_input("velocity in m/s: "))
  if mode=="2": p_v_to_e(v)
  if mode=="4": e_v_to_e(v)


