@classmethod
def init_parser(cls, parser):
    """Initialize argument parser"""
    subparsers = parser.add_subparsers(title='Tools')
    parser_mm = subparsers.add_parser('map', help='Bayesian model mapping')
    parser_mm.set_defaults(which='mm')
    parser_mm.add_argument('--dest-model', type=str, required=True, help=
        'Model to map to')
    parser_mm.add_argument('--compound-map', type=str, nargs='?', help=
        'Actual compound mapping, evaluation only')
    parser_mm.add_argument('--reaction-map', type=str, nargs='?', help=
        'Actual reaction mapping, evaluation only')
    parser_mm.add_argument('-c', '--consistency-check', action='store_true',
        help=
        'Check the consistency of compound id between compounds.yaml and reactions.yaml'
        )
    parser_mm.add_argument('-n', '--nproc', type=int, action='store',
        default=1, help='Number of processes to use (default = 1)')
    parser_mm.add_argument('-o', '--outpath', type=str, action='store',
        default='.', help=
        'Path to store output files (default = current position)')
    parser_mm.add_argument('--threshold-compound', type=float, default=0,
        help='likelihood threshold for compound mapping (default = 0)')
    parser_mm.add_argument('--threshold-reaction', type=float, default=0,
        help='likelihood threshold for reaction mapping (default = 0)')
    parser_mm.add_argument('--map-compound-kegg', action='store_true', help
        ='Compare KEGG id during compound mapping')
    parser_mm.add_argument('--map-reaction-gene', action='store_true', help
        ='Compare gene list during reaction mapping')
    parser_mm.add_argument('--raw', action='store_true', help=
        'Output raw pairwise mapping results as well, may be very big with large models'
        )
    parser_mm.add_argument('--log', action='store_true', help=
        'Output log file of the p_match and p_no_match for each feature, may be very big with large models'
        )
    parser_mm.add_argument('--compartment-map-file', type=str, help=
        'A tab delimited file (.tsv) listing the compartment ids of query model in the first column, and the corresponding compartment ids of dest model in the second column. Required if the compartment ids in the two models are not consistent.'
        )
    parser_c = subparsers.add_parser('manual_curation', help=
        'Interactive mode to check mapping result')
    parser_c.set_defaults(which='curation')
    parser_c.add_argument('--dest-model', type=str, required=True, help=
        'Model to map to')
    parser_c.add_argument('--compound-map', type=str, required=True, help=
        'Compound model mapping result')
    parser_c.add_argument('--reaction-map', type=str, required=True, help=
        'Reaction model mapping result')
    parser_c.add_argument('--curated-compound-map', type=str, required=True,
        help=
        'File to store curated compound mapping, if file exists, resume previous curation'
        )
    parser_c.add_argument('--curated-reaction-map', type=str, required=True,
        help=
        'File to store curated reaction mapping, if file exists, resume previous curation'
        )
    parser_c.add_argument('--compartment-map', type=str, help=
        'A tab delimited file (.tsv) listing the compartment ids of query model in the first column, and the corresponding compartment ids of dest model in the second column. Required if the compartment ids in the two models are not consistent.'
        )
    parser_c.add_argument('--compound-only', action='store_true', help=
        'Set to only curate compound maps.')
    parser_t = subparsers.add_parser('translate_id', help=
        'Translate ids based on mapping result')
    parser_t.set_defaults(which='translateid')
    parser_t.add_argument('--compound-map', type=str, required=True, help=
        'Tab-delimited table, the first two columns store the original and target ids'
        )
    parser_t.add_argument('--reaction-map', type=str, required=True, help=
        'Tab-delimited table, the first two columns store the original and target ids'
        )
    parser_t.add_argument('--compartment-map', type=str, required=False,
        help=
        'Tab-delimited table, the first two columns store the original and target ids'
        )
    parser_t.add_argument('-o', '--outpath', type=str, action='store',
        default='.', help=
        'Path to store output files (default = current position)')
