created -9.82 13.2981 2
created -9.46 66.4904 10
created -9.1 53.1923 8
created -8.74 6.64904 1
created -8.38 53.1923 8
created -8.02 6.64904 1
created -7.66 39.8942 6
created -7.3 39.8942 6
created -6.94 33.2452 5
created -6.58 26.5962 4
created -6.22 26.5962 4
created -5.86 33.2452 5
created -5.5 53.1923 8
created -5.14 19.9471 3
created -4.78 6.64904 1
created -4.42 66.4904 10
created -4.06 39.8942 6
created -3.7 19.9471 3
created -3.34 39.8942 6
created -2.98 33.2452 5
created -2.62 33.2452 5
created -2.26 46.5433 7
created -1.9 33.2452 5
created -1.54 33.2452 5
created -1.18 59.8413 9
created -0.82 46.5433 7
created -0.46 39.8942 6
created -0.1 46.5433 7
created 0.26 13.2981 2
created 0.62 26.5962 4
created 0.98 39.8942 6
created 1.34 59.8413 9
created 1.7 19.9471 3
created 2.06 59.8413 9
created 2.42 46.5433 7
created 2.78 19.9471 3
created 3.14 26.5962 4
created 3.5 33.2452 5
created 3.86 26.5962 4
created 4.22 46.5433 7
created 4.58 59.8413 9
created 4.94 26.5962 4
created 5.3 39.8942 6
created 5.66 19.9471 3
created 6.02 33.2452 5
created 6.38 26.5962 4
created 6.74 33.2452 5
created 7.1 26.5962 4
created 7.46 66.4904 10
created 7.82 59.8413 9
created 8.18 53.1923 8
created 8.54 46.5433 7
created 8.9 53.1923 8
created 9.26 66.4904 10
created 9.62 66.4904 10
the total number of created peaks = 55 with sigma = 0.06
the total number of found peaks = 55 with sigma = 0.0600004 (+-1.6132e-05)
fit chi^2 = 3.8065e-06
found -9.46 (+-0.000158233) 66.4904 (+-0.173214) 10.0001 (+-0.00087373)
found -4.42 (+-0.000157861) 66.4902 (+-0.173168) 10 (+-0.000873496)
found 7.46 (+-0.000158584) 66.4905 (+-0.173259) 10.0001 (+-0.000873955)
found 9.26 (+-0.000159015) 66.4907 (+-0.173317) 10.0001 (+-0.000874245)
found 9.62 (+-0.000157599) 66.4908 (+-0.173155) 10.0001 (+-0.000873432)
found 7.82 (+-0.000167757) 59.8417 (+-0.16444) 9.00012 (+-0.00082947)
found -1.18 (+-0.000167239) 59.8415 (+-0.164376) 9.00008 (+-0.000829149)
found 1.34 (+-0.000166892) 59.8413 (+-0.164335) 9.00006 (+-0.000828942)
found 2.06 (+-0.000166984) 59.8414 (+-0.164347) 9.00007 (+-0.000828999)
found 4.58 (+-0.000167121) 59.8414 (+-0.164362) 9.00007 (+-0.000829079)
found -9.1 (+-0.000177059) 53.1924 (+-0.154948) 8.00007 (+-0.000781591)
found 8.18 (+-0.000177932) 53.1927 (+-0.155035) 8.00011 (+-0.000782031)
found -8.38 (+-0.000175867) 53.192 (+-0.154822) 8.00001 (+-0.000780956)
found -5.5 (+-0.000177034) 53.1923 (+-0.154938) 8.00005 (+-0.000781542)
found 8.9 (+-0.000178013) 53.1927 (+-0.155045) 8.00011 (+-0.000782078)
found -0.82 (+-0.000190312) 46.5436 (+-0.145032) 7.0001 (+-0.000731571)
found 2.42 (+-0.000189863) 46.5435 (+-0.14499) 7.00008 (+-0.000731361)
found 8.54 (+-0.000190437) 46.5437 (+-0.145044) 7.00011 (+-0.000731632)
found -2.26 (+-0.000189736) 46.5434 (+-0.144976) 7.00007 (+-0.000731289)
found -0.1 (+-0.000189334) 46.5433 (+-0.14494) 7.00005 (+-0.000731109)
found 4.22 (+-0.000190036) 46.5435 (+-0.145006) 7.00009 (+-0.00073144)
found -4.06 (+-0.00020542) 39.8945 (+-0.134264) 6.00009 (+-0.000677256)
found -7.66 (+-0.000204374) 39.8943 (+-0.13418) 6.00005 (+-0.000676835)
found -7.3 (+-0.000205319) 39.8944 (+-0.134253) 6.00007 (+-0.0006772)
found -3.34 (+-0.000204808) 39.8943 (+-0.134212) 6.00005 (+-0.000676991)
found -0.46 (+-0.000205732) 39.8946 (+-0.134288) 6.00009 (+-0.000677375)
found 0.98 (+-0.000205515) 39.8945 (+-0.134271) 6.00009 (+-0.000677289)
found 5.3 (+-0.000204642) 39.8943 (+-0.134198) 6.00005 (+-0.000676923)
found -6.94 (+-0.000225053) 33.2454 (+-0.122565) 5.00007 (+-0.000618246)
found -5.86 (+-0.000225349) 33.2455 (+-0.122587) 5.00008 (+-0.000618353)
found -2.98 (+-0.00022525) 33.2455 (+-0.122579) 5.00007 (+-0.000618314)
found -2.62 (+-0.000225405) 33.2455 (+-0.12259) 5.00008 (+-0.00061837)
found -1.9 (+-0.000225405) 33.2455 (+-0.12259) 5.00008 (+-0.00061837)
found -1.54 (+-0.000225676) 33.2456 (+-0.12261) 5.00009 (+-0.00061847)
found 3.5 (+-0.000224685) 33.2453 (+-0.12254) 5.00005 (+-0.000618116)
found 6.02 (+-0.000224455) 33.2453 (+-0.122524) 5.00005 (+-0.000618038)
found 6.74 (+-0.000224685) 33.2453 (+-0.12254) 5.00005 (+-0.000618116)
found -6.58 (+-0.000251882) 26.5964 (+-0.109641) 4.00006 (+-0.00055305)
found -6.22 (+-0.000251882) 26.5964 (+-0.109641) 4.00006 (+-0.00055305)
found 3.86 (+-0.000252518) 26.5965 (+-0.109677) 4.00008 (+-0.000553234)
found 4.94 (+-0.000253058) 26.5966 (+-0.109709) 4.0001 (+-0.000553393)
found 6.38 (+-0.00025212) 26.5964 (+-0.109654) 4.00007 (+-0.000553118)
found 7.1 (+-0.000252993) 26.5966 (+-0.109705) 4.0001 (+-0.000553377)
found 0.620001 (+-0.000251461) 26.5963 (+-0.109619) 4.00005 (+-0.00055294)
found 3.14 (+-0.000251601) 26.5963 (+-0.109625) 4.00005 (+-0.000552972)
found -5.14 (+-0.000290876) 19.9474 (+-0.0949583) 3.00006 (+-0.00047899)
found -3.7 (+-0.000292442) 19.9475 (+-0.0950205) 3.00008 (+-0.000479303)
found 1.7 (+-0.000293771) 19.9478 (+-0.0950805) 3.00012 (+-0.000479606)
found 2.78 (+-0.000292105) 19.9475 (+-0.0950062) 3.00007 (+-0.000479231)
found 5.66 (+-0.000292172) 19.9475 (+-0.0950086) 3.00007 (+-0.000479244)
found 0.259999 (+-0.000359315) 13.2985 (+-0.0776189) 2.00007 (+-0.000391526)
found -9.82 (+-0.00035808) 13.2984 (+-0.0775823) 2.00007 (+-0.000391341)
found -8.74 (+-0.000515893) 6.64971 (+-0.055008) 1.00011 (+-0.000277472)
found -8.02 (+-0.00051473) 6.64962 (+-0.0549889) 1.00009 (+-0.000277376)
found -4.78 (+-0.000513279) 6.64958 (+-0.0549677) 1.00009 (+-0.000277269)
#include <iostream>
TH1F *FitAwmi_Create_Spectrum(
void) {
delete gROOT->FindObject(
"h");
npeaks++;
std::cout << "created "
<< area << std::endl;
}
std::cout << "the total number of created peaks = " << npeaks
<<
" with sigma = " <<
sigma << std::endl;
}
void FitAwmi(void) {
TH1F *
h = FitAwmi_Create_Spectrum();
if (!cFit) cFit =
new TCanvas(
"cFit",
"cFit", 10, 10, 1000, 700);
for (
i = 0;
i < nbins;
i++) source[
i] =
h->GetBinContent(
i + 1);
for(
i = 0;
i < nfound;
i++) FixAmp[
i] = FixPos[
i] =
kFALSE;
for (
i = 0;
i < nfound;
i++) {
bin = 1 +
Int_t(Pos[
i] + 0.5);
Amp[
i] =
h->GetBinContent(bin);
}
delete gROOT->FindObject(
"d");
TH1F *
d =
new TH1F(*
h);
d->SetNameTitle(
"d",
"");
d->Reset(
"M");
for (
i = 0;
i < nbins;
i++)
d->SetBinContent(
i + 1, source[
i]);
sigma *= dx; sigmaErr *= dx;
std::cout << "the total number of found peaks = " << nfound
<<
" with sigma = " <<
sigma <<
" (+-" << sigmaErr <<
")"
<< std::endl;
std::cout <<
"fit chi^2 = " << pfit->
GetChi() << std::endl;
for (
i = 0;
i < nfound;
i++) {
bin = 1 +
Int_t(Positions[
i] + 0.5);
Pos[
i] =
d->GetBinCenter(bin);
Amp[
i] =
d->GetBinContent(bin);
Positions[
i] =
x1 + Positions[
i] * dx;
PositionsErrors[
i] *= dx;
std::cout << "found "
<< Positions[
i] <<
" (+-" << PositionsErrors[
i] <<
") "
<< Amplitudes[
i] <<
" (+-" << AmplitudesErrors[
i] <<
") "
<< Areas[
i] <<
" (+-" << AreasErrors[
i] <<
")"
<< std::endl;
}
d->SetLineColor(
kRed);
d->SetLineWidth(1);
if (pm) {
h->GetListOfFunctions()->Remove(pm);
delete pm;
}
h->GetListOfFunctions()->Add(pm);
delete pfit;
delete [] Amp;
delete [] FixAmp;
delete [] FixPos;
delete s;
delete [] source;
return;
}
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
Option_t Option_t TPoint TPoint const char x1
R__EXTERN TRandom * gRandom
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
void Clear(Option_t *option="") override
Remove all primitives from the canvas.
1-D histogram with a float per channel (see TH1 documentation)
A PolyMarker is defined by an array on N points in a 2-D space.
Advanced 1-dimensional spectra fitting functions.
void SetPeakParameters(Double_t sigma, Bool_t fixSigma, const Double_t *positionInit, const Bool_t *fixPosition, const Double_t *ampInit, const Bool_t *fixAmp)
This function sets the following fitting parameters of peaks:
Double_t * GetAmplitudesErrors() const
void FitAwmi(Double_t *source)
This function fits the source spectrum.
Double_t * GetAreasErrors() const
void GetSigma(Double_t &sigma, Double_t &sigmaErr)
This function gets the sigma parameter and its error.
Double_t * GetAreas() const
Double_t * GetAmplitudes() const
void SetFitParameters(Int_t xmin, Int_t xmax, Int_t numberIterations, Double_t alpha, Int_t statisticType, Int_t alphaOptim, Int_t power, Int_t fitTaylor)
This function sets the following fitting parameters:
Double_t * GetPositionsErrors() const
Double_t * GetPositions() const
Advanced Spectra Processing.
Int_t SearchHighRes(Double_t *source, Double_t *destVector, Int_t ssize, Double_t sigma, Double_t threshold, bool backgroundRemove, Int_t deconIterations, bool markov, Int_t averWindow)
One-dimensional high-resolution peak search function.
Double_t * GetPositionX() const
constexpr Double_t Sqrt2()
Double_t Sqrt(Double_t x)
Returns the square root of x.
constexpr Double_t TwoPi()