]> jspc29.x-matter.uni-frankfurt.de Git - radhard.git/commitdiff
Analyzer: Bugfix
authorBenjamin Linnik <blinnik@jspc61.x-matter.uni-frankfurt.de>
Tue, 28 Nov 2017 12:27:55 +0000 (13:27 +0100)
committerBenjamin Linnik <blinnik@jspc61.x-matter.uni-frankfurt.de>
Tue, 28 Nov 2017 12:27:55 +0000 (13:27 +0100)
MABS_run_analyzer/HistogramType.c
MABS_run_analyzer/Run.c

index 38df91541fade7141730fecdb345104a92c1177c..0a5c06f0360e651d228dc9908da53c01ea2b12f3 100644 (file)
@@ -488,8 +488,8 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             
             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");
@@ -499,20 +499,14 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             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) { 
@@ -522,8 +516,15 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
                     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;
@@ -558,6 +559,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             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");
         }
@@ -755,7 +757,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             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);
@@ -784,8 +786,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
 //         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);
@@ -804,7 +805,6 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
         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) { 
@@ -831,7 +831,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
         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;
@@ -844,7 +844,7 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             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);
@@ -852,10 +852,11 @@ Double_t* HistogramType::FitPerform(TH1FO* histogrampointer, TString fitFuncType
             }
             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);
index f43a7e732f624c5761f89fe796f68d489db06c37..b35701973682f57357a1f230b00a64b1c2887e8c 100644 (file)
@@ -1698,14 +1698,12 @@ Bool_t Run::binSeedSumVeto()
     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)
@@ -1721,7 +1719,6 @@ Bool_t Run::binSeedSumVeto()
             //             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
@@ -1730,7 +1727,6 @@ Bool_t Run::binSeedSumVeto()
         (*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];
@@ -1739,7 +1735,6 @@ Bool_t Run::binSeedSumVeto()
         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
@@ -1748,7 +1743,6 @@ Bool_t Run::binSeedSumVeto()
             (*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
@@ -1758,7 +1752,6 @@ Bool_t Run::binSeedSumVeto()
             (*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];