From b7fb963d2a77a9ece8b91bcbd9367cfbeadad15d Mon Sep 17 00:00:00 2001 From: redford_s Date: Fri, 12 Jan 2018 09:30:05 +0100 Subject: [PATCH] Added Kbeta to fit. Also control plots for all fitted parameters. Stable and good results. 8 keV peak 2 ADU lower than pure Kalpha fit result. --- JFMC_CuFluoPeakFit.cpp | 132 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 9 deletions(-) diff --git a/JFMC_CuFluoPeakFit.cpp b/JFMC_CuFluoPeakFit.cpp index 8b9f56a..775b516 100644 --- a/JFMC_CuFluoPeakFit.cpp +++ b/JFMC_CuFluoPeakFit.cpp @@ -56,6 +56,18 @@ int main(int argc, char* argv[]) { high_ADU_peak = 400; } + TH1F* fit_par3 = new TH1F("fit_par3","",100,0,50); + TH1F* fit_par4 = new TH1F("fit_par4","",100,0,500); + TH1F* fit_par5 = new TH1F("fit_par5","",100,0,0.5); + TH1F* fit_par6 = new TH1F("fit_par6","",100,1.05,1.25); + TH1F* fit_par7 = new TH1F("fit_par7","",100,0,0.4); + + TH2F* fit_par3_2d = new TH2F("fit_par3_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par4_2d = new TH2F("fit_par4_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par5_2d = new TH2F("fit_par5_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par6_2d = new TH2F("fit_par6_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par7_2d = new TH2F("fit_par7_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH1F* peak_fit_pos = new TH1F("peak_fit_pos","",100,low_ADU_peak,high_ADU_peak); TH1F* peak_fit_poserr = new TH1F("peak_fit_poserr","",100,0,2); TH2F* peak_fit_pos_2d = new TH2F("peak_fit_pos_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); @@ -87,10 +99,10 @@ int main(int argc, char* argv[]) { int high_bin_peak = 0; if (gain_str == "HG0") { low_bin_peak = 701; - high_bin_peak = 1101; + high_bin_peak = 1200; } else if (gain_str == "G0") { low_bin_peak = 301; - high_bin_peak = 601; + high_bin_peak = 651; } for (int j=1; j<9; j++) { @@ -125,21 +137,47 @@ int main(int argc, char* argv[]) { proj_peak->SetStats(kTRUE); proj_peak->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); - Double_t mypar[6]; + Double_t mypar[8]; mypar[0] = 0.0; mypar[1] = 0.0; mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); - mypar[3] = 19.; + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); - mypar[5] = 0.18; - - Double_t emypar[6]; + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + mypar[6] = 1.12; + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + Double_t emypar[8]; energyCalibration *thiscalibration = new energyCalibration(); thiscalibration->setScanSign(1); thiscalibration->setStartParametersKb(mypar); thiscalibration->fixParameter(0,0.); // no background thiscalibration->fixParameter(1,0.); - TF1* fittedfun = thiscalibration->fitSpectrum(proj_peak,mypar,emypar); + TF1* fittedfun = thiscalibration->fitSpectrumKb(proj_peak,mypar,emypar); + + fit_par3->Fill(mypar[3]); + fit_par4->Fill(mypar[4]); + fit_par5->Fill(mypar[5]); + fit_par6->Fill(mypar[6]); + fit_par7->Fill(mypar[7]); + + fit_par3_2d->Fill(i%NC,i/NC,mypar[3]); + fit_par4_2d->Fill(i%NC,i/NC,mypar[4]); + fit_par5_2d->Fill(i%NC,i/NC,mypar[5]); + fit_par6_2d->Fill(i%NC,i/NC,mypar[6]); + fit_par7_2d->Fill(i%NC,i/NC,mypar[7]); peak_fit_pos->Fill(mypar[2]); peak_fit_poserr->Fill(emypar[2]); @@ -192,13 +230,23 @@ int main(int argc, char* argv[]) { erfc_Ka->SetParameters(mypar[4]*mypar[5], 1, mypar[2], mypar[3]); erfc_Ka->SetLineColor(kOrange); + TF1 *gaus_Kb = new TF1("gaus_Kb","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Kb->SetParameters(mypar[4]*mypar[7],mypar[6]*mypar[2],mypar[3]); + gaus_Kb->SetLineColor(kGreen+2); + + TF1 *erfc_Kb = new TF1("erfc_Kb","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Kb->SetParameters(mypar[4]*mypar[7]*mypar[5], 1, mypar[6]*mypar[2], mypar[3]); + erfc_Kb->SetLineColor(kOrange+7); + proj_peak->Draw(); + erfc_Kb->Draw("same"); erfc_Ka->Draw("same"); + gaus_Kb->Draw("same"); gaus_Ka->Draw("same"); fittedfun->Draw("same"); c1->Update(); proj_peak->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); - fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS"); + fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS", "K_{#beta}/K_{#alpha} pos", "K_{#beta} frac"); TPaveStats *st = (TPaveStats*)proj_peak->FindObject("stats"); st->SetX1NDC(0.22); st->SetX2NDC(0.62); @@ -263,6 +311,46 @@ int main(int argc, char* argv[]) { pave->SetTextSize(0.06); pave->SetTextAlign(32); + fit_par3_2d->GetXaxis()->SetTitle("Column"); + fit_par3_2d->GetYaxis()->SetTitle("Row"); + fit_par3_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par3_2d->Draw("colz"); + fit_par3_2d->GetZaxis()->SetRangeUser(0,50); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par3_2d_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par4_2d->GetXaxis()->SetTitle("Column"); + fit_par4_2d->GetYaxis()->SetTitle("Row"); + fit_par4_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par4_2d->Draw("colz"); + fit_par4_2d->GetZaxis()->SetRangeUser(0,500); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par4_2d_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par5_2d->GetXaxis()->SetTitle("Column"); + fit_par5_2d->GetYaxis()->SetTitle("Row"); + fit_par5_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par5_2d->Draw("colz"); + fit_par5_2d->GetZaxis()->SetRangeUser(0,0.5); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par5_2d_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par6_2d->GetXaxis()->SetTitle("Column"); + fit_par6_2d->GetYaxis()->SetTitle("Row"); + fit_par6_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par6_2d->Draw("colz"); + fit_par6_2d->GetZaxis()->SetRangeUser(1.0,1.25); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par6_2d_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par7_2d->GetXaxis()->SetTitle("Column"); + fit_par7_2d->GetYaxis()->SetTitle("Row"); + fit_par7_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par7_2d->Draw("colz"); + fit_par7_2d->GetZaxis()->SetRangeUser(0.,0.4); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par7_2d_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + peak_fit_pos_2d->GetXaxis()->SetTitle("Column"); peak_fit_pos_2d->GetYaxis()->SetTitle("Row"); peak_fit_pos_2d->GetYaxis()->SetTitleOffset(0.7); @@ -343,6 +431,32 @@ int main(int argc, char* argv[]) { mapcanvas->SaveAs((const char *)(savename)); c1->cd(); + + fit_par3->GetXaxis()->SetTitle("Fit par 3"); + fit_par3->Draw(); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par3_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par4->GetXaxis()->SetTitle("Fit par 4"); + fit_par4->Draw(); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par4_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par5->GetXaxis()->SetTitle("Fit par 5"); + fit_par5->Draw(); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par5_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par6->GetXaxis()->SetTitle("Fit par 6"); + fit_par6->Draw(); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par6_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par7->GetXaxis()->SetTitle("Fit par 7"); + fit_par7->Draw(); + sprintf(savename,"plots/M%s/CuFluo/%s/fit_par7_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + peak_fit_pos->GetXaxis()->SetTitle("Peak position [ADU]"); peak_fit_pos->Draw(); sprintf(savename,"plots/M%s/CuFluo/%s/peak_fit_pos_%s_M%s.png",module_str.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str());