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:
+123
-9
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user