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(); }
//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"); } }
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"); } }
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."); }
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."); }
/// <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(); }
/// <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); }