Example #1
0
        public static void hardCodedIGPlot()
        {
            string dicomDir  = @"H:\EXPERIMENT3_AVATAR_ML\Rest voxels Analysis Via IG\Keren\MM\";
            string firstFile = @"001_000001_000001.dcm";
            bool   thresholdOrVoxelAmount = false;

            double[][] externalRankedAttributes = new double[1024][];
            string     text = File.ReadAllText(dicomDir + "rankedAttributes.csv");

            string[] farr = text.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            int      v    = 0;

            foreach (string line in farr)
            {
                string[] spl = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                externalRankedAttributes[v]    = new double[2];
                externalRankedAttributes[v][0] = Convert.ToDouble(spl[1]);
                externalRankedAttributes[v][1] = Convert.ToDouble(spl[0]);
                v++;
            }

            Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile,
                                                          externalRankedAttributes,
                                                          Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                          Convert.ToInt32(1024),
                                                          thresholdOrVoxelAmount,
                                                          dicomDir + "brain.png");

            GuiPreferences.Instance.setLog("Automatically Saved brain.png image to final dir");
            plotForm.StartPosition = FormStartPosition.CenterParent;
            plotForm.ShowDialog();
            plotForm.Close();
        }
Example #2
0
        //plot using c# dicom visual plotter
        public static void plotBrainDicomViewer()
        {
            if (Preferences.Instance.ProblemOriginal != null && Preferences.Instance.ProblemOriginal.samples != null)
            {
                if (Preferences.Instance.attsel == null)
                {
                    GuiPreferences.Instance.setLog("there are no ranked IG attributes or selected attr, continuing but please fix this possible bug.");
                }

                //todo: this is a hack of displaying the first dicom available in the master directory. this should be generalized later on
                string dicomDir = GuiPreferences.Instance.WorkDirectory;
                dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
                string[] files     = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
                string   firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);

                bool thresholdOrVoxelAmount;
                if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
                {
                    thresholdOrVoxelAmount = true;
                }
                else
                {
                    thresholdOrVoxelAmount = false;
                }
                Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile, Preferences.Instance.attsel.rankedAttributes(), Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                              Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount), thresholdOrVoxelAmount);
                plotForm.StartPosition = FormStartPosition.CenterParent;
                plotForm.ShowDialog();
                plotForm.Close();
            }
            else
            {
                GuiPreferences.Instance.setLog("Plot Failed: no problem");
            }
        }
Example #3
0
        public static void WekaPlotPipelineForMultiRuns(List <string> directoryList)
        {
            //display top IG on dicom view
            if (Preferences.Instance.attsel == null)
            {
                GuiPreferences.Instance.setLog("there are no ranked IG attributes or selected attr, continuing but please fix this possible bug.");
            }

            string dicomDir = directoryList[0];

            if (dicomDir.Contains("rtp") == true)
            {
                dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
            }
            else
            {
                dicomDir += @"master\";
            }
            string[] files = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
            if (files.Length > 0)
            {
                string firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);


                bool thresholdOrVoxelAmount;
                if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
                {
                    thresholdOrVoxelAmount = true;
                }
                else
                {
                    thresholdOrVoxelAmount = false;
                }

                Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile,
                                                              Preferences.Instance.attsel.rankedAttributes(),
                                                              Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                              Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount),
                                                              thresholdOrVoxelAmount,
                                                              GuiPreferences.Instance.WorkDirectory + "brain.png");

                GuiPreferences.Instance.setLog("Automatically Saved brain.png image to final dir");
                plotForm.StartPosition = FormStartPosition.CenterParent;
                plotForm.ShowDialog();
                plotForm.Close();
            }
            else
            {
                GuiPreferences.Instance.setLog("Dicom Plot + IG overlay cant be displayed, .dcm file doesnt exist");
            }
        }
Example #4
0
        private static void SVMWrapperTrainingPipeline()
        {
            Preferences.Instance.modelLoaded = false;

            TrainingTesting_SharedVariables.training = new LibSVM_TrainTest();
            TrainingTesting_SharedVariables.training.setSvmType();

            GuiPreferences.Instance.setLog("NOTE: we shouldnt balance labels count. it should be balanced in the protocol");
            GuiPreferences.Instance.setLog("Default Training MultiClass on all data");

            TrainingTesting_SharedVariables._trainingProblem = TrainingTesting_SharedVariables._trialProblem;

            // show some statistics regarding the labels
            Training_MultiRunProcessing.labelStats(TrainingTesting_SharedVariables._trainingProblem);

            //train
            GuiPreferences.Instance.setLog("Training on Data");
            TrainingTesting_SharedVariables.training.TrainOnAllData(TrainingTesting_SharedVariables._trainingProblem);
            GuiPreferences.Instance.setLog("Finished Training.");


            //test on self should get 100%
            TrainingTesting_SharedVariables.training.TestOnAllData(TrainingTesting_SharedVariables._trainingProblem);
            GuiPreferences.Instance.setLog("SVM Model Tested on Training Data, check that you get 100%.");

            TrainingTesting_SharedVariables.training.saveModel(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS_filteredIG.libsvm.model");
            GuiPreferences.Instance.setLog("SVM Model saved.");

            TrainingTesting_SharedVariables.training.loadModel(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS_filteredIG.libsvm.model");
            GuiPreferences.Instance.setLog("SVM Model loaded.");

            //test loaded model - DOES IT REALY USE THE LOADED MODEL? THIS IS UNVERIFIED, DONT RELY UNTIL TESTED.
            TrainingTesting_SharedVariables.training.TestOnAllData(TrainingTesting_SharedVariables._trainingProblem);
            GuiPreferences.Instance.setLog("SVM Model Tested on data (sanity check for loaded model).");

            //display top IG on dicom view
            if (Preferences.Instance.attsel == null)
            {
                GuiPreferences.Instance.setLog("there are no ranked IG attributes or selected attr, continuing but please fix this possible bug.");
            }
            GuiPreferences.Instance.setLog("Dicom Viewer Displaying..");
            string dicomDir = GuiPreferences.Instance.WorkDirectory;

            dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
            string[] files     = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
            string   firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);


            bool thresholdOrVoxelAmount;

            if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
            {
                thresholdOrVoxelAmount = true;
            }
            else
            {
                thresholdOrVoxelAmount = false;
            }
            Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile,
                                                          Preferences.Instance.attsel.rankedAttributes(),
                                                          Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                          Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount),
                                                          thresholdOrVoxelAmount);// _trainTopIGFeatures);

            plotForm.StartPosition = FormStartPosition.CenterParent;
            plotForm.ShowDialog();
            plotForm.Close();
            GuiPreferences.Instance.setLog("Dicom Viewer Closed.");
        }
Example #5
0
        private static void WekaTrainingPipeline(Instances data)
        {
            //grab SMO, config
            TrainingTesting_SharedVariables.smo = new SMO();
            TrainingTesting_SharedVariables.smo.setOptions(weka.core.Utils.splitOptions(" -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V -1 -W 1 -K \"weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0\""));
            GuiPreferences.Instance.setLog("SMO Assigned.");

            //train
            TrainingTesting_SharedVariables.smo.buildClassifier(data);
            GuiPreferences.Instance.setLog("Training on Data");

            //test on self should get 100%
            weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(data);
            eval.evaluateModel(TrainingTesting_SharedVariables.smo, data);
            Training_Output.printWekaResults(eval.toSummaryString("\nResults\n======\n", false));
            GuiPreferences.Instance.setLog("SMO Model Tested on Training Data, check that you get 100%.");

            //save model serialize model
            weka.core.SerializationHelper.write(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS_filteredIG.libsvm.arff.model", TrainingTesting_SharedVariables.smo);
            GuiPreferences.Instance.setLog("SMO Model Serialized and saved.");

            //load model deserialize model
            TrainingTesting_SharedVariables.smo = (weka.classifiers.functions.SMO)weka.core.SerializationHelper.read(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS_filteredIG.libsvm.arff.model");
            GuiPreferences.Instance.setLog("SMO Model DeSerialized and loaded.");

            //test loaded model
            eval = new weka.classifiers.Evaluation(data);
            eval.evaluateModel(TrainingTesting_SharedVariables.smo, data);
            Training_Output.printWekaResults(eval.toSummaryString("\nResults\n======\n", false));
            GuiPreferences.Instance.setLog("SMO Model Tested on data (sanity check for loaded model).");

            //display top IG on dicom view
            if (Preferences.Instance.attsel == null)
            {
                GuiPreferences.Instance.setLog("there are no ranked IG attributes or selected attr, continuing but please fix this possible bug.");
            }

            GuiPreferences.Instance.setLog("Dicom Viewer Displaying..");
            string dicomDir = GuiPreferences.Instance.WorkDirectory;

            dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
            string[] files     = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
            string   firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);


            bool thresholdOrVoxelAmount;

            if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
            {
                thresholdOrVoxelAmount = true;
            }
            else
            {
                thresholdOrVoxelAmount = false;
            }
            Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile,
                                                          Preferences.Instance.attsel.rankedAttributes(),
                                                          Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                          Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount),
                                                          thresholdOrVoxelAmount);// _trainTopIGFeatures);

            plotForm.StartPosition = FormStartPosition.CenterParent;
            plotForm.ShowDialog();
            plotForm.Close();
            GuiPreferences.Instance.setLog("Dicom Viewer Closed.");
        }
Example #6
0
        /// <summary>
        /// tests if iron python works.
        /// </summary>
        public void TestIronPython()
        {
            /*IronPythonCLS ir = new IronPythonCLS();
             * var res = ir.ExecuteBusinessRules();
             * GuiPreferences.Instance.setLog(res.ToString());*/
            //ExecuteSelectKthVectorScript();



            string CsharpFileName  = @"TrainSet";
            string CsharpDirectory = @"H:\My_Dropbox\VERE\MRI_data\Tirosh\20120508.Rapid+NullClass.day2\4\rtp\";

            /*ExecuteSelectKthVectorScript(CsharpFileName, CsharpDirectory);
             * svm_scale_java svmscale = new svm_scale_java();
             *
             * string commandLine = "-l 0 " +
             *                   "-s " + CsharpDirectory + "TrainSet_3th_vectors_scale_paramcs.libsvm " +
             *                   "-o " + CsharpDirectory + "TrainSet_3th_vectors_scaledcs.libsvm " +
             *                           CsharpDirectory + "TrainSet_3th_vectors.libsvm";
             *
             * string[] commandArray = commandLine.Split(' ');
             * svmscale.run(commandArray);
             *
             * commandLine = "-l 0 " +
             *                   "-s " + CsharpDirectory + "TrainSet_4th_vectors_scale_paramcs.libsvm " +
             *                   "-o " + CsharpDirectory + "TrainSet_4th_vectors_scaledcs.libsvm " +
             *                           CsharpDirectory + "TrainSet_4th_vectors.libsvm";
             * commandArray = commandLine.Split(' ');
             * svmscale.run(commandArray);*/

            ////////////////////////WekaCommon.Main(null);
            ////////////////////////var source = new ConverterUtils.DataSource(CsharpDirectory + "TrainSet_3th_vectors_scaledCS.libsvm");

            //convert tr4 and tr3 to arff

            /*if (WekaCommonFileOperation.ConvertLIBSVM2ARFF(CsharpDirectory + "TrainSet_3th_vectors_scaledCS.libsvm"))
             *  GuiPreferences.Instance.setLog("Converted to ARFF: TrainSet_3th_vectors_scaledCS.libsvm");
             * if (WekaCommonFileOperation.ConvertLIBSVM2ARFF(CsharpDirectory + "TrainSet_4th_vectors_scaledCS.libsvm"))
             *  GuiPreferences.Instance.setLog("Converted to ARFF: TrainSet_4th_vectors_scaledCS.libsvm");*/

            //infogain on tr4 and get 1000 top features.

            ConverterUtils.DataSource source = new ConverterUtils.DataSource(CsharpDirectory + "TrainSet_4th_vectors_scaledCS.libsvm.arff");
            Instances data = source.getDataSet();

            if (data.classIndex() == -1)
            {
                data.setClassIndex(data.numAttributes() - 1);
            }

            if (!data.classAttribute().isNominal())
            {
                var filter = new weka.filters.unsupervised.attribute.NumericToNominal();

                filter.setOptions(weka.core.Utils.splitOptions("-R last"));
                //filter.setAttributeIndices("last");
                filter.setInputFormat(data);
                data = Filter.useFilter(data, filter);
            }

            int[] topIGFeatures = Preferences.Instance.attsel.selectedAttributes();

            //load tr3
            source = new ConverterUtils.DataSource(CsharpDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.libsvm.arff");
            data   = source.getDataSet();

            int[] invertedTopIGFeatures = new int[data.numAttributes() - topIGFeatures.Length];

            //alternative use of the filter,
            var dict     = topIGFeatures.ToDictionary(key => key, value => value);
            int position = 0;

            for (int feat = 0; feat < data.numAttributes(); feat++)
            {
                if (!dict.ContainsKey(feat))
                {
                    invertedTopIGFeatures[position] = feat;
                    position++;
                }
            }

            //filter top IG
            //data = WekaCommonMethods.useRemoveFilter(data, topIGFeatures, true);
            data = WekaTrainingMethods.useRemoveFilter(data, invertedTopIGFeatures, false);
            WekaCommonFileOperation.SaveArff(data, CsharpDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS_filteredIG2.libsvm1.arff");

            //train

            /*weka.classifiers.functions.SMO smo = new SMO();
             * smo.setOptions(weka.core.Utils.splitOptions(" -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V -1 -W 1 -K \"weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0\""));
             * if (data.classIndex() == -1)
             *  data.setClassIndex(data.numAttributes() - 1);
             *
             *
             *
             * smo.buildClassifier(data);
             *
             *
             * //test on self should get 100%
             * weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(data);
             * eval.evaluateModel(smo, data);
             * GuiPreferences.Instance.setLog(eval.toSummaryString("\nResults\n======\n", false));
             *
             * //save model serialize model
             * weka.core.SerializationHelper.write(CsharpDirectory + "TrainSet_3th_vectors_scaledCS_filteredIG.libsvm.arff.model", smo);
             *
             * //load model deserialize model
             * smo = (weka.classifiers.functions.SMO)weka.core.SerializationHelper.read(CsharpDirectory + "TrainSet_3th_vectors_scaledCS_filteredIG.libsvm.arff.model");
             *
             * //test loaded model
             * eval = new weka.classifiers.Evaluation(data);
             * eval.evaluateModel(smo, data);
             * GuiPreferences.Instance.setLog(eval.toSummaryString("\nResults\n======\n", false));*/

            //display top IG.
            //PublicMethods.plotBrainDicomViewer();

            if (Preferences.Instance.attsel == null)
            {
                GuiPreferences.Instance.setLog("there are no ranked IG attributes or selected attr, continuing but please fix this possible bug.");
            }

            string dicomDir = CsharpDirectory;

            dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
            string[] files     = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
            string   firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);

            bool thresholdOrVoxelAmount;

            if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
            {
                thresholdOrVoxelAmount = true;
            }
            else
            {
                thresholdOrVoxelAmount = false;
            }

            Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile, Preferences.Instance.attsel.rankedAttributes(),
                                                          Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                          Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount),
                                                          thresholdOrVoxelAmount, GuiPreferences.Instance.WorkDirectory + "brain");

            plotForm.StartPosition = FormStartPosition.CenterParent;
            plotForm.ShowDialog();
            plotForm.Close();
        }
Example #7
0
        /// <summary>
        /// WAS A BIG BUTTON: quickloads a range of commands to test the weka pipeline
        /// loads protocol and data, processes for SMO, trick, IG, etc.. has java/python intergration
        /// 1. Trick: QuickLoad, Export to Libsvm, separate to TRs files in libsvm,  convert TR-3 and TR-4 to arff, use TR4 + IG to get 1000 features, filter TR-3 based on features from TR-4, save result to libsvm format, train using LibSvm (grid?), save model, test on training data - must get 100%, display 1000 on viewport
        /// 2. No Trick: QuickLoad, Export to Libsvm, separate to TRs files in libsvm,  convert TR-3 to arff, filter TR-3 based on 1000 top IG, save result to libsvm format, train using LibSvm (grid?), save model, test on training data - must get 100%, display 1000 on viewport
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public bool QuickProcessWekaPipeline(int from)
        {
            // --- from this point the loading data phaze begins --- //

            // tirosh null movement

            /*
             * GuiPreferences.Instance.WorkDirectory = @"H:\My_Dropbox\VERE\MRI_data\Tirosh\20120508.Rapid+NullClass.day2\4\rtp\";
             * GuiPreferences.Instance.FileName = "tirosh-";
             * GuiPreferences.Instance.FileType = OriBrainLearnerCore.dataType.rawValue;
             * GuiPreferences.Instance.ProtocolFile = @"H:\My_Dropbox\VERE\MRI_data\Tirosh\20120705.NullClass1_zbaseline.prt";
             */

            // magali classification

            /*GuiPreferences.Instance.WorkDirectory = @"H:\My_Dropbox\VERE\Experiment1\Kozin_Magali\20121231.movement.3.imagery.1\18-classification.movement\rtp\";
             * GuiPreferences.Instance.FileName = "tirosh-";
             * GuiPreferences.Instance.FileType = OriBrainLearnerCore.dataType.rawValue;
             * GuiPreferences.Instance.ProtocolFile = @"H:\My_Dropbox\VERE\MRI_data\Tirosh\20113110.short.5th.exp.hands.legs.zscore.thought_LRF.prt";
             * */

            /// moshe sherf classification, 4 aggregated to test on 1.
            //GuiPreferences.Instance.WorkDirectory = @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\1234-5\";
            //GuiPreferences.Instance.ProtocolFile = @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\1234-5\20113110.short.5th.exp.hands.legs.zscore.thought_LRF.prt";

            string[] directoryList =
            {
                @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\05_classification\rtp\",
                @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\07_classification\rtp\",
                @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\09_classification\rtp\",
                @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\11_classification\rtp\"
            };
            GuiPreferences.Instance.ProtocolFile = @"H:\My_Dropbox\VERE\MRI_data\Tirosh\20113110.short.5th.exp.hands.legs.zscore.thought_LRF.prt";
            //GuiPreferences.Instance.WorkDirectory = @"H:\My_Dropbox\VERE\Experiment1\Sherf_Moshe\20121010.movement.1\15_classification\rtp\";

            GuiPreferences.Instance.FileName = "tirosh-";
            GuiPreferences.Instance.FileType = OriBrainLearnerCore.DataType.rawValue;



            //read prot file
            Preferences.Instance.prot = new ProtocolManager();

            double[][] topIGFeatures = {};
            foreach (string directory in directoryList)
            {
                GuiPreferences.Instance.WorkDirectory = directory;
                //delete all files that are going to be created, in order to prevent anomaly vectors.
                string[] deleteFiles =
                {
                    "TrainSet.libsvm",
                    "TrainSet_3th_vectors.libsvm",
                    "TrainSet_3th_vectors_scale_paramCS.libsvm",
                    "TrainSet_3th_vectors_scaledCS.libsvm",
                    "TrainSet_3th_vectors_scaledCS.libsvm.arff",
                    "TrainSet_3th_vectors_scaledCS_filteredIG.arff",
                    "TrainSet_3th_vectors_scaledCS_filteredIG.model",
                    "TrainSet_3th_vectors_scaledCS_filteredIG_indices.xml",
                    "TrainSet_4th_vectors.libsvm",
                    "TrainSet_4th_vectors_scale_paramCS.libsvm",
                    "TrainSet_4th_vectors_scaledCS.libsvm",
                    "TrainSet_4th_vectors_scaledCS.libsvm.arff"
                };

                foreach (string fileName in deleteFiles)
                {
                    FileDirectoryOperations.DeleteFile(GuiPreferences.Instance.WorkDirectory + fileName);
                }

                //get all files in the path with this extention
                GuiManager.getFilePaths("*.vdat");

                //update certain info
                GuiManager.updateFilePaths();

                //assigned after we know what to assign from the protocol
                //PublicMethods.setClassesLabels();
                GuiPreferences.Instance.CmbClass1Selected = 1; //left
                GuiPreferences.Instance.CmbClass2Selected = 2; //right

                //NEED TO ADD A VARIABLE FOR EVERY OPTION IN THE GUI. RAW VALUES. UNPROCESSED. MULTI CLASS. CROSS VALD, GRID, FOLDS, ETC...
                //and for every button a function!


                //for the training set
                GuiPreferences.Instance.FromTR = from; // 264;

                //for the test set
                //GuiPreferences.Instance.FromTR = 46;

                //GuiPreferences.Instance.ToTR = 100;// 264;


                //finally load
                TrainingTesting_SharedVariables.binary.loadRawData();

                topIGFeatures = new double[][] {};
                Instances data;
                //files are loaded,thresholded,vectorized,normalized. false means that IG and training are not done here.
                if (!Training_MultiRunProcessing.ProcessSingleRunOffline(ref topIGFeatures, Preferences.Instance.ProblemOriginal))
                {
                    GuiPreferences.Instance.setLog("Samples are empty");
                }
                //++grab findl vectors and concat them
                // grab min max values for saving the median.
            }

            //create a dir that holds the final DS in C:\
            GuiPreferences.Instance.WorkDirectory = @"C:\FinalData_" + DateTime.Now.ToLongTimeString().Replace(':', '-');
            GuiPreferences.Instance.setLog(@"Creating Final Directory in: " + GuiPreferences.Instance.WorkDirectory);
            FileDirectoryOperations.CreateDirectory(GuiPreferences.Instance.WorkDirectory);
            GuiPreferences.Instance.WorkDirectory += @"\";



            //concatenate libsvm normalized and vectorized files
            FileStream fileStream;
            FileStream outputFileStream = new FileStream(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.libsvm", FileMode.CreateNew, FileAccess.Write);

            foreach (string directory in directoryList)
            {
                fileStream = new FileStream(directory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.libsvm", FileMode.Open, FileAccess.Read);
                Training_MultiRunProcessing.CopyStream(outputFileStream, fileStream);
                fileStream.Close();
            }
            outputFileStream.Close();

            //save concatenated tr3 to a file
            if (WekaCommonFileOperation.ConvertLIBSVM2ARFF(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.libsvm", 204800))
            {
                GuiPreferences.Instance.setLog("Converted to ARFF: TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.arff");
            }



            double[][] feature_max = new double[directoryList.Length][];
            double[][] feature_min = new double[directoryList.Length][];
            int        i           = 0;
            int        max_index   = -1;

            foreach (string directory in directoryList)
            {
                TrainingTesting_SharedVariables._svmscaleTraining.getConfigFileMinMaxValues(
                    directory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scale_paramCS.libsvm",
                    ref feature_max[i], ref feature_min[i], ref max_index);
                i++;
            }


            //calculate Mean + save new min/max param to C:\
            double[] finalFeature_max = new double[feature_max[0].Length];
            double[] finalFeature_min = new double[feature_max[0].Length];

            //create a list with enough values for the runs, in order to calculate the median
            var values_max = new List <double>(feature_max.Length);
            var values_min = new List <double>(feature_max.Length);

            for (int k = 0; k < feature_max.Length; k++)
            {
                //init zeros
                values_max.Add(0);
                values_min.Add(0);
            }

            for (int j = 0; j < feature_max[0].Length; j++)
            {
                for (int k = 0; k < feature_max.Length; k++)
                {
                    values_max[k] = feature_max[k][j];
                    values_min[k] = feature_min[k][j];
                }
                //finalFeature_max[j] = GetMedian(values_max);
                //finalFeature_min[j] = GetMedian(values_min);
                finalFeature_max[j] = values_max.Max();
                finalFeature_min[j] = values_min.Min();
            }

            TrainingTesting_SharedVariables._svmscaleTraining.saveConfigMinMax_CSharp(GuiPreferences.Instance.WorkDirectory + "TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scale_paramCS.libsvm", finalFeature_min, finalFeature_max, 204801, 0.0f, 1.0f);

            //todo check max index in file,
            //todo check if needs to remove 204801 from it so it doesnt effect the class.

            double[][] FinaltopIGFeatures = { };
            Instances  finalData          = Training_MultiRunProcessing.ConcatenationPipeLine("TrainSet_" + GuiPreferences.Instance.NudClassifyUsingTR.ToString() + "th_vectors_scaledCS.libsvm.arff", "TrainSet_4th_vectors_scaledCS.libsvm.arff");

            WekaTrainingMethods.TrainSMO(finalData);
            //save median param file

            //display top IG on dicom view
            string dicomDir = directoryList[0];

            dicomDir = dicomDir.Substring(0, dicomDir.Length - 4) + @"master\";
            string[] files     = System.IO.Directory.GetFiles(dicomDir, "*.dcm");
            string   firstFile = files[0].Substring(files[0].LastIndexOf(@"\") + 1);


            bool thresholdOrVoxelAmount;

            if (GuiPreferences.Instance.IgSelectionType == IGType.Threshold)
            {
                thresholdOrVoxelAmount = true;
            }
            else
            {
                thresholdOrVoxelAmount = false;
            }

            //NOTE final top may be empty, please remember that the IG are not at preferences.instance.attsel.selectedattributes or rankedattributes.
            Form plotForm = new DicomImageViewer.MainForm(dicomDir + firstFile, firstFile, FinaltopIGFeatures,
                                                          Convert.ToDouble(GuiPreferences.Instance.NudIGThreshold),
                                                          Convert.ToInt32(GuiPreferences.Instance.NudIGVoxelAmount),
                                                          thresholdOrVoxelAmount,
                                                          GuiPreferences.Instance.WorkDirectory + "brain");

            plotForm.StartPosition = FormStartPosition.CenterParent;
            plotForm.ShowDialog();
            plotForm.Close();

            return(true);
        }