How I Narrowed Down The Location Of Malaysia Air Using "Monte Carlo" Data Models
More About Our Methodology: Tracking MH370 With Monte Carlo Data Models
¶Contact Info:
conor.myhrvold@gmail.com
Twitter: @conormyhrvold
LinkedIn: www.linkedin.com/pub/conor-myhrvold/37/583/a7/
Fast Company Labs Contributor Page
"""
takes in angle and heading in degrees (note conversion to radians in function)
k goes from 0 to infinity and is a point at infinity, and a uniform distribution at 0
"""
def von_mises(angle,heading,k):
return np.exp(k*np.cos(np.radians(angle)-np.radians(heading)))/(2*np.pi*np.i0(k))
circle_test = []
for i in xrange(360):
circle_test.append(von_mises(i,150,0))
plt.figure()
plt.plot(circle_test)
plt.title('k=0 -- should be uniform')
plt.show()
circle_test2 = []
for i in xrange(360):
circle_test2.append(von_mises(i,150,1))
plt.figure()
plt.plot(circle_test2)
plt.title('k=1 -- should be bell curve')
plt.show()
circle_test3 = []
for i in xrange(360):
circle_test3.append(von_mises(i,150,10))
plt.figure()
plt.plot(circle_test3)
plt.title('k=10 -- should be contracting/converging toward a point')
plt.show()
"""
takes in angle and heading in degrees (note conversion to radians in function)
k goes from 0-1 and is a point at 1, and a uniform distribution at 0
"""
def wrapped_cauchy(angle,heading,k):
return np.float((1-k**2))/(1+k**2-2*k*np.cos(np.radians(angle)-np.radians(heading)))
circle_test = []
for i in xrange(360):
circle_test.append(wrapped_cauchy(i,150,0))
plt.figure()
plt.plot(circle_test)
plt.title('k=0 -- should be uniform')
plt.show()
circle_test2 = []
for i in xrange(360):
circle_test2.append(wrapped_cauchy(i,150,0.5))
plt.figure()
plt.plot(circle_test2)
plt.title('k=0.5 -- should be bell curve')
plt.show()
circle_test3 = []
for i in xrange(360):
circle_test3.append(wrapped_cauchy(i,150,0.99))
plt.figure()
plt.plot(circle_test3)
plt.title('k=0.99 -- should be contracting/converging toward a point')
plt.show()
"""
takes in a heading, a starting location, and a k for picking a new heading based on the Von Mises distribution.
k = 0 -> uniform distribution. jump all over the place, true random walk.
k = 1,10 -> similar to before. tends to go straight ahead or near-straight ahead.
1 is like a normal distribution with a large standard deviation from the mean.
10 is like a normal distribution with a small standard deviation from the mean.
"""
def von_mises_prob_step(heading, k, start_lon, start_lat, ang_dist):
angle_list = range(0,360)
#we create a radius of 360 points that would be the heading for 360 possible degrees
circle = make_circle(ang_dist,len(angle_list),start_lon,start_lat)
weights = np.zeros(len(angle_list)) #make 360 array
for i in xrange(len(weights)):
weights[i] = von_mises(angle_list[i],heading,k)
#makes array of von mises distributed weights.
#initialize new possible coordinates within an hr's distance, new weights for the odds, and new angles
new_circle = []
new_weights = []
new_angles = []
#make sure lat & lon are in bounds
for i in xrange(len(circle)):
if circle[i][0] >= lat_min and circle[i][0] <= lat_max and circle[i][1] >= lon_min and circle[i][1] <= lon_max:
new_circle.append(circle[i])
new_weights.append(weights[i])
new_angles.append(angle_list[i])
return new_circle,new_weights,new_angles
"""
takes in a heading, a starting location, and a k for picking a new heading based on the Wrapped Cauchy distribution.
k = 0 -> uniform distribution. jump all over the place, true random walk.
k = 0.5 -> similar to before. tends to go straight ahead or near-straight ahead.
k = 0.95 -> plane makes a bee-line for straight ahead. there's just no "convincing" it otherwise.
almost no deviation from 0 degrees relative to previous heading.
"""
def wrapped_cauchy_prob_step(heading, k, start_lon, start_lat, ang_dist):
angle_list = range(0,360)
#we create a radius of 360 points that would be the heading for 360 possible degrees
circle = make_circle(ang_dist,len(angle_list),start_lon,start_lat)
weights = np.zeros(len(angle_list)) #make 360 array
for i in xrange(len(weights)):
weights[i] = wrapped_cauchy(angle_list[i],heading,k)
#initialize new possible coordinates within an hr's distance, new weights for the odds, and new angles
new_circle = []
new_weights = []
new_angles = []
#make sure lat & lon are in bounds
for i in xrange(len(circle)):
if circle[i][0] >= lat_min and circle[i][0] <= lat_max and circle[i][1] >= lon_min and circle[i][1] <= lon_max:
new_circle.append(circle[i])
new_weights.append(weights[i])
new_angles.append(angle_list[i])
return new_circle,new_weights,new_angles
"""
a function which given a list of discrete probabilities for each destination point,
it will choose one of those points.
heading_init -- initial direction was headed at last known point
lon_init,lat_init -- last known point of plane in longitude and latitude
km_hop -- how far the plane went in the time interval, 1 hr. So in simplest case, the 777's cruising speed/hr.
k -- affects the heading distribution, based on a Von Mises distribution from the current heading (0 deg).
ping_percent_err -- what % error you assume in the Inmarsat 5th ping. either 2.5 or 5%.
uses Von Mises distribution for heading
"""
def five_hop_model_von_mises(heading_init,lon_init,lat_init,km_hop,k,ping_percent_err):
#initialize
plane_lat = np.zeros(5) #initialize plane location after each hop (assumed to be 1 hr for now)
plane_lon = np.zeros(5)
lat = lat_init
lon = lon_init
heading = heading_init
for i in xrange(len(plane_lat)):
new_circle,new_weights,new_angles = von_mises_prob_step(heading,k,lon,lat,km_hop/eq_deg_km)
#new_circle gives up possible coords for diff headings
raw_weights = np.zeros(len(new_circle))
for j in xrange(len(new_circle)):
raw_weights[j] = new_weights[j]*ping_prob_normal(inmarsat[0],inmarsat[1],new_circle[j][0],new_circle[j][1],ping_percent_err,dist_from_sat,earth_radius)
probs = raw_weights / np.sum(raw_weights) #normalize
index = range(len(new_circle))
chosen = np.random.choice(index,size=None,p=probs)
#print "chosen",chosen
heading = new_angles[chosen] #update heading
plane_lat[i],plane_lon[i] = new_circle[chosen] #update position
lat = plane_lat[i]
lon = plane_lon[i]
#at end of simulation, run the last location & heading for plane for 4 different times
route1 = make_vector(0.25*km_hop/eq_deg_km,heading,lon,lat)
route2 = make_vector(0.5*km_hop/eq_deg_km,heading,lon,lat)
route3 = make_vector(0.75*km_hop/eq_deg_km,heading,lon,lat)
route4 = make_vector((59./60.)*km_hop/eq_deg_km,heading,lon,lat)
new_plane_lat = np.zeros(9)
new_plane_lon = np.zeros(9)
for i in xrange(len(plane_lat)):
new_plane_lat[i] = plane_lat[i]
new_plane_lon[i] = plane_lon[i]
new_plane_lat[5] = route1[0]
new_plane_lat[6] = route2[0]
new_plane_lat[7] = route3[0]
new_plane_lat[8] = route4[0]
new_plane_lon[5] = route1[1]
new_plane_lon[6] = route2[1]
new_plane_lon[7] = route3[1]
new_plane_lon[8] = route4[1]
return new_plane_lat,new_plane_lon
"""
a function which given a list of discrete probabilities for each destination point,
it will choose one of those points.
heading_init -- initial direction was headed at last known point
lon_init,lat_init -- last known point of plane in longitude and latitude
km_hop -- how far the plane went in the time interval, 1 hr. So in simplest case, the 777's cruising speed/hr.
k -- affects the heading distribution, based on a Wrapped Cauchy distribution from the current heading (0 deg).
ping_percent_err -- what % error you assume in the Inmarsat 5th ping. either 2.5 or 5%.
uses Wrapped Cauchy distribution for heading
"""
def five_hop_model_wrapped_cauchy(heading_init,lon_init,lat_init,km_hop,k,ping_percent_err):
#initialize
plane_lat = np.zeros(5) #initialize plane location after each hop (assumed to be 1 hr for now)
plane_lon = np.zeros(5)
lat = lat_init
lon = lon_init
heading = heading_init
for i in xrange(len(plane_lat)):
new_circle,new_weights,new_angles = wrapped_cauchy_prob_step(heading,k,lon,lat,km_hop/eq_deg_km)
#new_circle gives up possible coords for diff headings
raw_weights = np.zeros(len(new_circle))
for j in xrange(len(new_circle)):
raw_weights[j] = new_weights[j]*ping_prob_normal(inmarsat[0],inmarsat[1],new_circle[j][0],new_circle[j][1],ping_percent_err,dist_from_sat,earth_radius)
probs = raw_weights / np.sum(raw_weights) #normalize
index = range(len(new_circle))
chosen = np.random.choice(index,size=None,p=probs)
#print "chosen",chosen
heading = new_angles[chosen] #update heading
plane_lat[i],plane_lon[i] = new_circle[chosen] #update position
lat = plane_lat[i]
lon = plane_lon[i]
#at end of simulation, run the last location & heading for plane for 4 different times
route1 = make_vector(0.25*km_hop/eq_deg_km,heading,lon,lat)
route2 = make_vector(0.5*km_hop/eq_deg_km,heading,lon,lat)
route3 = make_vector(0.75*km_hop/eq_deg_km,heading,lon,lat)
route4 = make_vector((59./60.)*km_hop/eq_deg_km,heading,lon,lat)
new_plane_lat = np.zeros(9)
new_plane_lon = np.zeros(9)
for i in xrange(len(plane_lat)):
new_plane_lat[i] = plane_lat[i]
new_plane_lon[i] = plane_lon[i]
new_plane_lat[5] = route1[0]
new_plane_lat[6] = route2[0]
new_plane_lat[7] = route3[0]
new_plane_lat[8] = route4[0]
new_plane_lon[5] = route1[1]
new_plane_lon[6] = route2[1]
new_plane_lon[7] = route3[1]
new_plane_lon[8] = route4[1]
return new_plane_lat,new_plane_lon
last_known_heading = 255.136
km_hop = 905 #assuming 1 hr intervals, at 905 km/hr which is 777 cruising speed -- use for test case
# max speed of a Boeing 777 is 950 km/hr FYI
N = 1000 #define number of simulations to run -- set to 1000, but set low number to make sure it's working first.
percenterror1, percenterror2 = 0.05, 0.025
k1, k2, k3 = 0, 1, 10 #Von Mises constants -- uniform, bell, point-like
#5 percent error w/ different ks
plane_hops_5per_k1 = []
plane_hops_5per_k2 = []
plane_hops_5per_k3 = []
#2.5 percent error w/ different ks
plane_hops_2per_k1 = []
plane_hops_2per_k2 = []
plane_hops_2per_k3 = []
for i in xrange(N):
#5% error runs
plane_hops_5per_k1.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k1,percenterror1))
plane_hops_5per_k2.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k2,percenterror1))
plane_hops_5per_k3.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k3,percenterror1))
#2.5% error runs
plane_hops_2per_k1.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k1,percenterror2))
plane_hops_2per_k2.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k2,percenterror2))
plane_hops_2per_k3.append(five_hop_model_von_mises(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k3,percenterror2))
# 5per_k1 run
first_lat_5per_k1 = []
two_lat_5per_k1 = []
three_lat_5per_k1 = []
four_lat_5per_k1 = []
final_lat_5per_k1 = []
first_lon_5per_k1 = []
two_lon_5per_k1 = []
three_lon_5per_k1 = []
four_lon_5per_k1 = []
final_lon_5per_k1 = []
route1_lat_5per_k1 = []
route2_lat_5per_k1 = []
route3_lat_5per_k1 = []
route4_lat_5per_k1 = []
route1_lon_5per_k1 = []
route2_lon_5per_k1 = []
route3_lon_5per_k1 = []
route4_lon_5per_k1 = []
for i in xrange(len(plane_hops_5per_k1)):
first_lat_5per_k1.append(plane_hops_5per_k1[i][0][0])
first_lon_5per_k1.append(plane_hops_5per_k1[i][1][0])
two_lat_5per_k1.append(plane_hops_5per_k1[i][0][1])
two_lon_5per_k1.append(plane_hops_5per_k1[i][1][1])
three_lat_5per_k1.append(plane_hops_5per_k1[i][0][2])
three_lon_5per_k1.append(plane_hops_5per_k1[i][1][2])
four_lat_5per_k1.append(plane_hops_5per_k1[i][0][3])
four_lon_5per_k1.append(plane_hops_5per_k1[i][1][3])
final_lat_5per_k1.append(plane_hops_5per_k1[i][0][4])
final_lon_5per_k1.append(plane_hops_5per_k1[i][1][4])
route1_lat_5per_k1.append(plane_hops_5per_k1[i][0][5])
route1_lon_5per_k1.append(plane_hops_5per_k1[i][1][5])
route2_lat_5per_k1.append(plane_hops_5per_k1[i][0][6])
route2_lon_5per_k1.append(plane_hops_5per_k1[i][1][6])
route3_lat_5per_k1.append(plane_hops_5per_k1[i][0][7])
route3_lon_5per_k1.append(plane_hops_5per_k1[i][1][7])
route4_lat_5per_k1.append(plane_hops_5per_k1[i][0][8])
route4_lon_5per_k1.append(plane_hops_5per_k1[i][1][8])
# 5per_k2 run
first_lat_5per_k2 = []
two_lat_5per_k2 = []
three_lat_5per_k2 = []
four_lat_5per_k2 = []
final_lat_5per_k2 = []
first_lon_5per_k2 = []
two_lon_5per_k2 = []
three_lon_5per_k2 = []
four_lon_5per_k2 = []
final_lon_5per_k2 = []
route1_lat_5per_k2 = []
route2_lat_5per_k2 = []
route3_lat_5per_k2 = []
route4_lat_5per_k2 = []
route1_lon_5per_k2 = []
route2_lon_5per_k2 = []
route3_lon_5per_k2 = []
route4_lon_5per_k2 = []
for i in xrange(len(plane_hops_5per_k2)):
first_lat_5per_k2.append(plane_hops_5per_k2[i][0][0])
first_lon_5per_k2.append(plane_hops_5per_k2[i][1][0])
two_lat_5per_k2.append(plane_hops_5per_k2[i][0][1])
two_lon_5per_k2.append(plane_hops_5per_k2[i][1][1])
three_lat_5per_k2.append(plane_hops_5per_k2[i][0][2])
three_lon_5per_k2.append(plane_hops_5per_k2[i][1][2])
four_lat_5per_k2.append(plane_hops_5per_k2[i][0][3])
four_lon_5per_k2.append(plane_hops_5per_k2[i][1][3])
final_lat_5per_k2.append(plane_hops_5per_k2[i][0][4])
final_lon_5per_k2.append(plane_hops_5per_k2[i][1][4])
route1_lat_5per_k2.append(plane_hops_5per_k2[i][0][5])
route1_lon_5per_k2.append(plane_hops_5per_k2[i][1][5])
route2_lat_5per_k2.append(plane_hops_5per_k2[i][0][6])
route2_lon_5per_k2.append(plane_hops_5per_k2[i][1][6])
route3_lat_5per_k2.append(plane_hops_5per_k2[i][0][7])
route3_lon_5per_k2.append(plane_hops_5per_k2[i][1][7])
route4_lat_5per_k2.append(plane_hops_5per_k2[i][0][8])
route4_lon_5per_k2.append(plane_hops_5per_k2[i][1][8])
# 5per_k3 run
first_lat_5per_k3 = []
two_lat_5per_k3 = []
three_lat_5per_k3 = []
four_lat_5per_k3 = []
final_lat_5per_k3 = []
first_lon_5per_k3 = []
two_lon_5per_k3 = []
three_lon_5per_k3 = []
four_lon_5per_k3 = []
final_lon_5per_k3 = []
route1_lat_5per_k3 = []
route2_lat_5per_k3 = []
route3_lat_5per_k3 = []
route4_lat_5per_k3 = []
route1_lon_5per_k3 = []
route2_lon_5per_k3 = []
route3_lon_5per_k3 = []
route4_lon_5per_k3 = []
for i in xrange(len(plane_hops_5per_k3)):
first_lat_5per_k3.append(plane_hops_5per_k3[i][0][0])
first_lon_5per_k3.append(plane_hops_5per_k3[i][1][0])
two_lat_5per_k3.append(plane_hops_5per_k3[i][0][1])
two_lon_5per_k3.append(plane_hops_5per_k3[i][1][1])
three_lat_5per_k3.append(plane_hops_5per_k3[i][0][2])
three_lon_5per_k3.append(plane_hops_5per_k3[i][1][2])
four_lat_5per_k3.append(plane_hops_5per_k3[i][0][3])
four_lon_5per_k3.append(plane_hops_5per_k3[i][1][3])
final_lat_5per_k3.append(plane_hops_5per_k3[i][0][4])
final_lon_5per_k3.append(plane_hops_5per_k3[i][1][4])
route1_lat_5per_k3.append(plane_hops_5per_k3[i][0][5])
route1_lon_5per_k3.append(plane_hops_5per_k3[i][1][5])
route2_lat_5per_k3.append(plane_hops_5per_k3[i][0][6])
route2_lon_5per_k3.append(plane_hops_5per_k3[i][1][6])
route3_lat_5per_k3.append(plane_hops_5per_k3[i][0][7])
route3_lon_5per_k3.append(plane_hops_5per_k3[i][1][7])
route4_lat_5per_k3.append(plane_hops_5per_k3[i][0][8])
route4_lon_5per_k3.append(plane_hops_5per_k3[i][1][8])
# 2per_k1 run
first_lat_2per_k1 = []
two_lat_2per_k1 = []
three_lat_2per_k1 = []
four_lat_2per_k1 = []
final_lat_2per_k1 = []
first_lon_2per_k1 = []
two_lon_2per_k1 = []
three_lon_2per_k1 = []
four_lon_2per_k1 = []
final_lon_2per_k1 = []
route1_lat_2per_k1 = []
route2_lat_2per_k1 = []
route3_lat_2per_k1 = []
route4_lat_2per_k1 = []
route1_lon_2per_k1 = []
route2_lon_2per_k1 = []
route3_lon_2per_k1 = []
route4_lon_2per_k1 = []
for i in xrange(len(plane_hops_2per_k1)):
first_lat_2per_k1.append(plane_hops_2per_k1[i][0][0])
first_lon_2per_k1.append(plane_hops_2per_k1[i][1][0])
two_lat_2per_k1.append(plane_hops_2per_k1[i][0][1])
two_lon_2per_k1.append(plane_hops_2per_k1[i][1][1])
three_lat_2per_k1.append(plane_hops_2per_k1[i][0][2])
three_lon_2per_k1.append(plane_hops_2per_k1[i][1][2])
four_lat_2per_k1.append(plane_hops_2per_k1[i][0][3])
four_lon_2per_k1.append(plane_hops_2per_k1[i][1][3])
final_lat_2per_k1.append(plane_hops_2per_k1[i][0][4])
final_lon_2per_k1.append(plane_hops_2per_k1[i][1][4])
route1_lat_2per_k1.append(plane_hops_2per_k1[i][0][5])
route1_lon_2per_k1.append(plane_hops_2per_k1[i][1][5])
route2_lat_2per_k1.append(plane_hops_2per_k1[i][0][6])
route2_lon_2per_k1.append(plane_hops_2per_k1[i][1][6])
route3_lat_2per_k1.append(plane_hops_2per_k1[i][0][7])
route3_lon_2per_k1.append(plane_hops_2per_k1[i][1][7])
route4_lat_2per_k1.append(plane_hops_2per_k1[i][0][8])
route4_lon_2per_k1.append(plane_hops_2per_k1[i][1][8])
# 2per_k2 run
first_lat_2per_k2 = []
two_lat_2per_k2 = []
three_lat_2per_k2 = []
four_lat_2per_k2 = []
final_lat_2per_k2 = []
first_lon_2per_k2 = []
two_lon_2per_k2 = []
three_lon_2per_k2 = []
four_lon_2per_k2 = []
final_lon_2per_k2 = []
route1_lat_2per_k2 = []
route2_lat_2per_k2 = []
route3_lat_2per_k2 = []
route4_lat_2per_k2 = []
route1_lon_2per_k2 = []
route2_lon_2per_k2 = []
route3_lon_2per_k2 = []
route4_lon_2per_k2 = []
for i in xrange(len(plane_hops_2per_k2)):
first_lat_2per_k2.append(plane_hops_2per_k2[i][0][0])
first_lon_2per_k2.append(plane_hops_2per_k2[i][1][0])
two_lat_2per_k2.append(plane_hops_2per_k2[i][0][1])
two_lon_2per_k2.append(plane_hops_2per_k2[i][1][1])
three_lat_2per_k2.append(plane_hops_2per_k2[i][0][2])
three_lon_2per_k2.append(plane_hops_2per_k2[i][1][2])
four_lat_2per_k2.append(plane_hops_2per_k2[i][0][3])
four_lon_2per_k2.append(plane_hops_2per_k2[i][1][3])
final_lat_2per_k2.append(plane_hops_2per_k2[i][0][4])
final_lon_2per_k2.append(plane_hops_2per_k2[i][1][4])
route1_lat_2per_k2.append(plane_hops_2per_k2[i][0][5])
route1_lon_2per_k2.append(plane_hops_2per_k2[i][1][5])
route2_lat_2per_k2.append(plane_hops_2per_k2[i][0][6])
route2_lon_2per_k2.append(plane_hops_2per_k2[i][1][6])
route3_lat_2per_k2.append(plane_hops_2per_k2[i][0][7])
route3_lon_2per_k2.append(plane_hops_2per_k2[i][1][7])
route4_lat_2per_k2.append(plane_hops_2per_k2[i][0][8])
route4_lon_2per_k2.append(plane_hops_2per_k2[i][1][8])
# 2per_k3 run
first_lat_2per_k3 = []
two_lat_2per_k3 = []
three_lat_2per_k3 = []
four_lat_2per_k3 = []
final_lat_2per_k3 = []
first_lon_2per_k3 = []
two_lon_2per_k3 = []
three_lon_2per_k3 = []
four_lon_2per_k3 = []
final_lon_2per_k3 = []
route1_lat_2per_k3 = []
route2_lat_2per_k3 = []
route3_lat_2per_k3 = []
route4_lat_2per_k3 = []
route1_lon_2per_k3 = []
route2_lon_2per_k3 = []
route3_lon_2per_k3 = []
route4_lon_2per_k3 = []
for i in xrange(len(plane_hops_2per_k3)):
first_lat_2per_k3.append(plane_hops_2per_k3[i][0][0])
first_lon_2per_k3.append(plane_hops_2per_k3[i][1][0])
two_lat_2per_k3.append(plane_hops_2per_k3[i][0][1])
two_lon_2per_k3.append(plane_hops_2per_k3[i][1][1])
three_lat_2per_k3.append(plane_hops_2per_k3[i][0][2])
three_lon_2per_k3.append(plane_hops_2per_k3[i][1][2])
four_lat_2per_k3.append(plane_hops_2per_k3[i][0][3])
four_lon_2per_k3.append(plane_hops_2per_k3[i][1][3])
final_lat_2per_k3.append(plane_hops_2per_k3[i][0][4])
final_lon_2per_k3.append(plane_hops_2per_k3[i][1][4])
route1_lat_2per_k3.append(plane_hops_2per_k3[i][0][5])
route1_lon_2per_k3.append(plane_hops_2per_k3[i][1][5])
route2_lat_2per_k3.append(plane_hops_2per_k3[i][0][6])
route2_lon_2per_k3.append(plane_hops_2per_k3[i][1][6])
route3_lat_2per_k3.append(plane_hops_2per_k3[i][0][7])
route3_lon_2per_k3.append(plane_hops_2per_k3[i][1][7])
route4_lat_2per_k3.append(plane_hops_2per_k3[i][0][8])
route4_lon_2per_k3.append(plane_hops_2per_k3[i][1][8])
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k1,first_lat_5per_k1)
x10,y10 = fig(two_lon_5per_k1,two_lat_5per_k1)
x11,y11 = fig(three_lon_5per_k1,three_lat_5per_k1)
x12,y12 = fig(four_lon_5per_k1,four_lat_5per_k1)
x13,y13 = fig(final_lon_5per_k1,final_lat_5per_k1)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k1,route1_lat_5per_k1)
x15,y15 = fig(route2_lon_5per_k1,route2_lat_5per_k1)
x16,y16 = fig(route3_lon_5per_k1,route3_lat_5per_k1)
x17,y17 = fig(route4_lon_5per_k1,route4_lat_5per_k1)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k2,first_lat_5per_k2)
x10,y10 = fig(two_lon_5per_k2,two_lat_5per_k2)
x11,y11 = fig(three_lon_5per_k2,three_lat_5per_k2)
x12,y12 = fig(four_lon_5per_k2,four_lat_5per_k2)
x13,y13 = fig(final_lon_5per_k2,final_lat_5per_k2)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k2,route1_lat_5per_k2)
x15,y15 = fig(route2_lon_5per_k2,route2_lat_5per_k2)
x16,y16 = fig(route3_lon_5per_k2,route3_lat_5per_k2)
x17,y17 = fig(route4_lon_5per_k2,route4_lat_5per_k2)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k3,first_lat_5per_k3)
x10,y10 = fig(two_lon_5per_k3,two_lat_5per_k3)
x11,y11 = fig(three_lon_5per_k3,three_lat_5per_k3)
x12,y12 = fig(four_lon_5per_k3,four_lat_5per_k3)
x13,y13 = fig(final_lon_5per_k3,final_lat_5per_k3)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k3,route1_lat_5per_k3)
x15,y15 = fig(route2_lon_5per_k3,route2_lat_5per_k3)
x16,y16 = fig(route3_lon_5per_k3,route3_lat_5per_k3)
x17,y17 = fig(route4_lon_5per_k3,route4_lat_5per_k3)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k1,first_lat_5per_k1)
x10,y10 = fig(two_lon_5per_k1,two_lat_5per_k1)
x11,y11 = fig(three_lon_5per_k1,three_lat_5per_k1)
x12,y12 = fig(four_lon_5per_k1,four_lat_5per_k1)
x13,y13 = fig(final_lon_5per_k1,final_lat_5per_k1)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k1,route1_lat_5per_k1)
x15,y15 = fig(route2_lon_5per_k1,route2_lat_5per_k1)
x16,y16 = fig(route3_lon_5per_k1,route3_lat_5per_k1)
x17,y17 = fig(route4_lon_5per_k1,route4_lat_5per_k1)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k2,first_lat_5per_k2)
x10,y10 = fig(two_lon_5per_k2,two_lat_5per_k2)
x11,y11 = fig(three_lon_5per_k2,three_lat_5per_k2)
x12,y12 = fig(four_lon_5per_k2,four_lat_5per_k2)
x13,y13 = fig(final_lon_5per_k2,final_lat_5per_k2)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k2,route1_lat_5per_k2)
x15,y15 = fig(route2_lon_5per_k2,route2_lat_5per_k2)
x16,y16 = fig(route3_lon_5per_k2,route3_lat_5per_k2)
x17,y17 = fig(route4_lon_5per_k2,route4_lat_5per_k2)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k3,first_lat_5per_k3)
x10,y10 = fig(two_lon_5per_k3,two_lat_5per_k3)
x11,y11 = fig(three_lon_5per_k3,three_lat_5per_k3)
x12,y12 = fig(four_lon_5per_k3,four_lat_5per_k3)
x13,y13 = fig(final_lon_5per_k3,final_lat_5per_k3)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k3,route1_lat_5per_k3)
x15,y15 = fig(route2_lon_5per_k3,route2_lat_5per_k3)
x16,y16 = fig(route3_lon_5per_k3,route3_lat_5per_k3)
x17,y17 = fig(route4_lon_5per_k3,route4_lat_5per_k3)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
percenterror1, percenterror2 = 0.05, 0.025
k1, k2, k3 = 0, 0.5, 0.99 #Wrapped Cauchy constants -- uniform, bell, point-like
#5 percent error w/ different ks
plane_hops_5per_k1 = []
plane_hops_5per_k2 = []
plane_hops_5per_k3 = []
#2.5 percent error w/ different ks
plane_hops_2per_k1 = []
plane_hops_2per_k2 = []
plane_hops_2per_k3 = []
for i in xrange(N):
#5% error runs
plane_hops_5per_k1.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k1,percenterror1))
plane_hops_5per_k2.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k2,percenterror1))
plane_hops_5per_k3.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k3,percenterror1))
#2.5% error runs
plane_hops_2per_k1.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k1,percenterror2))
plane_hops_2per_k2.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k2,percenterror2))
plane_hops_2per_k3.append(five_hop_model_wrapped_cauchy(last_known_heading,pulauperak[1],pulauperak[0],km_hop,k3,percenterror2))
# 5per_k1 run
first_lat_5per_k1 = []
two_lat_5per_k1 = []
three_lat_5per_k1 = []
four_lat_5per_k1 = []
final_lat_5per_k1 = []
first_lon_5per_k1 = []
two_lon_5per_k1 = []
three_lon_5per_k1 = []
four_lon_5per_k1 = []
final_lon_5per_k1 = []
route1_lat_5per_k1 = []
route2_lat_5per_k1 = []
route3_lat_5per_k1 = []
route4_lat_5per_k1 = []
route1_lon_5per_k1 = []
route2_lon_5per_k1 = []
route3_lon_5per_k1 = []
route4_lon_5per_k1 = []
for i in xrange(len(plane_hops_5per_k1)):
first_lat_5per_k1.append(plane_hops_5per_k1[i][0][0])
first_lon_5per_k1.append(plane_hops_5per_k1[i][1][0])
two_lat_5per_k1.append(plane_hops_5per_k1[i][0][1])
two_lon_5per_k1.append(plane_hops_5per_k1[i][1][1])
three_lat_5per_k1.append(plane_hops_5per_k1[i][0][2])
three_lon_5per_k1.append(plane_hops_5per_k1[i][1][2])
four_lat_5per_k1.append(plane_hops_5per_k1[i][0][3])
four_lon_5per_k1.append(plane_hops_5per_k1[i][1][3])
final_lat_5per_k1.append(plane_hops_5per_k1[i][0][4])
final_lon_5per_k1.append(plane_hops_5per_k1[i][1][4])
route1_lat_5per_k1.append(plane_hops_5per_k1[i][0][5])
route1_lon_5per_k1.append(plane_hops_5per_k1[i][1][5])
route2_lat_5per_k1.append(plane_hops_5per_k1[i][0][6])
route2_lon_5per_k1.append(plane_hops_5per_k1[i][1][6])
route3_lat_5per_k1.append(plane_hops_5per_k1[i][0][7])
route3_lon_5per_k1.append(plane_hops_5per_k1[i][1][7])
route4_lat_5per_k1.append(plane_hops_5per_k1[i][0][8])
route4_lon_5per_k1.append(plane_hops_5per_k1[i][1][8])
# 5per_k2 run
first_lat_5per_k2 = []
two_lat_5per_k2 = []
three_lat_5per_k2 = []
four_lat_5per_k2 = []
final_lat_5per_k2 = []
first_lon_5per_k2 = []
two_lon_5per_k2 = []
three_lon_5per_k2 = []
four_lon_5per_k2 = []
final_lon_5per_k2 = []
route1_lat_5per_k2 = []
route2_lat_5per_k2 = []
route3_lat_5per_k2 = []
route4_lat_5per_k2 = []
route1_lon_5per_k2 = []
route2_lon_5per_k2 = []
route3_lon_5per_k2 = []
route4_lon_5per_k2 = []
for i in xrange(len(plane_hops_5per_k2)):
first_lat_5per_k2.append(plane_hops_5per_k2[i][0][0])
first_lon_5per_k2.append(plane_hops_5per_k2[i][1][0])
two_lat_5per_k2.append(plane_hops_5per_k2[i][0][1])
two_lon_5per_k2.append(plane_hops_5per_k2[i][1][1])
three_lat_5per_k2.append(plane_hops_5per_k2[i][0][2])
three_lon_5per_k2.append(plane_hops_5per_k2[i][1][2])
four_lat_5per_k2.append(plane_hops_5per_k2[i][0][3])
four_lon_5per_k2.append(plane_hops_5per_k2[i][1][3])
final_lat_5per_k2.append(plane_hops_5per_k2[i][0][4])
final_lon_5per_k2.append(plane_hops_5per_k2[i][1][4])
route1_lat_5per_k2.append(plane_hops_5per_k2[i][0][5])
route1_lon_5per_k2.append(plane_hops_5per_k2[i][1][5])
route2_lat_5per_k2.append(plane_hops_5per_k2[i][0][6])
route2_lon_5per_k2.append(plane_hops_5per_k2[i][1][6])
route3_lat_5per_k2.append(plane_hops_5per_k2[i][0][7])
route3_lon_5per_k2.append(plane_hops_5per_k2[i][1][7])
route4_lat_5per_k2.append(plane_hops_5per_k2[i][0][8])
route4_lon_5per_k2.append(plane_hops_5per_k2[i][1][8])
# 5per_k3 run
first_lat_5per_k3 = []
two_lat_5per_k3 = []
three_lat_5per_k3 = []
four_lat_5per_k3 = []
final_lat_5per_k3 = []
first_lon_5per_k3 = []
two_lon_5per_k3 = []
three_lon_5per_k3 = []
four_lon_5per_k3 = []
final_lon_5per_k3 = []
route1_lat_5per_k3 = []
route2_lat_5per_k3 = []
route3_lat_5per_k3 = []
route4_lat_5per_k3 = []
route1_lon_5per_k3 = []
route2_lon_5per_k3 = []
route3_lon_5per_k3 = []
route4_lon_5per_k3 = []
for i in xrange(len(plane_hops_5per_k3)):
first_lat_5per_k3.append(plane_hops_5per_k3[i][0][0])
first_lon_5per_k3.append(plane_hops_5per_k3[i][1][0])
two_lat_5per_k3.append(plane_hops_5per_k3[i][0][1])
two_lon_5per_k3.append(plane_hops_5per_k3[i][1][1])
three_lat_5per_k3.append(plane_hops_5per_k3[i][0][2])
three_lon_5per_k3.append(plane_hops_5per_k3[i][1][2])
four_lat_5per_k3.append(plane_hops_5per_k3[i][0][3])
four_lon_5per_k3.append(plane_hops_5per_k3[i][1][3])
final_lat_5per_k3.append(plane_hops_5per_k3[i][0][4])
final_lon_5per_k3.append(plane_hops_5per_k3[i][1][4])
route1_lat_5per_k3.append(plane_hops_5per_k3[i][0][5])
route1_lon_5per_k3.append(plane_hops_5per_k3[i][1][5])
route2_lat_5per_k3.append(plane_hops_5per_k3[i][0][6])
route2_lon_5per_k3.append(plane_hops_5per_k3[i][1][6])
route3_lat_5per_k3.append(plane_hops_5per_k3[i][0][7])
route3_lon_5per_k3.append(plane_hops_5per_k3[i][1][7])
route4_lat_5per_k3.append(plane_hops_5per_k3[i][0][8])
route4_lon_5per_k3.append(plane_hops_5per_k3[i][1][8])
# 2per_k1 run
first_lat_2per_k1 = []
two_lat_2per_k1 = []
three_lat_2per_k1 = []
four_lat_2per_k1 = []
final_lat_2per_k1 = []
first_lon_2per_k1 = []
two_lon_2per_k1 = []
three_lon_2per_k1 = []
four_lon_2per_k1 = []
final_lon_2per_k1 = []
route1_lat_2per_k1 = []
route2_lat_2per_k1 = []
route3_lat_2per_k1 = []
route4_lat_2per_k1 = []
route1_lon_2per_k1 = []
route2_lon_2per_k1 = []
route3_lon_2per_k1 = []
route4_lon_2per_k1 = []
for i in xrange(len(plane_hops_2per_k1)):
first_lat_2per_k1.append(plane_hops_2per_k1[i][0][0])
first_lon_2per_k1.append(plane_hops_2per_k1[i][1][0])
two_lat_2per_k1.append(plane_hops_2per_k1[i][0][1])
two_lon_2per_k1.append(plane_hops_2per_k1[i][1][1])
three_lat_2per_k1.append(plane_hops_2per_k1[i][0][2])
three_lon_2per_k1.append(plane_hops_2per_k1[i][1][2])
four_lat_2per_k1.append(plane_hops_2per_k1[i][0][3])
four_lon_2per_k1.append(plane_hops_2per_k1[i][1][3])
final_lat_2per_k1.append(plane_hops_2per_k1[i][0][4])
final_lon_2per_k1.append(plane_hops_2per_k1[i][1][4])
route1_lat_2per_k1.append(plane_hops_2per_k1[i][0][5])
route1_lon_2per_k1.append(plane_hops_2per_k1[i][1][5])
route2_lat_2per_k1.append(plane_hops_2per_k1[i][0][6])
route2_lon_2per_k1.append(plane_hops_2per_k1[i][1][6])
route3_lat_2per_k1.append(plane_hops_2per_k1[i][0][7])
route3_lon_2per_k1.append(plane_hops_2per_k1[i][1][7])
route4_lat_2per_k1.append(plane_hops_2per_k1[i][0][8])
route4_lon_2per_k1.append(plane_hops_2per_k1[i][1][8])
# 2per_k2 run
first_lat_2per_k2 = []
two_lat_2per_k2 = []
three_lat_2per_k2 = []
four_lat_2per_k2 = []
final_lat_2per_k2 = []
first_lon_2per_k2 = []
two_lon_2per_k2 = []
three_lon_2per_k2 = []
four_lon_2per_k2 = []
final_lon_2per_k2 = []
route1_lat_2per_k2 = []
route2_lat_2per_k2 = []
route3_lat_2per_k2 = []
route4_lat_2per_k2 = []
route1_lon_2per_k2 = []
route2_lon_2per_k2 = []
route3_lon_2per_k2 = []
route4_lon_2per_k2 = []
for i in xrange(len(plane_hops_2per_k2)):
first_lat_2per_k2.append(plane_hops_2per_k2[i][0][0])
first_lon_2per_k2.append(plane_hops_2per_k2[i][1][0])
two_lat_2per_k2.append(plane_hops_2per_k2[i][0][1])
two_lon_2per_k2.append(plane_hops_2per_k2[i][1][1])
three_lat_2per_k2.append(plane_hops_2per_k2[i][0][2])
three_lon_2per_k2.append(plane_hops_2per_k2[i][1][2])
four_lat_2per_k2.append(plane_hops_2per_k2[i][0][3])
four_lon_2per_k2.append(plane_hops_2per_k2[i][1][3])
final_lat_2per_k2.append(plane_hops_2per_k2[i][0][4])
final_lon_2per_k2.append(plane_hops_2per_k2[i][1][4])
route1_lat_2per_k2.append(plane_hops_2per_k2[i][0][5])
route1_lon_2per_k2.append(plane_hops_2per_k2[i][1][5])
route2_lat_2per_k2.append(plane_hops_2per_k2[i][0][6])
route2_lon_2per_k2.append(plane_hops_2per_k2[i][1][6])
route3_lat_2per_k2.append(plane_hops_2per_k2[i][0][7])
route3_lon_2per_k2.append(plane_hops_2per_k2[i][1][7])
route4_lat_2per_k2.append(plane_hops_2per_k2[i][0][8])
route4_lon_2per_k2.append(plane_hops_2per_k2[i][1][8])
# 2per_k3 run
first_lat_2per_k3 = []
two_lat_2per_k3 = []
three_lat_2per_k3 = []
four_lat_2per_k3 = []
final_lat_2per_k3 = []
first_lon_2per_k3 = []
two_lon_2per_k3 = []
three_lon_2per_k3 = []
four_lon_2per_k3 = []
final_lon_2per_k3 = []
route1_lat_2per_k3 = []
route2_lat_2per_k3 = []
route3_lat_2per_k3 = []
route4_lat_2per_k3 = []
route1_lon_2per_k3 = []
route2_lon_2per_k3 = []
route3_lon_2per_k3 = []
route4_lon_2per_k3 = []
for i in xrange(len(plane_hops_2per_k3)):
first_lat_2per_k3.append(plane_hops_2per_k3[i][0][0])
first_lon_2per_k3.append(plane_hops_2per_k3[i][1][0])
two_lat_2per_k3.append(plane_hops_2per_k3[i][0][1])
two_lon_2per_k3.append(plane_hops_2per_k3[i][1][1])
three_lat_2per_k3.append(plane_hops_2per_k3[i][0][2])
three_lon_2per_k3.append(plane_hops_2per_k3[i][1][2])
four_lat_2per_k3.append(plane_hops_2per_k3[i][0][3])
four_lon_2per_k3.append(plane_hops_2per_k3[i][1][3])
final_lat_2per_k3.append(plane_hops_2per_k3[i][0][4])
final_lon_2per_k3.append(plane_hops_2per_k3[i][1][4])
route1_lat_2per_k3.append(plane_hops_2per_k3[i][0][5])
route1_lon_2per_k3.append(plane_hops_2per_k3[i][1][5])
route2_lat_2per_k3.append(plane_hops_2per_k3[i][0][6])
route2_lon_2per_k3.append(plane_hops_2per_k3[i][1][6])
route3_lat_2per_k3.append(plane_hops_2per_k3[i][0][7])
route3_lon_2per_k3.append(plane_hops_2per_k3[i][1][7])
route4_lat_2per_k3.append(plane_hops_2per_k3[i][0][8])
route4_lon_2per_k3.append(plane_hops_2per_k3[i][1][8])
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k1,first_lat_5per_k1)
x10,y10 = fig(two_lon_5per_k1,two_lat_5per_k1)
x11,y11 = fig(three_lon_5per_k1,three_lat_5per_k1)
x12,y12 = fig(four_lon_5per_k1,four_lat_5per_k1)
x13,y13 = fig(final_lon_5per_k1,final_lat_5per_k1)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k1,route1_lat_5per_k1)
x15,y15 = fig(route2_lon_5per_k1,route2_lat_5per_k1)
x16,y16 = fig(route3_lon_5per_k1,route3_lat_5per_k1)
x17,y17 = fig(route4_lon_5per_k1,route4_lat_5per_k1)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k2,first_lat_5per_k2)
x10,y10 = fig(two_lon_5per_k2,two_lat_5per_k2)
x11,y11 = fig(three_lon_5per_k2,three_lat_5per_k2)
x12,y12 = fig(four_lon_5per_k2,four_lat_5per_k2)
x13,y13 = fig(final_lon_5per_k2,final_lat_5per_k2)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k2,route1_lat_5per_k2)
x15,y15 = fig(route2_lon_5per_k2,route2_lat_5per_k2)
x16,y16 = fig(route3_lon_5per_k2,route3_lat_5per_k2)
x17,y17 = fig(route4_lon_5per_k2,route4_lat_5per_k2)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_5per,circle_lat_err1_5per)
x7,y7 = fig(circle_lon_err2_5per,circle_lat_err2_5per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k3,first_lat_5per_k3)
x10,y10 = fig(two_lon_5per_k3,two_lat_5per_k3)
x11,y11 = fig(three_lon_5per_k3,three_lat_5per_k3)
x12,y12 = fig(four_lon_5per_k3,four_lat_5per_k3)
x13,y13 = fig(final_lon_5per_k3,final_lat_5per_k3)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k3,route1_lat_5per_k3)
x15,y15 = fig(route2_lon_5per_k3,route2_lat_5per_k3)
x16,y16 = fig(route3_lon_5per_k3,route3_lat_5per_k3)
x17,y17 = fig(route4_lon_5per_k3,route4_lat_5per_k3)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k1,first_lat_5per_k1)
x10,y10 = fig(two_lon_5per_k1,two_lat_5per_k1)
x11,y11 = fig(three_lon_5per_k1,three_lat_5per_k1)
x12,y12 = fig(four_lon_5per_k1,four_lat_5per_k1)
x13,y13 = fig(final_lon_5per_k1,final_lat_5per_k1)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k1,route1_lat_5per_k1)
x15,y15 = fig(route2_lon_5per_k1,route2_lat_5per_k1)
x16,y16 = fig(route3_lon_5per_k1,route3_lat_5per_k1)
x17,y17 = fig(route4_lon_5per_k1,route4_lat_5per_k1)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k2,first_lat_5per_k2)
x10,y10 = fig(two_lon_5per_k2,two_lat_5per_k2)
x11,y11 = fig(three_lon_5per_k2,three_lat_5per_k2)
x12,y12 = fig(four_lon_5per_k2,four_lat_5per_k2)
x13,y13 = fig(final_lon_5per_k2,final_lat_5per_k2)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k2,route1_lat_5per_k2)
x15,y15 = fig(route2_lon_5per_k2,route2_lat_5per_k2)
x16,y16 = fig(route3_lon_5per_k2,route3_lat_5per_k2)
x17,y17 = fig(route4_lon_5per_k2,route4_lat_5per_k2)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()
#Set figure size
fig = plt.figure(figsize=[30,20])
#Setup Basemap
fig = Basemap(width=10000000,height=18000000,projection='lcc',resolution='c',lat_0=10,lon_0=90,suppress_ticks=True)
#Draw coasts
fig.drawcoastlines()
#Draw boundary
fig.drawmapboundary(fill_color='lightblue')
#Fill background
fig.fillcontinents(color='#FFD39B',lake_color='lightblue')
#Draw parallels
parallels = np.arange(lat_min,lat_max,lat_space)
fig.drawparallels(np.arange(lat_min,lat_max,lat_space),labels=[1,1,0,1], fontsize=15)
#Draw meridians
meridians = np.arange(lon_min,lon_max,lon_space)
fig.drawmeridians(np.arange(lon_min,lon_max,lon_space),labels=[1,1,0,1], fontsize=15)
#Translate coords into map coord system to plot
#Known 777 Locs
x,y = fig(kualalumpur[1],kualalumpur[0]) #plotted as lon,lat NOT lat,lon -- watch out!!
x2,y2 = fig(igariwaypoint[1],igariwaypoint[0])
x3,y3 = fig(pulauperak[1],pulauperak[0])
#Inmarsat Satellite Loc
x4,y4 = fig(inmarsat[1],inmarsat[0])
#Add circle coords -- 2.5% error
x5,y5 = fig(circle_lon,circle_lat)
x6,y6 = fig(circle_lon_err1_2per,circle_lat_err1_2per)
x7,y7 = fig(circle_lon_err2_2per,circle_lat_err2_2per)
#Add points after each hr
x9,y9 = fig(first_lon_5per_k3,first_lat_5per_k3)
x10,y10 = fig(two_lon_5per_k3,two_lat_5per_k3)
x11,y11 = fig(three_lon_5per_k3,three_lat_5per_k3)
x12,y12 = fig(four_lon_5per_k3,four_lat_5per_k3)
x13,y13 = fig(final_lon_5per_k3,final_lat_5per_k3)
#Add ultimate locations of MH370
x14,y14 = fig(route1_lon_5per_k3,route1_lat_5per_k3)
x15,y15 = fig(route2_lon_5per_k3,route2_lat_5per_k3)
x16,y16 = fig(route3_lon_5per_k3,route3_lat_5per_k3)
x17,y17 = fig(route4_lon_5per_k3,route4_lat_5per_k3)
#Draw circle showing extent of Inmarsat sat radar detection
fig.plot(x5,y5,'r-',markersize=5,label='5th Ping')
fig.plot(x6,y6,'r--',markersize=5,label='with 5% error')
fig.plot(x7,y7,'r--',markersize=5)
#Plot coords w/ filled circles
fig.plot(x,y,'bo',markersize=10,label='MH370 Flight Path')
fig.plot(x2,y2,'bo',markersize=10)
fig.plot(x3,y3,'go',markersize=10,label='MH370 Last Known Coords')
fig.plot(x4,y4,'ro',markersize=10,label='Inmarsat 3-F1')
#Add monte carlo points
fig.plot(x9,y9,'yo',markersize=5,label='after 1 hr')
fig.plot(x10,y10,'co',markersize=5,label='after 2 hrs')
fig.plot(x11,y11,'mo',markersize=5,label= 'after 3 hrs')
fig.plot(x12,y12,'wo',markersize=5,label='after 4 hrs')
fig.plot(x13,y13,'ro',markersize=7,label='after 5 hrs')
#Plot ultimate locations of MH370
fig.plot(x14,y14,'bo',markersize=5,label='in final hr')
fig.plot(x15,y15,'bo',markersize=5)
fig.plot(x16,y16,'bo',markersize=5)
fig.plot(x17,y17,'bo',markersize=5)
#Draw arrows showing flight path
arrow1 = plt.arrow(x,y,x2-x,y2-y,linewidth=3,color='blue',linestyle='dashed',label='flight path')
arrow2 = plt.arrow(x2,y2,x3-x2,y3-y2,linewidth=3,color='blue',linestyle='dashed',label='flight path')
#Make legend
legend = plt.legend(loc='upper right',fontsize=10,frameon=True,title='Legend',markerscale=1,prop={'size':15})
legend.get_title().set_fontsize('20')
#Add title
plt.title('MH370 Position Progression Over Time', fontsize=30)
#Show below
plt.show()