From 0f2106248f1462df14d1ffe1e6e1c72aaf919545 Mon Sep 17 00:00:00 2001
From: pospelov <pospelov@fz-juelich.de>
Date: Tue, 27 Nov 2012 16:33:03 +0100
Subject: [PATCH] Code cleanup in TestFittingModules

---
 App/inc/IsGISAXSTools.h                       |   3 +
 App/inc/TestFittingModule1.h                  |  10 +-
 App/inc/TestFittingModule2.h                  |  14 +-
 App/inc/TestFittingModule3.h                  |   1 -
 App/src/IsGISAXSTools.cpp                     |  21 +-
 App/src/TestFittingModule1.cpp                |  59 ++----
 App/src/TestFittingModule2.cpp                | 186 ++++++++++--------
 App/src/TestFittingModule3.cpp                |  24 +--
 Core/Algorithms/src/IOutputDataNormalizer.cpp |   2 -
 9 files changed, 168 insertions(+), 152 deletions(-)

diff --git a/App/inc/IsGISAXSTools.h b/App/inc/IsGISAXSTools.h
index 436be6992a3..5e7b490c37b 100644
--- a/App/inc/IsGISAXSTools.h
+++ b/App/inc/IsGISAXSTools.h
@@ -104,6 +104,9 @@ public:
     //! Create TH1D for displaying of one-dimensional data scan
     static TH1D *getOutputDataScanHist(const OutputData<double> &data, const std::string &hname=std::string("scan_hist"));
 
+    //! create noisy data
+    static OutputData<double > *createNoisyData(const OutputData<double> &exact_data, double noise_factor = 0.1);
+
 private:
     static double m_hist_min; // minimum value of y-axis (for 1D histograms), or z-axis (for 2D histograms)
     static double m_hist_max; // maximum value of y-axis (for 1D histograms), or z-axis (for 2D histograms)
diff --git a/App/inc/TestFittingModule1.h b/App/inc/TestFittingModule1.h
index ff9217e0855..e46def35e0b 100644
--- a/App/inc/TestFittingModule1.h
+++ b/App/inc/TestFittingModule1.h
@@ -26,7 +26,7 @@ class FitSuite;
 
 //- -------------------------------------------------------------------
 //! @class TestFittingModule1
-//! @brief Testing of fitting module with simplified sample (layer + nanoparticles), 2 parameters
+//! @brief Testing of fitting module with simple samples
 //- -------------------------------------------------------------------
 class TestFittingModule1 : public IFunctionalTest
 {
@@ -36,12 +36,14 @@ public:
     virtual void execute();
 
 private:
-    void initializeSample();
+    //! initialize sample: layer + nanoparticles, 2 parameters
+    void initializeSample1();
+    //! initialize sample: layer + substrate + nanoparticles, 4 parameters
     void initializeSample2();
+
     void initializeExperiment();
-    void generateRealData(double noise_factor);
+    void initializeRealData();
 
-    OutputData<double> *mp_exact_data;
     OutputData<double> *mp_real_data;
     OutputData<double> *mp_simulated_data;
     GISASExperiment *mp_experiment;
diff --git a/App/inc/TestFittingModule2.h b/App/inc/TestFittingModule2.h
index b35a0fe36f5..7c4e95d66dc 100644
--- a/App/inc/TestFittingModule2.h
+++ b/App/inc/TestFittingModule2.h
@@ -28,7 +28,7 @@ class FitSuite;
 //- -------------------------------------------------------------------
 //! @class TestFittingModule2
 //! @brief Testing of fitting module with 5 parameters sample using
-//! sample builder and different fit strategies
+//! sample builder, different fit strategies and chi2 modules
 //- -------------------------------------------------------------------
 class TestFittingModule2 : public IFunctionalTest
 {
@@ -54,11 +54,19 @@ public:
         double m_cylinder_ratio;
     };
 
+    //! basic fit example
+    void fit_example_basics();
+
+    //! fit example with chi2 module adjustment
+    void fit_example_chimodule();
+
+    //! fit example with strategies
+    void fit_example_strategies();
+
 private:
     void initializeExperiment();
-    void generateRealData(double noise_factor);
+    void initializeRealData();
 
-    OutputData<double> *mp_exact_data;
     OutputData<double> *mp_real_data;
     OutputData<double> *mp_simulated_data;
     GISASExperiment *mp_experiment;
diff --git a/App/inc/TestFittingModule3.h b/App/inc/TestFittingModule3.h
index 298cb3b9fb8..b0718937db0 100644
--- a/App/inc/TestFittingModule3.h
+++ b/App/inc/TestFittingModule3.h
@@ -41,7 +41,6 @@ private:
     void initializeSample();
     void initializeExperiment();
     void initializeRealData();
-    OutputData<double > *createNoisyData(const OutputData<double> &exact_data, double noise_factor = 0.1);
 
     GISASExperiment *m_experiment;
     ISample *m_sample;
diff --git a/App/src/IsGISAXSTools.cpp b/App/src/IsGISAXSTools.cpp
index 89aa4a3b145..0cc6dbbb321 100644
--- a/App/src/IsGISAXSTools.cpp
+++ b/App/src/IsGISAXSTools.cpp
@@ -1,6 +1,7 @@
 #include "IsGISAXSTools.h"
 #include "Units.h"
 #include "Exceptions.h"
+#include "MathFunctions.h"
 
 #include "TCanvas.h"
 #include "TH1D.h"
@@ -563,11 +564,29 @@ TH1D *IsGISAXSTools::getOutputDataScanHist(const OutputData<double> &data, const
     if( !hist1 ) throw LogicErrorException("IsGISAXSTools::getOutputDataScanHist() -> Error! Failed to make projection, existing name?");
 
     hist1->SetTitle(ostr_title.str().c_str());
-    // FIXME remove this trick to bypass weared bug with DrawCopy of TH2D's projection
+    // FIXME remove this trick to bypass weared bug with DrawCopy of TH1D projection of TH1D histohgrams
     TH1D *h1 = (TH1D*)hist1->Clone();
     delete hist1;
     return h1;
 }
 
 
+/* ************************************************************************* */
+// add noise to data
+/* ************************************************************************* */
+OutputData<double > *IsGISAXSTools::createNoisyData(const OutputData<double> &exact_data, double noise_factor)
+{
+    OutputData<double > *real_data = exact_data.clone();
+    OutputData<double>::iterator it = real_data->begin();
+    while (it != real_data->end()) {
+        double current = *it;
+        double sigma = noise_factor*std::sqrt(current);
+        double random = MathFunctions::GenerateNormalRandom(current, sigma);
+        if (random<0.0) random = 0.0;
+        *it = random;
+        ++it;
+    }
+    return real_data;
+}
+
 
diff --git a/App/src/TestFittingModule1.cpp b/App/src/TestFittingModule1.cpp
index 33db0c8d8cd..b2ad0a236d2 100644
--- a/App/src/TestFittingModule1.cpp
+++ b/App/src/TestFittingModule1.cpp
@@ -30,19 +30,17 @@
 
 
 TestFittingModule1::TestFittingModule1()
-: mp_exact_data(0)
-, mp_real_data(0)
-, mp_simulated_data(0)
-, mp_experiment(0)
-, mp_sample(0)
-, m_fitSuite(0)
+    : mp_real_data(0)
+    , mp_simulated_data(0)
+    , mp_experiment(0)
+    , mp_sample(0)
+    , m_fitSuite(0)
 {
 }
 
 
 TestFittingModule1::~TestFittingModule1()
 {
-    delete mp_exact_data;
     delete mp_real_data;
     delete mp_simulated_data;
     delete mp_experiment;
@@ -57,17 +55,9 @@ void TestFittingModule1::execute()
 
     // initializing data
     initializeSample2();
-
     initializeExperiment();
-    generateRealData(0.1);
-
-    // drawing initial data
-    std::string canvas_name("TestFittingModule_c1");
-    TCanvas *c1 = new TCanvas(canvas_name.c_str(), "Test of the fitting suite", 800, 600);
-    c1->cd(); gPad->SetLogz();
-    IsGISAXSTools::drawOutputDataInPad(*mp_exact_data, "CONT4 Z", "exact data");
-    c1->Update();
-\
+    initializeRealData();
+
     m_fitSuite->addExperimentAndRealData(*mp_experiment, *mp_real_data);
 
     m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") );
@@ -116,10 +106,9 @@ void TestFittingModule1::initializeExperiment()
 
 
 /* ************************************************************************* */
-// simple sample - cylinders in BA
-// 2 fit parameters
+// initialize sample: layer + nanoparticles, 2 parameters
 /* ************************************************************************* */
-void TestFittingModule1::initializeSample()
+void TestFittingModule1::initializeSample1()
 {
     delete mp_sample;
 
@@ -144,6 +133,9 @@ void TestFittingModule1::initializeSample()
 }
 
 
+/* ************************************************************************* */
+// initialize sample: layer + substrate + nanoparticles, 4 parameters
+/* ************************************************************************* */
 void TestFittingModule1::initializeSample2()
 {
     delete mp_sample;
@@ -182,36 +174,21 @@ void TestFittingModule1::initializeSample2()
     m_fitSuite->addFitParameter("*FormFactorCylinder/radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
     m_fitSuite->addFitParameter("*FormFactorPrism3/half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
     m_fitSuite->addFitParameter("*FormFactorPrism3/height", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) );
-//    m_fitSuite->addFitParameter("*FormFactorCylinder/height", 12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1.,15.) );
-//    m_fitSuite->addFitParameter("*FormFactorCylinder/radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1.,15.) );
-//    m_fitSuite->addFitParameter("*FormFactorPrism3/half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1.,15.) );
-//    m_fitSuite->addFitParameter("*FormFactorPrism3/height", 2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1.,15.) );
 }
 
 
 
-
 /* ************************************************************************* */
-// generate real data
+// initializing real data
 /* ************************************************************************* */
-void TestFittingModule1::generateRealData(double noise_factor)
+void TestFittingModule1::initializeRealData()
 {
-    if(mp_exact_data) delete mp_exact_data;
+    if( !mp_experiment ) throw NullPointerException("TestFittingModule2::initializeRealData() -> Error! No experiment o sample defined ");
 
     mp_experiment->runSimulation();
     mp_experiment->normalize();
-    mp_exact_data = mp_experiment->getOutputDataClone();
-    if (mp_real_data) delete mp_real_data;
-
-    mp_real_data = mp_exact_data->clone();
-    OutputData<double>::iterator it = mp_real_data->begin();
-    while (it != mp_real_data->end()) {
-        double current = *it;
-        double sigma = noise_factor*std::sqrt(current);
-        double random = MathFunctions::GenerateNormalRandom(current, sigma);
-        if (random<0.0) random = 0.0;
-        *it = random;
-        ++it;
-    }
+    delete mp_real_data;
+    mp_real_data = IsGISAXSTools::createNoisyData(*mp_experiment->getOutputData());
 }
 
+
diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp
index 9fbeca3e922..de1e71e1de5 100644
--- a/App/src/TestFittingModule2.cpp
+++ b/App/src/TestFittingModule2.cpp
@@ -26,22 +26,28 @@
 #include "TCanvas.h"
 #include "TLatex.h"
 #include "TPaveText.h"
+#include "TH2D.h"
 
 
 TestFittingModule2::TestFittingModule2()
-: mp_exact_data(0)
-, mp_real_data(0)
-, mp_simulated_data(0)
-, mp_experiment(0)
-, mp_sample_builder(0)
-, m_fitSuite(0)
+    : mp_real_data(0)
+    , mp_simulated_data(0)
+    , mp_experiment(0)
+    , mp_sample_builder(0)
+    , m_fitSuite(0)
 {
+    mp_sample_builder = new TestSampleBuilder();
+
+    // setting up fitSuite
+    m_fitSuite = new FitSuite();
+    m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") );
+    m_fitSuite->attachObserver( new FitSuiteObserverPrint() );
+    m_fitSuite->attachObserver( new FitSuiteObserverDraw() );
 }
 
 
 TestFittingModule2::~TestFittingModule2()
 {
-    delete mp_exact_data;
     delete mp_real_data;
     delete mp_simulated_data;
     delete mp_experiment;
@@ -52,28 +58,78 @@ TestFittingModule2::~TestFittingModule2()
 
 void TestFittingModule2::execute()
 {
-    // new sample builder
-    mp_sample_builder = new TestSampleBuilder();
-    ParameterPool *pool = mp_sample_builder->createParameterTree();
-    std::cout << *pool << std::endl;
-    delete pool;
+    // basic fit example
+    //fit_example_basics();
 
-    // creating fit suite
-    m_fitSuite = new FitSuite();
+    // fit example with normalizer
+    fit_example_chimodule();
+
+    // fit example with strategies
+    //fit_example_strategies();
+}
 
-//    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_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) );
+/* ************************************************************************* */
+// basic fit example
+/* ************************************************************************* */
+void TestFittingModule2::fit_example_basics()
+{
+    initializeExperiment();
+    initializeRealData();
 
+    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.5, 0.1, AttLimits::limited(0.1, 0.9));
     m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.2, 0.1, AttLimits::fixed());
 
+    m_fitSuite->addExperimentAndRealData(*mp_experiment, *mp_real_data);
+
+    m_fitSuite->runFit();
+
+}
+
+
+/* ************************************************************************* */
+// fit example with chi2 module adjustment
+/* ************************************************************************* */
+void TestFittingModule2::fit_example_chimodule()
+{
+    initializeExperiment();
+    initializeRealData();
+
+    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("*Normalizer/scale", 1e10, 1e3, AttLimits::limited(1e8, 1e12));
+
+    // setting up fitSuite
+    ChiSquaredModule chiModule;
+    chiModule.setChiSquaredFunction( SquaredFunctionWithSystematicError() );
+    chiModule.setOutputDataNormalizer( OutputDataNormalizerScaleAndShift(1e10,0) );
+    m_fitSuite->addExperimentAndRealData(*mp_experiment, *mp_real_data, chiModule);
+
+    m_fitSuite->runFit();
+
+}
+
+
+/* ************************************************************************* */
+// fit example with strategies
+/* ************************************************************************* */
+void TestFittingModule2::fit_example_strategies()
+{
+    initializeExperiment();
+    initializeRealData();
+
+    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.1, AttLimits::fixed());
+
     // Applying fit strategy: fixing/releasing parameters
 //    FitSuiteStrategyAdjustParameters *strategy0 = new FitSuiteStrategyAdjustParameters("strategy0");
 //    strategy0->fix_all().release("*SampleBuilder/m_cylinder_ratio");
@@ -85,50 +141,25 @@ void TestFittingModule2::execute()
 //    strategy2->release_all();
 //    m_fitSuite->addFitStrategy(strategy2);
 
-
     // Applying fit strategy: resizing real data
-//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3));
-//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2));
-//    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1));
-//    m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault());
+    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3));
+    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2));
+    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1));
+    m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault());
 
-    // Applying fit strategy: disturning data to get out of local minima
+    // Applying fit strategy: disturbing data to get out of local minima
     //m_fitSuite->addFitStrategy(new FitSuiteStrategyBootstrap());
 
-    initializeExperiment();
-    generateRealData(0.1);
-
-    // drawing initial data
-    std::string canvas_name("TestFittingModule_c1");
-    TCanvas *c1 = new TCanvas(canvas_name.c_str(), "Test of the fitting suite", 800, 600);
-    c1->cd(); gPad->SetLogz();
-    IsGISAXSTools::drawOutputDataInPad(*mp_exact_data, "CONT4 Z", "exact data");
-    c1->Update();
-\
-    // setting up fitSuite
-//    m_fitSuite->setExperiment(mp_experiment);
-//    m_fitSuite->setRealData(*mp_real_data);
-
-    // setting up fitSuite
-    ChiSquaredModule chiModule;
-    chiModule.setChiSquaredFunction( SquaredFunctionWithSystematicError() );
-    chiModule.setOutputDataNormalizer( OutputDataNormalizerScaleAndShift(1e10,0) );
-
-    m_fitSuite->addExperimentAndRealData(*mp_experiment, *mp_real_data, chiModule);
+    m_fitSuite->addExperimentAndRealData(*mp_experiment, *mp_real_data);
 
     m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") );
 
-    m_fitSuite->attachObserver( new FitSuiteObserverPrint() );
-    m_fitSuite->attachObserver( new FitSuiteObserverDraw() );
-    //fitSuite->attachObserver( new FitSuiteObserverWriteTree() );
-
     m_fitSuite->runFit();
 
-//    delete drawObserver;
-//    delete writeObserver;
 }
 
 
+
 /* ************************************************************************* */
 // initializing experiment
 /* ************************************************************************* */
@@ -147,6 +178,28 @@ void TestFittingModule2::initializeExperiment()
 }
 
 
+/* ************************************************************************* */
+// initializing real data
+/* ************************************************************************* */
+void TestFittingModule2::initializeRealData()
+{
+    if( !mp_experiment ) throw NullPointerException("TestFittingModule2::initializeRealData() -> Error! No experiment o sample defined ");
+
+    // generating "real" data
+    mp_experiment->runSimulation();
+    mp_experiment->normalize();
+    delete mp_real_data;
+    mp_real_data = IsGISAXSTools::createNoisyData(*mp_experiment->getOutputData());
+
+    // drawing data
+    TCanvas *c1 = new TCanvas("c1","c1",640, 480);
+    c1->cd(); gPad->SetLogz();
+    TH2D *hist = IsGISAXSTools::getOutputDataTH2D( *mp_real_data, "real_data");
+    hist->Draw("COLZ");
+    c1->Update();
+}
+
+
 /* ************************************************************************* */
 // simple sample - mixture of cylinders and prisms on top of substrate
 // builder via ISampleBuilder
@@ -198,28 +251,3 @@ void TestFittingModule2::TestSampleBuilder::init_parameters()
 }
 
 
-/* ************************************************************************* */
-// generate real data
-/* ************************************************************************* */
-void TestFittingModule2::generateRealData(double noise_factor)
-{
-    if(mp_exact_data) delete mp_exact_data;
-
-    mp_experiment->runSimulation();
-    mp_experiment->normalize();
-    mp_exact_data = mp_experiment->getOutputDataClone();
-    if (mp_real_data) delete mp_real_data;
-
-    mp_real_data = mp_exact_data->clone();
-    OutputData<double>::iterator it = mp_real_data->begin();
-    while (it != mp_real_data->end()) {
-        double current = *it;
-        double sigma = noise_factor*std::sqrt(current);
-        double random = MathFunctions::GenerateNormalRandom(current, sigma);
-        if (random<0.0) random = 0.0;
-        *it = random;
-        ++it;
-    }
-}
-
-
diff --git a/App/src/TestFittingModule3.cpp b/App/src/TestFittingModule3.cpp
index 2d879ee738b..4ca8943b682 100644
--- a/App/src/TestFittingModule3.cpp
+++ b/App/src/TestFittingModule3.cpp
@@ -102,7 +102,7 @@ void TestFittingModule3::initializeExperiment()
     m_experiment->setDetectorParameters(100, 0.0*Units::degree, 2.0*Units::degree,100 , 0.0*Units::degree, 2.0*Units::degree);
 //    m_experiment->setDetectorParameters(100, 0.0*Units::degree, 2.0*Units::degree, 1, 0.01, 0.011);
     m_experiment->setBeamParameters(1.0*Units::angstrom, -0.2*Units::degree, 0.0*Units::degree);
-    m_experiment->setDetectorResolutionFunction(new ResolutionFunction2DSimple(0.0002, 0.0002));
+    //m_experiment->setDetectorResolutionFunction(new ResolutionFunction2DSimple(0.0002, 0.0002));
     m_experiment->setBeamIntensity(1e10);
 
 }
@@ -150,7 +150,7 @@ void TestFittingModule3::initializeRealData()
     m_experiment->runSimulation();
     m_experiment->normalize();
     delete m_real_data;
-    m_real_data = createNoisyData(*m_experiment->getOutputData());
+    m_real_data = IsGISAXSTools::createNoisyData(*m_experiment->getOutputData());
 
     // setting up 1d scans by making slices on real data
     for(DataScan_t::iterator it=m_data_scans.begin(); it!= m_data_scans.end(); ++it) {
@@ -158,7 +158,7 @@ void TestFittingModule3::initializeRealData()
     }
     m_data_scans.clear();
     m_data_scans.push_back( OutputDataFunctions::selectRangeOnOneAxis(*m_real_data, "alpha_f", 0.012, 0.012) );
-//    m_data_scans.push_back( OutputDataFunctions::selectRangeOnOneAxis(*m_real_data, "phi_f", 0.011, 0.011) );
+    m_data_scans.push_back( OutputDataFunctions::selectRangeOnOneAxis(*m_real_data, "phi_f", 0.011, 0.011) );
 
     // drawing data and scans
     TCanvas *c1 = new TCanvas("c1","c1",1024, 768);
@@ -184,22 +184,4 @@ void TestFittingModule3::initializeRealData()
 }
 
 
-/* ************************************************************************* */
-// add noise to data
-/* ************************************************************************* */
-OutputData<double > *TestFittingModule3::createNoisyData(const OutputData<double> &exact_data, double noise_factor)
-{
-    OutputData<double > *real_data = exact_data.clone();
-    OutputData<double>::iterator it = real_data->begin();
-    while (it != real_data->end()) {
-        double current = *it;
-        double sigma = noise_factor*std::sqrt(current);
-        double random = MathFunctions::GenerateNormalRandom(current, sigma);
-        if (random<0.0) random = 0.0;
-//        *it = random;
-        *it=current;
-        ++it;
-    }
-    return real_data;
-}
 
diff --git a/Core/Algorithms/src/IOutputDataNormalizer.cpp b/Core/Algorithms/src/IOutputDataNormalizer.cpp
index 52fc5ca5bf6..e5bbd0ed7e2 100644
--- a/Core/Algorithms/src/IOutputDataNormalizer.cpp
+++ b/Core/Algorithms/src/IOutputDataNormalizer.cpp
@@ -47,7 +47,6 @@ OutputData<double> *OutputDataNormalizerScaleAndShift::createNormalizedData(cons
 
     OutputData<double >::const_iterator cit = std::max_element(data.begin(), data.end());
     double max_intensity = (*cit);
-    std::cout << "QQQ before " << data.totalSum() << std::endl;
     if(max_intensity) {
         OutputData<double >::iterator it = normalized_data->begin();
         while(it!=normalized_data->end()) {
@@ -55,7 +54,6 @@ OutputData<double> *OutputDataNormalizerScaleAndShift::createNormalizedData(cons
             (*it) = m_scale*(value/max_intensity) + m_shift;
             ++it;
         }
-        std::cout << "QQQ after " << normalized_data->totalSum() << std::endl;
     } else {
         std::cout << "OutputDataNormalizerScaleAndShift::createNormalizedData() -> Warning! Zero maximum intensity" << std::endl;
     }
-- 
GitLab