from __future__ import print_function
import numpy as np
import sys
import os
import datetime
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import ScalarFormatter
from matplotlib.ticker import NullFormatter
import matplotlib.image as image
import matplotlib.patches as patches
import matplotlib.lines as lines
import matplotlib.ticker as ticker
from scipy.optimize import curve_fit
from matplotlib.ticker import LogLocator, LogFormatterMathtext

from Aux import *

def func(x,b):
	return np.exp(-(x**b))

def make_figure1old (N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3,testvalue,test2value):
	####### Type A
	N = N_bunches*N_runs_bunch 
	Nep_arrays = ep_index(N_episodes)
	# read average target times and number of targets
	episodes,avg_time,n_targets = read_AvgTargetTimes_bunches(foldername,N_bunches,Nep_arrays)
	# read target times and number of targets vs r_ini
	target_times,initial_radii,initial_directions = read_TargetTimes_bunches(foldername,N_bunches,N,Nep_arrays)
	target_times_ini,initial_radii_ini,initial_directions_ini = read_TargetTimes_given_policy(foldername,'InitialPolicy_old')
	N_ini = len(target_times_ini)
	
	####### Type C
	N2 = N_bunches2*N_runs_bunch2 
	Nep_arrays2 = ep_index(N_episodes2)
	# read average target times and number of targets
	episodes2,avg_time2,n_targets2 = read_AvgTargetTimes_bunches(foldername2,N_bunches2,Nep_arrays2)
	# ~ # read target times and number of targets vs r_ini
	target_times2,initial_radii2,initial_directions2 = read_TargetTimes_bunches(foldername2,N_bunches2,N2,Nep_arrays2)
	target_times2_ini,initial_radii2_ini,initial_directions2_ini = read_TargetTimes_given_policy(foldername2,'InitialPolicy_old')
	N2_ini = len(target_times2_ini)
	
	####### Type B
	N3 = N_bunches3*N_runs_bunch3 
	Nep_arrays3 = ep_index(N_episodes3)
	# read average target times and number of targets
	episodes3,avg_time3,n_targets3 = read_AvgTargetTimes_bunches(foldername3,N_bunches3,Nep_arrays3)
	# ~ # read target times and number of targets vs r_ini
	target_times3,initial_radii3,initial_directions3 = read_TargetTimes_bunches(foldername3,N_bunches3,N3,Nep_arrays3)
	target_times3_ini,initial_radii3_ini,initial_directions3_ini = read_TargetTimes_given_policy(foldername3,'InitialPolicy_old')
	N3_ini = len(target_times3_ini)
	
	
	for i in range(Nep_arrays3):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,n_targets2[i]*1.0/N2,n_targets3[i]*1.0/N3)
	for i in range(Nep_arrays3,Nep_arrays2):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,n_targets2[i]*1.0/N2,'still missing')
	for i in range(Nep_arrays2,Nep_arrays):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,'still missing','still missing')

	####################################################################
	####################################################################
	####################################################################
	
	xfig,yfig=7.0,2.5
	factor = xfig/yfig
	
	x1,y1 = 0.08,0.16
	dx1,dy1=0.4,0.82
	
	x2,y2 = 0.135,0.5
	dx2,dy2=0.16,0.4
	
	x3,y3 = 0.58,y1
	dx3,dy3 = dx1,dy1
	
	x4,y4 = x3+dx3,y1
	dx4,dy4 = dx3,dy1
	

	with PdfPages('fig2.pdf') as pdf:
		fig = plt.figure(figsize=(xfig,yfig))
		plt.rc('text', usetex=True)
		plt.rc('text.latex', preamble = ','.join('''\usepackage{txfonts} \usepackage{lmodern}'''.split()))
		
		######################## panel A ########################################
		panel = fig.add_axes([x1, y1, dx1, dy1])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,1400000)
		panel.set_ylim(0,1.44)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		panel.xaxis.set_major_locator(LogLocator(base=10.0, subs=[1.0], numticks=10))  # Major ticks at 10^x
		panel.xaxis.set_minor_locator(LogLocator(base=10.0, subs=np.arange(1, 10) * 0.1, numticks=100))  # Minor ticks at 1-9
		panel.xaxis.set_major_formatter(LogFormatterMathtext())  # Forces 10^x notation
		panel.xaxis.set_minor_formatter(NullFormatter())
		
		# plot avg line
		panel.plot(episodes,n_targets*1.0/N,'-',color=color1,markersize=2,linewidth=linewidth,zorder=3,label=r'type A')
		panel.plot(episodes3,n_targets3*1.0/N3,'-',color=color3,markersize=2,linewidth=linewidth,zorder=3,label=r'type B')
		panel.plot(episodes2,n_targets2*1.0/N2,'-',color=color2,markersize=2,linewidth=linewidth,zorder=3,label=r'type C')
		
		panel.hlines(y=1.0, xmin=3000., xmax=1000000, linestyle='--', linewidth=0.5, color='black')
		# ~ panel.hlines(y=testvalue, xmin=2000., xmax=1000000, linestyle='--', linewidth=0.5, color='brown')
		
		panel.legend(loc='upper right', bbox_to_anchor=(0.99, 0.99),ncol=1,fontsize=legendfontsize-1,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (a)}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel B ########################################
		panel = fig.add_axes([x2, y2, dx2, dy2])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsizeinset)
		panel.set_ylabel(r'avg. ep. time $[\tau]$',fontsize=axislabelfontsizeinset-1,labelpad=0.2)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,1400000)
		panel.set_ylim(0.1,1.58)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.2))
		panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		panel.set_xticks([1, 10, 100, 1000, 10000, 100000, 1000000])  # Specify ticks explicitly
		
		# plot avg line
		panel.plot(episodes,avg_time,'--',color=color1,markersize=2,linewidth=linewidth-1,zorder=3)
		panel.plot(episodes3,avg_time3,'--',color=color3,markersize=2,linewidth=linewidth-1,zorder=3)
		panel.plot(episodes2,avg_time2,'--',color=color2,markersize=2,linewidth=linewidth-1,zorder=3)
		
		
		ftp = (avg_time*n_targets + 1.0*(N-n_targets))/N
		ftp3 = (avg_time3*n_targets3 + 1.0*(N3-n_targets3))/N3
		ftp2 = (avg_time2*n_targets2 + 1.0*(N2-n_targets2))/N2
		
		panel.hlines(y=1.0, xmin=0.1, xmax=1000000, linestyle='--', linewidth=0.5, color='black')
		
		panel.plot(episodes,ftp,'-',color=color1,markersize=2,linewidth=linewidth-0.5,zorder=3)
		panel.plot(episodes3,ftp3,'-',color=color3,markersize=2,linewidth=linewidth-0.5,zorder=3)
		panel.plot(episodes2,ftp2,'-',color=color2,markersize=2,linewidth=linewidth-0.5,zorder=3)
		
		
		
		# ~ panel.hlines(y=test2value, xmin=2000., xmax=1000000, linestyle='--', linewidth=0.5, color='brown')
		
		
		panel.plot([1,3],[4,5],'-',color='gray',markersize=2,linewidth=linewidth-0.5,label='all agents')
		panel.plot([1,3],[4,5],'--',color='gray',markersize=2,linewidth=linewidth-1,label='successful agents')
		
		panel.legend(loc='upper right', bbox_to_anchor=(0.99, 0.99),ncol=1,fontsize=legendfontsize-3,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		
		#panel.text(0.08,0.82,r'{\bf (b)}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel C ########################################
		panel = fig.add_axes([x3, y3, dx3, dy3])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r_{\rm ini}/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		panel.set_xlim(0,10.5)
		# ~ panel.set_ylim(0,0.0065)
		panel.set_ylim(0,1.43)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		# ~ panel.yaxis.set_major_locator(MultipleLocator(0.01))
		# ~ panel.yaxis.set_minor_locator(MultipleLocator(0.005))
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		# join data in larger bins
		bin_width = 0.5
		rs = np.arange(0.5 + bin_width/2, 10.01, bin_width)
		tot_ep1 = np.zeros(len(rs))
		suc_ep1 = np.zeros(len(rs))
		totA_ep1000000 = np.zeros(len(rs))
		sucA_ep1000000 = np.zeros(len(rs))
		totB_ep1000000 = np.zeros(len(rs))
		sucB_ep1000000 = np.zeros(len(rs))
		totC_ep1000000 = np.zeros(len(rs))
		sucC_ep1000000 = np.zeros(len(rs))
		
		# type A
		for n in range(N_ini):
			r = initial_radii_ini[n]
			scalar = np.cos(initial_directions_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times_ini[n]>0.0):
				suc_ep1[k] +=1
					
		for n in range(N):
			index = 54					#### episode 1000000
			r = initial_radii[index][n]
			scalar = np.cos(initial_directions[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totA_ep1000000[k] +=1
			if (target_times[index][n]>0.0):
				sucA_ep1000000[k] +=1
		
		# type C
		for n in range(N2_ini):
			r = initial_radii2_ini[n]
			scalar = np.cos(initial_directions2_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times2_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(N2):
			index = 54					#### episode 1000000
			r = initial_radii2[index][n]
			scalar = np.cos(initial_directions2[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totC_ep1000000[k] +=1
			if (target_times2[index][n]>0.0):
				sucC_ep1000000[k] +=1
				
		# type B
		for n in range(N3_ini):
			r = initial_radii3_ini[n]
			scalar = np.cos(initial_directions3_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times3_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(N3):
			index = 49					#### episode 500000
			r = initial_radii3[index][n]
			scalar = np.cos(initial_directions3[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totB_ep1000000[k] +=1
			if (target_times3[index][n]>0.0):
				sucB_ep1000000[k] +=1	
				
				
		
		print (rs)
		print (tot_ep1)
		print (totA_ep1000000)
		print (totC_ep1000000)
		
		
		barsC = panel.bar(rs,sucC_ep1000000 / totC_ep1000000,facecolor='none',edgecolor='black',width=bin_width,linewidth=1.5,zorder=1)


		
		
		h1= panel.bar(rs,4*suc_ep1/tot_ep1, color='black', edgecolor='black', width=bin_width, alpha=1.0, label = r'initial policy ($\times 4$)',zorder=4)
		h2 = panel.bar(rs,sucA_ep1000000/totA_ep1000000, color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A',zorder=3)
		h3 = panel.bar(rs,sucB_ep1000000/totB_ep1000000, color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, facecolor='none', edgecolor=color2, width=bin_width, alpha=0.5, label = r'type C',zorder=2)
		
		
		# Keep only the top edge
		for i, bar in enumerate(barsC):
			bar.set_edgecolor('none')  # remove all edges
			bar.set_facecolor('none')  # remove fill
			# add top edge manually
			h4 = panel.hlines(y=bar.get_height(),xmin=bar.get_x(),xmax=bar.get_x() + bar.get_width(),colors=color2,linewidth=2,zorder=5, label=r'type C' if i == 0 else None)
		
		
		# ~ panel.bar(rs,sucA_ep1000000/totA_ep1000000, color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A, $10^6$-th episode',zorder=3)
		# ~ panel.bar(rs,sucB_ep1000000/totB_ep1000000, color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B, $5 \cdot 10^5$-th episode',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, color=color2, edgecolor='black', width=bin_width, alpha=0.5, label = r'type C, $5 \cdot 10^5$-th episode',zorder=2)
		
		panel.hlines(y=1.0, xmin=0.25, xmax=10.25, linestyle='--', linewidth=0.5, color='black')
		
		panel.legend([h1, h2, h3, h4], [r'initial policy ($\times 4$)', r'type A', r'type B', r'type C'],loc='upper right', bbox_to_anchor=(0.99, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (b)}',fontsize=legendfontsize,transform=panel.transAxes)

		
		pdf.savefig(fig)
	return
	
def make_figure1(N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3,testvalue,test2value):
	####### Type A
	N = N_bunches*N_runs_bunch 
	Nep_arrays = ep_index(N_episodes)
	# read average target times and number of targets
	episodes,avg_time,n_targets = read_AvgTargetTimes_bunches(foldername,N_bunches,Nep_arrays)
	# read target times and number of targets vs r_ini
	target_times,initial_radii,initial_directions = read_TargetTimes_bunches(foldername,N_bunches,N,Nep_arrays)
	target_times_ini,initial_radii_ini,initial_directions_ini = read_TargetTimes_given_policy(foldername,'InitialPolicy_old')
	N_ini = len(target_times_ini)
	
	####### Type C
	N2 = N_bunches2*N_runs_bunch2 
	Nep_arrays2 = ep_index(N_episodes2)
	# read average target times and number of targets
	episodes2,avg_time2,n_targets2 = read_AvgTargetTimes_bunches(foldername2,N_bunches2,Nep_arrays2)
	# ~ # read target times and number of targets vs r_ini
	target_times2,initial_radii2,initial_directions2 = read_TargetTimes_bunches(foldername2,N_bunches2,N2,Nep_arrays2)
	target_times2_ini,initial_radii2_ini,initial_directions2_ini = read_TargetTimes_given_policy(foldername2,'InitialPolicy_old')
	N2_ini = len(target_times2_ini)
	
	####### Type B
	N3 = N_bunches3*N_runs_bunch3 
	Nep_arrays3 = ep_index(N_episodes3)
	# read average target times and number of targets
	episodes3,avg_time3,n_targets3 = read_AvgTargetTimes_bunches(foldername3,N_bunches3,Nep_arrays3)
	# ~ # read target times and number of targets vs r_ini
	target_times3,initial_radii3,initial_directions3 = read_TargetTimes_bunches(foldername3,N_bunches3,N3,Nep_arrays3) #######
	# ~ target_times3,initial_radii3,initial_directions3 = read_TargetTimes_bunches('../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/',N_bunches3,N3,Nep_arrays3)
	target_times3_ini,initial_radii3_ini,initial_directions3_ini = read_TargetTimes_given_policy(foldername3,'InitialPolicy') ###########
	# ~ target_times3_ini,initial_radii3_ini,initial_directions3_ini = read_TargetTimes_given_policy('../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/','InitialPolicy_old')
	N3_ini = len(target_times3_ini)
	
	
	for i in range(Nep_arrays3):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,n_targets2[i]*1.0/N2,n_targets3[i]*1.0/N3)
	for i in range(Nep_arrays3,Nep_arrays2):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,n_targets2[i]*1.0/N2,'still missing')
	for i in range(Nep_arrays2,Nep_arrays):
		print (ep_index(episodes[i]),episodes[i],n_targets[i]*1.0/N,'still missing','still missing')

	####################################################################
	####################################################################
	####################################################################
	
	xfig,yfig=7.0,2.5
	factor = xfig/yfig
	
	x1,y1 = 0.07,0.16
	dx1,dy1=0.4,0.82
	
	x2,y2 = 0.125,0.5
	dx2,dy2=0.16,0.4
	
	x3,y3 = 0.56,y1
	dx3,dy3 = 0.3,dy1
	
	x4,y4 = x3+dx3,y1
	dx4,dy4 = 0.12,dy1
	

	with PdfPages('fig2.pdf') as pdf:
		fig = plt.figure(figsize=(xfig,yfig))
		plt.rc('text', usetex=True)
		plt.rc('text.latex', preamble = ','.join('''\usepackage{txfonts} \usepackage{lmodern}'''.split()))
		
		######################## panel A ########################################
		panel = fig.add_axes([x1, y1, dx1, dy1])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,1400000)
		panel.set_ylim(0,1.44)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		panel.xaxis.set_major_locator(LogLocator(base=10.0, subs=[1.0], numticks=10))  # Major ticks at 10^x
		panel.xaxis.set_minor_locator(LogLocator(base=10.0, subs=np.arange(1, 10) * 0.1, numticks=100))  # Minor ticks at 1-9
		panel.xaxis.set_major_formatter(LogFormatterMathtext())  # Forces 10^x notation
		panel.xaxis.set_minor_formatter(NullFormatter())
		
		# plot avg line
		panel.plot(episodes,n_targets*1.0/N,'-',color=color1,markersize=2,linewidth=linewidth,zorder=3,label=r'type A')
		panel.plot(episodes3,n_targets3*1.0/N3,'-',color=color3,markersize=2,linewidth=linewidth,zorder=3,label=r'type B')
		panel.plot(episodes2,n_targets2*1.0/N2,'-',color=color2,markersize=2,linewidth=linewidth,zorder=3,label=r'type C')
		
		panel.hlines(y=1.0, xmin=3000., xmax=1000000, linestyle='--', linewidth=0.5, color='black')
		# ~ panel.hlines(y=testvalue, xmin=2000., xmax=1000000, linestyle='--', linewidth=0.5, color='brown')
		
		panel.legend(loc='upper right', bbox_to_anchor=(0.99, 0.99),ncol=1,fontsize=legendfontsize-1,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (a)}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel B ########################################
		panel = fig.add_axes([x2, y2, dx2, dy2])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsizeinset)
		panel.set_ylabel(r'avg. ep. time $[\tau]$',fontsize=axislabelfontsizeinset-1,labelpad=0.2)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,1400000)
		panel.set_ylim(0.1,1.58)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.2))
		panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		panel.set_xticks([1, 10, 100, 1000, 10000, 100000, 1000000])  # Specify ticks explicitly
		
		# plot avg line
		panel.plot(episodes,avg_time,'--',color=color1,markersize=2,linewidth=linewidth-1,zorder=3)
		panel.plot(episodes3,avg_time3,'--',color=color3,markersize=2,linewidth=linewidth-1,zorder=3)
		panel.plot(episodes2,avg_time2,'--',color=color2,markersize=2,linewidth=linewidth-1,zorder=3)
		
		
		ftp = (avg_time*n_targets + 1.0*(N-n_targets))/N
		ftp3 = (avg_time3*n_targets3 + 1.0*(N3-n_targets3))/N3
		ftp2 = (avg_time2*n_targets2 + 1.0*(N2-n_targets2))/N2
		
		panel.hlines(y=1.0, xmin=0.1, xmax=1000000, linestyle='--', linewidth=0.5, color='black')
		
		panel.plot(episodes,ftp,'-',color=color1,markersize=2,linewidth=linewidth-0.5,zorder=3)
		panel.plot(episodes3,ftp3,'-',color=color3,markersize=2,linewidth=linewidth-0.5,zorder=3)
		panel.plot(episodes2,ftp2,'-',color=color2,markersize=2,linewidth=linewidth-0.5,zorder=3)
		
		
		
		# ~ panel.hlines(y=test2value, xmin=2000., xmax=1000000, linestyle='--', linewidth=0.5, color='brown')
		
		
		panel.plot([1,3],[4,5],'-',color='gray',markersize=2,linewidth=linewidth-0.5,label='all agents')
		panel.plot([1,3],[4,5],'--',color='gray',markersize=2,linewidth=linewidth-1,label='successful agents')
		
		panel.legend(loc='upper right', bbox_to_anchor=(0.99, 0.99),ncol=1,fontsize=legendfontsize-3,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		
		#panel.text(0.08,0.82,r'{\bf (b)}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel C ########################################
		panel = fig.add_axes([x3, y3, dx3, dy3])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r_{\rm ini}/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		panel.set_xlim(0,10.5)
		# ~ panel.set_ylim(0,0.0065)
		panel.set_ylim(0,1.43)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		# ~ panel.yaxis.set_major_locator(MultipleLocator(0.01))
		# ~ panel.yaxis.set_minor_locator(MultipleLocator(0.005))
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		# join data in larger bins
		bin_width = 0.5
		rs = np.arange(0.5 + bin_width/2, 10.01, bin_width)
		tot_ep1 = np.zeros(len(rs))
		suc_ep1 = np.zeros(len(rs))
		totA_ep1000000 = np.zeros(len(rs))
		sucA_ep1000000 = np.zeros(len(rs))
		totB_ep1000000 = np.zeros(len(rs))
		sucB_ep1000000 = np.zeros(len(rs))
		totC_ep1000000 = np.zeros(len(rs))
		sucC_ep1000000 = np.zeros(len(rs))
		
		# type A
		for n in range(N_ini):
			r = initial_radii_ini[n]
			scalar = np.cos(initial_directions_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times_ini[n]>0.0):
				suc_ep1[k] +=1
					
		for n in range(N):
			index = 54					#### episode 1000000
			r = initial_radii[index][n]
			scalar = np.cos(initial_directions[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totA_ep1000000[k] +=1
			if (target_times[index][n]>0.0):
				sucA_ep1000000[k] +=1
		
		# type C
		for n in range(N2_ini):
			r = initial_radii2_ini[n]
			scalar = np.cos(initial_directions2_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times2_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(N2):
			index = 54					#### episode 1000000
			r = initial_radii2[index][n]
			scalar = np.cos(initial_directions2[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totC_ep1000000[k] +=1
			if (target_times2[index][n]>0.0):
				sucC_ep1000000[k] +=1
				
		# type B
		for n in range(N3_ini):
			r = initial_radii3_ini[n]
			scalar = np.cos(initial_directions3_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times3_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(N3):
			index = 54					#### episode 1000000
			r = initial_radii3[index][n]
			scalar = np.cos(initial_directions3[index][n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totB_ep1000000[k] +=1
			if (target_times3[index][n]>0.0):
				sucB_ep1000000[k] +=1	
				
				
		
		print (rs)
		print (tot_ep1)
		print (totA_ep1000000)
		print (totC_ep1000000)
		
		
		barsC = panel.bar(rs,sucC_ep1000000 / totC_ep1000000,facecolor='none',edgecolor='black',width=bin_width,linewidth=1.5,zorder=1)


		h1= panel.bar(rs,4*suc_ep1/tot_ep1, color='black', edgecolor='black', width=bin_width, alpha=1.0, label = r'initial policy ($\times 4$)',zorder=4)
		h2 = panel.bar(rs,sucA_ep1000000/totA_ep1000000, color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A',zorder=3)
		h3 = panel.bar(rs,sucB_ep1000000/totB_ep1000000, color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, facecolor='none', edgecolor=color2, width=bin_width, alpha=0.5, label = r'type C',zorder=2)
		
		
		# Keep only the top edge
		for i, bar in enumerate(barsC):
			bar.set_edgecolor('none')  # remove all edges
			bar.set_facecolor('none')  # remove fill
			# add top edge manually
			h4 = panel.hlines(y=bar.get_height(),xmin=bar.get_x(),xmax=bar.get_x() + bar.get_width(),colors=color2,linewidth=2,zorder=5, label=r'type C' if i == 0 else None)
		
		
		# ~ panel.bar(rs,sucA_ep1000000/totA_ep1000000, color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A, $10^6$-th episode',zorder=3)
		# ~ panel.bar(rs,sucB_ep1000000/totB_ep1000000, color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B, $5 \cdot 10^5$-th episode',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, color=color2, edgecolor='black', width=bin_width, alpha=0.5, label = r'type C, $5 \cdot 10^5$-th episode',zorder=2)
		
		panel.hlines(y=1.0, xmin=0.25, xmax=10.25, linestyle='--', linewidth=0.5, color='black')
		
		# ~ panel.legend([h1, h2, h3, h4], [r'initial policy ($\times 4$)', r'type A', r'type B', r'type C'],loc='upper right', bbox_to_anchor=(1.3, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (b)}',fontsize=legendfontsize,transform=panel.transAxes)




		######################## panel D ########################################
		####### Type A
		target_times,initial_radii,initial_directions = read_TargetTimes_given_policy(foldername,'LearnedPolicy')
		target_times_ini,initial_radii_ini,initial_directions_ini = read_TargetTimes_given_policy(foldername,'InitialPolicy')
	
		####### Type C
		N2 = N_bunches2*N_runs_bunch2 
		Nep_arrays2 = ep_index(N_episodes2)
		# read average target times and number of targets
		episodes2,avg_time2,n_targets2 = read_AvgTargetTimes_bunches(foldername2,N_bunches2,Nep_arrays2)
		# ~ # read target times and number of targets vs r_ini
		target_times2,initial_radii2,initial_directions2 = read_TargetTimes_given_policy(foldername2,'LearnedPolicy')
		target_times2_ini,initial_radii2_ini,initial_directions2_ini = read_TargetTimes_given_policy(foldername2,'InitialPolicy')
	
		####### Type B
		N3 = N_bunches3*N_runs_bunch3 
		Nep_arrays3 = ep_index(N_episodes3)
		# read average target times and number of targets
		episodes3,avg_time3,n_targets3 = read_AvgTargetTimes_bunches(foldername3,N_bunches3,Nep_arrays3)
		# ~ # read target times and number of targets vs r_ini
		target_times3,initial_radii3,initial_directions3 = read_TargetTimes_given_policy(foldername3,'LearnedPolicy')     ######
		target_times3_ini,initial_radii3_ini,initial_directions3_ini = read_TargetTimes_given_policy(foldername3,'InitialPolicy')  #####
		# ~ target_times3,initial_radii3,initial_directions3 = read_TargetTimes_given_policy('../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/','LearnedPolicy')     ######
		# ~ target_times3_ini,initial_radii3_ini,initial_directions3_ini = read_TargetTimes_given_policy('../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/','InitialPolicy')  #####
		
		
		panel = fig.add_axes([x4, y4, dx4, dy4])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r_{\rm ini}/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(9.25,15.5)
		# ~ panel.set_ylim(0,0.0065)
		panel.set_ylim(0,1.43)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		# ~ panel.yaxis.set_major_locator(MultipleLocator(0.01))
		# ~ panel.yaxis.set_minor_locator(MultipleLocator(0.005))
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		panel.set_yticklabels([])
		
		# join data in larger bins
		bin_width = 0.5
		rs = np.arange(0.5 + bin_width/2, 15.01, bin_width)
		tot_ep1 = np.zeros(len(rs))
		suc_ep1 = np.zeros(len(rs))
		totA_ep1000000 = np.zeros(len(rs))
		sucA_ep1000000 = np.zeros(len(rs))
		totB_ep1000000 = np.zeros(len(rs))
		sucB_ep1000000 = np.zeros(len(rs))
		totC_ep1000000 = np.zeros(len(rs))
		sucC_ep1000000 = np.zeros(len(rs))
		
		# type A
		for n in range(len(target_times_ini)):
			r = initial_radii_ini[n]
			scalar = np.cos(initial_directions_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times_ini[n]>0.0):
				suc_ep1[k] +=1
					
		for n in range(len(target_times)):
			r = initial_radii[n]
			scalar = np.cos(initial_directions[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totA_ep1000000[k] +=1
			if (target_times[n]>0.0):
				sucA_ep1000000[k] +=1
		
		# type C
		for n in range(len(target_times2_ini)):
			r = initial_radii2_ini[n]
			scalar = np.cos(initial_directions2_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times2_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(len(target_times3)):
			r = initial_radii2[n]
			scalar = np.cos(initial_directions2[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totC_ep1000000[k] +=1
			if (target_times2[n]>0.0):
				sucC_ep1000000[k] +=1
				
		# type B
		for n in range(len(target_times3_ini)):
			r = initial_radii3_ini[n]
			scalar = np.cos(initial_directions3_ini[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			tot_ep1[k] +=1
			if (target_times3_ini[n]>0.0):
				suc_ep1[k] +=1		
				
		for n in range(len(target_times3)):
			r = initial_radii3[n]
			scalar = np.cos(initial_directions3[n])
			k=-1
			for j in range(len(rs)):
				if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
					k=j
			totB_ep1000000[k] +=1
			if (target_times3[n]>0.0):
				sucB_ep1000000[k] +=1	
		
		
		barsC = panel.bar(rs[-10:],sucC_ep1000000[-10:] / totC_ep1000000[-10:],facecolor='none',edgecolor='black',width=bin_width,linewidth=1.5,zorder=1)


		h1= panel.bar(rs[-10:],4*suc_ep1[-10:]/tot_ep1[-10:], color='black', edgecolor='black', width=bin_width, alpha=1.0, label = r'initial policy ($\times 4$)',zorder=4)
		h2 = panel.bar(rs[-10:],sucA_ep1000000[-10:]/totA_ep1000000[-10:], color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A',zorder=3)
		h3 = panel.bar(rs[-10:],sucB_ep1000000[-10:]/totB_ep1000000[-10:], color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, facecolor='none', edgecolor=color2, width=bin_width, alpha=0.5, label = r'type C',zorder=2)
		
		
		# Keep only the top edge
		for i, bar in enumerate(barsC):
			bar.set_edgecolor('none')  # remove all edges
			bar.set_facecolor('none')  # remove fill
			# add top edge manually
			h4 = panel.hlines(y=bar.get_height(),xmin=bar.get_x(),xmax=bar.get_x() + bar.get_width(),colors=color2,linewidth=2,zorder=5, label=r'type C' if i == 0 else None)
		
		
		# ~ panel.bar(rs,sucA_ep1000000/totA_ep1000000, color=color1, edgecolor='black', width=bin_width, alpha=0.5, label = r'type A, $10^6$-th episode',zorder=3)
		# ~ panel.bar(rs,sucB_ep1000000/totB_ep1000000, color=color3, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B, $5 \cdot 10^5$-th episode',zorder=1)
		# ~ panel.bar(rs,sucC_ep1000000/totC_ep1000000, color=color2, edgecolor='black', width=bin_width, alpha=0.5, label = r'type C, $5 \cdot 10^5$-th episode',zorder=2)
		
		panel.hlines(y=1.0, xmin=9.5, xmax=15.25, linestyle='--', linewidth=0.5, color='black')
		
		panel.legend([h1, h2, h3, h4], [r'initial policy ($\times 4$)', r'type A', r'type B', r'type C'],loc='upper right', bbox_to_anchor=(0.7, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.71,0.9,r'{\bf (c)}',fontsize=legendfontsize,transform=panel.transAxes)



		





		
		pdf.savefig(fig)
	return

def make_figure2old (M,rinis, N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3):
	rinis[0]=0.2
	rinis[-1]=10.3
	
	rinis3 = np.zeros((3))
	rinis3[0]=-2
	rinis3[2]=12.5
	rinis3[1]=5.25
	
	rinis4 = np.arange(-10.0,20.0,0.02)
	
	####### Type A
	N = N_bunches*N_runs_bunch 
	Nep_arrays = ep_index(N_episodes)
	Ns = M*2
	Nomegas = 1
	# read switching probabilities
	dataTypeA_ep10000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,10000,M,Nomegas)
	dataTypeA_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,100000,M,Nomegas)
	dataTypeA_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,1000000,M,Nomegas)
	# ~ dataTypeA_ep10000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,10000,M,Nomegas)
	# ~ dataTypeA_ep100000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,100000,M,Nomegas)
	# ~ dataTypeA_ep1000000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,1000000,M,Nomegas)
	
	distriTypeA = read_Radial_Distributions (foldername,'typeA')
	
	####### Type C
	N2 = N_bunches2*N_runs_bunch2
	Nep_arrays2 = ep_index(N_episodes2)
	Ns2 = M*4
	Nomegas2 = 2
	dataTypeC_ep10000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	dataTypeC_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,100000,M,Nomegas2)
	dataTypeC_ep500000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,500000,M,Nomegas2)
	dataTypeC_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,1000000,M,Nomegas2)
	# ~ dataTypeC_ep10000 = read_AvgPvalues_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	distriTypeC = read_Radial_Distributions (foldername2,'typeC')
	
	
	####### Type B
	N3 = N_bunches3*N_runs_bunch3
	Nep_arrays3 = ep_index(N_episodes3)
	Ns3 = 3*4
	Nomegas3 = 2
	dataTypeB_ep500000 = compute_AvgPvalues_from_AvgH_bunches(foldername3,Ns3,N_bunches3,500000,3,Nomegas3)
	dataTypeB_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername3,Ns3,N_bunches3,1000000,3,Nomegas3)
	# ~ dataTypeB_ep10000 = read_AvgPvalues_bunches(foldername3,Ns3,N_bunches3,10000,3,Nomegas3)
	distriTypeB = read_Radial_Distributions (foldername3,'typeB')
	
	
	
	
	
	####################################################################
	####################################################################
	####################################################################
	
	####### initial policy
	pBP = np.asarray([0.01 for i in rinis4])
	pABP = np.asarray([0.001 for i in rinis4])
	
	#######
	ylow,yup = 0.00003,1.0
	# ~ ylow,yup = 0.000001,1.0
	
	xfig,yfig=7.0,3.4
	factor = xfig/yfig
	
	x1,y1 = 0.071,0.12
	dx1,dy1=0.27,0.78
	
	x2,y2 = x1+dx1,y1
	dx2,dy2 = 0.08,dy1
	
	x3,y3 = x2+dx2,y1
	dx3,dy3 = dx1,dy1
	
	x4,y4 = x3+dx1+0.06,y1
	dx4,dy4 = 0.24,dy1
	

	with PdfPages('fig3.pdf') as pdf:
		fig = plt.figure(figsize=(xfig,yfig))
		plt.rc('text', usetex=True)
		plt.rc('text.latex', preamble = ','.join('''\usepackage{txfonts} \usepackage{lmodern}'''.split()))
		
		######################## panel A ########################################
		panel = fig.add_axes([x1, y1, dx1, dy1])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switching probability',fontsize=axislabelfontsize)
		panel.set_xlim(-0.3,10.8)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		
		# plot avg line
		panel.plot(rinis[1:M-1],dataTypeA_ep1000000[0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep1000000[0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi=0$')
		panel.plot(rinis[M-1],dataTypeA_ep1000000[0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep1000000[1][1:M-1],'s',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep1000000[1][0],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi=1$')
		panel.plot(rinis[M-1],dataTypeA_ep1000000[1][M-1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.90, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.90, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=1,fontsize=legendfontsize-1,handlelength=0.5,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (a) type A}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (a)} type A',fontsize=legendfontsize)
			
		
		######################## panel B ########################################
		panel = fig.add_axes([x2, y2, dx2, dy2])
		panel.set_facecolor('lightyellow')
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-6.5,17)
		panel.set_xticks([0.5, 10])
		panel.set_xticklabels(['0.5', '10'])
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		panel.set_yticklabels([])

		
		# plot avg line
		panel.plot(rinis3,dataTypeB_ep1000000[0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 0$')
		panel.plot(rinis3,dataTypeB_ep1000000[1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 0$')
		
		print(dataTypeB_ep1000000[2])
		dataTypeB_ep1000000[2][2] = 0.01451687 ################################################
		panel.plot(rinis3,dataTypeB_ep1000000[2],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 1$')
		
		print(dataTypeB_ep1000000[3])
		dataTypeB_ep1000000[3][1] = 0.000042 ################################################
		panel.plot(rinis3,dataTypeB_ep1000000[3],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 1$')
		
		



		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.1,0.77,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.56,0.77,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		# ~ panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=0.2,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (b) type B}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (b)} type B',fontsize=legendfontsize)
		
		
		
		
		
		######################## panel C ########################################
		panel = fig.add_axes([x3, y3, dx3, dy3])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.3,10.8)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		panel.set_yticklabels([])

		
		# plot avg line
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[1][1:M-1],'s',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[1][0],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[1][M-1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[2][1:M-1],'v',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[2][0],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 1$')
		dataTypeC_ep1000000[2][M-1] = 0.012314 ################################################
		panel.plot(rinis[M-1],dataTypeC_ep1000000[2][M-1],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[3][1:M-1],'D',color='black',markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[3][0],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 1$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[3][M-1],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3)

		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.78, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.76,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.9, color='gray', linestyle='-', linewidth=1)
		panel.text(0.86,0.84,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.25, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=0.2,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (b) type B}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (c)} type C',fontsize=legendfontsize)
		
		
		
		
		######################## panel D ########################################
		panel = fig.add_axes([x4, y4, dx4, dy4])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.5,13.5)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		# ~ panel.set_ylim(0.0002,20.0)
		# ~ panel.set_yscale('log')
		# ~ panel.set_title(r'{\bf (c)} $P(r|\phi)P(\phi)/r $',fontsize=legendfontsize)
		
		#~ panel.set_ylim(0,1.5)
		#~ panel.yaxis.set_major_locator(MultipleLocator(0.2))
		#~ panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		#~ panel.set_title(r'{\bf (c)} $P(\phi|r)$',fontsize=legendfontsize)
		
		#~ panel.set_ylim(0.0002,20.0)
		#~ panel.set_yscale('log')
		#~ panel.set_title(r'{\bf (c)} $P(\phi|r)P(r) $',fontsize=legendfontsize)
		
		panel.set_ylim(0.0004,8.0)
		panel.set_yscale('log')
		panel.set_title(r'{\bf (d)} $P(r)$',fontsize=legendfontsize)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.69, color='gray', linestyle='-', linewidth=1)
		panel.text(0.09,0.68,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.69, color='gray', linestyle='-', linewidth=1)
		panel.text(0.67,0.68,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		# ~ panel.plot(distriTypeA[0][50:],distriTypeA[1][50:]/distriTypeA[0][50:],'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		# ~ panel.plot(distriTypeA[0],distriTypeA[2]/distriTypeA[0],'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		# ~ panel.plot(distriTypeA[0][50:],distriTypeA[3][50:]/distriTypeA[0][50:],'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		# ~ panel.plot(distriTypeA[0],distriTypeA[4]/distriTypeA[0],'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		# ~ panel.plot(distriTypeC[0][50:],distriTypeC[3][50:]/distriTypeC[0][50:],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		# ~ panel.plot(distriTypeC[0],distriTypeC[4]/distriTypeC[0],'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		#~ panel.plot(distriTypeA[0],distriTypeA[1]/(distriTypeA[1]+distriTypeA[2]),'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[2]/(distriTypeA[1]+distriTypeA[2]),'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		#~ panel.plot(distriTypeA[0],distriTypeA[3]/(distriTypeA[3]+distriTypeA[4]),'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[4]/(distriTypeA[3]+distriTypeA[4]),'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		#~ panel.plot(distriTypeC[0],distriTypeC[3]/(distriTypeC[3]+distriTypeC[4]),'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeC[0],distriTypeC[4]/(distriTypeC[3]+distriTypeC[4]),'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		#~ panel.plot(distriTypeA[0],distriTypeA[1],'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[2],'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		#~ panel.plot(distriTypeA[0],distriTypeA[3],'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[4],'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		#~ panel.plot(distriTypeC[0],distriTypeC[3],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeC[0],distriTypeC[4],'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		
		panel.plot(distriTypeA[0],distriTypeA[1]+distriTypeA[2],'k--',linewidth=linewidth,label=r'init. policy')
		panel.plot(distriTypeA[0],distriTypeA[3]+distriTypeA[4],'-',color=color1,linewidth=linewidth,label=r'type A')
		panel.plot(distriTypeB[0],distriTypeB[3]+distriTypeB[4],'-',color=color3,linewidth=linewidth,label=r'type B')
		panel.plot(distriTypeC[0],distriTypeC[3]+distriTypeC[4],'-',color=color2,linewidth=linewidth,label=r'type C')
		#~ panel.plot(distriTypeA[0],2*distriTypeA[0]/(13.5*13.5),'m-.',linewidth=linewidth,label=r'init. policy')
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=1,fontsize=legendfontsize-1.5,handlelength=2.0,labelspacing=0.2,framealpha=1.0)
		
		pdf.savefig(fig)
	return

def make_figure2 (M,rinis, N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3):
	rinis[0]=0.2
	rinis[-1]=10.3
	
	rinis3 = np.zeros((1))
	rinis3[0]=5.25
	
	rinis4 = np.arange(-10.0,20.0,0.02)
	
	####### Type A
	N = N_bunches*N_runs_bunch 
	Nep_arrays = ep_index(N_episodes)
	Ns = M*2
	Nomegas = 1
	# read switching probabilities
	dataTypeA_ep10000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,10000,M,Nomegas)
	dataTypeA_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,100000,M,Nomegas)
	dataTypeA_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername,Ns,N_bunches,1000000,M,Nomegas)
	# ~ dataTypeA_ep10000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,10000,M,Nomegas)
	# ~ dataTypeA_ep100000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,100000,M,Nomegas)
	# ~ dataTypeA_ep1000000 = read_AvgPvalues_bunches(foldername,Ns,N_bunches,1000000,M,Nomegas)
	
	distriTypeA = read_Radial_Distributions (foldername,'typeA')
	
	####### Type C
	N2 = N_bunches2*N_runs_bunch2
	Nep_arrays2 = ep_index(N_episodes2)
	Ns2 = M*4
	Nomegas2 = 2
	dataTypeC_ep10000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	dataTypeC_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,100000,M,Nomegas2)
	dataTypeC_ep500000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,500000,M,Nomegas2)
	dataTypeC_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,1000000,M,Nomegas2)
	# ~ dataTypeC_ep10000 = read_AvgPvalues_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	distriTypeC = read_Radial_Distributions (foldername2,'typeC')
	
	
	####### Type B
	N3 = N_bunches3*N_runs_bunch3
	M3 = 1
	Nep_arrays3 = ep_index(N_episodes3)
	Ns3 = M3*4
	Nomegas3 = 2
	dataTypeB_ep500000 = compute_AvgPvalues_from_AvgH_bunches(foldername3,Ns3,N_bunches3,100000,M3,Nomegas3)
	dataTypeB_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername3,Ns3,N_bunches3,100000,M3,Nomegas3)   ###############################
	# ~ dataTypeB_ep10000 = read_AvgPvalues_bunches(foldername3,Ns3,N_bunches3,10000,3,Nomegas3)
	distriTypeB = read_Radial_Distributions (foldername3,'typeD')
	
	
	
	
	
	####################################################################
	####################################################################
	####################################################################
	
	####### initial policy
	pBP = np.asarray([0.01 for i in rinis4])
	pABP = np.asarray([0.001 for i in rinis4])
	
	#######
	ylow,yup = 0.00003,1.0
	# ~ ylow,yup = 0.000001,1.0
	
	xfig,yfig=7.0,3.4
	factor = xfig/yfig
	
	x1,y1 = 0.071,0.12
	dx1,dy1=0.28,0.78
	
	x2,y2 = x1+dx1,y1
	dx2,dy2 = 0.06,dy1
	
	x3,y3 = x2+dx2,y1
	dx3,dy3 = dx1,dy1
	
	x4,y4 = x3+dx1+0.06,y1
	dx4,dy4 = 0.24,dy1
	

	with PdfPages('fig3.pdf') as pdf:
		fig = plt.figure(figsize=(xfig,yfig))
		plt.rc('text', usetex=True)
		plt.rc('text.latex', preamble = ','.join('''\usepackage{txfonts} \usepackage{lmodern}'''.split()))
		
		######################## panel A ########################################
		panel = fig.add_axes([x1, y1, dx1, dy1])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switching probability',fontsize=axislabelfontsize)
		panel.set_xlim(-0.3,10.8)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		
		# plot avg line
		panel.plot(rinis[1:M-1],dataTypeA_ep1000000[0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep1000000[0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi=0$')
		panel.plot(rinis[M-1],dataTypeA_ep1000000[0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep1000000[1][1:M-1],'s',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep1000000[1][0],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi=1$')
		panel.plot(rinis[M-1],dataTypeA_ep1000000[1][M-1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.90, color='gray', linestyle='-', linewidth=1)
		panel.text(0.09,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.90, color='gray', linestyle='-', linewidth=1)
		panel.text(0.86,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=1,fontsize=legendfontsize-1,handlelength=0.5,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (a) type A}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (a)} type A',fontsize=legendfontsize)
			
		
		######################## panel B ########################################
		panel = fig.add_axes([x2, y2, dx2, dy2])
		panel.set_facecolor('lightyellow')
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		# ~ panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-6.5,17)
		panel.set_xticks([])
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		panel.set_yticklabels([])
		panel.set_xticklabels([])

		
		# plot avg line
		panel.plot(rinis3,dataTypeB_ep1000000[0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 0$')
		panel.plot(rinis3,dataTypeB_ep1000000[1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 0$')
		
		print(dataTypeB_ep1000000[2])
		panel.plot(rinis3,dataTypeB_ep1000000[2],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 1$')
		
		print(dataTypeB_ep1000000[3])
		panel.plot(rinis3,dataTypeB_ep1000000[3],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 1$')

		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		# ~ panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		# ~ panel.text(0.1,0.77,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		# ~ panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		# ~ panel.text(0.56,0.77,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		# ~ panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=0.2,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (b) type B}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (b)} type B',fontsize=legendfontsize)
		
		
		
		
		
		######################## panel C ########################################
		panel = fig.add_axes([x3, y3, dx3, dy3])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.3,10.8)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(ylow,yup)
		panel.set_yscale('log')
		panel.set_yticklabels([])

		
		# plot avg line
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[1][1:M-1],'s',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[1][0],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[1][M-1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[2][1:M-1],'v',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[2][0],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 1$')
		dataTypeC_ep1000000[2][M-1] = 0.012314 ################################################
		panel.plot(rinis[M-1],dataTypeC_ep1000000[2][M-1],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep1000000[3][1:M-1],'D',color='black',markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep1000000[3][0],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 1$')
		panel.plot(rinis[M-1],dataTypeC_ep1000000[3][M-1],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3)

		panel.plot(rinis4,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis4,pABP,'b-.',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.78, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.76,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.9, color='gray', linestyle='-', linewidth=1)
		panel.text(0.86,0.84,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.3, 0.99),ncol=2,fontsize=legendfontsize-1,handlelength=0.2,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.03,0.9,r'{\bf (b) type B}',fontsize=legendfontsize,transform=panel.transAxes)
		panel.set_title(r'{\bf (c)} type C',fontsize=legendfontsize)
		
		
		
		
		######################## panel D ########################################
		panel = fig.add_axes([x4, y4, dx4, dy4])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.5,13.5)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		# ~ panel.set_ylim(0.0002,20.0)
		# ~ panel.set_yscale('log')
		# ~ panel.set_title(r'{\bf (c)} $P(r|\phi)P(\phi)/r $',fontsize=legendfontsize)
		
		#~ panel.set_ylim(0,1.5)
		#~ panel.yaxis.set_major_locator(MultipleLocator(0.2))
		#~ panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		#~ panel.set_title(r'{\bf (c)} $P(\phi|r)$',fontsize=legendfontsize)
		
		#~ panel.set_ylim(0.0002,20.0)
		#~ panel.set_yscale('log')
		#~ panel.set_title(r'{\bf (c)} $P(\phi|r)P(r) $',fontsize=legendfontsize)
		
		panel.set_ylim(0.0004,8.0)
		panel.set_yscale('log')
		panel.set_title(r'{\bf (d)} $P(r)$',fontsize=legendfontsize)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.69, color='gray', linestyle='-', linewidth=1)
		panel.text(0.09,0.68,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.69, color='gray', linestyle='-', linewidth=1)
		panel.text(0.67,0.68,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		# ~ panel.plot(distriTypeA[0][50:],distriTypeA[1][50:]/distriTypeA[0][50:],'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		# ~ panel.plot(distriTypeA[0],distriTypeA[2]/distriTypeA[0],'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		# ~ panel.plot(distriTypeA[0][50:],distriTypeA[3][50:]/distriTypeA[0][50:],'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		# ~ panel.plot(distriTypeA[0],distriTypeA[4]/distriTypeA[0],'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		# ~ panel.plot(distriTypeC[0][50:],distriTypeC[3][50:]/distriTypeC[0][50:],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		# ~ panel.plot(distriTypeC[0],distriTypeC[4]/distriTypeC[0],'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		#~ panel.plot(distriTypeA[0],distriTypeA[1]/(distriTypeA[1]+distriTypeA[2]),'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[2]/(distriTypeA[1]+distriTypeA[2]),'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		#~ panel.plot(distriTypeA[0],distriTypeA[3]/(distriTypeA[3]+distriTypeA[4]),'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[4]/(distriTypeA[3]+distriTypeA[4]),'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		#~ panel.plot(distriTypeC[0],distriTypeC[3]/(distriTypeC[3]+distriTypeC[4]),'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeC[0],distriTypeC[4]/(distriTypeC[3]+distriTypeC[4]),'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		#~ panel.plot(distriTypeA[0],distriTypeA[1],'r--',linewidth=linewidth-1,label=r'init. policy, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[2],'b-.',linewidth=linewidth-1,label=r'init. policy, $\phi=1$')
		#~ panel.plot(distriTypeA[0],distriTypeA[3],'-',color=color1,linewidth=linewidth,label=r'type A, $\phi=0$')
		#~ panel.plot(distriTypeA[0],distriTypeA[4],'-',color=color3,linewidth=linewidth,label=r'type A, $\phi=1$')
		#~ panel.plot(distriTypeC[0],distriTypeC[3],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeC[0],distriTypeC[4],'-',color='black',linewidth=linewidth,label=r'type B, $\phi=1$')
		
		
		panel.plot(distriTypeA[0],distriTypeA[1]+distriTypeA[2],'k--',linewidth=linewidth,label=r'init. policy')
		panel.plot(distriTypeA[0],distriTypeA[3]+distriTypeA[4],'-',color=color1,linewidth=linewidth,label=r'type A')
		panel.plot(distriTypeB[0],distriTypeB[3]+distriTypeB[4],'-',color=color3,linewidth=linewidth,label=r'type B')
		panel.plot(distriTypeC[0],distriTypeC[3]+distriTypeC[4],'-',color=color2,linewidth=linewidth,label=r'type C')
		#~ panel.plot(distriTypeA[0],2*distriTypeA[0]/(13.5*13.5),'m-.',linewidth=linewidth,label=r'init. policy')
		
		panel.legend(loc='upper center', bbox_to_anchor=(0.5, 0.99),ncol=1,fontsize=legendfontsize-1.5,handlelength=2.0,labelspacing=0.2,framealpha=1.0)
		
		pdf.savefig(fig)
	return

def make_figure3 (M,rinis,N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2):
	rinis_fixed = np.asarray([1,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5])
	str_rinis = [str(r).rstrip('0').rstrip('.') if '.' in str(r) else str(r) for r in rinis_fixed]
	index2 = 2
	index5 = 8
	index8 = 14
	rinis[0]=0.2
	rinis[-1]=10.3
	####### initial policy
	pBP = np.asarray([0.01 for i in range(M)])
	pABP = np.asarray([0.001 for i in range(M)])
	
	####### Type A
	N = N_bunches*N_runs_bunch 
	Nep_arrays = ep_index(N_episodes)
	# read average target times and number of targets
	episodes,avg_time,n_targets = read_AvgTargetTimes_bunches(foldername+'TypeA_plain_Pe100/',N_bunches,Nep_arrays)
	target_times,initial_radii,initial_directions = read_TargetTimes_bunches(foldername+'TypeA_plain_Pe100/',N_bunches,N,Nep_arrays)
	episodes_rini=[]
	avg_time_rini=[]
	n_targets_rini=[]
	final_n_targets_rini=[]
	for str_rini in str_rinis:
		print (str_rini)
		episodes_temp,avg_time_temp,n_targets_temp = read_AvgTargetTimes_bunches(foldername+'TypeA_plain_Pe100_rini'+str_rini+'sigma/',N_bunches,Nep_arrays)
		episodes_rini.append(episodes_temp)
		avg_time_rini.append(avg_time_temp)
		n_targets_rini.append(n_targets_temp)
		final_n_targets_rini.append(n_targets_temp[-1])
	final_n_targets_rini=np.asarray(final_n_targets_rini)
	n_targets_weightavg=np.zeros((len(n_targets)))
	factor = 0.0
	for index in range(len(rinis_fixed)):
		n_targets_weightavg += n_targets_rini[index] * np.pi * ((rinis_fixed[index]+0.25)**2 - (rinis_fixed[index]-0.25)**2)
		factor += np.pi * ((rinis_fixed[index]+0.25)**2 - (rinis_fixed[index]-0.25)**2)
	n_targets_weightavg /= factor
	# read switching probabilities
	Ns = M*2
	Nomegas = 1
	dataTypeA_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeA_plain_Pe100/',Ns,N_bunches,100000,M,Nomegas)
	dataTypeA_ep100000_rini = []
	for str_rini in str_rinis:
		dataTypeA_ep100000_temp = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeA_plain_Pe100_rini'+str_rini+'sigma/',Ns,N_bunches,100000,M,Nomegas)
		dataTypeA_ep100000_rini.append(dataTypeA_ep100000_temp)
	
	
	####### Type B
	N2 = N_bunches2*N_runs_bunch2 
	Nep_arrays2 = ep_index(N_episodes2)
	# read average target times and number of targets
	episodes2,avg_time2,n_targets2 = read_AvgTargetTimes_bunches(foldername+'TypeC_plain_Pe100/',N_bunches2,Nep_arrays2)
	target_times2,initial_radii2,initial_directions2 = read_TargetTimes_bunches(foldername+'TypeC_plain_Pe100/',N_bunches2,N,Nep_arrays2)
	episodes2_rini=[]
	avg_time2_rini=[]
	n_targets2_rini=[]
	final_n_targets2_rini=[]
	for str_rini in str_rinis:
		print (str_rini)
		episodes_temp,avg_time_temp,n_targets_temp = read_AvgTargetTimes_bunches(foldername+'TypeC_plain_Pe100_rini'+str_rini+'sigma/',N_bunches2,Nep_arrays2)
		episodes2_rini.append(episodes_temp)
		avg_time2_rini.append(avg_time_temp)
		n_targets2_rini.append(n_targets_temp)
		final_n_targets2_rini.append(n_targets_temp[-1])
	final_n_targets2_rini=np.asarray(final_n_targets2_rini)
	
	n_targets_weightavg2=np.zeros((len(n_targets)))
	factor = 0.0
	for index in range(len(rinis_fixed)):
		n_targets_weightavg2 += n_targets2_rini[index] * np.pi * ((rinis_fixed[index]+0.25)**2 - (rinis_fixed[index]-0.25)**2)
		factor += np.pi * ((rinis_fixed[index]+0.25)**2 - (rinis_fixed[index]-0.25)**2)
	n_targets_weightavg2 /= factor
	# read switching probabilities
	Ns2 = M*4
	Nomegas2 = 2
	dataTypeC_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeC_plain_Pe100/',Ns2,N_bunches2,100000,M,Nomegas2)
	dataTypeC_ep100000_rini = []
	for str_rini in str_rinis:
		dataTypeC_ep100000_temp = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeC_plain_Pe100_rini'+str_rini+'sigma/',Ns2,N_bunches2,100000,M,Nomegas2)
		dataTypeC_ep100000_rini.append(dataTypeC_ep100000_temp)
		
		
	# join data in larger bins
	bin_width = 0.5
	rs = np.arange(0.5 + bin_width/2, 10.01, bin_width)
	totA_ep100000 = np.zeros(len(rs))
	sucA_ep100000 = np.zeros(len(rs))
	totB_ep100000 = np.zeros(len(rs))
	sucB_ep100000 = np.zeros(len(rs))
					
	for n in range(N):
		index = 45					#### episode 100000
		r = initial_radii[index][n]
		scalar = np.cos(initial_directions[index][n])
		k=-1
		for j in range(len(rs)):
			if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
				k=j
		totA_ep100000[k] +=1
		if (target_times[index][n]>0.0):
			sucA_ep100000[k] +=1
				
	for n in range(N2):
		index = 45					#### episode 500000
		r = initial_radii2[index][n]
		scalar = np.cos(initial_directions2[index][n])
		k=-1
		for j in range(len(rs)):
			if (r>= rs[j]-bin_width/2 and r< rs[j]+bin_width/2):
				k=j
		totB_ep100000[k] +=1
		if (target_times2[index][n]>0.0):
			sucB_ep100000[k] +=1
	
	####################################################################
	####################################################################
	####################################################################
	
	xfig,yfig=7.0,8.5
	factor = xfig/yfig
	
	ygap = 0.05
	dy = 0.18
	
	x1,y1 = 0.08,4*ygap + 3*dy
	dx1,dy1=0.4,dy
	
	x2,y2 = 0.58,y1
	dx2,dy2=dx1,dy1
	
	x3,y3 =x1, 3*ygap + 2*dy
	dx3,dy3=dx1,dy1
	
	x4,y4 =x2, y3
	dx4,dy4=dx1,dy1
	
	x5,y5 =x1, 2*ygap + dy
	dx5,dy5=dx1,dy1
	
	x6,y6 =x2, y5
	dx6,dy6=dx1,dy1
	
	x7,y7 =x1, ygap
	dx7,dy7=dx1,dy1
	
	x8,y8 =x2, y7
	dx8,dy8=dx1,dy1
	
	x9,y9 = x1 + dx1/8, y1 + dy1/3.5
	dx9,dy9 = dx1/3,dy1/2
	
	x10,y10 = x2 + dx1/8, y9
	dx10,dy10 = dx9,dy9
	
	

	with PdfPages('fig4.pdf') as pdf:
		fig = plt.figure(figsize=(xfig,yfig))
		plt.rc('text', usetex=True)
		plt.rc('text.latex', preamble = ','.join('''\usepackage{txfonts} \usepackage{lmodern}'''.split()))
		
		######################## panel A ########################################
		panel = fig.add_axes([x1, y1, dx1, dy1])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,140000)
		panel.set_ylim(0,1.0)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		panel.xaxis.set_major_locator(LogLocator(base=10.0, subs=[1.0], numticks=10))  # Major ticks at 10^x
		panel.xaxis.set_minor_locator(LogLocator(base=10.0, subs=np.arange(1, 10) * 0.1, numticks=100))  # Minor ticks at 1-9
		panel.xaxis.set_major_formatter(LogFormatterMathtext())  # Forces 10^x notation
		panel.xaxis.set_minor_formatter(NullFormatter())
		
		# plot avg line
		dummyX = [1,10]
		dummyY = [2,3]
		panel.plot(dummyX,dummyY,'o-',color=color3,markersize=markersize+3,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=2\sigma$')
		panel.plot(dummyX,dummyY,'o-',color=color2,markersize=markersize+3,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=5\sigma$')
		panel.plot(dummyX,dummyY,'o-',color=color1,markersize=markersize+3,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=8\sigma$')
		# ~ panel.plot(dummyX,dummyY,'-.',color='m',markersize=2,linewidth=linewidth3,zorder=5,label=r'weight avg.')
		panel.plot(dummyX,dummyY,'s--',color='darkgray',markersize=markersize+4,linewidth=linewidth,zorder=4,label=r'$\sigma/2 < r_{\rm ini} \leq \tilde{R}$')
		panel.plot(dummyX,dummyY,'--',color='k',markersize=2,linewidth=linewidth,zorder=5,label=r'init. policy')
		
		
		panel.plot(episodes_rini[index2],n_targets_rini[index2]*1.0/N,'-',color=color3,markersize=2,linewidth=linewidth2,zorder=3)
		panel.plot(episodes_rini[index5],n_targets_rini[index5]*1.0/N,'-',color=color2,markersize=2,linewidth=linewidth2,zorder=3)
		panel.plot(episodes_rini[index8],n_targets_rini[index8]*1.0/N,'-',color=color1,markersize=2,linewidth=linewidth2,zorder=3)
		# ~ panel.plot(episodes,n_targets_weightavg*1.0/N,'-.',color='m',markersize=2,linewidth=linewidth3,zorder=5)
		panel.plot(episodes,n_targets*1.0/N,'--',color='darkgray',markersize=2,linewidth=linewidth,zorder=4)
		
		panel.legend(loc='upper left', bbox_to_anchor=(0.6, 1.46),ncol=2,fontsize=legendfontsize-1,handlelength=3.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (a) Type A}',fontsize=legendfontsize,transform=panel.transAxes)
		
		##########
		panel = fig.add_axes([x9, y9, dx9, dy9])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		panel.set_xlabel(r'$r_{\rm ini}/\sigma$',fontsize=axislabelfontsizeinset,labelpad=-0.6)
		panel.set_xlim(0,10.5)
		panel.set_ylim(0,1.0)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.yaxis.set_major_locator(MultipleLocator(0.2))
		panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		
		# plot avg line
		panel.plot(rinis_fixed,final_n_targets_rini*1.0/N,'r-',markersize=2,linewidth=linewidth,zorder=3)
		panel.plot(rs,sucA_ep100000/totA_ep100000,'--', color='darkgray')
		panel.text(0.1,0.8,r'$10^5$-th episode',fontsize=legendfontsize-1,transform=panel.transAxes)
		
		
		######################## panel B ########################################
		panel = fig.add_axes([x2, y2, dx2, dy2])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'episodes',fontsize=axislabelfontsize)
		panel.set_ylabel(r'fraction of successful agents',fontsize=axislabelfontsize)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,140000)
		panel.set_ylim(0.0,1.0)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		panel.xaxis.set_major_locator(LogLocator(base=10.0, subs=[1.0], numticks=10))  # Major ticks at 10^x
		panel.xaxis.set_minor_locator(LogLocator(base=10.0, subs=np.arange(1, 10) * 0.1, numticks=100))  # Minor ticks at 1-9
		panel.xaxis.set_major_formatter(LogFormatterMathtext())  # Forces 10^x notation
		panel.xaxis.set_minor_formatter(NullFormatter())
		
		# plot avg line
		panel.plot(episodes2_rini[index2],n_targets2_rini[index2]*1.0/N2,'-',color=color3,markersize=2,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=2\sigma$')
		panel.plot(episodes2_rini[index5],n_targets2_rini[index5]*1.0/N2,'-',color=color2,markersize=2,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=5\sigma$')
		panel.plot(episodes2_rini[index8],n_targets2_rini[index8]*1.0/N2,'-',color=color1,markersize=2,linewidth=linewidth2,zorder=3,label=r'$r_{\rm ini}=8\sigma$')
		# ~ panel.plot(episodes2,n_targets_weightavg2*1.0/N,'-.',color='m',markersize=2,linewidth=linewidth3,zorder=5,label=r'weight avg.')
		panel.plot(episodes2,n_targets2*1.0/N2,'--',color='darkgray',markersize=2,linewidth=linewidth,zorder=4,label=r'$\sigma/2 < r_{\rm ini} \leq \tilde{R}$')
		
		#~ panel.legend(loc='upper left', bbox_to_anchor=(0.01, 0.87),ncol=1,fontsize=legendfontsize-1,handlelength=2.5,labelspacing=0.2,framealpha=1.0)
		panel.text(0.03,0.9,r'{\bf (b) Type C}',fontsize=legendfontsize,transform=panel.transAxes)
		
		##########
		panel = fig.add_axes([x10, y10, dx10, dy10])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsizeinset)
		panel.set_xlabel(r'$r_{\rm ini}/\sigma$',fontsize=axislabelfontsizeinset,labelpad=-0.6)
		panel.set_xlim(0,10.5)
		panel.set_ylim(0.7,1.1)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.yaxis.set_major_locator(MultipleLocator(0.2))
		panel.yaxis.set_minor_locator(MultipleLocator(0.1))
		
		# plot avg line
		panel.plot(rinis_fixed,final_n_targets2_rini*1.0/N,'r-',markersize=2,linewidth=linewidth,zorder=3)
		panel.plot(rs,sucB_ep100000/totB_ep100000,'--', color='darkgray')
		panel.text(0.1,0.8,r'$10^5$-th episode',fontsize=legendfontsize-1,transform=panel.transAxes)
		
		######################## panel C ########################################
		panel = fig.add_axes([x3, y3, dx3, dy3])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 0)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.0004,0.8)
		panel.set_yscale('log')
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index2][0][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index2][0][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index2][0][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index5][0][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index5][0][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index5][0][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index8][0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index8][0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index8][0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000[0][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000[0][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000[0][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pBP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (c) Type A}',fontsize=legendfontsize,transform=panel.transAxes)
		
		
		######################## panel D ########################################
		panel = fig.add_axes([x4, y4, dx4, dy4])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 1)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.00003,0.8)
		panel.set_yscale('log')
		
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index2][1][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index2][1][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index2][1][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index5][1][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index5][1][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index5][1][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000_rini[index8][1][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000_rini[index8][1][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000_rini[index8][1][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeA_ep100000[1][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeA_ep100000[1][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeA_ep100000[1][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pABP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (d) Type A}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel E ########################################
		panel = fig.add_axes([x5, y5, dx5, dy5])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 0, \, \omega \!=\! 0)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.0008,0.8)
		panel.set_yscale('log')
		
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index2][0][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index2][0][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index2][0][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index5][0][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index5][0][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index5][0][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index8][0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index8][0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index8][0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000[0][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000[0][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000[0][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pBP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (e) Type C}',fontsize=legendfontsize,transform=panel.transAxes)
		
		
		######################## panel F ########################################
		panel = fig.add_axes([x6, y6, dx6, dy6])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 1, \, \omega \!=\! 0)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.0005,0.8)
		panel.set_yscale('log')
		
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index2][1][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index2][1][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index2][1][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index5][1][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index5][1][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index5][1][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index8][1][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index8][1][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index8][1][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000[1][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000[1][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000[1][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pABP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (f) Type C}',fontsize=legendfontsize,transform=panel.transAxes)
		
		######################## panel G ########################################
		panel = fig.add_axes([x7, y7, dx7, dy7])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 0, \, \omega \!=\! 1)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.002,0.8)
		panel.set_yscale('log')
		
		
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index2][2][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index2][2][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index2][2][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index5][2][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index5][2][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index5][2][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index8][2][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index8][2][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index8][2][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000[2][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000[2][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000[2][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pBP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (g) Type C}',fontsize=legendfontsize,transform=panel.transAxes)
		
		
		######################## panel H ########################################
		panel = fig.add_axes([x8, y8, dx8, dy8])
		panel.tick_params(axis='both',which='both',direction='in',bottom=True,top=True,left=True,right=True)
		for tick in panel.xaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		for tick in panel.yaxis.get_major_ticks(): tick.label.set_fontsize(axisticslabelfontsize)
		panel.set_xlabel(r'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switch. prob. $(\phi \!=\! 1, \, \omega \!=\! 1)$',fontsize=axislabelfontsize)
		panel.set_xlim(-0.2,10.7)
		panel.xaxis.set_major_locator(MultipleLocator(2))
		panel.xaxis.set_minor_locator(MultipleLocator(1))
		panel.set_ylim(0.00003,0.2)
		panel.set_yscale('log')
		
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index2][3][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index2][3][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index2][3][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index5][3][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index5][3][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index5][3][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000_rini[index8][3][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000_rini[index8][3][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000_rini[index8][3][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeC_ep100000[3][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeC_ep100000[3][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeC_ep100000[3][M-1],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis,pABP,'k--',linewidth=linewidth,zorder=3)
		
		panel.axvline(x=0.5, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.08,0.74,r'$\sigma/2$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		panel.axvline(x=10.0, ymin=0.0, ymax=0.75, color='gray', linestyle='-', linewidth=1)
		panel.text(0.87,0.74,r'$\tilde{R}$',fontsize=axisticslabelfontsize,color='gray',transform=panel.transAxes)
		
		panel.axvline(x=2, linestyle='--', linewidth=0.5, color=color3)
		panel.axvline(x=5, linestyle='--', linewidth=0.5, color=color2)
		panel.axvline(x=8, linestyle='--', linewidth=0.5, color=color1)
		
		panel.text(0.03,0.9,r'{\bf (h) Type C}',fontsize=legendfontsize,transform=panel.transAxes)
		
		pdf.savefig(fig)
	return

def global_variables ():
	# variabili comuni utili per le varie figure
	global axisticslabelfontsize
	global axisticslabelfontsizeinset
	global axislabelfontsize 
	global axislabelfontsizeinset
	global legendfontsize
	global linewidth
	global linewidth2
	global linewidth3
	global linewidth4
	global markersize
	# colors (colorblind safe)
	global color1
	global color2
	global color3
	
	axisticslabelfontsize=9
	axisticslabelfontsizeinset=7
	axislabelfontsize=11 
	axislabelfontsizeinset=8
	legendfontsize=10
	linewidth = 2.0
	linewidth2 = 3.0
	linewidth3 = 1.5
	linewidth4 = 6.0
	markersize = 1.0
	color1 = "#d95f02"
	color2 = "#1b9e77"
	color3 = "#7570b3"
	
	return

def main():
	global_variables ()
	
	Dr = 0.01
	R_target = 0.5
	R_max = 10.0
	M = 2 + int((R_max-R_target)/Dr)	# number of distance bins
	print (M)
	rinis = np.zeros((M))
	for i in range(M):
		rinis[i] = R_target + 0.5*((i-1)*Dr + (i)*Dr)
	print (rinis)
	
	
	
	####### Type A
	N_bunches = 40
	N_runs_bunch = 250			# number of completely independent runs
	N_episodes = 1000000		# number of episodes. Each episode lasts for a time_single_episode
	foldername = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeA_plain_Pe100/'
	# ~ #~ foldername = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeA_plain_Pe100/'
	####### Type C
	N_bunches2 = 40
	N_runs_bunch2 = 250			# number of completely independent runs
	N_episodes2 = 1000000		# number of episodes. Each episode lasts for a time_single_episode
	foldername2 = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeC_plain_Pe100/'
	# ~ #~ foldername2 = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeC_plain_Pe100/'
	####### Type B
	N_bunches3 = 40
	N_runs_bunch3 = 250			# number of completely independent runs
	N_episodes3 = 1000000		# number of episodes. Each episode lasts for a time_single_episode
	foldername3 = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeD_plain_Pe100/'
	# ~ #~ foldername3 = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/'
	
	
	#### test
	xs,ys,zs=read_TargetTimes_given_policy(foldername2,'LearnedPolicy_Modified')
	testvalue = 0.0
	sumvalue=0.0
	test2value=0.0
	for x in xs:
		sumvalue+=1.0
		if (x>0.00001):
			testvalue+=1.0
			test2value+=x
	test2value = test2value/testvalue
	testvalue = testvalue/sumvalue
	
	# ~ # plots
	make_figure1(N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3,testvalue,test2value)
	make_figure2(M,rinis, N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2,N_bunches3,N_runs_bunch3,N_episodes3,foldername3)
	
	
	
	 
	# ~ ####### Type A radius 5
	# ~ N_bunches = 40
	# ~ N_runs_bunch = 250			# number of completely independent runs
	# ~ N_episodes = 100000		# number of episodes. Each episode lasts for a time_single_episode
	# ~ foldername = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/'
	# ~ #~ foldername = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/'
	# ~ ####### Type C radius 5
	# ~ N_bunches2 = 40
	# ~ N_runs_bunch2 = 250			# number of completely independent runs
	# ~ N_episodes2 = 100000		# number of episodes. Each episode lasts for a time_single_episode
	# ~ foldername2 = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/'
	# ~ #~ foldername2 = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/'
	
	
	
	# ~ make_figure3(M,rinis,N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2)
	
	
	
	print (testvalue,test2value)
	
main()
