From d609655688b2b58f912706d822e6cf28612d208e Mon Sep 17 00:00:00 2001
From: pospelov <pospelov@fz-juelich.de>
Date: Tue, 30 Oct 2012 17:53:35 +0100
Subject: [PATCH] New fit strategy which adjust the data before minimization

---
 App/inc/ROOTMinimizer.h                      |   3 +
 App/inc/TestMesoCrystal2.h                   |   2 +-
 App/src/FitSuiteHelper.cpp                   |   4 +-
 App/src/ROOTMinimizer.cpp                    |   3 +-
 App/src/TestFittingModule1.cpp               |   2 +-
 App/src/TestFittingModule2.cpp               |  49 +++++++++-----
 Core/Algorithms/inc/ChiSquaredModule.h       |   2 +
 Core/Algorithms/src/ChiSquaredModule.cpp     |   7 ++
 Core/Algorithms/src/GISASExperiment.cpp      |   1 +
 Core/Algorithms/src/IFittingDataSelector.cpp |   2 +-
 Core/Tools/inc/FitSuite.h                    |   1 +
 Core/Tools/inc/FitSuiteStrategy.h            |  30 ++++++++-
 Core/Tools/inc/IMinimizer.h                  |   3 +
 Core/Tools/src/FitSuite.cpp                  |   2 +-
 Core/Tools/src/FitSuiteStrategy.cpp          |  65 ++++++++++++++++++-
 Macros/GitUtils/gisasfw_loc.png              | Bin 15790 -> 15866 bytes
 Macros/GitUtils/git_loc_history.py           |   2 +-
 17 files changed, 151 insertions(+), 27 deletions(-)

diff --git a/App/inc/ROOTMinimizer.h b/App/inc/ROOTMinimizer.h
index 3b0a2dec262..5878c288e7f 100644
--- a/App/inc/ROOTMinimizer.h
+++ b/App/inc/ROOTMinimizer.h
@@ -62,6 +62,9 @@ public:
     //! printing results
     virtual void printResults() const;
 
+    //! clear resources (parameters) for consecutives minimizations
+    virtual void clear() { m_root_minimizer->Clear(); }
+
     //! printing minimizer description
     virtual void printOptions() const;
 
diff --git a/App/inc/TestMesoCrystal2.h b/App/inc/TestMesoCrystal2.h
index 7da716e0814..72987ba05d7 100644
--- a/App/inc/TestMesoCrystal2.h
+++ b/App/inc/TestMesoCrystal2.h
@@ -28,7 +28,7 @@ class Lattice;
 
 //- -------------------------------------------------------------------
 //! @class TestMesoCrystal2
-//! @brief Simulation of 3D ordered particle assemblies
+//! @brief Simulation and fit of 3D ordered particle assemblies
 //- -------------------------------------------------------------------
 class TestMesoCrystal2 : public IFunctionalTest
 {
diff --git a/App/src/FitSuiteHelper.cpp b/App/src/FitSuiteHelper.cpp
index 8098c62bf85..19970168f6e 100644
--- a/App/src/FitSuiteHelper.cpp
+++ b/App/src/FitSuiteHelper.cpp
@@ -76,13 +76,13 @@ void FitSuiteObserverDraw::update(IObservable *subject)
     gPad->SetLogz();
     gPad->SetLeftMargin(0.12);
     gPad->SetRightMargin(0.12);
-    IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getRealData(), "CONT4 Z", "Real data");
+    IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getRealData(), "colz", "Real data");
     // drawing simulated data
     c1->cd(2);
     gPad->SetLogz();
     gPad->SetLeftMargin(0.12);
     gPad->SetRightMargin(0.12);
-    IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getSimulationData(), "CONT4 Z", "current simulated data");
+    IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getSimulationData(), "colz", "current simulated data");
     // simple difference
     c1->cd(3);
     gPad->SetLogz();
diff --git a/App/src/ROOTMinimizer.cpp b/App/src/ROOTMinimizer.cpp
index 8d3f398148c..34e4136005e 100644
--- a/App/src/ROOTMinimizer.cpp
+++ b/App/src/ROOTMinimizer.cpp
@@ -7,6 +7,7 @@
 ROOTMinimizer::ROOTMinimizer(const std::string &minimizer_name, const std::string &algo_type) : m_fcn(0)
 {
     m_root_minimizer = ROOT::Math::Factory::CreateMinimizer(minimizer_name.c_str(), algo_type.c_str() );
+    m_root_minimizer->SetMaxFunctionCalls(5000);
     printOptions();
     if( m_root_minimizer == 0 ) {
         throw NullPointerException("ROOTMinimizer::ROOTMinimizer() -> Error! Can't build minimizer");
@@ -40,7 +41,7 @@ void ROOTMinimizer::setVariable(int index, const FitParameter *par)
     if( !success ) {
         std::ostringstream ostr;
         ostr << "ROOTMinimizer::setVariable() -> Error! Minimizer returned false while setting the variable." << std::endl;
-        ostr << "                                Probably attempt to use wrond index for given variable name" << std::endl;
+        ostr << "                                Probably given index has been already used for another variable name." << std::endl;
         ostr << "                                Index:" << index << " name '" << par->getName().c_str() << std::endl;
         throw LogicErrorException(ostr.str());
     }
diff --git a/App/src/TestFittingModule1.cpp b/App/src/TestFittingModule1.cpp
index 64ec408256d..0ce87095532 100644
--- a/App/src/TestFittingModule1.cpp
+++ b/App/src/TestFittingModule1.cpp
@@ -164,7 +164,7 @@ void TestFittingModule1::initializeSample2()
     substrate_layer.setMaterial(p_substrate_material);
     ParticleDecoration particle_decoration;
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2);
-    particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_half_side, prism3_height)), 0.0, 0.8);
+    particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
     LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp
index fa8792b518b..0320e0f3fce 100644
--- a/App/src/TestFittingModule2.cpp
+++ b/App/src/TestFittingModule2.cpp
@@ -62,29 +62,36 @@ void TestFittingModule2::execute()
     // creating fit suite
     m_fitSuite = new FitSuite();
 
-    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
-    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
-    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side",12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
-    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height",    2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
-//    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.2, 0.01, AttLimits::limited(0.01, 0.99));
+//    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height",  12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) );
+//    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius",  2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) );
+//    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) );
+//    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height",    2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) );
 
+    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height",  12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) );
+    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius",  2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) );
+    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) );
+    m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height",    2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) );
+
+    //m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.5, 0.1, AttLimits::limited(0.1, 0.9));
+    m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.2, 0.1, AttLimits::fixed());
+
+//    FitSuiteStrategyAdjustParameters *strategy0 = new FitSuiteStrategyAdjustParameters("strategy0");
+//    strategy0->fix_all().release("*SampleBuilder/m_cylinder_ratio");
+//    m_fitSuite->addFitStrategy(strategy0);
 
 //    FitSuiteStrategyAdjustParameters *strategy1 = new FitSuiteStrategyAdjustParameters("strategy1");
-//    strategy1->fix_all().release("*SampleBuilder/m_cylinder_height").release("*SampleBuilder/m_cylinder_radius").release("*SampleBuilder/m_prism3_height").release("*SampleBuilder/m_prism3_half_side");
+//    strategy1->release_all().fix("*SampleBuilder/m_cylinder_ratio");
 //    m_fitSuite->addFitStrategy(strategy1);
 
-////    FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters();
-////    strategy2->fix_all().release("*SampleBuilder/m_prism3_height").release("*SampleBuilder/m_prism3_half_side");
-////    m_fitSuite->addFitStrategy(strategy2);
-
 //    FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters("strategy2");
-//    strategy2->fix_all().release("*SampleBuilder/m_cylinder_ratio");
+//    strategy2->release_all();
 //    m_fitSuite->addFitStrategy(strategy2);
 
-//    FitSuiteStrategyAdjustParameters *strategy3 = new FitSuiteStrategyAdjustParameters("strategy3");
-//    strategy3->release_all();
-//    m_fitSuite->addFitStrategy(strategy3);
 
+//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3));
+//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2));
+//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1));
+//    m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault());
 
     initializeExperiment();
     generateRealData(0.1);
@@ -99,7 +106,15 @@ void TestFittingModule2::execute()
     // setting up fitSuite
     m_fitSuite->setExperiment(mp_experiment);
     m_fitSuite->setRealData(*mp_real_data);
-    m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") );
+    //m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Minimize") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Fumili") ); //doesn't work, Fumili wants special function with derivative
+    //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "ConjugateFR") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "BFGS") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "SteepestDescent") );
+    m_fitSuite->setMinimizer( new ROOTMinimizer("GSLSimAn", "") );
+    //fitSuite->setMinimizer( new ROOTMinimizer("Genetic", "") );
 
 
     m_fitSuite->attachObserver( new FitSuiteObserverPrint() );
@@ -146,6 +161,7 @@ TestFittingModule2::TestSampleBuilder::TestSampleBuilder()
     init_parameters();
 }
 
+
 ISample *TestFittingModule2::TestSampleBuilder::buildSample() const
 {
     MultiLayer *p_multi_layer = new MultiLayer();
@@ -160,7 +176,7 @@ ISample *TestFittingModule2::TestSampleBuilder::buildSample() const
     substrate_layer.setMaterial(p_substrate_material);
     ParticleDecoration particle_decoration;
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)),0.0, m_cylinder_ratio);
-    particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_half_side, m_prism3_height)), 0.0, 1.0 - m_cylinder_ratio);
+    particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_height, m_prism3_half_side)), 0.0, 1.0 - m_cylinder_ratio);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
     LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
@@ -205,3 +221,4 @@ void TestFittingModule2::generateRealData(double noise_factor)
 
 }
 
+
diff --git a/Core/Algorithms/inc/ChiSquaredModule.h b/Core/Algorithms/inc/ChiSquaredModule.h
index 36f8f400d87..dcadeac3619 100644
--- a/Core/Algorithms/inc/ChiSquaredModule.h
+++ b/Core/Algorithms/inc/ChiSquaredModule.h
@@ -26,6 +26,8 @@ public:
     ChiSquaredModule(const OutputData<double> &real_data);
     virtual ~ChiSquaredModule();
 
+    void setRealData(const OutputData<double> &real_data);
+
     void setSimulationData(const OutputData<double> &simulation_data);
 
     void setFittingDataSelector(const IFittingDataSelector &selector);
diff --git a/Core/Algorithms/src/ChiSquaredModule.cpp b/Core/Algorithms/src/ChiSquaredModule.cpp
index 8b04edd6b97..1802f8482aa 100644
--- a/Core/Algorithms/src/ChiSquaredModule.cpp
+++ b/Core/Algorithms/src/ChiSquaredModule.cpp
@@ -17,6 +17,13 @@ ChiSquaredModule::~ChiSquaredModule()
     delete mp_squared_function;
 }
 
+void ChiSquaredModule::setRealData(
+        const OutputData<double>& real_data)
+{
+    delete mp_real_data;
+    mp_real_data = real_data.clone();
+}
+
 void ChiSquaredModule::setSimulationData(
         const OutputData<double>& simulation_data)
 {
diff --git a/Core/Algorithms/src/GISASExperiment.cpp b/Core/Algorithms/src/GISASExperiment.cpp
index 99331604ca3..87d4c4594f9 100644
--- a/Core/Algorithms/src/GISASExperiment.cpp
+++ b/Core/Algorithms/src/GISASExperiment.cpp
@@ -100,6 +100,7 @@ void GISASExperiment::normalize()
     }
 }
 
+// TODO : refactor to the detector object
 void GISASExperiment::setDetectorParameters(size_t n_phi, double phi_f_min, double phi_f_max,
                                             size_t n_alpha, double alpha_f_min, double alpha_f_max, bool isgisaxs_style)
 {
diff --git a/Core/Algorithms/src/IFittingDataSelector.cpp b/Core/Algorithms/src/IFittingDataSelector.cpp
index f7ea0e5f0d7..94080414e7c 100644
--- a/Core/Algorithms/src/IFittingDataSelector.cpp
+++ b/Core/Algorithms/src/IFittingDataSelector.cpp
@@ -9,7 +9,7 @@ void DefaultAllDataSelector::getFittingData(const OutputData<double>& real_data,
 {
     size_t data_size = real_data.getAllocatedSize();
     if (simulated_data.getAllocatedSize()!=data_size) {
-        throw RuntimeErrorException("Size of simulated data should equal size of real data.");
+        throw RuntimeErrorException("Size of simulated data should be equal to the size of real data.");
     }
     real_data_vector.resize(data_size);
     simulated_data_vector.resize(data_size);
diff --git a/Core/Tools/inc/FitSuite.h b/Core/Tools/inc/FitSuite.h
index d1a8ae2731b..3ca77ee8074 100644
--- a/Core/Tools/inc/FitSuite.h
+++ b/Core/Tools/inc/FitSuite.h
@@ -46,6 +46,7 @@ public:
 
     //! set experiment
     void setExperiment(Experiment *experiment) { m_experiment = experiment; }
+    Experiment *getExperiment() { return m_experiment; }
 
     //! set minimizer
     void setMinimizer(IMinimizer *minimizer) { m_minimizer = minimizer; }
diff --git a/Core/Tools/inc/FitSuiteStrategy.h b/Core/Tools/inc/FitSuiteStrategy.h
index 1fe9f5cfed8..7d44eba8f29 100644
--- a/Core/Tools/inc/FitSuiteStrategy.h
+++ b/Core/Tools/inc/FitSuiteStrategy.h
@@ -43,10 +43,36 @@ protected:
 };
 
 
+//- -------------------------------------------------------------------
+//! @class FitSuiteStrategyDefault
+//! @brief Default fit strategy just let FitSuite to run it's minimization round
+//- -------------------------------------------------------------------
+class FitSuiteStrategyDefault : public IFitSuiteStrategy
+{
+public:
+    FitSuiteStrategyDefault() : IFitSuiteStrategy("FitSuiteStrategyDefault") { }
+    virtual void execute();
+};
+
+
+//- -------------------------------------------------------------------
+//! @class FitSuiteStrategyAdjustData
+//! @brief Strategy modifies data before running minimizing round
+//- -------------------------------------------------------------------
+class FitSuiteStrategyAdjustData : public IFitSuiteStrategy
+{
+public:
+    FitSuiteStrategyAdjustData(int power_of_two = 1) : IFitSuiteStrategy("FitSuiteStrategyAdjustData"), m_power_of_two(power_of_two) { }
+    virtual void execute();
+private:
+    size_t m_power_of_two;
+};
+
+
+
 //- -------------------------------------------------------------------
 //! @class FitSuiteStrategyAdjustParameters
-//! @brief Strategy which fix/release defined list of fit parameters and
-//! then call minimizer
+//! @brief Strategy which fixes/releases fit parameters and call minimizer
 //- -------------------------------------------------------------------
 class FitSuiteStrategyAdjustParameters : public IFitSuiteStrategy
 {
diff --git a/Core/Tools/inc/IMinimizer.h b/Core/Tools/inc/IMinimizer.h
index 37e342f0d7d..a4015075d36 100644
--- a/Core/Tools/inc/IMinimizer.h
+++ b/Core/Tools/inc/IMinimizer.h
@@ -50,6 +50,9 @@ public:
     //! return pointer to the parameters values at the minimum
     virtual double getErrorOfVariable(size_t i) const = 0;
 
+    //! clear resources (parameters) for consecutives minimizations
+    virtual void clear() = 0;
+
     //! print fit results
     virtual void printResults() const = 0;
 
diff --git a/Core/Tools/src/FitSuite.cpp b/Core/Tools/src/FitSuite.cpp
index 0d2333a5f0d..b2b225f6d76 100644
--- a/Core/Tools/src/FitSuite.cpp
+++ b/Core/Tools/src/FitSuite.cpp
@@ -143,7 +143,7 @@ void FitSuite::runFit()
     } else {
         // round several minimization rounds as defined in concrete strategies
         for(fitstrategies_t::iterator it = m_fit_strategies.begin(); it!= m_fit_strategies.end(); ++it) {
-            std::cout << "FitSuite::runFit() -> Info. Running strategy '" << (*it)->getName() << "'" << std::endl;
+            std::cout << "FitSuite::runFit() -> Info. Running strategy #" << m_n_strategy << " '" << (*it)->getName() << "'" << std::endl;
             (*it)->execute();
             m_n_strategy++;
         }
diff --git a/Core/Tools/src/FitSuiteStrategy.cpp b/Core/Tools/src/FitSuiteStrategy.cpp
index 9d0bfd3da3a..258ad01b35c 100644
--- a/Core/Tools/src/FitSuiteStrategy.cpp
+++ b/Core/Tools/src/FitSuiteStrategy.cpp
@@ -1,10 +1,73 @@
 #include "FitSuiteStrategy.h"
 #include "FitSuite.h"
 #include "Exceptions.h"
+#include "OutputData.h"
+#include "ChiSquaredModule.h"
+#include "Experiment.h"
+#include "GISASExperiment.h"
+#include "IMinimizer.h"
 #include <iostream>
 
+
+
+/* ************************************************************************* */
+// Default fit strategy just let FitSuite to run it's minimization round
+/* ************************************************************************* */
+void FitSuiteStrategyDefault::execute()
+{
+    // calling minimization
+    m_fit_suite->minimize();
+}
+
+
+
+/* ************************************************************************* */
+// Default fit strategy just let FitSuite to run it's minimization round
+/* ************************************************************************* */
+void FitSuiteStrategyAdjustData::execute()
+{
+    // saving original data
+    OutputData<double > *orig_data = m_fit_suite->getChiSquaredModule()->getRealData()->clone();
+
+    OutputData<double> *adjusted_data = orig_data;
+    for(size_t i=0; i<m_power_of_two; ++i) {
+        OutputData<double> *new_data = doubleBinSize(*adjusted_data);
+        if(i!=0) {
+            delete adjusted_data;
+        }
+        adjusted_data = new_data;
+    }
+
+    // setting all up with new data
+    m_fit_suite->setRealData(*adjusted_data);
+    const NamedVector<double> *axis0 = reinterpret_cast<const NamedVector<double>*>(adjusted_data->getAxes()[0]);
+    const NamedVector<double> *axis1 = reinterpret_cast<const NamedVector<double>*>(adjusted_data->getAxes()[1]);
+    GISASExperiment *experiment = dynamic_cast<GISASExperiment *>(m_fit_suite->getExperiment());
+    if( !experiment ) {
+        throw NullPointerException("FitSuiteStrategyAdjustData::execute() -> Error! Can't get GISASExperiment.");
+    }
+    experiment->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax());
+
+    // calling minimization
+    m_fit_suite->getMinimizer()->clear();
+
+    m_fit_suite->minimize();
+
+    // returning back original data
+    m_fit_suite->setRealData(*orig_data);
+    axis0 = reinterpret_cast<const NamedVector<double>*>(orig_data->getAxes()[0]);
+    axis1 = reinterpret_cast<const NamedVector<double>*>(orig_data->getAxes()[1]);
+    experiment->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax());
+
+    delete orig_data;
+    delete adjusted_data;
+}
+
+
+
+
 /* ************************************************************************* */
-//
+// strategy which fixes/releases fit parameters and then call minimizer
 /* ************************************************************************* */
 void FitSuiteStrategyAdjustParameters::execute()
 {
diff --git a/Macros/GitUtils/gisasfw_loc.png b/Macros/GitUtils/gisasfw_loc.png
index fa86f667126219256031dfd51abc8ba2cfef6425..aaaa6c53f982fba2a085cc030fee395c10cb8349 100644
GIT binary patch
literal 15866
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

literal 15790
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

diff --git a/Macros/GitUtils/git_loc_history.py b/Macros/GitUtils/git_loc_history.py
index da7ce6a2757..a495f95c9b5 100644
--- a/Macros/GitUtils/git_loc_history.py
+++ b/Macros/GitUtils/git_loc_history.py
@@ -51,7 +51,7 @@ if extfolder:
 # parsing output of git log 
 wrong_ppp_file=False
 wrong_mmm_file=False
-for x in popen('git log master --reverse -p'):
+for x in popen('git log develop --reverse -p'):
     if x.startswith('commit'):
         pop()
         hsh=x[7:14];
-- 
GitLab