Geant4 Cross Reference |
1 // 1 2 // Fit of longitudinal profile with Gamma func 3 // See Review of Particles Physics - Electroma 4 // 5 //....oooOO0OOooo........oooOO0OOooo........oo 6 7 Double_t GammaFunction(Double_t* t, Double_t* 8 if (ROOT::TMath::Gamma(params[0]) != 0 ) { 9 return (100 * pow(params[1],params[0]) / R 10 * pow(t[0],(params[0]-1)) * exp (-p 11 } else { 12 return 0; 13 } 14 } 15 16 //....oooOO0OOooo........oooOO0OOooo........oo 17 18 void GammaFit() { 19 cout 20 << "Try fit [100*pow(b,a)/ROOT::TMath::Gamma 21 << endl; 22 TFile* f = new TFile("93ref0.root"); 23 TH1D* h1 = (TH1D*) f->Get("4"); 24 //put error in h1 25 TH1D* h2 = (TH1D*) f->Get("5"); 26 int nmax = h1->GetNbinsX(); 27 for (int n=0; n<nmax; n++) { 28 Double_t er = h2->GetBinContent(n); 29 h1->SetBinError(n,er); 30 } 31 32 TF1* func = new TF1("fit", GammaFunction,-0.5, 33 func->SetParameter(0,1.); 34 func->SetParameter(1,1.); 35 func->SetParNames("a", "b"); 36 37 h1->Fit("fit","r",""); 38 h1->SetMarkerColor(kRed); 39 h1->SetMarkerStyle(3); 40 h1->Draw("epl"); 41 42 Double_t a = func->GetParameter(0); 43 Double_t b = func->GetParameter(1); 44 Double_t tmax = (a-1)/b; 45 46 // Chi-square distribution 47 double chisq=func->GetChisquare(); 48 double ndf=func->GetNDF(); 49 double chisqdf=chisq/ndf; 50 51 gStyle->SetOptFit(1111); 52 53 cout << "------------------------------------- 54 cout << "\n Chisquare: " << chisq << " / " << 55 cout << "\n----------------------------------- 56 cout << "\n a = " << a; 57 cout << "\n b = " << b; 58 cout << "\n tmax = " << tmax; 59 cout << "\n----------------------------------- 60 } 61 62 //....oooOO0OOooo........oooOO0OOooo........oo 63