diff --git a/beamform.py b/beamform.py
index 02eeed8..070c76d 100644
--- a/beamform.py
+++ b/beamform.py
@@ -6,9 +6,10 @@ from chainer import Variable
 from chainer import cuda
 from chainer import serializers
 from tqdm import tqdm
+import sys
 
-from chime_data import gen_flist_simu, \
-    gen_flist_real, get_audio_data, get_audio_data_with_context
+from chime_data import gen_flist_simu, gen_flist_2ch,\
+    gen_flist_real, get_audio_data, get_audio_data_1ch, get_audio_data_with_context
 from fgnt.beamforming import gev_wrapper_on_masks
 from fgnt.signal_processing import audiowrite, stft, istft
 from fgnt.utils import Timer
@@ -20,6 +21,8 @@ parser.add_argument('flist',
                     help='Name of the flist to process (e.g. tr05_simu)')
 parser.add_argument('chime_dir',
                     help='Base directory of the CHiME challenge.')
+parser.add_argument('sim_dir',
+                    help='Base directory of the CHiME challenge simulated data.')
 parser.add_argument('output_dir',
                     help='The directory where the enhanced wav files will '
                          'be stored.')
@@ -29,6 +32,10 @@ parser.add_argument('model_type',
                     help='Type of model (BLSTM or FW)')
 parser.add_argument('--gpu', '-g', default=-1, type=int,
                     help='GPU ID (negative value indicates CPU)')
+parser.add_argument('--single', '-s', default=0, type=int,
+                    help='0 for multi-channel and channel number (1-6) for single channel')
+parser.add_argument('--track', '-t', default=6, type=int,
+                    help='1, 2 or 6 depending on the data used')
 args = parser.parse_args()
 
 # Prepare model
@@ -48,11 +55,35 @@ xp = np if args.gpu < 0 else cuda.cupy
 stage = args.flist[:2]
 scenario = args.flist.split('_')[-1]
 
+if stage == 'tr' and (args.track == 1 or args.track == 2):
+    print("No train data for 1ch track and 2ch track");
+    sys.exit(0);
+
 # CHiME data handling
 if scenario == 'simu':
-    flist = gen_flist_simu(args.chime_dir, stage)
+    if args.track == 6:
+        flist = gen_flist_simu(args.chime_dir, args.sim_dir, stage)
+    elif args.track == 2:
+        flist = gen_flist_2ch(args.chime_dir, stage, scenario)
+    elif args.track == 1:
+        flist = list()
+        for env in ['caf', 'bus', 'str', 'ped']:
+            flist_temp = os.listdir(os.path.join(args.chime_dir, 'audio', '16kHz', 'isolated_1ch_track', '{}05_{}_{}'.format(stage, env, scenario)))
+            flist_ext = [i for i in flist_temp if i.endswith('.wav')]
+            flist_with_dir = [os.path.join(args.chime_dir, 'audio', '16kHz', 'isolated_1ch_track', '{}05_{}_{}'.format(stage, env, scenario), i) for i in flist_ext]
+            flist = flist + flist_with_dir
 elif scenario == 'real':
-    flist = gen_flist_real(args.chime_dir, stage)
+    if args.track == 6:
+        flist = gen_flist_real(args.chime_dir, stage)
+    elif args.track == 2:
+        flist = gen_flist_2ch(args.chime_dir, stage, scenario)
+    elif args.track == 1:
+        flist = list()
+        for env in ['caf', 'bus', 'str', 'ped']:
+            flist_temp = os.listdir(os.path.join(args.chime_dir, 'audio', '16kHz', 'isolated_1ch_track', '{}05_{}_{}'.format(stage, env, scenario)))
+            flist_ext = [i for i in flist_temp if i.endswith('.wav')]
+            flist_with_dir = [os.path.join(args.chime_dir, 'audio', '16kHz', 'isolated_1ch_track', '{}05_{}_{}'.format(stage, env, scenario), i) for i in flist_ext]
+            flist = flist + flist_with_dir
 else:
     raise ValueError('Unknown flist {}'.format(args.flist))
 
@@ -67,12 +98,19 @@ t_beamform = 0
 # Beamform loop
 for cur_line in tqdm(flist):
     with Timer() as t:
-        if scenario == 'simu':
+        if args.track == 6:
+            if scenario == 'simu':
+                audio_data = get_audio_data(cur_line)
+                context_samples = 0
+            elif scenario == 'real':
+                audio_data, context_samples = get_audio_data_with_context(
+                        cur_line[0], cur_line[1], cur_line[2])
+        elif args.track == 2:
             audio_data = get_audio_data(cur_line)
             context_samples = 0
-        elif scenario == 'real':
-            audio_data, context_samples = get_audio_data_with_context(
-                    cur_line[0], cur_line[1], cur_line[2])
+        elif args.track == 1:
+            audio_data = get_audio_data_1ch(cur_line)
+            context_samples = 0
     t_io += t.msecs
     Y = stft(audio_data, time_dim=1).transpose((1, 0, 2))
     Y_var = Variable(np.abs(Y).astype(np.float32), True)
@@ -85,28 +123,45 @@ for cur_line in tqdm(flist):
     t_net += t.msecs
 
     with Timer() as t:
-        N_mask = np.median(N_masks.data, axis=1)
-        X_mask = np.median(X_masks.data, axis=1)
-        Y_hat = gev_wrapper_on_masks(Y, N_mask, X_mask)
+        if args.single >= 1 or args.track == 1:
+            Y_hat = X_masks.data * Y
+        elif args.single == 0:
+            N_mask = np.median(N_masks.data, axis=1)
+            X_mask = np.median(X_masks.data, axis=1)
+            Y_hat = gev_wrapper_on_masks(Y, N_mask, X_mask)
     t_beamform += t.msecs
 
-    if scenario == 'simu':
-        wsj_name = cur_line.split('/')[-1].split('_')[1]
-        spk = cur_line.split('/')[-1].split('_')[0]
-        env = cur_line.split('/')[-1].split('_')[-1]
-    elif scenario == 'real':
-        wsj_name = cur_line[3]
-        spk = cur_line[0].split('/')[-1].split('_')[0]
-        env = cur_line[0].split('/')[-1].split('_')[-1]
+    if args.track == 1:
+        env = cur_line.split('/')[-1].split('_')[2].split('.')[0]
+        filename = os.path.join(args.output_dir, '{}05_{}_{}'.format(stage, env.lower(), scenario), os.path.basename(cur_line))
+    else:
+        if scenario == 'simu' or args.track == 2:
+            wsj_name = cur_line.split('/')[-1].split('_')[1]
+            spk = cur_line.split('/')[-1].split('_')[0]
+            env = cur_line.split('/')[-1].split('_')[-1]
+        elif scenario == 'real':
+            wsj_name = cur_line[3]
+            spk = cur_line[0].split('/')[-1].split('_')[0]
+            env = cur_line[0].split('/')[-1].split('_')[-1]
 
-    filename = os.path.join(
-            args.output_dir,
-            '{}05_{}_{}'.format(stage, env.lower(), scenario),
-            '{}_{}_{}.wav'.format(spk, wsj_name, env.upper())
-    )
-    with Timer() as t:
-        audiowrite(istft(Y_hat)[context_samples:], filename, 16000, True, True)
-    t_io += t.msecs
+        filename = os.path.join(
+                args.output_dir,
+                '{}05_{}_{}'.format(stage, env.lower(), scenario),
+                '{}_{}_{}.wav'.format(spk, wsj_name, env.upper())
+        )
+    if args.track == 1:
+        with Timer() as t:
+            audiowrite(istft(Y_hat[:,0,:])[int(context_samples):], filename, 16000, True, True)
+        t_io += t.msecs
+    elif args.single == 0:
+        with Timer() as t:
+            audiowrite(istft(Y_hat)[int(context_samples):], filename, 16000, True, True)
+        t_io += t.msecs
+    elif args.single >= 1:
+        ch = args.single
+        with Timer() as t:
+            audiowrite(istft(Y_hat[:,ch-1,:])[int(context_samples):], filename, 16000, True, True)
+        t_io += t.msecs
 
 print('Finished')
 print('Timings: I/O: {:.2f}s | Net: {:.2f}s | Beamformer: {:.2f}s'.format(
diff --git a/beamform.sh b/beamform.sh
index 3c7de5a..aaae10d 100755
--- a/beamform.sh
+++ b/beamform.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 
 for flist in tr05_simu tr05_real dt05_simu dt05_real et05_simu et05_real; do
-    python beamform.py $flist "$@"
-done
\ No newline at end of file
+     $HOME/miniconda3/bin/python local/nn-gev/beamform.py $flist "$@"
+done
diff --git a/chime_data.py b/chime_data.py
index 0072e1b..641d9d3 100644
--- a/chime_data.py
+++ b/chime_data.py
@@ -11,7 +11,7 @@ from fgnt.signal_processing import stft
 from fgnt.utils import mkdir_p
 
 
-def gen_flist_simu(chime_data_dir, stage, ext=False):
+def gen_flist_simu(chime_data_dir, dest_dir, stage, ext=False):
     with open(os.path.join(
             chime_data_dir, 'annotations',
             '{}05_{}.json'.format(stage, 'simu'))) as fid:
@@ -21,7 +21,7 @@ def gen_flist_simu(chime_data_dir, stage, ext=False):
     else:
         isolated_dir = 'isolated'
     flist = [os.path.join(
-            chime_data_dir, 'audio', '16kHz', isolated_dir,
+            dest_dir, 'audio', '16kHz', isolated_dir,
             '{}05_{}_{}'.format(stage, a['environment'].lower(), 'simu'),
             '{}_{}_{}'.format(a['speaker'], a['wsj_name'], a['environment']))
              for a in annotations]
@@ -39,11 +39,33 @@ def gen_flist_real(chime_data_dir, stage):
     return flist_tuples
 
 
+def gen_flist_2ch(chime_data_dir, stage, scenario):
+    with open(os.path.join(
+            chime_data_dir, 'annotations',
+            '{}05_{}.json'.format(stage, scenario))) as fid:
+        annotations = json.load(fid)
+    flist = [os.path.join(
+            chime_data_dir, 'audio', '16kHz', 'isolated_2ch_track',
+            '{}05_{}_{}'.format(stage, a['environment'].lower(), scenario),
+            '{}_{}_{}'.format(a['speaker'], a['wsj_name'], a['environment']))
+             for a in annotations]
+    return flist
+
+
+def get_audio_data_1ch(filename):
+    audio_data = list()
+    audio_data.append(audioread(filename)[None, :])
+    audio_data = np.concatenate(audio_data, axis=0)
+    audio_data = audio_data.astype(np.float32)
+    return audio_data
+
+
 def get_audio_data(file_template, postfix='', ch_range=range(1, 7)):
     audio_data = list()
     for ch in ch_range:
-        audio_data.append(audioread(
-                file_template + '.CH{}{}.wav'.format(ch, postfix))[None, :])
+        if os.path.isfile(file_template + '.CH{}{}.wav'.format(ch, postfix)):
+            audio_data.append(audioread(
+                    file_template + '.CH{}{}.wav'.format(ch, postfix))[None, :])
     audio_data = np.concatenate(audio_data, axis=0)
     audio_data = audio_data.astype(np.float32)
     return audio_data
@@ -65,7 +87,7 @@ def get_audio_data_with_context(embedded_template, t_start, t_end,
 
 def prepare_training_data(chime_data_dir, dest_dir):
     for stage in ['tr', 'dt']:
-        flist = gen_flist_simu(chime_data_dir, stage, ext=True)
+        flist = gen_flist_simu(chime_data_dir, dest_dir, stage, ext=True)
         export_flist = list()
         mkdir_p(os.path.join(dest_dir, stage))
         for f in tqdm.tqdm(flist, desc='Generating data for {}'.format(stage)):
