]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/AliUnfolding.cxx
Coverity fixes
[u/mrichter/AliRoot.git] / PWG0 / AliUnfolding.cxx
index 3b1d9740fd34c2cff9198862edad79005de88119..df3fce71b655be28200473f8ad2ff01ead4c9af1 100644 (file)
@@ -55,6 +55,7 @@ Float_t AliUnfolding::fgRegularizationWeight = 10000;
 Int_t AliUnfolding::fgSkipBinsBegin = 0;
 Float_t AliUnfolding::fgMinuitStepSize = 0.1;                 // (usually not needed to be changed) step size in minimization
 Float_t AliUnfolding::fgMinuitPrecision = 1e-6;               // minuit precision
+Int_t   AliUnfolding::fgMinuitMaxIterations = 5000;           // minuit maximum number of iterations
 Bool_t AliUnfolding::fgMinimumInitialValue = kFALSE;          // set all initial values at least to the smallest value among the initial values
 Float_t AliUnfolding::fgMinimumInitialValueFix = -1;
 Bool_t AliUnfolding::fgNormalizeInput = kFALSE;               // normalize input spectrum
@@ -391,6 +392,8 @@ Int_t AliUnfolding::UnfoldWithMinuit(TH2* correlation, TH1* efficiency, TH1* mea
   // set precision
   minuit->SetPrecision(fgMinuitPrecision);
 
+  minuit->SetMaxIterations(fgMinuitMaxIterations);
+
   for (Int_t i=0; i<fgMaxParams; i++)
     (*fgEntropyAPriori)[i] = 1;
 
@@ -484,12 +487,12 @@ Int_t AliUnfolding::UnfoldWithMinuit(TH2* correlation, TH1* efficiency, TH1* mea
   {
     results[i] = minuit->GetParameter(i);
     Double_t value = results[i] * results[i];
-    // error is : (relError) * (value) = (minuit->GetParError(i) / minuit->GetParameter(i)) * (minuit->GetParameter(i) * minuit->GetParameter(i))
+   // error is : 2 * (relError on results[i]) * (value) = 2 * (minuit->GetParError(i) / minuit->GetParameter(i)) * (minuit->GetParameter(i) * minuit->GetParameter(i))
     Double_t error = 0;
     if (TMath::IsNaN(minuit->GetParError(i)))
       Printf("WARNING: Parameter %d error is nan", i);
     else 
-      error = minuit->GetParError(i) * results[i];
+      error = 2 * minuit->GetParError(i) * results[i];
     
     if (efficiency)
     {  
@@ -509,10 +512,12 @@ Int_t AliUnfolding::UnfoldWithMinuit(TH2* correlation, TH1* efficiency, TH1* mea
     result->SetBinContent(i+1, value);
     result->SetBinError(i+1, error);
   }
-  
-  fgCallCount = 0;
+
+  Int_t tmpCallCount = fgCallCount;
+  fgCallCount = 0; // needs to be 0 so that the Chi2Function prints its output
   Chi2Function(dummy, 0, chi2, results, 0);
-  Printf("AliUnfolding::UnfoldWithMinuit: Chi2 of final parameters is = %f", chi2);
+  
+  Printf("AliUnfolding::UnfoldWithMinuit: iterations %d. Chi2 of final parameters is = %f", tmpCallCount, chi2);
   
   delete[] results;
 
@@ -1347,6 +1352,7 @@ void AliUnfolding::DrawResults(TH2* correlation, TH1* efficiency, TH1* measured,
   //meas2->GetXaxis()->SetLimits(0,fgMaxInput);
   meas2->SetBit(kCannotPick);
   DrawGuess(params, presult, pres, ppen, reuseHists,unfolded);
+  delete [] params;
 }
 //____________________________________________________________________
 void AliUnfolding::RedrawInteractive() {
@@ -1503,10 +1509,12 @@ TH1* AliUnfolding::GetResidualsPlot(TH1* corrected)
 
   Double_t* params = new Double_t[fgMaxParams];
   for (Int_t i=0; i<TMath::Min(fgMaxParams, corrected->GetNbinsX()); i++)
-    params[i] = TMath::Sqrt(fabs(corrected->GetBinContent(i+1)*(*fgEfficiency)(i)));
+    params[i] = TMath::Sqrt(TMath::Abs(corrected->GetBinContent(i+1)*(*fgEfficiency)(i)));
 
 
-  return GetResidualsPlot(params);
+  TH1 * plot = GetResidualsPlot(params);
+  delete [] params;
+  return plot;
 }
 
 //____________________________________________________________________