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); } }
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); }
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); }
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)); }
/// <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); } }
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); }
//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; }
public void TestGrayCode() { var r = GrayCode.GetNLengthGrayCode(4); Assert.AreEqual(r.Count, 16); }
private void AddFactor(GrayCode factor) { _factors.Add(factor); }
public void AddFactorAndCode(GrayCode factor) { AddFactor(factor); AddGenes(factor.BooleanCode); }
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); }