const Double_t def_amplitude=histogrampointer->GetBinContent(histogrampointer->GetMaximumBin());
const Double_t def_peakcenter=histogrampointer->GetBinCenter(histogrampointer->GetMaximumBin());
-// cout << colorcyan << "def_amplitude: " << def_amplitude << endlr;
-// cout << colorcyan << "def_peakcenter: " << def_peakcenter << endlr;
+// cout << colorcyan << "def_amplitude: " << def_amplitude << endlr;
+// cout << colorcyan << "def_peakcenter: " << def_peakcenter << endlr;
const Double_t def_gausssig=10;
// set start values for some parameters
fitFunc->SetParName(0,"amplitude of peak");
fitFunc->SetParLimits(1,def_peakcenter*0.8,def_peakcenter*1.2);
fitFunc->SetParName(2,"Gaussian sigma");
fitFunc->SetParameter(2,def_gausssig);
- fitFunc->SetParLimits(2,0,100);
+ fitFunc->SetParLimits(2,0.0,100.0);
fitFunc->SetLineWidth(4);
fitFunc->SetLineColor(kGreen);
int fittries = 0;
Bool_t failed = false;
- do {
- if (failed)
- {
- fitFunc->SetParameter(0,def_amplitude*(1.0-0.1*++fittries));
- fitFunc->SetParameter(1,def_peakcenter);
- fitFunc->SetParameter(2,def_gausssig);
- } else fittries = 100;
+ do {
failed = false;
fit_result_ptr = histogrampointer->Fit(fitFunc, "NMWQS", "", noiseborder, posMaxValHist);
if (gMinuit == nullptr) {
if (gMinuit->fCstatu == "NOT POSDEF" || gMinuit->fCstatu.Contains("FAILED")) {
failed = true;
}
- }
+ }
+ if (failed)
+ {
+ fitFunc->SetParameter(0,def_amplitude*(1.0-0.1*++fittries));
+ fitFunc->SetParameter(1,def_peakcenter);
+ fitFunc->SetParameter(2,def_gausssig);
+ } else fittries = 100;
} while (fittries < 6);
+
// get parameters
for (Int_t pari=0; pari<3; pari++) {
//cout << colorcyan << fitFunc->GetParameter(pari) << endlr;
integralPeak = histogrampointer->IntegralAndError(histogrampointer->GetXaxis()->FindBin( parameters[7] ), histogrampointer->GetXaxis()->FindBin( parameters[8]), integralPeakError, "width"); // integral value of histogram (NOT fit), normaliezed with bin size!
posMax = fitFunc->GetMaximumX(); // Methode 2
fitFunc->SetLineStyle(1); // normal for the following fits
+
if (verbose)
fitFunc->Draw("SAME");
}
cout << colorcyan << "noiseborder: " << noiseborder << endlr;
}
// histogrampointer->GetXaxis()->SetRange(noiseborder,histogrampointer->FindLastBinAbove(0)); // look only for maxima with x greater than noiseborder, cut away noise
- histogrampointer->GetXaxis()->SetRange(histogrampointer->FindBin(noiseborder),histogrampointer->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
+ histogrampointer->GetXaxis()->SetRange(histogrampointer->GetXaxis()->FindBin(noiseborder),histogrampointer->GetXaxis()->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
// histogrampointer->GetXaxis()->SetRangeUser(noiseborder,posMaxValHist);
TF1* fitFunc = new TF1("fitFunc",GaussTail,noiseborder,posMaxValHist,6);
// fitFunc->SetParLimits(1,def_peakcenter*0.8,def_peakcenter*1.2);
fitFunc->SetParName(2,"Gaussian sigma");
fitFunc->SetParameter(2,def_gausssig);
- fitFunc->SetParLimits(2,2,50);
- fitFunc->SetParLimits(2,0,10000);
+ fitFunc->SetParLimits(2,0,150);
fitFunc->SetParName(3,"Distance from Gauss");
fitFunc->SetParameter(3,def_distgauss);
fitFunc->SetParLimits(3,0,def_distgauss*4);
Bool_t failed = false;
do {
failed = false;
-// cout << fittries << ": New range: " << histogrampointer->GetXaxis()->GetBinCenter(min+fittries*min/20) << " to " << posMaxValHist << endl;
fit_result_ptr = histogrampointer->Fit(fitFunc, "N,M,W,Q,S", "", noiseborder, posMaxValHist);
// cout << colorcyan << " AFTER fit " << endlr;
if (gMinuit == nullptr) {
fittries = 0;
do {
failed = false;
- fit_result_ptr = histogrampointer->Fit(fitFunc, "N,M,W,Q,S", "", posMaxValHist-posMaxValHist/6*(fittries+1), posMaxValHist);
+ fit_result_ptr = histogrampointer->Fit(fitFunc, "N,M,W,Q,S", "", posMaxValHist-posMaxValHist/4*(++fittries), posMaxValHist);
// cout << colorcyan << " AFTER fit " << endlr;
if (gMinuit == nullptr) {
failed = true;
if (failed)
{
fitFunc->SetParameter(0,def_amplitude);
- fitFunc->SetParameter(1,def_peakcenter);
+ fitFunc->SetParameter(1,posMaxValHist-posMaxValHist/4*(fittries));
fitFunc->SetParameter(2,def_gausssig);
fitFunc->SetParameter(3,def_distgauss);
fitFunc->SetParameter(4,def_bgslope);
}
else
fittries = 100;
- } while (fittries < 6);
+ } while (fittries < 4);
if (failed)
{
failed = false;
+ cout << "Most emphasized estimate" << endlr;
histogrampointer->GetXaxis()->SetRange(0,posMaxValHist); // look only for maxima with x greater than noiseborder, cut away noise
fitFunc->SetParameter(0,def_amplitude);
fitFunc->SetParameter(1,def_peakcenter);
for (vector<HistogramType*>::iterator curHistogramClass = HistogramClassVector.begin(); curHistogramClass != HistogramClassVector.end(); curHistogramClass++) {
Double_t* parameters = (Double_t *)calloc(11, sizeof(Double_t)); // allocate 11 parameters for safety, maximum 10 used at the moment
- cout << colorcyan << "Start fitting" << endlr;
- cout << colorcyan << (*curHistogramClass)->histogramdescription << endlr;
+ cout << colorcyan << (*curHistogramClass)->histogramdescription << endlr;
(*curHistogramClass)->FindNoisethresholdborder((*curHistogramClass)->Seed, false, false);
if (labbook.runnumber == 343056)
(*curHistogramClass)->noisethresholdborder = 34;
if (labbook.source.Contains("Fe")||labbook.source.Contains("Cd")) {
- cout << colorcyan << "Veto" << endlr;
parameters = (*curHistogramClass)->FitPerform((*curHistogramClass)->Veto, "GaussTail");
(*curHistogramClass)->posVeto = parameters[1];
if (labbook.runnumber == 343056)
// cout << (*curHistogramClass)->histogramdescription << ": " << colorcyan << parameters[1] << endlr;
(*curHistogramClass)->integralVeto = parameters[6];
}
- cout << colorcyan << "Seed" << endlr;
if (labbook.chipGen.EqualTo("Pipper2") || labbook.chipGen.EqualTo("Pegasus"))
parameters = (*curHistogramClass)->FitPerform((*curHistogramClass)->Seed, "gaus", 0, false, (*curHistogramClass)->fixedThresholdValue);
else
(*curHistogramClass)->posSeed = parameters[1];
(*curHistogramClass)->integralSeedErr = parameters[9];
- cout << colorcyan << "Sum" << endlr;
parameters = (*curHistogramClass)->FitPerform((*(*curHistogramClass)->Sum), "gaus", 0, false, (*curHistogramClass)->fixedThresholdValue); //TODO change back to gauss
(*curHistogramClass)->posSum = parameters[1];
(*curHistogramClass)->integralSum = parameters[6];
for (Int_t bini = 1; bini <= (*curHistogramClass)->clustermultiplicity->GetNbinsX(); bini++) {
(*curHistogramClass)->clustermultiplicity->SetBinContent(bini, (*curHistogramClass)->clustermultiplicity->GetBinContent(bini)/(*curHistogramClass)->numberofhits); }
- cout << colorcyan << "Sum9" << endlr;
for (u_int sumi = 0; sumi < (*curHistogramClass)->a_Sum9.size(); sumi++) {
// Float_t integratestart = (*curHistogramClass)->FindNoisethresholdborder((*curHistogramClass)->a_Sum[sumi], false, false);
// parameters = (*curHistogramClass)->FitPerform((*curHistogramClass)->a_Sum[sumi], "gaus", 0, false, integratestart); //TODO change back to gauss
(*curHistogramClass)->a_integralSum9.push_back(parameters[6]);
(*curHistogramClass)->a_integralSumErr9.push_back(parameters[9]);
}
- cout << colorcyan << "Sum25" << endlr;
for (u_int sumi = 0; sumi < (*curHistogramClass)->a_Sum25.size(); sumi++) {
// Float_t integratestart = (*curHistogramClass)->FindNoisethresholdborder((*curHistogramClass)->a_Sum[sumi], false, false);
// parameters = (*curHistogramClass)->FitPerform((*curHistogramClass)->a_Sum[sumi], "gaus", 0, false, integratestart); //TODO change back to gauss
(*curHistogramClass)->a_integralSumErr25.push_back(parameters[9]);
}
- cout << colorcyan << "SeedPerc" << endlr;
parameters =(*curHistogramClass)->FitPerform((*curHistogramClass)->SeedPerc, "landau");
(*curHistogramClass)->posSeedPerc = parameters[1];
(*curHistogramClass)->sigmaSeedPerc = parameters[2];