number of iterations as a tunable parameter (Marta V)
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Oct 2011 15:09:00 +0000 (15:09 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Oct 2011 15:09:00 +0000 (15:09 +0000)
PWG0/AliUnfolding.cxx
PWG0/AliUnfolding.h

index 4dfc93f..df3fce7 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;
 
@@ -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;
 
index 12a66e2..3471131 100644 (file)
@@ -40,6 +40,7 @@ class AliUnfolding : public TObject
     static void SetChi2Regularization(RegularizationType type, Float_t weight);
     static void SetMinuitStepSize(Float_t stepSize) { fgMinuitStepSize = stepSize; }
     static void SetMinuitPrecision(Float_t pres) {fgMinuitPrecision = pres;}
+    static void SetMinuitMaxIterations(Int_t iter) {fgMinuitMaxIterations = iter;}
     static void SetMinimumInitialValue(Bool_t flag, Float_t value = -1) { fgMinimumInitialValue = flag; fgMinimumInitialValueFix = value; }
     static void SetNormalizeInput(Bool_t flag) { fgNormalizeInput = flag; }
     static void SetNotFoundEvents(Float_t notFoundEvents) { fgNotFoundEvents = notFoundEvents; }
@@ -118,6 +119,7 @@ class AliUnfolding : public TObject
     static Int_t fgSkipBinsBegin;                    // (optional) skip the given number of bins in the regularization
     static Float_t fgMinuitStepSize;                 // (usually not needed to be changed) step size in minimization
     static Float_t fgMinuitPrecision;                // precision used by minuit. default = 1e-6
+    static Int_t   fgMinuitMaxIterations;            // maximum number of iterations used by minuit. default = 5000
     static Bool_t fgMinimumInitialValue;             // set all initial values at least to the smallest value among the initial values
     static Float_t fgMinimumInitialValueFix;         // use this as the minimum initial value instead of determining it automatically
     static Bool_t fgNormalizeInput;                  // normalize input spectrum