Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. {
  2. double myf(double x) {
  3.     return 3056.0000*exp(-16.169537/79.763775*x) + 8642.7210*exp(-0.5*((x-5.2354407)/0.60448542)*((x-5.2354407)/0.60448542));
  4. }
  5.  
  6. ifstream dati1("daterelli.dat");
  7. ifstream dati2("daterelli2.dat");
  8. TH1D *hist[6];
  9. int i, c;
  10. double a;
  11.  
  12. for (i = 0; i < 6; i++) {
  13.     hist[i] = new TH1D(Form("h%d", i+1), "", 50, 0, 10);
  14. }
  15.  
  16. c = 4;
  17. while(dati2>>a) {
  18.     c++;
  19.     hist[c-1]->Fill(a);
  20.     if(c==6) {
  21.         c = 4;
  22.     }
  23. }
  24.  
  25. c = 0;
  26. while(dati1>>a) {
  27.     c++;
  28.     hist[c-1]->Fill(a);
  29.     if(c == 4) {
  30.         c = 0;
  31.     }
  32. }
  33.  
  34. //h3 -> esponenziale
  35.  
  36. //hist[2]->Draw();
  37. TF1 *funz1 = new TF1("funz1", "[0]*exp(-[1]/[2]*x)", 0, 10);
  38. funz1->SetParameters(1,1,1);
  39. hist[2]->Fit("funz1", "R");
  40.  
  41.  
  42. /*
  43. //h2 -> parabola
  44. hist[1]->Draw();
  45. TF1 *funz2 = new TF1("funz2", "[0]+[1]*x+[2]*x*x", 0, 10);
  46. hist[1]->Fit("funz2");
  47. */
  48.  
  49.  
  50. //h1 -> gaussiana
  51. TF1 *funz3 = new TF1("funz3", "[0]*exp(-0.5*((x-[1])/[2])^2)", 0, 10);
  52. funz3->SetParameters(1,1,1);
  53. hist[0]->Fit("funz3","R");
  54. //hist[0]->Draw();
  55.  
  56. // Inizialmente ho calcolato il fit dell'esponenziale e della gaussiana separatamente, mi sono preso i parametri e li ho messi manualmente
  57. // in una funzione funz4. Dopodiche' ho tolto il primo parametro e ho lasciato che lo trovasse lui: e' diverso, perche'?
  58. // Inoltre ho calcolato il chi square, risulta diverso di qualche decimale, perche'?
  59.  
  60. //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
  61. 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);
  62.  
  63.  
  64. // Lasciando i parametri liberi sbaglia completamente!
  65. //TF1 *funz4 = new TF1("funz4", "[0]*exp(-[1]/[2]*x) + [3]*exp(-0.5*((x-[4])/[5])^2)", 0, 10);
  66. //funz4->SetParameters(1,1,1,1,1,1);
  67. hist[4]->Fit("funz4", "R");
  68. hist[4]->Draw();
  69. //funz4->Draw("Same");
  70.  
  71. double chi2 = 0.0, err;
  72. for(i = 1; i <= 50; i++) {
  73.     err = hist[4]->GetBinContent(i) -  myf(hist[4]->GetBinCenter(i));
  74.     chi2 += (err*err)/myf(hist[4]->GetBinCenter(i));
  75. }
  76. cout<<"Chi2 = "<<chi2<<endl;
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement