109 lines
3.7 KiB
C++
109 lines
3.7 KiB
C++
/*
|
|
Description: 全局参数,所有模块都可能用到的参数
|
|
|
|
Copyright : All right reserved by NCIC.ICT
|
|
|
|
Author : Zhang Zhonghai
|
|
Date : 2023/10/23
|
|
*/
|
|
|
|
#include "global_arg.h"
|
|
|
|
#include <cstring>
|
|
#include <vector>
|
|
#include <getopt.h>
|
|
#include <iostream>
|
|
|
|
using std::vector;
|
|
|
|
/*
|
|
* GlobalArg 类
|
|
*/
|
|
|
|
struct option *GlobalArg::GLOBAL_OPT = nullptr;
|
|
|
|
// 初始化参数
|
|
void GlobalArg::initGlobalOptions()
|
|
{
|
|
vector<struct option> v;
|
|
v.push_back({"INPUT", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_INPUT}); // 输入文件
|
|
v.push_back({"OUTPUT", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_OUTPUT}); // 输出文件
|
|
v.push_back({"num_threads", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_NUM_THREADS});
|
|
v.push_back({"max_mem", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_MAX_MEM});
|
|
v.push_back({"verbosity", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_LOG_LEVEL});
|
|
v.push_back({"asyncio", required_argument, NULL, ns_ga::GlobalOptEnum::OPT_ASYNCIO});
|
|
v.push_back({"version", no_argument, NULL, ns_ga::GlobalOptEnum::OPT_VERSION});
|
|
v.push_back({"help", no_argument, NULL, ns_ga::GlobalOptEnum::OPT_HELP});
|
|
v.push_back({0, 0, 0, 0});
|
|
|
|
GLOBAL_OPT = new struct option[GLOBAL_ARG_CNT];
|
|
memcpy(GLOBAL_OPT, v.data(), v.size() * sizeof(struct option));
|
|
|
|
/* 添加帮助信息, 按arg enum顺序进行添加信息 */
|
|
vArgInfo.push_back("--INPUT Input file path (bam, vcf ...)\n");
|
|
vArgInfo.push_back("--OUTPUT Output file path \n");
|
|
vArgInfo.push_back("--num_threads <num_threads> Number of threads to allocate to this analysis [1]\n");
|
|
vArgInfo.push_back("--max_mem <max_mem> Set maximum memory; suffix K/M/G recognized [2G]\n");
|
|
vArgInfo.push_back("--verbosity <log level> Control verbosity of logging. error/warning/info/debug [info]\n");
|
|
vArgInfo.push_back("--asyncio Use async io [true]\n");
|
|
vArgInfo.push_back("--version Output version information\n");
|
|
vArgInfo.push_back("--help Generate the help message\n");
|
|
}
|
|
|
|
// 解析参数
|
|
void GlobalArg::parseArgument(int argNum)
|
|
{
|
|
using namespace ns_ga;
|
|
switch (argNum)
|
|
{
|
|
case OPT_INPUT:
|
|
in_fn = optarg;
|
|
break;
|
|
case OPT_OUTPUT:
|
|
out_fn = optarg;
|
|
break;
|
|
case OPT_NUM_THREADS:
|
|
num_threads = std::stoi(optarg);
|
|
break;
|
|
case OPT_MAX_MEM:
|
|
{
|
|
char *q;
|
|
size_t mem_arg = strtol(optarg, &q, 0);
|
|
if (*q == 'k' || *q == 'K')
|
|
mem_arg <<= 10;
|
|
else if (*q == 'm' || *q == 'M')
|
|
mem_arg <<= 20;
|
|
else if (*q == 'g' || *q == 'G')
|
|
mem_arg <<= 30;
|
|
if (mem_arg >= max_mem)
|
|
max_mem = mem_arg;
|
|
else
|
|
{
|
|
std::cerr << "[Warn] Too small mem size, use default" << std::endl;
|
|
}
|
|
break;
|
|
}
|
|
case OPT_LOG_LEVEL:
|
|
{
|
|
if (strcmp("ERROR", optarg) == 0)
|
|
verbosity = ns_ga::ERROR;
|
|
else if (strcmp("WARNING", optarg) == 0)
|
|
verbosity = ns_ga::WARNING;
|
|
else if (strcmp("INFO", optarg) == 0)
|
|
verbosity = ns_ga::INFO;
|
|
else if (strcmp("DEBUG", optarg) == 0)
|
|
verbosity = ns_ga::DEBUG;
|
|
break;
|
|
}
|
|
case OPT_ASYNCIO:
|
|
{
|
|
if (strcmp("true", optarg) == 0)
|
|
use_asyncio = true;
|
|
else if (strcmp("false", optarg) == 0)
|
|
use_asyncio = false;
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
} |