private void SerializeEntityProperties(ConfigInputOutput io, BlockConfig blockConfig) { var properties = blockConfig.EntityProperties; foreach (var propertyChanged in this.ViewConfigurationPropertyList) { //查找或添加一个新的属性配置项。 bool exsits = true; var propertyCfg = properties.FirstOrDefault(p => p.Name == propertyChanged.Name); if (propertyCfg == null) { propertyCfg = new BlockPropertyConfig() { Name = propertyChanged.Name }; exsits = false; } //重算所有属性值。 var propertyVM = io.InputView.Property(propertyChanged.Name); var siw = (ShowInWhere)propertyChanged.ShowInWhere; propertyCfg.ShowInWhere = siw != propertyVM.ShowInWhere ? (ShowInWhere?)siw : null; propertyCfg.OrderNo = propertyChanged.OrderNo != propertyVM.OrderNo ? (double?)propertyChanged.OrderNo : null; propertyCfg.Label = propertyChanged.Label != propertyVM.Label ? propertyChanged.Label : null; //如果配置项有用,则加入到列表中,否则应该从列表中移除。 if (propertyCfg.IsChanged()) { if (!exsits) { properties.Add(propertyCfg); } } else { if (exsits) { properties.Remove(propertyCfg); } } } }
public void DistinctTriggerRaisesWhenSourceValueChanges() { // Arrange var @base = new BlockConfig { Type = "testing.test", }; var baseSequence = new object[] { 1, 1, 2, 2, 3, 3, 4, 1 }; var arguments = new DistinctArguments { Base = @base, }; flowActorMock.Setup(o => o.GetTrigger(@base, flowContextMock.Object)).Returns(baseSequence.ToObservable()); // Act var trigger = Trigger("distinct", arguments).Observe(); // Assert trigger.Should().Push(5); trigger.RecordedMessages.Should().BeEquivalentTo(1, 2, 3, 4, 1); }
internal void SaveToXml() { var io = GetInputOutput(this.Id); if (io.InputView == null) return; //先从 xml 文件中读取当前的配置。 var blockConfig = UIModel.XmlConfigMgr.GetBlockConfig(io.OutputBlockConfigKey); if (blockConfig == null) { blockConfig = new BlockConfig { Key = io.OutputBlockConfigKey }; } //把所有所有变更的差异都存储到 blockConfig 中。 this.SerializeProperties(io, blockConfig); this.SerializeEntityProperties(io, blockConfig); this.SerializeCommands(io, blockConfig); UIModel.XmlConfigMgr.Save(blockConfig); }
public bool Deserialize(IParser reader, Type expectedType, Func <IParser, Type, object?> nestedObjectDeserializer, out object?value) { if (expectedType != typeof(BlockConfig)) { value = default; return(false); } if (reader.TryConsume <Scalar>(out var scalar)) { value = new BlockConfig { Type = scalar.Value }; return(true); } var map = nestedObjectDeserializer(reader, typeof(Dictionary <string, object>)) as Dictionary <string, object>; if (map is null) { value = default; return(false); } var config = new BlockConfig(); if (map.Remove("type", out var type)) { config.Type = (string)type; } if (map.Remove("configuration", out var configuration)) { config.Configuration = (string)configuration; } config.Arguments = map; value = config; return(true); }
public void PeriodicTriggerRaisesPeriodicallyFromAction() { // Arrange var action = new BlockConfig { Type = "testing.test", }; var arguments = new PeriodicArguments { Path = "testing.test", Interval = TimeSpan.FromMilliseconds(10), Action = action, }; flowContextMock.Setup(o => o.ExistsData("testing.test").Result).Returns(true); // Act var trigger = Trigger("periodic", arguments).Observe(); // Assert trigger.Should().Push(10, TimeSpan.FromSeconds(0.11)); }
private async Task Act(BlockConfig action, IFlowContext context) { try { var(connector, connection, name) = GetConnection(action, context); var flowAction = connector.GetAction(name); if (flowAction is null) { throw new FlowException($"Unable to acquire action \"{action.Type}\".", context); } var flowActionConfiguration = await Resolve(action.Arguments, flowAction.ArgumentsType, context); context.CurrentType = action.Type; await flowAction.Act(context, connection, flowActionConfiguration); } catch (Exception e) when(e is not FlowException) { throw new FlowException($"Error while executing \"{action.Type}\".", context, e); } }
private void SerializeProperties(ConfigInputOutput io, BlockConfig blockConfig) { if (io.InputView is WebEntityViewMeta) { blockConfig.PageSize = (this.PageSize != io.InputView.AsWebView().PageSize) ? (int?)this.PageSize : null; } var hasGroup = !string.IsNullOrEmpty(this.GroupBy); if (io.InputView.GroupBy == null) { blockConfig.GroupBy = hasGroup ? this.GroupBy : null; } else { if (hasGroup) { blockConfig.GroupBy = io.InputView.GroupBy.Name != this.GroupBy ? this.GroupBy : null; } else { blockConfig.GroupBy = BlockConfig.NullString; } } }
public static void BlockAttack( AttackIndictator attackIndicator, BlockConfig block, int damage, Vector3 contactPoint, out DefenceFeedback feedback) { Vector3 contactDirection = contactPoint - attackIndicator.transform.position; float angle = Vector3.Angle(contactDirection, attackIndicator.blockIndicator.transform.forward); if (angle <= block.blockAngle) { attackIndicator.SetLastHit(contactDirection.normalized, true); feedback = new DefenceFeedback( true, block.ricochet, Mathf.RoundToInt(damage * block.damageReduction), block.poise); } else { attackIndicator.SetLastHit(contactDirection.normalized, false); feedback = DefenceFeedback.NoDefence; } }
public IObservable <object> GetTrigger(BlockConfig trigger, IFlowContext context) { try { var(connector, connection, name) = GetConnection(trigger, context); var flowTrigger = connector.GetTrigger(name); if (flowTrigger is null) { throw new FlowException($"Unable to acquire trigger \"{trigger.Type}\".", context); } return(Observable.DeferAsync(async _ => { var flowTriggerConfiguration = await Resolve(trigger.Arguments, flowTrigger.ArgumentsType, context); return flowTrigger.GetEvents(context, connection, flowTriggerConfiguration); })); } catch (Exception e) when(e is not FlowException) { throw new FlowException($"Error while getting trigger \"{trigger.Type}\".", context, e); } }
/// <summary> /// Adds a block type to the index and adds it's name to a dictionary for quick lookup /// </summary> /// <param name="configs">A list of configs</param> /// <param name="types"></param> /// <param name="config">The controller object for this block</param> /// <returns>The index of the block</returns> private void AddBlockType(List <BlockConfig> configs, Dictionary <ushort, ushort> types, BlockConfig config) { config.type = (ushort)configs.Count; configs.Add(config); m_names.Add(config.name, config.type); types.Add(config.typeInConfig, config.type); }
public static QuickEDMAnalysis AnalyseDBlock(DemodulatedBlock dblock) { QuickEDMAnalysis analysis = new QuickEDMAnalysis(); BlockConfig config = dblock.Config; //edm factor calculation double dbStep = ((AnalogModulation)config.GetModulationByName("DB")).Step; double magCal = (double)config.Settings["magnetCalibration"]; double eField = cField((double)config.Settings["ePlus"], (double)config.Settings["eMinus"]);//arguments are in volts not kV double edmFactor = (bohrMagneton * dbStep * magCal * Math.Pow(10, -9)) / (electronCharge * saturatedEffectiveField * polarisationFactor(eField)); //Add in interferometer length instead of 800 10^-6 after testing is done with old blocks double dbPhaseStep = dbStep * magCal * Math.Pow(10, -9) * bohrMagneton * 800 * Math.Pow(10, -6) / hbar; analysis.SIGValAndErrtp = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "topProbeNoBackground")); analysis.SIGValAndErrbp = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "bottomProbeScaled")); analysis.SIGValAndErr = dblock.GetTOFChannel(new string[] { "SIG" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.BValAndErr = dblock.GetTOFChannel(new string[] { "B" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.DBValAndErr = dblock.GetTOFChannel(new string[] { "DB" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.EValAndErr = dblock.GetTOFChannel(new string[] { "E" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.EBValAndErr = dblock.GetTOFChannel(new string[] { "E", "B" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.BDBValAndErr = dblock.GetTOFChannel("BDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); double bottomProbeCalibration = dblock.GetCalibration("bottomProbeScaled"); double topProbeCalibration = dblock.GetCalibration("topProbeNoBackground"); //Replace 510 with the calibrations above after testing is done with old blocks analysis.ShotNoise = 1.0 / Math.Sqrt(analysis.SIGValAndErrbp[0] * 510 + analysis.SIGValAndErrtp[0] * 510); analysis.Contrast = analysis.DBValAndErr[0] / 2 / dbPhaseStep; //raw edm in asymmetry detector double[] edmdb; edmdb = dblock.GetTOFChannel("EDMDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.RawEDMValAndErr = new double[2] { edmFactor *edmdb[0], edmFactor *edmdb[1] }; //leakage currents analysis.NorthCurrentValAndError = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "NorthCurrent")); analysis.SouthCurrentValAndError = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "SouthCurrent")); analysis.NorthECorrCurrentValAndError = ConvertPointToArray(dblock.GetPointChannel(new string[] { "E" }, "NorthCurrent")); analysis.SouthECorrCurrentValAndError = ConvertPointToArray(dblock.GetPointChannel(new string[] { "E" }, "SouthCurrent")); //magnetometer (I know it is not signed right but I just want the noise so any waveform will do) analysis.MagValandErr = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "magnetometer")); //rf freq analysis.rf1FreqAndErr = dblock.GetTOFChannel(new string[] { "RF1F" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.rf2FreqAndErr = dblock.GetTOFChannel(new string[] { "RF2F" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.RF1FDBDB = dblock.GetTOFChannel("RF1FDBDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.RF2FDBDB = dblock.GetTOFChannel("RF2FDBDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); //rf amp analysis.rf1AmpAndErr = dblock.GetTOFChannel(new string[] { "RF1A" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.rf2AmpAndErr = dblock.GetTOFChannel(new string[] { "RF2A" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.RF1ADBDB = dblock.GetTOFChannel("RF1ADBDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.RF2ADBDB = dblock.GetTOFChannel("RF2ADBDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); //probe laser frequency analysis.LF1ValAndErr = dblock.GetTOFChannel(new string[] { "LF1" }, "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.LF1DB = dblock.GetTOFChannel("LF1DB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); analysis.LF1DBDB = dblock.GetTOFChannel("LF1DBDB", "asymmetry").GatedWeightedMeanAndUncertainty(GATE_LOW, GATE_HIGH); //probe photodiode monitors analysis.TopPDSIG = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "topPD")); analysis.BottomPDSIG = ConvertPointToArray(dblock.GetPointChannel(new string[] { "SIG" }, "bottomPD")); return(analysis); }
public Block() { Type = 0; Config = null; }
public static QuickEDMAnalysis AnalyseDBlock(DemodulatedBlock dblock) { QuickEDMAnalysis analysis = new QuickEDMAnalysis(); BlockConfig config = dblock.Config; //edm factor calculation double dbStep = ((AnalogModulation)config.GetModulationByName("DB")).Step; double magCal = (double)config.Settings["magnetCalibration"]; double eField = cField((double)config.Settings["ePlus"], (double)config.Settings["eMinus"]);//arguments are in volts not kV double edmFactor = (bohrMagneton * dbStep * magCal * Math.Pow(10, -9)) / (electronCharge * saturatedEffectiveField * polarisationFactor(eField)); //Get relevant channel values and errors analysis.SIGValAndErr = dblock.GetChannelValueAndError(new string[] { "SIG" }, "top"); analysis.BValAndErr = dblock.GetChannelValueAndError(new string[] { "B" }, "top"); analysis.DBValAndErr = dblock.GetChannelValueAndError(new string[] { "DB" }, "top"); analysis.EValAndErr = dblock.GetChannelValueAndError(new string[] { "E" }, "top"); analysis.EBValAndErr = dblock.GetChannelValueAndError(new string[] { "E", "B" }, "top"); //edm error calculation analysis.RawEDM = edmFactor * (analysis.EBValAndErr[0] / analysis.DBValAndErr[0]); analysis.RawEDMErr = Math.Abs(analysis.RawEDM) * Math.Sqrt(Math.Pow(analysis.EBValAndErr[1] / analysis.EBValAndErr[0], 2) + Math.Pow(analysis.DBValAndErr[1] / analysis.DBValAndErr[0], 2)); //same again for normed data. analysis.SIGValAndErrNormed = dblock.GetChannelValueAndError(new string[] { "SIG" }, "topNormed"); analysis.BValAndErrNormed = dblock.GetChannelValueAndError(new string[] { "B" }, "topNormed"); analysis.DBValAndErrNormed = dblock.GetChannelValueAndError(new string[] { "DB" }, "topNormed"); analysis.EValAndErrNormed = dblock.GetChannelValueAndError(new string[] { "E" }, "topNormed"); analysis.EBValAndErrNormed = dblock.GetChannelValueAndError(new string[] { "E", "B" }, "topNormed"); //normed edm error analysis.RawEDMNormed = edmFactor * (analysis.EBValAndErrNormed[0] / analysis.DBValAndErrNormed[0]); analysis.RawEDMErrNormed = Math.Abs(analysis.RawEDMNormed) * Math.Sqrt(Math.Pow(analysis.EBValAndErrNormed[1] / analysis.EBValAndErrNormed[0], 2) + Math.Pow(analysis.DBValAndErrNormed[1] / analysis.DBValAndErrNormed[0], 2)); //leakage currents analysis.NorthCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "SIG" }, "NorthCurrent"); analysis.SouthCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "SIG" }, "SouthCurrent"); analysis.NorthECorrCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "E" }, "NorthCurrent"); analysis.SouthECorrCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "E" }, "SouthCurrent"); //magnetometer (I know it is not signed right but I just want the noise so any waveform will do) analysis.MagValandErr = dblock.GetChannelValueAndError(new string[] { "SIG" }, "magnetometer"); //laser freq analysis.LFValandErr = dblock.GetChannelValueAndError(new string[] { "LF1" }, "top"); //analysis.LF1DBDB = dblock.ChannelValues[6].GetSpecialValue("LF1DBDB"); // 5 is topNormed TODO: make GetSpecialValuesAndError work //analysis.LF2DBDB = dblock.ChannelValues[6].GetSpecialValue("LF2DBDB"); analysis.LF1DBDB = dblock.GetSpecialChannelValueAndError("LF1DBDB", "topNormed"); // 5 is topNormed TODO: make GetSpecialValuesAndError work analysis.LF2DBDB = dblock.GetSpecialChannelValueAndError("LF2DBDB", "top"); //rf freq analysis.rf1FreqAndErr = dblock.GetChannelValueAndError(new string[] { "RF1F" }, "top"); analysis.rf2FreqAndErr = dblock.GetChannelValueAndError(new string[] { "RF2F" }, "top"); //rf amp analysis.rf1AmpAndErr = dblock.GetChannelValueAndError(new string[] { "RF1A" }, "top"); analysis.rf2AmpAndErr = dblock.GetChannelValueAndError(new string[] { "RF2A" }, "top"); //photodiodes analysis.probePD = dblock.GetChannelValueAndError(new string[] { "SIG" }, "ProbePD"); analysis.pumpPD = dblock.GetChannelValueAndError(new string[] { "SIG" }, "PumpPD"); //rfAmmeter analysis.rfCurrent = dblock.GetChannelValueAndError(new string[] { "SIG" }, "rfCurrent"); return(analysis); }
public static QuickEDMAnalysis AnalyseDBlock(DemodulatedBlock dblock) { QuickEDMAnalysis analysis = new QuickEDMAnalysis(); BlockConfig config = dblock.Config; //edm factor calculation double dbStep = ((AnalogModulation)config.GetModulationByName("DB")).Step; double magCal = (double)config.Settings["magnetCalibration"]; double eField = cField((double)config.Settings["ePlus"], (double)config.Settings["eMinus"]);//arguments are in volts not kV double edmFactor = (bohrMagneton * dbStep * magCal * Math.Pow(10, -9)) / (electronCharge * saturatedEffectiveField * polarisationFactor(eField)); ////Get relevant channel values and errors for top probe //analysis.SIGValAndErrtp = dblock.GetChannelValueAndError(new string[] { "SIG" }, "topProbe"); //analysis.BValAndErrtp = dblock.GetChannelValueAndError(new string[] { "B", "MW" }, "topProbe"); //analysis.DBValAndErrtp = dblock.GetChannelValueAndError(new string[] { "DB", "MW" }, "topProbe"); //analysis.EValAndErrtp = dblock.GetChannelValueAndError(new string[] { "E", "MW" }, "topProbe"); //analysis.EBValAndErrtp = dblock.GetChannelValueAndError(new string[] { "E", "B", "MW" }, "topProbe"); //Get relevant channel values and errors for top probe, no MW switching analysis.SIGValAndErrtp = dblock.GetChannelValueAndError(new string[] { "SIG" }, "topProbe"); analysis.BValAndErrtp = dblock.GetChannelValueAndError(new string[] { "B" }, "topProbe"); analysis.DBValAndErrtp = dblock.GetChannelValueAndError(new string[] { "DB" }, "topProbe"); analysis.EValAndErrtp = dblock.GetChannelValueAndError(new string[] { "E" }, "topProbe"); analysis.EBValAndErrtp = dblock.GetChannelValueAndError(new string[] { "E", "B" }, "topProbe"); //edm error calculation analysis.RawEDMtp = edmFactor * (analysis.EBValAndErrtp[0] / analysis.DBValAndErrtp[0]); analysis.RawEDMErrtp = Math.Abs(analysis.RawEDMtp) * Math.Sqrt(Math.Pow(analysis.EBValAndErrtp[1] / analysis.EBValAndErrtp[0], 2) + Math.Pow(analysis.DBValAndErrtp[1] / analysis.DBValAndErrtp[0], 2)); ////Get relevant channel values and errors for bottom probe //analysis.SIGValAndErrbp = dblock.GetChannelValueAndError(new string[] { "SIG" }, "bottomProbe"); //analysis.BValAndErrbp = dblock.GetChannelValueAndError(new string[] { "B", "MW" }, "bottomProbe"); //analysis.DBValAndErrbp = dblock.GetChannelValueAndError(new string[] { "DB" , "MW"}, "bottomProbe"); //analysis.EValAndErrbp = dblock.GetChannelValueAndError(new string[] { "E", "MW" }, "bottomProbe"); //analysis.EBValAndErrbp = dblock.GetChannelValueAndError(new string[] { "E", "B", "MW" }, "bottomProbe"); //Get relevant channel values and errors for bottom probe, no MW switching analysis.SIGValAndErrbp = dblock.GetChannelValueAndError(new string[] { "SIG" }, "bottomProbe"); analysis.BValAndErrbp = dblock.GetChannelValueAndError(new string[] { "B" }, "bottomProbe"); analysis.DBValAndErrbp = dblock.GetChannelValueAndError(new string[] { "DB" }, "bottomProbe"); analysis.EValAndErrbp = dblock.GetChannelValueAndError(new string[] { "E" }, "bottomProbe"); analysis.EBValAndErrbp = dblock.GetChannelValueAndError(new string[] { "E", "B" }, "bottomProbe"); //edm error calculation for bottom probe analysis.RawEDMbp = edmFactor * (analysis.EBValAndErrbp[0] / analysis.DBValAndErrbp[0]); analysis.RawEDMErrbp = Math.Abs(analysis.RawEDMbp) * Math.Sqrt(Math.Pow(analysis.EBValAndErrbp[1] / analysis.EBValAndErrbp[0], 2) + Math.Pow(analysis.DBValAndErrbp[1] / analysis.DBValAndErrbp[0], 2)); ////Get relevant channel values and errors for asymmetry //analysis.SIGValAndErr = dblock.GetChannelValueAndError(new string[] { "SIG" }, "asymmetry"); //analysis.BValAndErr = dblock.GetChannelValueAndError(new string[] { "B", "MW" }, "asymmetry"); //analysis.DBValAndErr = dblock.GetChannelValueAndError(new string[] { "DB", "MW" }, "asymmetry"); //analysis.EValAndErr = dblock.GetChannelValueAndError(new string[] { "E", "MW" }, "asymmetry"); //analysis.EBValAndErr = dblock.GetChannelValueAndError(new string[] { "E", "B", "MW" }, "asymmetry"); //analysis.BDBValAndErr = dblock.GetChannelValueAndError(new string[] { "B", "DB", "MW" }, "asymmetry"); //Get relevant channel values and errors for asymmetry, no MW switching analysis.SIGValAndErr = dblock.GetChannelValueAndError(new string[] { "SIG" }, "asymmetry"); analysis.BValAndErr = dblock.GetChannelValueAndError(new string[] { "B" }, "asymmetry"); analysis.DBValAndErr = dblock.GetChannelValueAndError(new string[] { "DB" }, "asymmetry"); analysis.EValAndErr = dblock.GetChannelValueAndError(new string[] { "E" }, "asymmetry"); analysis.EBValAndErr = dblock.GetChannelValueAndError(new string[] { "E", "B" }, "asymmetry"); analysis.BDBValAndErr = dblock.GetChannelValueAndError(new string[] { "B", "DB" }, "asymmetry"); //edm error calculation for asymmetry analysis.RawEDM = edmFactor * (analysis.EBValAndErr[0] / analysis.DBValAndErr[0]); analysis.RawEDMErr = Math.Abs(analysis.RawEDM) * Math.Sqrt(Math.Pow(analysis.EBValAndErr[1] / analysis.EBValAndErr[0], 2) + Math.Pow(analysis.DBValAndErr[1] / analysis.DBValAndErr[0], 2)); //leakage currents analysis.NorthCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "SIG" }, "NorthCurrent"); analysis.SouthCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "SIG" }, "SouthCurrent"); analysis.NorthECorrCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "E" }, "NorthCurrent"); analysis.SouthECorrCurrentValAndError = dblock.GetChannelValueAndError(new string[] { "E" }, "SouthCurrent"); //magnetometer (I know it is not signed right but I just want the noise so any waveform will do) analysis.MagValandErr = dblock.GetChannelValueAndError(new string[] { "SIG" }, "magnetometer"); //rf freq analysis.rf1FreqAndErrtp = dblock.GetChannelValueAndError(new string[] { "RF1F" }, "topProbe"); analysis.rf2FreqAndErrtp = dblock.GetChannelValueAndError(new string[] { "RF2F" }, "topProbe"); analysis.rf1FreqAndErrbp = dblock.GetChannelValueAndError(new string[] { "RF1F" }, "bottomProbe"); analysis.rf2FreqAndErrbp = dblock.GetChannelValueAndError(new string[] { "RF2F" }, "bottompProbe"); //analysis.RF1FDBDB = dblock.GetChannelValueAndError(new string[] { "RF1F", "DB", "MW" }, "asymmetry"); //analysis.RF2FDBDB = dblock.GetChannelValueAndError(new string[] { "RF2F", "DB", "MW" }, "asymmetry"); // no MW switch analysis.RF1FDBDB = dblock.GetChannelValueAndError(new string[] { "RF1F", "DB" }, "asymmetry"); analysis.RF2FDBDB = dblock.GetChannelValueAndError(new string[] { "RF2F", "DB" }, "asymmetry"); //rf amp analysis.rf1AmpAndErrtp = dblock.GetChannelValueAndError(new string[] { "RF1A" }, "topProbe"); analysis.rf2AmpAndErrtp = dblock.GetChannelValueAndError(new string[] { "RF2A" }, "topProbe"); analysis.rf1AmpAndErrbp = dblock.GetChannelValueAndError(new string[] { "RF1A" }, "bottomProbe"); analysis.rf2AmpAndErrbp = dblock.GetChannelValueAndError(new string[] { "RF2A" }, "bottomProbe"); //analysis.RF1ADBDB = dblock.GetChannelValueAndError(new string[] { "RF1A", "DB", "MW" }, "asymmetry"); //analysis.RF2ADBDB = dblock.GetChannelValueAndError(new string[] { "RF2A", "DB", "MW" }, "asymmetry"); // no MW switch analysis.RF1ADBDB = dblock.GetChannelValueAndError(new string[] { "RF1A", "DB" }, "asymmetry"); analysis.RF2ADBDB = dblock.GetChannelValueAndError(new string[] { "RF2A", "DB" }, "asymmetry"); return(analysis); }
private void LoadConfig(FileStream fs) { config = (BlockConfig)serializer.Deserialize(fs); }
private (IConnector Connector, IConnection Connection, string Name) GetConnection(BlockConfig config, IFlowContext context) { var(connectorName, name) = config.Type.SplitType(); var connector = connectorRegistry.Get(connectorName); if (connector is null) { throw new FlowException($"Unable to acquire connector \"{connectorName}\".", context); } var connectionConfiguration = configurationProvider .GetConnectionConfiguration(connectorName, config.Configuration) .Map(connector.ConfigurationType); var connection = connector.GetConnection(connectionConfiguration); if (connection is null) { throw new FlowException($"Unable to acquire connection for \"{connectorName}\" and configuration {{{connectionConfiguration}}}.", context); } return(connector, connection, name); }
// this function creates a default BlockConfig that is sufficient to // get BlockHead running. The recommended way of making a new config // is to use BlockHead to save this config and then modify it. private void MakeDefaultBlockConfig() { const int CODE_LENGTH = 12; config = new BlockConfig(); DigitalModulation dm = new DigitalModulation(); dm.Name = "E"; dm.Waveform = new Waveform("E Modulation", CODE_LENGTH); dm.Waveform.Code = new bool[] { true, true, false, false, false, false, false, false, false, false, false, false }; config.DigitalModulations.Add(dm); DigitalModulation pi = new DigitalModulation(); pi.Name = "PI"; pi.Waveform = new Waveform("Pi Modulation", CODE_LENGTH); pi.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, false, true }; config.DigitalModulations.Add(pi); AnalogModulation b = new AnalogModulation(); b.Name = "B"; b.Waveform = new Waveform("B Modulation", CODE_LENGTH); b.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, false, true }; b.DelayAfterSwitch = 5; b.Centre = 0; b.Step = 0.46; config.AnalogModulations.Add(b); AnalogModulation db = new AnalogModulation(); db.Name = "DB"; db.Waveform = new Waveform("DB Modulation", CODE_LENGTH); db.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; db.DelayAfterSwitch = 5; db.Centre = 0; db.Step = 0.1; config.AnalogModulations.Add(db); AnalogModulation rf1A = new AnalogModulation(); rf1A.Name = "RF1A"; rf1A.Waveform = new Waveform("rf1 Amplitude modulation", CODE_LENGTH); rf1A.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf1A.DelayAfterSwitch = 0; rf1A.Centre = 1.5; rf1A.Step = 0.1; config.AnalogModulations.Add(rf1A); AnalogModulation rf2A = new AnalogModulation(); rf2A.Name = "RF2A"; rf2A.Waveform = new Waveform("rf2 Amplitude modulation", CODE_LENGTH); rf2A.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf2A.DelayAfterSwitch = 0; rf2A.Centre = 2.5; rf2A.Step = 0.1; config.AnalogModulations.Add(rf2A); AnalogModulation rf1F = new AnalogModulation(); rf1F.Name = "RF1F"; rf1F.Waveform = new Waveform("rf1 frequency modulation", CODE_LENGTH); rf1F.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf1F.DelayAfterSwitch = 0; rf1F.Centre = 2.5; rf1F.Step = 0.1; config.AnalogModulations.Add(rf1F); AnalogModulation rf2F = new AnalogModulation(); rf2F.Name = "RF2F"; rf2F.Waveform = new Waveform("rf2 frequency modulation", CODE_LENGTH); rf2F.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf2F.DelayAfterSwitch = 0; rf2F.Centre = 2.5; rf2F.Step = 0.1; config.AnalogModulations.Add(rf2F); AnalogModulation lf1 = new AnalogModulation(); lf1.Name = "LF1"; lf1.Waveform = new Waveform("laser frequency 1 modulation", CODE_LENGTH); lf1.Waveform.Code = new bool[] { false, true, false, true, false, false, false, false, false, false, false, false }; lf1.DelayAfterSwitch = 0; lf1.Centre = 2.5; lf1.Step = 0.05; config.AnalogModulations.Add(lf1); AnalogModulation lf2 = new AnalogModulation(); lf2.Name = "LF2"; lf2.Waveform = new Waveform("laser frequency 2 modulation", CODE_LENGTH); lf2.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; lf2.DelayAfterSwitch = 0; lf2.Centre = 1.0; lf2.Step = 0.01; config.AnalogModulations.Add(lf2); config.Settings["codeLength"] = CODE_LENGTH; config.Settings["numberOfPoints"] = 4096; config.Settings["pgClockFrequency"] = 1000000; config.Settings["eDischargeTime"] = 1000; config.Settings["eBleedTime"] = 1000; config.Settings["eSwitchTime"] = 500; config.Settings["eChargeTime"] = 1000; config.Settings["magnetCalibration"] = 16.5; config.Settings["eState"] = true; config.Settings["bState"] = true; config.Settings["rfState"] = true; config.Settings["ePlus"] = 8.0; config.Settings["eMinus"] = -8.0; config.Settings["gtPlus"] = 1.6; config.Settings["gtMinus"] = -1.6; config.Settings["gbPlus"] = 1.6; config.Settings["gbMinus"] = -1.6; }
public DemodulatedBlock(DateTime timeStamp, BlockConfig config, DemodulationConfig demodulationConfig) { this.TimeStamp = timeStamp; this.Config = config; this.DemodulationConfig = demodulationConfig; }
// this function creates a default BlockConfig that is sufficient to // get BlockHead running. The recommended way of making a new config // is to use BlockHead to save this config and then modify it. private void MakeDefaultBlockConfig() { const int CODE_LENGTH = 12; config = new BlockConfig(); DigitalModulation dm = new DigitalModulation(); dm.Name = "E"; dm.Waveform = new Waveform("E Modulation", CODE_LENGTH); dm.Waveform.Code = new bool[] { true, true, true, true, false, false, false, false, false, false, false, false }; config.DigitalModulations.Add(dm); DigitalModulation mw = new DigitalModulation(); mw.Name = "MW"; mw.Waveform = new Waveform("Mw Modulation", CODE_LENGTH); mw.Waveform.Code = new bool[] { false, true, false, true, true, true, false, true, false, false, false, false }; config.DigitalModulations.Add(mw); DigitalModulation pi = new DigitalModulation(); pi.Name = "PI"; pi.Waveform = new Waveform("Pi Modulation", CODE_LENGTH); pi.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, false, true }; config.DigitalModulations.Add(pi); AnalogModulation b = new AnalogModulation(); b.Name = "B"; b.Waveform = new Waveform("B Modulation", CODE_LENGTH); b.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, false, true }; b.DelayAfterSwitch = 5; b.Centre = 0; b.Step = 0.46; config.AnalogModulations.Add(b); AnalogModulation db = new AnalogModulation(); db.Name = "DB"; db.Waveform = new Waveform("DB Modulation", CODE_LENGTH); db.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; db.DelayAfterSwitch = 5; db.Centre = 0; db.Step = 0.1; config.AnalogModulations.Add(db); AnalogModulation rf1A = new AnalogModulation(); rf1A.Name = "RF1A"; rf1A.Waveform = new Waveform("rf1 Amplitude modulation", CODE_LENGTH); rf1A.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf1A.DelayAfterSwitch = 0; rf1A.Centre = 1.5; rf1A.Step = 0.1; config.AnalogModulations.Add(rf1A); AnalogModulation rf2A = new AnalogModulation(); rf2A.Name = "RF2A"; rf2A.Waveform = new Waveform("rf2 Amplitude modulation", CODE_LENGTH); rf2A.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf2A.DelayAfterSwitch = 0; rf2A.Centre = 2.5; rf2A.Step = 0.1; config.AnalogModulations.Add(rf2A); AnalogModulation rf1F = new AnalogModulation(); rf1F.Name = "RF1F"; rf1F.Waveform = new Waveform("rf1 frequency modulation", CODE_LENGTH); rf1F.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf1F.DelayAfterSwitch = 0; rf1F.Centre = 2.5; rf1F.Step = 0.1; config.AnalogModulations.Add(rf1F); AnalogModulation rf2F = new AnalogModulation(); rf2F.Name = "RF2F"; rf2F.Waveform = new Waveform("rf2 frequency modulation", CODE_LENGTH); rf2F.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; rf2F.DelayAfterSwitch = 0; rf2F.Centre = 2.5; rf2F.Step = 0.1; config.AnalogModulations.Add(rf2F); //AnalogModulation lf1 = new AnalogModulation(); //lf1.Name = "LF1"; //lf1.Waveform = new Waveform("laser frequency 1 modulation", CODE_LENGTH); //lf1.Waveform.Code = new bool[] { false, true, false, true, false, false, false, false, false, false, false, false }; //lf1.DelayAfterSwitch = 0; //lf1.Centre = 2.5; //lf1.Step = 0.05; //config.AnalogModulations.Add(lf1); //AnalogModulation lf2 = new AnalogModulation(); //lf2.Name = "LF2"; //lf2.Waveform = new Waveform("laser frequency 2 modulation", CODE_LENGTH); //lf2.Waveform.Code = new bool[] { false, false, false, false, false, false, false, false, false, false, true, false }; //lf2.DelayAfterSwitch = 0; //lf2.Centre = 1.0; //lf2.Step = 0.01; //config.AnalogModulations.Add(lf2); config.Settings["codeLength"] = CODE_LENGTH; config.Settings["numberOfPoints"] = 4096; config.Settings["pgClockFrequency"] = 1000000; config.Settings["eDischargeTime"] = 1000; config.Settings["eBleedTime"] = 1000; config.Settings["eSwitchTime"] = 500; config.Settings["eChargeTime"] = 1000; config.Settings["eRampDownDeay"] = 10; config.Settings["eRampDownTime"] = 10; config.Settings["eRampUpTime"] = 10; config.Settings["eDischargeTime"] = 10; config.Settings["greenDCMF"] = 10; config.Settings["magnetCalibration"] = 16.9; config.Settings["dummy"] = "jack"; config.Settings["cluster"] = "28May1701"; config.Settings["phaseScramblerV"] = 1.0; config.Settings["eState"] = true; config.Settings["bState"] = true; config.Settings["rfState"] = true; config.Settings["mwState"] = true; config.Settings["ePlus"] = 8.0; config.Settings["eMinus"] = -8.0; config.Settings["greenAmp"] = 16.5; config.Settings["greenFreq"] = 16.5; config.Settings["clusterIndex"] = 1; config.Settings["E0PlusBoost"] = 0.1; config.Settings["bBiasV"] = 0.1; config.Settings["maximumNumberOfTimesToStepTarget"] = 1000; config.Settings["minimumSignalToRun"] = 300.0; config.Settings["targetStepperGateStartTime"] = 2340.0; config.Settings["targetStepperGateEndTime"] = 2540.0; }
public Block() { type = 0; config = null; }
public Block(int type, BlockConfig config) { Assert.IsTrue(config != null); this.type = (ushort)type; this.config = config; }
public JToken?GetArguments( [Parent] BlockConfig blockConfig) => blockConfig.Arguments.Map <JToken>();