Difference between revisions of "Lmd eta three pion hlu"
From Lmdwiki
Jump to navigationJump to searchLine 134: | Line 134: | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | |||
+ | <pre> | ||
+ | test(){ | ||
+ | const float NEvent=1e5; | ||
+ | const float NSignal=1e5; | ||
+ | const int NBin=20; | ||
+ | const float Low=-5; | ||
+ | const float High=5; | ||
+ | const float BinWidth=(High-Low)/NBin; | ||
+ | TRandom3 random(0); | ||
+ | TH1D* h1=new TH1D("test","test",NBin,Low,High); | ||
+ | h1->FillRandom("pol2",NEvent); | ||
+ | h1->FillRandom("gaus",NSignal); | ||
+ | TH1D* h2=h1->Clone("subtracted"); | ||
+ | for(int i=2;i<100;i++){ | ||
+ | float middle=h1->GetBinContent(i); | ||
+ | float left=h1->GetBinContent(i-1); | ||
+ | float right=h1->GetBinContent(i+1); | ||
+ | float result=middle-(left+right)/2.0; | ||
+ | float error=sqrt(middle+left/2.0+right/2.0); | ||
+ | h2->SetBinContent(i,result); | ||
+ | h2->SetBinError(i,error); | ||
+ | } | ||
+ | |||
+ | TF1* funcFix=new TF1("fit_fix","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/([2]**4))"); | ||
+ | |||
+ | funcFix->FixParameter(2,1); | ||
+ | funcFix->FixParameter(0,NSignal/sqrt(2*3.1416)/1*BinWidth); | ||
+ | funcFix->FixParameter(1,0); | ||
+ | funcFix->FixParameter(3,BinWidth); | ||
+ | funcFix->SetLineColor(kRed); | ||
+ | h2->Fit("fit_fix"); | ||
+ | TF1* func=new TF1("fit","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/([2]**4))"); | ||
+ | |||
+ | func->FixParameter(2,1); | ||
+ | // func->FixParameter(0,NEvent/sqrt(2*3.1416)/1*BinWidth); | ||
+ | func->FixParameter(1,0); | ||
+ | func->FixParameter(3,BinWidth); | ||
+ | func->SetLineColor(kBlue); | ||
+ | h2->Fit("fit","+"); | ||
+ | |||
+ | TCanvas* c2=new TCanvas("c2","c2",696,474); | ||
+ | h2->Draw(); | ||
+ | TCanvas* c1=new TCanvas("c1","c1",696,474); | ||
+ | TF1* signal_back=new TF1("signal_back","gaus(0)+pol2(2)"); | ||
+ | signal_back->SetParameters(NEvent/sqrt(2*3.1416)/1*BinWidth,0.0,1.0,0.0,0.0,0.0); | ||
+ | h1->Fit("signal_back"); | ||
+ | h1->Draw(); | ||
+ | } | ||
+ | </pre> | ||
==reference== | ==reference== |
Revision as of 11:43, 17 March 2014
Statistics
Fit missing mass of proton
Error creating thumbnail: File missing |
Error creating thumbnail: File missing |
More
File:Eta and eta prime two pion.pdf
Form of side-band subtraction histograms
Question: Suppose there is an original function (e.g. Gaussian), what is the form of the function after bin-by-bin side-band subtraction
Answer: Suppose the function is y=f(x). The side-band subtraction makes a new function:
Test of the formula
10M events of Gaussian distribution were generated for a histograms:
side-band subtracted and plot together with the function:
source code:
test(){ const float NEvent=1e7; const int NBin=50; const float Low=-5; const float High=5; const float BinWidth=(High-Low)/NBin; TH1D* h1=new TH1D("test","test",NBin,Low,High); h1->FillRandom("gaus",NEvent); TH1D* h2=h1->Clone("subtracted"); for(int i=2;i<100;i++){ float middle=h1->GetBinContent(i); float left=h1->GetBinContent(i-1); float right=h1->GetBinContent(i+1); float result=middle-(left+right)/2.0; float error=sqrt(middle+left/2.0+right/2.0); h2->SetBinContent(i,result); h2->SetBinError(i,error); } TF1* func=new TF1("fit","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/([2]**4))"); func->FixParameter(2,1); func->FixParameter(0,NEvent/sqrt(2*3.1416)/1*BinWidth); func->FixParameter(1,0); func->FixParameter(3,BinWidth); h2->Fit("fit"); TCanvas* c1=new TCanvas("c1","c1",696,474); h2->Draw(); TCanvas* c2=new TCanvas("c2","c2",696,474); h1->Fit("gaus"); h1->Draw(); }
Test with larg bin width
Error creating thumbnail: File missing |
Error creating thumbnail: File missing |
Error creating thumbnail: File missing |
test(){ const float NEvent=1e3; const int NBin=5; const float Low=-5; const float High=5; const float BinWidth=(High-Low)/NBin; TRandom3 random(0); TH1D* h1=new TH1D("test","test",NBin,Low,High); h1->FillRandom("gaus",NEvent); TH1D* h2=h1->Clone("subtracted"); for(int i=2;i<100;i++){ float middle=h1->GetBinContent(i); float left=h1->GetBinContent(i-1); float right=h1->GetBinContent(i+1); float result=middle-(left+right)/2.0; float error=sqrt(middle+left/2.0+right/2.0); h2->SetBinContent(i,result); h2->SetBinError(i,error); } TF1* funcFix=new TF1("fit_fix","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*ga\ us(0)/([2]**4))"); funcFix->FixParameter(2,1); funcFix->FixParameter(0,NEvent/sqrt(2*3.1416)/1*BinWidth); funcFix->FixParameter(1,0); funcFix->FixParameter(3,BinWidth); funcFix->SetLineColor(kRed); h2->Fit("fit_fix"); TF1* func=new TF1("fit","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/(\ [2]**4))"); func->FixParameter(2,1); // func->FixParameter(0,NEvent/sqrt(2*3.1416)/1*BinWidth); func->FixParameter(1,0); func->FixParameter(3,BinWidth); func->SetLineColor(kBlue); h2->Fit("fit","+"); TCanvas* c1=new TCanvas("c1","c1",696,474); h2->Draw(); TCanvas* c2=new TCanvas("c2","c2",696,474); h1->Fit("gaus"); h1->Draw(); }
Test with background
Error creating thumbnail: File missing |
Error creating thumbnail: File missing |
test(){ const float NEvent=1e5; const float NSignal=1e5; const int NBin=20; const float Low=-5; const float High=5; const float BinWidth=(High-Low)/NBin; TRandom3 random(0); TH1D* h1=new TH1D("test","test",NBin,Low,High); h1->FillRandom("pol2",NEvent); h1->FillRandom("gaus",NSignal); TH1D* h2=h1->Clone("subtracted"); for(int i=2;i<100;i++){ float middle=h1->GetBinContent(i); float left=h1->GetBinContent(i-1); float right=h1->GetBinContent(i+1); float result=middle-(left+right)/2.0; float error=sqrt(middle+left/2.0+right/2.0); h2->SetBinContent(i,result); h2->SetBinError(i,error); } TF1* funcFix=new TF1("fit_fix","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/([2]**4))"); funcFix->FixParameter(2,1); funcFix->FixParameter(0,NSignal/sqrt(2*3.1416)/1*BinWidth); funcFix->FixParameter(1,0); funcFix->FixParameter(3,BinWidth); funcFix->SetLineColor(kRed); h2->Fit("fit_fix"); TF1* func=new TF1("fit","-[3]*[3]/2*(-gaus(0)/[2]/[2]+(x-[1])*(x-[1])*gaus(0)/([2]**4))"); func->FixParameter(2,1); // func->FixParameter(0,NEvent/sqrt(2*3.1416)/1*BinWidth); func->FixParameter(1,0); func->FixParameter(3,BinWidth); func->SetLineColor(kBlue); h2->Fit("fit","+"); TCanvas* c2=new TCanvas("c2","c2",696,474); h2->Draw(); TCanvas* c1=new TCanvas("c1","c1",696,474); TF1* signal_back=new TF1("signal_back","gaus(0)+pol2(2)"); signal_back->SetParameters(NEvent/sqrt(2*3.1416)/1*BinWidth,0.0,1.0,0.0,0.0,0.0); h1->Fit("signal_back"); h1->Draw(); }