Ejemplo n.º 1
0
        private static MLCell CreateCellArrayCustom(string name, string[] items)
        {
            var cell = new MLCell(name, new int[] { items.Length, 1 });
            int i    = 0;

            foreach (var item in items)
            {
                double ans = 0;
                if (double.TryParse(items[i], out ans))
                {
                    cell[i] = new MLDouble(null, new double[] { ans }, 1);
                    i++;
                    continue;
                }

                if (items[i].TrimStart().StartsWith("[") && items[i].TrimEnd().EndsWith("]"))
                {
                    cell[i] = CreateCellArrayCustom("",
                                                    items[i].Split(new[] { ' ', '[', ']' }, StringSplitOptions.RemoveEmptyEntries));
                    i++;
                    continue;
                }

                cell[i] = new MLChar(null, (string)items[i].Trim());

                i++;
            }
            return(cell);
        }
Ejemplo n.º 2
0
 private static MLArray CreateCellArray(string name, string[] names)
 {
     MLCell cell = new MLCell(name, new int[] {names.Length, 1});
     for (int i = 0; i < names.Length; i++)
         cell[i] = new MLChar(null, names[i]);
     return cell;
 }
Ejemplo n.º 3
0
        static void DoWrite(string fn, Dictionary <string, MatLab.DoubleList> data, Dictionary <string, List <MLCell> > dataCell, SortedDictionary <string, double> param,
                            List <MLArray> mlList, Hashtable seen)
        {
            log.Info("DoWrite start " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));

            foreach (var item in data)
            {
                double[][] temp    = item.Value.ToArray();
                MLArray    dbarray = new MLDouble(item.Key, temp);
                mlList.Add(dbarray);
                log.Info("DoWrite Double " + item.Key + " " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
            }

            // datacell contains rows
            foreach (var item in dataCell)
            {
                // create msg table
                MLCell temp1 = new MLCell(item.Key + "1", new int[] { 1, item.Value.Count });
                int    a     = 0;
                // add rows to msg table
                foreach (var mlCell in item.Value)
                {
                    temp1[a] = item.Value[a];
                    a++;
                }
                // add table to masterlist
                mlList.Add(temp1);
                log.Info("DoWrite Cell " + item.Key + " " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
            }

            log.Info("DoWrite mllist " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));

            MLCell cell = new MLCell("PARM", new int[] { param.Keys.Count, 2 });
            int    m    = 0;

            foreach (var item in param.Keys)
            {
                cell[m, 0] = new MLChar(null, item.ToString());
                cell[m, 1] = new MLDouble(null, new double[] { (double)param[item] }, 1);
                m++;
            }

            mlList.Add(cell);

            MLArray seenmsg = CreateCellArray("Seen", seen.Keys.Cast <string>().ToArray());

            mlList.Add(seenmsg);

            try
            {
                log.Info("write " + fn + ".mat");
                log.Info("DoWrite before" + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
                MatFileWriter mfw = new MatFileWriter(fn + ".mat", mlList, false);
                log.Info("DoWrite done" + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
            }
            catch (Exception err)
            {
                throw new Exception("There was an error when creating the MAT-file: \n" + err.ToString(), err);
            }
        }
Ejemplo n.º 4
0
 private static MLArray CreateCellArray()
 {
     string[] names = new string[] { "Hello", "World", "I am", "a", "MAT-file" };
     MLCell cell = new MLCell("Names", new int[] { names.Length, 1 });
     for (int i = 0; i < names.Length; i++)
         cell[i] = new MLChar(null, names[i]);
     return cell;
 }
Ejemplo n.º 5
0
        private static MLArray CreateCellArray(string name, string[] names)
        {
            MLCell cell = new MLCell(name, new int[] { names.Length, 1 });

            for (int i = 0; i < names.Length; i++)
            {
                cell[i] = new MLChar(null, names[i]);
            }
            return(cell);
        }
Ejemplo n.º 6
0
        static MLArray CreateCellArray()
        {
            var names = new[] { "Hello", "World", "I am", "a", "MAT-file" };
            var cell  = new MLCell("Names", new[] { names.Length, 1 });

            for (var i = 0; i < names.Length; i++)
            {
                cell[i] = new MLChar(null, names[i]);
            }
            return(cell);
        }
Ejemplo n.º 7
0
        private static MLArray CreateCellArray()
        {
            string[] names = new string[] { "Hello", "World", "I am", "a", "MAT-file" };
            MLCell   cell  = new MLCell("Names", new int[] { names.Length, 1 });

            for (int i = 0; i < names.Length; i++)
            {
                cell[i] = new MLChar(null, names[i]);
            }
            return(cell);
        }
        //public void CreateCSVFile(DataTable dt, string strFilePath)
        //{


        //    #region Export Grid to CSV



        //    // Create the CSV file to which grid data will be exported.


        //    StreamWriter sw = new StreamWriter(strFilePath, false);


        //    // First we will write the headers.


        //    //DataTable dt = m_dsProducts.Tables[0];


        //    int iColCount = dt.Columns.Count;


        //    for (int i = 0; i < iColCount; i++)
        //    {


        //        sw.Write(dt.Columns[i]);


        //        if (i < iColCount - 1)
        //        {


        //            sw.Write(",");


        //        }


        //    }


        //    sw.Write(sw.NewLine);


        //    // Now write all the rows.


        //    foreach (DataRow dr in dt.Rows)
        //    {


        //        for (int i = 0; i < iColCount; i++)
        //        {


        //            if (!Convert.IsDBNull(dr[i]))
        //            {


        //                sw.Write(dr[i].ToString());


        //            }


        //            if (i < iColCount - 1)
        //            {


        //                sw.Write(",");


        //            }


        //        }


        //        sw.Write(sw.NewLine);


        //    }


        //    sw.Close();



        //    #endregion


        //}

        private MLArray createStruct()
        {
            MLStructure outStruct = new MLStructure("kinectData", new int[] { 1, 1 });
            //string[] headers = {"HipCenterX", "HipCenterY", "HipCenterZ", "SpineX", "SpineY", "SpineZ", "ShoulderCenterX",
            //                     "ShoulderCenterY", "ShoulderCenterZ", "HeadX", "HeadY", "HeadZ", "ShoulderLeftX",
            //                 "ShoulderLeftY", "ShoulderLeftZ", "ElbowLeftX", "ElbowLeftY", "ElbowLeftZ", "WristLeftX",
            //                 "WristLeftY", "WristLeftZ", "HandLeftX", "HandLeftY", "HandLeftZ", "ShoulderRightX",
            //                 "ShoulderRightY", "ShoulderRightZ", "ElbowRightX", "ElbowRightY", "ElbowRightZ",
            //                 "WristRightX", "WristRightY", "WristRightZ", "HandRightX", "HandRightY", "HandRightZ",
            //                 "HipLeftX", "HipLeftY", "HipLeftZ", "KneeLeftX", "KneeLeftY", "KneeLeftZ", "AnkleLeftX",
            //                 "AnkleLeftY", "AnkleLeftZ", "FootLeftX", "FootLeftY", "FootLeftZ", "HipRightX", "HipRightY",
            //                 "HipRightZ", "KneeRightX", "KneeRightY", "KneeRightZ", "AnkleRightX", "AnkleRightY",
            //                 "AnkleRightZ", "FootRightX", "FootRightY", "FootRightZ"};

            double criticalC1D  = Convert.ToDouble(criticalC1);
            double criticalC2D  = Convert.ToDouble(criticalC2);
            double criticalC3D  = Convert.ToDouble(criticalC3);
            double criticalC11D = Convert.ToDouble(criticalC11);
            double criticalC21D = Convert.ToDouble(criticalC21);
            double criticalC31D = Convert.ToDouble(criticalC31);
            double criticalC12D = Convert.ToDouble(criticalC12);
            double criticalC22D = Convert.ToDouble(criticalC22);
            double criticalC32D = Convert.ToDouble(criticalC32);
            double criticalC13D = Convert.ToDouble(criticalC13);
            double criticalC23D = Convert.ToDouble(criticalC23);
            double criticalC33D = Convert.ToDouble(criticalC33);
            double criticalC14D = Convert.ToDouble(criticalC14);
            double criticalC24D = Convert.ToDouble(criticalC24);
            double criticalC34D = Convert.ToDouble(criticalC34);

            double[] ccArray = { criticalC1D,  criticalC2D,  criticalC3D,  criticalC11D, criticalC21D, criticalC31D, criticalC12D, criticalC22D, criticalC32D,
                                 criticalC13D, criticalC23D, criticalC33D, criticalC14D, criticalC24D, criticalC34D };

            Double[] skelDataA   = (Double[])skelData.ToArray(typeof(double));
            Double[] gpVectorA   = (Double[])gpVector.ToArray(typeof(double));
            Double[] kinectTiltA = (Double[])kinectTilt.ToArray(typeof(double));

            outStruct["skelData", 0]      = new MLDouble("", skelDataA, 60);
            outStruct["dateHeader", 0]    = new MLChar("", timeStamp);
            outStruct["criticalComps", 0] = new MLDouble("", ccArray, 3);
            outStruct["exercise", 0]      = new MLChar("", exercise);

            MLStructure groundStruct = new MLStructure("", new int[] { 1, 1 });

            groundStruct["height", 0]       = new MLDouble("", new double[] { 0.68 }, 1); // metres?
            groundStruct["gpVector", 0]     = new MLDouble("", gpVectorA, 4);             //metres?
            groundStruct["kinectTilt", 0]   = new MLDouble("", kinectTiltA, 1);           //degrees
            outStruct["groundPlaneData", 0] = groundStruct;

            return(outStruct);
        }
Ejemplo n.º 9
0
        static void DoWrite(string fn, Dictionary <string, DoubleList> data, SortedDictionary <string, double> param,
                            List <MLArray> mlList, Hashtable seen)
        {
            log.Info("DoWrite start " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));

            foreach (var item in data)
            {
                double[][] temp    = item.Value.ToArray();
                MLArray    dbarray = new MLDouble(item.Key, temp);
                mlList.Add(dbarray);
                log.Info("DoWrite " + item.Key + " " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
            }

            log.Info("DoWrite mllist " + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));

            MLCell cell = new MLCell("PARM", new int[] { param.Keys.Count, 2 });
            int    m    = 0;

            foreach (var item in param.Keys)
            {
                cell[m, 0] = new MLChar(null, item.ToString());
                cell[m, 1] = new MLDouble(null, new double[] { (double)param[item] }, 1);
                m++;
            }

            mlList.Add(cell);

            MLArray seenmsg = CreateCellArray("Seen", seen.Keys.Cast <string>().ToArray());

            mlList.Add(seenmsg);

            try
            {
                log.Info("write " + fn + ".mat");
                log.Info("DoWrite before" + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
                MatFileWriter mfw = new MatFileWriter(fn + ".mat", mlList, true);
                log.Info("DoWrite done" + (GC.GetTotalMemory(false) / 1024.0 / 1024.0));
            }
            catch (Exception err)
            {
                CustomMessageBox.Show("There was an error when creating the MAT-file: \n" + err.ToString(),
                                      "MAT-File Creation Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
        }
Ejemplo n.º 10
0
		private static MLArray CreateTestStruct() {
			MLStructure outStruct = new MLStructure("kinectData", new int[] { 1, 1 });
			double[] myRealNums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
			// new MLInt64("IA", myRealNums, myImagNums, length);
			// IA: matlab Name (blank for struct)
			// realNumbers => Double array of the real parts
			// imagNumbers => Double array of the img parts
			// length => dimension of the matrix
			outStruct["skelData", 0] = new MLDouble("", myRealNums, 2);
			outStruct["dateHeader", 0] = new MLChar("", "January 29th... etc...");

			MLStructure groundStruct = new MLStructure("", new int[] { 1, 1 });
			groundStruct["height", 0] = new MLDouble("", new double[] { 0.68 }, 1); // metres?
			groundStruct["gpVector", 0] = new MLDouble("", new double[] {1.4, 1, 1, 1}, 4); //metres?
			groundStruct["kinectTilt", 0] = new MLInt16("", new Int16[]{ -15 }, 1); //degrees
			outStruct["groundPlaneData", 0] = groundStruct;

			return outStruct;
		}
Ejemplo n.º 11
0
        private static MLCell CreateCellArrayCustom(string name, string[] items)
        {
            var cell = new MLCell(name, new int[] { items.Length, 1 });
            int i    = 0;

            foreach (var item in items)
            {
                double ans = 0;
                if (double.TryParse(items[i], out ans))
                {
                    cell[i] = new MLDouble(null, new double[] { ans }, 1);
                    i++;
                    continue;
                }

                cell[i] = new MLChar(null, (string)items[i].Trim());

                i++;
            }
            return(cell);
        }
Ejemplo n.º 12
0
        private static MLArray CreateTestStruct()
        {
            MLStructure outStruct = new MLStructure("kinectData", new int[] { 1, 1 });

            double[] myRealNums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
            // new MLInt64("IA", myRealNums, myImagNums, length);
            // IA: matlab Name (blank for struct)
            // realNumbers => Double array of the real parts
            // imagNumbers => Double array of the img parts
            // length => dimension of the matrix
            outStruct["skelData", 0]   = new MLDouble("", myRealNums, 2);
            outStruct["dateHeader", 0] = new MLChar("", "January 29th... etc...");

            MLStructure groundStruct = new MLStructure("", new int[] { 1, 1 });

            groundStruct["height", 0]       = new MLDouble("", new double[] { 0.68 }, 1);         // metres?
            groundStruct["gpVector", 0]     = new MLDouble("", new double[] { 1.4, 1, 1, 1 }, 4); //metres?
            groundStruct["kinectTilt", 0]   = new MLInt16("", new Int16[] { -15 }, 1);            //degrees
            outStruct["groundPlaneData", 0] = groundStruct;

            return(outStruct);
        }
Ejemplo n.º 13
0
        public async static Task Export(String filename, Project project, ILogger logger = null, CancellationToken cancelletionToken = default(CancellationToken))
        {
            logger?.WriteLineInfo("");
            logger?.WriteLineInfo("Saving project into MAT file!");
            logger?.WriteLineInfo("MAT file location: " + filename);

            List <MLArray> mlList = new List <MLArray>();
            int            pi     = 0;

            foreach (DataStream dataStream in project.DataStreams)
            {
                pi++;
                cancelletionToken.ThrowIfCancellationRequested();

                logger?.WriteLineInfo("Exporting " + dataStream.ShortName + " datastream...");
                logger?.WriteProgress((double)pi / (double)project.DataStreams.Count() * 100.0);

                MLStructure structDataStream = new MLStructure(dataStream.ShortName, new int[] { 1, 1 });
                structDataStream["Name", 0]      = new MLChar(null, dataStream.Name);
                structDataStream["ShortName", 0] = new MLChar(null, dataStream.ShortName);

                if (dataStream.DataLines.Count > 0)
                {
                    // DataLines
                    MLCell arrayDataLines = new MLCell("DataLines", new int[] { dataStream.DataLines.Count, 1 });
                    int    k = 0;
                    foreach (DataLine dataLine in dataStream.DataLines)
                    {
                        MLStructure structDataLine = new MLStructure(dataStream.ShortName, new int[] { 1, 1 });
                        structDataLine["Timestamp", 0]  = new MLDouble("", new double[] { Utils.ConvertToUnixTimestamp(dataLine.TimeStamp) }, 1);
                        structDataLine["TimestampC", 0] = ConvertDateTimeToMLDouble(dataLine.TimeStamp);

                        if (dataLine is ImageDataLine)
                        {
                            structDataLine["ImageFileName", 0] = new MLChar(null, (dataLine as ImageDataLine).ImageFileName);
                        }

                        if (dataLine is VideoDataLine)
                        {
                            structDataLine["VideoFileName", 0] = new MLChar(null, (dataLine as VideoDataLine).VideoFileName);
                        }

                        arrayDataLines[k] = structDataLine;
                        k++;
                    }
                    structDataStream["DataLines", 0] = arrayDataLines;
                }


                if (dataStream is GPSDataStream)
                {
                    GPSDataStream gpsDataStream = dataStream as GPSDataStream;

                    // Event Marker
                    if (gpsDataStream.MarkerEvents.Count > 0)
                    {
                        MLCell arrayMarkerEvents = new MLCell("MarkerEvents", new int[] { gpsDataStream.MarkerEvents.Count, 1 });
                        int    k = 0;
                        foreach (EvenMarkerDataLine evnt in gpsDataStream.MarkerEvents)
                        {
                            MLStructure structEventMarkers = new MLStructure(dataStream.ShortName, new int[] { 1, 1 });
                            structEventMarkers["Timestamp", 0]  = new MLDouble("", new double[] { (double)evnt.TimeStamp.Ticks }, 1);
                            structEventMarkers["TimestampC", 0] = ConvertDateTimeToMLDouble(evnt.TimeStamp);
                            structEventMarkers["Port", 0]       = new MLChar(null, evnt.Port.ToString());
                            arrayMarkerEvents[k] = structEventMarkers;
                            k++;
                        }
                        structDataStream["MarkerEvents", 0] = arrayMarkerEvents;
                    }

                    // Positions
                    if (gpsDataStream.Positions.Count > 0)
                    {
                        double[][] points = new double[gpsDataStream.Positions.Count][];
                        int        k      = 0;
                        foreach (GPSPositionDataLine pt in gpsDataStream.Positions)
                        {
                            points[k]    = new double[5];
                            points[k][0] = Utils.ConvertToUnixTimestamp(pt.TimeStamp);
                            points[k][1] = pt.Lat;
                            points[k][2] = pt.Lon;
                            points[k][3] = pt.Height;
                            points[k][4] = pt.Quality;
                            k++;
                        }
                        MLDouble arrayPoints = new MLDouble("Points", points);
                        structDataStream["Points", 0] = arrayPoints;
                    }
                }

                mlList.Add(structDataStream);
            }

            try
            {
                MatFileWriter mfw = new MatFileWriter(filename, mlList, false);
            }
            catch (Exception ex)
            {
                logger?.WriteLineError("Error occured: " + ex.ToString());
                return;
            }

            logger?.WriteLineInfo("MAT file location: " + filename);
            logger?.WriteLineInfo("Done.");
        }
Ejemplo n.º 14
0
        static void DoWrite(string fn, Dictionary<string, DoubleList> data, SortedDictionary<string, double> param,
            List<MLArray> mlList, Hashtable seen)
        {
            log.Info("DoWrite start " + (GC.GetTotalMemory(false)/1024.0/1024.0));

            foreach (var item in data)
            {
                double[][] temp = item.Value.ToArray();
                MLArray dbarray = new MLDouble(item.Key, temp);
                mlList.Add(dbarray);
                log.Info("DoWrite " + item.Key + " " + (GC.GetTotalMemory(false)/1024.0/1024.0));
            }

            log.Info("DoWrite mllist " + (GC.GetTotalMemory(false)/1024.0/1024.0));

            MLCell cell = new MLCell("PARM", new int[] {param.Keys.Count, 2});
            int m = 0;
            foreach (var item in param.Keys)
            {
                cell[m, 0] = new MLChar(null, item.ToString());
                cell[m, 1] = new MLDouble(null, new double[] {(double) param[item]}, 1);
                m++;
            }

            mlList.Add(cell);

            MLArray seenmsg = CreateCellArray("Seen", seen.Keys.Cast<string>().ToArray());

            mlList.Add(seenmsg);

            try
            {
                log.Info("write " + fn + ".mat");
                log.Info("DoWrite before" + (GC.GetTotalMemory(false)/1024.0/1024.0));
                MatFileWriter mfw = new MatFileWriter(fn + ".mat", mlList, true);
                log.Info("DoWrite done" + (GC.GetTotalMemory(false)/1024.0/1024.0));
            }
            catch (Exception err)
            {
                CustomMessageBox.Show("There was an error when creating the MAT-file: \n" + err.ToString(),
                    "MAT-File Creation Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
        }
        //public void CreateCSVFile(DataTable dt, string strFilePath)
        //{


        //    #region Export Grid to CSV





        //    // Create the CSV file to which grid data will be exported.


        //    StreamWriter sw = new StreamWriter(strFilePath, false);


        //    // First we will write the headers.


        //    //DataTable dt = m_dsProducts.Tables[0];


        //    int iColCount = dt.Columns.Count;


        //    for (int i = 0; i < iColCount; i++)
        //    {


        //        sw.Write(dt.Columns[i]);


        //        if (i < iColCount - 1)
        //        {


        //            sw.Write(",");


        //        }


        //    }


        //    sw.Write(sw.NewLine);


        //    // Now write all the rows.


        //    foreach (DataRow dr in dt.Rows)
        //    {


        //        for (int i = 0; i < iColCount; i++)
        //        {


        //            if (!Convert.IsDBNull(dr[i]))
        //            {


        //                sw.Write(dr[i].ToString());


        //            }


        //            if (i < iColCount - 1)
        //            {


        //                sw.Write(",");


        //            }


        //        }


        //        sw.Write(sw.NewLine);


        //    }


        //    sw.Close();





        //    #endregion


        //}

        private MLArray createStruct()
        {
            MLStructure outStruct = new MLStructure("kinectData", new int[] { 1, 1 });
            //string[] headers = {"HipCenterX", "HipCenterY", "HipCenterZ", "SpineX", "SpineY", "SpineZ", "ShoulderCenterX", 
            //                     "ShoulderCenterY", "ShoulderCenterZ", "HeadX", "HeadY", "HeadZ", "ShoulderLeftX", 
            //                 "ShoulderLeftY", "ShoulderLeftZ", "ElbowLeftX", "ElbowLeftY", "ElbowLeftZ", "WristLeftX", 
            //                 "WristLeftY", "WristLeftZ", "HandLeftX", "HandLeftY", "HandLeftZ", "ShoulderRightX", 
            //                 "ShoulderRightY", "ShoulderRightZ", "ElbowRightX", "ElbowRightY", "ElbowRightZ", 
            //                 "WristRightX", "WristRightY", "WristRightZ", "HandRightX", "HandRightY", "HandRightZ", 
            //                 "HipLeftX", "HipLeftY", "HipLeftZ", "KneeLeftX", "KneeLeftY", "KneeLeftZ", "AnkleLeftX", 
            //                 "AnkleLeftY", "AnkleLeftZ", "FootLeftX", "FootLeftY", "FootLeftZ", "HipRightX", "HipRightY", 
            //                 "HipRightZ", "KneeRightX", "KneeRightY", "KneeRightZ", "AnkleRightX", "AnkleRightY", 
            //                 "AnkleRightZ", "FootRightX", "FootRightY", "FootRightZ"};

            double criticalC1D = Convert.ToDouble(criticalC1);
            double criticalC2D = Convert.ToDouble(criticalC2);
            double criticalC3D = Convert.ToDouble(criticalC3);
            double criticalC11D = Convert.ToDouble(criticalC11);
            double criticalC21D = Convert.ToDouble(criticalC21);
            double criticalC31D = Convert.ToDouble(criticalC31);
            double criticalC12D = Convert.ToDouble(criticalC12);
            double criticalC22D = Convert.ToDouble(criticalC22);
            double criticalC32D = Convert.ToDouble(criticalC32);
            double criticalC13D = Convert.ToDouble(criticalC13);
            double criticalC23D = Convert.ToDouble(criticalC23);
            double criticalC33D = Convert.ToDouble(criticalC33);
            double criticalC14D = Convert.ToDouble(criticalC14);
            double criticalC24D = Convert.ToDouble(criticalC24);
            double criticalC34D = Convert.ToDouble(criticalC34);

            double[] ccArray = { criticalC1D, criticalC2D, criticalC3D, criticalC11D, criticalC21D, criticalC31D, criticalC12D, criticalC22D, criticalC32D,
                                   criticalC13D, criticalC23D, criticalC33D, criticalC14D, criticalC24D, criticalC34D};

            Double[] skelDataA = (Double[])skelData.ToArray(typeof(double));
            Double[] gpVectorA = (Double[])gpVector.ToArray(typeof(double));
            Double[] kinectTiltA = (Double[])kinectTilt.ToArray(typeof(double));

            outStruct["skelData", 0] = new MLDouble("", skelDataA, 60);
            outStruct["dateHeader", 0] = new MLChar("", timeStamp);
            outStruct["criticalComps", 0] = new MLDouble("", ccArray, 3);
            outStruct["exercise", 0] = new MLChar("", exercise);

            MLStructure groundStruct = new MLStructure("", new int[] { 1, 1 });
            groundStruct["height", 0] = new MLDouble("", new double[] { 0.68 }, 1); // metres?
            groundStruct["gpVector", 0] = new MLDouble("", gpVectorA, 4); //metres?
            groundStruct["kinectTilt", 0] = new MLDouble("", kinectTiltA, 1); //degrees
            outStruct["groundPlaneData", 0] = groundStruct;

            return outStruct;
        }
Ejemplo n.º 16
0
        public static void log(string fn)
        {
            // read the file
            string[] filelines = File.ReadAllLines(fn);

            // store all the arrays
            List<MLArray> mlList = new List<MLArray>();
            // store data to putinto the arrays
            Dictionary<string, List<double[]>> data = new Dictionary<string, List<double[]>>();
            // store line item lengths
            Hashtable len = new Hashtable();
            // store whats we have seen in the log
            Hashtable seen = new Hashtable();
            // store the params seen
            SortedDictionary<string, double> param = new SortedDictionary<string, double>();

            // keep track of line no
            int a = 0;

            foreach (var line in filelines)
            {
                a++;
                Console.Write(a + "\r");

                string strLine = line.Replace(", ", ",");
                strLine = strLine.Replace(": ", ":");

                string[] items = strLine.Split(',', ':');

                // process the fmt messages
                if (line.StartsWith("FMT"))
                {
                    // +1 for line no
                    string[] names = new string[items.Length - 5 + 1];
                    names[0] = "LineNo";
                    Array.ConstrainedCopy(items, 5, names, 1, names.Length - 1);

                    MLArray format = CreateCellArray(items[3] + "_label", names);

                    if (items[3] == "PARM")
                    {

                    }
                    else
                    {
                        mlList.Add(format);
                    }

                    len[items[3]] = names.Length;
                } // process param messages
                else if (line.StartsWith("PARM"))
                {
                    param[items[1]] = double.Parse(items[2]);
                }// everyting else is generic
                else
                {
                    // make sure the line is long enough
                    if (items.Length < 2)
                        continue;
                    // check we have a valid fmt message for this message type
                    if (!len.ContainsKey(items[0]))
                        continue;
                    // check the fmt length matchs what the log has
                    if (items.Length != (int)len[items[0]])
                        continue;

                    // make it as being seen
                    seen[items[0]] = 1;

                    double[] dbarray = new double[items.Length];

                    // set line no
                    dbarray[0] = a;

                    for (int n = 1; n < items.Length; n++)
                    {
                        try
                        {
                            dbarray[n] = double.Parse(items[n]);
                        }
                        catch { }
                    }

                    if (!data.ContainsKey(items[0]))
                        data[items[0]] = new List<double[]>();

                    data[items[0]].Add(dbarray);
                }
            }

            foreach (var item in data)
            {
                double[][] temp = item.Value.ToArray();
                MLArray dbarray = new MLDouble(item.Key, temp);
                mlList.Add(dbarray);
            }

            MLCell cell = new MLCell("PARM", new int[] { param.Keys.Count, 2 });
            int m = 0;
            foreach (var item in param.Keys)
            {
                cell[m, 0] = new MLChar(null, item.ToString());
                cell[m, 1] = new MLDouble(null, new double[] { (double)param[item] }, 1);
                m++;
            }

            mlList.Add(cell);

            MLArray seenmsg = CreateCellArray("Seen", seen.Keys.Cast<string>().ToArray());

            mlList.Add(seenmsg);

            try
            {
                MatFileWriter mfw = new MatFileWriter(fn + ".mat", mlList, true);
            }
            catch (Exception err)
            {
                MessageBox.Show("There was an error when creating the MAT-file: \n" + err.ToString(),
                    "MAT-File Creation Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
        }
Ejemplo n.º 17
0
        public static void log(string fn)
        {
            string[] filelines;

            if (fn.ToLower().EndsWith(".bin"))
            {
                filelines = BinaryLog.ReadLog(fn).ToArray();
            }
            else
            {
                // read the file
                filelines = File.ReadAllLines(fn);
            }

            // store all the arrays
            List <MLArray> mlList = new List <MLArray>();
            // store data to putinto the arrays
            Dictionary <string, List <double[]> > data = new Dictionary <string, List <double[]> >();
            // store line item lengths
            Hashtable len = new Hashtable();
            // store whats we have seen in the log
            Hashtable seen = new Hashtable();
            // store the params seen
            SortedDictionary <string, double> param = new SortedDictionary <string, double>();

            // keep track of line no
            int a = 0;

            foreach (var line in filelines)
            {
                a++;
                Console.Write(a + "\r");

                string strLine = line.Replace(", ", ",");
                strLine = strLine.Replace(": ", ":");

                string[] items = strLine.Split(',', ':');

                // process the fmt messages
                if (line.StartsWith("FMT"))
                {
                    // +1 for line no
                    string[] names = new string[items.Length - 5 + 1];
                    names[0] = "LineNo";
                    Array.ConstrainedCopy(items, 5, names, 1, names.Length - 1);

                    MLArray format = CreateCellArray(items[3] + "_label", names);

                    if (items[3] == "PARM")
                    {
                    }
                    else
                    {
                        mlList.Add(format);
                    }

                    len[items[3]] = names.Length;
                } // process param messages
                else if (line.StartsWith("PARM"))
                {
                    try
                    {
                        param[items[1]] = double.Parse(items[2], CultureInfo.InvariantCulture);
                    }
                    catch { }
                }// everyting else is generic
                else
                {
                    // make sure the line is long enough
                    if (items.Length < 2)
                    {
                        continue;
                    }
                    // check we have a valid fmt message for this message type
                    if (!len.ContainsKey(items[0]))
                    {
                        continue;
                    }
                    // check the fmt length matchs what the log has
                    if (items.Length != (int)len[items[0]])
                    {
                        continue;
                    }

                    // make it as being seen
                    seen[items[0]] = 1;

                    double[] dbarray = new double[items.Length];

                    // set line no
                    dbarray[0] = a;

                    for (int n = 1; n < items.Length; n++)
                    {
                        try
                        {
                            dbarray[n] = double.Parse(items[n], CultureInfo.InvariantCulture);
                        }
                        catch { }
                    }

                    if (!data.ContainsKey(items[0]))
                    {
                        data[items[0]] = new List <double[]>();
                    }

                    data[items[0]].Add(dbarray);
                }
            }

            foreach (var item in data)
            {
                double[][] temp    = item.Value.ToArray();
                MLArray    dbarray = new MLDouble(item.Key, temp);
                mlList.Add(dbarray);
            }

            MLCell cell = new MLCell("PARM", new int[] { param.Keys.Count, 2 });
            int    m    = 0;

            foreach (var item in param.Keys)
            {
                cell[m, 0] = new MLChar(null, item.ToString());
                cell[m, 1] = new MLDouble(null, new double[] { (double)param[item] }, 1);
                m++;
            }

            mlList.Add(cell);

            MLArray seenmsg = CreateCellArray("Seen", seen.Keys.Cast <string>().ToArray());

            mlList.Add(seenmsg);

            try
            {
                MatFileWriter mfw = new MatFileWriter(fn + ".mat", mlList, true);
            }
            catch (Exception err)
            {
                MessageBox.Show("There was an error when creating the MAT-file: \n" + err.ToString(),
                                "MAT-File Creation Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
        }
Ejemplo n.º 18
0
        public static void ExportHotFrame(String rootFolder, String annotationName, HotFrame frame,
                                          MatlabExporterOptions options = MatlabExporterOptions.Overwrite, ILogger logger = null, CancellationToken cancelletionToken = default(CancellationToken))
        {
            // delete features

            /*List<Feature> newFeatureSet = new List<Feature>();
             * foreach (Feature feature in frame.Features)
             * {
             *  if (feature.DataStream != null) newFeatureSet.Add(feature);
             * }
             * frame.Features = newFeatureSet;*/


            String folderName  = rootFolder + "\\frame_" + annotationName;
            String matFilePath = folderName + "\\frame_" + annotationName + ".mat";

            Directory.CreateDirectory(folderName);

            logger?.WriteLineInfo("");
            logger?.WriteLineInfo("Convert frame to Matlab MAT format and export images!");
            logger?.WriteLineInfo("Export folder: " + folderName);
            logger?.WriteLineInfo("MAT file location: " + matFilePath);

            List <MLArray> mlList = new List <MLArray>();
            Dictionary <DataStream, List <VeloFeature> > velodyneData = new Dictionary <DataStream, List <VeloFeature> >();

            if ((options == MatlabExporterOptions.Append) && (File.Exists(matFilePath)))
            {
                MatFileReader matReader = new MatFileReader(matFilePath);
                mlList = matReader.Data;
            }

            int i = 0;

            foreach (Feature feature in frame.Features)
            {
                logger?.WriteLineInfo("Exporting: " + feature.DataStream.ShortName);

                MLStructure structFeatures = new MLStructure(feature.DataStream.ShortName, new int[] { 1, 1 });
                structFeatures["Name", 0]      = new MLChar(null, feature.DataStream.Name);
                structFeatures["ShortName", 0] = new MLChar(null, feature.DataStream.ShortName);

                if (cancelletionToken.IsCancellationRequested == true)
                {
                    logger?.WriteLineWarning("Export cancelled!");
                    return;
                }

                if (feature is GPSFeature)
                {
                    var gpsFeature = feature as GPSFeature;
                    structFeatures["Lat", 0]     = new MLDouble("", new double[] { gpsFeature.Position.Lat }, 1);
                    structFeatures["Lon", 0]     = new MLDouble("", new double[] { gpsFeature.Position.Lon }, 1);
                    structFeatures["Height", 0]  = new MLDouble("", new double[] { gpsFeature.Position.Height }, 1);
                    structFeatures["Quality", 0] = new MLDouble("", new double[] { gpsFeature.Position.Quality }, 1);

                    mlList.Add(structFeatures);
                }
                else if (feature is ImageFeature)
                {
                    ImageFeature imageFeature = feature as ImageFeature;
                    structFeatures["Timestamp", 0]  = new MLDouble("", new double[] { Utils.ConvertToUnixTimestamp(imageFeature.TimeStamp) }, 1);
                    structFeatures["TimestampC", 0] = ConvertDateTimeToMLDouble(imageFeature.TimeStamp);

                    double[][] points = new double[imageFeature.Points.Count][];
                    int        k      = 0;
                    foreach (ImagePoint pt in ((ImageFeature)feature).Points)
                    {
                        points[k]    = new double[3];
                        points[k][0] = pt.ID;
                        points[k][1] = pt.X;
                        points[k][2] = pt.Y;
                        k++;
                    }

                    if (k != 0)
                    {
                        MLDouble arrayPoints = new MLDouble("Points", points);
                        structFeatures["Points", 0] = arrayPoints;
                    }



                    // save images
                    if (imageFeature.Image != null)
                    {
                        using (Bitmap img = new Bitmap(imageFeature.Image))
                        {
                            img.Save(folderName + "\\frame_" + annotationName + "_" + feature.DataStream.ShortName + ".bmp");
                        }

                        // you can export the images here, but it's very slow and the code also needs to be tested!

                        /*using (Bitmap img = new Bitmap(imageFeature.Image))
                         * {
                         *
                         *  int[] dims = new int[] { img.Width, img.Height, 3 };
                         *  MLDouble arrImg = new MLDouble("Image", dims);
                         *  for (int i = 0; i < img.Width; i++)
                         *  {
                         *      for (int j = 0; j < img.Height; j++)
                         *      {
                         *          Color col = img.GetPixel(i, j);
                         *          arrImg.Set(col.R, i, j + img.Height * 0);
                         *          arrImg.Set(col.G, i, j + img.Height * 1);
                         *          arrImg.Set(col.B, i, j + img.Height * 2);
                         *      }
                         *  }
                         *
                         *  structFeatures["Image", 0] = arrImg;
                         * }*/
                    }

                    mlList.Add(structFeatures);
                }
                else if (feature is VeloFeature)
                {
                    VeloFeature veloFeature = feature as VeloFeature;
                    // if key does not exist create one
                    if (!velodyneData.ContainsKey(veloFeature.DataStream))
                    {
                        velodyneData.Add(veloFeature.DataStream, new List <VeloFeature>());
                    }

                    velodyneData[veloFeature.DataStream].Add(veloFeature);
                }

                i++;
                logger?.WriteProgress((double)i / (double)frame.Features.Count() * 100.0);
            }


            // ok, now finalize velodyne data
            foreach (KeyValuePair <DataStream, List <VeloFeature> > entry in velodyneData)
            {
                if (cancelletionToken.IsCancellationRequested == true)
                {
                    logger?.WriteLineWarning("Export cancelled!");
                    return;
                }

                MLStructure structFeatures = new MLStructure(entry.Key.ShortName, new int[] { 1, 1 });
                structFeatures["Name", 0]      = new MLChar(null, entry.Key.Name);
                structFeatures["ShortName", 0] = new MLChar(null, entry.Key.ShortName);
                structFeatures["TimeStamp", 0] = new MLDouble("", new double[] { Utils.ConvertToUnixTimestamp(frame.Timestamp) }, 1);

                // get number of points
                long n_points = 0;
                foreach (VeloFeature feature in entry.Value)
                {
                    n_points += feature.Points.Count();
                }

                if (n_points == 0)
                {
                    logger?.WriteLineWarning(entry.Key.ShortName + ": No features!");
                    continue;
                }

                // populate points
                double[][] points = new double[n_points][];
                int        k      = 0;
                foreach (VeloFeature feature in entry.Value)
                {
                    foreach (VelodynePoint pt in feature.Points)
                    {
                        points[k]    = new double[9];
                        points[k][0] = feature.ID;
                        points[k][1] = pt.X;
                        points[k][2] = pt.Y;
                        points[k][3] = pt.Z;
                        points[k][4] = Convert.ToDouble(pt.Intensity);
                        points[k][5] = pt.Distance;
                        points[k][6] = pt.Hz;
                        points[k][7] = pt.Vz;
                        points[k][8] = pt.InternalTime;
                        k++;
                    }
                }

                MLDouble arrayPoints = new MLDouble("Points", points);
                structFeatures["Points", 0] = arrayPoints;

                mlList.Add(structFeatures);
            }

            try
            {
                logger?.WriteLineInfo("Saving mat file...");
                MatFileWriter mfw = new MatFileWriter(matFilePath, mlList, true);
            }
            catch (Exception ex)
            {
                logger?.WriteLineError("Error occured: " + ex.ToString());
                return;
            }

            logger?.WriteProgress(100.0);
            logger?.WriteLineInfo("Done.");
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Reads <c>miMATRIX</c> from the input stream.
        /// </summary>
        /// <remarks>
        /// If reading was not finished (which is normal for filtered results)
        /// returns <c>null</c>.
        /// </remarks>
        /// <param name="buf">The <c>BinaryReader</c> input stream.</param>
        /// <param name="isRoot">When <c>true</c> informs that if this is a top level
        /// matrix.</param>
        /// <returns><c>MLArray</c> or <c>null</c> if matrix does not match <c>filter</c></returns>
        private MLArray ReadMatrix( Stream buf, bool isRoot )
        {
            // result
            MLArray mlArray = null;
            ISMatTag tag;

            // read flags
            int[] flags = ReadFlags( buf );
            int attributes = (flags.Length != 0 ) ? flags[0] : 0;
            int nzmax = ( flags.Length != 0 ) ? flags[1] : 0;
            int type = attributes & 0xff;

            // read Array dimension
            int[] dims = ReadDimension( buf );

            // read Array name
            string name = ReadName( buf );

            // If this array is filtered out return immediately
            if( isRoot && !_filter.Matches(name) )
            {
                return null;
            }

            // read data
            switch (type)
            {
                case MLArray.mxSTRUCT_CLASS:
                    MLStructure mlStruct = new MLStructure(name, dims, type, attributes);

                    BinaryReader br = new BinaryReader(buf);

                    // field name length - this subelement always uses the compressed data element format
                    tag = new ISMatTag(br.BaseStream);
                    int maxlen = br.ReadInt32();

                    // Read fields data as Int8
                    tag = new ISMatTag(br.BaseStream);
                    // calculate number of fields
                    int numOfFields = tag.Size / maxlen;

                    // padding after field names
                    int padding = (tag.Size % 8) != 0 ? 8 - tag.Size % 8 : 0;

                    string[] fieldNames = new string[numOfFields];
                    for (int i = 0; i < numOfFields; i++)
                    {
                        byte[] names = new byte[maxlen];
                        br.Read(names, 0, names.Length);
                        fieldNames[i] = ZeroEndByteArrayToString(names);
                    }
                    br.ReadBytes(padding);

                    // read fields
                    for (int index = 0; index < mlStruct.M * mlStruct.N; index++)
                    {
                        for (int i = 0; i < numOfFields; i++)
                        {
                            // read matrix recursively
                            tag = new ISMatTag(br.BaseStream);
                            if (tag.Size > 0)
                            {
                                MLArray fieldValue = ReadMatrix(br.BaseStream, false);
                                mlStruct[fieldNames[i], index] = fieldValue;
                            }
                            else
                            {
                                mlStruct[fieldNames[i], index] = new MLEmptyArray();
                            }
                        }
                    }
                    mlArray = mlStruct;
                    //br.Close();
                    break;
                case MLArray.mxCELL_CLASS:
                    MLCell cell = new MLCell(name, dims, type, attributes);
                    for (int i = 0; i < cell.M * cell.N; i++)
                    {
                        tag = new ISMatTag(buf);
                        if (tag.Size > 0)
                        {
                            MLArray cellmatrix = ReadMatrix(buf, false);
                            cell[i] = cellmatrix;
                        }
                        else
                        {
                            cell[i] = new MLEmptyArray();
                        }
                    }
                    mlArray = cell;
                    break;
                case MLArray.mxDOUBLE_CLASS:
                    mlArray = new MLDouble(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray<double>)mlArray).RealByteBuffer,
                        (ByteStorageSupport)mlArray);

                    // read complex
                    if (mlArray.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<double>)mlArray).ImaginaryByteBuffer,
                            (ByteStorageSupport)mlArray);
                    }
                    break;
                case MLArray.mxUINT8_CLASS:
                    mlArray = new MLUInt8(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).RealByteBuffer,
                        (ByteStorageSupport)mlArray);

                    // read complex
                    if (mlArray.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).ImaginaryByteBuffer,
                            (ByteStorageSupport)mlArray);
                    }
                    break;
                case MLArray.mxINT8_CLASS:
                    mlArray = new MLInt8(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).RealByteBuffer,
                        (ByteStorageSupport)mlArray);

                    // read complex
                    if (mlArray.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).ImaginaryByteBuffer,
                            (ByteStorageSupport)mlArray);
                    }
                    break;
                case MLArray.mxUINT64_CLASS:
                    mlArray = new MLUInt64(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).RealByteBuffer,
                        (ByteStorageSupport)mlArray);

                    // read complex
                    if (mlArray.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).ImaginaryByteBuffer,
                            (ByteStorageSupport)mlArray);
                    }
                    break;
                case MLArray.mxINT64_CLASS:
                    mlArray = new MLInt64(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).RealByteBuffer,
                        (ByteStorageSupport)mlArray);

                    // read complex
                    if (mlArray.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<byte>)mlArray).ImaginaryByteBuffer,
                            (ByteStorageSupport)mlArray);
                    }
                    break;
                case MLArray.mxCHAR_CLASS:
                    MLChar mlchar = new MLChar(name, dims, type, attributes);
                    //read real
                    tag = new ISMatTag(buf);
                    char[] ac = tag.ReadToCharArray();
                    for (int i = 0; i < ac.Length; i++)
                    {
                        mlchar.SetChar(ac[i], i);
                    }
                    mlArray = mlchar;
                    break;
                case MLArray.mxSPARSE_CLASS:
                    MLSparse sparse = new MLSparse(name, dims, attributes, nzmax);

                    // read ir (row indices)
                    tag = new ISMatTag(buf);
                    int[] ir = tag.ReadToIntArray();
                    // read jc (column indices)
                    tag = new ISMatTag(buf);
                    int[] jc = tag.ReadToIntArray();

                    // read pr (real part)
                    tag = new ISMatTag(buf);
                    double[] ad1 = tag.ReadToDoubleArray();
                    int n = 0;
                    for (int i = 0; i < ir.Length; i++)
                    {
                        if (i < sparse.N)
                        {
                            n = jc[i];
                        }
                        sparse.SetReal(ad1[i], ir[i], n);
                    }

                    //read pi (imaginary part)
                    if (sparse.IsComplex)
                    {
                        tag = new ISMatTag(buf);
                        double[] ad2 = tag.ReadToDoubleArray();

                        int n1 = 0;
                        for (int i = 0; i < ir.Length; i++)
                        {
                            if (i < sparse.N)
                            {
                                n1 = jc[i];
                            }
                            sparse.SetImaginary(ad2[i], ir[i], n1);
                        }
                    }
                    mlArray = sparse;
                    break;
                default:
                    throw new MatlabIOException("Incorrect Matlab array class: " + MLArray.TypeToString(type));
            }
            return mlArray;
        }
Ejemplo n.º 20
0
    public static void SaveMatFile()
    {
        // create a MATLAB char and double variable and add it to the structure
        //MLChar scoreName = ;
        //MLDouble scoreValue = new MLDouble("", new double[] { 12345 }, 1);
        int maxIter = 0;
        foreach(ActionData ad in ActionData.actionList)
        {
            if(ad.iterationNum > maxIter)
            {
                maxIter = ad.iterationNum;
            }
        }
        string dateLbl = "";
        dateLbl += System.DateTime.Now.Year.ToString();
        dateLbl += System.DateTime.Now.Month.ToString();
        dateLbl += System.DateTime.Now.Day.ToString();
        dateLbl += System.DateTime.Now.ToFileTimeUtc().ToString();

        int chunkSize = 50;
        int effChunkSize = 50;
        int chunk = 0;
        int actionIndex = 0;

        List<string> fieldList = new List<string> ();
        fieldList.Add ("obstacle");
        fieldList.Add ("goal");
        fieldList.Add ("item");
        fieldList.Add ("robot");
        fieldList.Add ("selectedItem");

        while((chunk)*chunkSize < ActionData.actionList.Count)
        {
            int i = 0;
            int ii = 0;
            actionIndex = chunk*chunkSize;
            if(chunkSize + actionIndex >= ActionData.actionList.Count)
                effChunkSize = ActionData.actionList.Count-actionIndex;
            else
                effChunkSize = chunkSize;

            MLStructure structure = new MLStructure("simDat", new int[] { effChunkSize, 1 });
            List<MLArray> mlList = new List<MLArray>();
            MLDouble arr;

            while(actionIndex < ActionData.actionList.Count)
            {
                ActionData ad = actionList[actionIndex] as ActionData;
                structure["speed", i] = new MLDouble("", new double[] {maxIter}, 1);
                structure["beforePos", i] = new MLDouble("", new double[] {ad.beforePos.x,ad.beforePos.y,ad.beforePos.z }, 1);
                structure["beforeOrient", i] = new MLDouble("", new double[] {ad.beforeOrient.eulerAngles.x,ad.beforeOrient.eulerAngles.y,ad.beforeOrient.eulerAngles.z}, 1);
                //Debug.Log(dateLbl+"_"+chunk+"["+i+"]" +"("+ad.beforeOrient.x+","+ad.beforeOrient.y+","+ad.beforeOrient.z+")");

                structure["afterPos", i] = new MLDouble("", new double[] {ad.afterPos.x,ad.afterPos.y,ad.afterPos.z}, 1);
                structure["afterOrient", i] = new MLDouble("", new double[] {ad.afterOrient.eulerAngles.x,ad.afterOrient.eulerAngles.y,ad.afterOrient.eulerAngles.z}, 1);
                structure["robotType", i] = new MLChar("", ad.robotType);
                structure["itemType", i] = new MLChar("", ad.itemType);
                ii=0;

                foreach(string  fieldName in fieldList)
                {
                    int id = ad.positionNames.IndexOf(fieldName);
                    Vector3 vecValue;
                    if(id >= 0)
                        vecValue = ad.positionVecs[id];
                    else
                        vecValue = new Vector3(100,100,100); // We pass an invalid value

                    structure[fieldName, i] = new MLDouble("", new double[] {vecValue.x,vecValue.y,vecValue.z}, 1);
                    ii++;
                }
                i++;
                actionIndex++;
            }

            mlList.Add(structure);

            MatFileWriter mfw = new MatFileWriter("playDat"+dateLbl+"_"+chunk+".mat", mlList, false);
            mfw.GetType();

            Debug.Log ("Saved (" + chunk + ")playDat" + dateLbl + ".mat");

            chunk ++;

            ActionData.actionList = new List<ActionData>();
        }
    }
Ejemplo n.º 21
0
        public static void writeDOTnirs(core.Data data, string filename, int startIdx = 0, int endIdx = Int32.MaxValue)
        {
            // Store the data into the *.nirs matlab format
            try
            {
                int numsamples = data.numsamples;
                int numch      = data.probe.numChannels;
                int naux       = data.auxillaries.Length;

                numsamples = Math.Min(endIdx - startIdx, numsamples - startIdx);


                // save the structure as mat file using MatFileWriter
                List <MLArray> mlList = new List <MLArray>();

                double[][] d   = new double[numsamples][];
                double[][] t   = new double[numsamples][];
                double[][] aux = new double[numsamples][];

                for (int j = startIdx; j < startIdx + numsamples; j++)
                {
                    double[] dloc = new double[numch];

                    for (int i = 0; i < numch; i++)
                    {
                        dloc[i] = data.data[i][j];
                    }
                    try
                    {
                        if (naux > 0)
                        {
                            double[] aloc = new double[naux];
                            for (int ii = 0; ii < naux; ii++)
                            {
                                aloc[ii] = data.auxillaries[ii].data[j];
                            }
                            aux[j - startIdx] = aloc;
                        }
                        else
                        {
                            double[] aa = new double[1];
                            aa[0]             = 0;
                            aux[j - startIdx] = aa;
                        }
                    }
                    catch
                    {
                        //  Console.WriteLine("error writing aux");
                        double[] aa = new double[1];
                        aa[0]             = 0;
                        aux[j - startIdx] = aa;
                    }
                    double[] tt = new double[1];
                    double[] ss = new double[1];
                    ss[0]           = 0;
                    tt[0]           = data.time[j];
                    t[j - startIdx] = tt;
                    d[j - startIdx] = dloc;
                }

                MLDouble mldata = new MLDouble("d", d);
                mlList.Add(mldata);
                MLDouble mlaux = new MLDouble("aux", aux);
                mlList.Add(mlaux);
                MLDouble mltime = new MLDouble("t", t);
                mlList.Add(mltime);

                double[][] s = new double[numsamples][];

                for (int j = startIdx; j < startIdx + numsamples; j++)
                {
                    double[] dloc     = new double[data.stimulus.Count];
                    double   thistime = data.time[j];
                    for (int i = 0; i < data.stimulus.Count; i++)
                    {
                        dloc[i] = 0;
                        for (int k = 0; k < data.stimulus[i].onsets.Count; k++)
                        {
                            double onset = data.stimulus[i].onsets[k];
                            double dur   = data.stimulus[i].duration[k];
                            if (thistime >= onset & thistime <= onset + dur)
                            {
                                dloc[i] = data.stimulus[i].amplitude[k];
                            }
                        }
                    }
                    s[j - startIdx] = dloc;
                }


                MLDouble mls = new MLDouble("s", s);
                mlList.Add(mls);

                MLCell condNames = new MLCell("CondNames", new int[] { 1, data.stimulus.Count });
                for (int i = 0; i < data.stimulus.Count; i++)
                {
                    condNames[0, i] = new MLChar(null, data.stimulus[i].name);
                }
                mlList.Add(condNames);



                // Probe
                MLStructure mlSD = new MLStructure("SD", new int[] { 1, 1 });


                List <string> datasubtype = new List <string>();
                for (int i = 0; i < data.probe.numChannels; i++)
                {
                    if (!datasubtype.Contains(data.probe.ChannelMap[i].datasubtype))
                    {
                        datasubtype.Add(data.probe.ChannelMap[i].datasubtype);
                    }
                }
                double[] lambda = new double[datasubtype.Count];
                for (int i = 0; i < data.probe.numChannels; i++)
                {
                    lambda[datasubtype.IndexOf(data.probe.ChannelMap[i].datasubtype)] = data.probe.ChannelMap[i].wavelength;
                }

                double[][] srcpos = new double[data.probe.numSrc][];
                for (int j = 0; j < data.probe.numSrc; j++)
                {
                    double[] slo = new double[3];
                    for (int i = 0; i < 2; i++)
                    {
                        slo[i] = data.probe.SrcPos[j, i];
                    }
                    slo[2]    = 0;
                    srcpos[j] = slo;
                }


                double[][] detpos = new double[data.probe.numDet][];
                for (int j = 0; j < data.probe.numDet; j++)
                {
                    double[] dlo = new double[3];
                    for (int i = 0; i < 2; i++)
                    {
                        dlo[i] = data.probe.DetPos[j, i];
                    }
                    dlo[2]    = 0;
                    detpos[j] = dlo;
                }



                mlSD["NumDet", 0] = new MLDouble("", new double[] { data.probe.numDet }, 1);
                mlSD["NumSrc", 0] = new MLDouble("", new double[] { data.probe.numSrc }, 1);
                mlSD["Lambda", 0] = new MLDouble("", lambda, 1);
                mlSD["SrcPos", 0] = new MLDouble("", srcpos);
                mlSD["DetPos", 0] = new MLDouble("", detpos);

                if (data.probe.isregistered)
                {
                    double[][] srcpos3d = new double[data.probe.numSrc][];
                    for (int j = 0; j < data.probe.numSrc; j++)
                    {
                        double[] slo = new double[3];
                        for (int i = 0; i < 3; i++)
                        {
                            slo[i] = data.probe.SrcPos3D[j, i];
                        }
                        srcpos3d[j] = slo;
                    }


                    double[][] detpos3d = new double[data.probe.numDet][];
                    for (int j = 0; j < data.probe.numDet; j++)
                    {
                        double[] dlo = new double[3];
                        for (int i = 0; i < 3; i++)
                        {
                            dlo[i] = data.probe.DetPos3D[j, i];
                        }
                        detpos3d[j] = dlo;
                    }
                    mlSD["SrcPos3D", 0] = new MLDouble("", srcpos3d);
                    mlSD["DetPos3D", 0] = new MLDouble("", detpos3d);
                }

                // fixes for HOMER2
                mlSD["SpatialUnit"] = new MLChar("", "mm");



                // Add demographics as a struct
                MLStructure demo = new MLStructure("demographics", new int[] { 1, 1 });
                for (int i = 0; i < data.demographics.Keys.Count; i++)
                {
                    object val    = data.demographics.get(data.demographics.Keys[i]);
                    string valstr = string.Format("{0}", val);

                    demo[data.demographics.Keys[i], 0] = new MLChar("", valstr);
                }
                mlList.Add(demo);

                double[][] ml = new double[data.probe.numChannels][];
                for (int i = 0; i < data.probe.numChannels; i++)
                {
                    double[] m = new double[4];
                    m[0]  = data.probe.ChannelMap[i].sourceindex + 1;
                    m[1]  = data.probe.ChannelMap[i].detectorindex + 1;
                    m[2]  = 0;
                    m[3]  = 1 + datasubtype.IndexOf(data.probe.ChannelMap[i].datasubtype);
                    ml[i] = m;
                }

                MLDouble mlml = new MLDouble("ml", ml);
                mlList.Add(mlml);


                mlSD["MeasList", 0] = new MLDouble("", ml);
                mlList.Add(mlSD);


                MLStructure mlStim = new MLStructure("StimDesign", new int[] { data.stimulus.Count, 1 });
                for (int i = 0; i < data.stimulus.Count; i++)
                {
                    mlStim["name", i] = new MLChar("", data.stimulus[i].name);


                    double[] onset = new double[data.stimulus[i].onsets.Count];
                    for (int ii = 0; ii < data.stimulus[i].onsets.Count; ii++)
                    {
                        onset[ii] = data.stimulus[i].onsets[ii];
                    }
                    double[] dur = new double[data.stimulus[i].duration.Count];
                    for (int ii = 0; ii < data.stimulus[i].duration.Count; ii++)
                    {
                        dur[ii] = data.stimulus[i].duration[ii];
                    }
                    double[] amp = new double[data.stimulus[i].amplitude.Count];
                    for (int ii = 0; ii < data.stimulus[i].amplitude.Count; ii++)
                    {
                        amp[ii] = data.stimulus[i].amplitude[ii];
                    }


                    mlStim["onset", i] = new MLDouble("", onset, 1);
                    mlStim["dur", i]   = new MLDouble("", dur, 1);
                    mlStim["amp", i]   = new MLDouble("", amp, 1);
                }
                if (data.stimulus.Count > 0)
                {
                    mlList.Add(mlStim);
                }

                new MatFileWriter(filename, mlList, false);
            }
            catch
            {
                Console.WriteLine("Unable to save .nirs file");
            }
            return;
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Reads <c>miMATRIX</c> from the input stream.
        /// </summary>
        /// <remarks>
        /// If reading was not finished (which is normal for filtered results)
        /// returns <c>null</c>.
        /// </remarks>
        /// <param name="buf">The <c>BinaryReader</c> input stream.</param>
        /// <param name="isRoot">When <c>true</c> informs that if this is a top level
        /// matrix.</param>
        /// <returns><c>MLArray</c> or <c>null</c> if matrix does not match <c>filter</c></returns>
        private MLArray ReadMatrix(Stream buf, bool isRoot)
        {
            // result
            MLArray  mlArray = null;
            ISMatTag tag;

            // read flags
            int[] flags      = ReadFlags(buf);
            int   attributes = (flags.Length != 0) ? flags[0] : 0;
            int   nzmax      = (flags.Length != 0) ? flags[1] : 0;
            int   type       = attributes & 0xff;

            // read Array dimension
            int[] dims = ReadDimension(buf);

            // read Array name
            string name = ReadName(buf);

            // If this array is filtered out return immediately
            if (isRoot && !_filter.Matches(name))
            {
                return(null);
            }

            // read data
            switch (type)
            {
            case MLArray.mxSTRUCT_CLASS:
                MLStructure mlStruct = new MLStructure(name, dims, type, attributes);

                BinaryReader br = new BinaryReader(buf);

                // field name length - this subelement always uses the compressed data element format
                tag = new ISMatTag(br.BaseStream);
                int maxlen = br.ReadInt32();

                // Read fields data as Int8
                tag = new ISMatTag(br.BaseStream);
                // calculate number of fields
                int numOfFields = tag.Size / maxlen;

                // padding after field names
                int padding = (tag.Size % 8) != 0 ? 8 - tag.Size % 8 : 0;

                string[] fieldNames = new string[numOfFields];
                for (int i = 0; i < numOfFields; i++)
                {
                    byte[] names = new byte[maxlen];
                    br.Read(names, 0, names.Length);
                    fieldNames[i] = ZeroEndByteArrayToString(names);
                }
                br.ReadBytes(padding);

                // read fields
                for (int index = 0; index < mlStruct.M * mlStruct.N; index++)
                {
                    for (int i = 0; i < numOfFields; i++)
                    {
                        // read matrix recursively
                        tag = new ISMatTag(br.BaseStream);
                        if (tag.Size > 0)
                        {
                            MLArray fieldValue = ReadMatrix(br.BaseStream, false);
                            mlStruct[fieldNames[i], index] = fieldValue;
                        }
                        else
                        {
                            mlStruct[fieldNames[i], index] = new MLEmptyArray();
                        }
                    }
                }
                mlArray = mlStruct;
                //br.Close();
                break;

            case MLArray.mxCELL_CLASS:
                MLCell cell = new MLCell(name, dims, type, attributes);
                for (int i = 0; i < cell.M * cell.N; i++)
                {
                    tag = new ISMatTag(buf);
                    if (tag.Size > 0)
                    {
                        MLArray cellmatrix = ReadMatrix(buf, false);
                        cell[i] = cellmatrix;
                    }
                    else
                    {
                        cell[i] = new MLEmptyArray();
                    }
                }
                mlArray = cell;
                break;

            case MLArray.mxDOUBLE_CLASS:
                mlArray = new MLDouble(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <double>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <double>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxSINGLE_CLASS:
                mlArray = new MLSingle(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <float>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <float>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxUINT8_CLASS:
                mlArray = new MLUInt8(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <byte>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <byte>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxINT8_CLASS:
                mlArray = new MLInt8(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <sbyte>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <sbyte>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxUINT16_CLASS:
                mlArray = new MLUInt16(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);

                tag.ReadToByteBuffer(((MLNumericArray <ushort>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <ushort>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxINT16_CLASS:
                mlArray = new MLInt16(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <short>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <short>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxUINT32_CLASS:
                mlArray = new MLUInt32(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);

                tag.ReadToByteBuffer(((MLNumericArray <uint>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <uint>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxINT32_CLASS:
                mlArray = new MLInt32(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <int>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <int>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxUINT64_CLASS:
                mlArray = new MLUInt64(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <ulong>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <ulong>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxINT64_CLASS:
                mlArray = new MLInt64(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                tag.ReadToByteBuffer(((MLNumericArray <long>)mlArray).RealByteBuffer,
                                     (IByteStorageSupport)mlArray);

                // read complex
                if (mlArray.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    tag.ReadToByteBuffer(((MLNumericArray <long>)mlArray).ImaginaryByteBuffer,
                                         (IByteStorageSupport)mlArray);
                }
                break;

            case MLArray.mxCHAR_CLASS:
                MLChar mlchar = new MLChar(name, dims, type, attributes);
                //read real
                tag = new ISMatTag(buf);
                char[] ac = tag.ReadToCharArray();
                for (int i = 0; i < ac.Length; i++)
                {
                    mlchar.SetChar(ac[i], i);
                }
                mlArray = mlchar;
                break;

            case MLArray.mxSPARSE_CLASS:
                MLSparse sparse = new MLSparse(name, dims, attributes, nzmax);

                // read ir (row indices)
                tag = new ISMatTag(buf);
                int[] ir = tag.ReadToIntArray();
                // read jc (column indices)
                tag = new ISMatTag(buf);
                int[] jc = tag.ReadToIntArray();

                // read pr (real part)
                tag = new ISMatTag(buf);
                double[] ad1 = tag.ReadToDoubleArray();
                int      n   = 0;
                for (int i = 0; i < ir.Length; i++)
                {
                    if (i < sparse.N)
                    {
                        n = jc[i];
                    }
                    sparse.SetReal(ad1[i], ir[i], n);
                }

                //read pi (imaginary part)
                if (sparse.IsComplex)
                {
                    tag = new ISMatTag(buf);
                    double[] ad2 = tag.ReadToDoubleArray();

                    int n1 = 0;
                    for (int i = 0; i < ir.Length; i++)
                    {
                        if (i < sparse.N)
                        {
                            n1 = jc[i];
                        }
                        sparse.SetImaginary(ad2[i], ir[i], n1);
                    }
                }
                mlArray = sparse;
                break;

            default:
                throw new MatlabIOException("Incorrect Matlab array class: " + MLArray.TypeToString(type));
            }
            return(mlArray);
        }
Ejemplo n.º 23
0
        private static MLCell CreateCellArrayCustom(string name, string[] items)
        {
            var cell = new MLCell(name, new int[] { items.Length, 1 });
            int i = 0;
            foreach (var item in items)
            {
                double ans = 0;
                if (double.TryParse(items[i], out ans))
                {
                    cell[i] = new MLDouble(null, new double[] { ans }, 1);
                    i++;
                    continue;
                }

                cell[i] = new MLChar(null, (string)items[i].Trim());

                i++;
            }
            return cell;
        }