/* Gracefully get a double or decimal value */ double getdouble (const char *display) { char *buffer; double value; int rtn; while (1) { buffer = getstring (display); rtn = stringtodouble (buffer, &value); free (buffer); if (rtn == EXIT_SUCCESS) return value; } }
void ArgumentOptions::parse(int argc, char * argv[]){ const char *sopts="hi:d:t:c:m:n:a:b:s:lg:evwz"; //Parse arguments char opt; while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) { switch(opt){ case 'i': m_iterations = stringtolong(optarg,opt); break; case 'd': m_burnin = stringtolong(optarg,opt); break; case 't': m_thinning = stringtolong(optarg,opt); break; case 'm': m_move_width = stringtodouble(optarg,opt); break; case 'n': m_cp_prior = stringtodouble(optarg,opt); break; case 'a': m_gamma_prior_1 = stringtodouble(optarg,opt); break; case 'b': m_gamma_prior_2 = stringtodouble(optarg,opt); break; case 's': m_seed = stringtolong(optarg,opt); break; case 'l': m_calculate_posterior_mean = 1; break; case 'g': m_grid = stringtolong(optarg,opt); break; case 'e': m_disallow_empty_intervals_between_cps = 1; break; case 'v': m_write_cps_to_file = 1; break; case 'w': m_write_histograms_to_file = 1; break; case 'c': m_model = optarg; break; case 'z': m_importance_sampling = 1; break; case 'h': usage(0,argv[0]); break; default: usage(1,argv[0]); } } if(argc-optind != 3){ usage(1,argv[0]); } m_datafile = argv[optind++]; m_start = atof(argv[optind++]); m_end = atof(argv[optind++]); if(m_grid == 0){ m_grid = m_end; } if(m_move_width == 0){ m_move_width = (double)(m_end-m_start)/20.00; } }
void ArgumentOptionsSMC::parse(int argc, char * argv[]){ const char *sopts="hi:p:d:t:m:n:a:b:s:lg:evwc:f:z"; //Parse arguments char opt; while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) { switch(opt){ case 'i': m_num_intervals = stringtolong(optarg,opt); break; case 'p': m_particles = stringtolong(optarg,opt); break; case 'd': m_burnin = stringtolong(optarg,opt); break; case 't': m_thinning = stringtolong(optarg,opt); break; case 'm': m_move_width = stringtodouble(optarg,opt); break; case 'n': m_cp_prior = stringtodouble(optarg,opt); break; case 'a': m_gamma_prior_1 = stringtodouble(optarg,opt); break; case 'b': m_gamma_prior_2 = stringtodouble(optarg,opt); break; case 's': m_seed = stringtolong(optarg,opt); break; case 'l': m_calculate_filtering_mean = 1; break; case 'g': m_grid = stringtolong(optarg,opt); break; case 'e': m_disallow_empty_intervals_between_cps = 1; break; case 'v': m_write_cps_to_file = 1; break; case 'w': m_print_ESS = 1; break; case 'c': m_model = optarg; break; case 'f': m_ESS_threshold = stringtodouble(optarg,opt); break; case 'z': m_importance_sampling = 1; break; case 'h': usage(0,argv[0]); break; default: usage(1,argv[0]); } } if(argc-optind != 3){ usage(1,argv[0]); } m_datafile = argv[optind++]; m_start = atof(argv[optind++]); m_end = atof(argv[optind++]); if(m_grid == 0){ m_grid = m_num_intervals; }else if(!(m_grid >= m_num_intervals and (m_grid % m_num_intervals) == 0)){ cerr << "the grid has to be multiple of the number of intervals setting to equal the number of intervals" << endl; m_grid = m_num_intervals; } if(m_move_width == 0){ double change_in_time = (m_end-m_start)/(double)m_num_intervals; m_move_width = change_in_time/3.0; } }