diff --git a/ex-4/dip.c b/ex-4/dip.c deleted file mode 100644 index 778ea9e..0000000 --- a/ex-4/dip.c +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include -#include -#include - -int main(int argc, char **argv) - { - - // Set default options. - // - size_t N = 50000; // number of events. - size_t n = 50; // number of bins. - double p_max = 10; // maximum value of momentum module. - - // Process CLI arguments. - // - for (size_t i = 1; i < argc; i++) - { - if (!strcmp(argv[i], "-N")) N = atol(argv[++i]); - else if (!strcmp(argv[i], "-n")) n = atol(argv[++i]); - else if (!strcmp(argv[i], "-p")) p_max = atof(argv[++i]); - else - { - fprintf(stderr, "Usage: %s -[hiIntp]\n", argv[0]); - fprintf(stderr, "\t-h\tShow this message.\n"); - fprintf(stderr, "\t-N integer\tThe number of events to generate.\n"); - fprintf(stderr, "\t-n integer\tThe number of bins of the histogram.\n"); - fprintf(stderr, "\t-p float\tThe maximum value of momentum.\n"); - return EXIT_FAILURE; - } - } - - // Initialize an RNG. - // - gsl_rng_env_setup(); - gsl_rng *r = gsl_rng_alloc(gsl_rng_default); - - // Generate the angle θ uniformly distributed on a sphere using the - // inverse transform: - // - // θ = acos(1 - 2X) - // - // where X is a random uniform variable in [0,1), and the module p of - // the vector: - // - // p² = p_v² + p_h² - // - // uniformly distributed between 0 and p_max. The two components are - // then computed as: - // - // p_v = p⋅cos(θ) - // p_h = p⋅sin(θ) - // - // The histogram will be updated this way. - // The j-th bin where p_h goes in is given by: - // - // step = p_max / n - // j = floor(p_h / step) - // - // Thus an histogram was created and a structure containing the number of - // entries in each bin and the sum of |p_v| in each of them is created and - // filled while generating the events. - // - struct bin - { - size_t amo; // Amount of events in the bin. - double sum; // Sum of |p_v|s of all the events in the bin. - }; - struct bin *histo = calloc(n, sizeof(struct bin)); - - // Some useful variables. - // - double step = p_max / n; - struct bin *b; - double theta; - double p; - double p_v; - double p_h; - size_t j; - - for (size_t i = 0; i < N; i++) - { - // Generate the event. - // - theta = acos(1 - 2*gsl_rng_uniform(r)); - p = p_max * gsl_rng_uniform(r); - - // Compute the components. - // - p_v = p * cos(theta); - p_h = p * sin(theta); - - // Update the histogram. - // - j = floor(p_h / step); - b = &histo[j]; - b->amo++; - b->sum += fabs(p_v); - } - - // Compute the mean value of each bin and print it to stodut - // together with other useful things to make the histogram. - // - printf("bins: \t%ld\n", n); - printf("step: \t%.5f\n", step); - for (size_t i = 0; i < n; i++) - { - histo[i].sum = histo[i].sum / histo[i].amo; - printf("\n%.5f", histo[i].sum); - }; - - // free memory - gsl_rng_free(r); - free(histo); - - return EXIT_SUCCESS; - }