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.

This commit is contained in:
redford_s
2018-01-12 09:30:05 +01:00
parent 119a42594a
commit b7fb963d2a
+123 -9
View File
@@ -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());