Exemplo n.º 1
0
def reformat_args(args):
    """
    reformat_args(args)

    Returns reformatted args for analyses, specifically 
        - Sets stimulus parameters to "none" if they are irrelevant to the 
          stimtype
        - Changes stimulus parameters from "both" to actual values
        - Sets seed, though doesn't seed
        - Modifies analyses (if "all" or "all_" in parameter)

    Adds the following args:
        - dend (str)     : type of dendrites to use ("allen", "extr")
        - omit_sess (str): sess to omit
        - omit_mice (str): mice to omit

    Required args:
        - args (Argument parser): parser with the following attributes: 
            runtype (str)        : runtype ("pilot" or "prod")
            stimtype (str)       : stimulus to analyse (visflow or gabors)
    
    Returns:
        - args (Argument parser): input parser, with the following attributes 
                                  added:
                                      visflow_dir, visflow_size, gabfr, gabk, 
                                      gab_oriomit_sess, omit_mice, dend, 
                                      analyses, seed
    """

    args = copy.deepcopy(args)

    [args.visflow_dir, args.visflow_size, args.gabfr, args.gabk,
     args.gab_ori] = sess_gen_util.get_params(args.stimtype, "both", 128,
                                              "any", 16, "any")

    if args.plane == "soma":
        args.dend = "allen"

    args.omit_sess, args.omit_mice = sess_gen_util.all_omit(
        args.stimtype, args.runtype, args.visflow_dir, args.visflow_size,
        args.gabk)

    # choose a seed if none is provided (i.e., args.seed=-1), but seed later
    args.seed = rand_util.seed_all(args.seed,
                                   "cpu",
                                   log_seed=False,
                                   seed_now=False)

    # collect analysis letters
    all_analyses = "".join(get_analysis_fcts().keys())
    if "all" in args.analyses:
        if "_" in args.analyses:
            excl = args.analyses.split("_")[1]
            args.analyses, _ = gen_util.remove_lett(all_analyses, excl)
        else:
            args.analyses = all_analyses
    elif "_" in args.analyses:
        raise ValueError("Use '_' in args.analyses only with 'all'.")

    return args
Exemplo n.º 2
0
def reformat_args(args):
    """
    reformat_args(args)

    Returns reformatted args for analyses, specifically 
        - Sets stimulus parameters to "none" if they are irrelevant to the 
          stimtype
        - Changes stimulus parameters from "both" to actual values
        - Sets seed, though doesn't seed
        - Modifies analyses (if "all" or "all_" in parameter)

    Adds the following args:
        - omit_sess (str): sess to omit
        - omit_mice (str): mice to omit

    Required args:
        - args (Argument parser): parser with the following attributes: 
            visflow_dir (str)    : visual flow direction values to include
                                   (e.g., "right", "left" or "both")
            visflow_size (int or str): visual flow size values to include
                                   (e.g., 128, 256, "both")
            gabfr (int)          : gabor frame value to start sequences at
                                   (e.g., 0, 1, 2, 3)
            gabk (int or str)    : gabor kappa values to include 
                                   (e.g., 4, 16 or "both")
            gab_ori (int or str) : gabor orientation values to include
                                   (e.g., 0, 45, 90, 135, 180, 225 or "all")
            runtype (str)        : runtype ("pilot" or "prod")
            stimtype (str)       : stimulus to analyse (visflow or gabors)
    
    Returns:
        - args (Argument parser): input parser, with the following attributes
                                  modified: 
                                      visflow_dir, visflow_size, gabfr, gabk, 
                                      gab_ori, grps, analyses, seed
                                  and the following attributes added:
                                      omit_sess, omit_mice
    """
    args = copy.deepcopy(args)

    [args.visflow_dir, args.visflow_size, args.gabfr, args.gabk,
     args.gab_ori] = sess_gen_util.get_params(args.stimtype, args.visflow_dir,
                                              args.visflow_size, args.gabfr,
                                              args.gabk, args.gab_ori)

    args.omit_sess, args.omit_mice = sess_gen_util.all_omit(
        args.stimtype, args.runtype, args.visflow_dir, args.visflow_size,
        args.gabk)

    # choose a seed if none is provided (i.e., args.seed=-1), but seed later
    args.seed = rand_util.seed_all(args.seed,
                                   "cpu",
                                   log_seed=False,
                                   seed_now=False)

    # collect analysis letters
    all_analyses = "".join(get_analysis_fcts().keys())
    if "all" in args.analyses:
        if "_" in args.analyses:
            excl = args.analyses.split("_")[1]
            args.analyses, _ = gen_util.remove_lett(all_analyses, excl)
        else:
            args.analyses = all_analyses
    elif "_" in args.analyses:
        raise ValueError("Use '_' in args.analyses only with 'all'.")

    return args
Exemplo n.º 3
0
def main(args):
    """
    main(args)

    Runs analyses with parser arguments.

    Required args:
        - args (dict): parser argument dictionary
    """

    # set logger to the specified level
    logger_util.set_level(level=args.log_level)

    args.fontdir = DEFAULT_FONTDIR if DEFAULT_FONTDIR.is_dir() else None

    if args.dict_path is not None:
        source = "modif" if args.modif else "run"
        plot_dicts.plot_from_dicts(Path(args.dict_path),
                                   source=source,
                                   plt_bkend=args.plt_bkend,
                                   fontdir=args.fontdir,
                                   parallel=args.parallel,
                                   datetime=not (args.no_datetime),
                                   overwrite=args.overwrite)
    else:
        args = reformat_args(args)
        if args.datadir is None:
            args.datadir = DEFAULT_DATADIR
        else:
            args.datadir = Path(args.datadir)
        mouse_df = DEFAULT_MOUSE_DF_PATH

        # get numbers of sessions to analyse
        if args.sess_n == "all":
            all_sess_ns = sess_gen_util.get_sess_vals(mouse_df,
                                                      "sess_n",
                                                      runtype=args.runtype,
                                                      plane=args.plane,
                                                      line=args.line,
                                                      min_rois=args.min_rois,
                                                      pass_fail=args.pass_fail,
                                                      incl=args.incl,
                                                      omit_sess=args.omit_sess,
                                                      omit_mice=args.omit_mice,
                                                      sort=True)
        else:
            all_sess_ns = gen_util.list_if_not(args.sess_n)

        # get analysis parameters for each session number
        all_analys_pars = gen_util.parallel_wrap(prep_analyses,
                                                 all_sess_ns,
                                                 args_list=[args, mouse_df],
                                                 parallel=args.parallel)

        # split parallel from sequential analyses
        bool(args.parallel * (not args.debug))
        if args.parallel:
            run_seq = ""  # should be run parallel within analysis
            all_analyses = gen_util.remove_lett(args.analyses, run_seq)
            sess_parallels = [True, False]
            analyses_parallels = [False, True]
        else:
            all_analyses = [args.analyses]
            sess_parallels, analyses_parallels = [False], [False]

        for analyses, sess_parallel, analyses_parallel in zip(
                all_analyses, sess_parallels, analyses_parallels):
            if len(analyses) == 0:
                continue
            args_dict = {
                "analyses": analyses,
                "seed": args.seed,
                "parallel": analyses_parallel,
            }

            # run analyses for each parameter set
            gen_util.parallel_wrap(run_analyses,
                                   all_analys_pars,
                                   args_dict=args_dict,
                                   parallel=sess_parallel,
                                   mult_loop=True)
def reformat_args(args):
    """
    reformat_args(args)

    Returns reformatted args for analyses, specifically 
        - Sets stimulus parameters to "none" if they are irrelevant to the 
          stimtype
        - Changes stimulus parameters from "both" to actual values
        - Modifies the session number parameter
        - Sets seed, though doesn't seed
        - Modifies analyses (if "all" or "all_" in parameter)
        - Sets latency parameters based on lat_method

    Adds the following args:
        - dend (str)     : type of dendrites to use ("allen" or "extr")
        - omit_sess (str): sess to omit
        - omit_mice (str): mice to omit

    Required args:
        - args (Argument parser): parser with the following attributes: 
            visflow_dir (str)        : visual flow direction values to include
                                   (e.g., "right", "left" or "both")
            visflow_size (int or str): visual flow size values to include
                                   (e.g., 128, 256, "both")
            gabfr (int)          : gabor frame value to start sequences at
                                   (e.g., 0, 1, 2, 3)
            gabk (int or str)    : gabor kappa values to include 
                                   (e.g., 4, 16 or "both")
            gab_ori (int or str) : gabor orientation values to include
                                   (e.g., 0, 45, 90, 135, 180, 225 or "all")
            mouse_ns (str)       : mouse numbers or range 
                                   (e.g., 1, "1,3", "1-3", "all")
            runtype (str)        : runtype ("pilot" or "prod")
            sess_n (str)         : session number range (e.g., "1-1", "all")
            stimtype (str)       : stimulus to analyse (visflow or gabors)
    
    Returns:
        - args (Argument parser): input parser, with the following attributes
                                  modified: 
                                      visflow_dir, visflow_size, gabfr, gabk, 
                                      gab_ori, sess_n, mouse_ns, analyses, seed, 
                                      lat_p_val_thr, lat_rel_std
                                  and the following attributes added:
                                      omit_sess, omit_mice, dend
    """

    args = copy.deepcopy(args)

    if args.plane == "soma":
        args.dend = "allen"

    [args.visflow_dir, args.visflow_size, args.gabfr, args.gabk,
     args.gab_ori] = sess_gen_util.get_params(args.stimtype, args.visflow_dir,
                                              args.visflow_size, args.gabfr,
                                              args.gabk, args.gab_ori)

    if args.datatype == "run":
        args.fluor = "n/a"
    if args.plane == "soma":
        args.dend = "allen"

    args.omit_sess, args.omit_mice = sess_gen_util.all_omit(
        args.stimtype, args.runtype, args.visflow_dir, args.visflow_size,
        args.gabk)

    if "-" in str(args.sess_n):
        vals = str(args.sess_n).split("-")
        if len(vals) != 2:
            raise ValueError(
                "If args.sess_n is a range, must have format 1-3.")
        st = int(vals[0])
        end = int(vals[1]) + 1
        args.sess_n = list(range(st, end))

    if args.lat_method == "ratio":
        args.lat_p_val_thr = None
    elif args.lat_method == "ttest":
        args.lat_rel_std = None

    # choose a seed if none is provided (i.e., args.seed=-1), but seed later
    args.seed = rand_util.seed_all(args.seed,
                                   "cpu",
                                   log_seed=False,
                                   seed_now=False)

    # collect mouse numbers from args.mouse_ns
    if "," in args.mouse_ns:
        args.mouse_ns = [int(n) for n in args.mouse_ns.split(",")]
    elif "-" in args.mouse_ns:
        vals = str(args.mouse_ns).split("-")
        if len(vals) != 2:
            raise ValueError(
                "If args.mouse_ns is a range, must have format 1-3.")
        st = int(vals[0])
        end = int(vals[1]) + 1
        args.mouse_ns = list(range(st, end))
    elif args.mouse_ns not in ["all", "any"]:
        args.mouse_ns = int(args.mouse_ns)

    # collect analysis letters
    all_analyses = "".join(get_analysis_fcts().keys())
    if "all" in args.analyses:
        if "_" in args.analyses:
            excl = args.analyses.split("_")[1]
            args.analyses, _ = gen_util.remove_lett(all_analyses, excl)
        else:
            args.analyses = all_analyses
    elif "_" in args.analyses:
        raise ValueError("Use '_' in args.analyses only with 'all'.")

    return args