Example #1
0
        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);
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #5
0
        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));
        }
Example #6
0
        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;
        }
    }
Example #9
0
        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);
            }
        }
Example #10
0
 /// <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);
 }
Example #11
0
        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);
        }
Example #12
0
 public Block()
 {
     Type   = 0;
     Config = null;
 }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
 private void LoadConfig(FileStream fs)
 {
     config = (BlockConfig)serializer.Deserialize(fs);
 }
Example #16
0
        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);
        }
Example #17
0
        // 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;
        }
Example #18
0
 public DemodulatedBlock(DateTime timeStamp, BlockConfig config, DemodulationConfig demodulationConfig)
 {
     this.TimeStamp          = timeStamp;
     this.Config             = config;
     this.DemodulationConfig = demodulationConfig;
 }
Example #19
0
        // 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;
        }
Example #20
0
 public Block()
 {
     type   = 0;
     config = null;
 }
Example #21
0
 public Block(int type, BlockConfig config)
 {
     Assert.IsTrue(config != null);
     this.type   = (ushort)type;
     this.config = config;
 }
Example #22
0
 public JToken?GetArguments(
     [Parent] BlockConfig blockConfig)
 => blockConfig.Arguments.Map <JToken>();