def main(args):
    if args.v:
        print args
        print "Checking value of args.useDefaultParams=", args.useDefaultParams
    if args.useDefaultParams:
        if args.v:
            # retrieving params with function
            print "Using default parameters"
        (
            sp,
            ep,
            root_path,
            utterances_path,
            file_indices,
            num_mix_params,
            test_path,
            train_path,
            train_example_lengths,
            train_file_indices,
            test_example_lengths,
            test_file_indices,
        ) = get_params(args)
    else:
        # need to change this to something else
        (
            sp,
            ep,
            root_path,
            utterances_path,
            file_indices,
            num_mix_params,
            test_path,
            train_path,
            train_example_lengths,
            train_file_indices,
            test_example_lengths,
            test_file_indices,
        ) = get_params(args)
    file_indices = get_file_indices(args.fileIndicesPath, args.dataPath)
    if args.limitFileIndices > -1:
        if args.v:
            print "Limiting file indices to length %d" % args.limitFileIndices
        file_indices = file_indices[: args.limitFileIndices]
    elif args.v:
        print "No limit on file indices"

    if args.partsPath != "":
        if args.v:
            print "Loading in parts from %s" % args.partsPath
        EParts = np.clip(np.load(args.partsPath), 0.01, 0.99)
        logParts = np.log(EParts).astype(np.float64)
        logInvParts = np.log(1 - EParts).astype(np.float64)

    if args.printEdgeDistribution:
        edge_distribution = getEdgeDistribution(file_indices, args.hw, file_indices_chunks=args.file_indices_chunks)
    elif args.edgeQuantileComparison != "":
        for fl_id, fl in enumerate(file_indices):
            if args.v:
                print fl_id
            utterance = gtrd.makeUtterance(args.dataPath, fl)
            print sp, args.mel_smoothing_kernel
            S = gtrd.get_spectrogram(utterance.s, sp, mel_smoothing_kernel=args.mel_smoothing_kernel)
            E, edge_feature_row_breaks, edge_orientations = esp._edge_map_no_threshold(S.T)
            E2 = np.empty((E.shape[0] / 8, E.shape[1], 8))
            for i in xrange(8):
                E2[:, :, i] = E[E.shape[0] / 8 * i : E.shape[0] / 8 * (i + 1), :]
            print E2.shape, S.shape
            visualize_spec_and_quantiles(
                "%s_%d" % (args.edgeQuantileComparison, fl_id), E2, S, args.quantileSet, args.blockLengthSet
            )
    elif args.createBackgroundMixture > 0:
        pass
    elif args.getUnclippedBackground != "":
        # initialize the background
        if args.v:
            print "Initializing average background to be computed over parts"
        avg_bgd = gtrd.AverageBackground()
        for fl_id, fl in enumerate(file_indices):
            if args.v:
                print fl_id
            utterance = gtrd.makeUtterance(args.dataPath, fl)
            print sp, args.mel_smoothing_kernel
            S = gtrd.get_spectrogram(utterance.s, sp, mel_smoothing_kernel=args.mel_smoothing_kernel)
            E = gtrd.get_edge_features(S.T, ep, verbose=False)
            if args.seeBackgroundEstimatePlots != "":
                visualize_edge_on_specs("%s_%d.png" % (args.seeBackgroundEstimatePlots, fl_id), E, S)
            out = code_parts.code_parts(E.astype(np.uint8), logParts, logInvParts, args.bernsteinEdgeThreshold)
            max_responses = np.argmax(out, -1)
            if args.bernsteinPreSpreadVisualizeOnSpec != "":
                # cycle over all parts
                for part_id in xrange(logParts.shape[0]):
                    visualize_bern_on_specs(
                        "%s_%d_%d.png" % (args.bernsteinPreSpreadVisualizeOnSpec, fl_id, part_id),
                        max_responses,
                        S,
                        part_id,
                    )
            bin_out_map = code_parts.spread_patches(max_responses, 2, 2, out.shape[-1] - 1)
            avg_bgd.add_frames(bin_out_map, time_axis=0)

        np.save(args.getUnclippedBackground, avg_bgd.E)
    else:
        pass
#
# need to access the files where we perform the estimation
#

utterances_path = '/home/mark/Template-Speech-Recognition/Data/Train/'
file_indices = gtrd.get_data_files_indices(utterances_path)

inner_mask = np.zeros((5,5),dtype=np.uint8)
inner_mask[1:-1,1:-1] = 1
all_patches = np.zeros((0,5,5,8),dtype=np.uint8)
all_S_patches = np.zeros((0,5,5),dtype=np.float32)
inner_thresh = 9
outer_thresh = 40

for fl_idx,fl in enumerate(file_indices[:50]):
    utterance = gtrd.makeUtterance(utterances_path,fl)
    S = gtrd.get_spectrogram(utterance.s,sp)
    E = gtrd.get_edge_features(S.T,ep,verbose=False)
    patch_set, S_patch_set, patch_counts, patch_locs = cp.get_parts_mask(E.astype(np.uint8),
                                                                         inner_mask,
                                                                         S.astype(np.float32),
                                                                         inner_thresh)
    use_patch_ids = patch_set.sum(-1).sum(-1).sum(-1) >= outer_thresh
    all_patches = np.vstack(
        (all_patches,
         patch_set[use_patch_ids ]))
    all_S_patches = np.vstack(
        (all_S_patches,
         S_patch_set[use_patch_ids].astype(np.float32)))

fl = file_indices[49]