Beispiel #1
0
        public List <GrayCode> GenerateFactors()
        {
            try
            {
                if (_factors.Count == 0)
                {
                    throw new ArgumentOutOfRangeException();
                }

                var factors = new List <GrayCode>();
                var code    = new List <bool>();
                code.AddRange(Alleles);
                foreach (GrayCode factor in _factors)
                {
                    uint bits      = factor.BitAccuracy;
                    var  newFactor = new GrayCode(0, factor.Config);
                    newFactor.BooleanCode = code.GetRange(0, (int)bits);
                    factors.Add(newFactor);
                    code.RemoveRange(0, (int)bits);
                }

                if (code.Count == 0)
                {
                    return(factors);
                }

                throw new ArgumentOutOfRangeException();
            }
            catch (Exception e)
            {
                throw new Exception("Cant generate factors", e);
            }
        }
Beispiel #2
0
 public void GrayCodeConstructorTest()
 {
     double         value       = 0.2;
     double         min         = 0F;
     double         max         = 2;
     uint           bitAccuracy = 8;
     GrayCodeConfig config      = new GrayCodeConfig(min, max, bitAccuracy);
     GrayCode       target      = new GrayCode(value, config);
 }
Beispiel #3
0
        public void ValueUintGrayCodeTest()
        {
            double         value       = 0.5;
            double         min         = -1.0;
            double         max         = 1.0;
            uint           bitAccuracy = 8;
            GrayCodeConfig config      = new GrayCodeConfig(min, max, bitAccuracy);
            GrayCode       target      = new GrayCode(value, config);
            uint           expected    = 224;
            uint           actual      = target.DecimalCode;

            Assert.AreEqual(expected, actual);
        }
Beispiel #4
0
        public void ValueTest()
        {
            double         value       = 1.0;
            double         min         = 0.5;
            double         max         = 4;
            uint           bitAccuracy = 8;
            GrayCodeConfig config      = new GrayCodeConfig(min, max, bitAccuracy);
            GrayCode       target      = new GrayCode(value, config);
            double         expected    = value;
            double         actual;

            actual = target.Value;
            Assert.IsTrue(Math.Abs(actual - expected) <= 2 / (Math.Pow(2, bitAccuracy) - 1));
        }
Beispiel #5
0
 /// <summary>
 /// Генерирует фактор со случайным значением
 /// </summary>
 /// <param name="config">Конфигурация фактора</param>
 /// <returns>Случайный фактор</returns>
 private GrayCode GenerateRandomFactor(GrayCodeConfig config)
 {
     try
     {
         var randomFactor  = new GrayCode(0, config);
         var decimalNumber = (uint)_random.Next(0, (int)(Math.Pow(2, config.Accuracy) - 1));
         randomFactor.DecimalCode = decimalNumber;
         return(randomFactor);
     }
     catch (Exception e)
     {
         throw new Exception("Cant generate random factor", e);
     }
 }
Beispiel #6
0
        public void BinaryGTest()
        {
            double         value       = 0.5;
            double         min         = -1.0;
            double         max         = 1.0;
            uint           bitAccuracy = 8;
            GrayCodeConfig config      = new GrayCodeConfig(min, max, bitAccuracy);
            GrayCode       target      = new GrayCode(value, config);
            string         expected    = "11100000";
            string         actual;

            //target.StringCode = expected;
            actual = target.StringCode;
            Assert.AreEqual(expected, actual);
        }
Beispiel #7
0
 //need this post-processor because zeroTime isn't set when Events being read in
 public void setRelativeTime()
 {
     if (!EDE.BDFBased)
     {
         _relativeTime = m_time - bdf.zeroTime;
         if (EDE.IsCovered) //covered Event => try to find Status mark nearby to use as actual Event time
         {
             double offset;
             GrayCode gc = new GrayCode(head.Status);
             gc.Value = (uint)GC;
             if ((offset = bdf.findGCNear(gc, (double)_relativeTime)) >= 0D)
                 _relativeTime = offset; //use actual offset to Status mark
         }
     }
     else
         _relativeTime = m_time;
 }
Beispiel #8
0
        public void TestGrayCode()
        {
            var r = GrayCode.GetNLengthGrayCode(4);

            Assert.AreEqual(r.Count, 16);
        }
Beispiel #9
0
 private void AddFactor(GrayCode factor)
 {
     _factors.Add(factor);
 }
Beispiel #10
0
 public void AddFactorAndCode(GrayCode factor)
 {
     AddFactor(factor);
     AddGenes(factor.BooleanCode);
 }
Beispiel #11
0
 private void SearchEvent_Click(object sender, RoutedEventArgs e)
 {
     Button b = (Button)sender;
     double currentOffset = currentDisplayOffsetInSecs + SearchSiteOffset * currentDisplayWidthInSecs;
     double newOffset;
     BDFEDFFileStream.BDFLoc p = bdf.LocationFactory.New().FromSecs(currentOffset);
     GrayCode gc = new GrayCode(head.Status);
     InputEvent ie;
     if ((string)b.Content == "Next")
     {
         currentOffset += bdf.SampTime / 2D;
         if(bdf.hasStatus)
             gc = gc.NewGrayCodeForStatus(bdf.getStatusSample(p));
         ie = events.Find(ev => ev.Name == currentSearchEvent &&
             (ev.IsNaked && bdf.timeFromBeginningOfFileTo(ev) > currentOffset || !ev.IsNaked && gc.CompareTo(ev.GC) < 0));
     }
     else //Prev
     {
         currentOffset -= bdf.SampTime / 2D;
         if (bdf.hasStatus)
             gc = gc.NewGrayCodeForStatus(bdf.getStatusSample(p - 1));
         ie = events.LastOrDefault(ev => ev.Name == currentSearchEvent &&
             (ev.IsNaked && bdf.timeFromBeginningOfFileTo(ev) < currentOffset || !ev.IsNaked && gc.CompareTo(ev.GC) >= 0));
     }
     if (ie == null) return;
     if (ie.BDFBased) //known BDF-based clock
         newOffset = ie.Time;
     else if (ie.IsNaked) newOffset = bdf.timeFromBeginningOfFileTo(ie); //naked Event using Absolute clock -- not preferred, but OK
     else //covered Event, always Absolute clock
     {
         gc.Value = (uint)ie.GC;
         newOffset = bdf.findGCNear(gc, bdf.timeFromBeginningOfFileTo(ie)); //search for nearby Status channel mark
     }
     if (newOffset >= 0D)
         Viewer.ScrollToHorizontalOffset((newOffset - SearchSiteOffset * currentDisplayWidthInSecs) * XScaleSecsToInches);
 }