public DataCubeStreamWriter(string filename)
 {
     _FileName     = filename;
     _FileStream   = new FileStream(_FileName, FileMode.Create, FileAccess.Write);
     _BinaryWriter = new BinaryWriter(_FileStream);
     _Descriptor   = new DataCubeDescriptor();
 }
Пример #2
0
 public DataCubeStreamReader(string filename)
 {
     _FileName   = filename;
     Scale       = 1;
     _Descriptor = new DataCubeDescriptor();
     NumTimeStep = 0;
     MaxTimeStep = 0;
 }
Пример #3
0
        public static void Serialize(string filename, DataCubeDescriptor descriptor)
        {
            XmlSerializer xs     = new XmlSerializer(typeof(DataCubeDescriptor));
            Stream        stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Read);

            xs.Serialize(stream, descriptor);
            stream.Close();
        }
        /// <summary>
        /// 3D array: [variable][step][feature]
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="data"></param>
        /// <param name="varNames"></param>
        /// <param name="feaNum"></param>
        public void WriteAll(DataCube <float> mat)
        {
            var varNames = mat.Variables;
            int steps    = mat.Size[1];
            int feaNum   = mat.Size[2];
            int varnum   = varNames.Length;

            _BinaryWriter.Write(varnum);
            for (int i = 0; i < varnum; i++)
            {
                int varname_len = varNames[i].Length;
                _BinaryWriter.Write(varname_len);
                _BinaryWriter.Write(varNames[i].ToCharArray());
                _BinaryWriter.Write(feaNum);
            }


            for (int i = 0; i < steps; i++)
            {
                for (int s = 0; s < feaNum; s++)
                {
                    for (int v = 0; v < varnum; v++)
                    {
                        _BinaryWriter.Write(mat[v, i, s]);
                    }
                }
            }

            if (mat.DateTimes != null)
            {
                _Descriptor.NVar       = mat.Size[0];
                _Descriptor.NTimeStep  = mat.Size[1];
                _Descriptor.NCell      = mat.Size[2];
                _Descriptor.TimeStamps = mat.DateTimes;
                DataCubeDescriptor.Serialize(_FileName + ".xml", _Descriptor);
            }

            Close();
        }
Пример #5
0
        public void Open()
        {
            var xml = _FileName + ".xml";

            if (File.Exists(xml))
            {
                _Descriptor = DataCubeDescriptor.Deserialize(xml);
            }
            Scan();

            _FileStream   = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            _BinaryReader = new BinaryReader(_FileStream);

            var varnum = _BinaryReader.ReadInt32();

            Variables = new string[varnum];

            for (int i = 0; i < varnum; i++)
            {
                int varname_len = _BinaryReader.ReadInt32();
                Variables[i] = new string(_BinaryReader.ReadChars(varname_len)).Trim();
                FeatureCount = _BinaryReader.ReadInt32();
            }
        }
Пример #6
0
        public void LoadDataCubeSingle(Dictionary <int, int> mapping, int var_index)
        {
            var xml = _FileName + ".xml";

            if (File.Exists(xml))
            {
                _Descriptor = DataCubeDescriptor.Deserialize(xml);
            }
            if (MaxTimeStep <= 0 || NumTimeStep == 0)
            {
                Scan();
                MaxTimeStep = NumTimeStep;
            }
            int          feaNum   = 0;
            int          varnum   = 0;
            int          nstep    = StepsToLoad;
            int          nhru     = mapping.Keys.Count;
            int          progress = 0;
            FileStream   fs       = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br       = new BinaryReader(fs);

            try
            {
                varnum    = br.ReadInt32();
                Variables = new string[varnum];

                for (int i = 0; i < varnum; i++)
                {
                    int varname_len = br.ReadInt32();
                    Variables[i] = new string(br.ReadChars(varname_len)).Trim();
                    feaNum       = br.ReadInt32();
                }

                OnLoading(0);
                if (DataCube == null)
                {
                    DataCube           = new DataCube <float>(Variables.Length, nstep, nhru, true);
                    DataCube.Variables = Variables;
                }
                if (!DataCube.IsAllocated(var_index) || DataCube.Size[1] != nstep)
                {
                    DataCube.Allocate(var_index);
                }
                var vv = new float[feaNum];
                for (int t = 0; t < nstep; t++)
                {
                    for (int s = 0; s < feaNum; s++)
                    {
                        vv[s] = br.ReadSingle() * Scale;
                    }
                    for (int i = 0; i < nhru; i++)
                    {
                        DataCube[var_index, t, i] = vv[mapping[i + 1]];
                    }
                    progress = Convert.ToInt32(t * 100 / nstep);
                    OnLoading(progress);
                }
                br.Close();
                fs.Close();
                if (_Descriptor.TimeStamps != null)
                {
                    DataCube.DateTimes = new DateTime[nstep];
                    for (int t = 0; t < nstep; t++)
                    {
                        DataCube.DateTimes[t] = _Descriptor.TimeStamps[t];
                    }
                }
                OnDataCubedLoaded(DataCube);
            }
            catch (Exception ex)
            {
                br.Close();
                fs.Close();
                OnLoadFailed("Failed to load. Error message: " + ex.Message);
            }
        }
Пример #7
0
        public override void LoadDataCube(int var_index)
        {
            var xml = _FileName + ".xml";

            if (File.Exists(xml))
            {
                _Descriptor = DataCubeDescriptor.Deserialize(xml);
            }
            if (MaxTimeStep <= 0 || NumTimeStep == 0)
            {
                Scan();
                MaxTimeStep = NumTimeStep;
            }

            int          feaNum   = 0;
            int          varnum   = 0;
            int          nstep    = StepsToLoad;
            int          progress = 0;
            FileStream   fs       = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br       = new BinaryReader(fs);

            varnum    = br.ReadInt32();
            Variables = new string[varnum];
            try
            {
                for (int i = 0; i < varnum; i++)
                {
                    int varname_len = br.ReadInt32();
                    Variables[i] = new string(br.ReadChars(varname_len)).Trim();
                    feaNum       = br.ReadInt32();
                }
                OnLoading(0);
                if (DataCube == null)
                {
                    DataCube           = new DataCube <float>(Variables.Length, nstep, feaNum, true);
                    DataCube.Variables = Variables;
                }
                if (!DataCube.IsAllocated(var_index) || DataCube.Size[1] != nstep)
                {
                    DataCube.Allocate(var_index);
                }

                for (int t = 0; t < nstep; t++)
                {
                    var buf = new float[feaNum];
                    for (int s = 0; s < feaNum; s++)
                    {
                        br.ReadBytes(4 * var_index);
                        buf[s] = br.ReadSingle() * Scale;
                        br.ReadBytes(4 * (varnum - var_index - 1));
                    }
                    DataCube.ILArrays[var_index][t, ":"] = buf;
                    progress = Convert.ToInt32(t * 100 / nstep);
                    OnLoading(progress);
                }
                br.Close();
                fs.Close();
                if (_Descriptor.TimeStamps != null)
                {
                    DataCube.DateTimes = new DateTime[nstep];
                    for (int t = 0; t < nstep; t++)
                    {
                        DataCube.DateTimes[t] = _Descriptor.TimeStamps[t];
                    }
                }
                OnDataCubedLoaded(DataCube);
            }
            catch (Exception ex)
            {
                br.Close();
                fs.Close();
                OnLoadFailed("Failed to load. Error message: " + ex.Message);
            }
        }
Пример #8
0
        public override void LoadDataCube()
        {
            var xml = _FileName + ".xml";

            if (File.Exists(xml))
            {
                _Descriptor = DataCubeDescriptor.Deserialize(xml);
            }
            if (MaxTimeStep <= 0 || NumTimeStep == 0)
            {
                Scan();
                MaxTimeStep = NumTimeStep;
            }
            int          feaNum = 0;
            int          varnum = 0;
            int          nstep  = StepsToLoad;
            FileStream   fs     = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br     = new BinaryReader(fs);

            try
            {
                varnum    = br.ReadInt32();
                Variables = new string[varnum];
                for (int i = 0; i < varnum; i++)
                {
                    int varname_len = br.ReadInt32();
                    Variables[i] = new string(br.ReadChars(varname_len)).Trim();
                    feaNum       = br.ReadInt32();
                }
                if (DataCube == null)
                {
                    DataCube = new DataCube <float>(varnum, nstep, FeatureCount);
                }
                OnLoading(0);
                for (int t = 0; t < nstep; t++)
                {
                    for (int s = 0; s < feaNum; s++)
                    {
                        for (int v = 0; v < varnum; v++)
                        {
                            DataCube[v, t, s] = br.ReadSingle() * Scale;
                        }
                    }
                    int progress = Convert.ToInt32(t * 100 / NumTimeStep);
                    OnLoading(progress);
                }
                if (_Descriptor.TimeStamps != null)
                {
                    DataCube.DateTimes = new DateTime[nstep];
                    for (int t = 0; t < nstep; t++)
                    {
                        DataCube.DateTimes[t] = _Descriptor.TimeStamps[t];
                    }
                }
                br.Close();
                fs.Close();
                OnDataCubedLoaded(DataCube);
            }
            catch (Exception ex)
            {
                br.Close();
                fs.Close();
                OnLoadFailed("Failed to load. Error message: " + ex.Message);
            }
        }