03. Raggi cosmici

L'Istituto Nazionale di Fisica Nucleare (INFN) di Napoli ha installato un telescopio nella stazione di Toledo della metropolitana di Napoli per rilevare raggi cosmici.

La relativa documentazione è disponibile al seguente link

Ci si pone l'obiettivo di interpretare i file di log nei quali sono registrati gli eventi rilevati dal telescopio e riprodurre graficamente le traiettorie delle particelle intercettate dal telescopio.

Funzioni ausiliarie:

esa2bin()

Esempio di elaborazione:

wall()

Esempio di elaborazione:

stampa()

    1234567890                1234567890

  --------------            --------------

10|       X    |          10|          X |

 9|      X     |           9|         X  |

 8|     X      |           8|         X  |

 7|     X      |           7|         X  |

 6|   X        |           6|        X   |

 5|   X        |           5|        X   |

 4|  X         |           4|       X    |

 3|            |           3|       X    |

 2|            |           2|      X     |

 1|            |           1|      X     |

  --------------            --------------

Funzioni già implementate (da riusare in modo integrale):


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int evento(char *file)

{

    char bin1[120], bin2[120], buff1[DIM], buff2[DIM], *ret;

    int i, n_evento=0;

    FILE *fd;

    fd = fopen(file, "r");

    if (fd==NULL) {

        printf("\nFile degli eventi non trovato\n");

        printf("Premere INVIO per terminare");

        fflush(stdin); // svuota la coda di input

        while ( getchar() != '\n');

        return 0;

    }

    printf("Inserire il numero dell'evento da analizzare (-1 per terminare): ");

    fflush(stdin);

    scanf("%d", &n_evento);

    if(n_evento <0)

        return 0;

    if(n_evento == 0)

        return 1;

    for (i=0; i<n_evento-1; i++) {

        fgets(buff1, DIM, fd);

        fgets(buff1, DIM, fd);

        fgets(buff1, DIM, fd);

    }

    ret = fgets(buff1, DIM, fd);

    if (ret==NULL){

        printf("Evento non presente nel file\n");

        return 1;

    }

    printf("\nEvento: ");

    for (i=0; i<6; i++)

        printf("%c", buff1[i]);

    printf("\n");

    fgets(buff1, DIM, fd);

    wall(buff1, bin1);

    fgets(buff2, DIM, fd);

    wall(buff2, bin2);

    for (i=0; i<30; i++) {

        if (i%3 == 0 && i>0)

            printf(" ");

        printf("%c", buff1[i]);

    }

    printf("\n");

    for (i=0; i<30; i++) {

        if (i%3 == 0 && i>0)

            printf(" ");

        printf("%c", buff2[i]);

    }

    printf("\n\n");

    stampa(bin1, bin2);

    fclose(fd);

    printf("\n\n\n");

    return 1;

}

int main()

{

    char data[100], file[100];

    printf("ANALISI DEI MUONI RILEVATI DAL TELESCOPIO\n\n");

    printf("Data di riferimento (aaaa/mm/gg): ");

    scanf("%s", data);

    data[4]=0;

    data[7]=0;

    strcpy(file, "Muoni_Eventi_");

    strcat(file, data);

    strcat(file,"_");

    strcat(file,data+5);

    strcat(file,"_");

    strcat(file,data+8);

    strcat(file,".txt");

    printf("File degli eventi: %s\n\n", file);

    while (evento(file));

    return 0;

}