map_func = map

    for su_type in range(SU):
        for file_num in range(NUM_FILES):
            bins_surrogates = np.zeros((SU, NUM_SURR / NUM_FILES,
                                        sg.data.shape[1], sg.data.shape[2], 8))
            bins_surrogates_var = np.zeros_like(bins_surrogates)
            for surr_completed in range(NUM_SURR / NUM_FILES):
                # create surrogates field
                if (SURR_TYPE == 'MF') or (SURR_TYPE == 'ALL'
                                           and su_type == 0):
                    sg.construct_multifractal_surrogates(pool=pool)
                    sg.add_seasonality(0, var, trend)
                elif (SURR_TYPE == 'FT') or (SURR_TYPE == 'ALL'
                                             and su_type == 1):
                    sg.construct_fourier_surrogates_spatial(pool=pool)
                    sg.add_seasonality(0, var, trend)
                elif (SURR_TYPE == 'AR') or (SURR_TYPE == 'ALL'
                                             and su_type == 2):
                    sg.construct_surrogates_with_residuals(pool=pool)
                    sg.add_seasonality(0, var[:-1, ...], trend[:-1, ...])

                # oscillatory modes
                phase_surrs = np.zeros_like(sg.surr_data)
                job_args = [(i, j, s0, sg.surr_data[:, i, j])
                            for i in range(sg.lats.shape[0])
                            for j in range(sg.lons.shape[0])]
                job_result = map_func(_get_oscillatory_modes, job_args)
                del job_args
                # map results
                for i, j, ph in job_result:
        map_func = pool.map
    else:
        pool = None
        map_func = map
    
    for su_type in range(SU):
        for file_num in range(NUM_FILES):
            bins_surrogates = np.zeros((SU, NUM_SURR/NUM_FILES, sg.data.shape[1], sg.data.shape[2], 8))
            bins_surrogates_var = np.zeros_like(bins_surrogates)
            for surr_completed in range(NUM_SURR/NUM_FILES):
                # create surrogates field
                if (SURR_TYPE == 'MF') or (SURR_TYPE == 'ALL' and su_type == 0):
                    sg.construct_multifractal_surrogates(pool = pool)
                    sg.add_seasonality(0, var, trend)
                elif (SURR_TYPE == 'FT') or (SURR_TYPE == 'ALL' and su_type == 1):
                    sg.construct_fourier_surrogates_spatial(pool = pool)
                    sg.add_seasonality(0, var, trend)
                elif (SURR_TYPE == 'AR') or (SURR_TYPE == 'ALL' and su_type == 2):
                    sg.construct_surrogates_with_residuals(pool = pool)
                    sg.add_seasonality(0, var[:-1, ...], trend[:-1, ...])
            
                # oscillatory modes
                phase_surrs = np.zeros_like(sg.surr_data)
                job_args = [ (i, j, s0, sg.surr_data[:, i, j]) for i in range(sg.lats.shape[0]) for j in range(sg.lons.shape[0]) ]
                job_result = map_func(_get_oscillatory_modes, job_args)
                del job_args
                # map results
                for i, j, ph in job_result:
                    phase_surrs[:, i, j] = ph
                del job_result