diff --git a/Modules/FiberDissection/Interactor/mitkStreamlineInteractor.cpp b/Modules/FiberDissection/Interactor/mitkStreamlineInteractor.cpp
index bcf7c4a..1b135b6 100644
--- a/Modules/FiberDissection/Interactor/mitkStreamlineInteractor.cpp
+++ b/Modules/FiberDissection/Interactor/mitkStreamlineInteractor.cpp
@@ -1,322 +1,314 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #include "mitkStreamlineInteractor.h"
 //#include "mitkStreamlineMapper2D.h"
 
 // MITK includes
 #include <mitkInteractionConst.h>
 #include <mitkInteractionPositionEvent.h>
 #include <mitkInternalEvent.h>
 #include <mitkLookupTableProperty.h>
 #include <mitkOperationEvent.h>
 #include <mitkRotationOperation.h>
 #include <mitkScaleOperation.h>
 #include <mitkSurface.h>
 #include <mitkUndoController.h>
 #include <mitkVtkMapper.h>
 
 // VTK includes
 #include <vtkCamera.h>
 #include <vtkInteractorObserver.h>
 #include <vtkInteractorStyle.h>
 #include <vtkMath.h>
 #include <vtkPointData.h>
 #include <vtkPolyData.h>
 #include <vtkRenderWindowInteractor.h>
 #include <vtkVector.h>
 #include <vtkPolyLine.h>
 #include <vtkVectorOperators.h>
 
 mitk::StreamlineInteractor::StreamlineInteractor()
 {
     m_ColorForHighlight[0] = 1.0;
     m_ColorForHighlight[1] = 0.5;
     m_ColorForHighlight[2] = 0.0;
     m_ColorForHighlight[3] = 1.0;
 
     // TODO if we want to get this configurable, the this is the recipe:
     // - make the 2D mapper add corresponding properties to control "enabled" and "color"
     // - make the interactor evaluate those properties
     // - in an ideal world, modify the state machine on the fly and skip mouse move handling
 }
 
 mitk::StreamlineInteractor::~StreamlineInteractor()
 {
 }
 
 void mitk::StreamlineInteractor::ConnectActionsAndFunctions()
 {
 //  CONNECT_CONDITION("isoverstreamline", HasPickedHandle);
   CONNECT_FUNCTION("addnegstreamline", AddStreamlineNegBundle);
   CONNECT_FUNCTION("addposstreamline", AddStreamlinePosBundle);
 //  CONNECT_FUNCTION("FeedUndoStack", FeedUndoStack);
 }
 
 void mitk::StreamlineInteractor::SetNegativeNode(DataNode *node)
 {
 
     DataInteractor::SetDataNode(node);
     m_NegStreamline= dynamic_cast<mitk::FiberBundle *>(node->GetData());
     MITK_INFO << "Negative Node added";
 }
 
 void mitk::StreamlineInteractor::SetToLabelNode(DataNode *node)
 {
     DataInteractor::SetDataNode(node);
     m_manStreamline = dynamic_cast<mitk::FiberBundle *>(node->GetData());
     MITK_INFO << "Label node added";
 
 }
 
 void mitk::StreamlineInteractor::SetPositiveNode(DataNode *node)
 {
 
     DataInteractor::SetDataNode(node);
     m_PosStreamline= dynamic_cast<mitk::FiberBundle *>(node->GetData());
     MITK_INFO << "Positive Node added";
   }
 
 void mitk::StreamlineInteractor::AddStreamlinePosBundle(StateMachineAction *, InteractionEvent *interactionEvent)
 {
     MITK_INFO << "PositiveBundle clicked";
 
     auto positionEvent = dynamic_cast<const InteractionPositionEvent *>(interactionEvent);
     if (positionEvent == nullptr)
     {
         MITK_INFO << "no position";
     }
 
     if (interactionEvent->GetSender()->GetMapperID() == BaseRenderer::Standard2D)
     {
 //      m_PickedHandle = PickFrom2D(positionEvent);
         MITK_INFO << "2D";
     }
     else
     {
         BaseRenderer *renderer = positionEvent->GetSender();
 
         auto &picker = m_Picker[renderer];
 //        if (picker == nullptr)
 //        {
 
 
 
           picker = vtkSmartPointer<vtkCellPicker>::New();
           picker->SetTolerance(0.01);
           auto mapper = GetDataNode()->GetMapper(BaseRenderer::Standard3D);
 
 
           auto vtk_mapper = dynamic_cast<VtkMapper *>(mapper);
           if (vtk_mapper)
           { // doing this each time is bizarre
             picker->AddPickList(vtk_mapper->GetVtkProp(renderer));
             picker->PickFromListOn();
           }
 //        }
 
         auto displayPosition = positionEvent->GetPointerPositionOnScreen();
         picker->Pick(displayPosition[0], displayPosition[1], 0, positionEvent->GetSender()->GetVtkRenderer());
 
         vtkIdType pickedCellID = picker->GetCellId();
 
 
 
         if (picker->GetCellId()==-1)
         {
             MITK_INFO << "Nothing picked";
         }
         else {
 
 
             vtkSmartPointer<vtkPolyData> vNewPolyData = vtkSmartPointer<vtkPolyData>::New();
             vtkSmartPointer<vtkCellArray> vNewLines = vtkSmartPointer<vtkCellArray>::New();
             vtkSmartPointer<vtkPoints> vNewPoints = vtkSmartPointer<vtkPoints>::New();
 
             unsigned int counter = 0;
             for ( int i=0; i<m_PosStreamline->GetFiberPolyData()->GetNumberOfCells(); i++)
             {
+
               vtkCell* cell = m_PosStreamline->GetFiberPolyData()->GetCell(i);
               auto numPoints = cell->GetNumberOfPoints();
               vtkPoints* points = cell->GetPoints();
 
               vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
               for (unsigned int j=0; j<numPoints; j++)
               {
                 double p[3];
                 points->GetPoint(j, p);
 
                 vtkIdType id = vNewPoints->InsertNextPoint(p);
                 container->GetPointIds()->InsertNextId(id);
               }
           //    weights->InsertValue(counter, fib->GetFiberWeight(i));
               vNewLines->InsertNextCell(container);
               counter++;
 
             }
 
 
 
             vtkCell* cell = m_manStreamline->GetFiberPolyData()->GetCell(pickedCellID);
 
             auto numPoints = cell->GetNumberOfPoints();
             vtkPoints* points = cell->GetPoints();
 
             vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
             for (unsigned int j=0; j<numPoints; j++)
             {
               double p[3];
               points->GetPoint(j, p);
 
               vtkIdType id = vNewPoints->InsertNextPoint(p);
               container->GetPointIds()->InsertNextId(id);
             }
             vNewLines->InsertNextCell(container);
 
             vNewPolyData->SetPoints(vNewPoints);
             vNewPolyData->SetLines(vNewLines);
 
     //        m_PosStreamline = mitk::FiberBundle::New(vNewPolyData);
             m_PosStreamline->GetFiberPolyData()->SetPoints(vNewPoints);
             m_PosStreamline->GetFiberPolyData()->SetLines(vNewLines);
             m_PosStreamline->SetFiberColors(0, 255, 0);
+//            m_PosStreamline->SetFiberWeights(m_PosStreamline->GetFiberWeights());
 
             m_manStreamline->GetFiberPolyData()->DeleteCell(pickedCellID);
             m_manStreamline->GetFiberPolyData()->RemoveDeletedCells();
         }
     }
+    RenderingManager::GetInstance()->RequestUpdateAll();
   }
 
 void mitk::StreamlineInteractor::AddStreamlineNegBundle(StateMachineAction *, InteractionEvent *interactionEvent)
 {
     MITK_INFO << "NegativeBundle clicked";
 //     auto positionEvent = dynamic_cast<const InteractionPositionEvent *>(interactionEvent);
 //     if (positionEvent == nullptr)
 //     {
 //       return;
 //     }
 //    return true;
     auto positionEvent = dynamic_cast<const InteractionPositionEvent *>(interactionEvent);
     if (positionEvent == nullptr)
     {
         MITK_INFO << "no position";
     }
 
     if (interactionEvent->GetSender()->GetMapperID() == BaseRenderer::Standard2D)
     {
 //      m_PickedHandle = PickFrom2D(positionEvent);
         MITK_INFO << "2D";
     }
     else
     {
         BaseRenderer *renderer = positionEvent->GetSender();
 
         auto &picker = m_Picker[renderer];
 //        if (picker == nullptr)
 //        {
 
 
           picker = vtkSmartPointer<vtkCellPicker>::New();
           picker->SetTolerance(0.01);
           auto mapper = GetDataNode()->GetMapper(BaseRenderer::Standard3D);
 
 
           auto vtk_mapper = dynamic_cast<VtkMapper *>(mapper);
           if (vtk_mapper)
           { // doing this each time is bizarre
             picker->AddPickList(vtk_mapper->GetVtkProp(renderer));
             picker->PickFromListOn();
           }
 //        }
 
         auto displayPosition = positionEvent->GetPointerPositionOnScreen();
 
         picker->Pick(displayPosition[0], displayPosition[1], 0, positionEvent->GetSender()->GetVtkRenderer());
 
         vtkIdType pickedCellID = picker->GetCellId();
 
 
         if (picker->GetCellId()==-1)
         {
             MITK_INFO << "Nothing picked";
         }
         else
         {
             vtkSmartPointer<vtkPolyData> vNewPolyData = vtkSmartPointer<vtkPolyData>::New();
             vtkSmartPointer<vtkCellArray> vNewLines = vtkSmartPointer<vtkCellArray>::New();
             vtkSmartPointer<vtkPoints> vNewPoints = vtkSmartPointer<vtkPoints>::New();
 
             unsigned int counter = 0;
             for ( int i=0; i<m_NegStreamline->GetFiberPolyData()->GetNumberOfCells(); i++)
             {
               vtkCell* cell = m_NegStreamline->GetFiberPolyData()->GetCell(i);
               auto numPoints = cell->GetNumberOfPoints();
               vtkPoints* points = cell->GetPoints();
 
               vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
               for (unsigned int j=0; j<numPoints; j++)
               {
                 double p[3];
                 points->GetPoint(j, p);
 
                 vtkIdType id = vNewPoints->InsertNextPoint(p);
                 container->GetPointIds()->InsertNextId(id);
               }
           //    weights->InsertValue(counter, fib->GetFiberWeight(i));
               vNewLines->InsertNextCell(container);
               counter++;
 
             }
 
 
 
             vtkCell* cell = m_manStreamline->GetFiberPolyData()->GetCell(pickedCellID);
             auto numPoints = cell->GetNumberOfPoints();
             vtkPoints* points = cell->GetPoints();
 
             vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
             for (unsigned int j=0; j<numPoints; j++)
             {
               double p[3];
               points->GetPoint(j, p);
 
               vtkIdType id = vNewPoints->InsertNextPoint(p);
               container->GetPointIds()->InsertNextId(id);
             }
             vNewLines->InsertNextCell(container);
 
             vNewPolyData->SetPoints(vNewPoints);
             vNewPolyData->SetLines(vNewLines);
 
     //        m_NegStreamline = mitk::FiberBundle::New(vNewPolyData);
             m_NegStreamline->GetFiberPolyData()->SetPoints(vNewPoints);
             m_NegStreamline->GetFiberPolyData()->SetLines(vNewLines);
             m_NegStreamline->SetFiberColors(255, 0, 0);
 
             m_manStreamline->GetFiberPolyData()->DeleteCell(pickedCellID);
             m_manStreamline->GetFiberPolyData()->RemoveDeletedCells();
 
         }
-
-
-
-
-
-
-
-
-
     }
-
-
-
+    RenderingManager::GetInstance()->RequestUpdateAll();
   }
diff --git a/Modules/FiberDissection/MachineLearning/mitkStreamlineFeatureExtractor.cpp b/Modules/FiberDissection/MachineLearning/mitkStreamlineFeatureExtractor.cpp
index a7afe2f..ba29f61 100644
--- a/Modules/FiberDissection/MachineLearning/mitkStreamlineFeatureExtractor.cpp
+++ b/Modules/FiberDissection/MachineLearning/mitkStreamlineFeatureExtractor.cpp
@@ -1,584 +1,566 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center.
 
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 #include "mitkStreamlineFeatureExtractor.h"
 
 #define _USE_MATH_DEFINES
 #include <math.h>
 #include <boost/progress.hpp>
 #include <vnl/vnl_sparse_matrix.h>
 #include <mitkIOUtil.h>
 
 namespace mitk{
 
 StreamlineFeatureExtractor::StreamlineFeatureExtractor()
   : m_NumPoints(20)
 {
 
 }
 
 StreamlineFeatureExtractor::~StreamlineFeatureExtractor()
 {
 
 }
 
 
 
 void StreamlineFeatureExtractor::SetTractogramPlus(const mitk::FiberBundle::Pointer &TractogramPlus)
 {
   m_TractogramPlus = TractogramPlus;
 }
 
 void StreamlineFeatureExtractor::SetTractogramMinus(const mitk::FiberBundle::Pointer &TractogramMinus)
 {
   m_TractogramMinus = TractogramMinus;
 }
 
 
 void StreamlineFeatureExtractor::SetTractogramTest(const mitk::FiberBundle::Pointer &TractogramTest, std::string TractogramTestName)
 {
     std::string path = "/home/r948e/E132-Projekte/Projects/2022_Peretzke_Interactive_Fiber_Dissection/mitk_diff/storage/";
     path.append(TractogramTestName);
     m_TractogramTest= TractogramTest;
-    m_DistancesTestName= path.append("_distances.csv");
+    auto s = std::to_string(m_NumPoints);
+    m_DistancesTestName= path.append("_distances" + s + ".csv");
 }
 
 std::vector<vnl_matrix<float> > StreamlineFeatureExtractor::ResampleFibers(mitk::FiberBundle::Pointer tractogram)
 {
   mitk::FiberBundle::Pointer temp_fib = tractogram->GetDeepCopy();
   temp_fib->ResampleToNumPoints(m_NumPoints);
+  MITK_INFO << "Resampling Done";
+
+  std::vector< vnl_matrix<float> > out_fib(temp_fib->GetFiberPolyData()->GetNumberOfCells());
+//  std::vector< vnl_matrix<float> > out_fib();
+
+//  cv::parallel_for_(cv::Range(0, temp_fib->GetFiberPolyData()->GetNumberOfCells()), [&](const cv::Range &range)
+//  {
+//      for (int i = range.start; i < range.end; i++)
+//    #pragma omp parallel for
+//  #pragma omp parallel for num_threads(10) collapse(1)
+      for (int i=0; i<temp_fib->GetFiberPolyData()->GetNumberOfCells(); i++)
+      {
+        vtkCell* cell = temp_fib->GetFiberPolyData()->GetCell(i);
+        int numPoints = cell->GetNumberOfPoints();
+        vtkPoints* points = cell->GetPoints();
 
-  std::vector< vnl_matrix<float> > out_fib;
+        vnl_matrix<float> streamline;
+        streamline.set_size(3, m_NumPoints);
+        streamline.fill(0.0);
 
-  for (int i=0; i<temp_fib->GetFiberPolyData()->GetNumberOfCells(); i++)
-  {
-    vtkCell* cell = temp_fib->GetFiberPolyData()->GetCell(i);
-    int numPoints = cell->GetNumberOfPoints();
-    vtkPoints* points = cell->GetPoints();
+        for (int j=0; j<numPoints; j++)
+        {
+          double cand[3];
+          points->GetPoint(j, cand);
 
-    vnl_matrix<float> streamline;
-    streamline.set_size(3, m_NumPoints);
-    streamline.fill(0.0);
+          vnl_vector_fixed< float, 3 > candV;
+          candV[0]=cand[0]; candV[1]=cand[1]; candV[2]=cand[2];
+          streamline.set_column(j, candV);
+        }
 
-    for (int j=0; j<numPoints; j++)
-    {
-      double cand[3];
-      points->GetPoint(j, cand);
+//        out_fib.push_back(streamline);
+        out_fib.at(i)=streamline;
+      }
+//      });
 
-      vnl_vector_fixed< float, 3 > candV;
-      candV[0]=cand[0]; candV[1]=cand[1]; candV[2]=cand[2];
-      streamline.set_column(j, candV);
-    }
 
-    out_fib.push_back(streamline);
-  }
 
   return out_fib;
 }
 
 std::vector<vnl_matrix<float> > StreamlineFeatureExtractor::CalculateDmdf(std::vector<vnl_matrix<float> > tractogram, std::vector<vnl_matrix<float> > prototypes)
 {
-    std::vector< vnl_matrix<float> >  dist_vec;
-
+    std::vector< vnl_matrix<float> >  dist_vec(tractogram.size());//
+    MITK_INFO << "Start Calculating Dmdf";
+    cv::parallel_for_(cv::Range(0, tractogram.size()), [&](const cv::Range &range)
+    {
+    for (int i = range.start; i < range.end; i++)
+//    #pragma omp parallel for
 
-    for (unsigned int i=0; i<tractogram.size(); i++)
+//#pragma omp parallel for
+//    for (unsigned int i=0; i<tractogram.size(); i++)
     {
 
         vnl_matrix<float> distances;
         distances.set_size(1, prototypes.size());
         distances.fill(0.0);
 
 
         for (unsigned int j=0; j<prototypes.size(); j++)
         {
             vnl_matrix<float> single_distances;
             single_distances.set_size(1, tractogram.at(0).cols());
             single_distances.fill(0.0);
             vnl_matrix<float> single_distances_flip;
             single_distances_flip.set_size(1, tractogram.at(0).cols());
             single_distances_flip.fill(0.0);
             for (unsigned int ik=0; ik<tractogram.at(0).cols(); ik++)
             {
                 double cur_dist;
                 double cur_dist_flip;
 
                 cur_dist = sqrt(pow(tractogram.at(i).get(0,ik) - prototypes.at(j).get(0,ik), 2.0) +
                                        pow(tractogram.at(i).get(1,ik) - prototypes.at(j).get(1,ik), 2.0) +
                                        pow(tractogram.at(i).get(2,ik) - prototypes.at(j).get(2,ik), 2.0));
 
                 cur_dist_flip = sqrt(pow(tractogram.at(i).get(0,ik) - prototypes.at(j).get(0,prototypes.at(0).cols()-(ik+1)), 2.0) +
                                        pow(tractogram.at(i).get(1,ik) - prototypes.at(j).get(1,prototypes.at(0).cols()-(ik+1)), 2.0) +
                                        pow(tractogram.at(i).get(2,ik) - prototypes.at(j).get(2,prototypes.at(0).cols()-(ik+1)), 2.0));
 
                 single_distances.put(0,ik, cur_dist);
                 single_distances_flip.put(0,ik, cur_dist_flip);
 
             }
 
             if (single_distances_flip.mean()> single_distances.mean())
             {
                 distances.put(0,j, single_distances.mean());
             }
             else {
                 distances.put(0,j, single_distances_flip.mean());
             }
 
 
 
         }
-        dist_vec.push_back(distances);
+//        dist_vec.push_back(distances);
+        dist_vec.at(i) = distances;
     }
+    });
+    MITK_INFO << "Done Calculation";
 
     return dist_vec;
 }
 
 std::vector<std::vector<unsigned int>>  StreamlineFeatureExtractor::GetData()
 {
     MITK_INFO << "Start Function Get Data";
 
     /*Vector which saves Prediction and Fibers to label based on uncertainty*/
     std::vector<std::vector<unsigned int>> index_vec;
 
     int labels_arr [m_DistancesPlus.size()+m_DistancesMinus.size()];
     cv::Mat data;
     cv::Mat labels_arr_vec;
 
     int size_plus = 0;
 
 
     /*Create Trainingdata: Go through positive and negative Bundle and save distances as cv::Mat and create vector with labels*/
     for ( unsigned int i=0; i<m_DistancesPlus.size(); i++)
     {
         float data_arr [m_DistancesPlus.at(0).size()];
-        labels_arr[i]=2;
+        labels_arr[i]=1;
         labels_arr_vec.push_back(1);
 
         for ( unsigned int j=0; j<m_DistancesPlus.at(0).cols(); j++)
         {
             data_arr[j] = m_DistancesPlus.at(i).get(0,j);
         }
         cv::Mat curdata(1, m_DistancesPlus.at(0).size(), CV_32F, data_arr);
         data.push_back(curdata);
         size_plus++;
 
     }
 
     for ( unsigned int i=m_DistancesPlus.size(); i<m_DistancesPlus.size()+m_DistancesMinus.size(); i++)
     {
         int it = i - size_plus;
         float data_arr [m_DistancesMinus.at(0).size()];
-        labels_arr[i]=1;
+        labels_arr[i]=0;
         labels_arr_vec.push_back(0);
 
          for ( unsigned int j=0; j<m_DistancesMinus.at(0).cols(); j++)
         {
             data_arr[j] = m_DistancesMinus.at(it).get(0,j);
         }
         cv::Mat curdata(1, m_DistancesPlus.at(0).size(), CV_32F, data_arr);
         data.push_back(curdata);
 
     }
 
     /*Calculate weights*/
     int zerosgt = labels_arr_vec.rows - cv::countNonZero(labels_arr_vec);
     int onesgt = cv::countNonZero(labels_arr_vec);
     float plusval = labels_arr_vec.rows / (2.0 * onesgt );
     float minusval = labels_arr_vec.rows / (2.0 * zerosgt );
 
     cv::Mat newweight;
     newweight.push_back(minusval);
     newweight.push_back(plusval);
     MITK_INFO << "Weights";
     MITK_INFO << newweight;
 
 
     cv::Mat labels(m_DistancesPlus.size()+m_DistancesMinus.size(), 1, CV_32S, labels_arr);
 
+//    std::ofstream myfile1;
+//    myfile1.open("/home/r948e/mycsv/labels.csv");
+//    myfile1<< cv::format(labels, cv::Formatter::FMT_CSV) << std::endl;
+//    myfile1.close();
+
+//    std::ofstream myfile2;
+//    myfile2.open("/home/r948e/mycsv/features.csv");
+//    myfile2<< cv::format(data, cv::Formatter::FMT_CSV) << std::endl;
+//    myfile2.close();
 
     cv::Ptr<cv::ml::TrainData> m_traindata = cv::ml::TrainData::create(data, cv::ml::ROW_SAMPLE, labels);
 
 //    m_traindata->setTrainTestSplitRatio(0.95, true);
     m_traindata->shuffleTrainTest();
-    MITK_INFO << m_traindata->getTrainResponses();
-    MITK_INFO << m_traindata->getTrainSamples();
     MITK_INFO << m_traindata->getClassLabels();
 
     MITK_INFO << "Start Training";
 
     auto statistic_model = cv::ml::RTrees::create();
 
     auto criteria = cv::TermCriteria();
     criteria.type = cv::TermCriteria::MAX_ITER;
 //    criteria.epsilon = 1e-8;
-    criteria.maxCount = 1000;
+    criteria.maxCount = 800;
 
 //    statistic_model->setMaxCategories(2);
     statistic_model->setMaxDepth(50);
-    statistic_model->setMinSampleCount(m_traindata->getNTrainSamples()*0.01);
-    statistic_model->setMinSampleCount(3);
-    statistic_model->setTruncatePrunedTree(true);
-    statistic_model->setUse1SERule(true);
+//    statistic_model->setMinSampleCount(m_traindata->getNTrainSamples()*0.01);
+    statistic_model->setMinSampleCount(2);
+    statistic_model->setTruncatePrunedTree(false);
+    statistic_model->setUse1SERule(false);
     statistic_model->setUseSurrogates(false);
     statistic_model->setTermCriteria(criteria);
     statistic_model->setCVFolds(1);
     statistic_model->setPriors(newweight);
 
 
     statistic_model->train(m_traindata);
 
-    MITK_INFO << statistic_model->isClassifier();
+
 
 
     MITK_INFO << "Predicting";
 
 
     cv::Mat dataTest;
 
     for ( unsigned int i=0; i<m_DistancesTest.size(); i++)
     {
         float data_arr [m_DistancesTest.at(0).size()];
 
         for ( unsigned int j=0; j<m_DistancesTest.at(0).cols(); j++)
         {
             data_arr[j] = m_DistancesTest.at(i).get(0,j);
         }
         cv::Mat curdata(1, m_DistancesTest.at(0).size(), CV_32F, data_arr);
         dataTest.push_back(curdata);
     }
-//    MITK_INFO << "DataTest";
-//    MITK_INFO << dataTest.cols;
-//    MITK_INFO << dataTest.rows;
-//    MITK_INFO << dataTest;
-    MITK_INFO << "________";
-
 
 
     std::vector<unsigned int> index;
     std::vector<float> e(m_DistancesTest.size());
 
 
     cv::parallel_for_(cv::Range(0, m_DistancesTest.size()), [&](const cv::Range &range)
     {
     for (int i = range.start; i < range.end; i++)
     {
 
-        cv::Mat vote;
 
         int val = statistic_model->predict(dataTest.row(i));
-        statistic_model->getVotes(dataTest.row(i), vote, 0);
+        if (val==1)
+        {
+           index.push_back(i);
+        }
 
-        float plus_prob = (vote.at<int>(1,0)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1));
-        float neg_prob = (vote.at<int>(1,1)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1));
 
-        e.at(i) = ( -plus_prob * log2(plus_prob) - neg_prob * log2(neg_prob));
+        cv::Mat vote;
+        statistic_model->getVotes(dataTest.row(i), vote, 0);
+        e.at(i) = ( -(vote.at<int>(1,0)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1)) * log2((vote.at<int>(1,0)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1))) -
+                    (vote.at<int>(1,1)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1))* log2((vote.at<int>(1,1)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1))));
 
+        if (isnan(e.at(i)))
+        {
+            e.at(i)=0;
+//            MITK_INFO << e.at(i);
+        }
         if (i==1)
         {
             MITK_INFO<< val;
             MITK_INFO << vote;
-            MITK_INFO << e.at(i);
-        }
-
 
-        if (val==2)
-        {
-           index.push_back(i);
         }
     }
     });
+//    std::ofstream myfile3;
+//    myfile3.open("/home/r948e/mycsv/entropydata.csv");
 
-//    for (unsigned  int i = 0; i < m_DistancesTest.size(); i++)
-//    {
+//  for (unsigned int i = 0; i < e.size(); i++) {
+//          myfile3 << e.at(i) << ' ';
+//      }
+//  myfile3.close();
 
-//        cv::Mat vote;
-//        val = statistic_model->predict(dataTest.row(i));
-//        statistic_model->getVotes(dataTest.row(i), vote, 0);
 
-//        float plus_prob = (vote.at<int>(1,0)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1));
-//        float neg_prob = (vote.at<int>(1,1)*1.0)/ (vote.at<int>(1,0)+vote.at<int>(1,1));
 
-//        e.at(i) = ( -plus_prob * log2(plus_prob) - neg_prob * log2(neg_prob));
 
-////        pred.at(i) = val;
-//        if (i==1)
-//        {
-//            MITK_INFO<< val;
-//            MITK_INFO << vote;
-//            MITK_INFO << e.at(i);
-//        }
-
-//        if (val==2)
-//        {
-//            index.push_back(i);
-////           index.at(i) = i;
-////           MITK_INFO << i;
-//        }
-//        else
-//        {
-////            index.at(i) = 0;
-////            MITK_INFO << 0;
-//        }
-
-//    }
-
-
-    MITK_INFO << index.size();
-    for (unsigned int i = 0; i < index.size(); i++) {
-            std::cout << index.at(i) << ' ';
-        }
+    MITK_INFO << "--------------";
+    MITK_INFO << "Prediction vector size:";
     MITK_INFO << index.size();
+    MITK_INFO << "Entropy vector size:";
+    MITK_INFO << e.size();
 
     MITK_INFO << "--------------";
-    MITK_INFO << e.size();
-    e.erase(
-        std::remove(e.begin(), e.end(), 0),
-        e.end());
-    e.shrink_to_fit();
-    MITK_INFO << e.size();
+
     auto it = std::minmax_element(e.begin(), e.end());
     int min_idx = std::distance(e.begin(), it.first);
     int max_idx = std::distance(e.begin(), it.second);
     std::cout << min_idx << ", " << max_idx << std::endl; // 1, 5
+    MITK_INFO << e.at(max_idx);
 
-    MITK_INFO << "--------------";
 
     MITK_INFO << "Start the ordering";
     std::vector<unsigned int> indextolabel;
     std::priority_queue<std::pair<float, int>> q;
-      for (unsigned int i = 0; i < e.size(); ++i) {
+    for (unsigned int i = 0; i < e.size(); ++i)
+    {
         q.push(std::pair<float, int>(e[i], i));
-      }
-      int k = m_DistancesTest.size(); // number of indices we need
-//      int k = 500; // number of indices we need
-      for (int i = 0; i < k; ++i) {
+    }
+    int k = m_DistancesTest.size(); // number of indices we need
+    for (int i = 0; i < k; ++i)
+    {
         int ki = q.top().second;
-//        std::cout << "index[" << i << "] = " << ki << std::endl;x
         indextolabel.push_back(ki);
         q.pop();
-      }
-      MITK_INFO << "Done";
-//      for (unsigned int i = 0; i < indextolabel.size(); i++) {
-//              std::cout << indextolabel.at(i) << ' ';
-//          }
-
-//    MITK_INFO << statistic_model->getTermCriteria().maxCount;
-//    MITK_INFO << statistic_model->getTermCriteria().type;
-//    MITK_INFO << statistic_model->getTermCriteria().epsilon;
-//    statistic_model->getVotes(dataTest.row(0), vote, 0);
-//    statistic_model->predict(dataTest, pred);
-//    cv::Mat vote;
-//    statistic_model->getVotes(dataTest, vote, 0);
-//    MITK_INFO << "vote";
-//    MITK_INFO << vote.rows;
-//    MITK_INFO << vote.cols;
-//    MITK_INFO << pred;
-//    mitke_INFO << vote;
-////    MITK_INFO << vote;
-//    MITK_INFO << vote;
-    MITK_INFO << "_______";
-
-
-//    MITK_INFO << statistic_model->getPriors();
-//    MITK_INFO << statistic_model->getNodes();
-
-//    index.push_back(1);
+    }
+
+//    std::ofstream myfile4;
+//    myfile4.open("/home/r948e/mycsv/indextolabel.csv");
+//    for (unsigned int i = 0; i < indextolabel.size(); i++)
+//    {
+//        myfile4 << indextolabel.at(i) << ' ';
+//    }
+//    myfile4.close();
+
+    MITK_INFO << "Done";
+
+
     index_vec.push_back(index);
     index_vec.push_back(indextolabel);
 
     return index_vec;
 
 }
 
 mitk::FiberBundle::Pointer StreamlineFeatureExtractor::CreatePrediction(std::vector<unsigned int> &index)
 {
 
 
 
     mitk::FiberBundle::Pointer Prediction;
     MITK_INFO << "Create Bundle";
 
     vtkSmartPointer<vtkPolyData> FibersData;
     FibersData = vtkSmartPointer<vtkPolyData>::New();
     FibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
     FibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
 
     vtkSmartPointer<vtkPolyData> vNewPolyData = vtkSmartPointer<vtkPolyData>::New();
     vtkSmartPointer<vtkCellArray> vNewLines = vtkSmartPointer<vtkCellArray>::New();
     vtkSmartPointer<vtkPoints> vNewPoints = vtkSmartPointer<vtkPoints>::New();
 
     unsigned int indexSize = index.size();
     unsigned int counter = 0;
     MITK_INFO << "Start Loop";
     for (unsigned int i=0; i<indexSize; i++)
     {
 
         vtkCell* cell = m_TractogramTest->GetFiberPolyData()->GetCell(index[i]);
         auto numPoints = cell->GetNumberOfPoints();
         vtkPoints* points = cell->GetPoints();
 
         vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
         for (unsigned int j=0; j<numPoints; j++)
         {
             double p[3];
             points->GetPoint(j, p);
 
             vtkIdType id = vNewPoints->InsertNextPoint(p);
             container->GetPointIds()->InsertNextId(id);
         }
         //    weights->InsertValue(counter, fib->GetFiberWeight(i));
         vNewLines->InsertNextCell(container);
         counter++;
 
     }
     MITK_INFO << "Counter";
     MITK_INFO << counter;
 
 
      vNewPolyData->SetLines(vNewLines);
      vNewPolyData->SetPoints(vNewPoints);
 
      FibersData = vtkSmartPointer<vtkPolyData>::New();
      FibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
      FibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
      FibersData->SetPoints(vNewPoints);
      FibersData->SetLines(vNewLines);
 
      Prediction = mitk::FiberBundle::New(vNewPolyData);
 
 //     Bundle->SetFiberColors(255, 255, 255);
     MITK_INFO << "Cells Prediciton";
     MITK_INFO << Prediction->GetFiberPolyData()->GetNumberOfCells();
     MITK_INFO << "Cells Tractorgram";
     MITK_INFO << m_TractogramTest->GetFiberPolyData()->GetNumberOfCells();
 
     return Prediction;
 }
 
 void  StreamlineFeatureExtractor::GenerateData()
 {
     MITK_INFO << "Update";
     mitk::FiberBundle::Pointer inputPrototypes = mitk::IOUtil::Load<mitk::FiberBundle>("/home/r948e/E132-Projekte/Projects/2022_Peretzke_Interactive_Fiber_Dissection/mitk_diff/prototypes_599671.trk");
 
     T_Prototypes = ResampleFibers(inputPrototypes);
     T_TractogramMinus= ResampleFibers(m_TractogramMinus);
     T_TractogramPlus= ResampleFibers(m_TractogramPlus);
 
 
-
+    MITK_INFO << "Calculate Features";
     m_DistancesMinus = CalculateDmdf(T_TractogramMinus, T_Prototypes);
     m_DistancesPlus = CalculateDmdf(T_TractogramPlus, T_Prototypes);
 
 
+
+
     std::ifstream f(m_DistancesTestName);
 
 
     if (f.good())
     {
         MITK_INFO << "File exists";
         m_DistancesTest.clear();
         std::ifstream myFile(m_DistancesTestName);
 
         if(!myFile.is_open()) throw std::runtime_error("Could not open file");
         std::string line;
         vnl_matrix<float> curline;
         curline.set_size(1, m_DistancesPlus.at(0).cols());
         curline.fill(0.0);
 
         float val;
 
         while(std::getline(myFile, line))
             {
 
 
 
                 // Create a stringstream of the current line
                 std::stringstream ss(line);
 //                MITK_INFO << ss;
 
                 // Keep track of the current column index
                 int colIdx = 0;
 
                 // Extract each integer
                 while(ss >> val){
 
 //                    // Add the current integer to the 'colIdx' column's values vector
                     curline.put(0,colIdx, val);
 
 //                    // If the next token is a comma, ignore it and move on
 //                    if(ss.peek() == ',') ss.ignore();
-
 //                    // Increment the column index
                     colIdx++;
                 }
                 m_DistancesTest.push_back(curline);
             }
 
             // Close file
             myFile.close();
     }
     else
     {
         MITK_INFO << m_DistancesTestName;
+        MITK_INFO << "Resample Test Data";
         T_TractogramTest= ResampleFibers(m_TractogramTest);
+        MITK_INFO << "Calculate Features of Test Data";
         m_DistancesTest= CalculateDmdf(T_TractogramTest, T_Prototypes);
 
         std::ofstream myFile(m_DistancesTestName);
 //        myFile << colname << "\n";
         for(long unsigned int i = 0; i < m_DistancesTest.size(); ++i)
         {
             myFile << m_DistancesTest.at(i);
         }
         myFile.close();
     }
     MITK_INFO << m_DistancesTest.size();
 
 
     MITK_INFO << "Sizes of Plus and Minus";
     MITK_INFO << m_DistancesPlus.size() + m_DistancesMinus.size();
     MITK_INFO << "Size of Test Data";
     MITK_INFO << m_DistancesTest.size();
     MITK_INFO << "Done with Datacreation";
     m_index =GetData();
 
 }
 
 
 //cv::Mat StreamlineFeatureExtractor::StartAlgorithm()
 //{
 //    MITK_INFO << "Printing";
 //    float data_arr [10] = {1, 2.4 ,4 ,4.5 ,6 ,7, 120.5, 100, 120, 100};
 //    cv::Mat curdata(1, 10, CV_32F, data_arr);
 //    float data_arr2 [10] = {10, 20.4 ,40 ,40.5 ,60 ,70, 1200.5, 1000, 1200, 1000};
 //    cv::Mat curdata2(1, 10, CV_32F, data_arr2);
 
 //    cv::Mat data;
 ////    cv::Mat data2;
 //    //    data.row(1) = curdata.clone();
 //    data.push_back(curdata);
 //    data.push_back(curdata2);
 ////    cv::add(curdata,data2,data2);
 //    cout << curdata;
 //    cout << data;
 ////    cout << data2;
 //    return curdata.clone();
 //}
 
 
 
 }
 
 
 
 
diff --git a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.cpp b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.cpp
index 29400cb..6733b32 100644
--- a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.cpp
+++ b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.cpp
@@ -1,727 +1,788 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center.
 
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 
 
 // Blueberry
 #include <berryISelectionService.h>
 #include <berryIWorkbenchPart.h>
 #include <berryIWorkbenchWindow.h>
 
 // Qmitk
 #include "QmitkInteractiveFiberDissectionView.h"
 #include <QmitkRenderWindow.h> //Pointset
 #include <QmitkPointListWidget.h> //Pointset
 
 #include <QMessageBox>
 
 #include <mitkNodePredicateProperty.h>
 #include <mitkImageCast.h>
 #include <mitkPointSet.h>
 #include <mitkImageAccessByItk.h>
 #include <mitkDataNodeObject.h>
 #include <mitkTensorImage.h>
 #include "mitkNodePredicateDataType.h"
 #include <mitkNodePredicateProperty.h>
 #include <mitkNodePredicateAnd.h>
 #include <mitkNodePredicateNot.h>
 #include <mitkNodePredicateOr.h>
 //#include <mitkStreamlineFeatureExtractor.h>
 
 #include <mitkInteractionConst.h>
 #include "usModuleRegistry.h"
 //#include <itkFiberCurvatureFilter.h>
 
 
 #include <itkResampleImageFilter.h>
 #include <itkGaussianInterpolateImageFunction.h>
 #include <itkImageRegionIteratorWithIndex.h>
 #include <itkTractsToFiberEndingsImageFilter.h>
 #include <itkTractDensityImageFilter.h>
 #include <itkImageRegion.h>
 #include <itkTractsToRgbaImageFilter.h>
 #include <itkFiberExtractionFilter.h>
 
 #include <mitkInteractionEventObserver.h>
 #include <vtkCellPicker.h>
 
 #include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
 
 #include <vnl/vnl_sparse_matrix.h>
 
 const std::string QmitkInteractiveFiberDissectionView::VIEW_ID = "org.mitk.views.interactivefiberdissection";
 const std::string id_DataManager = "org.mitk.views.datamanager";
 using namespace mitk;
 
 QmitkInteractiveFiberDissectionView::QmitkInteractiveFiberDissectionView()
   : QmitkAbstractView()
   , m_Controls( 0 )
   , m_IterationCounter(0)
   , m_RandomExtractionCounter(0)
   , m_StreamlineInteractor(nullptr)
 {
 
 }
 
 // Destructor
 QmitkInteractiveFiberDissectionView::~QmitkInteractiveFiberDissectionView()
 {
   //disable interactor
   if (m_StreamlineInteractor != nullptr)
   {
 //    m_StreamlineInteractor->SetStreamlineNode(nullptr);
     m_StreamlineInteractor->EnableInteraction(false);
   }
 }
 
 
 void QmitkInteractiveFiberDissectionView::CreateQtPartControl( QWidget *parent )
 {
   // build up qt view, unless already done
   if ( !m_Controls )
   {
     // create GUI widgets from the Qt Designer's .ui file
     m_Controls = new Ui::QmitkInteractiveFiberDissectionViewControls;
     m_Controls->setupUi( parent );
     m_Controls->m_selectedPointSetWidget->SetDataStorage(GetDataStorage());//pointset
     m_Controls->m_selectedPointSetWidget->SetNodePredicate(mitk::NodePredicateAnd::New(//pointset
       mitk::TNodePredicateDataType<mitk::PointSet>::New(),//pointset
       mitk::NodePredicateNot::New(mitk::NodePredicateOr::New(//pointset
         mitk::NodePredicateProperty::New("helper object"),//pointset
         mitk::NodePredicateProperty::New("hidden object")))));//pointset
 
     m_Controls->m_selectedPointSetWidget->SetSelectionIsOptional(true);//pointset
     m_Controls->m_selectedPointSetWidget->SetAutoSelectNewNodes(true);//pointset
     m_Controls->m_selectedPointSetWidget->SetEmptyInfo(QString("Please select a point set"));//pointset
     m_Controls->m_selectedPointSetWidget->SetPopUpTitel(QString("Select point set"));//pointsett
 
+    m_Controls->m_trainbundleWidget->SetDataStorage(GetDataStorage());//testdata
+    m_Controls->m_trainbundleWidget->SetNodePredicate(mitk::NodePredicateAnd::New(//testdata
+      mitk::TNodePredicateDataType<mitk::FiberBundle>::New(),//testdata
+      mitk::NodePredicateNot::New(mitk::NodePredicateOr::New(//testdata
+        mitk::NodePredicateProperty::New("helper object"),//testdata
+        mitk::NodePredicateProperty::New("hidden object")))));//testdatat
+
+    m_Controls->m_trainbundleWidget->SetSelectionIsOptional(true);//testdata
+    m_Controls->m_trainbundleWidget->SetAutoSelectNewNodes(true);//testdat
+    m_Controls->m_trainbundleWidget->SetEmptyInfo(QString("Please select a point set"));//testdat
+    m_Controls->m_trainbundleWidget->SetPopUpTitel(QString("Select point set"));//testdat
+
+
     connect(m_Controls->m_ErazorButton, SIGNAL(toggled(bool)), this, SLOT( RemovefromBundle(bool) ) ); //need
 
     connect(m_Controls->m_StreamlineCreation, SIGNAL( clicked() ), this, SLOT( CreateStreamline()));
 
     connect(m_Controls->m_AddRandomFibers, SIGNAL( clicked() ), this, SLOT( ExtractRandomFibersFromTractogram() ) ); //need
 
     connect(m_Controls->m_TrainClassifier, SIGNAL( clicked() ), this, SLOT( StartAlgorithm( )));
 
     connect(m_Controls->m_CreatePrediction, SIGNAL( clicked() ), this, SLOT( CreatePredictionNode( )));
 
     connect(m_Controls->m_AddUncertainFibers, SIGNAL( clicked() ), this, SLOT( CreateUncertaintySampleNode( )));
 
     connect(m_Controls->m_newlabeling, SIGNAL(toggled(bool)), this, SLOT( RemovefromUncertainty(bool) ) ); //need
 
+    connect(m_Controls->m_predlabeling, SIGNAL(toggled(bool)), this, SLOT( RemovefromPrediction(bool) ) ); //need
+
 
 
     connect(m_Controls->m_addPointSetPushButton, &QPushButton::clicked,//pointset
       this, &QmitkInteractiveFiberDissectionView::OnAddPointSetClicked);//pointset
     connect(m_Controls->m_selectedPointSetWidget, &QmitkSingleNodeSelectionWidget::CurrentSelectionChanged,//pointset
       this, &QmitkInteractiveFiberDissectionView::OnCurrentSelectionChanged);//pointset
 
 
 
 
     auto renderWindowPart = this->GetRenderWindowPart();//pointset
     if (nullptr != renderWindowPart)//pointset
       this->RenderWindowPartActivated(renderWindowPart);//pointset
     this->OnCurrentSelectionChanged(m_Controls->m_selectedPointSetWidget->GetSelectedNodes());//pointset
 
   }
 
   UpdateGui();
 }
 
 
 void QmitkInteractiveFiberDissectionView::SetFocus()
 {
   m_Controls->toolBoxx->setFocus();
   //m_Controls->m_addPointSetPushButton->setFocus();//pointset
 }
 
 void QmitkInteractiveFiberDissectionView::UpdateGui()
 {
   m_Controls->m_FibLabel->setText("<font color='red'>mandatory</font>");
   m_Controls->m_InputData->setTitle("Please Select Input Data");
 
    // disable alle frames
 
   m_Controls->m_ErazorButton->setCheckable(true);
   m_Controls->m_ErazorButton->setEnabled(false);
   m_Controls->m_newlabeling->setCheckable(true);
   m_Controls->m_newlabeling->setEnabled(false);
+  m_Controls->m_predlabeling->setCheckable(true);
+  m_Controls->m_predlabeling->setEnabled(false);
 
 
 
   m_Controls->m_addPointSetPushButton->setEnabled(false);
   m_Controls->m_StreamlineCreation->setEnabled(false);
   m_Controls->m_TrainClassifier->setEnabled(false);
   m_Controls->m_CreatePrediction->setEnabled(false);
   m_Controls->m_CreateUncertantyMap->setEnabled(false);
   m_Controls->m_Numtolabel->setEnabled(false);
   m_Controls->m_addPointSetPushButton->setEnabled(false);
   m_Controls->m_AddRandomFibers->setEnabled(false);
   m_Controls->m_AddUncertainFibers->setEnabled(false);
   m_Controls->m_newlabeling->setEnabled(false);
+  m_Controls->m_predlabeling->setEnabled(false);
 
   bool fibSelected = !m_SelectedFB.empty();
   bool multipleFibsSelected = (m_SelectedFB.size()>1);
   bool sthSelected = m_SelectedImageNode.IsNotNull();
   bool psSelected = m_SelectedPS.IsNotNull();
 //  bool nfibSelected = !m_newfibersSelectedBundles.empty();
-//  bool posSelected = !m_positivSelectedBundles.empty();
+//  bool posSelected = !m_positivBundlesNode.empty();
   bool nfibSelected = m_newfibersSelectedBundles.IsNotNull();
-//  bool posSelected = !m_positivSelectedBundles.IsNotNull();
+//  bool posSelected = !m_positivBundlesNode.IsNotNull();
 //  bool negSelected = !m_negativeSelectedBundles.IsNotNull();
-    bool posSelected = this->GetDataStorage()->Exists(m_positivSelectedBundles);
+    bool posSelected = this->GetDataStorage()->Exists(m_positivBundlesNode);
     bool negSelected = this->GetDataStorage()->Exists(m_negativeSelectedBundles);
     bool indexSelected = !m_index.empty();
     bool uncertaintySelected = this->GetDataStorage()->Exists(m_UncertaintyLabelNode);
+    bool predictionSelected = this->GetDataStorage()->Exists(m_PredictionNode);
 
 
 
   // toggle visibility of elements according to selected method
 
 
   // are fiber bundles selected?
   if ( fibSelected )
   {
     m_Controls->m_FibLabel->setText(QString(m_SelectedFB.at(0)->GetName().c_str()));
     m_Controls->m_addPointSetPushButton->setEnabled(true);
     m_Controls->m_AddRandomFibers->setEnabled(true);
 
 
 
     // more than two bundles needed to join/subtract
     if (multipleFibsSelected)
     {
       m_Controls->m_FibLabel->setText("multiple bundles selected");
     }
 
 
 
   }
 
 
   // is image selected
   if (sthSelected)
   {
     m_Controls->m_addPointSetPushButton->setEnabled(true);
   }
 
   if (psSelected)
   {
       m_Controls->m_StreamlineCreation->setEnabled(true);
   }
 
   if (nfibSelected && posSelected)
   {
       m_Controls->m_ErazorButton->setEnabled(true);
   }
 
 
   if (posSelected && negSelected)
   {
       m_Controls->m_TrainClassifier->setEnabled(true);
   }
 
   if (indexSelected)
   {
       m_Controls->m_CreatePrediction->setEnabled(true);
       m_Controls->m_AddUncertainFibers->setEnabled(true);
       m_Controls->m_Numtolabel->setEnabled(true);
   }
 
   if (uncertaintySelected)
   {
       m_Controls->m_newlabeling->setEnabled(true);
   }
 
 
+  if (predictionSelected)
+  {
+      m_Controls->m_predlabeling->setEnabled(true);
+  }
+
+
 
 
 
 
 }
 
 void QmitkInteractiveFiberDissectionView::OnEndInteraction()
 {
 
 }
 
 void QmitkInteractiveFiberDissectionView::OnAddPointSetClicked()//pointset
 {
   // ask for the name of the point set
   bool ok = false;
   QString name = QInputDialog::getText(QApplication::activeWindow(),
     tr("Add point set..."), tr("Enter name for the new point set"), QLineEdit::Normal, tr("PointSet").arg(++m_IterationCounter), &ok);
 //  QString name = "PointSet";
   if (!ok || name.isEmpty())
   {
     return;
   }
   mitk::PointSet::Pointer pointSet = mitk::PointSet::New();
   mitk::DataNode::Pointer pointSetNode = mitk::DataNode::New();
   pointSetNode->SetData(pointSet);
   pointSetNode->SetProperty("name", mitk::StringProperty::New(name.toStdString()));
   pointSetNode->SetProperty("opacity", mitk::FloatProperty::New(1));
   pointSetNode->SetColor(1.0, 1.0, 0.0);
   this->GetDataStorage()->Add(pointSetNode, m_SelectedImageNode);
 
 
   m_Controls->m_selectedPointSetWidget->SetCurrentSelectedNode(pointSetNode);
 }
 
 void QmitkInteractiveFiberDissectionView::OnCurrentSelectionChanged(QmitkSingleNodeSelectionWidget::NodeList /*nodes*/)//pointset
 {
 
   m_Controls->m_poinSetListWidget->SetPointSetNode(m_Controls->m_selectedPointSetWidget->GetSelectedNode());
   m_SelectedPS = m_Controls->m_selectedPointSetWidget->GetSelectedNode();
 
+//  m_Controls->m_trainbundleWidget->SetPointSetNode(m_Controls->m_trainbundleWidget->GetSelectedNode());
+  m_trainbundle = m_Controls->m_trainbundleWidget->GetSelectedNode();
+
+
   UpdateGui();
 
 }
 
 void QmitkInteractiveFiberDissectionView::OnSelectionChanged(berry::IWorkbenchPart::Pointer /*part*/, const QList<mitk::DataNode::Pointer>& nodes)
 {
 
     m_SelectedFB.clear();
 
     if (nodes.empty() || nodes.front().IsNull())
     {
       m_SelectedImageNode = nullptr;
     }
     else
     {
       m_SelectedImageNode = nodes.front();
     }
 
 
 
     for (auto node: nodes)
     {
       if (dynamic_cast<mitk::Image*>(node->GetData()))
           m_SelectedImage = dynamic_cast<mitk::Image*>(node->GetData());
       else if ( dynamic_cast<mitk::FiberBundle*>(node->GetData()) )
           m_SelectedFB.push_back(node);
     }
 
 
 
     UpdateGui();
 }
 
 void QmitkInteractiveFiberDissectionView::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart)//pointset
 {
   if (nullptr != m_Controls)
   {
     m_Controls->m_poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController());
     m_Controls->m_poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController());
     m_Controls->m_poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController());
   }
 }
 
 void QmitkInteractiveFiberDissectionView::RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart)//pointset
 {
   if (nullptr != m_Controls)
   {
     m_Controls->m_poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController());
     m_Controls->m_poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController());
     m_Controls->m_poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController());
   }
 }
 
 void QmitkInteractiveFiberDissectionView::CreateStreamline()
 {
 
-    if (m_positivSelectedBundles.IsNull())
+    if (m_positivBundlesNode.IsNull())
     {
         mitk::DataNode::Pointer node = mitk::DataNode::New();
 
         m_positiveFibersData = vtkSmartPointer<vtkPolyData>::New();
         m_positiveFibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
         m_positiveFibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
         m_positiveBundle = mitk::FiberBundle:: New(m_positiveFibersData);
 
         node->SetData( m_positiveBundle );
-        m_positivSelectedBundles = node;
-        this->GetDataStorage()->Add(m_positivSelectedBundles);
+        m_positivBundlesNode = node;
+        this->GetDataStorage()->Add(m_positivBundlesNode);
       MITK_INFO << "Create Bundle";
     }
 
-    if (!m_positivSelectedBundles.IsNull())
+    if (!m_positivBundlesNode.IsNull())
     {
-        this->GetDataStorage()->Remove(m_positivSelectedBundles);
+
+        this->GetDataStorage()->Remove(m_positivBundlesNode);
         MITK_INFO << "Adding fibers";
+        MITK_INFO << m_positiveBundle->GetFiberPolyData()->GetNumberOfCells();
+        m_positiveFibersData = m_positiveBundle->GetFiberPolyData();
     }
 
 
-    mitk::PointSet::Pointer pointSet = dynamic_cast<mitk::PointSet *>(m_SelectedPS->GetData());
-
-    vnl_matrix<float> streamline;
-    streamline.set_size(3, pointSet->GetSize());
-    streamline.fill(0.0);
-
-
-    mitk::PointSet::PointsIterator begin = pointSet->Begin();
-    mitk::PointSet::PointsIterator end = pointSet->End();
-    unsigned int i;
-    mitk::PointSet::PointsContainer::Iterator it;
-
-    for (it = begin, i = 0; it != end; ++it, ++i)
-    {
-        PointSet::PointType pt = pointSet->GetPoint(it->Index());
-        vnl_vector_fixed< float, 3 > candV;
-        candV[0]=pt[0]; candV[1]=pt[1]; candV[2]=pt[2];
-        streamline.set_column(i, candV);
-    }
-
 
 
 
     vtkSmartPointer<vtkPolyData> vNewPolyData = vtkSmartPointer<vtkPolyData>::New();
     vtkSmartPointer<vtkCellArray> vNewLines = vtkSmartPointer<vtkCellArray>::New();
     vtkSmartPointer<vtkPoints> vNewPoints = vtkSmartPointer<vtkPoints>::New();
 
 
 
     unsigned int counter = 0;
     for (unsigned int i=0; i<m_positiveFibersData->GetNumberOfCells(); ++i)
     {
+      MITK_INFO<< "New Line";
       vtkCell* cell = m_positiveFibersData->GetCell(i);
       auto numPoints = cell->GetNumberOfPoints();
       vtkPoints* points = cell->GetPoints();
 
       vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
       for (unsigned int j=0; j<numPoints; ++j)
       {
         double p[3];
         points->GetPoint(j, p);
 
         vtkIdType id = vNewPoints->InsertNextPoint(p);
         container->GetPointIds()->InsertNextId(id);
       }
 
       vNewLines->InsertNextCell(container);
       counter++;
     }
 
+    mitk::PointSet::Pointer pointSet = dynamic_cast<mitk::PointSet *>(m_SelectedPS->GetData());
+
+
+    vnl_matrix<float> streamline;
+    streamline.set_size(3, pointSet->GetSize());
+    streamline.fill(0.0);
+
+
+    mitk::PointSet::PointsIterator begin = pointSet->Begin();
+    mitk::PointSet::PointsIterator end = pointSet->End();
+    unsigned int i;
+    mitk::PointSet::PointsContainer::Iterator it;
+
+    for (it = begin, i = 0; it != end; ++it, ++i)
+    {
+        PointSet::PointType pt = pointSet->GetPoint(it->Index());
+        vnl_vector_fixed< float, 3 > candV;
+        candV[0]=pt[0]; candV[1]=pt[1]; candV[2]=pt[2];
+        streamline.set_column(i, candV);
+    }
+
       // build Fiber
     vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
 
 
       for (unsigned int j=0; j<streamline.cols(); j++)
       {
         double p[3];
         p[0] = streamline.get(0,j);
         p[1] = streamline.get(1,j);
         p[2] = streamline.get(2,j);
 
         vtkIdType id = vNewPoints->InsertNextPoint(p);
         container->GetPointIds()->InsertNextId(id);
       }
+      MITK_INFO<< "Last Line from current pointset";
       vNewLines->InsertNextCell(container);
 
       vNewPolyData->SetPoints(vNewPoints);
       vNewPolyData->SetLines(vNewLines);
 
       m_positiveFibersData = vtkSmartPointer<vtkPolyData>::New();
       m_positiveFibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
       m_positiveFibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
       m_positiveFibersData->SetPoints(vNewPoints);
       m_positiveFibersData->SetLines(vNewLines);
 
       m_positiveBundle = mitk::FiberBundle::New(vNewPolyData);
 //      m_positiveBundle->SetTrackVisHeader(dynamic_cast<mitk::Image*>(m_SelectedImageNode->GetData())->GetGeometry());
       m_positiveBundle->SetFiberColors(0, 255, 0);
 
 
 
 
       mitk::DataNode::Pointer node = mitk::DataNode::New();
       node->SetData(m_positiveBundle);
       node->SetName("+Bundle");
-      m_positivSelectedBundles= node;
+      m_positivBundlesNode= node;
 
 
 
 
       MITK_INFO << "The + Bundle has Streamlines:";
-      auto m_NegStreamline= dynamic_cast<mitk::FiberBundle *>(m_positivSelectedBundles->GetData());
+      auto m_NegStreamline= dynamic_cast<mitk::FiberBundle *>(m_positivBundlesNode->GetData());
       MITK_INFO << m_NegStreamline->GetFiberPolyData()->GetNumberOfCells();
 
-      this->GetDataStorage()->Add(m_positivSelectedBundles);
+      this->GetDataStorage()->Add(m_positivBundlesNode);
 //      m_Controls->m_selectedPointSetWidget->m_ToggleAddPoint->setEnabled(false);
 
       UpdateGui();
 
 }
 
 void QmitkInteractiveFiberDissectionView::ExtractRandomFibersFromTractogram()
 {
     m_Controls->m_ErazorButton->setChecked(false);
 
 
      MITK_INFO << "Number of Fibers to extract from Tractogram: ";
      MITK_INFO << m_Controls->m_NumRandomFibers->value();
      if (this->GetDataStorage()->Exists(m_newfibersSelectedBundles))
      {
          MITK_INFO << "To Label Bundle Exists";
          mitk::FiberBundle::Pointer Stack = dynamic_cast<mitk::FiberBundle *>(m_newfibersSelectedBundles->GetData());
          this->GetDataStorage()->Remove(m_newfibersSelectedBundles);
 
          mitk::DataNode::Pointer node = mitk::DataNode::New();
 
          m_newfibersFibersData = vtkSmartPointer<vtkPolyData>::New();
          m_newfibersFibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
          m_newfibersBundle = mitk::FiberBundle:: New(m_newfibersFibersData);
          m_newfibersFibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
 
 //         node->SetData( m_newfibersBundle );
 //         m_newfibersSelectedBundles = node ;
 
        MITK_INFO << "Create Bundle";
      }
 
       mitk::FiberBundle::Pointer fib = dynamic_cast<mitk::FiberBundle*>(m_SelectedFB.at(0)->GetData());
+//      mitk::FiberBundle::Pointer fib = dynamic_cast<mitk::FiberBundle *>(m_trainbundle->GetData());
 
       vtkSmartPointer<vtkPolyData> vNewPolyData = vtkSmartPointer<vtkPolyData>::New();
       vtkSmartPointer<vtkCellArray> vNewLines = vtkSmartPointer<vtkCellArray>::New();
       vtkSmartPointer<vtkPoints> vNewPoints = vtkSmartPointer<vtkPoints>::New();
 
 
       unsigned int counter = 0;
       for ( int i=m_Controls->m_NumRandomFibers->value()*m_RandomExtractionCounter; i<m_Controls->m_NumRandomFibers->value()*(m_RandomExtractionCounter+1); i++)
       {
         vtkCell* cell = fib->GetFiberPolyData()->GetCell(i);
         auto numPoints = cell->GetNumberOfPoints();
         vtkPoints* points = cell->GetPoints();
 
         vtkSmartPointer<vtkPolyLine> container = vtkSmartPointer<vtkPolyLine>::New();
         for (unsigned int j=0; j<numPoints; j++)
         {
           double p[3];
           points->GetPoint(j, p);
 
           vtkIdType id = vNewPoints->InsertNextPoint(p);
           container->GetPointIds()->InsertNextId(id);
         }
     //    weights->InsertValue(counter, fib->GetFiberWeight(i));
         vNewLines->InsertNextCell(container);
         counter++;
 
       }
 
 
       vNewPolyData->SetLines(vNewLines);
       vNewPolyData->SetPoints(vNewPoints);
 
       m_newfibersFibersData = vtkSmartPointer<vtkPolyData>::New();
       m_newfibersFibersData->SetPoints(vtkSmartPointer<vtkPoints>::New());
       m_newfibersFibersData->SetLines(vtkSmartPointer<vtkCellArray>::New());
       m_newfibersFibersData->SetPoints(vNewPoints);
       m_newfibersFibersData->SetLines(vNewLines);
 
       m_newfibersBundle = mitk::FiberBundle::New(vNewPolyData);
       m_newfibersBundle->SetFiberColors(255, 255, 255);
 
       mitk::DataNode::Pointer node = mitk::DataNode::New();
       node->SetData(m_newfibersBundle);
       node->SetName("ToLabel");
       m_newfibersSelectedBundles = node;
 
 //      MITK_INFO << "Number of Streamlines in first function";
 //      MITK_INFO << m_newfibersSelectedBundles->GetData()->GetFiberPolyData()->GetNumberOfCells();
       this->GetDataStorage()->Add(m_newfibersSelectedBundles);
       m_RandomExtractionCounter++;
 
     UpdateGui();
 
 
 }
 
 void QmitkInteractiveFiberDissectionView::RemovefromBundle( bool checked )
 {
     if (checked)
     {
 
         if (m_StreamlineInteractor.IsNull())
         {
             this->CreateStreamlineInteractor();
 //            if (m_negativeSelectedBundles.IsNull())
 //            {
                 mitk::FiberBundle::Pointer m_negativeBundle = mitk::FiberBundle::New();
                 mitk::DataNode::Pointer node = mitk::DataNode::New();
                 node->SetName("-Bundle");
                 node->SetData(m_negativeBundle);
                 m_negativeSelectedBundles = node;
                 this->GetDataStorage()->Add(m_negativeSelectedBundles);
 //            }
 
-//            if (m_positivSelectedBundles.IsNull())
+//            if (m_positivBundlesNode.IsNull())
 //            {
 
 //                mitk::FiberBundle::Pointer m_positiveBundle = mitk::FiberBundle::New();
 //                mitk::DataNode::Pointer m_positiveSelectedBundles = mitk::DataNode::New();
 //                m_positiveSelectedBundles->SetName("+Bundle");
 //                m_positiveSelectedBundles->SetData(m_positiveBundle);
 //                this->GetDataStorage()->Add(m_positiveSelectedBundles);)
 //            }
 
             m_StreamlineInteractor->EnableInteraction(true);
             m_StreamlineInteractor->SetNegativeNode(m_negativeSelectedBundles);
-            m_StreamlineInteractor->SetPositiveNode(m_positivSelectedBundles);
+            m_StreamlineInteractor->SetPositiveNode(m_positivBundlesNode);
             m_StreamlineInteractor->SetToLabelNode(m_newfibersSelectedBundles);
         }
         else
         {
             m_StreamlineInteractor->EnableInteraction(true);
+            m_StreamlineInteractor->SetPositiveNode(m_positivBundlesNode);
 //            MITK_INFO << "Number of Streamlines";
 //            MITK_INFO << m_newfibersSelectedBundles->GetData()->GetFiberPolyData()->GetNumberOfCells();
             m_StreamlineInteractor->SetToLabelNode(m_newfibersSelectedBundles);
         }
     }
     else
     {
       m_StreamlineInteractor->EnableInteraction(false);
 //      m_StreamlineInteractor = nullptr;
     }
 
 
 
 
 
 
 
 
    UpdateGui();
 }
 
 void QmitkInteractiveFiberDissectionView::CreateStreamlineInteractor()
 {
 
     m_StreamlineInteractor = mitk::StreamlineInteractor::New();
 
     m_StreamlineInteractor->LoadStateMachine("Streamline3DStates.xml", us::ModuleRegistry::GetModule("MitkFiberDissection"));
     m_StreamlineInteractor->SetEventConfig("Streamline3DConfig.xml", us::ModuleRegistry::GetModule("MitkFiberDissection"));
 
 //  m_StreamlineInteractor->SetRotationEnabled(rotationEnabled);
 }
 
 void QmitkInteractiveFiberDissectionView::StartAlgorithm()
 {
+    m_IterationCounter += 1;
+//    m_UncertaintyLabel
+    this->GetDataStorage()->Remove(m_UncertaintyLabelNode);
+
+    m_Controls->m_newlabeling->setChecked(false);
+    m_Controls->m_predlabeling->setChecked(false);
 //    m_traindata.clear();
     clusterer.reset();
     MITK_INFO << "Extract Features";
     m_negativeBundle = dynamic_cast<mitk::FiberBundle*>(m_negativeSelectedBundles->GetData());
     clusterer = std::make_shared<mitk::StreamlineFeatureExtractor>();
     clusterer->SetTractogramPlus(m_positiveBundle);
     clusterer->SetTractogramMinus(m_negativeBundle);
     clusterer->SetTractogramTest(dynamic_cast<mitk::FiberBundle*>(m_SelectedFB.at(0)->GetData()), m_SelectedFB.at(0)->GetName());
+//    clusterer->SetTractogramTest(dynamic_cast<mitk::FiberBundle*>(m_trainbundle->GetData()), m_trainbundle->GetName());
 
 
 //    m_distances = clusterer->get
 
     clusterer->Update();
 
     m_index = clusterer->m_index;
 
 //    m_Prediction = clusterer->CreatePrediction(m_index.at(0));
 //    mitk::DataNode::Pointer node = mitk::DataNode::New();
 //    node->SetData(m_Prediction);
 //    node->SetName("Prediction");
 //    m_PredictionNode = node;
 //    this->GetDataStorage()->Add(m_PredictionNode);
 
 
 
 
 //    m_UncertaintyLabel = clusterer->m_UncertaintyLabel;
 //    mitk::DataNode::Pointer node2 = mitk::DataNode::New();
 //    node2->SetData(m_UncertaintyLabel);
 //    node2->SetName("UncertaintyLabels");
 //    m_UncertaintyLabelNode = node2;
 
 //      MITK_INFO << "Number of Streamlines in first function";
 //      MITK_INFO << m_newfibersSelectedBundles->GetData()->GetFiberPolyData()->GetNumberOfCells();
 //    this->GetDataStorage()->Add(m_UncertaintyLabelNode);
 //    this->GetDataStorage()->Add(m_PredictionNode);
 
 //    clusterer->GetData();
 //    MITK_INFO << data.at(0);
 //    MITK_INFO << data.at(1);
 //    cv::Ptr<cv::ml::TrainData> m_traindata = clusterer->GetData();
 //    MITK_INFO << clusterer->m_labels;
 //    MITK_INFO << data.at(1);
 //    MITK_INFO << "Start Classification";
 //    clusterer->CreateClassifier();
 //     cv::Mat curdata = clusterer->StartAlgorithm();
 //     MITK_INFO << curdata;
 
 
 
     MITK_INFO << "Algorithm run succesfully";
 
     m_Controls->m_CreatePrediction->setEnabled(true);
     UpdateGui();
 
 }
 
 void QmitkInteractiveFiberDissectionView::CreatePredictionNode()
 {
     MITK_INFO << "Create Prediction";
 //    clusterer->SetTractogramTest(dynamic_cast<mitk::FiberBundle*>(m_SelectedFB.at(0)->GetData()), m_SelectedFB.at(0)->GetName());
     m_Prediction = clusterer->CreatePrediction(m_index.at(0));
     mitk::DataNode::Pointer node = mitk::DataNode::New();
     node->SetData(m_Prediction);
     node->SetName("Prediction");
     m_PredictionNode = node;
     this->GetDataStorage()->Add(m_PredictionNode);
     UpdateGui();
 }
 
 void QmitkInteractiveFiberDissectionView::CreateUncertaintySampleNode()
 {
      MITK_INFO << "Create Fibers to label";
      std::vector<unsigned int> myvec = m_index.at(1);
      myvec.resize(m_Controls->m_Numtolabel->value());
      MITK_INFO << m_index.at(1).size();
      MITK_INFO << myvec.size();
 
 //    clusterer->SetTractogramTest(dynamic_cast<mitk::FiberBundle*>(m_SelectedFB.at(0)->GetData()), m_SelectedFB.at(0)->GetName()));
         m_UncertaintyLabel = clusterer->CreatePrediction(myvec);
         mitk::DataNode::Pointer node = mitk::DataNode::New();
         node->SetData(m_UncertaintyLabel);
         node->SetName("UncertaintyLabel");
         m_UncertaintyLabelNode = node;
         this->GetDataStorage()->Add(m_UncertaintyLabelNode);
         UpdateGui();
 }
 
 void QmitkInteractiveFiberDissectionView::RemovefromUncertainty( bool checked )
 {
     if (checked)
     {
 
         m_UncertaintyLabel->SetFiberColors(255, 255, 255);
-            m_StreamlineInteractor->EnableInteraction(true);
-            m_StreamlineInteractor->SetToLabelNode(m_UncertaintyLabelNode);
+        m_StreamlineInteractor->EnableInteraction(true);
+        m_StreamlineInteractor->SetToLabelNode(m_UncertaintyLabelNode);
+    }
+    else
+    {
+      m_StreamlineInteractor->EnableInteraction(false);
+//      m_StreamlineInteractor = nullptr;
+    }
+    RenderingManager::GetInstance()->RequestUpdateAll();
+}
+
+void QmitkInteractiveFiberDissectionView::RemovefromPrediction( bool checked )
+{
+    if (checked)
+    {
+
+        m_Prediction->SetFiberColors(255, 255, 255);
+        m_StreamlineInteractor->EnableInteraction(true);
+        m_StreamlineInteractor->SetToLabelNode(m_PredictionNode);
     }
     else
     {
       m_StreamlineInteractor->EnableInteraction(false);
 //      m_StreamlineInteractor = nullptr;
     }
 
 }
diff --git a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.h b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.h
index ba0fa14..a0d7775 100644
--- a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.h
+++ b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionView.h
@@ -1,151 +1,152 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center.
 
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 
 
 #ifndef QmitkInteractiveFiberDissectionView_h
 #define QmitkInteractiveFiberDissectionView_h
 #include "ui_QmitkInteractiveFiberDissectionViewControls.h"
 
 #include <QInputDialog> //Pointset
 #include <QmitkPointListWidget.h>//Pointset
 
 #include <QmitkAbstractView.h>//Pointset
 #include <QmitkSingleNodeSelectionWidget.h>//Pointset
 
 
 #include <mitkFiberBundle.h>
 #include <mitkDataInteractor.h>
 #include <mitkIRenderWindowPartListener.h> //Pointset
 #include <mitkStreamlineInteractor.h>
 #include <mitkStreamlineFeatureExtractor.h>
 
 #include <itkCastImageFilter.h>
 #include <itkVTKImageImport.h>
 #include <itkVTKImageExport.h>
 #include <itkRegionOfInterestImageFilter.h>
 
 #include <vtkLinearExtrusionFilter.h>
 #include <vtkPolyDataToImageStencil.h>
 #include <vtkSelectEnclosedPoints.h>
 #include <vtkImageImport.h>
 #include <vtkImageExport.h>
 #include <vtkImageStencil.h>
 #include <vtkSmartPointer.h>
 #include <vtkSelection.h>
 #include <vtkSelectionNode.h>
 #include <vtkExtractSelectedThresholds.h>
 #include <vtkFloatArray.h>
 #include <vtkCellPicker.h>
 
 /*!
 \brief View to process fiber bundles. Supplies methods to extract fibers from the bundle, fiber resampling, mirroring, join and subtract bundles and much more.
 */
 class QmitkInteractiveFiberDissectionView : public QmitkAbstractView, public mitk::IRenderWindowPartListener
 {
   // this is needed for all Qt objects that should have a Qt meta-object
   // (everything that derives from QObject and wants to have signal/slots)
   Q_OBJECT
 
 public:
 
   typedef itk::Image< unsigned char, 3 >    ItkUCharImageType;
   typedef itk::Image< float, 3 >            ItkFloatImageType;
 
   static const std::string VIEW_ID;
 
   QmitkInteractiveFiberDissectionView();
   virtual ~QmitkInteractiveFiberDissectionView();
 
   virtual void CreateQtPartControl(QWidget *parent) override;
 
   ///
   /// Sets the focus to an internal widget.
   ///
   virtual void SetFocus() override;
 
 protected slots:
 
   void RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) override; //Pointset
   void RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) override; //Pointset
   void OnAddPointSetClicked();//Pointset
   void CreateStreamline();
   void RemovefromBundle( bool checked );
   void ExtractRandomFibersFromTractogram();
   void StartAlgorithm();
   void CreatePredictionNode();
   void CreateUncertaintySampleNode();
   void RemovefromUncertainty( bool checked );
+  void RemovefromPrediction( bool checked );
 
 
 
 
   void UpdateGui();     ///< update button activity etc. dpending on current datamanager selection
 
 
 
 
 protected:
   void OnCurrentSelectionChanged(QmitkSingleNodeSelectionWidget::NodeList nodes);//Pointset
 
 
   virtual void OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList<mitk::DataNode::Pointer>& nodes) override;
 
   void OnEndInteraction();
   void CreateStreamlineInteractor();
 
   Ui::QmitkInteractiveFiberDissectionViewControls* m_Controls;
 
 
 
   int m_IterationCounter;                                      ///< used for data node naming
   int m_RandomExtractionCounter;                               ///< used for random extracton of different Streamlines
 
 
   std::vector<mitk::DataNode::Pointer>  m_SelectedFB;       ///< selected fiber bundle nodes
-
+  mitk::DataNode::Pointer              m_trainbundle;
   mitk::Image::Pointer                  m_SelectedImage;
   mitk::DataNode::Pointer               m_SelectedPS;
   mitk::DataNode::Pointer               m_SelectedImageNode;
   mitk::FiberBundle::Pointer            m_positiveBundle;
   mitk::FiberBundle::Pointer            m_newfibersBundle;
   mitk::FiberBundle::Pointer            m_negativeBundle;
   mitk::FiberBundle::Pointer            m_Prediction;
   mitk::FiberBundle::Pointer            m_UncertaintyLabel;
 
 
-  mitk::DataNode::Pointer               m_positivSelectedBundles;
+  mitk::DataNode::Pointer               m_positivBundlesNode;
   mitk::DataNode::Pointer               m_newfibersSelectedBundles;
   mitk::DataNode::Pointer               m_negativeSelectedBundles;
   mitk::DataNode::Pointer               m_PredictionNode;
   mitk::DataNode::Pointer               m_UncertaintyLabelNode;
 
   vtkSmartPointer<vtkPolyData>          m_positiveFibersData;
   vtkSmartPointer<vtkPolyData>          m_newfibersFibersData;
 
   vtkSmartPointer<vtkCellPicker>        m_picker1;
   mitk::StreamlineInteractor::Pointer   m_StreamlineInteractor;
 
   std::shared_ptr< mitk::StreamlineFeatureExtractor > clusterer;
 
   std::vector<std::vector<unsigned int>> m_index;
 
 };
 
 
 
 #endif // _QMITKFIBERTRACKINGVIEW_H_INCLUDED
 
diff --git a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionViewControls.ui b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionViewControls.ui
index 2317733..5c6c709 100644
--- a/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionViewControls.ui
+++ b/Plugins/org.mitk.gui.qt.diffusionimaging.fiberprocessing/src/internal/QmitkInteractiveFiberDissectionViewControls.ui
@@ -1,658 +1,662 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>QmitkInteractiveFiberDissectionViewControls</class>
  <widget class="QWidget" name="QmitkInteractiveFiberDissectionViewControls">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>417</width>
     <height>711</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <property name="styleSheet">
    <string>QCommandLinkButton:disabled {
   border: none;
 }
 
 QGroupBox {
   background-color: transparent;
 }</string>
   </property>
   <layout class="QGridLayout" name="gridLayout_3">
    <property name="leftMargin">
     <number>9</number>
    </property>
    <property name="topMargin">
     <number>9</number>
    </property>
    <property name="rightMargin">
     <number>9</number>
    </property>
    <property name="bottomMargin">
     <number>9</number>
    </property>
-   <item row="0" column="0">
-    <widget class="QGroupBox" name="m_InputData">
-     <property name="title">
-      <string>Please Select Input Data</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_9">
-      <property name="leftMargin">
-       <number>6</number>
-      </property>
-      <property name="topMargin">
-       <number>6</number>
-      </property>
-      <property name="rightMargin">
-       <number>6</number>
-      </property>
-      <property name="bottomMargin">
-       <number>6</number>
-      </property>
-      <item row="0" column="0">
-       <widget class="QLabel" name="label_2">
-        <property name="toolTip">
-         <string>Input DTI</string>
-        </property>
-        <property name="text">
-         <string>Fiber Bundle:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLabel" name="m_FibLabel">
-        <property name="text">
-         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;mandatory&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-        </property>
-        <property name="wordWrap">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
    <item row="1" column="0">
     <widget class="QToolBox" name="toolBoxx">
      <property name="enabled">
       <bool>true</bool>
      </property>
      <property name="font">
       <font>
        <bold>true</bold>
       </font>
      </property>
      <property name="toolTip">
       <string>Label Fibers</string>
      </property>
      <property name="frameShape">
       <enum>QFrame::NoFrame</enum>
      </property>
      <property name="currentIndex">
-      <number>2</number>
+      <number>0</number>
      </property>
      <property name="tabSpacing">
       <number>6</number>
      </property>
      <widget class="QWidget" name="page_3">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>399</width>
-        <height>492</height>
+        <height>464</height>
        </rect>
       </property>
       <attribute name="label">
        <string>Fiber Creation</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_7">
        <item row="0" column="0">
         <widget class="QFrame" name="frame">
          <property name="frameShape">
           <enum>QFrame::StyledPanel</enum>
          </property>
          <property name="frameShadow">
           <enum>QFrame::Raised</enum>
          </property>
          <layout class="QGridLayout" name="gridLayout_11">
           <item row="0" column="0">
            <widget class="QLabel" name="m_selectedPointSetLabel">
             <property name="text">
              <string>Selected Streamline Pointset</string>
             </property>
            </widget>
           </item>
           <item row="2" column="1">
            <spacer name="horizontalSpacer_14">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="4" column="0" colspan="2">
            <widget class="QGroupBox" name="groupBox">
             <property name="title">
              <string>Streamline Points</string>
             </property>
             <layout class="QGridLayout" name="gridLayout_10">
              <item row="0" column="0">
               <widget class="QmitkPointListWidget" name="m_poinSetListWidget" native="true"/>
              </item>
              <item row="1" column="0">
               <spacer name="verticalSpacer_7">
                <property name="orientation">
                 <enum>Qt::Vertical</enum>
                </property>
                <property name="sizeHint" stdset="0">
                 <size>
                  <width>20</width>
                  <height>40</height>
                 </size>
                </property>
               </spacer>
              </item>
             </layout>
            </widget>
           </item>
           <item row="1" column="1">
            <spacer name="horizontalSpacer_13">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="0" column="1">
            <spacer name="horizontalSpacer_12">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="2" column="0">
            <widget class="QPushButton" name="m_addPointSetPushButton">
             <property name="text">
              <string>Add new Streamline Pointset</string>
             </property>
            </widget>
           </item>
           <item row="1" column="0">
            <widget class="QmitkSingleNodeSelectionWidget" name="m_selectedPointSetWidget" native="true">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
               <horstretch>0</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
             <property name="minimumSize">
              <size>
               <width>0</width>
               <height>40</height>
              </size>
             </property>
            </widget>
           </item>
           <item row="6" column="0">
            <spacer name="verticalSpacer_3">
             <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>20</width>
               <height>40</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="7" column="0">
            <widget class="QPushButton" name="m_StreamlineCreation">
             <property name="text">
              <string>Create Streamline</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="page_2">
       <property name="enabled">
        <bool>true</bool>
       </property>
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>414</width>
-        <height>478</height>
+        <height>450</height>
        </rect>
       </property>
       <property name="accessibleName">
        <string/>
       </property>
       <attribute name="label">
        <string>Fiber Labelling</string>
       </attribute>
       <attribute name="toolTip">
        <string>Dissect/Eraze Fibers by Erasion and Highlighting</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_13">
        <item row="4" column="0">
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
           </size>
          </property>
         </spacer>
        </item>
        <item row="1" column="0">
         <widget class="QFrame" name="m_LabelFrame">
          <property name="enabled">
           <bool>true</bool>
          </property>
          <property name="cursor">
           <cursorShape>ArrowCursor</cursorShape>
          </property>
          <property name="frameShape">
           <enum>QFrame::NoFrame</enum>
          </property>
          <property name="frameShadow">
           <enum>QFrame::Raised</enum>
          </property>
          <layout class="QGridLayout" name="gridLayout_4">
           <item row="0" column="0">
            <widget class="QLabel" name="label">
             <property name="text">
              <string>Label individual Streamlines</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
        <item row="2" column="0">
         <widget class="QLabel" name="label_3">
          <property name="text">
           <string>Streamlines to be labeled</string>
          </property>
         </widget>
        </item>
        <item row="3" column="0">
         <widget class="QFrame" name="m_ExtractionToolsFrame">
          <property name="frameShape">
           <enum>QFrame::StyledPanel</enum>
          </property>
          <property name="frameShadow">
           <enum>QFrame::Raised</enum>
          </property>
          <layout class="QGridLayout" name="gridLayout_2">
           <item row="5" column="2">
            <widget class="QLabel" name="label_4">
             <property name="text">
              <string>Label Streamlines</string>
             </property>
            </widget>
           </item>
           <item row="5" column="3">
            <widget class="QPushButton" name="m_ErazorButton">
             <property name="maximumSize">
              <size>
               <width>30</width>
               <height>30</height>
              </size>
             </property>
             <property name="text">
              <string/>
             </property>
             <property name="icon">
              <iconset>
               <normaloff>:/org.mitk.gui.qt.diffusionimaging.fiberprocessing/resources/eraze.png</normaloff>:/org.mitk.gui.qt.diffusionimaging.fiberprocessing/resources/eraze.png</iconset>
             </property>
             <property name="iconSize">
              <size>
               <width>32</width>
               <height>32</height>
              </size>
             </property>
             <property name="flat">
              <bool>true</bool>
             </property>
            </widget>
           </item>
           <item row="6" column="2">
            <widget class="QLabel" name="label_6">
             <property name="text">
              <string>Reject: Rightclick + shift</string>
             </property>
            </widget>
           </item>
           <item row="2" column="7" colspan="3">
            <spacer name="horizontalSpacer_2">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="2" column="2" colspan="2">
            <widget class="QLabel" name="label_7">
             <property name="text">
              <string>Random Streamlines</string>
             </property>
            </widget>
           </item>
           <item row="7" column="3" colspan="5">
            <spacer name="horizontalSpacer_8">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="5" column="4" colspan="5">
            <spacer name="horizontalSpacer">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="6" column="3" colspan="6">
            <spacer name="horizontalSpacer_3">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="2" column="6">
            <widget class="QPushButton" name="m_AddRandomFibers">
             <property name="text">
              <string>Add</string>
             </property>
            </widget>
           </item>
           <item row="7" column="2">
            <widget class="QLabel" name="label_8">
             <property name="text">
              <string>Accept: Rightclick + alt</string>
             </property>
            </widget>
           </item>
           <item row="8" column="2">
            <spacer name="verticalSpacer_2">
             <property name="orientation">
              <enum>Qt::Vertical</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>20</width>
               <height>40</height>
              </size>
             </property>
            </spacer>
           </item>
           <item row="2" column="4">
            <widget class="QSpinBox" name="m_NumRandomFibers">
             <property name="minimum">
              <number>1</number>
             </property>
             <property name="maximum">
              <number>2000</number>
             </property>
             <property name="value">
              <number>10</number>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="page_4">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>399</width>
-        <height>492</height>
+        <height>464</height>
        </rect>
       </property>
       <attribute name="label">
        <string>Active Learning</string>
       </attribute>
       <widget class="QFrame" name="frame_2">
        <property name="geometry">
         <rect>
          <x>9</x>
          <y>9</y>
          <width>341</width>
          <height>391</height>
         </rect>
        </property>
        <property name="frameShape">
         <enum>QFrame::StyledPanel</enum>
        </property>
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
        </property>
        <layout class="QGridLayout" name="gridLayout_6">
         <item row="2" column="3">
          <spacer name="horizontalSpacer_7">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>40</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
         <item row="0" column="3">
          <spacer name="horizontalSpacer_4">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>84</width>
             <height>22</height>
            </size>
           </property>
          </spacer>
         </item>
         <item row="4" column="1">
-         <widget class="QPushButton" name="pushButton">
+         <widget class="QPushButton" name="m_predlabeling">
           <property name="text">
            <string>Pred_Label</string>
           </property>
          </widget>
         </item>
         <item row="3" column="0">
          <widget class="QLabel" name="label_5">
           <property name="text">
            <string>To be labeled</string>
           </property>
          </widget>
         </item>
         <item row="1" column="3">
          <spacer name="horizontalSpacer_5">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>40</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
         <item row="1" column="0" colspan="3">
          <widget class="QPushButton" name="m_CreatePrediction">
           <property name="text">
            <string>Create Prediction</string>
           </property>
          </widget>
         </item>
         <item row="2" column="0" colspan="3">
          <widget class="QPushButton" name="m_CreateUncertantyMap">
           <property name="text">
            <string>Create Uncertanty Map</string>
           </property>
          </widget>
         </item>
         <item row="4" column="0">
          <widget class="QPushButton" name="m_newlabeling">
           <property name="text">
            <string>Uncertainty_Label</string>
           </property>
           <property name="icon">
            <iconset theme="eraze.png">
             <normaloff>.</normaloff>.</iconset>
           </property>
          </widget>
         </item>
         <item row="3" column="3">
          <spacer name="horizontalSpacer_6">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>40</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
         <item row="3" column="1">
          <widget class="QSpinBox" name="m_Numtolabel">
           <property name="minimum">
            <number>5</number>
           </property>
           <property name="maximum">
            <number>500</number>
           </property>
           <property name="value">
            <number>10</number>
           </property>
          </widget>
         </item>
         <item row="0" column="0" colspan="3">
          <widget class="QPushButton" name="m_TrainClassifier">
           <property name="text">
            <string>Train Classifier</string>
           </property>
          </widget>
         </item>
         <item row="3" column="2">
          <widget class="QPushButton" name="m_AddUncertainFibers">
           <property name="text">
            <string>Add </string>
           </property>
          </widget>
         </item>
         <item row="6" column="2">
          <spacer name="verticalSpacer_6">
           <property name="orientation">
            <enum>Qt::Vertical</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
             <width>20</width>
             <height>40</height>
            </size>
           </property>
          </spacer>
         </item>
        </layout>
       </widget>
      </widget>
     </widget>
    </item>
    <item row="2" column="0" rowspan="2">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
      <property name="sizeType">
       <enum>QSizePolicy::Fixed</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
        <height>40</height>
       </size>
      </property>
     </spacer>
    </item>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="m_InputData">
+     <property name="title">
+      <string>Please Select Input Data</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QLabel" name="label_2">
+        <property name="toolTip">
+         <string>Input DTI</string>
+        </property>
+        <property name="text">
+         <string>Fiber Bundle:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="m_FibLabel">
+        <property name="text">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;mandatory&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QmitkSingleNodeSelectionWidget" name="m_trainbundleWidget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>40</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
   </layout>
  </widget>
  <customwidgets>
   <customwidget>
    <class>QmitkSingleNodeSelectionWidget</class>
    <extends>QWidget</extends>
    <header location="global">QmitkSingleNodeSelectionWidget.h</header>
   </customwidget>
   <customwidget>
    <class>QmitkPointListWidget</class>
    <extends>QWidget</extends>
    <header location="global">QmitkPointListWidget.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
  <connections/>
 </ui>