Exemplo n.º 1
0
        // 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;
        }
Exemplo n.º 2
0
        // 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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        // 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;
        }
    }
Exemplo n.º 6
0
        // 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);
        }
Exemplo n.º 7
0
        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());
            }
        }
Exemplo n.º 8
0
        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");
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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");
        }
Exemplo n.º 12
0
        //封装储热数据
        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;
        }
Exemplo n.º 13
0
        //封装储电数据
        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;
        }
Exemplo n.º 14
0
        //封装光热数据
        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;
        }
Exemplo n.º 15
0
        //优化函数
        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;
        }
Exemplo n.º 16
0
        //设备效率
        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;
        }
Exemplo n.º 17
0
        //封装补燃锅炉数据
        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;
        }
Exemplo n.º 18
0
        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);
        }