// 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); }
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); }
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)); //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 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); }