Beispiel #1
0
        protected override bool WriteVectors(ICodebook codebook, IPacket packet, float[][] residue, int channel, int offset, int partitionSize)
        {
            var chPtr = 0;

            offset /= _channels;
            for (int c = 0; c < partitionSize;)
            {
                var entry = codebook.DecodeScalar(packet);
                if (entry == -1)
                {
                    return(true);
                }
                for (var d = 0; d < codebook.Dimensions; d++, c++)
                {
                    residue[chPtr][offset] += codebook[entry, d];
                    if (++chPtr == _channels)
                    {
                        chPtr = 0;
                        offset++;
                    }
                }
            }

            return(false);
        }
        public Pair <int, List <IAnswer> > ExtractAnswers(ICodebook codebook, DataTable answers, IEnumerable <ColumnInfo> journalInfoColumns)
        {
            var results = new List <IAnswer>();

            var missingVars = new List <string>();

            foreach (DataRow row in answers.Rows)
            {
                Answer answer    = new Answer();
                var    variables = new List <IVariable>();

                // add journalInfo
                foreach (var info in journalInfoColumns)
                {
                    var col         = info.Column;
                    var columnType  = info.Datatype;
                    var columnWidth = info.ColumnWidth;
                    if (answers.Columns[col] != null)
                    {
                        var value = row[col].ToString();
                        variables.Add(new CodeAnswer(new Code(0, 0, 0, 0, col, col, "", columnType, col, columnWidth), value));
                    }
                }

                // add answers
                foreach (var code in codebook.Codes)  // read each column in row
                {
                    if (answers.Columns[code.Name] != null)
                    {
                        var       value      = row[code.Name].ToString();
                        IVariable codeAnswer = new CodeAnswer(code, value);
                        variables.Add(codeAnswer);
                    }
                    else
                    {
                        var miss = "Missing var: {0} - survey: {1}  row,col,sur,qId: {2},{3},{1},{4}  Q:{5}".F(code.Name, codebook.Id, code.Row, code.Column, code.QuestionId, code.QuestionNumber);
                        if (!missingVars.Contains(miss))
                        {
                            missingVars.Add(miss);
                        }
                    }
                }
                answer.Variables      = variables;
                answer.Id             = codebook.Id;
                answer.AnswerMetadata = AnswerMetadata.GetJournalInfo(row);
                // Key to group by (pid, follow_up)
                answer.SetKey(answer.AnswerMetadata.Pid, answer.AnswerMetadata.FollowUp);
                answer.Projekt = answer.AnswerMetadata.Projekt;
                results.Add(answer);
            }
            foreach (var miss in missingVars)
            {
                Console.Out.WriteLine(miss);
            }

            results = results.OrderBy(r => r.Key).ToList();
            return(new Pair <int, List <IAnswer> >(codebook.Id, results));
        }
Beispiel #3
0
        public bool Set(Switch definition_Id, State state)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Definition_Id == (byte)definition_Id);

            item.NumberOfPoints = (ushort)state; //off- 0, on - 1
            var r = SetData(item);

            return(Convert.ToBoolean(r[0]));
        }
Beispiel #4
0
        private ushort[] GetData(ICodebook item)
        {
            byte readcode = item.Read ?? 0;

            if (readcode == 0)
            {
                throw new ArgumentNullException("readcode is not defined");
            }
            Request request = new Model.Request(readcode, item.Start, item.NumberOfPoints);
            var     data    = _adapter.Transact(request).Data.ToArray();//.TakeWhile(c => c != 0).ToArray();

            return(data);
        }
Beispiel #5
0
 private ushort[] MultyQuery(ICodebook item)
 {
     ushort[] part   = new ushort[] { 1250, 1250 };
     ushort[] result = new ushort[0];
     ushort[] temp;
     foreach (ushort p in part)
     {
         item.NumberOfPoints = p;
         temp       = GetData(item);
         result     = result.Concat(temp).ToArray();
         item.Start = (ushort)(item.Start + (ushort)p);
     }
     return(result);
 }
Beispiel #6
0
        public ushort[] Get(ChannelType channelType, Channel channel)
        {
            ushort[]  r;
            ICodebook item = _codebooks.FirstOrDefault(x => (x.Definition_Id == (byte)channelType) && (x.Channel == (byte)channel));

            if (item.NumberOfPoints == 2501)
            {
                r = MultyQuery(item);
            }
            else
            {
                r = GetData(item);
                // Codebook item = _codebooks.Find(x => (x.Request_Id == 56));
                //.NullableUshortConverter();
                // throw new NotImplementedException();
            }
            return(r);
        }
Beispiel #7
0
        protected override bool WriteVectors(ICodebook codebook, IPacket packet, float[][] residue, int channel, int offset, int partitionSize)
        {
            var res = residue[channel];

            for (int i = 0; i < partitionSize;)
            {
                var entry = codebook.DecodeScalar(packet);
                if (entry == -1)
                {
                    return(true);
                }
                for (int j = 0; j < codebook.Dimensions; i++, j++)
                {
                    res[offset + i] += codebook[entry, j];
                }
            }

            return(false);
        }
Beispiel #8
0
        virtual protected bool WriteVectors(ICodebook codebook, IPacket packet, float[][] residue, int channel, int offset, int partitionSize)
        {
            var res        = residue[channel];
            var steps      = partitionSize / codebook.Dimensions;
            var entryCache = new int[steps];

            for (var i = 0; i < steps; i++)
            {
                if ((entryCache[i] = codebook.DecodeScalar(packet)) == -1)
                {
                    return(true);
                }
            }
            for (var dim = 0; dim < codebook.Dimensions; dim++)
            {
                for (var step = 0; step < steps; step++, offset++)
                {
                    res[offset] += codebook[entryCache[step], dim];
                }
            }
            return(false);
        }
Beispiel #9
0
        public DecisionTreeService(
            DataTable data,
            IDictionary <string, string[]> metaInfo,
            ILogger logger)
        {
            _logger   = logger;
            _codebook = new Codebook(data, metaInfo);

            var vars       = ParseMetaInfo(metaInfo);
            var inputInfo  = vars.Take(vars.Length - 1).ToArray();
            var outputInfo = vars.Last();

            _treeInfo = new TreeInfo()
            {
                Inputs = inputInfo.Select(x => x.Name).ToArray(),
                Output = outputInfo.Name
            };

            var inputs  = _codebook.GetArray(_treeInfo.Inputs);
            var outputs = _codebook.GetArray(_treeInfo.Output);

            _treeBuilder = new Id3Algorithm(inputInfo, outputInfo);
            _tree        = _treeBuilder.Learn(inputs, outputs);
        }
Beispiel #10
0
        private bool LoadBooks(IPacket packet)
        {
            if (!ValidateHeader(packet, PacketSignatureBooks))
            {
                return(false);
            }

            var mdct    = _factory.CreateMdct();
            var huffman = _factory.CreateHuffman();

            // read the books
            var books = new ICodebook[packet.ReadBits(8) + 1];

            for (var i = 0; i < books.Length; i++)
            {
                books[i] = _factory.CreateCodebook();
                books[i].Init(packet, huffman);
            }

            // Vorbis never used this feature, so we just skip the appropriate number of bits
            var times = (int)packet.ReadBits(6) + 1;

            packet.SkipBits(16 * times);

            // read the floors
            var floors = new IFloor[packet.ReadBits(6) + 1];

            for (var i = 0; i < floors.Length; i++)
            {
                floors[i] = _factory.CreateFloor(packet);
                floors[i].Init(packet, _channels, _block0Size, _block1Size, books);
            }

            // read the residues
            var residues = new IResidue[packet.ReadBits(6) + 1];

            for (var i = 0; i < residues.Length; i++)
            {
                residues[i] = _factory.CreateResidue(packet);
                residues[i].Init(packet, _channels, books);
            }

            // read the mappings
            var mappings = new IMapping[packet.ReadBits(6) + 1];

            for (var i = 0; i < mappings.Length; i++)
            {
                mappings[i] = _factory.CreateMapping(packet);
                mappings[i].Init(packet, _channels, floors, residues, mdct);
            }

            // read the modes
            _modes = new IMode[packet.ReadBits(6) + 1];
            for (var i = 0; i < _modes.Length; i++)
            {
                _modes[i] = _factory.CreateMode();
                _modes[i].Init(packet, _channels, _block0Size, _block1Size, mappings);
            }

            // verify the closing bit
            if (!packet.ReadBit())
            {
                throw new InvalidDataException("Book packet did not end on correct bit!");
            }

            // save off the number of bits to read to determine packet mode
            _modeFieldBits = Utils.ilog(_modes.Length - 1);

            _stats.AddPacket(-1, packet.BitsRead, packet.BitsRemaining, packet.ContainerOverheadBits);

            return(true);
        }
Beispiel #11
0
        public void Init(IPacket packet, int channels, int block0Size, int block1Size, ICodebook[] codebooks)
        {
            var maximum_class = -1;

            _partitionClass = new int[(int)packet.ReadBits(5)];
            for (int i = 0; i < _partitionClass.Length; i++)
            {
                _partitionClass[i] = (int)packet.ReadBits(4);
                if (_partitionClass[i] > maximum_class)
                {
                    maximum_class = _partitionClass[i];
                }
            }

            _classDimensions      = new int[++maximum_class];
            _classSubclasses      = new int[maximum_class];
            _classMasterbooks     = new ICodebook[maximum_class];
            _classMasterBookIndex = new int[maximum_class];
            _subclassBooks        = new ICodebook[maximum_class][];
            _subclassBookIndex    = new int[maximum_class][];
            for (int i = 0; i < maximum_class; i++)
            {
                _classDimensions[i] = (int)packet.ReadBits(3) + 1;
                _classSubclasses[i] = (int)packet.ReadBits(2);
                if (_classSubclasses[i] > 0)
                {
                    _classMasterBookIndex[i] = (int)packet.ReadBits(8);
                    _classMasterbooks[i]     = codebooks[_classMasterBookIndex[i]];
                }

                _subclassBooks[i]     = new ICodebook[1 << _classSubclasses[i]];
                _subclassBookIndex[i] = new int[_subclassBooks[i].Length];
                for (int j = 0; j < _subclassBooks[i].Length; j++)
                {
                    var bookNum = (int)packet.ReadBits(8) - 1;
                    if (bookNum >= 0)
                    {
                        _subclassBooks[i][j] = codebooks[bookNum];
                    }
                    _subclassBookIndex[i][j] = bookNum;
                }
            }

            _multiplier = (int)packet.ReadBits(2);

            _range = _rangeLookup[_multiplier];
            _yBits = _yBitsLookup[_multiplier];

            ++_multiplier;

            var rangeBits = (int)packet.ReadBits(4);

            var xList = new List <int>();

            xList.Add(0);
            xList.Add(1 << rangeBits);

            for (int i = 0; i < _partitionClass.Length; i++)
            {
                var classNum = _partitionClass[i];
                for (int j = 0; j < _classDimensions[classNum]; j++)
                {
                    xList.Add((int)packet.ReadBits(rangeBits));
                }
            }
            _xList = xList.ToArray();

            // precalc the low and high neighbors (and init the sort table)
            _lNeigh     = new int[xList.Count];
            _hNeigh     = new int[xList.Count];
            _sortIdx    = new int[xList.Count];
            _sortIdx[0] = 0;
            _sortIdx[1] = 1;
            for (int i = 2; i < _lNeigh.Length; i++)
            {
                _lNeigh[i]  = 0;
                _hNeigh[i]  = 1;
                _sortIdx[i] = i;
                for (int j = 2; j < i; j++)
                {
                    var temp = _xList[j];
                    if (temp < _xList[i])
                    {
                        if (temp > _xList[_lNeigh[i]])
                        {
                            _lNeigh[i] = j;
                        }
                    }
                    else
                    {
                        if (temp < _xList[_hNeigh[i]])
                        {
                            _hNeigh[i] = j;
                        }
                    }
                }
            }

            // precalc the sort table
            for (int i = 0; i < _sortIdx.Length - 1; i++)
            {
                for (int j = i + 1; j < _sortIdx.Length; j++)
                {
                    if (_xList[i] == _xList[j])
                    {
                        throw new System.IO.InvalidDataException();
                    }

                    if (_xList[_sortIdx[i]] > _xList[_sortIdx[j]])
                    {
                        // swap the sort indexes
                        var temp = _sortIdx[i];
                        _sortIdx[i] = _sortIdx[j];
                        _sortIdx[j] = temp;
                    }
                }
            }
        }
Beispiel #12
0
        //3
        public ushort?Get(UintChannelSetting setting, Channel channel)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Definition_Id == (byte)setting && x.Channel == (byte)channel);

            return(GetData(item)[0]); //.NullableUshortConverter();
        }
Beispiel #13
0
        private void importCsvButton_Click(object sender, EventArgs e)
        {
            var dir = FindCodebooks();

            if (dir.Contains("not found"))
            {
                Log("Error: Codebooks could not be found. Check locations, folder 'Codebooks' must be in current directory.");
                //throw new ApplicationException("Codebooks could not be found");
            }

            var codebookFiles = new List <String> {
                @"\codebook_cc.xml", @"\codebook_ccy.xml",
                @"\codebook_ct.xml", @"\codebook_tt.xml", @"\codebook_ycy.xml"
            };

            var fullFilePaths = codebookFiles.Select(f => dir + f);

            CodeBookXmlLoader codebookLoader;

            try
            {
                codebookLoader = new CodeBookXmlLoader(fullFilePaths);
                _codebooks     = codebookLoader.Read();
            } catch (Exception ex)
            {
                Log("Fejl indlæsning kodebøger: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }

            Log("Indlæste kodebøger: " + codebookFiles.Aggregate((a, b) => a + ", " + b));

            // read answers
            var answersLoader = new AnswersCsvLoader();

            Log("Indlæser svar i CSV-format");
            Dictionary <int, DataTable> answers;

            try
            {
                answers = answersLoader.ReadCsvAnswers(_files);
            }
            catch (Exception ex)
            {
                Log("Fejl indlæsning svar: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }


            var answerTables = answers.GroupBy(a => a.Key);

            foreach (var grouping in answerTables)
            {
                var surveyId     = grouping.Key;
                var journalInfos = grouping.SelectMany(group => AnswerInfo.GetJournalInfos(group.Value, surveyId));
                foreach (var journalInfo in journalInfos)
                {
                    AddExportInfo(journalInfo, surveyId);
                }
            }


            var journalInfoColumns = AnswerMetadata.JournalInfoColumns();

            var mixer            = new CodebookAnswerMixer(_codebooks.Values);
            var answersPerSurvey = new Dictionary <int, List <IAnswer> >();

            Log("Importerer svar...");

            int codebookId = 0;

            try
            {
                foreach (var pair in _codebooks)
                {
                    codebookId = pair.Key; //.ToString();
                    ICodebook codebook = pair.Value;
                    if (answers.ContainsKey(codebookId))
                    {
                        var answersTable = answers[codebookId];
                        // get answer table and codebook with same surveyId. Just for trying out
                        var answersForSurvey = mixer.ExtractAnswers(codebook, answersTable, journalInfoColumns);
                        answersPerSurvey.Add(answersForSurvey.First, answersForSurvey.Second);
                    }
                }
            } catch (Exception ex)
            {
                Log("Fejl i mix: " + ex.Message);
                Log("KodebogID: " + codebookId);
                Log(ex.StackTrace);
                throw;
            }

            try
            {
                _importedAnswers = mixer.CollectAnswersByJournal(answersPerSurvey);
            } catch (Exception ex)
            {
                Log("Fejl saml svar: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }

            Log("Svarene er importeret.");

            foreach (var answerBook in _importedAnswers)
            {
                foreach (var journalInfo in answerBook.AnswerMetadataList)
                {
                    AddExportInfo(new AnswerInfo(journalInfo), true);
                }
            }

            importCsvButton.Enabled = false;
            saveButton.Enabled      = true;
        }
Beispiel #14
0
        //1
        public string Get(DeviceAscIIConstant setting)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Definition_Id == (byte)setting);

            return(GetData(item).ToBytes().ToASCIIString());
        }
Beispiel #15
0
        public ushort[] Operation(Getter code)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Request_Id == (int)code);

            return((item.NumberOfPoints == 2501)? MultyQuery(item):GetData(item));
        }
Beispiel #16
0
        public bool Get(Switch definition_Id)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Definition_Id == (byte)definition_Id);

            return(Convert.ToBoolean(GetData(item)[0]));
        }
Beispiel #17
0
        virtual public void Init(IPacket packet, int channels, ICodebook[] codebooks)
        {
            // this is pretty well stolen directly from libvorbis...  BSD license
            _begin           = (int)packet.ReadBits(24);
            _end             = (int)packet.ReadBits(24);
            _partitionSize   = (int)packet.ReadBits(24) + 1;
            _classifications = (int)packet.ReadBits(6) + 1;
            _classBook       = codebooks[(int)packet.ReadBits(8)];

            _cascade = new int[_classifications];
            var acc = 0;

            for (int i = 0; i < _classifications; i++)
            {
                var low_bits = (int)packet.ReadBits(3);
                if (packet.ReadBit())
                {
                    _cascade[i] = (int)packet.ReadBits(5) << 3 | low_bits;
                }
                else
                {
                    _cascade[i] = low_bits;
                }
                acc += icount(_cascade[i]);
            }

            var bookNums = new int[acc];

            for (var i = 0; i < acc; i++)
            {
                bookNums[i] = (int)packet.ReadBits(8);
                if (codebooks[bookNums[i]].MapType == 0)
                {
                    throw new InvalidDataException();
                }
            }

            var entries  = _classBook.Entries;
            var dim      = _classBook.Dimensions;
            var partvals = 1;

            while (dim > 0)
            {
                partvals *= _classifications;
                if (partvals > entries)
                {
                    throw new InvalidDataException();
                }
                --dim;
            }

            // now the lookups
            _books = new ICodebook[_classifications][];

            acc = 0;
            var maxstage = 0;
            int stages;

            for (int j = 0; j < _classifications; j++)
            {
                stages    = Utils.ilog(_cascade[j]);
                _books[j] = new ICodebook[stages];
                if (stages > 0)
                {
                    maxstage = Math.Max(maxstage, stages);
                    for (int k = 0; k < stages; k++)
                    {
                        if ((_cascade[j] & (1 << k)) > 0)
                        {
                            _books[j][k] = codebooks[bookNums[acc++]];
                        }
                    }
                }
            }
            _maxStages = maxstage;

            _decodeMap = new int[partvals][];
            for (int j = 0; j < partvals; j++)
            {
                var val  = j;
                var mult = partvals / _classifications;
                _decodeMap[j] = new int[_classBook.Dimensions];
                for (int k = 0; k < _classBook.Dimensions; k++)
                {
                    var deco = val / mult;
                    val             -= deco * mult;
                    mult            /= _classifications;
                    _decodeMap[j][k] = deco;
                }
            }

            _channels = channels;
        }
Beispiel #18
0
        //2
        public ushort?Get(WavelengthConstant setting)
        {
            ICodebook item = _codebooks.FirstOrDefault(x => x.Definition_Id == (byte)setting);

            return(GetData(item)[0]); //.NullableUshortConverter();
        }