Exemplo n.º 1
0
void generate_poisson_noise(Detector * det){
  int i;
  init_random_generator();
  if(!det->photons_per_pixel){
    fprintf(stderr,"Please calculate photons per pixel first\n");
    return;
  }
  if( det->photon_count==NULL )det->photon_count = (float *)malloc(sizeof(float)*det->nx*det->ny);
  for(i = 0;i<det->nx*det->ny;i++){
    det->photon_count[i] = get_poisson_random_number(det->photons_per_pixel[i]*det->quantum_efficiency);
  }  
}
Exemplo n.º 2
0
void generate_poisson_noise(CCD * det){
#ifdef GSL_FOUND
  int i;
  init_random_generator();
  if(!det->photons_per_pixel){
    fprintf(stderr,"Please calculate photons per pixel first\n");
    return;
  }
  det->photon_count = (float *)malloc(sizeof(float)*det->nx*det->ny*det->nz);
  for(i = 0;i<det->nx*det->ny*det->nz;i++){
    if(det->photons_per_pixel[i]*det->quantum_efficiency < 1000){
      det->photon_count[i] = get_poisson_random_number(det->photons_per_pixel[i]*det->quantum_efficiency);
    }else{
      det->photon_count[i] = get_poisson_gaussian_approximate_random_number(det->photons_per_pixel[i]*det->quantum_efficiency);
    }
  }  
#else
  sp_error_fatal("spsim not compiled with GSL support");
#endif
}
Exemplo n.º 3
0
int main(int argc, char** argv)
{
    if (argc < 2 || !strcmp(argv[1], "-help") || !strcmp(argv[1], "--help")
			|| !strcmp(argv[1], "-h") || !strcmp(argv[1], "--usage")) {
		print_usage_and_exit();
	}

    double gamma_a = 1.0, gamma_b = 1.0, alpha_a = 1.0, alpha_b = 1.0, eta = 0.5;
    int max_iter = 1000, save_lag = 100, init_topics = 0;
    bool sample_hyperparameter = false;
    bool split_merge = false;
    int num_restricted_scan = 5;

    time_t t;
    time(&t);
    unsigned long seed = (unsigned long) t;

    char* directory = NULL;;
    char* algorithm = NULL;;
    char* data_path = NULL;
    char* model_path = NULL;
    const char * output_prefix = NULL;;

    for (int i = 1; i < argc; i++)
    {
        if (!strcmp(argv[i], "--algorithm"))        algorithm = argv[++i];
        else if (!strcmp(argv[i], "--data"))        data_path = argv[++i];
        else if (!strcmp(argv[i], "--max_iter"))    max_iter = atoi(argv[++i]);
        else if (!strcmp(argv[i], "--save_lag"))    save_lag = atoi(argv[++i]);
        else if (!strcmp(argv[i], "--init_topics")) init_topics = atoi(argv[++i]);
        else if (!strcmp(argv[i], "--directory"))   directory = argv[++i];
        else if (!strcmp(argv[i], "--random_seed")) seed = atoi(argv[++i]);
        else if (!strcmp(argv[i], "--gamma_a"))     gamma_a = atof(argv[++i]);
        else if (!strcmp(argv[i], "--gamma_b"))     gamma_b = atof(argv[++i]);
        else if (!strcmp(argv[i], "--alpha_a"))     alpha_a = atof(argv[++i]);
        else if (!strcmp(argv[i], "--alpha_b"))     alpha_b = atof(argv[++i]);
        else if (!strcmp(argv[i], "--eta"))         eta = atof(argv[++i]);
        else if (!strcmp(argv[i], "--restrict_scan")) num_restricted_scan = atoi(argv[++i]);
        else if (!strcmp(argv[i], "--saved_model")) model_path = argv[++i];
        else if (!strcmp(argv[i], "--output_prefix")) output_prefix = argv[++i];
        else if (!strcmp(argv[i], "--split_merge")){
           ++i;
            if (!strcmp(argv[i], "yes") ||  !strcmp(argv[i], "YES"))
                split_merge = true;
        }
        else if (!strcmp(argv[i], "--sample_hyper")){
           ++i;
            if (!strcmp(argv[i], "yes") ||  !strcmp(argv[i], "YES"))
                sample_hyperparameter = true;
        }
        else{
            printf("%s, unknown parameters, exit\n", argv[i]);
            exit(0);
        }
    }

    if (algorithm == NULL || directory == NULL || data_path == NULL)
    {
        printf("Note that algorithm, directory and data are not optional!\n");
        exit(0);
    }

    if (output_prefix == NULL)
    	output_prefix = "hdp";

    if (VERBOSE && !strcmp(algorithm, "train"))
    {
        printf("\nProgram starts with following parameters:\n");

        printf("algorithm:          = %s\n", algorithm);
        printf("data_path:          = %s\n", data_path);
        printf("directory:          = %s\n", directory);

        printf("max_iter            = %d\n", max_iter);
        printf("save_lag            = %d\n", save_lag);
        printf("init_topics         = %d\n", init_topics);
        printf("random_seed         = %ld\n", seed);
        printf("gamma_a             = %.2f\n", gamma_a);
        printf("gamma_b             = %.2f\n", gamma_b);
        printf("alpha_a             = %.2f\n", alpha_a);
        printf("alpha_b             = %.2f\n", alpha_b);
        printf("eta                 = %.2f\n", eta);
        printf("restricted_scans    = %d\n", num_restricted_scan);
        if (model_path != NULL)
        	printf("saved model_path    = %s\n", model_path);
        if (split_merge)
        	printf("split-merge         = yes\n");
        else
        	printf("split-merge         = no\n");
        if (sample_hyperparameter)
        	printf("sampling hyperparam = yes\n");
        else
        	printf("sampling hyperparam = no\n");
    }

    if (!dir_exists(directory))
        mkdir(directory, S_IRUSR | S_IWUSR | S_IXUSR);

    // allocate the random number structure
    init_random_generator(seed);

    if (!strcmp(algorithm, "train"))
    {
        // read data
    	corpus * c = new corpus();
        c->read_data(data_path);

        hdp_hyperparameter * hdp_param = new hdp_hyperparameter();
        hdp_param->setup_parameters(gamma_a, gamma_b, alpha_a, alpha_b, max_iter,
    			save_lag, num_restricted_scan, sample_hyperparameter, split_merge,
    			directory, output_prefix);

        hdp * hdp_instance = new hdp();
        hdp_instance->setup_state(c, eta, init_topics, hdp_param);
        hdp_instance->run();

        // free resources
        delete hdp_instance;
        delete c;
        delete hdp_param;
    }

    if (!strcmp(algorithm, "test"))
    {
    	corpus* c = new corpus();
        c->read_data(data_path);

        hdp_hyperparameter * hdp_param = new hdp_hyperparameter();
        hdp_param->setup_parameters(gamma_a, gamma_b, alpha_a, alpha_b, max_iter,
    			save_lag, num_restricted_scan, sample_hyperparameter, split_merge,
    			directory, output_prefix);

        hdp * hdp_instance = new hdp();
        hdp_instance->load(model_path);
        hdp_instance->setup_state(c, hdp_param);
        hdp_instance->run_test();

        delete hdp_param;
        delete hdp_instance;
        delete c;
    }

    free_random_generator();
}