def METHOD_NAME():
    parser = argparse.ArgumentParser( description='Put a description of your script here')
    ## output file to be written
    parser.add_argument('-i', '--input_file', type=str, required=True, help='Path to an input file to be read' )
    parser.add_argument('-o', '--output_gff', type=str, required=True, help='Path to an output GFF file to be created with new IDs' )
    parser.add_argument('-p', '--id_prefix', type=str, required=True, help='Will be used as the base for all IDs generated' )
    parser.add_argument('-m', '--output_map', type=str, required=False, help='This will create a tab-delimited mapping of old and new IDs' )
    args = parser.parse_args()
    ofh = open(args.output_gff, 'w')
    if args.output_map is None:
        map_ofh = None
    else:
        map_ofh = open(args.output_map, 'w')
    idmap = dict()
    for line in open(args.input_file):
        line = line.rstrip()
        cols = line.split("\t")
        if len(cols) != 9:
            ofh.write(line + "\n")
            continue
        feat_id   = gff.column_9_value(cols[8], 'ID')
        parent_id = gff.column_9_value(cols[8], 'Parent')
        if feat_id in idmap:
            new_feat_id = idmap[feat_id]
        else:
            new_feat_id = get_new_id(args.id_prefix, cols[2], feat_id, map_ofh)
            idmap[feat_id] = new_feat_id
        if parent_id is None:
            cols[8] = "ID={0}".format(new_feat_id)
        else:
            if parent_id in idmap:
                new_parent_id = idmap[parent_id]
            else:
                new_parent_id = get_new_id(args.id_prefix, cols[2], parent_id, map_ofh)
                idmap[parent_id] = new_parent_id
            cols[8] = "ID={0};Parent={1}".format(new_feat_id, new_parent_id)
        ofh.write( "\t".join(cols) + "\n" )