diff --git a/PE_CBL.py b/PE_CBL.py
index e37393f049d3d61ef810a91503c29ae4183e3794..f348c9ca395331fd027ffc0c57e258904141cadc 100644
--- a/PE_CBL.py
+++ b/PE_CBL.py
@@ -98,10 +98,10 @@ if __name__ == '__main__':
     # Decide what figures to plot
     fig01 = False
     fig02 = True
-    fig03 = False
-    fig04 = False
-    fig05 = False
-    fig06 = False
+    fig03 = True
+    fig04 = True
+    fig05 = True
+    fig06 = True
     fig07 = True
     fig08 = True
     
@@ -110,9 +110,11 @@ if __name__ == '__main__':
     opt02 = False # assimilation of profiles at two times
 
     # Whether or not to run experiments without parameter estimation
+    # Applies only to sets B&C; no-PE run is always computed for experiments A&D
     noPE_runs = False
 
-    # Default PE experiment
+    ############################################################################
+    # Experiment A (control)
     # Create a copy of the default settings
     cbl_settings_A = dict(default_cbl_settings)
     da_settings_A = dict(default_da_settings)
@@ -148,6 +150,279 @@ if __name__ == '__main__':
         exp_A_noPE = experiment(da_settings_A_noPE)
         pickle.dump(exp_A_noPE, open('exp_A_noPE.pickle', 'wb')) 
 
+    ########################################################################
+    # Experiment B1
+    # Create a copy of the default settings
+    # Then re-use the available nature run and derived information
+    cbl_settings_B1 = dict(default_cbl_settings)
+    da_settings_B1 = dict(default_da_settings)
+    da_settings_B1['nr'] = deepcopy(nature_run)
+    da_settings_B1['truths'] = truths
+    da_settings_B1['observations'] = observations
+
+    # Change settings as necessary
+    cbl_settings_B1['perturbations_theta_amplitude'] = sigma_b_init*10
+    cbl_settings_B1['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    da_settings_B1['cbl_settings'] = cbl_settings_B1
+    da_settings_B1['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as
+
+    # Run and save to disk
+    try:
+        exp_B1 = pickle.load(open("exp_B1.pickle", "rb"))
+    except:
+        exp_B1 = experiment(da_settings_B1)
+        setattr(exp_B1,'label','B1')
+        pickle.dump(exp_B1, open('exp_B1.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_B1_noPE = dict(cbl_settings_B1)
+        da_settings_B1_noPE = dict(da_settings_B1)
+        cbl_settings_B1_noPE['do_parameter_estimation'] = False
+        da_settings_B1_noPE['nr'] = deepcopy(nature_run)
+        da_settings_B1_noPE['nr'].do_parameter_estimation = False
+        da_settings_B1_noPE['cbl_settings'] = cbl_settings_B1_noPE
+
+        # Run and save to disk
+        try:
+            exp_B1_noPE = pickle.load(open("exp_B1_noPE.pickle", "rb"))
+        except:
+            exp_B1_noPE = experiment(da_settings_B1_noPE)
+            pickle.dump(exp_B1_noPE, open('exp_B1_noPE.pickle', 'wb'))
+
+    ########################################################################
+    # Experiment B2
+    # Create a copy of the default settings
+    # Then re-use the available nature run and derived information
+    cbl_settings_B2 = dict(default_cbl_settings)
+    da_settings_B2 = dict(default_da_settings)
+    da_settings_B2['nr'] = deepcopy(nature_run)
+    da_settings_B2['truths'] = truths
+    da_settings_B2['observations'] = observations
+
+    # Change settings as necessary
+    cbl_settings_B2['perturbations_theta_amplitude'] = sigma_b_init
+    cbl_settings_B2['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    da_settings_B2['cbl_settings'] = cbl_settings_B2
+    da_settings_B2['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
+
+    # Run and save to disk
+    try:
+        exp_B2 = pickle.load(open("exp_B2.pickle", "rb"))
+    except:
+        exp_B2 = experiment(da_settings_B2)
+        setattr(exp_B2,'label','B2')
+        pickle.dump(exp_B2, open('exp_B2.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_B2_noPE = dict(cbl_settings_B2)
+        da_settings_B2_noPE = dict(da_settings_B2)
+        cbl_settings_B2_noPE['do_parameter_estimation'] = False
+        da_settings_B2_noPE['nr'] = deepcopy(nature_run)
+        da_settings_B2_noPE['nr'].do_parameter_estimation = False
+        da_settings_B2_noPE['cbl_settings'] = cbl_settings_B2_noPE
+
+        # Run and save to disk
+        try:
+            exp_B2_noPE = pickle.load(open("exp_B2_noPE.pickle", "rb"))
+        except:
+            exp_B2_noPE = experiment(da_settings_B2_noPE)
+            pickle.dump(exp_B2_noPE, open('exp_B2_noPE.pickle', 'wb'))
+
+    ########################################################################
+    # Experiment B3
+    # Create a copy of the default settings
+    # Then re-use the available nature run and derived information
+    cbl_settings_B3 = dict(default_cbl_settings)
+    da_settings_B3 = dict(default_da_settings)
+    da_settings_B3['nr'] = deepcopy(nature_run)
+    da_settings_B3['truths'] = truths
+    da_settings_B3['observations'] = observations
+
+    # Change settings as necessary
+    cbl_settings_B3['perturbations_theta_amplitude'] = sigma_b_init*10
+    cbl_settings_B3['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    da_settings_B3['cbl_settings'] = cbl_settings_B3
+    da_settings_B3['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
+
+    # Run and save to disk
+    try:
+        exp_B3 = pickle.load(open("exp_B3.pickle", "rb"))
+    except:
+        exp_B3 = experiment(da_settings_B3)
+        setattr(exp_B3,'label','B3')
+        pickle.dump(exp_B3, open('exp_B3.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_B3_noPE = dict(cbl_settings_B3)
+        da_settings_B3_noPE = dict(da_settings_B3)
+        cbl_settings_B3_noPE['do_parameter_estimation'] = False
+        da_settings_B3_noPE['nr'] = deepcopy(nature_run)
+        da_settings_B3_noPE['nr'].do_parameter_estimation = False
+        da_settings_B3_noPE['cbl_settings'] = cbl_settings_B3_noPE
+
+        # Run and save to disk
+        try:
+            exp_B3_noPE = pickle.load(open("exp_B3_noPE.pickle", "rb"))
+        except:
+            exp_B3_noPE = experiment(da_settings_B3_noPE)
+            pickle.dump(exp_B3_noPE, open('exp_B3_noPE.pickle', 'wb'))
+
+    ########################################################################
+    # Experiment B4
+    # Create a copy of the default settings
+    cbl_settings_B4 = dict(default_cbl_settings)
+    da_settings_B4 = dict(default_da_settings)
+
+    # Change settings as necessary
+    # Changes include generation of observations, so the existing nature run
+    # can't be reused.
+    cbl_settings_B4['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    da_settings_B4['cbl_settings'] = cbl_settings_B4
+    da_settings_B4['obs_error_sdev_generate'] = np.ones(nobs)*sigma_o_as*5
+    da_settings_B4['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
+
+    # Run and save to disk
+    try:
+        exp_B4 = pickle.load(open("exp_B4.pickle", "rb"))
+    except:
+        exp_B4 = experiment(da_settings_B4)
+        setattr(exp_B4,'label','B4')
+        pickle.dump(exp_B4, open('exp_B4.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_B4_noPE = dict(cbl_settings_B4)
+        da_settings_B4_noPE = dict(da_settings_B4)
+        cbl_settings_B4_noPE['do_parameter_estimation'] = False
+        da_settings_B4_noPE['cbl_settings'] = cbl_settings_B4_noPE
+
+        # Run and save to disk
+        try:
+            exp_B4_noPE = pickle.load(open("exp_B4_noPE.pickle", "rb"))
+        except:
+            exp_B4_noPE = experiment(da_settings_B4_noPE)
+            pickle.dump(exp_B4_noPE, open('exp_B4_noPE.pickle', 'wb')) 
+
+    ########################################################################
+    # Experiment C1
+    # Create a copy of the default settings
+    cbl_settings_C1 = dict(default_cbl_settings)
+    da_settings_C1 = dict(default_da_settings)
+
+    # Re-use the available nature run and derived information
+    da_settings_C1['nr'] = deepcopy(nature_run)
+    da_settings_C1['truths'] = truths
+    da_settings_C1['observations'] = observations
+
+    # Change settings as necessary
+    cbl_settings_C1['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    cbl_settings_C1['is_cgrad'] = False
+    da_settings_C1['cbl_settings'] = cbl_settings_C1
+
+    # Run and save to disk
+    try:
+        exp_C1 = pickle.load(open("exp_C1.pickle", "rb"))
+    except:
+        exp_C1 = experiment(da_settings_C1)
+        setattr(exp_C1,'label','C1')
+        pickle.dump(exp_C1, open('exp_C1.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_C1_noPE = dict(cbl_settings_C1)
+        da_settings_C1_noPE = dict(da_settings_C1)
+        cbl_settings_C1_noPE['do_parameter_estimation'] = False
+        da_settings_C1_noPE['cbl_settings'] = cbl_settings_C1_noPE
+
+        # Run and save to disk
+        try:
+            exp_C1_noPE = pickle.load(open("exp_C1_noPE.pickle", "rb"))
+        except:
+            exp_C1_noPE = experiment(da_settings_C1_noPE)
+            pickle.dump(exp_C1_noPE, open('exp_C1_noPE.pickle', 'wb')) 
+
+    ########################################################################
+    # Experiment C2
+    # Create a copy of the default settings
+    cbl_settings_C2 = dict(default_cbl_settings)
+    da_settings_C2 = dict(default_da_settings)
+
+    # Re-use the available nature run and derived information
+    da_settings_C2['nr'] = deepcopy(nature_run)
+    da_settings_C2['truths'] = truths
+    da_settings_C2['observations'] = observations
+
+    # Change settings as necessary
+    cbl_settings_C2['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    cbl_settings_C2['Hmax'] = 0.15
+    da_settings_C2['cbl_settings'] = cbl_settings_C2
+
+    # Run and save to disk
+    try:
+        exp_C2 = pickle.load(open("exp_C2.pickle", "rb"))
+    except:
+        exp_C2 = experiment(da_settings_C2)
+        setattr(exp_C2,'label','C2')
+        pickle.dump(exp_C2, open('exp_C2.pickle', 'wb')) 
+
+    if noPE_runs:
+        # Corresponding experiment without parameter estimation
+        cbl_settings_C2_noPE = dict(cbl_settings_C2)
+        da_settings_C2_noPE = dict(da_settings_C2)
+        cbl_settings_C2_noPE['do_parameter_estimation'] = False
+        da_settings_C2_noPE['cbl_settings'] = cbl_settings_C2_noPE
+
+        # Run and save to disk
+        try:
+            exp_C2_noPE = pickle.load(open("exp_C2_noPE.pickle", "rb"))
+        except:
+            exp_C2_noPE = experiment(da_settings_C2_noPE)
+            pickle.dump(exp_C2_noPE, open('exp_C2_noPE.pickle', 'wb')) 
+
+    ########################################################################
+    # Experiment D
+    # Create a copy of the default settings
+    cbl_settings_D = dict(default_cbl_settings)
+    da_settings_D = dict(default_da_settings)
+
+    # Change settings as necessary
+    # Changes include generation of observations, so the existing nature run
+    # can't be reused.
+    cbl_settings_D['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
+    cbl_settings_D['perturbations_theta_amplitude'] = sigma_b_init*10
+    cbl_settings_D['Hmax'] = 0.15
+    cbl_settings_D['is_cgrad'] = False
+    cbl_settings_D['simulate_error_growth'] = True
+    cbl_settings_D['error_growth_perturbations_amplitude'] = sigma_b_init*5
+    da_settings_D['cbl_settings'] = cbl_settings_D
+    da_settings_D['obs_error_sdev_generate'] = np.ones(nobs)*sigma_o_as*5
+    da_settings_D['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
+
+    # Run and save to disk
+    try:
+        exp_D = pickle.load(open("exp_D.pickle", "rb"))
+    except:
+        exp_D = experiment(da_settings_D)
+        setattr(exp_D,'label','D')
+        pickle.dump(exp_D, open('exp_D.pickle', 'wb')) 
+
+    # Experiment matching D, but without parameter estimation
+    cbl_settings_D_noPE = dict(cbl_settings_D)
+    da_settings_D_noPE = dict(da_settings_D)
+    cbl_settings_D_noPE['do_parameter_estimation'] = False
+    da_settings_D_noPE['cbl_settings'] = cbl_settings_D_noPE
+
+    try:
+        exp_D_noPE = pickle.load(open("exp_D_noPE.pickle", "rb"))
+    except:
+        exp_D_noPE = experiment(da_settings_D_noPE)
+        pickle.dump(exp_A_noPE, open('exp_D_noPE.pickle', 'wb')) 
+
+    ########################################################################
+
     if fig01:
 
         # Create a copy of the default settings
@@ -234,7 +509,6 @@ if __name__ == '__main__':
 
     if fig02:
 
-        # Make plots
         fig, [[ax0, ax1], [ax2, ax3]] = p.subplots(2,2,constrained_layout=True)
         fig.set_size_inches(6,6)
         #
@@ -272,137 +546,6 @@ if __name__ == '__main__':
 
     if fig04:
 
-        ########################################################################
-        # Create a copy of the default settings
-        # Then re-use the available nature run and derived information
-        cbl_settings_B1 = dict(default_cbl_settings)
-        da_settings_B1 = dict(default_da_settings)
-        da_settings_B1['nr'] = deepcopy(nature_run)
-        da_settings_B1['truths'] = truths
-        da_settings_B1['observations'] = observations
-
-        # Change settings as necessary
-        cbl_settings_B1['perturbations_theta_amplitude'] = sigma_b_init*10
-        cbl_settings_B1['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        da_settings_B1['cbl_settings'] = cbl_settings_B1
-        da_settings_B1['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as
-
-        # Run and save to disk
-        exp_B1 = experiment(da_settings_B1)
-        setattr(exp_B1,'label','B1')
-        pickle.dump(exp_B1, open('exp_B1.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_B1_noPE = dict(cbl_settings_B1)
-            da_settings_B1_noPE = dict(da_settings_B1)
-            cbl_settings_B1_noPE['do_parameter_estimation'] = False
-            da_settings_B1_noPE['nr'] = deepcopy(nature_run)
-            da_settings_B1_noPE['nr'].do_parameter_estimation = False
-            da_settings_B1_noPE['cbl_settings'] = cbl_settings_B1_noPE
-
-            # Run and save to disk
-            exp_B1_noPE = experiment(da_settings_B1_noPE)
-            pickle.dump(exp_B1_noPE, open('exp_B1_noPE.pickle', 'wb'))
-
-        ########################################################################
-        # Create a copy of the default settings
-        # Then re-use the available nature run and derived information
-        cbl_settings_B2 = dict(default_cbl_settings)
-        da_settings_B2 = dict(default_da_settings)
-        da_settings_B2['nr'] = deepcopy(nature_run)
-        da_settings_B2['truths'] = truths
-        da_settings_B2['observations'] = observations
-
-        # Change settings as necessary
-        cbl_settings_B2['perturbations_theta_amplitude'] = sigma_b_init
-        cbl_settings_B2['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        da_settings_B2['cbl_settings'] = cbl_settings_B2
-        da_settings_B2['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
-
-        # Run and save to disk
-        exp_B2 = experiment(da_settings_B2)
-        setattr(exp_B2,'label','B2')
-        pickle.dump(exp_B2, open('exp_B2.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_B2_noPE = dict(cbl_settings_B2)
-            da_settings_B2_noPE = dict(da_settings_B2)
-            cbl_settings_B2_noPE['do_parameter_estimation'] = False
-            da_settings_B2_noPE['nr'] = deepcopy(nature_run)
-            da_settings_B2_noPE['nr'].do_parameter_estimation = False
-            da_settings_B2_noPE['cbl_settings'] = cbl_settings_B2_noPE
-
-            # Run and save to disk
-            exp_B2_noPE = experiment(da_settings_B2_noPE)
-            pickle.dump(exp_B2_noPE, open('exp_B2_noPE.pickle', 'wb'))
-
-        ########################################################################
-        # Create a copy of the default settings
-        # Then re-use the available nature run and derived information
-        cbl_settings_B3 = dict(default_cbl_settings)
-        da_settings_B3 = dict(default_da_settings)
-        da_settings_B3['nr'] = deepcopy(nature_run)
-        da_settings_B3['truths'] = truths
-        da_settings_B3['observations'] = observations
-
-        # Change settings as necessary
-        cbl_settings_B3['perturbations_theta_amplitude'] = sigma_b_init*10
-        cbl_settings_B3['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        da_settings_B3['cbl_settings'] = cbl_settings_B3
-        da_settings_B3['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
-
-        # Run and save to disk
-        exp_B3 = experiment(da_settings_B3)
-        setattr(exp_B3,'label','B3')
-        pickle.dump(exp_B3, open('exp_B3.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_B3_noPE = dict(cbl_settings_B3)
-            da_settings_B3_noPE = dict(da_settings_B3)
-            cbl_settings_B3_noPE['do_parameter_estimation'] = False
-            da_settings_B3_noPE['nr'] = deepcopy(nature_run)
-            da_settings_B3_noPE['nr'].do_parameter_estimation = False
-            da_settings_B3_noPE['cbl_settings'] = cbl_settings_B3_noPE
-
-            # Run and save to disk
-            exp_B3_noPE = experiment(da_settings_B3_noPE)
-            pickle.dump(exp_B3_noPE, open('exp_B3_noPE.pickle', 'wb'))
-
-        ########################################################################
-        # Create a copy of the default settings
-        cbl_settings_B4 = dict(default_cbl_settings)
-        da_settings_B4 = dict(default_da_settings)
-
-        # Change settings as necessary
-        # Changes include generation of observations, so the existing nature run
-        # can't be reused.
-        cbl_settings_B4['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        da_settings_B4['cbl_settings'] = cbl_settings_B4
-        da_settings_B4['obs_error_sdev_generate'] = np.ones(nobs)*sigma_o_as*5
-        da_settings_B4['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
-
-        # Run and save to disk
-        exp_B4 = experiment(da_settings_B4)
-        setattr(exp_B4,'label','B4')
-        pickle.dump(exp_B4, open('exp_B4.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_B4_noPE = dict(cbl_settings_B4)
-            da_settings_B4_noPE = dict(da_settings_B4)
-            cbl_settings_B4_noPE['do_parameter_estimation'] = False
-            da_settings_B4_noPE['cbl_settings'] = cbl_settings_B4_noPE
-
-            # Run and save to disk
-            exp_B4_noPE = experiment(da_settings_B4_noPE)
-            pickle.dump(exp_B4_noPE, open('exp_B4_noPE.pickle', 'wb')) 
-
-        ########################################################################
-
-        # Make plots
         fig, [[ax1, ax2], [ax3, ax4]] = p.subplots(2,2,constrained_layout=True)
         fig.set_size_inches(6,4)
         #
@@ -436,70 +579,6 @@ if __name__ == '__main__':
 
     if fig05:
 
-        ########################################################################
-        # Create a copy of the default settings
-        cbl_settings_C1 = dict(default_cbl_settings)
-        da_settings_C1 = dict(default_da_settings)
-
-        # Re-use the available nature run and derived information
-        da_settings_C1['nr'] = deepcopy(nature_run)
-        da_settings_C1['truths'] = truths
-        da_settings_C1['observations'] = observations
-
-        # Change settings as necessary
-        cbl_settings_C1['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        cbl_settings_C1['is_cgrad'] = False
-        da_settings_C1['cbl_settings'] = cbl_settings_C1
-
-        # Run and save to disk
-        exp_C1 = experiment(da_settings_C1)
-        setattr(exp_C1,'label','C1')
-        pickle.dump(exp_C1, open('exp_C1.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_C1_noPE = dict(cbl_settings_C1)
-            da_settings_C1_noPE = dict(da_settings_C1)
-            cbl_settings_C1_noPE['do_parameter_estimation'] = False
-            da_settings_C1_noPE['cbl_settings'] = cbl_settings_C1_noPE
-
-            # Run and save to disk
-            exp_C1_noPE = experiment(da_settings_C1_noPE)
-            pickle.dump(exp_C1_noPE, open('exp_C1_noPE.pickle', 'wb')) 
-
-        ########################################################################
-        # Create a copy of the default settings
-        cbl_settings_C2 = dict(default_cbl_settings)
-        da_settings_C2 = dict(default_da_settings)
-
-        # Re-use the available nature run and derived information
-        da_settings_C2['nr'] = deepcopy(nature_run)
-        da_settings_C2['truths'] = truths
-        da_settings_C2['observations'] = observations
-
-        # Change settings as necessary
-        cbl_settings_C2['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        cbl_settings_C2['Hmax'] = 0.15
-        da_settings_C2['cbl_settings'] = cbl_settings_C2
-
-        # Run and save to disk
-        exp_C2 = experiment(da_settings_C2)
-        setattr(exp_C2,'label','C2')
-        pickle.dump(exp_C2, open('exp_C2.pickle', 'wb')) 
-
-        if noPE_runs:
-            # Corresponding experiment without parameter estimation
-            cbl_settings_C2_noPE = dict(cbl_settings_C2)
-            da_settings_C2_noPE = dict(da_settings_C2)
-            cbl_settings_C2_noPE['do_parameter_estimation'] = False
-            da_settings_C2_noPE['cbl_settings'] = cbl_settings_C2_noPE
-
-            # Run and save to disk
-            exp_C2_noPE = experiment(da_settings_C2_noPE)
-            pickle.dump(exp_C2_noPE, open('exp_C2_noPE.pickle', 'wb')) 
-
-        ########################################################################
-        # Make plots
         fig, [ax1, ax2] = p.subplots(1,2,constrained_layout=True)
         fig.set_size_inches(6,2)
         #
@@ -550,29 +629,6 @@ if __name__ == '__main__':
 
     if fig07:
 
-        # Create a copy of the default settings
-        cbl_settings_D = dict(default_cbl_settings)
-        da_settings_D = dict(default_da_settings)
-
-        # Change settings as necessary
-        # Changes include generation of observations, so the existing nature run
-        # can't be reused.
-        cbl_settings_D['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        cbl_settings_D['perturbations_theta_amplitude'] = sigma_b_init*10
-        cbl_settings_D['Hmax'] = 0.15
-        cbl_settings_D['is_cgrad'] = False
-        cbl_settings_D['simulate_error_growth'] = True
-        cbl_settings_D['error_growth_perturbations_amplitude'] = sigma_b_init*10
-        da_settings_D['cbl_settings'] = cbl_settings_D
-        da_settings_D['obs_error_sdev_generate'] = np.ones(nobs)*sigma_o_as*5
-        da_settings_D['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
-
-        # Run and save to disk
-        exp_D = experiment(da_settings_D)
-        setattr(exp_D,'label','D')
-        pickle.dump(exp_D, open('exp_D.pickle', 'wb')) 
-
-        # Make plots
         fig, [[ax0, ax1],[ax2,ax3]] = p.subplots(2,2,constrained_layout=True)
         fig.set_size_inches(6,6)
         #
@@ -600,41 +656,15 @@ if __name__ == '__main__':
 
     if fig08:
 
-        # Create a copy of the default settings
-        cbl_settings_D = dict(default_cbl_settings)
-        da_settings_D = dict(default_da_settings)
-
-        # Change settings as necessary
-        # Changes include generation of observations, so the existing nature run
-        # can't be reused.
-        cbl_settings_D['initial_perturbed_parameters'] = exp_A.da.initial_perturbed_parameters
-        cbl_settings_D['perturbations_theta_amplitude'] = sigma_b_init*10
-        cbl_settings_D['Hmax'] = 0.15
-        cbl_settings_D['is_cgrad'] = False
-        cbl_settings_D['simulate_error_growth'] = True
-        cbl_settings_D['error_growth_perturbations_amplitude'] = sigma_b_init*10
-        da_settings_D['cbl_settings'] = cbl_settings_D
-        da_settings_D['obs_error_sdev_generate'] = np.ones(nobs)*sigma_o_as*10
-        da_settings_D['obs_error_sdev_assimilate'] = np.ones(nobs)*sigma_o_as*10
-
-        # Experiment matching D, but without parameter estimation
-        cbl_settings_D_noPE = dict(cbl_settings_D)
-        da_settings_D_noPE = dict(da_settings_D)
-        cbl_settings_D_noPE['do_parameter_estimation'] = False
-        da_settings_D_noPE['cbl_settings'] = cbl_settings_D_noPE
-
-        exp_D = pickle.load(open("exp_D.pickle", "rb"))
-        try:
-            exp_D_noPE = pickle.load(open("exp_D_noPE.pickle", "rb"))
-        except:
-            exp_D_noPE = experiment(da_settings_D_noPE)
-            pickle.dump(exp_A_noPE, open('exp_D_noPE.pickle', 'wb')) 
+        experiments_pe = [exp_A]
+        experiments_nope = [exp_A_noPE]
+        labels = ["Exp. A"]
+        plot_diagnostics(experiments_pe,experiments_nope,labels,'fig08a.png')
 
         experiments_pe = [exp_D]
         experiments_nope = [exp_D_noPE]
         labels = ["Exp. D"]
-
-        plot_diagnostics(experiments_pe,experiments_nope,labels,'fig08.png')
+        plot_diagnostics(experiments_pe,experiments_nope,labels,'fig08d.png')
 
     if opt01: