Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- double myf(double x) {
- return 3056.0000*exp(-16.169537/79.763775*x) + 8642.7210*exp(-0.5*((x-5.2354407)/0.60448542)*((x-5.2354407)/0.60448542));
- }
- ifstream dati1("daterelli.dat");
- ifstream dati2("daterelli2.dat");
- TH1D *hist[6];
- int i, c;
- double a;
- for (i = 0; i < 6; i++) {
- hist[i] = new TH1D(Form("h%d", i+1), "", 50, 0, 10);
- }
- c = 4;
- while(dati2>>a) {
- c++;
- hist[c-1]->Fill(a);
- if(c==6) {
- c = 4;
- }
- }
- c = 0;
- while(dati1>>a) {
- c++;
- hist[c-1]->Fill(a);
- if(c == 4) {
- c = 0;
- }
- }
- //h3 -> esponenziale
- //hist[2]->Draw();
- TF1 *funz1 = new TF1("funz1", "[0]*exp(-[1]/[2]*x)", 0, 10);
- funz1->SetParameters(1,1,1);
- hist[2]->Fit("funz1", "R");
- /*
- //h2 -> parabola
- hist[1]->Draw();
- TF1 *funz2 = new TF1("funz2", "[0]+[1]*x+[2]*x*x", 0, 10);
- hist[1]->Fit("funz2");
- */
- //h1 -> gaussiana
- TF1 *funz3 = new TF1("funz3", "[0]*exp(-0.5*((x-[1])/[2])^2)", 0, 10);
- funz3->SetParameters(1,1,1);
- hist[0]->Fit("funz3","R");
- //hist[0]->Draw();
- // Inizialmente ho calcolato il fit dell'esponenziale e della gaussiana separatamente, mi sono preso i parametri e li ho messi manualmente
- // in una funzione funz4. Dopodiche' ho tolto il primo parametro e ho lasciato che lo trovasse lui: e' diverso, perche'?
- // Inoltre ho calcolato il chi square, risulta diverso di qualche decimale, perche'?
- //h5 -> gaussiana + esponenziale 3056.0000 dal fit di h3 - quello trovato da questo fit e' 3052.8662; con il mio chi2 risulta piu' preciso il fit con 3056 rispetto a 3052.8662
- TF1 *funz4 = new TF1("funz4", "[0]*exp(-16.169537/79.763775*x) + 8642.7210*exp(-0.5*((x-5.2354407)/0.60448542)^2)", 0, 10);
- // Lasciando i parametri liberi sbaglia completamente!
- //TF1 *funz4 = new TF1("funz4", "[0]*exp(-[1]/[2]*x) + [3]*exp(-0.5*((x-[4])/[5])^2)", 0, 10);
- //funz4->SetParameters(1,1,1,1,1,1);
- hist[4]->Fit("funz4", "R");
- hist[4]->Draw();
- //funz4->Draw("Same");
- double chi2 = 0.0, err;
- for(i = 1; i <= 50; i++) {
- err = hist[4]->GetBinContent(i) - myf(hist[4]->GetBinCenter(i));
- chi2 += (err*err)/myf(hist[4]->GetBinCenter(i));
- }
- cout<<"Chi2 = "<<chi2<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement