diff --git a/input/paper2/extended/error/s_lbfgs_error.txt b/input/paper2/extended/error/s_lbfgs_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..82f361d1051889b23adf1f48a0a97874271722bf
--- /dev/null
+++ b/input/paper2/extended/error/s_lbfgs_error.txt
@@ -0,0 +1,15 @@
+name = inversion_lbfgs_w_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/S_lBFGS/
+inverted_model_name = paper2_extended_inversion_lbfgs_w
+inverted_model_prefix = g0s0
+inverted_model_number = 28
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/ssm_lbfgs_error.txt b/input/paper2/extended/error/ssm_lbfgs_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..568df071e442dc4480305405ed2e92f2360bf582
--- /dev/null
+++ b/input/paper2/extended/error/ssm_lbfgs_error.txt
@@ -0,0 +1,15 @@
+name = inversion_lbfgs_w_smooth_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SSM_lBFGS/
+inverted_model_name = paper2_extended_inversion_lbfgs_w_smooth
+inverted_model_prefix = g0s0
+inverted_model_number = 31
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_lbfgs_error.txt b/input/paper2/extended/error/sst_lbfgs_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7ed4303e7baa59ecb703feadf7b202aed375069b
--- /dev/null
+++ b/input/paper2/extended/error/sst_lbfgs_error.txt
@@ -0,0 +1,15 @@
+name = inversion_lbfgs_w_stab_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_lBFGS/
+inverted_model_name = paper2_extended_inversion_lbfgs_w_stab
+inverted_model_prefix = g0s0
+inverted_model_number = 27
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_ncg_error.txt b/input/paper2/extended/error/sst_ncg_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..95e8b7f05a8d6673b3923f8dcd6d655b3982be8e
--- /dev/null
+++ b/input/paper2/extended/error/sst_ncg_error.txt
@@ -0,0 +1,15 @@
+name = sst_ncg_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NCG/
+inverted_model_name = paper2_extended_sst_ncg
+inverted_model_prefix = g0s0
+inverted_model_number = 17
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_ncggn_error.txt b/input/paper2/extended/error/sst_ncggn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..62739731998af5f0ac4de8efc0356a08844f5b5e
--- /dev/null
+++ b/input/paper2/extended/error/sst_ncggn_error.txt
@@ -0,0 +1,15 @@
+name = sst_ncggn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NCGGN/
+inverted_model_name = paper2_extended_sst_ncggn
+inverted_model_prefix = g0s0
+inverted_model_number = 15
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgA_error.txt b/input/paper2/extended/error/sst_nscgA_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aad2856ca3cac61ecd79bc0f41a5e9a066037f60
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgA_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgA_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGA/
+inverted_model_name = paper2_extended_sst_nscgA
+inverted_model_prefix = g0s0
+inverted_model_number = 17
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgAgn_error.txt b/input/paper2/extended/error/sst_nscgAgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..56089fb9de59831380fae5ab9b13fbf26293d38e
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgAgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgAgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGAGN/
+inverted_model_name = paper2_extended_sst_nscgAgn
+inverted_model_prefix = g0s0
+inverted_model_number = 11
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgAr_error.txt b/input/paper2/extended/error/sst_nscgAr_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b1f89c8899e960b81cf0f9fcae5803b0447b4aab
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgAr_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgAr_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGAR/
+inverted_model_name = paper2_extended_sst_nscgAr
+inverted_model_prefix = g0s0
+inverted_model_number = 14
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgArgn_error.txt b/input/paper2/extended/error/sst_nscgArgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e3a84002c221d7a54104710d5ba25d304072091c
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgArgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgArgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGARGN/
+inverted_model_name = paper2_extended_sst_nscgArgn
+inverted_model_prefix = g0s0
+inverted_model_number = 11
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgB_error.txt b/input/paper2/extended/error/sst_nscgB_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..57f4ce6e7b3bdb9f32d5fab3ac78f36c96ea70fd
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgB_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgB_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGB/
+inverted_model_name = paper2_extended_sst_nscgB
+inverted_model_prefix = g0s0
+inverted_model_number = 13
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgBgn_error.txt b/input/paper2/extended/error/sst_nscgBgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c9c877aef4c557dcd5c22b40948513b0cb790db9
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgBgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgBgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGBGN/
+inverted_model_name = paper2_extended_sst_nscgBgn
+inverted_model_prefix = g0s0
+inverted_model_number = 10
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgBr_error.txt b/input/paper2/extended/error/sst_nscgBr_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f07d6695d1847cf6aee30bdbe8c52fea7ae60a64
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgBr_error.txt
@@ -0,0 +1,16 @@
+name = sst_nscgBr_error
+
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGBR/
+inverted_model_name = paper2_extended_sst_nscgBr
+inverted_model_prefix = g0s0
+inverted_model_number = 14
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgBrgn_error.txt b/input/paper2/extended/error/sst_nscgBrgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9079d0d6ac391ed33041930373ef09af1913c45f
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgBrgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgBgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGBRGN/
+inverted_model_name = paper2_extended_sst_nscgBrgn
+inverted_model_prefix = g0s0
+inverted_model_number = 14
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgC_error.txt b/input/paper2/extended/error/sst_nscgC_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..336b023a8b0d009768691eef06e6d8a08adcdc4d
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgC_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgC_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGC/
+inverted_model_name = paper2_extended_sst_nscgC
+inverted_model_prefix = g0s0
+inverted_model_number = ??
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgCgn_error.txt b/input/paper2/extended/error/sst_nscgCgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9d5c7b8dac3537c458d840785fec5fb620c74db8
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgCgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgCgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGCGN/
+inverted_model_name = paper2_extended_sst_nscgCgn
+inverted_model_prefix = g0s0
+inverted_model_number = 10
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgCr_error.txt b/input/paper2/extended/error/sst_nscgCr_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7ea15539083be3be5ceca8ca2676f4ea1a235714
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgCr_error.txt
@@ -0,0 +1,16 @@
+name = sst_nscgCr_error
+
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGCR/
+inverted_model_name = paper2_extended_sst_nscgC
+inverted_model_prefix = g0s0
+inverted_model_number = 17
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/sst_nscgCrgn_error.txt b/input/paper2/extended/error/sst_nscgCrgn_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a13cf8fdf7f1ca63f2a8f7e2c6f87bb5ff2d3e14
--- /dev/null
+++ b/input/paper2/extended/error/sst_nscgCrgn_error.txt
@@ -0,0 +1,15 @@
+name = sst_nscgCrgn_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/SST_NSCGCRGN/
+inverted_model_name = paper2_extended_sst_nscgCrgn
+inverted_model_prefix = g0s0
+inverted_model_number = 24
+#Output
+write_error_field = 0
diff --git a/input/paper2/extended/error/us_lbfgs_error.txt b/input/paper2/extended/error/us_lbfgs_error.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7dc0b3689b75604eb24fe9f4d5570631558ea83b
--- /dev/null
+++ b/input/paper2/extended/error/us_lbfgs_error.txt
@@ -0,0 +1,15 @@
+name = inversion_lbfgs_error
+#Configuration
+unknown = subsurface
+m0_typec0 = file
+m0_pathc0 = ../input/paper2/marmousi_slowness2
+#Error
+error_type = root_mean_squared
+integration_degree = 8
+#Input
+inverted_model_path = ../../Paper2/extended/US_lBFGS/
+inverted_model_name = paper2_extended_inversion_lbfgs
+inverted_model_prefix = g0s0
+inverted_model_number = 37
+#Output
+write_error_field = 0
diff --git a/inversion.cpp b/inversion.cpp
index 8d3ce0ae5b7deeb9c56bee3190ef9b6d603d6006..ce77687df1ef8bec38e005e39ddff336027fb42d 100644
--- a/inversion.cpp
+++ b/inversion.cpp
@@ -32,8 +32,8 @@ int inversion(const GmshFem& gmshFem)
 
     for (unsigned int c = 0; c < parametrization->size(); c++)
     {
-        save(configuration->m0(0.)[c], configuration->model_unknown(Support::BLK), name+"_m_blkc"+std::to_string(c)+"f"+suffix, "pos", "");
-        save(configuration->m0(0.)[c], configuration->model_unknown(Support::BND), name+"_m_bndc"+std::to_string(c)+"f"+suffix, "pos", "");
+        save(configuration->m0(0.)[c], configuration->model_unknown(Support::BLK), name+"_m_blkc"+std::to_string(c), "pos", "");
+        save(configuration->m0(0.)[c], configuration->model_unknown(Support::BND), name+"_m_bndc"+std::to_string(c), "pos", "");
     }
 
     unsigned int n_freq_tot = 0;
diff --git a/inversion_plot_comp_paper2.py b/inversion_plot_comp_paper2.py
index 53dd0f21d952fa37f9f4ac0ed12713d23db80236..9443858192397584ac8e9955ee596a2fa579a5f2 100644
--- a/inversion_plot_comp_paper2.py
+++ b/inversion_plot_comp_paper2.py
@@ -12,12 +12,14 @@ rc('text.latex', preamble=r'\usepackage{amsmath} \usepackage{amssymb}')
 rc('font',**{'family':'serif','sans-serif':['Times New Roman'],'size':15})
 rc('text', usetex=True)
 #Value for 1 width figure
+lw = 2.
 H = 3.;
 L = 3.;
 
 
 
 """
+#Abstract
 n_comp = 5
 path = ['YuanFanChoiceA/','YuanFanChoiceB/','YuanFanChoiceC/','EisenstatChoiceA/','Classic/']
 filename = ['paper2_inversion_nscgA','paper2_inversion_nscgB','paper2_inversion_nscgC','paper2_inversion_ncg','paper2_inversion_gd']
@@ -32,24 +34,170 @@ freqf = np.array([4.,6.,9.])
 n_freq = np.size(freqf)
 """
 
+"""
+#CS1: IP
+j0 = 35.6633
 n_comp = 4
-path = ['lBFGS/','lBFGS_W/','lBFGS_ST/','lBFGS_SM/']
+path = ['extended/US_lBFGS/','extended/S_lBFGS/','extended/SST_lBFGS/','extended/SSM_lBFGS/']
 filename = ['paper2_extended_inversion_lbfgs','paper2_extended_inversion_lbfgs_w','paper2_extended_inversion_lbfgs_w_stab','paper2_extended_inversion_lbfgs_w_smooth']
 lab = ['unweight','weight','stab','smooth']
 glob = ['linesearch','linesearch','linesearch','linesearch']
 order = [1, 1, 1, 1]
 col = ['k','k', 'k', 'k']
-lin = ['-','--','-.',':']
+mrk = ['']*4
+lin = [':','-.','--','-']
 max_forward = 80
 
 n_freq = 1
+"""
 
+"""
+#CS1: GD
+j0 = 35.6633
+n_comp = 7
+path = ['extended/SST_GD_LS/','extended/SST_GD_TRA/','extended/SST_GD_BTRB/','extended/SST_GD_BTRC/','extended/SST_GD_BTRAR/','extended/SST_GD_BTRBR/','extended/SST_GD_BTRCR/']
+filename = ['paper2_extended_sst_gd_ls','paper2_extended_sst_gd_trA','paper2_extended_sst_gd_trB','paper2_extended_sst_gd_trC','paper2_extended_sst_gd_trAR','paper2_extended_sst_gd_trBR','paper2_extended_sst_gd_trCR']
+lab = ['LS','TR-P(A)','TR-P(B)','TR-P(C)','TR-R(A)','TR-R(B)','TR-R(C)']
+glob = ['linesearch'] + ['trust-region'] * 3 + ['trust-region-retro'] * 3
+order = [1] * 7
+col = ['k'] + ['C0','C1','C2'] + ['C3','C4','C5']
+mrk = ['']*7
+#lin = ['-']*7 
+lin = [(0, (4, 4)), (0, (4, 4)), (0, (4, 4)),(4, (4, 4)), (0, (4, 8)), (4, (4, 8)), (8, (4, 8))]
+max_forward = 360
 
+n_freq = 1
 """
-LOAD
+
 """
+#CS1: l-BFGS
 j0 = 35.6633
+n_comp = 7
+path = ['extended/SST_lBFGS/','extended/SST_lBFGS_TRA/','extended/SST_lBFGS_TRB/','extended/SST_lBFGS_TRC/','extended/SST_lBFGS_TRAR/','extended/SST_lBFGS_TRBR/','extended/SST_lBFGS_TRCR/']
+filename = ['paper2_extended_sst_lbfgs_ls','paper2_extended_sst_lbfgs_trA','paper2_extended_sst_lbfgs_trB','paper2_extended_sst_lbfgs_trC','paper2_extended_sst_lbfgs_trAR','paper2_extended_sst_lbfgs_trBR','paper2_extended_sst_lbfgs_trCR']
+lab = ['LS','TR-P(A)','TR-P(B)','TR-P(C)','TR-R(A)','TR-R(B)','TR-R(C)']
+glob = ['linesearch'] + ['trust-region'] * 3 + ['trust-region-retro'] * 3
+order = [1.5] * 7
+col = ['k'] + ['C0','C1','C2'] + ['C3','C4','C5']
+mrk = ['']*7
+#lin = ['-'] * 7
+lin = [(0, (4, 4)), (0, (4, 4)), (0, (4, 8)),(0, (4, 4)), (4, (4, 4)), (4, (4, 8)), (8, (4, 8))]
+max_forward = 80
+
+n_freq = 1
+"""
+
+"""
+#CS1: Newton
+j0 = 35.6633
+n_comp = 14
+path = ['extended/SST_NCG/','extended/SST_NSCGA/','extended/SST_NSCGB/','extended/SST_NSCGC/','extended/SST_NSCGAR/','extended/SST_NSCGBR/','extended/SST_NSCGCR/','extended/SST_NCGGN/','extended/SST_NSCGAGN/','extended/SST_NSCGBGN/','extended/SST_NSCGCGN/','extended/SST_NSCGARGN/','extended/SST_NSCGBRGN/','extended/SST_NSCGCRGN/']
+filename = ['paper2_extended_sst_ncg','paper2_extended_sst_nscgA','paper2_extended_sst_nscgB','paper2_extended_sst_nscgC','paper2_extended_sst_nscgAr','paper2_extended_sst_nscgBr','paper2_extended_sst_nscgC','paper2_extended_sst_ncggn','paper2_extended_sst_nscgAgn','paper2_extended_sst_nscgBgn','paper2_extended_sst_nscgCgn','paper2_extended_sst_nscgArgn','paper2_extended_sst_nscgBrgn','paper2_extended_sst_nscgCrgn']
+lab = ['ncg','nscgA','nscgB','nscgC','nscgAr','nscgBr','nscgCr','ncggn','nscgAgn','nscgBgn','nscgCgn','nscgArgn','nscgBrgn','nscgCrgn']
+glob = (['linesearch'] + ['trust-region'] * 3 + ['trust-region-retro'] * 3) * 2
+order = [2] * 14
+col = ['k', 'C0','C1','C2', 'C3', 'C4', 'C5'] * 2
+mrk = ['']*14 
+lin = [(0,(4,4))]*14
+
+#lin[0] = (0,(1,1))
+#lin[1] = (0,(4,4))
+#lin[2] = (2,(4,4))
+#lin[3] = (4,(4,4))
+
+lin[0] = (4,(4,4))
+lin[1] = (2,(4,4))
+lin[2] = (0,(4,4))
+lin[3] = (4,(4,4))
+lin[4] = (0,(4,4))
+lin[5] = (4,(4,4))
+lin[4+7] = (0,(4,4))
+lin[5+7] = (4,(4,4))
+lin[0+7] = (4,(4,4))
+lin[2+7] = (0,(4,4))
+lin[3+7] = (4,(4,4))
+
+max_forward = 180
+
+n_freq = 1
+"""
+
+"""
+#CS1: IP
+j0 = 209.852
+n_comp = 4
+path = ['extended/concrete3/US_LBFGS_LS/','extended/concrete3/S_LBFGS_LS/','extended/concrete3/SST_LBFGS_LS/','extended/concrete3/SSM_LBFGS_LS/']
+filename = ['paper2_concrete3_us_lbfgs_ls','paper2_concrete3_s_lbfgs_ls','paper2_concrete3_sst_lbfgs_ls','paper2_concrete3_ssm_lbfgs_ls']
+lab = ['unweight','weight','stab','smooth']
+glob = ['linesearch','linesearch','linesearch','linesearch']
+order = [1, 1, 1, 1]
+col = ['k','k', 'k', 'k']
+mrk = ['']*4
+lin = [':','-.','--','-']
+lin[2] = (4,(4,4))
+max_forward = 200+5
+
+n_freq = 1
+"""
+
+"""
+#CS2: GD
+j0 = 209.852
+n_comp = 3
+path = ['extended/concrete3/SSM_GD_LS/','extended/concrete3/SSM_GD_BTRB/','extended/concrete3/SSM_GD_BTRBR/']
+filename = ['paper2_concrete3_ssm_gd_ls','paper2_concrete3_ssm_gd_trB','paper2_concrete3_ssm_gd_trBR']
+lab = ['LS','TR-P(B)','TR-R(B)']
+glob = ['linesearch'] + ['trust-region'] * 1 + ['trust-region-retro'] * 1
+order = [1] * 3
+col = ['k'] + ['C1'] + ['C4']
+mrk = ['']*3
+lin = ['-']*3 
+max_forward = 800
+
+n_freq = 1
+"""
+
+"""
+#CS2: l-BFGS
+j0 = 209.852
+n_comp = 3
+path = ['extended/concrete3/SSM_LBFGS_LS/','extended/concrete3/SSM_LBFGS_TRB/','extended/concrete3/SSM_LBFGS_TRBR/']
+filename = ['paper2_concrete3_ssm_lbfgs_ls','paper2_concrete3_ssm_lbfgs_trB','paper2_concrete3_ssm_lbfgs_trBR']
+lab = ['LS','TR-P(B)','TR-R(B)']
+glob = ['linesearch'] + ['trust-region'] * 1 + ['trust-region-retro'] * 1
+order = [1.5] * 3
+col = ['k'] + ['C1'] + ['C4']
+mrk = ['']*3
+lin = ['-']*3 
+max_forward = 200
+
+n_freq = 1
+"""
+
+#CS2: Newton
+j0 = 209.852
+n_comp = 6
+path = ['extended/concrete3/SSM_NCG/','extended/concrete3/SSM_NSCGB/','extended/concrete3/SSM_NSCGBR/','extended/concrete3/SSM_NCGGN/','extended/concrete3/SSM_NSCGBGN/','extended/concrete3/SSM_NSCGBRGN/']
+filename = ['paper2_concrete3_ssm_ncg','paper2_concrete3_ssm_nscgB','paper2_concrete3_ssm_nscgBR','paper2_concrete3_ssm_ncggn','paper2_concrete3_ssm_nscgBgn','paper2_concrete3_ssm_nscgBRgn']
+lab = ['FN-LS','FN-TR-P(B)','FN-TR-R(B)','GN-LS','GN-TR-P(B)','GN-TR-R(B)']
+glob = ['linesearch','trust-region','trust-region-retro'] * 2
+order = [2.] * 6
+col = ['k','C1','C4']*2
+mrk = ['o']*6
+lin = ['-']*6 
+max_forward = 600
+
+n_freq = 1
+
+"""
+LOAD
+"""
+#j0 = 35.6633
+#snr = 5.
+#j0 = 160.6752980643731 / snr 
 jcfs = []
+p_ratiocfs = []
+r_ratiocfs = []
 n_itcf = []
 n_scalecf = []
 n_itcfs = []
@@ -57,6 +205,8 @@ n_itcfs = []
 for i in range(0,n_comp):
     n_scalef = [[]]*n_freq; 
     jfs = [[]]*n_freq;
+    p_ratiofs = [[]]*n_freq;
+    r_ratiofs = [[]]*n_freq;
     n_itfs = [[]]*n_freq;
     n_itf = [0]*n_freq
     scalefs = [[]]*n_freq;
@@ -64,6 +214,8 @@ for i in range(0,n_comp):
         n_scalef[f] = np.loadtxt(path[i]+filename[i]+'_globalminimum_historyg'+str(f)+'.csv',delimiter=';',max_rows=1,skiprows=3,dtype=np.integer)[1];
         scalefs[f] = np.loadtxt(path[i]+filename[i]+'_globalminimum_historyg'+str(f)+'.csv',delimiter=';',usecols=2,max_rows=np.int(n_scalef[f]),skiprows=6,dtype=np.float);
         jfs[f] = [[]]*n_scalef[f];
+        p_ratiofs[f] = [[]]*n_scalef[f];
+        r_ratiofs[f] = [[]]*n_scalef[f];
         n_itfs[f] = np.zeros(n_scalef[f],np.integer);
         line = 3 
         for s in range(0,n_scalef[f]):        
@@ -71,8 +223,14 @@ for i in range(0,n_comp):
             n_itf[f] = n_itf[f]+n_itfs[f][s]
             line=line+2
             jfs[f][s] = np.loadtxt(path[i]+filename[i]+'_localminimum_historyg'+str(f)+'.csv',delimiter=';',max_rows=np.int(n_itfs[f][s]+1),skiprows=line,dtype=np.float)[:,0] / j0;
+            if glob[i] == 'trust-region' or glob[i] == 'trust-region-retro':
+                p_ratiofs[f][s] = np.loadtxt(path[i]+filename[i]+'_localminimum_historyg'+str(f)+'.csv',delimiter=';',max_rows=np.int(n_itfs[f][s]+1),skiprows=line,dtype=np.float)[:,5];
+                r_ratiofs[f][s] = np.loadtxt(path[i]+filename[i]+'_localminimum_historyg'+str(f)+'.csv',delimiter=';',max_rows=np.int(n_itfs[f][s]+1),skiprows=line,dtype=np.float)[:,6];
+                r_ratiofs[f][s][p_ratiofs[f][s] < 0] = np.nan;
             line=line+n_itfs[f][s]+1+1
     jcfs.append(jfs)
+    p_ratiocfs.append(p_ratiofs)
+    r_ratiocfs.append(r_ratiofs)
     n_itcf.append(n_itf)
     n_itcfs.append(n_itfs)
     n_scalecf.append(n_scalef)
@@ -82,31 +240,50 @@ it_descentcf = [[]*n_freq]*n_comp;
 bnd_descentcf = [[]*n_freq]*n_comp; 
 n_forwardcf = [[]*n_freq]*n_comp;
 successcf = [[]*n_freq]*n_comp;
+negativecf = [[]*n_freq]*n_comp;
+etacf = [[]*n_freq]*n_comp;
 for i in range(0,n_comp):
     it_linef = [[]]*n_freq
     it_descentf = [[]]*n_freq
     bnd_descentf = [[]]*n_freq
     n_forwardf = [[]]*n_freq
     successf = [[]]*n_freq
+    negativef = [[]]*n_freq
+    etaf = [[]]*n_freq
     for f in range(0,n_freq):
         n_forwardf[f] = np.zeros(n_itcf[i][f],np.integer)
 
         if glob[i] == 'linesearch': 
             it_linef[f] = np.loadtxt(path[i]+filename[i]+'_linesearch_historyg'+str(f)+'.csv',delimiter=';',usecols = 5, skiprows=1,dtype=np.integer)
             n_forwardf[f] += it_linef[f] 
-        
+
+        if order[i] == 1.5 and (glob[i] == 'trust-region' or glob[i] == 'trust-region-retro') :
+            successf[f] = np.zeros(n_itcf[i][f],np.integer)
+            bnd_descentf[f] = np.zeros(n_itcf[i][f],np.integer)
+            line = 2
+            for n in range(0,n_itcf[i][f]):
+                bnd_descentf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=4,max_rows=1,skiprows=line,dtype=np.integer);            
+                successf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=0,max_rows=1,skiprows=line,dtype=np.integer);
+                line=line+2        
         if order[i] == 2:
             it_descentf[f] = np.zeros(n_itcf[i][f],np.integer)
             successf[f] = np.zeros(n_itcf[i][f],np.integer)
+            etaf[f] = np.zeros(n_itcf[i][f],np.float)
+            negativef[f] = np.zeros(n_itcf[i][f],np.integer)
             bnd_descentf[f] = np.zeros(n_itcf[i][f],np.integer)
             line = 3 
             for n in range(0,n_itcf[i][f]):        
                 it_descentf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=3,max_rows=1,skiprows=line,dtype=np.integer);
-                if glob[i] == 'trust-region':
+                if glob[i] == 'trust-region' or glob[i] == 'trust-region-retro':
                     bnd_descentf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=6,max_rows=1,skiprows=line,dtype=np.integer);
+                etaf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=1,max_rows=1,skiprows=line,dtype=np.float);            
                 successf[f][n] = np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=0,max_rows=1,skiprows=line,dtype=np.integer);
-                line=line+it_descentf[f][n]+3
+                line=line+it_descentf[f][n]+1
+                negativef[f][n] = (np.loadtxt(path[i]+filename[i]+'_descent_historyg'+str(f)+'.csv',delimiter=';',usecols=1,max_rows=1,skiprows=line,dtype=np.float)<0);
+                line=line+2
             n_forwardf[f] += 2*it_descentf[f]
+            if glob[i] == 'trust-region-retro':
+                n_forwardf[f] += 2 #retrospective Hessian-vector product
         n_forwardf[f] += 2
         n_forwardf[f] = np.cumsum(n_forwardf[f])
         n_forwardf[f] = np.insert(n_forwardf[f],0,0)
@@ -115,49 +292,131 @@ for i in range(0,n_comp):
     bnd_descentcf[i] = bnd_descentf
     it_linecf[i] = it_linef
     successcf[i] = successf
+    etacf[i] = etaf
+    negativecf[i] = negativef
 
 """
-CONVERGENCE PLOT
+DATA CONVERGENCE PLOT
 """
 fig = [[]]*n_freq
 for f in range(0,n_freq):
     fig[f]=plt.figure(figsize=(2*L,H),tight_layout=False);
-    plt.subplots_adjust(top=0.95,right=0.98,bottom=0.09,left=0.16)
+    plt.subplots_adjust(top=0.95,right=0.97,bottom=0.09,left=0.10)
     plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
     plt.grid(zorder=0)
     plt.xlim([0,max_forward])
-    plt.xticks(np.arange(0,max_forward+1,15))
-    plt.ylim([5e-4,2])
+    plt.xticks(np.arange(0,max_forward+1,20))
+    plt.ylim([5e-3,2])
     plt.yscale('log')
     for i in range(0,n_comp):
         n_it=0
         lines = [[]]*n_scalecf[i][f]
         plt.plot(n_forwardcf[i][f][n_it],jcfs[i][f][0][0],color=col[i],marker='o',zorder=3,markersize=3.)
         for s in range(0,n_scalecf[i][f]):
-            lines[s] = plt.plot(n_forwardcf[i][f][range(n_it,n_it+n_itcfs[i][f][s]+1)],jcfs[i][f][s][0:n_itcfs[i][f][s]+1],color=col[i],linestyle=lin[i],zorder=2,label=lab[i])
+            lines[s] = plt.plot(n_forwardcf[i][f][range(n_it,n_it+n_itcfs[i][f][s]+1)],jcfs[i][f][s][0:n_itcfs[i][f][s]+1],color=col[i],linestyle=lin[i],zorder=2,label=lab[i],marker=mrk[i],markersize=3.,linewidth=lw)
             plt.plot(n_forwardcf[i][f][n_it+n_itcfs[i][f][s]],jcfs[i][f][s][n_itcfs[i][f][s]],color=col[i],marker='x',zorder=3,markersize=3.)
             n_it=n_it+n_itcfs[i][f][s]
         n_it = 0
     #plt.legend()
-    plt.savefig('convergence'+str(f)+'.eps')
+    plt.savefig('convergence_comp'+str(f)+'.eps')
+
+"""
+HISTORY CONVERGENCE PLOT (Retrospective/prospective ratio)
+"""
+fig = [[]]*n_freq
+for f in range(0,n_freq):
+    fig[f]=plt.figure(figsize=(2*L,H / 2.),tight_layout=False);
+    plt.subplots_adjust(top=0.95,right=0.98,bottom=0.17,left=0.08)
+    plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
+    plt.grid(zorder=0)
+    plt.xticks(np.arange(0,23,2))
+    plt.yticks(np.linspace(0,1.5,4))
+    plt.xlim([1,22.5])
+    plt.ylim([0.0,1.75])
+    for i in range(1,3,1):
+        if glob[i] == 'trust-region':
+            plt.plot(range(1,n_itcfs[i][f][0]+1),p_ratiocfs[i][f][0][1:],color=col[i],linestyle=lin[i],zorder=2,label=r'$\rho_{\text{p}}$')
+        if glob[i] == 'trust-region-retro':
+            plt.plot(range(1,n_itcfs[i][f][0]+1),r_ratiocfs[i][f][0][1:],color=col[i],linestyle=lin[i],zorder=2,label=r'$\rho_{\text{r}}$')
+        #plt.legend()
+    plt.savefig('ratio_nscgrgn.eps')
+
+"""
+HISTORY CONVERGENCE PLOT (forcing sequence)
+"""
+fig = [[]]*n_freq
+for f in range(0,n_freq):
+    fig[f]=plt.figure(figsize=(2*L,H / 2.),tight_layout=False);
+    plt.subplots_adjust(top=0.95,right=0.98,bottom=0.17,left=0.08)
+    plt.grid(zorder=0)
+    plt.xticks(np.arange(0,23,2))
+    plt.xlim([0,22.5])
+    plt.ylim([0.4,1.])
+    plt.yticks(np.arange(0.4,1.01,0.2))
+    for i in range(0,n_comp,1):
+        plt.plot(range(0,n_itcfs[i][f][0]),np.sqrt(etacf[i][f][:]),color=col[i],linestyle=lin[i],zorder=2,label=r'$\rho_{\text{p}}$')
+        #plt.legend()
+    plt.savefig('eta_comp.eps')
+    
+"""
+HISTORY CONVERGENCE PLOT (inner iteration per outer iteration)
+"""
+fig = [[]]*n_freq
+for f in range(0,n_freq):
+    fig[f]=plt.figure(figsize=(2*L,H / 2.),tight_layout=False);
+    plt.subplots_adjust(top=0.95,right=0.98,bottom=0.17,left=0.08)
+    plt.ticklabel_format(style='plain', axis='y', scilimits=(0,0))
+    plt.grid(zorder=0)
+    #plt.xticks(np.arange(0,23,2))
+    #plt.yticks(np.arange(1,15,2))
+    #plt.xlim([0,22.5])
+    #plt.ylim([0,14.5])
+    plt.xticks(np.arange(0,46,5))
+    plt.yticks(np.arange(1,37,7))
+    plt.xlim([0,45.5])
+    plt.ylim([0,40.5])
+    for i in range(3,6,1):
+        plt.plot(range(0,n_itcfs[i][f][0]),it_descentcf[i][f][:],color=col[i],linestyle=lin[i],zorder=2)
+    plt.savefig('it_comp.eps')
+    
+"""
+MODEL CONVERGENCE PLOT
+"""
+#To investigate !!!!
+errorcfs = []
+for i in range(0,n_comp):
+    errorc = np.loadtxt(path[i]+filename[i]+'_error.csv',delimiter=';')[:,0];        
+    errorcfs.append(errorc)
+    #plt.plot(n_forwardcf[i][0],errorc,color=col[i],linestyle=lin[i],zorder=2,label=lab[i])
+    plt.plot(jcfs[i][0][0],errorc,color=col[i],linestyle=lin[i],zorder=2,label=lab[i])
+    plt.legend()
+plt.xscale('log')
+plt.gca().invert_xaxis()
         
 """
 STATS
 """
-print(''.rjust(30), 'Wave (tot.)'.rjust(30), 'Outer it. (tot.)'.rjust(30), 'Inner it. (mean)'.rjust(30), 'Failure (tot.)'.rjust(30), 'Bnd reached (tot.)'.rjust(30))
+print(''.rjust(10), 'Wave (tot.)'.rjust(20), 'Outer it. (tot.)'.rjust(20), 'Inner it. (mean)'.rjust(20), 'Failure (tot.)'.rjust(20), 'Bnd reached (tot.)'.rjust(20), 'Success (tot.)'.rjust(20), 'Negative curv. (tot.)'.rjust(20))
 for i in range(0,n_comp):
         outter = np.sum(n_itcf[i])
         inner = 0
         failure = 0
         boundary = 0
+        success = 0
+        negative = 0
         call = 0
         for f in range(0,n_freq):
             call += n_forwardcf[i][f][-1]
             inner += np.sum(it_descentcf[i][f])
             if glob[i] == 'linesearch':
                 failure += np.count_nonzero(it_linecf[i][f])
-            elif glob[i] == 'trust-region':
+            elif glob[i] == 'trust-region' or glob[i] == 'trust-region-retro':
                 for s in range(0,n_scalecf[i][f]):
                     failure += n_itcfs[i][f][s] - np.count_nonzero(np.diff(jcfs[i][f][s]))
                     boundary += np.sum(bnd_descentcf[i][f])
-        print(path[i].rjust(30), str(call).rjust(30), str(outter).rjust(30), str(inner/outter).rjust(30), str(failure/outter).rjust(30), str(boundary/outter).rjust(30))
\ No newline at end of file
+            if order[i] == 1.5 and (glob[i] == 'trust-region' or glob[i] == 'trust-region-retro') :
+                success += np.sum(successcf[i][f])
+            if order[i] == 2:
+                success += np.sum(successcf[i][f])
+                negative += np.sum(negativecf[i][f])
+        print(lab[i].rjust(10), str(call).rjust(20), str(outter).rjust(20), str(inner/outter).rjust(20), str(failure/outter).rjust(20), str(boundary/outter).rjust(20), str(success/outter).rjust(20), str(negative/outter).rjust(20) )
\ No newline at end of file