// Generate the feature vector of the given image. public double[] GenerateFeature(short[,] pixelData) { // Initialize the parameters of feature (data). MWStructArray fea_first = new MWStructArray(1, 1, new string[] { "pixels", "maxsize" }); fea_first.SetField("pixels", new MWNumericArray(pixelData)); fea_first.SetField("maxsize", 75); // Initialize the parameters of dictionary. MWStructArray dic_first = new MWStructArray(1, 1, new string[] { "dicsize", "patchsize", "samplenum", "dic" }); dic_first.SetField("dicsize", 200); dic_first.SetField("patchsize", 16); dic_first.SetField("samplenum", 100); MWArray array = new MWNumericArray(this.dict_dimension[0], this.dict_dimension[1], MatrixUtil.FlattenMatrix(this.dic, this.dict_dimension[0], this.dict_dimension[1])); dic_first.SetField("dic", array); // Orthogonal matching pursuit encoder Stopwatch ompTimer = Stopwatch.StartNew(); MWArray rgbdfea = ompNormal.extract_feature_normal(fea_first, dic_first); ompTimer.Stop(); Array feature = rgbdfea.ToArray(); Console.WriteLine("Feature Extraction Time: {0} ms", ompTimer.ElapsedMilliseconds); double[] feature_vector = new double[feature.Length]; for (int i = 0; i < feature.Length; i++) feature_vector[i] = System.Convert.ToDouble(feature.GetValue(i, 0)); return feature_vector; }
// METHOD TO DO CONTROL ACTION BASED ON STATUS OUTPUT public static MWStructArray crop_env_controller(MWStructArray crops_db, string crop, double temp_in, double hum_in, double temp_out, double hum_out) { Console.WriteLine("\n======================= CROP CONTROLLER OUTPUT ======================="); CropAnalyzer crop_controller = new CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize required input: temp_c_in, rh_in, temp_c_out, rh_out MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; MWNumericArray temp_c_out = null; MWNumericArray rh_out = null; // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Create struct for output MWStructArray control_action = new MWStructArray(); try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = crop; temp_c_in = temp_in; // deg Celsius rh_in = hum_in; // % temp_c_out = temp_out; // deg Celsius rh_out = hum_out; // % control_action = (MWStructArray)crop_controller.env_controller(crops_db, crop_name_select, temp_c_in, rh_in, temp_c_out, rh_out); Console.WriteLine("CONTROL ACTION: \n" + control_action); //Console.WriteLine("Press any key to exit."); //Console.ReadKey(); return(control_action); } catch { throw; } }
static void Main(string[] args) { CropAnalyzer crop_analyzer = new CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize required input: temp_c_in, rh_in MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Load crop data String path = "C:\\Program Files\\NareTrends\\BandiCropAnalyzer\\application\\bandicrop_data.ini"; MWCharArray crop_inifile = path; MWStructArray crops = (MWStructArray)crop_analyzer.load_crop_data(crop_inifile); // Create struct for output MWStructArray result = new MWStructArray(); MWNumericArray result_code = null; try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = "STRAWBERRY"; temp_c_in = 3; // deg Celsius rh_in = 40; // % result = (MWStructArray)crop_analyzer.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list); result_code = (MWNumericArray)result.GetField("code"); Console.WriteLine("RESULT CODE: " + result_code); Console.Write("\nPress any key to exit."); Console.ReadKey(); } catch { throw; } }
// METHOD IMPLEMENTING THE ENVIRONMENT CHECK ROUTINES public static MWStructArray crop_env_checker(MWStructArray crops_db, double temp, double hum, string crop) { Console.WriteLine("\n======================= ENVIRONMENT ANALYSIS ======================="); CropAnalyzer crop_analyzer = new CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize required input: temp_c_in, rh_in MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Create struct for output MWStructArray result = new MWStructArray(); MWNumericArray result_code = null; try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = crop; temp_c_in = temp; // deg Celsius rh_in = hum; // % result = (MWStructArray)crop_analyzer.env_check(crops_db, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list); result_code = (MWNumericArray)result.GetField("code"); Console.WriteLine("RESULT CODE: " + result_code); //Console.WriteLine("Press any key to exit."); //Console.ReadKey(); return(result); } catch { throw; } }
// DO CONTROL ACTION BASED ON ENVIRONMENT CHECKING OUTPUT public MWStructArray crop_env_controller(MWStructArray crops_db, string crop, DongState sensors) { Console.WriteLine("\n======================= CROP CONTROLLER OUTPUT ======================="); BandiCropAnalyzer.CropAnalyzer crop_controller = new BandiCropAnalyzer.CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray rh_bed = "rh_bed", co2_supply = "co2_supply", rain = "rain"; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Create struct for output MWStructArray control_action = new MWStructArray(); try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = crop; MWNumericArray temp_c_in = sensors.temp_in; // deg Celsius MWNumericArray rh_in = sensors.hum_in; // % MWNumericArray temp_c_out = sensors.temp_out; // deg Celsius MWNumericArray rh_out = sensors.hum_out; // % MWNumericArray hum_bed = sensors.hum_bed; // % MWLogicalArray co2_state = sensors.co2_supply; // % MWLogicalArray rain_state = sensors.rain; // % return(control_action = (MWStructArray)crop_controller.env_controller(crops_db, crop_name_select, temp_c_in, rh_in, temp_c_out, rh_out, rh_bed, hum_bed, co2_supply, co2_state, rain, rain_state)); } catch { throw; } }
// Generate the feature vector of the given image. public double[] GenerateFeature(short[,] pixelData) { // Initialize the parameters of feature (data). MWStructArray fea_first = new MWStructArray(1, 1, new string[] { "pixels", "maxsize" }); fea_first.SetField("pixels", new MWNumericArray(pixelData)); fea_first.SetField("maxsize", 75); // Initialize the parameters of dictionary. MWStructArray dic_first = new MWStructArray(1, 1, new string[] { "dicsize", "patchsize", "samplenum", "dic" }); dic_first.SetField("dicsize", 200); dic_first.SetField("patchsize", 16); dic_first.SetField("samplenum", 100); MWArray array = new MWNumericArray(this.dict_dimension[0], this.dict_dimension[1], MatrixUtil.FlattenMatrix(this.dic, this.dict_dimension[0], this.dict_dimension[1])); dic_first.SetField("dic", array); // Orthogonal matching pursuit encoder Stopwatch ompTimer = Stopwatch.StartNew(); MWArray rgbdfea = ompNormal.extract_feature_normal(fea_first, dic_first); ompTimer.Stop(); Array feature = rgbdfea.ToArray(); Console.WriteLine("Feature Extraction Time: {0} ms", ompTimer.ElapsedMilliseconds); double[] feature_vector = new double[feature.Length]; for (int i = 0; i < feature.Length; i++) { feature_vector[i] = System.Convert.ToDouble(feature.GetValue(i, 0)); } return(feature_vector); }
private void ConstructMWParameter() { DataSet Ds = new DataSet(); Ds.ImportXml("Parameters"); List <string> ParameterList = new List <string>(); this.Parameters = Ds.Tables["Parameter"]; DataTable PhaseRetrievalSettings = PhaseRetrievalConfig.Tables["Settings"]; Dictionary <string, string> ParametersDict = new Dictionary <string, string>(); ParametersDict = Parameters.ToDictionary(); ParametersDict = ParametersDict.Concat(PhaseRetrievalSettings.ToDictionary()).ToDictionary(x => x.Key, x => x.Value); string[] ParametersKeyList = ParametersDict.Keys.ToArray <string>(); MWParameter = new MWStructArray(1, 1, ParametersKeyList); foreach (string Key in ParametersKeyList) { MWParameter.SetField(Key, ParametersDict[Key].ToString()); } }
public void start(List <ReconItem> _myReconItems, int N_tot) { // define own private dataFolder and list of data names that is not updated/affected from outside List <string> dataNames = new List <string>(); List <int> data_iAcq = new List <int>(); // copy recon parameters to structure MWNumericArray movingMAP = reconstructionParameters.movingMAP; MWNumericArray movingMAP_slabThickness = reconstructionParameters.movingMAP_slabThickness; MWNumericArray volume3D = reconstructionParameters.volume3D; string[] fieldNames2 = { "movingMAP", "movingMAP_slabThickness", "volume3D" }; MWStructArray rP = new MWStructArray(1, 1, fieldNames2); rP.SetField("movingMAP", movingMAP); rP.SetField("movingMAP_slabThickness", movingMAP_slabThickness); rP.SetField("volume3D", volume3D); // create own private recon list and setup total progress bar int N_curr = 0; for (int i = 0; i < _myReconItems.Count; i++) { if (_myReconItems[i].isChecked) { dataNames.Add(_myReconItems[i].fileName); data_iAcq.Add(_myReconItems[i].id); } } reconstructionParameters.reconProgressTot = new int[2] { 0, N_tot }; int N_recon = dataNames.Count; int i_acq; for (int i = 0; i < N_recon; i++) { // define data name i_acq = data_iAcq[i]; // run through all subfolders within the current study date for (int i_recon = 0; i_recon < studyParameters.myStudyDates_list[studyParameters.myStudyDates_listIndex].myAcqFiles_list[i_acq].myReconFolders_list.Count; i_recon++) { string reconFolderPath = studyParameters.myStudyDates_list[studyParameters.myStudyDates_listIndex].myAcqFiles_list[i_acq].myReconFolders_list[i_recon].folderPath; string reconFolderWithoutPath = reconFolderPath.Split('\\')[reconFolderPath.Split('\\').Length - 1]; // add all reconstruction folders that correspond to the pre-defined naming convention if (reconFolderWithoutPath.Length > 7 && dataNames[i].Length > 5) { if (String.Equals(reconFolderWithoutPath.Substring(0, 8), "R_" + dataNames[i].Substring(0, 6))) { // add recon folder to list string[] reconFiles = Directory.GetFiles(reconFolderPath, "*.mat").ToArray(); for (int i_file = 0; i_file < reconFiles.Length; i_file++) { // copy file parameters to structure MWArray dataFile = reconFiles[i_file];; MWArray reconExportFolder = reconFolderPath + "\\Export\\"; MWArray reconLogFolder = reconFolderPath + "\\LogFile\\"; string[] fieldNames = { "reconExportFolder", "reconLogFolder", "dataFile" }; MWStructArray fP = new MWStructArray(1, 1, fieldNames); fP.SetField("reconExportFolder", reconExportFolder); fP.SetField("reconLogFolder", reconLogFolder); fP.SetField("dataFile", dataFile); iExportClass obj = null; try { // Instantiate your component class. obj = new iExportClass(); obj.iExport(fP, rP); N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; } catch (Exception e) { N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; // Console.WriteLine("Status-Recon: 1.00"); if (!e.Message.Contains("ERROR:")) { Console.WriteLine("ERROR:" + e.Message + "\n"); } if (N_tot == N_curr) { // Console.WriteLine("Recon-finished: export finished with errors."); } } // open export folder if (i_file == reconFiles.Length - 1) { Process.Start("explorer.exe", @reconExportFolder.ToString()); } } } } } } try { Process.Start(@fileParameters.ImageJ); } catch { Console.WriteLine("ERROR: Cannot open ImageJ. File " + fileParameters.ImageJ + "does not exist. Adapt path in config file.\n"); } Console.WriteLine("Recon-finished: Export of image stacks is finished"); }
public void startMulti(string comment, ViewRSOM.MSOT.Hardware.ViewModels.Laser.ViewModelLaserInnolas multiLaser, Button cancelAcq_Button) { // Define file parameters // Some parameters are adjusted to the OPO. MWArray acqFolder = fileParameters.studyFolder + "\\" + System.DateTime.Now.Year.ToString("0000") + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") + "\\"; MWArray acqQuickScanFolder = acqFolder + "QuickScan\\"; MWArray acqLogFolder = acqFolder + "Log\\"; MWArray acqPreviewFolder = fileParameters.acqPreviewFolder; MWArray acqThumbnailFolder = acqFolder + "Thumbnail\\"; MWArray dataName; if (fileParameters.dataName != null) { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00") + "_" + fileParameters.dataName; } else { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00"); } // create recon folder if (!Directory.Exists(acqFolder.ToString())) { Directory.CreateDirectory(acqFolder.ToString()); } //else //{ // Console.Write("WARNING: acquisition folder exists already. Proceed with reconstruction. Previous reconstructions may be overwritten."); //} if (!Directory.Exists(acqQuickScanFolder.ToString())) { Directory.CreateDirectory(acqQuickScanFolder.ToString()); } if (!Directory.Exists(acqLogFolder.ToString())) { Directory.CreateDirectory(acqLogFolder.ToString()); } if (!Directory.Exists(acqPreviewFolder.ToString())) { Directory.CreateDirectory(acqPreviewFolder.ToString()); } if (!Directory.Exists(acqThumbnailFolder.ToString())) { Directory.CreateDirectory(acqThumbnailFolder.ToString()); } // copy file parameters to structure string[] fieldNames = { "acqFolder", "acqQuickScanFolder", "acqLogFolder", "acqPreviewFolder", "acqThumbnailFolder", "dataName" }; MWStructArray fP = new MWStructArray(1, 1, fieldNames); fP.SetField("acqFolder", acqFolder); fP.SetField("acqQuickScanFolder", acqQuickScanFolder); fP.SetField("acqLogFolder", acqLogFolder); fP.SetField("acqPreviewFolder", acqPreviewFolder); fP.SetField("acqThumbnailFolder", acqThumbnailFolder); fP.SetField("dataName", dataName); // Define acquisition parameters MWNumericArray y_0 = acquisitionParameters.y_0; MWNumericArray x_0 = acquisitionParameters.x_0; MWNumericArray l_y = acquisitionParameters.l_y; MWNumericArray l_x = acquisitionParameters.l_x; MWNumericArray ds = acquisitionParameters.ds; MWNumericArray PRR = 500; // PRR of the OPO. Dont Change MWNumericArray triggerWidth; if (systemState.LASERconnected == 1) // Wedge { triggerWidth = 130; // [us] } else { triggerWidth = 5; } MWNumericArray f_s = acquisitionParameters.f_s; MWNumericArray inputRange = acquisitionParameters.inputRange_list[acquisitionParameters.inputRange_listIndex]; MWNumericArray z_low = acquisitionParameters.z_low; MWNumericArray z_target = acquisitionParameters.z_target; MWNumericArray z_high = acquisitionParameters.z_high; MWNumericArray v_x = 10; // dx/PRR MWNumericArray acc = 300; MWNumericArray acqDelay = 3; MWNumericArray d_acc = 0.17; MWNumericArray acqRes = acquisitionParameters.acqRes; MWArray acqMode = acquisitionParameters.acqMode; MWNumericArray triggerLevel = acquisitionParameters.triggerLevel; MWNumericArray numberOfWavelength = acquisitionParameters.numberOfWavelength; MWNumericArray BscanUpdate = acquisitionParameters.BscanUpdate; MWArray controllerSerialNumber = acquisitionParameters.controllerSerialNumber; MWNumericArray quickScan = 0; MWArray ArrayOfWavelength = acquisitionParameters.ArrayOfWavelength; // MWNumericArray ArrayOfWavelength = new MWNumericArray(acquisitionParameters.ArrayOfWavelength); //MWNumericArray ArrayOfWavelength = new MWNumericArray[acquisitionParameters.numberOfWavelength]; //get number of wavelength from comment box if (!string.IsNullOrEmpty(comment)) { try { numberOfWavelength = multiLaser.retrieveWL(comment).Length; int[] tempArr = multiLaser.retrieveWL(comment); string stringArr = ""; for (int i = 0; i < multiLaser.retrieveWL(comment).Length; i++) { if (i == 0) { stringArr = tempArr[i].ToString(); } else { stringArr = stringArr + " " + tempArr[i].ToString(); } } ArrayOfWavelength = stringArr; } catch (Exception) { multiLaser.illuminationOFF(); Console.WriteLine("Wavelengths - wrong syntaxis"); //cancelAcq_Button.Click -= multiLaser.laserHandle; Thread.Sleep(5000); Environment.Exit(1); } } else { ArrayOfWavelength = LaserParameter.LaserDefaultWavelength.ToString(); } // copy file parameters to structure string[] fieldNames2 = { "y_0", "x_0", "l_y", "l_x", "ds", "PRR", "triggerWidth", "f_s", "inputRange", "z_low", "z_target", "z_high", "v_x", "acc", "acqDelay", "d_acc", "acqRes","acqMode", "triggerLevel","numberOfWavelength", "ArrayOfWavelength", "BscanUpdate", "controllerSerialNumber", "quickScan" }; MWStructArray aP = new MWStructArray(1, 1, fieldNames2); aP.SetField("y_0", y_0); aP.SetField("x_0", x_0); aP.SetField("l_y", l_y); aP.SetField("l_x", l_x); aP.SetField("ds", ds); aP.SetField("PRR", PRR); aP.SetField("triggerWidth", triggerWidth); aP.SetField("f_s", f_s); aP.SetField("inputRange", inputRange); aP.SetField("z_low", z_low); aP.SetField("z_target", z_target); aP.SetField("z_high", z_high); aP.SetField("v_x", v_x); aP.SetField("acc", acc); aP.SetField("acqDelay", acqDelay); aP.SetField("d_acc", d_acc); aP.SetField("acqRes", acqRes); aP.SetField("acqMode", acqMode); aP.SetField("triggerLevel", triggerLevel); aP.SetField("numberOfWavelength", numberOfWavelength); aP.SetField("ArrayOfWavelength", ArrayOfWavelength); aP.SetField("BscanUpdate", BscanUpdate); aP.SetField("controllerSerialNumber", controllerSerialNumber); aP.SetField("quickScan", quickScan); // Define reconstruction parameters MWNumericArray t_focus = detectorParameters.t_focus; // copy file parameters to structure string[] fieldNames3 = { "t_focus" }; MWStructArray dP = new MWStructArray(1, 1, fieldNames3); dP.SetField("t_focus", t_focus); // Define reconstruction parameters MWNumericArray v_s = reconstructionParameters.v_s; // copy file parameters to structure string[] fieldNames4 = { "v_s" }; MWStructArray rP = new MWStructArray(1, 1, fieldNames4); rP.SetField("v_s", v_s); try { //if (systemState.LASERconnected == 0 || systemState.DAQconnected == 0 || systemState.STAGESconnected == 0) if (systemState.DAQconnected == 0 || systemState.STAGESconnected == 0) { iScanClass_mock obj_mock = null; obj_mock = new iScanClass_mock(); obj_mock.iScan_mock(fP, aP, dP, rP); } else { // choose right kernel for stages switch (systemState.DAQconnected) { case 1: // Gage // if (acquisitionParameters.triggerMode == 0) { iScanClass_OPO obj = null; obj = new iScanClass_OPO(); obj.iScan_dual(fP, aP, dP, rP); } /*else * { * iScanClass_trig obj_trig = null; * obj_trig = new iScanClass_trig(); * obj_trig.iScan_trig(fP, aP, dP, rP); * }*/ break; case 2: // Alazar //if (acquisitionParameters.triggerMode == 0) { iScanClass_OPO obj = null; obj = new iScanClass_OPO(); obj.iScan_dual(fP, aP, dP, rP); } //else { Console.WriteLine("ERROR: Alazar external trigger not yet implmented."); } break; default: Console.WriteLine("ERROR: Settings say there is no DAQ connected."); break; } // switch off laser and close connection { multiLaser.illuminationOFF(); cancelAcq_Button.Click -= multiLaser.laserHandle; } } } catch (Exception e) { // check if laser emission can be stopped if (multiLaser != null) { try { multiLaser.illuminationOFF(); string StatusMessage; StatusMessage = multiLaser.CheckShutterState(); if (StatusMessage == "OPEN") { Console.WriteLine("WARNING: switch off OPO EMISSION if necessary."); } cancelAcq_Button.Click -= multiLaser.laserHandle; } catch { Console.WriteLine("WARNING: switch off laser EMISSION if necessary."); }; } if (!e.Message.Contains("ERROR:")) { Console.WriteLine("ERROR:" + e.Message); } Console.WriteLine("\n"); Console.WriteLine("Status-Acq: 1.00"); } // write xml-file XDocument acqXML = new XDocument( new XElement("acquisitionParameters", new XElement("l_y", l_y.ToString()), new XElement("l_x", l_x.ToString()), new XElement("ds", ds.ToString()), new XElement("PRR", PRR.ToString()), new XElement("laserEnergy", acquisitionParameters.laserPower.ToString()), new XElement("f_s", f_s.ToString()), new XElement("inputRange", inputRange.ToString()), new XElement("z_low", z_low.ToString()), new XElement("z_high", z_high.ToString()), new XElement("numberOfWavelength", numberOfWavelength.ToString()), new XElement("comment", comment) ) ); acqXML.Declaration = new XDeclaration("1.0", "utf-8", "true"); string filename = acqFolder.ToString() + dataName.ToString() + ".xml"; acqXML.Save(@filename); }
public void start(string comment, Hardware.LaserSW.ViewModelBrightSolutions ondaLaser, Button cancelAcq_Button) { // Define file parameters MWArray acqFolder = fileParameters.studyFolder + "\\" + System.DateTime.Now.Year.ToString("0000") + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") + "\\"; MWArray acqQuickScanFolder = acqFolder + "QuickScan\\"; MWArray acqLogFolder = acqFolder + "Log\\"; MWArray acqPreviewFolder = fileParameters.acqPreviewFolder; MWArray acqThumbnailFolder = acqFolder + "Thumbnail\\"; MWArray dataName; if (fileParameters.dataName != null) { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00") + "_" + fileParameters.dataName; } else { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00"); } // create recon folder if (!Directory.Exists(acqFolder.ToString())) { Directory.CreateDirectory(acqFolder.ToString()); } if (!Directory.Exists(acqQuickScanFolder.ToString())) { Directory.CreateDirectory(acqQuickScanFolder.ToString()); } if (!Directory.Exists(acqLogFolder.ToString())) { Directory.CreateDirectory(acqLogFolder.ToString()); } if (!Directory.Exists(acqPreviewFolder.ToString())) { Directory.CreateDirectory(acqPreviewFolder.ToString()); } if (!Directory.Exists(acqThumbnailFolder.ToString())) { Directory.CreateDirectory(acqThumbnailFolder.ToString()); } // copy file parameters to structure string[] fieldNames = { "acqFolder", "acqQuickScanFolder", "acqLogFolder", "acqPreviewFolder", "acqThumbnailFolder", "dataName" }; MWStructArray fP = new MWStructArray(1, 1, fieldNames); fP.SetField("acqFolder", acqFolder); fP.SetField("acqQuickScanFolder", acqQuickScanFolder); fP.SetField("acqLogFolder", acqLogFolder); fP.SetField("acqPreviewFolder", acqPreviewFolder); fP.SetField("acqThumbnailFolder", acqThumbnailFolder); fP.SetField("dataName", dataName); // Define acquisition parameters MWNumericArray y_0 = acquisitionParameters.y_0; MWNumericArray x_0 = acquisitionParameters.x_0; MWNumericArray l_y = acquisitionParameters.l_y; MWNumericArray l_x = acquisitionParameters.l_x; MWNumericArray ds = acquisitionParameters.ds; MWNumericArray PRR = acquisitionParameters.PRR; MWNumericArray triggerWidth; if (systemState.LASERconnected == 1) // Wedge { triggerWidth = 130; // [us] } else { triggerWidth = 5; } MWNumericArray f_s = acquisitionParameters.f_s; MWNumericArray inputRange = acquisitionParameters.inputRange_list[acquisitionParameters.inputRange_listIndex]; MWNumericArray z_low = acquisitionParameters.z_low; MWNumericArray z_target = acquisitionParameters.z_target; MWNumericArray z_high = acquisitionParameters.z_high; MWNumericArray v_x = acquisitionParameters.v_x; MWNumericArray acc = acquisitionParameters.acc; MWNumericArray acqDelay = acquisitionParameters.acqDelay; MWNumericArray d_acc = acquisitionParameters.d_acc; MWNumericArray acqRes = acquisitionParameters.acqRes; MWArray acqMode = acquisitionParameters.acqMode; MWNumericArray triggerLevel = acquisitionParameters.triggerLevel; MWNumericArray numberOfWavelength = acquisitionParameters.numberOfWavelength; MWNumericArray BscanUpdate = acquisitionParameters.BscanUpdate; MWArray controllerSerialNumber = acquisitionParameters.controllerSerialNumber; MWNumericArray quickScan = 0; // copy file parameters to structure string[] fieldNames2 = { "y_0", "x_0", "l_y", "l_x", "ds", "PRR", "triggerWidth", "f_s", "inputRange", "z_low", "z_target", "z_high", "v_x", "acc", "acqDelay", "d_acc", "acqRes","acqMode", "triggerLevel","numberOfWavelength", "BscanUpdate", "controllerSerialNumber", "quickScan" }; MWStructArray aP = new MWStructArray(1, 1, fieldNames2); aP.SetField("y_0", y_0); aP.SetField("x_0", x_0); aP.SetField("l_y", l_y); aP.SetField("l_x", l_x); aP.SetField("ds", ds); aP.SetField("PRR", PRR); aP.SetField("triggerWidth", triggerWidth); aP.SetField("f_s", f_s); aP.SetField("inputRange", inputRange); aP.SetField("z_low", z_low); aP.SetField("z_target", z_target); aP.SetField("z_high", z_high); aP.SetField("v_x", v_x); aP.SetField("acc", acc); aP.SetField("acqDelay", acqDelay); aP.SetField("d_acc", d_acc); aP.SetField("acqRes", acqRes); aP.SetField("acqMode", acqMode); aP.SetField("triggerLevel", triggerLevel); aP.SetField("numberOfWavelength", numberOfWavelength); aP.SetField("BscanUpdate", BscanUpdate); aP.SetField("controllerSerialNumber", controllerSerialNumber); aP.SetField("quickScan", quickScan); // Define reconstruction parameters MWNumericArray t_focus = detectorParameters.t_focus; // copy file parameters to structure string[] fieldNames3 = { "t_focus" }; MWStructArray dP = new MWStructArray(1, 1, fieldNames3); dP.SetField("t_focus", t_focus); // Define reconstruction parameters MWNumericArray v_s = reconstructionParameters.v_s; // copy file parameters to structure string[] fieldNames4 = { "v_s" }; MWStructArray rP = new MWStructArray(1, 1, fieldNames4); rP.SetField("v_s", v_s); try { if (systemState.LASERconnected == 0 || systemState.DAQconnected == 0 || systemState.STAGESconnected == 0) { iScanClass_mock obj_mock = null; obj_mock = new iScanClass_mock(); obj_mock.iScan_mock(fP, aP, dP, rP); } else { // choose right kernel for stages switch (systemState.DAQconnected) { case 1: // Gage if (acquisitionParameters.triggerMode == 0) { iScanClass obj = null; obj = new iScanClass(); obj.iScan(fP, aP, dP, rP); } else { iScanClass_trig obj_trig = null; obj_trig = new iScanClass_trig(); obj_trig.iScan_trig(fP, aP, dP, rP); } break; case 2: // Alazar if (acquisitionParameters.triggerMode == 0) { iScanClass_Alazar obj_Alazar = null; obj_Alazar = new iScanClass_Alazar(); obj_Alazar.iScan_Alazar(fP, aP, dP, rP); } else { Console.WriteLine("ERROR: Alazar external trigger not yet implmented."); } break; default: Console.WriteLine("ERROR: Settings say there is no DAQ connected."); break; } // switch off laser and close connection if (systemState.LASERconnected == 1 || systemState.LASERconnected == 2) { // switch laser off and close connection ondaLaser.EmissionOFF(); ondaLaser.closeConnection(); cancelAcq_Button.Click -= ondaLaser.laserHandle; } } } catch (Exception e) { // check if laser emission can be stopped if (ondaLaser != null) { try { ondaLaser.EmissionOFF(); ondaLaser.closeConnection(); cancelAcq_Button.Click -= ondaLaser.laserHandle; } catch { Console.WriteLine("WARNING: switch off laser EMISSION if necessary."); }; } if (!e.Message.Contains("ERROR:")) { Console.WriteLine("ERROR:" + e.Message); } Console.WriteLine("\n"); Console.WriteLine("Status-Acq: 1.00"); } // write xml-file XDocument acqXML = new XDocument( new XElement("acquisitionParameters", new XElement("l_y", l_y.ToString()), new XElement("l_x", l_x.ToString()), new XElement("ds", ds.ToString()), new XElement("PRR", PRR.ToString()), new XElement("laserEnergy", acquisitionParameters.laserPower.ToString()), new XElement("f_s", f_s.ToString()), new XElement("inputRange", inputRange.ToString()), new XElement("z_low", z_low.ToString()), new XElement("z_high", z_high.ToString()), new XElement("numberOfWavelength", numberOfWavelength.ToString()), new XElement("comment", comment) ) ); acqXML.Declaration = new XDeclaration("1.0", "utf-8", "true"); string filename = acqFolder.ToString() + dataName.ToString() + ".xml"; acqXML.Save(@filename); //// write RSOMpreset xml-file //XDocument presetXML = new XDocument( // new XElement("RSOMpreset", // new XElement("laserSettings", // new XElement("energy", acquisitionParameters.laserPower.ToString()) // ) // ) // ); //presetXML.Declaration = new XDeclaration("1.0", "utf-8", "true"); //string filenamePreset = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\iThera\\ViewRSOM\\RSOMpreset.xml"; //presetXML.Save(@filenamePreset); }
public void start(List <ReconItem> _myReconItems) { // create timer to estimate recon time DateTime tPart = DateTime.Now; TimeSpan duration; // define own private dataFolder and list of data names that is not updated/affected from outside MWArray dataFolder = studyParameters.myStudyDates_list[studyParameters.myStudyDates_listIndex].folderPath + "\\"; List <string> dataNames = new List <string>(); // current recon settings double zRecon_high_curr = reconstructionParameters.zRecon_high; int bandpassSeparation_curr = reconstructionParameters.bandpassSeparation; int motionCorrection_curr = reconstructionParameters.motionCorrection; int movingMAP_curr = reconstructionParameters.movingMAP; int volume3D_curr = reconstructionParameters.volume3D; // create own private recon list and setup total progress bar int N_tot = 0; int N_curr = 0; for (int i = 0; i < _myReconItems.Count; i++) { if (_myReconItems[i].isChecked) { dataNames.Add(_myReconItems[i].fileName); N_tot++; } } if (bandpassSeparation_curr == 1) { N_tot = N_tot * 3; } reconstructionParameters.reconProgressTot = new int[2] { 0, N_tot }; int N_recon = dataNames.Count; MWArray dataName = null; for (int i = 0; i < N_recon; i++) { // define data name dataName = dataNames[i]; // Define file parameters //MWArray dataFolder = studyParameters.studyDateList[studyParameters.studyDate_default].folderPath + "\\"; int counter = 1; bool runLoop = true; MWArray reconFolder = null; while (runLoop) { if (motionCorrection_curr == 1) { reconFolder = dataFolder + "R_" + dataName + "_mc" + counter + "\\"; } else { reconFolder = dataFolder + "R_" + dataName + "_" + counter + "\\"; } if (!Directory.Exists(reconFolder.ToString())) { runLoop = false; } counter++; } MWArray reconLogFolder = reconFolder + "LogFile\\"; MWArray reconImageFolder = reconFolder + "Images\\"; MWArray reconThumbnailFolder = reconFolder + "Thumbnail\\"; MWArray reconExportFolder = reconFolder + "Export\\"; MWArray SFFile = fileParameters.SFFolder + fileParameters.SFFile; MWArray fileExtension = ""; // create recon folder if (!Directory.Exists(reconFolder.ToString())) { Directory.CreateDirectory(reconFolder.ToString()); } if (!Directory.Exists(reconLogFolder.ToString())) { Directory.CreateDirectory(reconLogFolder.ToString()); } if (!Directory.Exists(reconImageFolder.ToString())) { Directory.CreateDirectory(reconImageFolder.ToString()); } if (!Directory.Exists(reconThumbnailFolder.ToString())) { Directory.CreateDirectory(reconThumbnailFolder.ToString()); } // copy file parameters to structure string[] fieldNames = { "dataFolder", "reconFolder", "reconLogFolder", "reconImageFolder", "reconThumbnailFolder", "reconExportFolder", "dataName", "SFFile", "fileExtension" }; MWStructArray fP = new MWStructArray(1, 1, fieldNames); fP.SetField("dataFolder", dataFolder); fP.SetField("reconFolder", reconFolder); fP.SetField("reconLogFolder", reconLogFolder); fP.SetField("reconImageFolder", reconImageFolder); fP.SetField("reconThumbnailFolder", reconThumbnailFolder); fP.SetField("reconExportFolder", reconExportFolder); fP.SetField("dataName", dataName); fP.SetField("SFFile", SFFile); fP.SetField("fileExtension", fileExtension); // Define reconstruction parameters MWNumericArray reflectionFilter = reconstructionParameters.reflectionFilter; MWNumericArray bandpassFilter = reconstructionParameters.bandpassFilter; MWNumericArray f_low = reconstructionParameters.f_low; MWNumericArray f_high = reconstructionParameters.f_high; MWNumericArray coRegistration = reconstructionParameters.coRegistration; MWNumericArray focusModel = reconstructionParameters.focusModel; MWNumericArray bpMode = reconstructionParameters.bpMode; MWNumericArray bpWeight = reconstructionParameters.bpWeight; MWNumericArray v_s = reconstructionParameters.v_s; MWNumericArray zRecon_low = reconstructionParameters.zRecon_low; // reconstructionParameters.z_lowRel; MWNumericArray zRecon_high = zRecon_high_curr; // reconstructionParameters.z_upRel; MWNumericArray motionCorrection = motionCorrection_curr; MWNumericArray blockSize = reconstructionParameters.blockSize; MWArray platform = reconstructionParameters.platform; MWArray deviceType = reconstructionParameters.deviceType; MWNumericArray dz = reconstructionParameters.dz; MWNumericArray ds = reconstructionParameters.ds; MWNumericArray maxOffset = reconstructionParameters.maxOffset; MWNumericArray y_shiftInd = reconstructionParameters.y_shiftInd; MWNumericArray movingMAP = movingMAP_curr; MWNumericArray movingMAP_slabThickness = reconstructionParameters.movingMAP_slabThickness; MWNumericArray volume3D = volume3D_curr; // copy file parameters to structure string[] fieldNames2 = { "reflectionFilter", "bandpassFilter", "f_low", "f_high", "coRegistration", "focusModel", "bpMode", "bpWeight", "v_s", "zRecon_low", "zRecon_high", "motionCorrection", "blockSize", "platform", "deviceType", "dz", "ds", "maxOffset", "y_shiftInd", "movingMAP", "movingMAP_slabThickness","volume3D" }; MWStructArray rP = new MWStructArray(1, 1, fieldNames2); rP.SetField("reflectionFilter", reflectionFilter); rP.SetField("bandpassFilter", bandpassFilter); rP.SetField("f_low", f_low); rP.SetField("f_high", f_high); rP.SetField("coRegistration", coRegistration); rP.SetField("focusModel", focusModel); rP.SetField("bpMode", bpMode); rP.SetField("bpWeight", bpWeight); rP.SetField("v_s", v_s); rP.SetField("zRecon_low", zRecon_low); rP.SetField("zRecon_high", zRecon_high); rP.SetField("motionCorrection", motionCorrection); rP.SetField("blockSize", blockSize); rP.SetField("platform", platform); rP.SetField("deviceType", deviceType); rP.SetField("dz", dz); rP.SetField("ds", ds); rP.SetField("maxOffset", maxOffset); rP.SetField("y_shiftInd", y_shiftInd); rP.SetField("movingMAP", movingMAP); rP.SetField("movingMAP_slabThickness", movingMAP_slabThickness); rP.SetField("volume3D", volume3D); // Define reconstruction parameters MWNumericArray t_focus = detectorParameters.t_focus; MWNumericArray focalLength = detectorParameters.focalLength; MWNumericArray detectorDiameter = detectorParameters.detectorDiameter; MWNumericArray dataSign = detectorParameters.dataSign; // copy file parameters to structure string[] fieldNames3 = { "t_focus", "focalLength", "detectorDiameter", "dataSign" }; MWStructArray dP = new MWStructArray(1, 1, fieldNames3); dP.SetField("t_focus", t_focus); dP.SetField("focalLength", focalLength); dP.SetField("detectorDiameter", detectorDiameter); dP.SetField("dataSign", dataSign); if (bandpassSeparation_curr == 0) { iReconOpenClClass obj = null; // iRecon3DClass obj = null; try { // Instantiate your component class. obj = new iReconOpenClClass(); obj.iRecon3D_OpenCl(fP, rP, dP); // obj = new iRecon3DClass(); // obj.iRecon3D(fP, rP, dP); N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; // Print future time estimate duration = (DateTime.Now - tPart); for (int i_time = N_curr + 1; i_time < N_tot; i_time++) { duration += (DateTime.Now - tPart); } reconstructionParameters.remainingReconTime = new TimeSpan(duration.Hours, duration.Minutes, duration.Seconds); tPart = DateTime.Now; // Trigger messages in message box Console.WriteLine("Recon-finished: " + reconFolder + "R_" + dataName); } catch (Exception e) { N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; Console.WriteLine("Status-Recon: 1.00"); if (!e.Message.StartsWith("ERROR:")) { Console.WriteLine("ERROR:" + e.Message + "\n"); } if (N_tot == N_curr) { Console.WriteLine("Recon-finished: reconstruction finished with errors."); } } } if (bandpassSeparation_curr == 1) { for (int j = 0; j < 3; j++) { // redefine some parameters if (j == 0) { SFFile = fileParameters.SFFolder + fileParameters.SFFile; fileExtension = ""; fP.SetField("SFFile", SFFile); fP.SetField("fileExtension", fileExtension); f_low = reconstructionParameters.f_low; f_high = reconstructionParameters.f_high; rP.SetField("f_low", f_low); rP.SetField("f_high", f_high); } if (j == 1) { SFFile = fileParameters.SFFolder + fileParameters.SFFileLF; fileExtension = "_LF"; fP.SetField("SFFile", SFFile); fP.SetField("fileExtension", fileExtension); f_low = reconstructionParameters.f_low; f_high = reconstructionParameters.f_mid; rP.SetField("f_low", f_low); rP.SetField("f_high", f_high); } if (j == 2) { SFFile = fileParameters.SFFolder + fileParameters.SFFileHF; fileExtension = "_HF"; fP.SetField("SFFile", SFFile); fP.SetField("fileExtension", fileExtension); f_low = reconstructionParameters.f_mid; f_high = reconstructionParameters.f_high; rP.SetField("f_low", f_low); rP.SetField("f_high", f_high); } iReconOpenClClass obj = null; // iRecon3DClass obj = null; try { // Instantiate your component class. obj = new iReconOpenClClass(); obj.iRecon3D_OpenCl(fP, rP, dP); // obj = new iRecon3DClass(); // obj.iRecon3D(fP, rP, dP); N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; // Print future time estimate duration = (DateTime.Now - tPart); for (int i_time = N_curr + 1; i_time < N_tot; i_time++) { duration += (DateTime.Now - tPart); } reconstructionParameters.remainingReconTime = new TimeSpan(duration.Hours, duration.Minutes, duration.Seconds); tPart = DateTime.Now; // Trigger messages in message box if (j == 0) { Console.WriteLine("Recon-finished: " + reconFolder + "R_" + dataName); } else { Console.WriteLine("Recon-finished: " + reconFolder + "R_" + dataName + fileExtension); } } catch (Exception e) { N_curr++; reconstructionParameters.reconProgressTot = new int[2] { N_curr, N_tot }; Console.WriteLine("Status-Recon: 0.01"); if (!e.Message.Contains("ERROR:")) { Console.WriteLine("ERROR:" + e.Message + "\n"); } if (N_tot == N_curr) { Console.WriteLine("Recon-finished: reconstruction finished with errors."); } } } } } Console.WriteLine("Recon-finished: All reconstructions finished"); }
//封装储热数据 public MWStructArray[] saveH_pack() { //输入变量,结构数组 string[] variableIn = new string[3]; variableIn[0] = "charge"; variableIn[1] = "H"; variableIn[2] = "savedH"; MWStructArray variableInStruct = new MWStructArray(1, 1, variableIn); variableInStruct.SetField(variableIn[0], simulatedData.Charge_HA); variableInStruct.SetField(variableIn[1], simulatedData.H_HA); variableInStruct.SetField(variableIn[2], simulatedData.SavedH_HA); //封装后的saveH输入变量 string[] variableIn_pack = new string[1]; variableIn_pack[0] = "saveh"; MWStructArray simulatedData_saveH = new MWStructArray(1, 1, variableIn_pack); simulatedData_saveH.SetField(variableIn_pack[0], variableInStruct); //设备参数,结构数组 string[] equipmentParameterIn = new string[3]; equipmentParameterIn[0] = "maxH"; equipmentParameterIn[1] = "etaIn"; equipmentParameterIn[2] = "etaOut"; MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, equipmentParameterIn); equipmentParameterInStruct.SetField(equipmentParameterIn[0], equipmentParameter.MaxH_HA); equipmentParameterInStruct.SetField(equipmentParameterIn[1], equipmentParameter.EtaInH_HA); equipmentParameterInStruct.SetField(equipmentParameterIn[2], equipmentParameter.EtaOutH_HA); //封装后的saveH设备参数 string[] equipmentParameterIn_pack = new string[1]; equipmentParameterIn_pack[0] = "saveh"; MWStructArray equipmentParameter_saveH = new MWStructArray(1, 1, equipmentParameterIn_pack); equipmentParameter_saveH.SetField(equipmentParameterIn_pack[0], equipmentParameterInStruct); //返回数据 MWStructArray[] structArray_Return = new MWStructArray[2]; structArray_Return[0] = simulatedData_saveH; structArray_Return[1] = equipmentParameter_saveH; return structArray_Return; }
//封装储电数据 public MWStructArray[] saveE_pack() { //输入变量,结构数组 string[] variableIn = new string[4]; variableIn[0] = "charge"; variableIn[1] = "duration"; variableIn[2] = "speed"; variableIn[3] = "savedE"; MWStructArray variableInStruct_saveE = new MWStructArray(1, 1, variableIn); variableInStruct_saveE.SetField(variableIn[0], simulatedData.Charge_EA); variableInStruct_saveE.SetField(variableIn[1], simulatedData.Duration_EA); variableInStruct_saveE.SetField(variableIn[2], simulatedData.Speed_EA); variableInStruct_saveE.SetField(variableIn[3], simulatedData.SavedE_EA); //封装后的saveE输入变量 string[] variableIn_pack = new string[1]; variableIn_pack[0] = "savee"; MWStructArray simulatedData_saveE = new MWStructArray(1, 1, variableIn_pack); simulatedData_saveE.SetField(variableIn_pack[0], variableInStruct_saveE); //设备参数,结构数组 string[] equipmentParameterIn = new string[5]; equipmentParameterIn[0] = "maxE"; equipmentParameterIn[1] = "maxInE"; equipmentParameterIn[2] = "maxOutE"; equipmentParameterIn[3] = "etaIn"; equipmentParameterIn[4] = "etaOut"; MWStructArray equipmentParameterInStruct_saveE = new MWStructArray(1, 1, equipmentParameterIn); equipmentParameterInStruct_saveE.SetField(equipmentParameterIn[0], equipmentParameter.MaxE_EA); equipmentParameterInStruct_saveE.SetField(equipmentParameterIn[1], equipmentParameter.MaxInE_EA); equipmentParameterInStruct_saveE.SetField(equipmentParameterIn[2], equipmentParameter.MaxOutE_EA); equipmentParameterInStruct_saveE.SetField(equipmentParameterIn[3], equipmentParameter.EtaInE_EA); equipmentParameterInStruct_saveE.SetField(equipmentParameterIn[4], equipmentParameter.EtaOutE_EA); //封装后的saveE设备参数 string[] equipmentParameterIn_pack = new string[1]; equipmentParameterIn_pack[0] = "savee"; MWStructArray equipmentParameter_saveE = new MWStructArray(1, 1, equipmentParameterIn_pack); equipmentParameter_saveE.SetField(equipmentParameterIn_pack[0], equipmentParameterInStruct_saveE); //返回数据 MWStructArray[] structArray_Return = new MWStructArray[2]; structArray_Return[0] = simulatedData_saveE; structArray_Return[1] = equipmentParameter_saveE; return structArray_Return; }
//封装光热数据 public MWStructArray[] pt_pack() { //输入变量,结构数组 string[] envrmtdata = new string[1]; envrmtdata[0] = "lout"; MWStructArray envrmtdataStruct = new MWStructArray(1, 1, envrmtdata); envrmtdataStruct.SetField(envrmtdata[0], simulatedData.Envrmtdata_lout_Heat); string[] variableIn = new string[2]; variableIn[0] = "envrmtdata"; variableIn[1] = "duration"; MWStructArray variableInStruct = new MWStructArray(1, 1, variableIn); variableInStruct.SetField(variableIn[0], envrmtdataStruct); variableInStruct.SetField(variableIn[1], simulatedData.Duration_Heat); //封装后的pt输入变量 string[] variableIn_pack = new string[1]; variableIn_pack[0] = "pt"; MWStructArray simulatedData_pt = new MWStructArray(1, 1, variableIn_pack); simulatedData_pt.SetField(variableIn_pack[0], variableInStruct); //设备参数,结构数组 string[] equipmentParameterIn = new string[1]; equipmentParameterIn[0] = "power"; MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, equipmentParameterIn); equipmentParameterInStruct.SetField(equipmentParameterIn[0], equipmentParameter.Power_Heat); //封装后的pt设备参数 string[] equipmentParameterIn_pack = new string[1]; equipmentParameterIn_pack[0] = "pt"; MWStructArray equipmentParameter_pt = new MWStructArray(1, 1, equipmentParameterIn_pack); equipmentParameter_pt.SetField(equipmentParameterIn_pack[0], equipmentParameterInStruct); //返回数据 MWStructArray[] structArray_Return = new MWStructArray[2]; structArray_Return[0] = simulatedData_pt; structArray_Return[1] = equipmentParameter_pt; return structArray_Return; }
//优化函数 public MWStructArray ctrlopt_Struct() { //能源需求参数 string[] need = new string[3]; need[0] = "E"; need[1] = "H"; need[2] = "mode"; MWStructArray needStruct = new MWStructArray(1, 1, need); needStruct.SetField(need[0], energyNeed.Electricity_Need); needStruct.SetField(need[1], energyNeed.Heat_Need); needStruct.SetField(need[2], energyNeed.Mode); //能源价格参数 double price_E = 0.55; double price_H = 0.16; double price_G = 0.24; double mode = energyNeed.Mode; if (mode == 1) { price_E = simulatedData.Price_E; price_H = simulatedData.Price_H; price_G = simulatedData.Price_G; } else if (mode == 2) { price_E = 1; price_H = 0.28; price_G = 9.78; } else if (mode == 4) { price_E = 0.1384; price_H = 0.0398; price_G = 0.8218; } string[] price = new string[3]; price[0] = "E"; price[1] = "H"; price[2] = "G"; MWStructArray priceStruct = new MWStructArray(1, 1, price); priceStruct.SetField(price[0], price_E); priceStruct.SetField(price[1], price_H); priceStruct.SetField(price[2], price_G); //参数封装格式定义 MWStructArray[] data_pv_pack = pv_pack(); MWStructArray[] data_pt_pack = pt_pack(); MWStructArray[] data_saveE_pack = saveE_pack(); MWStructArray[] data_saveH_pack = saveH_pack(); MWStructArray[] data_ueMachine = ueMachine_pack(); MWStructArray[] data_gasBoiler = gasBoiler_pack(); string[] variable = new string[7]; variable[0] = "pv"; variable[1] = "pt"; variable[2] = "savee"; variable[3] = "saveh"; variable[4] = "uemachine"; variable[5] = "gasboiler"; variable[6] = "price"; //输入变量提取 MWStructArray variableInStruct = new MWStructArray(1, 1, variable); variableInStruct.SetField(variable[0], data_pv_pack[0].GetField(variable[0])); variableInStruct.SetField(variable[1], data_pt_pack[0].GetField(variable[1])); variableInStruct.SetField(variable[2], data_saveE_pack[0].GetField(variable[2])); variableInStruct.SetField(variable[3], data_saveH_pack[0].GetField(variable[3])); variableInStruct.SetField(variable[4], data_ueMachine[0].GetField(variable[4])); variableInStruct.SetField(variable[5], data_gasBoiler[0].GetField(variable[5])); variableInStruct.SetField(variable[6], priceStruct); //设备参数提取 MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, variable); equipmentParameterInStruct.SetField(variable[0], data_pv_pack[1].GetField(variable[0])); equipmentParameterInStruct.SetField(variable[1], data_pt_pack[1].GetField(variable[1])); equipmentParameterInStruct.SetField(variable[2], data_saveE_pack[1].GetField(variable[2])); equipmentParameterInStruct.SetField(variable[3], data_saveH_pack[1].GetField(variable[3])); equipmentParameterInStruct.SetField(variable[4], data_ueMachine[1].GetField(variable[4])); equipmentParameterInStruct.SetField(variable[5], data_gasBoiler[1].GetField(variable[5])); //函数调用 object[] dataOut = uec.newctrlopt(1, needStruct, variableInStruct, equipmentParameterInStruct); //输出结果为嵌套结构数组,类型转换 MWStructArray dataOutStruct = (MWStructArray)dataOut[0]; string[] fieldName = dataOutStruct.FieldNames; return dataOutStruct; }
//设备效率 public double[] etacal(MWStructArray product) { //MWStructArray product = ctrlopt_Struct(); //能源需求参数 string[] need = new string[3]; need[0] = "E"; need[1] = "H"; need[2] = "mode"; MWStructArray needStruct = new MWStructArray(1, 1, need); needStruct.SetField(need[0], energyNeed.Electricity_Need); needStruct.SetField(need[1], energyNeed.Heat_Need); needStruct.SetField(need[2], energyNeed.Mode); //参数封装格式定义 MWStructArray[] data_pv_pack = pv_pack(); MWStructArray[] data_pt_pack = pt_pack(); MWStructArray[] data_saveE_pack = saveE_pack(); MWStructArray[] data_saveH_pack = saveH_pack(); MWStructArray[] data_ueMachine = ueMachine_pack(); MWStructArray[] data_gasBoiler = gasBoiler_pack(); string[] variable = new string[7]; variable[0] = "pv"; variable[1] = "pt"; variable[2] = "savee"; variable[3] = "saveh"; variable[4] = "uemachine"; variable[5] = "gasboiler"; variable[6] = "price"; //输入变量提取 MWStructArray variable_uemachine = (MWStructArray)data_ueMachine[0].GetField(variable[4]); MWStructArray variable_gasboiler = (MWStructArray)data_gasBoiler[0].GetField(variable[5]); //档位重新赋值 MWStructArray gear_uemachine_product = (MWStructArray)product.GetField("uemachine"); string[] gear_uemachine_product_fieldNames = gear_uemachine_product.FieldNames; variable_uemachine.SetField(gear_uemachine_product_fieldNames[0], (MWNumericArray)gear_uemachine_product.GetField(gear_uemachine_product_fieldNames[0])); MWStructArray gear_gasboiler_product = (MWStructArray)product.GetField("gasboiler"); string[] gear_gasboiler_product_fieldNames = gear_gasboiler_product.FieldNames; variable_gasboiler.SetField(gear_gasboiler_product_fieldNames[0], (MWNumericArray)gear_gasboiler_product.GetField(gear_gasboiler_product_fieldNames[0])); //内层结构数组gas定义 与档位对应的数组 double[] gas_gear_Boiler = new double[3]; gas_gear_Boiler[0] = equipmentParameter.Gas_gear_Boiler_1; gas_gear_Boiler[1] = equipmentParameter.Gas_gear_Boiler_2; gas_gear_Boiler[2] = equipmentParameter.Gas_gear_Boiler_3; string[] equipmentParameter_Gas = new string[1]; equipmentParameter_Gas[0] = "gear"; MWStructArray gas = new MWStructArray(1, 1, equipmentParameter_Gas); gas.SetField(equipmentParameter_Gas[0], (MWNumericArray)gas_gear_Boiler); //设备参数提取 MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, variable); equipmentParameterInStruct.SetField(variable[0], data_pv_pack[1].GetField(variable[0])); equipmentParameterInStruct.SetField(variable[1], data_pt_pack[1].GetField(variable[1])); equipmentParameterInStruct.SetField(variable[2], data_saveE_pack[1].GetField(variable[2])); equipmentParameterInStruct.SetField(variable[3], data_saveH_pack[1].GetField(variable[3])); equipmentParameterInStruct.SetField(variable[4], data_ueMachine[1].GetField(variable[4])); equipmentParameterInStruct.SetField(variable[5], data_gasBoiler[1].GetField(variable[5])); //函数调用 MWNumericArray dataOut = (MWNumericArray)uec.etacal(product, needStruct, variable_uemachine, variable_gasboiler, equipmentParameterInStruct); double[,] dataOutArray = (double[,])dataOut.ToArray(MWArrayComponent.Real); double[] etacal_Output = new double[3]; etacal_Output[0] = dataOutArray[0, 0]; etacal_Output[1] = dataOutArray[1, 0]; etacal_Output[2] = dataOutArray[2, 0]; return etacal_Output; }
//封装补燃锅炉数据 public MWStructArray[] gasBoiler_pack() { //输入变量,结构数组 string[] variableIn = new string[2]; variableIn[0] = "gear"; variableIn[1] = "duration"; MWStructArray variableInStruct = new MWStructArray(1, 1, variableIn); variableInStruct.SetField(variableIn[0], simulatedData.Gear_Boiler); variableInStruct.SetField(variableIn[1], simulatedData.Duration_Boiler); //封装后的gasBoiler输入变量 string[] variableIn_pack = new string[1]; variableIn_pack[0] = "gasboiler"; MWStructArray simulatedData_gasBoiler = new MWStructArray(1, 1, variableIn_pack); simulatedData_gasBoiler.SetField(variableIn_pack[0], variableInStruct); //设备参数,嵌套结构数组 //内层结构数组powerH定义 与档位对应的数组 double[] powerH_gear_Boiler = new double[3]; powerH_gear_Boiler[0] = equipmentParameter.PowerH_gear_Boiler_1; powerH_gear_Boiler[1] = equipmentParameter.PowerH_gear_Boiler_2; powerH_gear_Boiler[2] = equipmentParameter.PowerH_gear_Boiler_3; string[] equipmentParameter_PowerH = new string[1]; equipmentParameter_PowerH[0] = "gear"; MWStructArray powerH = new MWStructArray(1, 1, equipmentParameter_PowerH); powerH.SetField(equipmentParameter_PowerH[0], (MWNumericArray)powerH_gear_Boiler); //内层结构数组gas定义 与档位对应的数组 double[] gas_gear_Boiler = new double[3]; gas_gear_Boiler[0] = equipmentParameter.Gas_gear_Boiler_1; gas_gear_Boiler[1] = equipmentParameter.Gas_gear_Boiler_2; gas_gear_Boiler[2] = equipmentParameter.Gas_gear_Boiler_3; string[] equipmentParameter_Gas = new string[1]; equipmentParameter_Gas[0] = "gear"; MWStructArray gas = new MWStructArray(1, 1, equipmentParameter_Gas); gas.SetField(equipmentParameter_Gas[0], (MWNumericArray)gas_gear_Boiler); //设备参数,结构数组 string[] equipmentParamaterIn = new string[2]; equipmentParamaterIn[0] = "powerH"; equipmentParamaterIn[1] = "gas"; MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, equipmentParamaterIn); equipmentParameterInStruct.SetField(equipmentParamaterIn[0], powerH); equipmentParameterInStruct.SetField(equipmentParamaterIn[1], gas); //封装后的ueMachine设备参数 string[] equipmentParameterIn_pack = new string[1]; equipmentParameterIn_pack[0] = "gasboiler"; MWStructArray equipmentParameter_gasboiler = new MWStructArray(1, 1, equipmentParameterIn_pack); equipmentParameter_gasboiler.SetField(equipmentParameterIn_pack[0], equipmentParameterInStruct); //返回数据 MWStructArray[] structArray_Return = new MWStructArray[2]; structArray_Return[0] = simulatedData_gasBoiler; structArray_Return[1] = equipmentParameter_gasboiler; return structArray_Return; }
public void startMulti(string comment, ViewRSOM.MSOT.Hardware.ViewModels.Laser.ViewModelLaserInnolas multiLaser, Button cancelAcq_Button) { // Define file parameters MWArray acqFolder = fileParameters.studyFolder + "\\" + System.DateTime.Now.Year.ToString("0000") + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") + "\\"; MWArray acqQuickScanFolder = acqFolder + "QuickScan\\"; MWArray acqLogFolder = acqFolder + "Log\\"; MWArray acqPreviewFolder = fileParameters.acqPreviewFolder; MWArray acqThumbnailFolder = acqFolder + "Thumbnail\\"; MWArray dataName; if (fileParameters.dataName != null) { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00") + "_" + fileParameters.dataName; } else { dataName = System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00"); } // create recon folder if (!Directory.Exists(acqFolder.ToString())) { Directory.CreateDirectory(acqFolder.ToString()); } //else //{ // Console.Write("WARNING: acquisition folder exists already. Proceed with reconstruction. Previous reconstructions may be overwritten."); //} if (!Directory.Exists(acqQuickScanFolder.ToString())) { Directory.CreateDirectory(acqQuickScanFolder.ToString()); } if (!Directory.Exists(acqLogFolder.ToString())) { Directory.CreateDirectory(acqLogFolder.ToString()); } if (!Directory.Exists(acqPreviewFolder.ToString())) { Directory.CreateDirectory(acqPreviewFolder.ToString()); } if (!Directory.Exists(acqThumbnailFolder.ToString())) { Directory.CreateDirectory(acqThumbnailFolder.ToString()); } // copy file parameters to structure string[] fieldNames = { "acqFolder", "acqQuickScanFolder", "acqLogFolder", "acqPreviewFolder", "acqThumbnailFolder", "dataName" }; MWStructArray fP = new MWStructArray(1, 1, fieldNames); fP.SetField("acqFolder", acqFolder); fP.SetField("acqQuickScanFolder", acqQuickScanFolder); fP.SetField("acqLogFolder", acqLogFolder); fP.SetField("acqPreviewFolder", acqPreviewFolder); fP.SetField("acqThumbnailFolder", acqThumbnailFolder); fP.SetField("dataName", dataName); // Define acquisition parameters MWNumericArray y_0 = acquisitionParameters.y_0; MWNumericArray x_0 = acquisitionParameters.x_0; MWNumericArray l_y = acquisitionParameters.l_y; MWNumericArray l_x = acquisitionParameters.l_x; MWNumericArray ds = acquisitionParameters.ds; MWNumericArray PRR = acquisitionParameters.PRR; MWNumericArray triggerWidth; if (systemState.LASERconnected == 1) // Wedge { triggerWidth = 130; // [us] } else { triggerWidth = 5; } MWNumericArray f_s = acquisitionParameters.f_s; MWNumericArray inputRange = acquisitionParameters.inputRange_list[acquisitionParameters.inputRange_listIndex]; MWNumericArray z_low = acquisitionParameters.z_low; MWNumericArray z_target = acquisitionParameters.z_target; MWNumericArray z_high = acquisitionParameters.z_high; MWNumericArray v_x = acquisitionParameters.v_x; MWNumericArray acc = acquisitionParameters.acc; MWNumericArray acqDelay = acquisitionParameters.acqDelay; MWNumericArray d_acc = acquisitionParameters.d_acc; MWNumericArray acqRes = acquisitionParameters.acqRes; MWArray acqMode = acquisitionParameters.acqMode; MWNumericArray triggerLevel = acquisitionParameters.triggerLevel; MWNumericArray numberOfWavelength = acquisitionParameters.numberOfWavelength; MWNumericArray BscanUpdate = acquisitionParameters.BscanUpdate; MWArray controllerSerialNumber = acquisitionParameters.controllerSerialNumber; MWNumericArray quickScan = 0; //get number of wavelength from comment box if (!string.IsNullOrEmpty(comment)) { char[] delimiterChars = { ' ', ',', '.', ':', ';', '\t' }; string[] tokens = comment.Split(delimiterChars); int[] convertedItems = Array.ConvertAll <string, int>(tokens, int.Parse); numberOfWavelength = convertedItems.Length; //Console.WriteLine(convertedItems); } // copy file parameters to structure string[] fieldNames2 = { "y_0", "x_0", "l_y", "l_x", "ds", "PRR", "triggerWidth", "f_s", "inputRange", "z_low", "z_target", "z_high", "v_x", "acc", "acqDelay", "d_acc", "acqRes","acqMode", "triggerLevel","numberOfWavelength", "BscanUpdate", "controllerSerialNumber", "quickScan" }; MWStructArray aP = new MWStructArray(1, 1, fieldNames2); aP.SetField("y_0", y_0); aP.SetField("x_0", x_0); aP.SetField("l_y", l_y); aP.SetField("l_x", l_x); aP.SetField("ds", ds); aP.SetField("PRR", PRR); aP.SetField("triggerWidth", triggerWidth); aP.SetField("f_s", f_s); aP.SetField("inputRange", inputRange); aP.SetField("z_low", z_low); aP.SetField("z_target", z_target); aP.SetField("z_high", z_high); aP.SetField("v_x", v_x); aP.SetField("acc", acc); aP.SetField("acqDelay", acqDelay); aP.SetField("d_acc", d_acc); aP.SetField("acqRes", acqRes); aP.SetField("acqMode", acqMode); aP.SetField("triggerLevel", triggerLevel); aP.SetField("numberOfWavelength", numberOfWavelength); aP.SetField("BscanUpdate", BscanUpdate); aP.SetField("controllerSerialNumber", controllerSerialNumber); aP.SetField("quickScan", quickScan); // Define reconstruction parameters MWNumericArray t_focus = detectorParameters.t_focus; // copy file parameters to structure string[] fieldNames3 = { "t_focus" }; MWStructArray dP = new MWStructArray(1, 1, fieldNames3); dP.SetField("t_focus", t_focus); // Define reconstruction parameters MWNumericArray v_s = reconstructionParameters.v_s; // copy file parameters to structure string[] fieldNames4 = { "v_s" }; MWStructArray rP = new MWStructArray(1, 1, fieldNames4); rP.SetField("v_s", v_s); try { //if (systemState.LASERconnected == 0 || systemState.DAQconnected == 0 || systemState.STAGESconnected == 0) if (systemState.DAQconnected == 0 || systemState.STAGESconnected == 0) { iScanClass_mock obj_mock = null; obj_mock = new iScanClass_mock(); obj_mock.iScan_mock(fP, aP, dP, rP); } else { // choose right kernel for stages switch (systemState.DAQconnected) { case 1: // Gage if (acquisitionParameters.triggerMode == 0) { iScanClass_OPO obj = null; obj = new iScanClass_OPO(); obj.iScan_dual(fP, aP, dP, rP); } else { iScanClass_trig obj_trig = null; obj_trig = new iScanClass_trig(); obj_trig.iScan_trig(fP, aP, dP, rP); } break; case 2: // Alazar if (acquisitionParameters.triggerMode == 0) { iScanClass_Alazar obj_Alazar = null; obj_Alazar = new iScanClass_Alazar(); obj_Alazar.iScan_Alazar(fP, aP, dP, rP); } else { Console.WriteLine("ERROR: Alazar external trigger not yet implmented."); } break; default: Console.WriteLine("ERROR: Settings say there is no DAQ connected."); break; } // switch off laser and close connection //if (systemState.LASERconnected == 1 || systemState.LASERconnected == 2) { // switch laser off and close connection multiLaser.q_switch(false); multiLaser.lamp(false); //cancelAcq_Button.Click -= multiLaser.laserHandle; } } } catch (Exception e) { // check if laser emission can be stopped if (multiLaser != null) { try { multiLaser.q_switch(false); multiLaser.lamp(false); //cancelAcq_Button.Click -= multiLaser.laserHandle; } catch { Console.WriteLine("WARNING: switch off laser EMISSION if necessary."); }; } if (!e.Message.Contains("ERROR:")) { Console.WriteLine("ERROR:" + e.Message); } Console.WriteLine("\n"); Console.WriteLine("Status-Acq: 1.00"); } // write xml-file XDocument acqXML = new XDocument( new XElement("acquisitionParameters", new XElement("l_y", l_y.ToString()), new XElement("l_x", l_x.ToString()), new XElement("ds", ds.ToString()), new XElement("PRR", PRR.ToString()), new XElement("laserEnergy", acquisitionParameters.laserPower.ToString()), new XElement("f_s", f_s.ToString()), new XElement("inputRange", inputRange.ToString()), new XElement("z_low", z_low.ToString()), new XElement("z_high", z_high.ToString()), new XElement("numberOfWavelength", numberOfWavelength.ToString()), new XElement("comment", comment) ) ); acqXML.Declaration = new XDeclaration("1.0", "utf-8", "true"); string filename = acqFolder.ToString() + dataName.ToString() + ".xml"; acqXML.Save(@filename); }