From 66ed86c0b92b1bb101dcd12ea95dad7cfe06d777 Mon Sep 17 00:00:00 2001 From: Benjamin Linnik Date: Wed, 13 Dec 2017 19:47:46 +0100 Subject: [PATCH] Analyzer --- MABS_run_analyzer/HistogramType.c | 25 +++++++++++++++++-------- MABS_run_analyzer/Run.c | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/MABS_run_analyzer/HistogramType.c b/MABS_run_analyzer/HistogramType.c index c10d2ad..0bc88e2 100644 --- a/MABS_run_analyzer/HistogramType.c +++ b/MABS_run_analyzer/HistogramType.c @@ -416,21 +416,30 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType 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 } @@ -731,7 +740,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType 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 diff --git a/MABS_run_analyzer/Run.c b/MABS_run_analyzer/Run.c index 6b7a33f..db029d6 100644 --- a/MABS_run_analyzer/Run.c +++ b/MABS_run_analyzer/Run.c @@ -2407,7 +2407,7 @@ TCanvas* Run::plot1DHistogram(HistogramType* HistogramTypepointer, TH1FO* onehis 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) -- 2.43.0