Programma C++

di il
6 risposte

Programma C++

Buonasera ragazzi, qualcuno sa come si capisce la corrispondenza tra le variabili "i" e "dcore" in questo programma? ovvero tra:

righe 577-584
for(int i=0;i<nbin3;i++) {
     r1=i*binw;
     r2=(i+1)*binw;
     corona=pi*(r2*r2-r1*r1);   // area corona
     cont=hgamlat->GetBinContent(i+1);
     cont=cont/corona/nevok;
     hgamlat->SetBinContent(i+1,cont);
   }
e righe 831-835
 dcore=sqrt(rx*rx+ry*ry); // distance from the shower core

         // =========== gammas =========== 
         if (idpa==1) {
             if (ok==1) hgamlat->Fill(dcore,w);
cioè come faccio a dire a i=0 dcore è ...
a i=1 dcore è...
ecc ecc?

grazie
Allegati:
19879_c689b8fc59a8a6d4c807836db195ddb8.c
19879_c689b8fc59a8a6d4c807836db195ddb8.c

6 Risposte

  • Re: Programma C++

    Non ho capito la domanda... Che vuoi dire?
  • Re: Programma C++

    Ciao oregon e grazie dell'interesse. Il codice che ho allegato crea per ogni valore di i dei bin per degli istogrammi. Su tali istogrammi abbiamo sull'asse x il valore di dcore. Mi servirebbe sapere come capire a ogni distanza dcore quale bin corrisponde (ovvero quale valore di i).
    Per esempio come dire
    dcore==10
    allora
    i==xx
    dove xx è un certo valore
  • Re: Programma C++

    Ma che legame c' è tra i e score? È questo che non si capisce ... legame matematico intendo...
  • Re: Programma C++

    Ciao oregon allora ti spiego. Questo programma (vedi allegato al primo messaggio) fa 3 operazioni

    1) legge i dati da files .outu generati con un programma di simulazione di EAS (sciami di particelle indotti da un particella primaria in atmosfera) chiamato CORSIKA
    2) fa dei calcoli su tali dati
    3) Disegna degli istogrammi tramite un programma chiamato ROOT

    partiamo da queste definizioni

    distanza dal core (chiamata dcore nel programma): è la distanza dal core ( proiezione sul piano della direzione della particella primaria)
    densità di particelle nella corona, ovvero il rapporto tra il numero delle particelle #particelle e l'area della corona, dove l'area della corona si calcola area=pi*(r2^2-r1^2), tale dentità è chiamata "cont"

    Il programma già faceva un istogramma in cui sull'asse delle x abbiamo la distanza dal core e l'asse delle y la densità corrispondente alle varie distanze, cioè densità a dcore==0, densità a dcore==1, ecc ecc.

    per far questo il programma fa questi cicli for
     binw=(xmax3-xmin3)/nbin3;   // bin width
    
       for(int i=0;i<nbin3;i++) {
         r1=i*binw;
         r2=(i+1)*binw;
         corona=pi*(r2*r2-r1*r1);   // area corona
         cont=hgamlat->GetBinContent(i+1);
         cont=cont/corona/nevok;
         hgamlat->SetBinContent(i+1,cont);
       }

    in cui a ogni ciclo setta nell'istogramma i valori di cont e poi invece i valori di dcore li calcola come :
    rx = 1.e-2 * pdata[lz+4];
             ry = 1.e-2 * pdata[lz+5];
             
             dcore=sqrt(rx*rx+ry*ry); // distance from the shower core
    Infine il riempimento dell'istogramma lo fa come:
     if (ok==1) hgamlat->Fill(dcore,w);
    a me quello che serve è sapere, se ad esempio voglio la densità a una distanza dal core dcore==10, quale valore di "i" devo cercare?
    cioè io devo scrivere:
     for(int i=0;i<nbin3;i++) {
         r1=i*binw;
         r2=(i+1)*binw;
         corona=pi*(r2*r2-r1*r1);   // area corona
         cont=hgamlat_1100->GetBinContent(i+1);
         cont=cont/corona/nevok1100;
         if(i==xx)   cout << " gamma density at 10 metri   " << cont << endl;
         hgamlat_1100->SetBinContent(i+1,cont);
     }
     
    ora la mia domanda è, come capire se voglio la densità a 10 metri devo impostare i==... , se la voglio a 50 metri i==....ecc ecc?
  • Re: Programma C++

    Prova così , ho aggiunto cin>>i; e cout<<"Inserire numero : ";
    for(int i=0;i<nbin3;i++) {
         cout<<"Inserire numero : " ;
         cin>>i;   
         r1=i*binw;
         r2=(i+1)*binw;
         corona=pi*(r2*r2-r1*r1);   // area corona
         cont=hgamlat_1100->GetBinContent(i+1);
         cont=cont/corona/nevok1100;
         if(i==xx)   cout << " gamma density at 10 metri   " << cont << endl;
         hgamlat_1100->SetBinContent(i+1,cont);
     }
  • Re: Programma C++

    Ciao alessia e grazie...in realtà quello che serviva a me era un codice che riconoscesse in automatico la corrispodenza...comunque alla fine ho risolto guardando l'istogramma con ROOT e da quello ho capito quale valore di "i" dovevo assegnare...diciamo che non è il massimo...ma funziona!
Devi accedere o registrarti per scrivere nel forum
6 risposte