histogrampointer->GetXaxis()->UnZoom(); // resets range
Int_t binPosMaxHist = histogrampointer->FindLastBinAbove(1,1);
- Int_t binPosMaxPeak = 0;
- TString histogramname = histogrampointer->GetName();
posMaxValHist = (histogrampointer->GetBinCenter(binPosMaxHist));
+ histogrampointer->GetXaxis()->SetRange(histogrampointer->GetXaxis()->FindBin(noiseborder),histogrampointer->GetXaxis()->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
+ Int_t binPosMaxPeak = histogrampointer->GetMaximumBin();
+ Double_t valueMaxPeak = histogrampointer->GetBinCenter(binPosMaxPeak);
+
+ TString histogramname = histogrampointer->GetName();
Bool_t do_loop = kTRUE;
Int_t loopi = 0;
- do {
- histogrampointer->GetXaxis()->SetRange(histogrampointer->GetXaxis()->FindBin(noiseborder*(++loopi)),histogrampointer->GetXaxis()->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
+ do {
+ binPosMaxHist = histogrampointer->FindLastBinAbove(valueMaxPeak/5,1);
+ posMaxValHist = (histogrampointer->GetBinCenter(binPosMaxHist));
+
+ histogrampointer->GetXaxis()->SetRange(histogrampointer->GetXaxis()->FindBin(noiseborder*++loopi),histogrampointer->GetXaxis()->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
binPosMaxPeak = histogrampointer->GetMaximumBin();
+
// if Sum peak, than the peak must be in the right region of the whole histogram, so search for it
- if (!histogramname.Contains("Sum") || ( binPosMaxPeak > binPosMaxHist/2) || (loopi > 3) ) {
-// cout << "Exit loop, loopi: " << loopi << " binPosMaxPeak > binPosMaxHist/2: " << binPosMaxPeak << " > " << binPosMaxHist/2 << endlr;
+ // cout << colorcyan << "binPosMaxPeak: " << binPosMaxPeak << endlr;
+ // cout << colorcyan << "binPosMaxHist/2: " << binPosMaxHist/2 << endlr;
+ if (!(histogramname.Contains("Sum")) || ( binPosMaxPeak > binPosMaxHist/2) || (loopi > 3) ) {
do_loop = kFALSE;
noiseborder = noiseborder*loopi;
+ // cout << colorcyan << "loopi: " << posMaxValHist << endlr;
}
- } while ( do_loop );
+ } while ( do_loop );
if (histogramname.Contains("Sum")) {
noiseborder = (histogrampointer->GetBinCenter(binPosMaxPeak/2)); // if Sum peak is fitted, otherwise fits fails too often
}
Bool_t do_loop = kTRUE;
Int_t loopi = 0;
do {
- binPosMaxHist = histogrampointer->FindLastBinAbove(valueMaxPeak/10,1);
+ binPosMaxHist = histogrampointer->FindLastBinAbove(valueMaxPeak/5,1);
posMaxValHist = (histogrampointer->GetBinCenter(binPosMaxHist));
histogrampointer->GetXaxis()->SetRange(histogrampointer->GetXaxis()->FindBin(noiseborder*++loopi),histogrampointer->GetXaxis()->FindBin(posMaxValHist)); // look only for maxima with x greater than noiseborder, cut away noise
Float_t startvalue = onehistogram->GetBinLowEdge(onehistogram->FindFirstBinAbove(0));
Float_t endrange = onehistogram->GetBinCenter(onehistogram->FindLastBinAbove(0));
- onehistogram->GetXaxis()->SetRange(fitstart, endrange);
+ onehistogram->GetXaxis()->SetRangeUser(fitstart, endrange);
Float_t endrangeY = onehistogram->GetMaximum();
onehistogram->GetXaxis()->SetRangeUser(fitstart,endrange*1.1);
if (logscale)