def METHOD_NAME():
    p = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                description=__doc__)
    p.add_argument('in_tractogram',
                   help='Input tractography file.')
    p.add_argument('nb_streamlines', type=int,
                   help='Number of streamlines to resample the tractogram to.')
    p.add_argument('out_tractogram',
                   help='Output tractography file.')
    p.add_argument('--never_upsample', action='store_true',
                   help='Make sure to never upsample a tractogram.\n'
                        'Useful when downsample batch of files using bash.')
    # For upsampling:
    upsampling_group = p.add_argument_group('Upsampling params')
    std_group = upsampling_group.add_mutually_exclusive_group()
    std_group.add_argument('--point_wise_std', type=float,
                           help='Noise to add to existing streamlines\'' +
                                ' points to generate new ones.')
    std_group.add_argument('--streamline_wise_std', type=float,
                           help='Noise to add to existing whole' +
                                ' streamlines to generate new ones.')
    sub_p = upsampling_group.add_mutually_exclusive_group()
    sub_p.add_argument('--gaussian', metavar='SIGMA', type=int,
                       help='Sigma for smoothing. Use the value of surronding'
                            ' X,Y,Z points on \nthe streamline to blur the'
                            ' streamlines. A good sigma choice would \nbe '
                            'around 5.')
    sub_p.add_argument('--spline', nargs=2, metavar=('SIGMA', 'NB_CTRL_POINT'),
                       type=int,
                       help='Sigma and number of points for smoothing. Models '
                            'each streamline \nas a spline. A good sigma '
                            'choice would be around 5 and control \npoints '
                            'around 10.')
    upsampling_group.add_argument(
        '--keep_invalid_streamlines', action='store_true',
        help='Keep invalid newly generated streamlines that may '
             'go out of the \nbounding box.')
    # For downsampling:
    downsampling_group = p.add_argument_group('Downsampling params')
    downsampling_group.add_argument(
        '--downsample_per_cluster', action='store_true',
        help='If set, downsampling will be done per cluster (computed with \n'
             'Quickbundles) to ensure that at least some streamlines are \n'
             'kept per bundle. Else, random downsampling is performed '
             '(default).')
    downsampling_group.add_argument(
        '--qbx_thresholds', nargs='+', type=float, default=[40, 30, 20],
        metavar='t',
        help="If you chose option '--downsample_per_cluster', you may set \n"
             "the QBx threshold value(s) here. Default: %(default)s")
    # General
    p.add_argument('--seed', default=None, type=int,
                   help='Use a specific random seed for the resampling.')
    add_reference_arg(p)
    add_overwrite_arg(p)
    add_verbose_arg(p)
    return p