diff --git a/config/cfg.py b/config/cfg.py
index a44bc18f9963904984fac0f84f145a0f23fcc9e3..caac5e7b64fbf55403cbe60238589b19fd669ca7 100755
--- a/config/cfg.py
+++ b/config/cfg.py
@@ -9,13 +9,13 @@ class ExperimentConfiguration(object):
 
 
 exp = ExperimentConfiguration()
-exp.expname = "exp_v1.16_P0-4_Radar"
+exp.expname = "exp_v1.16_P1_40mem"
 exp.model_dx = 2000
-exp.timestep = 10
+exp.timestep = 8
 exp.n_ens = 40
 exp.n_nodes = 10
 
-n_obs = 1600  # so: 64:8x8 rad:10; 10km res: 1600:40x40  # radar: n_obs for each observation height level
+n_obs = 1600  # 50km res: 64:8x8; 10km res: 1600:40x40  # radar: n_obs for each observation height level
 
 vis = dict(plotname='VIS 0.6µm',  plotunits='[1]',
            kind='MSG_4_SEVIRI_BDRF',
@@ -34,17 +34,17 @@ radar = dict(plotname='Radar reflectivity', plotunits='[dBz]',
              kind='RADAR_REFLECTIVITY', 
              n_obs=n_obs, err_std=5.,
              heights=np.arange(1000, 15001, 1000),
-             cov_loc_radius_km=20, cov_loc_vert_km=2)
+             cov_loc_radius_km=30, cov_loc_vert_km=4)
 
 t2m = dict(plotname='SYNOP Temperature', plotunits='[K]',
-           kind='SYNOP_TEMPERATURE', n_obs=n_obs, err_std=0.5, 
-           cov_loc_radius_km=32, cov_loc_vert_km=1)
+           kind='SYNOP_TEMPERATURE', n_obs=n_obs, err_std=0.1, 
+           cov_loc_radius_km=20, cov_loc_vert_km=3)
 psfc = dict(plotname='SYNOP Pressure', plotunits='[dBz]',
             kind='SYNOP_SURFACE_PRESSURE', n_obs=n_obs, err_std=50.,
             cov_loc_radius_km=32, cov_loc_vert_km=5)
 
 
-exp.observations = [radar, ] #ir108, vis, wv73]  # ir108, wv73, vis]
+exp.observations = [ ] #ir108, vis, wv73]  # ir108, wv73, vis]
 
 # directory paths depend on the name of the experiment
 cluster.expname = exp.expname
diff --git a/config/clusters.py b/config/clusters.py
index 9ca2e2eb83b45286476b2495caee3de0a8e1a1a6..792d80e97c4fd92e98b492419b8a84216264f1e9 100755
--- a/config/clusters.py
+++ b/config/clusters.py
@@ -26,9 +26,9 @@ vsc.dart_srcdir = '/home/fs71386/lkugler/DART/DART-9.9.0/models/wrf/work'
 vsc.dartrundir = '/home/fs71386/lkugler/run_DART'
 vsc.scriptsdir = '/home/fs71386/lkugler/DART-WRF/scripts'
 
-vsc.nature_wrfout = '/home/fs71386/lkugler/data/sim_archive/exp_v1.16_P0_nature/2008-07-30_06:00/4/wrfout_d01_%Y-%m-%d_%H:%M:%S'
-#vsc.input_profile = '/home/fs71386/lkugler/wrf_sounding/data/wrf/ens/from_LMU/raso.nat.<iens>.wrfprof'
-vsc.input_profile = '/home/fs71386/lkugler/wrf_sounding/data/wrf/ens/from_LMU/raso.raso.<iens>.wrfprof'
+vsc.nature_wrfout = '/home/fs71386/lkugler/data/sim_archive/exp_v1.16_P1_nature/2008-07-30_06:00/1/wrfout_d01_%Y-%m-%d_%H:%M:%S'
+#vsc.input_profile = '/home/fs71386/lkugler/wrf_profiles/data/wrf/ens/from_LMU/raso.nat.<iens>.wrfprof'
+vsc.input_profile = '/home/fs71386/lkugler/wrf_profiles/data/wrf/ens/2021-05-04/raso.fc.<iens>.wrfprof'
 
 vsc.ideal = vsc.userdir+'/compile/bin/ideal-v4.2.2_v1.16.exe'
 vsc.wrfexe = vsc.userdir+'/compile/bin/wrf-v4.2.2_v1.16.exe'
diff --git a/scheduler.py b/scheduler.py
index 225bacf477a39cd2a6767fe10afc6581894c6864..7828ed16decc8be2cc2a1760ce02feab78833e4b 100755
--- a/scheduler.py
+++ b/scheduler.py
@@ -3,24 +3,24 @@
 high level control script
 submitting jobs into SLURM queue
 """
-import os, sys, shutil
+import os, sys, shutil, glob
 import datetime as dt
 from slurmpy import Slurm
 
 from config.cfg import exp, cluster
 from scripts.utils import script_to_str, symlink
 
-if __name__ == "__main__":
-    # necessary to find modules in folder, since SLURM runs the script elsewhere
-    sys.path.append(os.getcwd())
 
-    # allow scripts to access the configuration
-    symlink(cluster.scriptsdir+'/../config', cluster.scriptsdir+'/config')
+# necessary to find modules in folder, since SLURM runs the script elsewhere
+sys.path.append(os.getcwd())
+
+# allow scripts to access the configuration
+symlink(cluster.scriptsdir+'/../config', cluster.scriptsdir+'/config')
 
-    log_dir = cluster.archivedir()+'/logs/'
-    slurm_scripts_dir = cluster.archivedir()+'/slurm-scripts/'
-    print('logging to', log_dir)
-    print('scripts, which are submitted to SLURM:', slurm_scripts_dir)
+log_dir = cluster.archivedir()+'/logs/'
+slurm_scripts_dir = cluster.archivedir()+'/slurm-scripts/'
+print('logging to', log_dir)
+print('scripts, which are submitted to SLURM:', slurm_scripts_dir)
 
 def my_Slurm(*args, cfg_update=dict(), **kwargs):
     """Shortcut to slurmpy's class; keep certain default kwargs
@@ -68,7 +68,7 @@ def backup_scripts():
 def prepare_wrfinput():
     """Create WRF/run directories and wrfinput files
     """
-    s = my_Slurm("prep_wrfinput", cfg_update={"time": "5", "mail-type": "BEGIN"})
+    s = my_Slurm("prep_wrfinput", cfg_update={"time": "10", "mail-type": "BEGIN"})
     id = s.run(cluster.python+' '+cluster.scriptsdir+'/prepare_wrfinput.py')
 
     cmd = """# run ideal.exe in parallel, then add geodata
@@ -148,7 +148,7 @@ def run_ENS(begin, end, depends_on=None, first_minute=True):
             depends_on=[id])
 
     time_in_simulation_hours = (end-begin).total_seconds()/3600
-    runtime_wallclock_mins_expected = int(6+time_in_simulation_hours*10)  # usually below 8 min/hour
+    runtime_wallclock_mins_expected = int(6+time_in_simulation_hours*10)  # usually below 9 min/hour
     s = my_Slurm("runWRF2", cfg_update={"nodes": "1", "array": "1-"+str(exp.n_nodes),
                 "time": str(runtime_wallclock_mins_expected), "mem-per-cpu": "2G"})
     cmd = script_to_str(cluster.run_WRF).replace('<expname>', exp.expname)
@@ -194,7 +194,7 @@ def assimilate(assim_time, prior_init_time,
     s = my_Slurm("Assim", cfg_update={"nodes": "1", "ntasks": "96", "time": "30",
                              "mem": "300G", "ntasks-per-node": "96", "ntasks-per-core": "2"})
     id = s.run(cluster.python+' '+cluster.scriptsdir+'/assim_synth_obs.py '
-               +time.strftime('%Y-%m-%d_%H:%M'), depends_on=[id])
+               +assim_time.strftime('%Y-%m-%d_%H:%M'), depends_on=[id])
  
     # # actuall assimilation step
     # s = my_Slurm("Assim", cfg_update=dict(nodes="1", ntasks="48", time="50", mem="200G"))
@@ -224,18 +224,22 @@ def mailme(depends_on=None):
         s = my_Slurm("AllFinished", cfg_update={"time": "1", "mail-type": "BEGIN"})
         s.run('sleep 1', depends_on=[depends_on])
 
+def gen_obsseq(depends_on=None):
+    s = my_Slurm("obsseq_netcdf", cfg_update={"time": "10", "mail-type": "FAIL,END"})
+    s.run(cluster.python+' '+cluster.scriptsdir+'/obsseq_to_netcdf.py',
+          depends_on=[depends_on])
 
 ################################
 if __name__ == "__main__":
     print('starting osse')
 
-    timedelta_integrate = dt.timedelta(minutes=45)
-    timedelta_btw_assim = dt.timedelta(minutes=30)
+    timedelta_integrate = dt.timedelta(minutes=75)
+    timedelta_btw_assim = dt.timedelta(minutes=60)
 
     backup_scripts()
     id = None
 
-    start_from_existing_state = True
+    start_from_existing_state = False
     is_new_run = not start_from_existing_state
 
     if is_new_run:
@@ -265,7 +269,7 @@ if __name__ == "__main__":
     assim_time = integration_end_time
     prior_init_time = init_time
 
-    while time <= dt.datetime(2008, 7, 30, 15):
+    while time <= dt.datetime(2008, 7, 30, 20):
 
         id = assimilate(assim_time,
                         prior_init_time,
@@ -290,4 +294,4 @@ if __name__ == "__main__":
         assim_time = time
         prior_init_time = time - timedelta_btw_assim
 
-    mailme(id)
+    gen_obsseq(id)   # mailme(id)
diff --git a/scripts/assim_synth_obs.py b/scripts/assim_synth_obs.py
index 57e519dbf06480a68428dd948f8ff98bfd2b7119..818fdfb6668e6b5f9d5f208be89d3466f4c621b2 100755
--- a/scripts/assim_synth_obs.py
+++ b/scripts/assim_synth_obs.py
@@ -83,9 +83,9 @@ def set_DART_nml(sat_channel=False, cov_loc_radius_km=32, cov_loc_vert_km=False,
                '<cov_loc_radian>': str(cov_loc_radian)}
 
     if cov_loc_vert_km:
-        cov_loc_vert_rad = cov_loc_vert_km*1000/cov_loc_radian
+        vert_norm_rad = earth_radius_km*cov_loc_vert_km/cov_loc_radius_km*1000
         options['<horiz_dist_only>'] = '.false.'
-        options['<vert_norm_hgt>'] = str(cov_loc_vert_rad)
+        options['<vert_norm_hgt>'] = str(vert_norm_rad)
     else:
         options['<horiz_dist_only>'] = '.true.'
         options['<vert_norm_hgt>'] = '50000.0'  # dummy value
@@ -309,7 +309,7 @@ if __name__ == "__main__":
         prepare_nature_dart(time)  # link WRF files to DART directory
         run_perfect_model_obs()  # actually create observations that are used to assimilate
 
-        #for iens in range(1,41):
+        # for iens in range(1,41):
         #    os.system('ncks -A -v Times '+cluster.dartrundir+'/wrfout_d01 '+cluster.dartrundir+'/advance_temp'+str(iens)+'/wrfout_d01')
 
         assimilate()
diff --git a/scripts/obsseq_to_netcdf.py b/scripts/obsseq_to_netcdf.py
index 1e4f07450c07b1b250752da6ee25763e7edff470..7b27de9a7ae752101689dae81b70d66dbf986a8e 100644
--- a/scripts/obsseq_to_netcdf.py
+++ b/scripts/obsseq_to_netcdf.py
@@ -17,7 +17,7 @@ if __name__ == '__main__':
 
     for dir_name in listdir_dirs(ddir):
         files = sorted(glob.glob(ddir+'/'+dir_name+'/*.final'))  
-        #rod.run_obsdiag(files, f_out=ddir+'/obsdiag_'+dir_name+'.nc') 
+        # rod.run_obsdiag(files, f_out=ddir+'/obsdiag_'+dir_name+'.nc')
         rod.run_obs_seq_to_netcdf(files, f_out=ddir+'/obs_epoch-'+dir_name+'.nc') 
 
     ddir = datadir+exp.expname+'/obs_seq_final_1min/'
diff --git a/scripts/prepare_wrfinput.py b/scripts/prepare_wrfinput.py
index 648f83fa65ffb4d042e8d38f9d7525475049d6d3..d89a5630374b12ac6036243dd270c26387fa5564 100755
--- a/scripts/prepare_wrfinput.py
+++ b/scripts/prepare_wrfinput.py
@@ -16,8 +16,9 @@ for iens in range(1, exp.n_ens+1):
     symlink(cluster.ideal, rundir+'/ideal.exe')
     symlink(cluster.wrfexe, rundir+'/wrf.exe')
 
+    # time not important, but general settings
     prepare_namelist.run(iens, begin=dt.datetime(2008, 7, 30, 6, 0),
-                         end=dt.datetime(2008, 7, 30, 6, 30)) # not necessary
+                         end=dt.datetime(2008, 7, 30, 6, 30))
 
     symlink(input_prof, rundir+'/input_sounding')
 print('finished.')
diff --git a/scripts/update_wrfinput_from_filteroutput.py b/scripts/update_wrfinput_from_filteroutput.py
index 671124b024df58e7ff87d132dbc7e308938dea12..1f7a46ba42312b437c4f57e55b53810937ca0b94 100755
--- a/scripts/update_wrfinput_from_filteroutput.py
+++ b/scripts/update_wrfinput_from_filteroutput.py
@@ -3,7 +3,7 @@ import datetime as dt
 import netCDF4 as nc
 
 from config.cfg import exp, cluster
-from utils import symlink, copy_scp_srvx8, copy, mkdir, mkdir_srvx8, clean_wrfdir
+from utils import symlink, copy, mkdir, clean_wrfdir
 
 time = dt.datetime.strptime(sys.argv[1], '%Y-%m-%d_%H:%M')
 background_init_time = dt.datetime.strptime(sys.argv[2], '%Y-%m-%d_%H:%M')
diff --git a/scripts/utils.py b/scripts/utils.py
index 2b331b160b2189a6c7242b91a94274517ac608ba..ee07206888c2afeae196564c90385c1cc2f5fc2f 100755
--- a/scripts/utils.py
+++ b/scripts/utils.py
@@ -37,10 +37,12 @@ def clean_wrfdir(dir):
 
 def symlink(src, dst):
     try:
+        os.symlink(src, dst)
+    except FileExistsError:
         os.remove(dst)
+        os.symlink(src, dst)
     except Exception as e:
-        pass
-    os.symlink(src, dst)
+        raise e
 
 def link_contents(src, dst):
     for f in os.listdir(src):