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); } }
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 }
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(); }