labs = [l.get_label() for l in lns]
plt.legend(lns, labs,loc = 'lower left', fancybox=True, framealpha=0.5,prop={'size':8})

###
#middle panel (linear model etc.)
###

ax21 = fig.add_subplot(312)

#smooth volcanic data to 7 years
smth = 7
start_year = 860
end_year = 1840
volc_year = voln_n[(start_year-voln_n[0,0])*36:(end_year-voln_n[0,0])*36,0]
vns = running_mean_post.running_mean_post(voln_n[(start_year-voln_n[0,0])*36:(end_year-voln_n[0,0])*36,1],smth*36.0)

###
#produce linear model of tas based on smoothed volcanics
###

y2 = mean_data2.copy()
model_amo = np.interp(volc_year,yrs,y2)
y = model_amo
x1 = vns
x = sm.add_constant(x1)
model = sm.OLS(y,x)
results = model.fit()

###
#plot tas and linear model of tas
data3 = np.genfromtxt(file2)
data4 = np.genfromtxt(file3)
data_tmp = np.zeros([data1.shape[0],2])
data_tmp[:,0] = data1[:,1]
data_tmp[:,1] = data2[:,2]
data = np.mean(data_tmp,axis = 1)
data_final = data1.copy()
data_final[:,1] = data

volcanic_smoothing = 65 #yrs

volc_years = data1[:,0]

loc = np.where((volc_years >= np.min(model_years)) & (volc_years <= np.min(model_years)))

volc = running_mean_post.running_mean_post(data_final_t[loc],12.0*volcanic_smoothing)
volc_mean = np.mean(volc)
high_volc = np.where(volc > volc_mean)
low_volc = np.where(volc < volc_mean)

high_volc_data = np.empty([np.shape(cubes[0][0].data)[0],np.shape(cubes[0][0].data)[1],np.size(cubes)])
low_volc_data = high_volc_data.copy()

for i,cube in enumerate(cubes):
	tmp = cube[high_volc].collapsed('time',iris.analysis.MEAN)
	high_volc_data[i,:,:] = tmp.data
	tmp = cube[low_volc].collapsed('time',iris.analysis.MEAN)
	low_volc_data[i,:,:] = tmp.data

high_volc_data_mean = np.mean(high_volc_data,axis = 0)
low_volc_data_mean = np.mean(low_volc_data,axis = 0)
data_tmp = np.zeros([data1.shape[0],2])
data_tmp[:,0] = data1[:,1]
data_tmp[:,1] = data2[:,1]

data = np.mean(data_tmp,axis = 1)
data_final = data1.copy()
data_final[:,1] = data

volcanic_smoothing = 5 #yrs

volc_years = data_final[:,0]

loc = np.where((volc_years >= 850) & (volc_years <= 1849))[0]

volc_tmp = running_mean_post.running_mean_post(data_final[loc,1],36.0*volcanic_smoothing)


volc_years = data_final[np.arange(np.size(volc_tmp)),0]
yrs = np.floor(data_final[np.arange(np.size(volc_tmp)),0])
yrs_unique = np.unique(yrs)
data_ann = np.empty([np.size(yrs_unique),2])

for i,y in enumerate(yrs_unique):
        loc = np.where(yrs == y)[0]
        data_ann[i,0] = y
        data_ann[i,1] = np.mean(volc_tmp[loc])

volc = data_ann[:,1]

volc_mean = np.mean(volc)
volc_yrs = voln_n[:,0]
voln_data = voln_n[:,1]

loc = np.where((volc_yrs >= 950) & (volc_yrs < 1750))
volc_yrs = volc_yrs[loc]
voln_data = voln_data[loc]
volc_yrs = np.floor(volc_yrs)
volc_yrs2 = np.unique(volc_yrs)

voln_data2 = volc_yrs2.copy()

for i,temp_yrs in enumerate(volc_yrs2):
	loc = np.where(volc_yrs == temp_yrs)
	voln_data2[i] = np.mean(voln_data[loc])

voln_data2 = rmp.running_mean_post(voln_data2,1)

loc = np.where(voln_data2 > np.median(voln_data2))
tmp_years = years[100:-100]
high_years = tmp_years[loc[0]]

loc = np.where(voln_data2 < np.median(voln_data2))
tmp_years = years[100:-100]
low_years = tmp_years[loc[0]]

pr_high_volc = np.zeros([models.size,180,360])
pr_high_volc[:] = np.NAN
pr_low_volc = pr_high_volc.copy()

for i,model in enumerate(models):
	print model


smth =7
smth2 =7
volc_yr = voln_n[:,0]
loc_v = np.where((volc_yr <= end_date) & (volc_yr >= start_date))
volc_yr_II = volc_yr[loc_v]

tmp = data3_data
tmp_yr = data3_yr
tmp = scipy.signal.filtfilt(b, a, tmp)
tmp = scipy.signal.filtfilt(b1, a1, tmp)

data1_int = np.interp(volc_yr_II,tmp_yr,tmp)
data1_int = rmp.running_mean_post(data1_int,smth2*36.0)
#data1_int[np.where(np.isnan(data1_int))] = 0.0
mann_amo = np.interp(volc_yr_II,amo_yr,amo_data)
vns = rmp.running_mean_post(voln_n[loc_v[0],1],smth*36.0)

x1 = vns
x2 = data1_int
y = mann_amo
x = np.column_stack((x1,x2))
#stack explanatory variables into an array
x = sm.add_constant(x)
#add constant to first column for some reasons
model = sm.OLS(y,x)
results = model.fit()

x1b = vns