Пример #1
0
        // NOTE: this function is rendered somewhat obsolete by the BlockTOFDemodulator.
        // This function takes a list of switches, defining an analysis channel, and gives the
        // average TOF for that analysis channel's positively contributing TOFs and the same for
        // the negative contributors. Note that this definition may or may not line up with how
        // the analysis channels are defined (they may differ by a sign, which might depend on
        // the number of switches in the channel).
        public TOF[] GetSwitchTOFs(string[] switches, int index)
        {
            TOF[] tofs = new TOF[2];
            // calculate the state of the channel for each point in the block
            int           numSwitches    = switches.Length;
            int           waveformLength = config.GetModulationByName(switches[0]).Waveform.Length;
            List <bool[]> switchBits     = new List <bool[]>();

            foreach (string s in switches)
            {
                switchBits.Add(config.GetModulationByName(s).Waveform.Bits);
            }
            List <bool> channelStates = new List <bool>();

            for (int point = 0; point < waveformLength; point++)
            {
                bool channelState = false;
                for (int i = 0; i < numSwitches; i++)
                {
                    channelState = channelState ^ switchBits[i][point];
                }
                channelStates.Add(channelState);
            }
            // build the "on" and "off" average TOFs
            TOF tOn  = new TOF();
            TOF tOff = new TOF();

            for (int i = 0; i < waveformLength; i++)
            {
                if (channelStates[i])
                {
                    tOn += ((TOF)((EDMPoint)Points[i]).Shot.TOFs[index]);
                }
                else
                {
                    tOff += ((TOF)((EDMPoint)Points[i]).Shot.TOFs[index]);
                }
            }
            tOn    /= (waveformLength / 2);
            tOff   /= (waveformLength / 2);
            tofs[0] = tOn;
            tofs[1] = tOff;
            return(tofs);
        }
Пример #2
0
        private void MapChannels()
        {
            switchedChannels = new ArrayList();

            TTLSwitchedChannel bChan = new TTLSwitchedChannel();

            bChan.Channel    = "b";
            bChan.Invert     = false;
            bChan.Modulation = config.GetModulationByName("B");
            switchedChannels.Add(bChan);

            TTLSwitchedChannel notBChan = new TTLSwitchedChannel();

            notBChan.Channel    = "notB";
            notBChan.Invert     = true;
            notBChan.Modulation = config.GetModulationByName("B");
            switchedChannels.Add(notBChan);

            TTLSwitchedChannel dbChan = new TTLSwitchedChannel();

            dbChan.Channel    = "db";
            dbChan.Invert     = false;
            dbChan.Modulation = config.GetModulationByName("DB");
            switchedChannels.Add(dbChan);

            TTLSwitchedChannel notDBChan = new TTLSwitchedChannel();

            notDBChan.Channel    = "notDB";
            notDBChan.Invert     = true;
            notDBChan.Modulation = config.GetModulationByName("DB");
            switchedChannels.Add(notDBChan);

            TTLSwitchedChannel piChan = new TTLSwitchedChannel();

            piChan.Channel    = "piFlipEnable";
            piChan.Invert     = false;
            piChan.Modulation = config.GetModulationByName("PI");
            switchedChannels.Add(piChan);

            TTLSwitchedChannel notPIChan = new TTLSwitchedChannel();

            notPIChan.Channel    = "notPIFlipEnable";
            notPIChan.Invert     = true;
            notPIChan.Modulation = config.GetModulationByName("PI");
            switchedChannels.Add(notPIChan);

            //ESwitchChannel eChan = new ESwitchChannel();
            //eChan.Invert = false;
            //eChan.Modulation = config.GetModulationByName("E");
            //switchedChannels.Add(eChan);

            //ESwitchRFChannel eChan = new ESwitchRFChannel();
            //eChan.Invert = false;
            //eChan.Modulation = config.GetModulationByName("E");
            //eChan.stepSizeRF = +0.25;
            //switchedChannels.Add(eChan);

            AnalogSwitchedChannel rf1AChannel = new AnalogSwitchedChannel();

            rf1AChannel.Channel    = "rf1Attenuator";
            rf1AChannel.Modulation = config.GetModulationByName("RF1A");
            switchedChannels.Add(rf1AChannel);

            AnalogSwitchedChannel rf2AChannel = new AnalogSwitchedChannel();

            rf2AChannel.Channel    = "rf2Attenuator";
            rf2AChannel.Modulation = config.GetModulationByName("RF2A");
            switchedChannels.Add(rf2AChannel);

            AnalogSwitchedChannel rf1FChannel = new AnalogSwitchedChannel();

            rf1FChannel.Channel    = "rf1FM";
            rf1FChannel.Modulation = config.GetModulationByName("RF1F");
            switchedChannels.Add(rf1FChannel);

            AnalogSwitchedChannel rf2FChannel = new AnalogSwitchedChannel();

            rf2FChannel.Channel    = "rf2FM";
            rf2FChannel.Modulation = config.GetModulationByName("RF2F");
            switchedChannels.Add(rf2FChannel);

            HardwareControllerSwitchChannel eChan = new HardwareControllerSwitchChannel();

            eChan.Channel    = "eChan";
            eChan.Modulation = config.GetModulationByName("E");
            switchedChannels.Add(eChan);

            HardwareControllerSwitchChannel mwChan = new HardwareControllerSwitchChannel();

            mwChan.Channel    = "mwChan";
            mwChan.Modulation = config.GetModulationByName("MW");
            switchedChannels.Add(mwChan);

            //AnalogSwitchedChannel lf1Channel = new AnalogSwitchedChannel();
            //lf1Channel.Channel = "flPZT";
            //lf1Channel.Modulation = config.GetModulationByName("LF1");
            //switchedChannels.Add(lf1Channel);

            //HardwareControllerSwitchChannel lf1Channel = new HardwareControllerSwitchChannel();
            //lf1Channel.Channel = "probeAOM";
            //lf1Channel.Modulation = config.GetModulationByName("LF1");
            //switchedChannels.Add(lf1Channel);

            //HardwareControllerSwitchChannel lf2Channel = new HardwareControllerSwitchChannel();
            //lf2Channel.Channel = "pumpAOM";
            //lf2Channel.Modulation = config.GetModulationByName("LF2");
            //switchedChannels.Add(lf2Channel);

            //AnalogSwitchedChannel lf3Channel = new HardwareControllerSwitchChannel();
            //lf3Channel.Channel = "LF3";
            //lf3Channel.Modulation = config.GetModulationByName("LF3");
            //switchedChannels.Add(lf3Channel);
        }
Пример #3
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);
        }
Пример #4
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);
        }
Пример #5
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);
        }