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_figure1 (N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2):
	####### 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')
	N_ini = len(target_times_ini)
	
	####### 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(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')
	N2_ini = len(target_times2_ini)
	
	for i in range(Nep_arrays2):
		print (episodes[i],n_targets[i]*1.0/N,n_targets2[i]*1.0/N2)
	for i in range(Nep_arrays2+1,Nep_arrays):
		print (episodes[i],n_targets[i]*1.0/N,'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.14,0.42
	dx2,dy2=0.16,0.38
	
	x3,y3 = 0.58,y1
	dx3,dy3 = dx1,dy1
	
	x4,y4 = x3+dx3,y1
	dx4,dy4 = dx3,dy1
	

	with PdfPages('fig1.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.38)
		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(episodes2,n_targets2*1.0/N2,'-',color=color2,markersize=2,linewidth=linewidth,zorder=3,label=r'type B')
		
		panel.hlines(y=1.0, xmin=3000., xmax=1000000, linestyle='--', linewidth=0.5, color='black')
		
		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 succ. agents $[\tau]$',fontsize=axislabelfontsizeinset-1,labelpad=0.2)
		# ~ panel.set_xlim(0.8,280000)
		panel.set_xlim(0.8,1400000)
		panel.set_ylim(0,0.6)
		panel.set_xscale('log')
		panel.yaxis.set_major_locator(MultipleLocator(0.1))
		panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		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,zorder=3,label=r'Type A')
		panel.plot(episodes2,avg_time2,'-',color=color2,markersize=2,linewidth=linewidth,zorder=3,label=r'Type B')
		
		#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.38)
		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_ep100000 = np.zeros(len(rs))
		sucB_ep100000 = np.zeros(len(rs))
		
		bin_width2 = 0.1
		scalars = np.arange(-1+bin_width2/2,1.01,bin_width2)
		tot2_ep1 = np.zeros(len(scalars))
		suc2_ep1 = np.zeros(len(scalars))
		tot2A_ep1000000 = np.zeros(len(scalars))
		suc2A_ep1000000 = np.zeros(len(scalars))
		tot2B_ep100000 = np.zeros(len(scalars))
		suc2B_ep100000 = np.zeros(len(scalars))
		
		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
			k=-1
			for j in range(len(scalars)):
				if (scalar >= scalars[j]-bin_width2/2 and scalar< scalars[j]+bin_width2/2):
					k=j
			tot2_ep1[k] +=1
			if (target_times_ini[n]>0.0):
				suc2_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
			k=-1
			for j in range(len(scalars)):
				if (scalar >= scalars[j]-bin_width2/2 and scalar< scalars[j]+bin_width2/2):
					k=j
			tot2A_ep1000000[k] +=1
			if (target_times[index][n]>0.0):
				suc2A_ep1000000[k] +=1
		
		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
			k=-1
			for j in range(len(scalars)):
				if (scalar >= scalars[j]-bin_width2/2 and scalar< scalars[j]+bin_width2/2):
					k=j
			tot2_ep1[k] +=1
			if (target_times2_ini[n]>0.0):
				suc2_ep1[k] +=1
				
				
		for n in range(N2):
			
			index = 49					#### 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
			k=-1
			for j in range(len(scalars)):
				if (scalar >= scalars[j]-bin_width2/2 and scalar< scalars[j]+bin_width2/2):
					k=j
			tot2B_ep100000[k] +=1
			if (target_times2[index][n]>0.0):
				suc2B_ep100000[k] +=1
		
		print (rs)
		print (tot_ep1)
		print (totA_ep1000000)
		print (totB_ep100000)
		
		
		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=3)
		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=2)
		panel.bar(rs,sucB_ep100000/totB_ep100000, color=color2, edgecolor='black', width=bin_width, alpha=0.5, label = r'type B, $5 \cdot 10^5$-th episode',zorder=1)
		
		panel.hlines(y=1.0, xmin=0.25, xmax=10.25, linestyle='--', linewidth=0.5, color='black')
		
		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 (b)}',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'$\cos(-\boldsymbol{\mathrm{u}}_{\rm ini} \cdot \vec{r}_{\rm ini}/r_{\rm ini})$',fontsize=axislabelfontsize)
		# ~ panel.set_xlim(-1.1,1.1)
		# ~ panel.set_ylim(0,1.22)
		# ~ panel.set_yticklabels([])
		# ~ panel.xaxis.set_major_locator(MultipleLocator(0.6))
		# ~ panel.xaxis.set_minor_locator(MultipleLocator(0.1))
		# ~ panel.yaxis.set_major_locator(MultipleLocator(0.1))
		# ~ panel.yaxis.set_minor_locator(MultipleLocator(0.05))
		
		
		# ~ panel.bar(scalars,5*suc2_ep1/tot2_ep1, color='black', edgecolor='black', width=bin_width2, alpha=1.0, label = r'initial policy ($\times 5$)',zorder=3)
		# ~ panel.bar(scalars,suc2A_ep1000000/tot2A_ep1000000, color=color1, edgecolor='black', width=bin_width2, alpha=0.5, label = r'type A, $10^5$-th episode',zorder=2)
		# ~ panel.bar(scalars,suc2B_ep100000/tot2B_ep100000, color=color2, edgecolor='black', width=bin_width2, alpha=0.5, label = r'type B, $10^4$-th episode',zorder=1)
		
		# ~ panel.legend(loc='upper center', bbox_to_anchor=(0.0, 0.99),ncol=1,fontsize=legendfontsize,handlelength=1.5,labelspacing=0.2,framealpha=1.0)
		# ~ panel.text(0.85,0.9,r'{\bf (d)}',fontsize=legendfontsize,transform=panel.transAxes)
		
		print (scalars)
		
		

		
		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):
	rinis[0]=0.2
	rinis[-1]=10.3
	####### 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 B
	N2 = N_bunches2*N_runs_bunch2
	Nep_arrays2 = ep_index(N_episodes2)
	Ns2 = M*4
	Nomegas2 = 2
	dataTypeB_ep10000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	dataTypeB_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,100000,M,Nomegas2)
	dataTypeB_ep500000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,500000,M,Nomegas2)
	# ~ dataTypeB_ep1000000 = compute_AvgPvalues_from_AvgH_bunches(foldername2,Ns2,N_bunches2,1000000,M,Nomegas2)
	# ~ dataTypeB_ep10000 = read_AvgPvalues_bunches(foldername2,Ns2,N_bunches2,10000,M,Nomegas2)
	distriTypeB = read_Radial_Distributions (foldername2,'typeB')
	####################################################################
	####################################################################
	####################################################################
	
	####### initial policy
	pBP = np.asarray([0.01 for i in range(M)])
	pABP = np.asarray([0.001 for i in range(M)])
	
	#######
	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.306,0.78
	
	x2,y2 = x1+dx1,y1
	dx2,dy2 = dx1,dy1
	
	x3,y3 = x2+dx1+0.06,y1
	dx3,dy3 = 0.25,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'$r/\sigma$',fontsize=axislabelfontsize)
		panel.set_ylabel(r'switching probability',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(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(rinis,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis,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.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.2,10.7)
		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],dataTypeB_ep100000[0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeB_ep100000[0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[1][1:M-1],'s',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[1][0],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 0$')
		panel.plot(rinis[M-1],dataTypeB_ep100000[1][M-1],'s',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[2][1:M-1],'v',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[2][0],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 0, \, \omega \!=\! 1$')
		panel.plot(rinis[M-1],dataTypeB_ep100000[2][M-1],'v',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[3][1:M-1],'D',color='black',markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[3][0],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3,label=r'$\phi \!=\! 1, \, \omega \!=\! 1$')
		panel.plot(rinis[M-1],dataTypeB_ep100000[3][M-1],'D',color='black',markersize=markersize+2,linewidth=linewidth,zorder=3)

		panel.plot(rinis,pBP,'r--',linewidth=linewidth,zorder=3)
		panel.plot(rinis,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.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.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.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 (c)} $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(distriTypeB[0][50:],distriTypeB[3][50:]/distriTypeB[0][50:],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		# ~ panel.plot(distriTypeB[0],distriTypeB[4]/distriTypeB[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(distriTypeB[0],distriTypeB[3]/(distriTypeB[3]+distriTypeB[4]),'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeB[0],distriTypeB[4]/(distriTypeB[3]+distriTypeB[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(distriTypeB[0],distriTypeB[3],'-',color=color2,linewidth=linewidth,label=r'type B, $\phi=0$')
		#~ panel.plot(distriTypeB[0],distriTypeB[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=color2,linewidth=linewidth,label=r'type B')
		#~ 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+'TypeB_plain_Pe100/',N_bunches2,Nep_arrays2)
	target_times2,initial_radii2,initial_directions2 = read_TargetTimes_bunches(foldername+'TypeB_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+'TypeB_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
	dataTypeB_ep100000 = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeB_plain_Pe100/',Ns2,N_bunches2,100000,M,Nomegas2)
	dataTypeB_ep100000_rini = []
	for str_rini in str_rinis:
		dataTypeB_ep100000_temp = compute_AvgPvalues_from_AvgH_bunches(foldername2+'TypeB_plain_Pe100_rini'+str_rini+'sigma/',Ns2,N_bunches2,100000,M,Nomegas2)
		dataTypeB_ep100000_rini.append(dataTypeB_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('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'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 B}',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],dataTypeB_ep100000_rini[index2][0][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index2][0][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index2][0][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index5][0][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index5][0][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index5][0][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index8][0][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index8][0][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index8][0][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[0][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[0][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_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 B}',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],dataTypeB_ep100000_rini[index2][1][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index2][1][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index2][1][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index5][1][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index5][1][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index5][1][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index8][1][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index8][1][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index8][1][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[1][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[1][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_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 B}',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],dataTypeB_ep100000_rini[index2][2][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index2][2][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index2][2][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index5][2][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index5][2][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index5][2][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index8][2][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index8][2][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index8][2][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[2][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[2][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_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 B}',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],dataTypeB_ep100000_rini[index2][3][1:M-1],'o',color=color3,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index2][3][0],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index2][3][M-1],'o',color=color3,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index5][3][1:M-1],'o',color=color2,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index5][3][0],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index5][3][M-1],'o',color=color2,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000_rini[index8][3][1:M-1],'o',color=color1,markersize=markersize,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000_rini[index8][3][0],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_ep100000_rini[index8][3][M-1],'o',color=color1,markersize=markersize+2,linewidth=linewidth,zorder=3)
		
		panel.plot(rinis[1:M-1],dataTypeB_ep100000[3][1:M-1],'s',color='darkgray',markersize=markersize-0.4,linewidth=linewidth,zorder=3)
		panel.plot(rinis[0],dataTypeB_ep100000[3][0],'s',color='darkgray',markersize=markersize+2,linewidth=linewidth,zorder=3)
		panel.plot(rinis[M-1],dataTypeB_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 B}',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 B
	# ~ N_bunches2 = 40
	# ~ N_runs_bunch2 = 250			# number of completely independent runs
	# ~ N_episodes2 = 500000		# number of episodes. Each episode lasts for a time_single_episode
	# ~ foldername2 = '../../../../TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/'
	#~ foldername2 = '../../../../../../../../media/mik/Elements/Physics/Innsbruck/TargetSearching_Local/ReinforcementLearning/Paper4/RESULTS/TypeB_plain_Pe100/'
	
	
	# plots
	# ~ make_figure1(N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2)
	# ~ make_figure2(M,rinis, N_bunches,N_runs_bunch,N_episodes,foldername,N_bunches2,N_runs_bunch2,N_episodes2,foldername2)
	
	
	
	 
	####### 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 B 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)
	

main()
