public override void AcquisitionStarting() { laser = (BrilliantLaser)Environs.Hardware.YAG; // this ensures the pattern generator has established itself (if not, an interlock fail // will result). Thread.Sleep(1000); laser.StartFlashlamps(false); // this gives the laser time to warm up before firing the Q-switch (too short and the // q-switch will not enable - if the first scan never works, this is the problem). Thread.Sleep(9500); }
public EDMHardware() { // add the boards Boards.Add("daq", "/dev1"); Boards.Add("pg", "/dev2"); Boards.Add("counter", "/dev3"); Boards.Add("usbDAQ1", "/dev4"); Boards.Add("analogIn", "/dev5"); Boards.Add("usbDAQ2", "/dev6"); Boards.Add("usbDAQ3", "/dev7"); Boards.Add("usbDAQ4", "/dev9"); string pgBoard = (string)Boards["pg"]; string daqBoard = (string)Boards["daq"]; string counterBoard = (string)Boards["counter"]; string usbDAQ1 = (string)Boards["usbDAQ1"]; string analogIn = (string)Boards["analogIn"]; string usbDAQ2 = (string)Boards["usbDAQ2"]; string usbDAQ3 = (string)Boards["usbDAQ3"]; string usbDAQ4 = (string)Boards["usbDAQ4"]; // add things to the info // the analog triggers Info.Add("analogTrigger0", (string)Boards["analogIn"] + "/PFI0"); Info.Add("analogTrigger1", (string)Boards["analogIn"] + "/PFI1"); Info.Add("sourceToDetect", 1.3); Info.Add("moleculeMass", 193.0); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", Boards["pg"] + "/PFI2"); Info.Add("PatternGeneratorBoard", pgBoard); Info.Add("PGType", "dedicated"); // YAG laser yag = new BrilliantLaser("ASRL1::INSTR"); // add the GPIB instruments Instruments.Add("green", new HP8657ASynth("GPIB0::7::INSTR")); Instruments.Add("red", new HP3325BSynth("GPIB0::12::INSTR")); Instruments.Add("4861", new ICS4861A("GPIB0::4::INSTR")); Instruments.Add("bCurrentMeter", new HP34401A("GPIB0::22::INSTR")); Instruments.Add("rfCounter", new Agilent53131A("GPIB0::3::INSTR")); Instruments.Add("rfPower", new HP438A("GPIB0::13::INSTR")); // map the digital channels // these channels are generally switched by the pattern generator // they're all in the lower half of the pg AddDigitalOutputChannel("valve", pgBoard, 0, 0); AddDigitalOutputChannel("flash", pgBoard, 0, 1); AddDigitalOutputChannel("q", pgBoard, 0, 2); AddDigitalOutputChannel("detector", pgBoard, 0, 3); AddDigitalOutputChannel("detectorprime", pgBoard, 1, 2); // this trigger is for switch scanning // see ModulatedAnalogShotGatherer.cs // for details. AddDigitalOutputChannel("rfSwitch", pgBoard, 0, 4); AddDigitalOutputChannel("fmSelect", pgBoard, 1, 0); // This line selects which fm voltage is // sent to the synth. AddDigitalOutputChannel("attenuatorSelect", pgBoard, 0, 5); // This line selects the attenuator voltage // sent to the voltage-controlled attenuator. AddDigitalOutputChannel("piFlip", pgBoard, 1, 1); AddDigitalOutputChannel("ttlSwitch", pgBoard, 1, 3); // This is the output that the pg // will switch if it's switch scanning. AddDigitalOutputChannel("scramblerEnable", pgBoard, 1, 4); // these channel are usually software switched - they should not be in // the lower half of the pattern generator AddDigitalOutputChannel("b", pgBoard, 2, 0); AddDigitalOutputChannel("notB", pgBoard, 2, 1); AddDigitalOutputChannel("db", pgBoard, 2, 2); AddDigitalOutputChannel("notDB", pgBoard, 2, 3); // AddDigitalOutputChannel("notEOnOff", pgBoard, 2, 4); // this line seems to be broken on our pg board // AddDigitalOutputChannel("eOnOff", pgBoard, 2, 5); // this and the above are not used now we have analog E control AddDigitalOutputChannel("targetStepper", pgBoard, 2, 5); AddDigitalOutputChannel("ePol", pgBoard, 2, 6); AddDigitalOutputChannel("notEPol", pgBoard, 2, 7); AddDigitalOutputChannel("eBleed", pgBoard, 3, 0); AddDigitalOutputChannel("piFlipEnable", pgBoard, 3, 1); AddDigitalOutputChannel("notPIFlipEnable", pgBoard, 3, 5); AddDigitalOutputChannel("pumpShutter", pgBoard, 3, 3); AddDigitalOutputChannel("probeShutter", pgBoard, 3, 4); AddDigitalOutputChannel("argonShutter", pgBoard, 3, 2);// (3,6) & (3,7) are dead. // map the analog channels // These channels are on the daq board. Used mainly for diagnostic purposes. // On no account should they switch during the edm acquisition pattern. AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("probePD", daqBoard + "/ai4", AITerminalConfiguration.Nrse); AddAnalogInputChannel("pumpPD", daqBoard + "/ai5", AITerminalConfiguration.Nrse); AddAnalogInputChannel("northLeakage", daqBoard + "/ai6", AITerminalConfiguration.Nrse); AddAnalogInputChannel("southLeakage", daqBoard + "/ai7", AITerminalConfiguration.Nrse); // Used ai10,11 & 12 over 6,7 & 8 for miniFluxgates, because ai8, 9 have an isolated ground. AddAnalogInputChannel("miniFlux1", daqBoard + "/ai10", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux2", daqBoard + "/ai11", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux3", daqBoard + "/ai12", AITerminalConfiguration.Nrse); // high quality analog inputs (will be) on the S-series analog in board AddAnalogInputChannel("top", analogIn + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("norm", analogIn + "/ai1", AITerminalConfiguration.Differential); AddAnalogInputChannel("magnetometer", analogIn + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("gnd", analogIn + "/ai3", AITerminalConfiguration.Differential); AddAnalogInputChannel("battery", analogIn + "/ai4", AITerminalConfiguration.Differential); AddAnalogInputChannel("piMonitor", analogIn + "/ai5", AITerminalConfiguration.Differential); AddAnalogOutputChannel("phaseScramblerVoltage", daqBoard + "/ao0"); AddAnalogOutputChannel("b", daqBoard + "/ao1"); // rf rack control //AddAnalogInputChannel("rfPower", usbDAQ1 + "/ai0", AITerminalConfiguration.Rse); AddAnalogOutputChannel("rf1Attenuator", usbDAQ1 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2Attenuator", usbDAQ1 + "/ao1", 0, 5); AddAnalogOutputChannel("rf1FM", usbDAQ2 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2FM", usbDAQ2 + "/ao1", 0, 5); // E field control and monitoring AddAnalogInputChannel("cPlusMonitor", usbDAQ3 + "/ai1", AITerminalConfiguration.Differential); AddAnalogInputChannel("cMinusMonitor", usbDAQ3 + "/ai2", AITerminalConfiguration.Differential); AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao0", -5, 0); AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao1", 0, 5); // B field control AddAnalogOutputChannel("steppingBBias", usbDAQ4 + "/ao0", 0, 5); // FL control AddAnalogOutputChannel("flPZT", usbDAQ4 + "/ao1", 0, 5); // map the counter channels AddCounterChannel("phaseLockOscillator", counterBoard + "/ctr7"); AddCounterChannel("phaseLockReference", counterBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard +"/ctr0"); //AddCounterChannel("southLeakage", counterBoard +"/ctr1"); }
public PXIEDMHardwareNormal() { // add the boards Boards.Add("daq", "/PXI1Slot18"); Boards.Add("pg", "/PXI1Slot10"); Boards.Add("counter", "/PXI1Slot3"); Boards.Add("aoBoard", "/PXI1Slot4"); // this drives the rf attenuators Boards.Add("usbDAQ1", "/Dev2"); Boards.Add("analogIn", "/PXI1Slot2"); Boards.Add("usbDAQ2", "/dev1"); Boards.Add("usbDAQ3", "/dev4"); Boards.Add("usbDAQ4", "/dev3"); Boards.Add("tclBoard", "/PXI1Slot9"); string pgBoard = (string)Boards["pg"]; string daqBoard = (string)Boards["daq"]; string counterBoard = (string)Boards["counter"]; string aoBoard = (string)Boards["aoBoard"]; string usbDAQ1 = (string)Boards["usbDAQ1"]; string analogIn = (string)Boards["analogIn"]; string usbDAQ2 = (string)Boards["usbDAQ2"]; string usbDAQ3 = (string)Boards["usbDAQ3"]; string usbDAQ4 = (string)Boards["usbDAQ4"]; string tclBoard = (string)Boards["tclBoard"]; // add things to the info // the analog triggers Info.Add("analogTrigger0", (string)Boards["analogIn"] + "/PFI0"); Info.Add("analogTrigger1", (string)Boards["analogIn"] + "/PFI1"); Info.Add("sourceToDetect", 1.3); Info.Add("moleculeMass", 193.0); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", pgBoard + "/PFI4"); //Mapped to PFI2 on 6533 connector Info.Add("PatternGeneratorBoard", pgBoard); Info.Add("PGType", "dedicated"); // rf counter switch control seq`` Info.Add("IodineFreqMon", new bool[] { false, false }); // IN 1 Info.Add("pumpAOMFreqMon", new bool[] { false, true }); // IN 2 Info.Add("FLModulationFreqMon", new bool[] { true, false }); // IN 3 Info.Add("PGTrigger", pgBoard + "/PFI5"); //Mapped to PFI7 on 6533 connector // YAG laser yag = new BrilliantLaser("ASRL2::INSTR"); // add the GPIB/RS232 instruments Instruments.Add("green", new HP8657ASynth("GPIB0::7::INSTR")); Instruments.Add("red", new HP3325BSynth("GPIB0::12::INSTR")); Instruments.Add("4861", new ICS4861A("GPIB0::4::INSTR")); Instruments.Add("bCurrentMeter", new HP34401A("GPIB0::22::INSTR")); Instruments.Add("rfCounter", new Agilent53131A("GPIB0::3::INSTR")); //Instruments.Add("rfCounter2", new Agilent53131A("GPIB0::5::INSTR")); Instruments.Add("rfPower", new HP438A("GPIB0::13::INSTR")); Instruments.Add("BfieldController", new SerialDAQ("ASRL12::INSTR")); Instruments.Add("rfCounter2", new SerialAgilent53131A("ASRL8::INSTR")); Instruments.Add("probePolControl", new SerialMotorControllerBCD("ASRL5::INSTR")); Instruments.Add("pumpPolControl", new SerialMotorControllerBCD("ASRL3::INSTR")); // map the digital channels // these channels are generally switched by the pattern generator // they're all in the lower half of the pg AddDigitalOutputChannel("valve", pgBoard, 0, 0); AddDigitalOutputChannel("flash", pgBoard, 0, 1); AddDigitalOutputChannel("q", pgBoard, 0, 2); AddDigitalOutputChannel("detector", pgBoard, 0, 3); AddDigitalOutputChannel("detectorprime", pgBoard, 1, 2); // this trigger is for switch scanning // see ModulatedAnalogShotGatherer.cs // for details. AddDigitalOutputChannel("rfSwitch", pgBoard, 0, 4); AddDigitalOutputChannel("fmSelect", pgBoard, 1, 0); // This line selects which fm voltage is // sent to the synth. AddDigitalOutputChannel("attenuatorSelect", pgBoard, 0, 5); // This line selects the attenuator voltage // sent to the voltage-controlled attenuator. AddDigitalOutputChannel("piFlip", pgBoard, 1, 1); AddDigitalOutputChannel("ttlSwitch", pgBoard, 1, 3); // This is the output that the pg // will switch if it's switch scanning. AddDigitalOutputChannel("scramblerEnable", pgBoard, 1, 4); //RF Counter Control (single pole 4 throw) //AddDigitalOutputChannel("rfCountSwBit1", pgBoard, 3, 5); //AddDigitalOutputChannel("rfCountSwBit2", pgBoard, 3, 6); // new rf amp blanking AddDigitalOutputChannel("rfAmpBlanking", pgBoard, 1, 5); // these channel are usually software switched - they should not be in // the lower half of the pattern generator AddDigitalOutputChannel("b", pgBoard, 2, 0); AddDigitalOutputChannel("notB", pgBoard, 2, 1); AddDigitalOutputChannel("db", pgBoard, 2, 2); AddDigitalOutputChannel("notDB", pgBoard, 2, 3); // AddDigitalOutputChannel("notEOnOff", pgBoard, 2, 4); // this line seems to be broken on our pg board // AddDigitalOutputChannel("eOnOff", pgBoard, 2, 5); // this and the above are not used now we have analog E control AddDigitalOutputChannel("targetStepper", pgBoard, 2, 5); AddDigitalOutputChannel("ePol", pgBoard, 2, 6); AddDigitalOutputChannel("notEPol", pgBoard, 2, 7); AddDigitalOutputChannel("eBleed", pgBoard, 3, 0); AddDigitalOutputChannel("piFlipEnable", pgBoard, 3, 1); AddDigitalOutputChannel("notPIFlipEnable", pgBoard, 3, 5); AddDigitalOutputChannel("pumpShutter", pgBoard, 3, 3); AddDigitalOutputChannel("probeShutter", pgBoard, 3, 4); AddDigitalOutputChannel("argonShutter", pgBoard, 3, 2); //I2 Lock Control AddDigitalOutputChannel("I2PropSwitch", pgBoard, 2, 4); AddDigitalOutputChannel("I2IntSwitch", pgBoard, 3, 6); AddDigitalOutputChannel("fibreAmpEnable", aoBoard, 0, 0); // Map the digital input channels AddDigitalInputChannel("fibreAmpMasterErr", aoBoard, 0, 1); AddDigitalInputChannel("fibreAmpSeedErr", aoBoard, 0, 2); AddDigitalInputChannel("fibreAmpBackFeflectErr", aoBoard, 0, 3); AddDigitalInputChannel("fibreAmpTempErr", aoBoard, 0, 4); AddDigitalInputChannel("fibreAmpPowerSupplyErr", aoBoard, 0, 5); // map the analog channels // These channels are on the daq board. Used mainly for diagnostic purposes. // On no account should they switch during the edm acquisition pattern. AddAnalogInputChannel("diodeLaserCurrent", daqBoard + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("probePD", daqBoard + "/ai4", AITerminalConfiguration.Nrse); AddAnalogInputChannel("pumpPD", daqBoard + "/ai5", AITerminalConfiguration.Nrse); AddAnalogInputChannel("northLeakage", daqBoard + "/ai6", AITerminalConfiguration.Nrse); AddAnalogInputChannel("southLeakage", daqBoard + "/ai7", AITerminalConfiguration.Nrse); // Used ai13,11 & 12 over 6,7 & 8 for miniFluxgates, because ai8, 9 have an isolated ground. AddAnalogInputChannel("miniFlux1", daqBoard + "/ai13", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux2", daqBoard + "/ai11", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux3", daqBoard + "/ai12", AITerminalConfiguration.Nrse); AddAnalogInputChannel("piMonitor", daqBoard + "/ai10", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("diodeLaserRefCavity", daqBoard + "/ai13", AITerminalConfiguration.Nrse); // Don't use ai10, cross talk with other channels on this line // high quality analog inputs (will be) on the S-series analog in board AddAnalogInputChannel("top", analogIn + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("norm", analogIn + "/ai1", AITerminalConfiguration.Differential); AddAnalogInputChannel("magnetometer", analogIn + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("gnd", analogIn + "/ai3", AITerminalConfiguration.Differential); AddAnalogInputChannel("battery", analogIn + "/ai4", AITerminalConfiguration.Differential); //AddAnalogInputChannel("piMonitor", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("bFieldCurrentMonitor", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf1Amplitude", analogIn + "/ai5", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf2Amplitude", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("rfCurrent", analogIn + "/ai7 ", AITerminalConfiguration.Differential); AddAnalogOutputChannel("phaseScramblerVoltage", aoBoard + "/ao0"); AddAnalogOutputChannel("b", aoBoard + "/ao1"); // rf rack control //AddAnalogInputChannel("rfPower", usbDAQ1 + "/ai0", AITerminalConfiguration.Rse); AddAnalogOutputChannel("rf1Attenuator", usbDAQ1 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2Attenuator", usbDAQ1 + "/ao1", 0, 5); AddAnalogOutputChannel("rf1FM", usbDAQ2 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2FM", usbDAQ2 + "/ao1", 0, 5); // E field control and monitoring AddAnalogInputChannel("cPlusMonitor", usbDAQ3 + "/ai1", AITerminalConfiguration.Differential); AddAnalogInputChannel("cMinusMonitor", usbDAQ3 + "/ai2", AITerminalConfiguration.Differential); AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao0", 0, 10); AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao1", 0, 10); // B field control //AddAnalogOutputChannel("steppingBBias", usbDAQ4 + "/ao0", 0, 5); // map the counter channels AddCounterChannel("phaseLockOscillator", counterBoard + "/ctr7"); AddCounterChannel("phaseLockReference", counterBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); //TCL Lockable lasers //Info.Add("TCLLockableLasers", new string[][] { new string[] { "flPZT2" }, /*new string[] { "flPZT2Temp" },*/ new string[] { "fibreAOM", "flPZT2Temp" } }); Info.Add("TCLLockableLasers", new string[] { "flPZT2" }); //, new string[] { "flPZT2Temp" }, new string[] { "fibreAOM"} }); Info.Add("TCLPhotodiodes", new string[] { "transCavV", "master", "p1" }); // THE FIRST TWO MUST BE CAVITY AND MASTER PHOTODIODE!!!! Info.Add("TCL_Slave_Voltage_Limit_Upper", 10.0); //volts: Laser control Info.Add("TCL_Slave_Voltage_Limit_Lower", 0.0); //volts: Laser control Info.Add("TCL_Default_Gain", -1.1); //Info.Add("TCL_Default_ScanPoints", 250); Info.Add("TCL_Default_VoltageToLaser", 2.5); Info.Add("TCL_Default_VoltageToDependent", 1.0); // Some matching up for TCL Info.Add("flPZT2", "p1"); Info.Add("flPZT2Temp", "p1"); //Info.Add("fibreAOM", "p1"); Info.Add("TCLTrigger", tclBoard + "/PFI0"); Info.Add("TCL_MAX_INPUT_VOLTAGE", 10.0); AddAnalogInputChannel("transCavV", tclBoard + "/ai0", AITerminalConfiguration.Rse); AddAnalogInputChannel("master", tclBoard + "/ai1", AITerminalConfiguration.Rse); AddAnalogInputChannel("p1", tclBoard + "/ai2", AITerminalConfiguration.Rse); // Laser control //AddAnalogOutputChannel("flPZT", usbDAQ4 + "/ao1", 0, 5); AddAnalogOutputChannel("flPZT", aoBoard + "/ao7", 0, 10); AddAnalogOutputChannel("flPZT2", aoBoard + "/ao2", 0, 10); AddAnalogOutputChannel("fibreAmpPwr", aoBoard + "/ao3"); //AddAnalogOutputChannel("pumpAOM", aoBoard + "/ao4", 0, 10); AddAnalogOutputChannel("pumpAOM", usbDAQ4 + "/ao0", 0, 5); //AddAnalogOutputChannel("flPZT2Temp", aoBoard + "/ao5", 0, 4); //voltage must not exceed 4V for Koheras laser //AddAnalogOutputChannel("flPZT2Cur", aoBoard + "/ao6", 0, 5); //voltage must not exceed 5V for Koheras laser //AddAnalogOutputChannel("fibreAOM", usbDAQ4 + "/ao1", 0, 5); AddAnalogOutputChannel("rampfb", aoBoard + "/ao4", -10, 10); AddAnalogOutputChannel("I2LockBias", aoBoard + "/ao5", 0, 5); }
public RainbowHardware() { // add the boards Boards.Add("daq", "/PXI1Slot4"); Boards.Add("TCLBoard", "/PXI1Slot6"); string daqBoard = (string)Boards["daq"]; string TCLBoard = (string)Boards["TCLBoard"]; // add things to the info // the analog triggers Info.Add("analogTrigger0", (string)Boards["daq"] + "/PFI1"); Info.Add("analogTrigger1", (string)Boards["daq"] + "/PFI2"); Info.Add("sourceToDetect", 0.4); Info.Add("moleculeMass", 100.0); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", daqBoard + "/PFI4"); Info.Add("PatternGeneratorBoard", daqBoard); Info.Add("PGType", "integrated"); Info.Add("PGClockCounter", "/ctr0"); //TCL Configuration TCLConfig tcl1 = new TCLConfig("Hamish McCavity"); tcl1.AddLaser("laser", "p1"); tcl1.AddLaser("laser2", "p2"); tcl1.AddLaser("laser4", "p4"); tcl1.Trigger = TCLBoard + "/PFI0"; tcl1.Cavity = "cavityRampMonitor"; tcl1.MasterLaser = "master"; tcl1.Ramp = "rampfb"; tcl1.AnalogSampleRate = 50000; tcl1.TCPChannel = 1190; Info.Add("Hamish", tcl1); Info.Add("DefaultCavity", tcl1); //TCL Lockable lasers - this stuff should no longer be needed - leave here for reference //Info.Add("TCLLockableLasers", new string[] { "laser","laser2","laser4"}); //Info.Add("TCLPhotodiodes", new string[] { "cavityRampMonitor", "master", "p1", "p2","p4"});// THE FIRST TWO MUST BE CAVITY AND MASTER PHOTODIODE!!!! //Info.Add("TCL_Slave_Voltage_Limit_Upper", 2.0); //volts: Laser control //Info.Add("TCL_Slave_Voltage_Limit_Lower", -2.0); //volts: Laser control //Info.Add("TCL_Default_Gain", -0.01); //Info.Add("TCL_Default_VoltageToLaser", 0.0); //Info.Add("TCL_MAX_INPUT_VOLTAGE", 10.0); //// Some matching up for TCL //Info.Add("laser", "p1"); //Info.Add("laser2", "p2"); //Info.Add("laser4", "p4"); //Info.Add("TCLTrigger", TCLBoard + "/PFI0"); // YAG laser yag = new BrilliantLaser("ASRL3::INSTR"); // add the GPIB instruments // map the digital channels AddDigitalOutputChannel("valve", daqBoard, 0, 0); AddDigitalOutputChannel("flash", daqBoard, 0, 1); AddDigitalOutputChannel("q", daqBoard, 0, 2); AddDigitalOutputChannel("detector", daqBoard, 0, 3); AddDigitalOutputChannel("detectorprime", daqBoard, 0, 4); // this trigger is for switch scanning AddDigitalOutputChannel("aom", daqBoard, 0, 5); // this trigger is for switch scanning // map the analog input channels AddAnalogInputChannel("pmt", daqBoard + "/ai1", AITerminalConfiguration.Nrse); AddAnalogInputChannel("norm", daqBoard + "/ai0", AITerminalConfiguration.Nrse); AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("master", TCLBoard + "/ai1", AITerminalConfiguration.Rse); AddAnalogInputChannel("p1", TCLBoard + "/ai3", AITerminalConfiguration.Rse); AddAnalogInputChannel("cavityRampMonitor", TCLBoard + "/ai2", AITerminalConfiguration.Rse); AddAnalogInputChannel("p4", TCLBoard + "/ai0", AITerminalConfiguration.Rse); AddAnalogInputChannel("p2", TCLBoard + "/ai5", AITerminalConfiguration.Rse); // map the analog output channels AddAnalogOutputChannel("laser", TCLBoard + "/ao0"); AddAnalogOutputChannel("laser4", TCLBoard + "/ao1"); AddAnalogOutputChannel("laser2", daqBoard + "/ao1"); AddAnalogOutputChannel("laser3", daqBoard + "/ao2"); AddAnalogOutputChannel("rampfb", daqBoard + "/ao0"); //Transfer Cavity Lock //AddAnalogOutputChannel("cavity", daqBoard + "/ao1"); //Info.Add("analogTrigger2", (string)Boards["daq"] + "/PFI0"); //Info.Add("analogTrigger3", (string)Boards["daq"] + "/PFI3"); //AddDigitalOutputChannel("scanTrigger", daqBoard, 0, 6); //AddAnalogInputChannel("slavepd", daqBoard + "/ai4", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("masterpd", daqBoard + "/ai5", AITerminalConfiguration.Nrse); // map the counter channels //AddCounterChannel("phaseLockOscillator", daqBoard + "/ctr7"); //AddCounterChannel("phaseLockReference", daqBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); }
public RainbowHardware() { // add the boards Boards.Add("daq", "/PXI1Slot4"); Boards.Add("TCLBoard", "/PXI1Slot6"); string daqBoard = (string)Boards["daq"]; string TCLBoard = (string)Boards["TCLBoard"]; // add things to the info // the analog triggers Info.Add("analogTrigger0", (string)Boards["daq"] + "/PFI1"); Info.Add("analogTrigger1", (string)Boards["daq"] + "/PFI2"); Info.Add("sourceToDetect", 0.4); Info.Add("moleculeMass", 100.0); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", daqBoard + "/PFI4"); Info.Add("PatternGeneratorBoard", daqBoard); Info.Add("PGType", "integrated"); Info.Add("PGClockCounter", "/ctr0"); //TCL Lockable lasers Info.Add("TCLLockableLasers", new string[] { "laser","laser2","laser4"}); Info.Add("TCLPhotodiodes", new string[] { "cavityRampMonitor", "master", "p1", "p2","p4"});// THE FIRST TWO MUST BE CAVITY AND MASTER PHOTODIODE!!!! Info.Add("TCL_Slave_Voltage_Limit_Upper", 2.0); //volts: Laser control Info.Add("TCL_Slave_Voltage_Limit_Lower", -2.0); //volts: Laser control Info.Add("TCL_Default_Gain", -0.01); Info.Add("TCL_Default_VoltageToLaser", 0.0); Info.Add("TCL_MAX_INPUT_VOLTAGE", 10.0); // Some matching up for TCL Info.Add("laser", "p1"); Info.Add("laser2", "p2"); Info.Add("laser4", "p4"); Info.Add("TCLTrigger", TCLBoard + "/PFI0"); // YAG laser yag = new BrilliantLaser("ASRL3::INSTR"); // add the GPIB instruments // map the digital channels AddDigitalOutputChannel("valve", daqBoard, 0, 0); AddDigitalOutputChannel("flash", daqBoard, 0, 1); AddDigitalOutputChannel("q", daqBoard, 0, 2); AddDigitalOutputChannel("detector", daqBoard, 0, 3); AddDigitalOutputChannel("detectorprime", daqBoard, 0, 4); // this trigger is for switch scanning AddDigitalOutputChannel("aom", daqBoard, 0, 5); // this trigger is for switch scanning // map the analog input channels AddAnalogInputChannel("pmt", daqBoard + "/ai1", AITerminalConfiguration.Nrse); AddAnalogInputChannel("norm", daqBoard + "/ai0", AITerminalConfiguration.Nrse); AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("master", TCLBoard + "/ai1", AITerminalConfiguration.Rse); AddAnalogInputChannel("p1", TCLBoard + "/ai3", AITerminalConfiguration.Rse); AddAnalogInputChannel("cavityRampMonitor", TCLBoard + "/ai2", AITerminalConfiguration.Rse); AddAnalogInputChannel("p4", TCLBoard + "/ai0", AITerminalConfiguration.Rse); AddAnalogInputChannel("p2", TCLBoard + "/ai5", AITerminalConfiguration.Rse); // map the analog output channels AddAnalogOutputChannel("laser", TCLBoard + "/ao0"); AddAnalogOutputChannel("laser4", TCLBoard + "/ao1"); AddAnalogOutputChannel("laser2", daqBoard + "/ao1"); AddAnalogOutputChannel("laser3", daqBoard + "/ao2"); AddAnalogOutputChannel("rampfb", daqBoard + "/ao0"); //Transfer Cavity Lock //AddAnalogOutputChannel("cavity", daqBoard + "/ao1"); //Info.Add("analogTrigger2", (string)Boards["daq"] + "/PFI0"); //Info.Add("analogTrigger3", (string)Boards["daq"] + "/PFI3"); //AddDigitalOutputChannel("scanTrigger", daqBoard, 0, 6); //AddAnalogInputChannel("slavepd", daqBoard + "/ai4", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("masterpd", daqBoard + "/ai5", AITerminalConfiguration.Nrse); // map the counter channels //AddCounterChannel("phaseLockOscillator", daqBoard + "/ctr7"); //AddCounterChannel("phaseLockReference", daqBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); }
public PXIEDMHardware() { // add the boards Boards.Add("daq", "/PXI1Slot18"); Boards.Add("pg", "/PXI1Slot10"); Boards.Add("doBoard", "/PXI1Slot11"); Boards.Add("analogIn2", "/PXI1Slot17"); Boards.Add("counter", "/PXI1Slot16"); Boards.Add("aoBoard", "/PXI1Slot2"); // this drives the rf attenuators Boards.Add("usbDAQ1", "/Dev2"); Boards.Add("analogIn", "/PXI1Slot15"); Boards.Add("usbDAQ2", "/Dev4"); Boards.Add("usbDAQ3", "/Dev1"); Boards.Add("usbDAQ4", "/Dev3"); //Boards.Add("tclBoardPump", "/PXI1Slot17"); //Boards.Add("tclBoardProbe", "/PXI1Slot9"); string rfAWG = (string)Boards["rfAWG"]; string pgBoard = (string)Boards["pg"]; string daqBoard = (string)Boards["daq"]; string analogIn2 = (string)Boards["analogIn2"]; string counterBoard = (string)Boards["counter"]; string aoBoard = (string)Boards["aoBoard"]; string usbDAQ1 = (string)Boards["usbDAQ1"]; string analogIn = (string)Boards["analogIn"]; string usbDAQ2 = (string)Boards["usbDAQ2"]; string usbDAQ3 = (string)Boards["usbDAQ3"]; string usbDAQ4 = (string)Boards["usbDAQ4"]; string doBoard = (string)Boards["doBoard"]; //string tclBoardPump = (string)Boards["tclBoardPump"]; //string tclBoardProbe = (string)Boards["tclBoardProbe"]; // add things to the info // the analog triggers Info.Add("analogTrigger0", (string)Boards["analogIn"] + "/PFI0"); Info.Add("analogTrigger1", (string)Boards["analogIn"] + "/PFI1"); Info.Add("sourceToDetect", 1.3); Info.Add("moleculeMass", 193.0); Info.Add("machineLengthRatio", 3.842); Info.Add("defaultGate", new double[] { 2190, 80 }); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", pgBoard + "/PFI4"); //Mapped to PFI2 on 6533 connector Info.Add("PatternGeneratorBoard", pgBoard); Info.Add("PGType", "dedicated"); // rf counter switch control seq`` Info.Add("IodineFreqMon", new bool[] { false, false }); // IN 1 Info.Add("pumpAOMFreqMon", new bool[] { false, true }); // IN 2 Info.Add("FLModulationFreqMon", new bool[] { true, false }); // IN 3 Info.Add("PGTrigger", pgBoard + "/PFI5"); //Mapped to PFI7 on 6533 connector // YAG laser yag = new BrilliantLaser("ASRL13::INSTR"); // add the GPIB/RS232/USB instruments Instruments.Add("green", new HP8657ASynth("GPIB0::7::INSTR")); //Instruments.Add("gigatronix", new Gigatronics7100Synth("GPIB0::19::INSTR")); Instruments.Add("red", new HP3325BSynth("ASRL12::INSTR")); Instruments.Add("4861", new ICS4861A("GPIB0::4::INSTR")); Instruments.Add("bCurrentMeter", new HP34401A("GPIB0::12::INSTR")); Instruments.Add("rfCounter", new Agilent53131A("GPIB0::3::INSTR")); //Instruments.Add("rfCounter2", new Agilent53131A("GPIB0::5::INSTR")); Instruments.Add("rfPower", new HP438A("GPIB0::13::INSTR")); Instruments.Add("BfieldController", new SerialDAQ("ASRL19::INSTR")); Instruments.Add("rfCounter2", new SerialAgilent53131A("ASRL17::INSTR")); Instruments.Add("probePolControl", new SerialMotorControllerBCD("ASRL8::INSTR")); Instruments.Add("pumpPolControl", new SerialMotorControllerBCD("ASRL11::INSTR")); Instruments.Add("anapico", new AnapicoSynth("USB0::1003::45055::321-028100000-0168::0::INSTR")); //old anapico 1 channel Instruments.Add("anapicoSYN420", new AnapicoSynth("USB0::0x03EB::0xAFFF::322-03A100005-0539::INSTR")); // new 2 channel anapico Instruments.Add("rfAWG", new NIPXI5670("PXI1Slot4")); // map the digital channels // these channels are generally switched by the pattern generator // they're all in the lower half of the pg AddDigitalOutputChannel("valve", pgBoard, 0, 0); AddDigitalOutputChannel("flash", pgBoard, 0, 1); AddDigitalOutputChannel("q", pgBoard, 0, 2); AddDigitalOutputChannel("detector", pgBoard, 0, 3); AddDigitalOutputChannel("detectorprime", pgBoard, 1, 2); // this trigger is for switch scanning // see ModulatedAnalogShotGatherer.cs // for details. AddDigitalOutputChannel("rfSwitch", pgBoard, 0, 4); AddDigitalOutputChannel("fmSelect", pgBoard, 1, 0); // This line selects which fm voltage is // sent to the synth. AddDigitalOutputChannel("attenuatorSelect", pgBoard, 0, 5); // This line selects the attenuator voltage // sent to the voltage-controlled attenuator. AddDigitalOutputChannel("piFlip", pgBoard, 1, 1); //AddDigitalOutputChannel("ttlSwitch", pgBoard, 1, 3); // This is the output that the pg // will switch if it's switch scanning. AddDigitalOutputChannel("ttlSwitch", pgBoard, 3, 5); // This is the output that the pg AddDigitalOutputChannel("scramblerEnable", pgBoard, 1, 4); //RF Counter Control (single pole 4 throw) //AddDigitalOutputChannel("rfCountSwBit1", pgBoard, 3, 5); //AddDigitalOutputChannel("rfCountSwBit2", pgBoard, 3, 6); // new rf amp blanking AddDigitalOutputChannel("rfAmpBlanking", pgBoard, 1, 5); AddDigitalOutputChannel("mwEnable", pgBoard, 3, 3); AddDigitalOutputChannel("mwSelectPumpChannel", pgBoard, 3, 6); AddDigitalOutputChannel("mwSelectTopProbeChannel", pgBoard, 3, 2); AddDigitalOutputChannel("mwSelectBottomProbeChannel", pgBoard, 2, 4); AddDigitalOutputChannel("pumprfSwitch", pgBoard, 3, 4); // rf awg test AddDigitalOutputChannel("rfAWGTestTrigger", doBoard, 0, 1); // these channel are usually software switched - they are on the AO board AddDigitalOutputChannel("b", aoBoard, 0, 0); AddDigitalOutputChannel("notB", aoBoard, 0, 1); AddDigitalOutputChannel("db", aoBoard, 0, 2); AddDigitalOutputChannel("notDB", aoBoard, 0, 3); AddDigitalOutputChannel("piFlipEnable", aoBoard, 0, 4); AddDigitalOutputChannel("notPIFlipEnable", aoBoard, 0, 5); //not connected to anything AddDigitalOutputChannel("mwSwitching", aoBoard, 0, 6); // these digitial outputs are switched slowly during the pattern AddDigitalOutputChannel("ePol", usbDAQ4, 0, 4); AddDigitalOutputChannel("notEPol", usbDAQ4, 0, 5); AddDigitalOutputChannel("eBleed", usbDAQ4, 0, 6); AddDigitalOutputChannel("eSwitching", usbDAQ4, 0, 7); // these digitial outputs are are not switched during the pattern AddDigitalOutputChannel("argonShutter", usbDAQ4, 0, 0); AddDigitalOutputChannel("patternTTL", usbDAQ4, 0, 2); AddDigitalOutputChannel("rfPowerAndFreqSelectSwitch", usbDAQ4, 0, 3); AddDigitalOutputChannel("targetStepper", usbDAQ4, 0, 1);; // map the analog channels // These channels are on the daq board. Used mainly for diagnostic purposes. AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("valveMonVoltage", daqBoard + "/ai4", AITerminalConfiguration.Rse); //AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("topPD", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("bottomPD", daqBoard + "/ai5", AITerminalConfiguration.Nrse); AddAnalogInputChannel("northLeakage", daqBoard + "/ai6", AITerminalConfiguration.Nrse); AddAnalogInputChannel("southLeakage", daqBoard + "/ai7", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("northLeakage", usbDAQ4 + "/ai0", AITerminalConfiguration.Rse); //AddAnalogInputChannel("southLeakage", usbDAQ4 + "/ai1", AITerminalConfiguration.Rse); // Used ai13,11 & 12 over 6,7 & 8 for miniFluxgates, because ai8, 9 have an isolated ground. AddAnalogInputChannel("miniFlux1", daqBoard + "/ai13", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux2", daqBoard + "/ai11", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux3", daqBoard + "/ai12", AITerminalConfiguration.Nrse); AddAnalogInputChannel("ground", daqBoard + "/ai14", AITerminalConfiguration.Nrse); AddAnalogInputChannel("piMonitor", daqBoard + "/ai10", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("diodeLaserRefCavity", daqBoard + "/ai13", AITerminalConfiguration.Nrse); // Don't use ai10, cross talk with other channels on this line // high quality analog inputs (will be) on the S-series analog in board // The last number in AddAnalogInputChannel is an optional calibration which turns VuS and MHz AddAnalogInputChannel("topProbe", analogIn + "/ai0", AITerminalConfiguration.Differential, 0.1); AddAnalogInputChannel("bottomProbe", analogIn + "/ai1", AITerminalConfiguration.Differential, 0.02); AddAnalogInputChannel("magnetometer", analogIn + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("gnd", analogIn + "/ai3", AITerminalConfiguration.Differential); AddAnalogInputChannel("battery", analogIn + "/ai4", AITerminalConfiguration.Differential); //AddAnalogInputChannel("piMonitor", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("bFieldCurrentMonitor", analogIn + "/ai6", AITerminalConfiguration.Differential); //AddAnalogInputChannel("reflectedrf1Amplitude", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("reflectedrf2Amplitude", analogIn + "/ai6", AITerminalConfiguration.Differential); //AddAnalogInputChannel("rfCurrent", analogIn + "/ai7 ", AITerminalConfiguration.Differential); AddAnalogInputChannel("middlePenningGauge", daqBoard + "/ai15", AITerminalConfiguration.Rse); //nothing is connected here; only here bc hardware controller needs it to build //temp inputs used for magnetic noise diagnosis in test shield, cables are labelled "00EW" AddAnalogInputChannel("quSpinFS_Y", analogIn + "/ai5", AITerminalConfiguration.Differential); AddAnalogInputChannel("quSpinFS_Z", analogIn + "/ai6", AITerminalConfiguration.Differential); //mag inputs for quspins inside the chamber AddAnalogInputChannel("quSpinFV_Y", analogIn2 + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("quSpinFV_Z", analogIn2 + "/ai3", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinB0_Y", analogIn2 + "/ai2", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinB0_Z", analogIn2 + "/ai3", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEV_Y", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("quSpinEV_Z", analogIn2 + "/ai1", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEW_Y", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEW_Z", analogIn + "/ai7", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEX_Y", analogIn2 + "/ai4", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEX_Z", analogIn2 + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEU_Y", analogIn2 + "/ai6", AITerminalConfiguration.Differential); //AddAnalogInputChannel("quSpinEU_Z", analogIn2 + "/ai7", AITerminalConfiguration.Differential); //AddAnalogInputChannel("battery2", analogIn2 + "/ai7", AITerminalConfiguration.Differential);//temp move to have battery on both DAQs to monitor //AddAnalogInputChannel("Bart200_Z", analogIn + "/ai5", AITerminalConfiguration.Differential);//this was stolen from penning gauge monitor //AddAnalogInputChannel("Bart200_X", daqBoard + "/ai3", AITerminalConfiguration.Rse); //AddAnalogInputChannel("Bart200_Y", daqBoard + "/ai15", AITerminalConfiguration.Rse); //AddAnalogInputChannel("Bart200_Z", daqBoard + "/ai5", AITerminalConfiguration.Rse);//stolen from pump and probe mon pds, which are legacy so can be replaced anyway //This analog input is broken, we assign this as a dummy so we don't break the rest of the code AddAnalogInputChannel("laserPowerMeter", analogIn2 + "/ai0", AITerminalConfiguration.Differential); AddAnalogOutputChannel("phaseScramblerVoltage", aoBoard + "/ao10"); AddAnalogOutputChannel("bScan", aoBoard + "/ao2"); //Coherent 899 dye laser ctrl voltage AddAnalogOutputChannel("Coherent899ControlVoltage", aoBoard + "/ao12", -5, 5); // B field control //AddAnalogOutputChannel("steppingBBias", usbDAQ4 + "/ao0", 0, 5); // Add B field stepping box bias analog output to this board for now (B field controller is not connected to anything!) AddAnalogOutputChannel("steppingBBias", aoBoard + "/ao8", -10, 10); // rf rack control //AddAnalogInputChannel("rfPower", usbDAQ1 + "/ai0", AITerminalConfiguration.Rse); AddAnalogOutputChannel("rf1Attenuator", usbDAQ1 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2Attenuator", usbDAQ1 + "/ao1", 0, 5); AddAnalogOutputChannel("rf1FM", usbDAQ2 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2FM", usbDAQ2 + "/ao1", 0, 5); //Source control AddAnalogOutputChannel("valveCtrlVoltage", aoBoard + "/ao14", 0, 8); // E field control and monitoring AddAnalogInputChannel("cPlusMonitor", usbDAQ3 + "/ai1", AITerminalConfiguration.Differential); AddAnalogInputChannel("cMinusMonitor", usbDAQ3 + "/ai2", AITerminalConfiguration.Differential); //AddAnalogInputChannel("cPlusMonitor", daqBoard + "/ai0", AITerminalConfiguration.Differential); //AddAnalogInputChannel("cMinusMonitor", daqBoard + "/ai1", AITerminalConfiguration.Differential); AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao1", 0, 10); AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao0", 0, 10); //Use these two lines for the applied kilovolts supply which provides 1kV/V //AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao1", 0,3.5);//these last two are for use with the bertan HV supply which requires 0 to -5V control voltage for 0 to +15kV output on the positive box //AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao0", -3.5,0); // map the counter channels AddCounterChannel("phaseLockOscillator", counterBoard + "/ctr7"); AddCounterChannel("phaseLockReference", counterBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); // Cavity inputs for the cavity that controls the Pump lasers //AddAnalogInputChannel("PumpCavityRampVoltage", tclBoardPump + "/ai8", AITerminalConfiguration.Rse); //tick //AddAnalogInputChannel("Pumpmaster", tclBoardPump + "/ai1", AITerminalConfiguration.Rse); //AddAnalogInputChannel("Pumpp1", tclBoardPump + "/ai2", AITerminalConfiguration.Rse); //AddAnalogInputChannel("Pumpp2", tclBoardPump + "/ai3", AITerminalConfiguration.Rse); // Lasers locked to pump cavity //AddAnalogOutputChannel("KeopsysDiodeLaser", tclBoardPump + "/ao2", -4, 4); //tick //AddAnalogOutputChannel("MenloPZT", tclBoardPump + "/ao0", 0, 10); //tick // Length stabilisation for pump cavity //AddAnalogOutputChannel("PumpCavityLengthVoltage", tclBoardPump + "/ao1", -10, 10); //tick //TCL configuration for pump cavity //TCLConfig tcl1 = new TCLConfig("Pump Cavity"); //tcl1.AddLaser("MenloPZT", "Pumpp1"); //tcl1.AddLaser("KeopsysDiodeLaser", "Pumpp2"); //tcl1.Trigger = tclBoardPump + "/PFI0"; //tcl1.Cavity = "PumpCavityRampVoltage"; //tcl1.MasterLaser = "Pumpmaster"; //tcl1.Ramp = "PumpCavityLengthVoltage"; //tcl1.TCPChannel = 1190; //tcl1.AnalogSampleRate = 61250; //tcl1.DefaultScanPoints = 500; //tcl1.MaximumNLMFSteps = 20; //tcl1.PointsToConsiderEitherSideOfPeakInFWHMs = 2.5; //tcl1.TriggerOnRisingEdge = false; //tcl1.AddFSRCalibration("MenloPZT", 3.84); //tcl1.AddFSRCalibration("KeopsysDiodeLaser", 3.84); //tcl1.AddDefaultGain("Master", 0.3); //tcl1.AddDefaultGain("MenloPZT", -0.2); //tcl1.AddDefaultGain("KeopsysDiodeLaser", 4); //Info.Add("PumpCavity", tcl1); //Info.Add("DefaultCavity", tcl1); // Probe cavity inputs //AddAnalogInputChannel("ProbeRampVoltage", tclBoardProbe + "/ai0", AITerminalConfiguration.Rse); //tick //AddAnalogInputChannel("Probemaster", tclBoardProbe + "/ai1", AITerminalConfiguration.Rse); //tick //AddAnalogInputChannel("Probep1", tclBoardProbe + "/ai2", AITerminalConfiguration.Rse); //tick // Lasers locked to Probe cavity //AddAnalogOutputChannel("TopticaSHGPZT", tclBoardProbe + "/ao0", -4, 4); //tick //AddAnalogOutputChannel("ProbeCavityLengthVoltage", tclBoardProbe + "/ao1", -10, 10); //tick // TCL configuration for Probe cavity //TCLConfig tcl2 = new TCLConfig("Probe Cavity"); //tcl2.AddLaser("TopticaSHGPZT", "Probep1"); //tcl2.Trigger = tclBoardProbe + "/PFI0"; //tcl2.Cavity = "ProbeRampVoltage"; //tcl2.MasterLaser = "Probemaster"; //tcl2.Ramp = "ProbeCavityLengthVoltage"; //tcl2.TCPChannel = 1191; //tcl2.AnalogSampleRate = 61250/2; //tcl2.DefaultScanPoints = 250; //tcl2.MaximumNLMFSteps = 20; //tcl2.PointsToConsiderEitherSideOfPeakInFWHMs = 12; //tcl2.AddFSRCalibration("TopticaSHGPZT", 3.84); //tcl2.TriggerOnRisingEdge = false; //tcl2.AddDefaultGain("Master", 0.4); //tcl2.AddDefaultGain("TopticaSHGPZT", 0.04); //Info.Add("ProbeCavity", tcl2); //Info.Add("DefaultCavity", tcl2); //probe AOM control AddAnalogOutputChannel("probeAOM", aoBoard + "/ao29", 0, 10); AddAnalogOutputChannel("probeAOMamp", aoBoard + "/ao28", 0, 10); //Obselete Laser control AddAnalogOutputChannel("pumpAOM", aoBoard + "/ao20", 0, 10); AddAnalogOutputChannel("fibreAmpPwr", aoBoard + "/ao3"); AddAnalogOutputChannel("I2LockBias", aoBoard + "/ao5", 0, 5); //Microwave Control Channels AddAnalogOutputChannel("uWaveDCFM", aoBoard + "/ao11", -2.5, 2.5); //AddAnalogOutputChannel("uWaveMixerV", aoBoard + "/ao12", 0, 10); AddAnalogOutputChannel("pumpMixerV", aoBoard + "/ao19", 0, 5); AddAnalogOutputChannel("bottomProbeMixerV", aoBoard + "/ao24", 0, 5); AddAnalogOutputChannel("topProbeMixerV", aoBoard + "/ao25", 0, 5); //RF control Channels AddAnalogOutputChannel("VCO161Amp", aoBoard + "/ao13", 0, 10); AddAnalogOutputChannel("VCO161Freq", aoBoard + "/ao14", 0, 10); AddAnalogOutputChannel("VCO30Amp", aoBoard + "/ao15", 0, 10); AddAnalogOutputChannel("VCO30Freq", aoBoard + "/ao16", 0, 10); AddAnalogOutputChannel("VCO155Amp", aoBoard + "/ao17", 0, 10); AddAnalogOutputChannel("VCO155Freq", aoBoard + "/ao18", 0, 10); }
public PXIEDMHardware() { // add the boards Boards.Add("daq", "/PXI1Slot18"); Boards.Add("pg", "/PXI1Slot10"); Boards.Add("counter", "/PXI1Slot3"); Boards.Add("aoBoard", "/PXI1Slot4"); // this drives the rf attenuators Boards.Add("usbDAQ1", "/Dev6"); Boards.Add("analogIn", "/PXI1Slot2"); Boards.Add("usbDAQ2", "/Dev4"); Boards.Add("usbDAQ3", "/Dev2"); Boards.Add("usbDAQ4", "/Dev5"); Boards.Add("tclBoard", "/PXI1Slot9"); string pgBoard = (string)Boards["pg"]; string daqBoard = (string)Boards["daq"]; string counterBoard = (string)Boards["counter"]; string aoBoard = (string)Boards["aoBoard"]; string usbDAQ1 = (string)Boards["usbDAQ1"]; string analogIn = (string)Boards["analogIn"]; string usbDAQ2 = (string)Boards["usbDAQ2"]; string usbDAQ3 = (string)Boards["usbDAQ3"]; string usbDAQ4 = (string)Boards["usbDAQ4"]; string tclBoard = (string)Boards["tclBoard"]; // add things to the info // the analog triggersf Info.Add("analogTrigger0", (string)Boards["analogIn"] + "/PFI0"); Info.Add("analogTrigger1", (string)Boards["analogIn"] + "/PFI1"); Info.Add("sourceToDetect", 1.3); Info.Add("moleculeMass", 193.0); Info.Add("machineLengthRatio", 3.842); Info.Add("defaultGate",new double[] {2190, 80}); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", pgBoard + "/PFI4"); //Mapped to PFI2 on 6533 connector Info.Add("PatternGeneratorBoard", pgBoard); Info.Add("PGType", "dedicated"); // rf counter switch control seq`` Info.Add("IodineFreqMon", new bool[] { false, false }); // IN 1 Info.Add("pumpAOMFreqMon", new bool[] { false, true }); // IN 2 Info.Add("FLModulationFreqMon", new bool[] { true, false }); // IN 3 Info.Add("PGTrigger", pgBoard + "/PFI5"); //Mapped to PFI7 on 6533 connector // YAG laser yag = new BrilliantLaser("ASRL9::INSTR"); // add the GPIB/RS232 instruments Instruments.Add("green", new HP8657ASynth("GPIB0::7::INSTR")); Instruments.Add("gigatronix", new Gigatronics7100Synth("GPIB0::19::INSTR")); Instruments.Add("red", new HP3325BSynth("GPIB0::12::INSTR")); Instruments.Add("4861", new ICS4861A("GPIB0::4::INSTR")); Instruments.Add("bCurrentMeter", new HP34401A("GPIB0::22::INSTR")); Instruments.Add("rfCounter", new Agilent53131A("GPIB0::3::INSTR")); //Instruments.Add("rfCounter2", new Agilent53131A("GPIB0::5::INSTR")); Instruments.Add("rfPower", new HP438A("GPIB0::13::INSTR")); Instruments.Add("BfieldController", new SerialDAQ("ASRL7::INSTR")); Instruments.Add("rfCounter2", new SerialAgilent53131A("ASRL14::INSTR")); Instruments.Add("probePolControl", new SerialMotorControllerBCD("ASRL8::INSTR")); Instruments.Add("pumpPolControl", new SerialMotorControllerBCD("ASRL11::INSTR")); // map the digital channels // these channels are generally switched by the pattern generator // they're all in the lower half of the pg AddDigitalOutputChannel("valve", pgBoard, 0, 0); AddDigitalOutputChannel("flash", pgBoard, 0, 1); AddDigitalOutputChannel("q", pgBoard, 0, 2); AddDigitalOutputChannel("detector", pgBoard, 0, 3); AddDigitalOutputChannel("detectorprime", pgBoard, 1, 2); // this trigger is for switch scanning // see ModulatedAnalogShotGatherer.cs // for details. AddDigitalOutputChannel("rfSwitch", pgBoard, 0, 4); AddDigitalOutputChannel("pumprfSwitch", pgBoard, 3, 4); AddDigitalOutputChannel("fmSelect", pgBoard, 1, 0); // This line selects which fm voltage is // sent to the synth. AddDigitalOutputChannel("attenuatorSelect", pgBoard, 0, 5); // This line selects the attenuator voltage // sent to the voltage-controlled attenuator. AddDigitalOutputChannel("piFlip", pgBoard, 1, 1); AddDigitalOutputChannel("ttlSwitch", pgBoard, 1, 3); // This is the output that the pg // will switch if it's switch scanning. AddDigitalOutputChannel("scramblerEnable", pgBoard, 1, 4); //RF Counter Control (single pole 4 throw) //AddDigitalOutputChannel("rfCountSwBit1", pgBoard, 3, 5); //AddDigitalOutputChannel("rfCountSwBit2", pgBoard, 3, 6); // new rf amp blanking AddDigitalOutputChannel("rfAmpBlanking", pgBoard, 1, 5); // these channel are usually software switched - they should not be in // the lower half of the pattern generator AddDigitalOutputChannel("b", pgBoard, 2, 0); AddDigitalOutputChannel("notB", pgBoard, 2, 1); AddDigitalOutputChannel("db", pgBoard, 2, 2); AddDigitalOutputChannel("notDB", pgBoard, 2, 3); // AddDigitalOutputChannel("notEOnOff", pgBoard, 2, 4); // this line seems to be broken on our pg board // AddDigitalOutputChannel("eOnOff", pgBoard, 2, 5); // this and the above are not used now we have analog E control AddDigitalOutputChannel("targetStepper", pgBoard, 2, 5); AddDigitalOutputChannel("ePol", pgBoard, 2, 6); AddDigitalOutputChannel("notEPol", pgBoard, 2, 7); AddDigitalOutputChannel("eBleed", pgBoard, 3, 0); AddDigitalOutputChannel("eSwitching", aoBoard, 0, 6); AddDigitalOutputChannel("piFlipEnable", pgBoard, 3, 1); AddDigitalOutputChannel("notPIFlipEnable", pgBoard, 3, 5); AddDigitalOutputChannel("mwEnable", pgBoard, 3, 3); AddDigitalOutputChannel("argonShutter", pgBoard, 3, 2); AddDigitalOutputChannel("patternTTL", aoBoard, 0, 7); //I2 Lock Control AddDigitalOutputChannel("I2PropSwitch", pgBoard, 2, 4); AddDigitalOutputChannel("I2IntSwitch", pgBoard, 3, 6); AddDigitalOutputChannel("fibreAmpEnable", aoBoard, 0, 0); // Map the digital input channels AddDigitalInputChannel("fibreAmpMasterErr", aoBoard, 0, 1); AddDigitalInputChannel("fibreAmpSeedErr", aoBoard, 0, 2); AddDigitalInputChannel("fibreAmpBackFeflectErr", aoBoard, 0, 3); AddDigitalInputChannel("fibreAmpTempErr", aoBoard, 0, 4); AddDigitalInputChannel("fibreAmpPowerSupplyErr", aoBoard, 0, 5); // map the analog channels // These channels are on the daq board. Used mainly for diagnostic purposes. // On no account should they switch during the edm acquisition pattern. //AddAnalogInputChannel("diodeLaserCurrent", daqBoard + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("probePD", daqBoard + "/ai4", AITerminalConfiguration.Nrse); AddAnalogInputChannel("pumpPD", daqBoard + "/ai5", AITerminalConfiguration.Nrse); AddAnalogInputChannel("northLeakage", daqBoard + "/ai6", AITerminalConfiguration.Nrse); AddAnalogInputChannel("southLeakage", daqBoard + "/ai7", AITerminalConfiguration.Nrse); // Used ai13,11 & 12 over 6,7 & 8 for miniFluxgates, because ai8, 9 have an isolated ground. AddAnalogInputChannel("miniFlux1", daqBoard + "/ai13", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux2", daqBoard + "/ai11", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux3", daqBoard + "/ai12", AITerminalConfiguration.Nrse); AddAnalogInputChannel("ground", daqBoard + "/ai14", AITerminalConfiguration.Nrse); AddAnalogInputChannel("piMonitor", daqBoard + "/ai10", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("diodeLaserRefCavity", daqBoard + "/ai13", AITerminalConfiguration.Nrse); // Don't use ai10, cross talk with other channels on this line // high quality analog inputs (will be) on the S-series analog in board // The last number in AddAnalogInputChannel is an optional calibration which turns VuS and MHz AddAnalogInputChannel("topProbe", analogIn + "/ai0", AITerminalConfiguration.Differential, 0.1); AddAnalogInputChannel("bottomProbe", analogIn + "/ai1", AITerminalConfiguration.Differential, 0.02); AddAnalogInputChannel("magnetometer", analogIn + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("gnd", analogIn + "/ai3", AITerminalConfiguration.Differential); AddAnalogInputChannel("battery", analogIn + "/ai4", AITerminalConfiguration.Differential); //AddAnalogInputChannel("piMonitor", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("bFieldCurrentMonitor", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf1Amplitude", analogIn + "/ai5", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf2Amplitude", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("rfCurrent", analogIn + "/ai7 ", AITerminalConfiguration.Differential); AddAnalogOutputChannel("phaseScramblerVoltage", aoBoard + "/ao10"); AddAnalogOutputChannel("b", aoBoard + "/ao2"); // rf rack control //AddAnalogInputChannel("rfPower", usbDAQ1 + "/ai0", AITerminalConfiguration.Rse); AddAnalogOutputChannel("rf1Attenuator", usbDAQ1 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2Attenuator", usbDAQ1 + "/ao1", 0, 5); AddAnalogOutputChannel("rf1FM", usbDAQ2 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2FM", usbDAQ2 + "/ao1", 0, 5); // E field control and monitoring //AddAnalogInputChannel("cPlusMonitor", usbDAQ3 + "/ai1", AITerminalConfiguration.Differential); //AddAnalogInputChannel("cMinusMonitor", usbDAQ3 + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("cPlusMonitor", daqBoard + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("cMinusMonitor", daqBoard + "/ai1", AITerminalConfiguration.Differential); AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao0", 0, 10); AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao1", 0, 10); // B field control //AddAnalogOutputChannel("steppingBBias", usbDAQ4 + "/ao0", 0, 5); // map the counter channels AddCounterChannel("phaseLockOscillator", counterBoard + "/ctr7"); AddCounterChannel("phaseLockReference", counterBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); //TCL configuration TCLConfig tcl1 = new TCLConfig("Hamish McCavity"); tcl1.AddLaser("MenloPZT", "p1"); tcl1.AddLaser("899ExternalScan", "p2"); tcl1.Trigger = tclBoard + "/PFI0"; tcl1.Cavity = "transCavV"; tcl1.MasterLaser = "master"; tcl1.Ramp = "rampfb"; tcl1.TCPChannel = 1190; tcl1.AnalogSampleRate = 50000; tcl1.DefaultScanPoints = 300; Info.Add("Hamish", tcl1); Info.Add("DefaultCavity", tcl1); //TCL Lockable lasers - this stuff should not now be needed - leave here for reference just in case //Info.Add("TCLLockableLasers", new string[][] { new string[] { "flPZT2" }, /*new string[] { "flPZT2Temp" },*/ new string[] { "fibreAOM", "flPZT2Temp" } }); //Info.Add("TCLLockableLasers", new string[] { "MenloPZT", "899ExternalScan" }); //, new string[] { "flPZT2Temp" }, new string[] { "fibreAOM"} }); //Info.Add("TCLPhotodiodes", new string[] {"transCavV", "master", "p1", "p2" });// THE FIRST TWO MUST BE CAVITY AND MASTER PHOTODIODE!!!! //Info.Add("TCL_Default_Master_Gain", -1.1); //Info.Add("TCL_Default_Lockable_Laser_Gains",-0.1); //Info.Add("TCL_Default_VoltageToLaser", 2.5); //Info.Add("TCL_Default_VoltageToDependent", 1.0); //Info.Add("TCL_Default_ScanPoints",300); // Some matching up for TCL //Info.Add("MenloPZT", "p1"); //Info.Add("flPZT2Temp", "p1"); //Info.Add("899ExternalScan", "p2"); //Info.Add("fibreAOM", "p1"); //Info.Add("TCLTrigger", tclBoard + "/PFI0"); //Info.Add("TCL_MAX_INPUT_VOLTAGE", 10.0); AddAnalogInputChannel("transCavV", tclBoard + "/ai0", AITerminalConfiguration.Rse); AddAnalogInputChannel("master", tclBoard + "/ai1", AITerminalConfiguration.Rse); AddAnalogInputChannel("p1", tclBoard + "/ai2", AITerminalConfiguration.Rse); AddAnalogInputChannel("p2", tclBoard + "/ai3", AITerminalConfiguration.Rse); // Laser control //AddAnalogOutputChannel("flPZT", usbDAQ4 + "/ao1", 0, 5); AddAnalogOutputChannel("899ExternalScan", aoBoard + "/ao4", 0, 7.5); AddAnalogOutputChannel("MenloPZT", tclBoard + "/ao0", 0, 10); AddAnalogOutputChannel("probeAOM", aoBoard + "/ao9", 0, 10); AddAnalogOutputChannel("pumpAOM", aoBoard + "/ao8", 0, 10); AddAnalogOutputChannel("fibreAmpPwr", aoBoard + "/ao3"); //AddAnalogOutputChannel("pumpAOM", aoBoard + "/ao4", 0, 10); //AddAnalogOutputChannel("flPZT2Temp", aoBoard + "/ao5", 0, 4); //voltage must not exceed 4V for Koheras laser //AddAnalogOutputChannel("flPZT2Cur", aoBoard + "/ao6", 0, 5); //voltage must not exceed 5V for Koheras laser //AddAnalogOutputChannel("fibreAOM", usbDAQ4 + "/ao1", 0, 5); AddAnalogOutputChannel("rampfb", tclBoard + "/ao1", -10, 10); AddAnalogOutputChannel("I2LockBias", aoBoard + "/ao5", 0, 5); //Microwave Control Channels AddAnalogOutputChannel("uWaveDCFM", aoBoard + "/ao11", -2.5, 2.5); AddAnalogOutputChannel("uWaveMixerV", aoBoard + "/ao12", 0, 10); AddAnalogOutputChannel("VCO161Amp", aoBoard + "/ao13", 0, 10); AddAnalogOutputChannel("VCO161Freq", aoBoard + "/ao14", 0, 10); AddAnalogOutputChannel("VCO30Amp", aoBoard + "/ao15", 0, 10); AddAnalogOutputChannel("VCO30Freq", aoBoard + "/ao16", 0, 10); AddAnalogOutputChannel("VCO155Amp", aoBoard + "/ao17", 0, 10); AddAnalogOutputChannel("VCO155Freq", aoBoard + "/ao18", 0, 10); }
public PXIEDMHardware() { // add the boards Boards.Add("rfPulseGenerator", "PXI1Slot4"); Boards.Add("daq", "/PXI1Slot18"); Boards.Add("pg", "/PXI1Slot10"); Boards.Add("counter", "/PXI1Slot16"); Boards.Add("aoBoard", "/PXI1Slot2"); // this drives the rf attenuators Boards.Add("usbDAQ1", "/Dev6"); Boards.Add("analogIn", "/PXI1Slot15"); Boards.Add("usbDAQ2", "/Dev1"); Boards.Add("usbDAQ3", "/Dev2"); Boards.Add("usbDAQ4", "/Dev5"); Boards.Add("tclBoardPump", "/PXI1Slot17"); Boards.Add("tclBoardProbe", "/PXI1Slot9"); string rfPulseGenerator = (string)Boards["rfPulseGenerator"]; string pgBoard = (string)Boards["pg"]; string daqBoard = (string)Boards["daq"]; string counterBoard = (string)Boards["counter"]; string aoBoard = (string)Boards["aoBoard"]; string usbDAQ1 = (string)Boards["usbDAQ1"]; string analogIn = (string)Boards["analogIn"]; string usbDAQ2 = (string)Boards["usbDAQ2"]; string usbDAQ3 = (string)Boards["usbDAQ3"]; string usbDAQ4 = (string)Boards["usbDAQ4"]; string tclBoardPump = (string)Boards["tclBoardPump"]; string tclBoardProbe = (string)Boards["tclBoardProbe"]; // add things to the info // the analog triggersf Info.Add("analogTrigger0", (string)Boards["analogIn"] + "/PFI0"); Info.Add("analogTrigger1", (string)Boards["analogIn"] + "/PFI1"); Info.Add("sourceToDetect", 1.3); Info.Add("moleculeMass", 193.0); Info.Add("machineLengthRatio", 3.842); Info.Add("defaultGate", new double[] { 2190, 80 }); Info.Add("phaseLockControlMethod", "synth"); Info.Add("PGClockLine", pgBoard + "/PFI4"); //Mapped to PFI2 on 6533 connector Info.Add("PatternGeneratorBoard", pgBoard); Info.Add("PGType", "dedicated"); // rf counter switch control seq`` Info.Add("IodineFreqMon", new bool[] { false, false }); // IN 1 Info.Add("pumpAOMFreqMon", new bool[] { false, true }); // IN 2 Info.Add("FLModulationFreqMon", new bool[] { true, false }); // IN 3 Info.Add("PGTrigger", pgBoard + "/PFI5"); //Mapped to PFI7 on 6533 connector // YAG laser yag = new BrilliantLaser("ASRL21::INSTR"); // add the GPIB/RS232 instruments Instruments.Add("green", new HP8657ASynth("GPIB0::7::INSTR")); Instruments.Add("gigatronix", new Gigatronics7100Synth("GPIB0::19::INSTR")); Instruments.Add("red", new HP3325BSynth("GPIB0::12::INSTR")); Instruments.Add("4861", new ICS4861A("GPIB0::4::INSTR")); Instruments.Add("bCurrentMeter", new HP34401A("GPIB0::22::INSTR")); Instruments.Add("rfCounter", new Agilent53131A("GPIB0::3::INSTR")); //Instruments.Add("rfCounter2", new Agilent53131A("GPIB0::5::INSTR")); Instruments.Add("rfPower", new HP438A("GPIB0::13::INSTR")); Instruments.Add("BfieldController", new SerialDAQ("ASRL19::INSTR")); Instruments.Add("rfCounter2", new SerialAgilent53131A("ASRL17::INSTR")); Instruments.Add("probePolControl", new SerialMotorControllerBCD("ASRL8::INSTR")); Instruments.Add("pumpPolControl", new SerialMotorControllerBCD("ASRL11::INSTR")); // map the digital channels // these channels are generally switched by the pattern generator // they're all in the lower half of the pg AddDigitalOutputChannel("valve", pgBoard, 0, 0); AddDigitalOutputChannel("flash", pgBoard, 0, 1); AddDigitalOutputChannel("q", pgBoard, 0, 2); AddDigitalOutputChannel("detector", pgBoard, 0, 3); AddDigitalOutputChannel("detectorprime", pgBoard, 1, 2); // this trigger is for switch scanning // see ModulatedAnalogShotGatherer.cs // for details. AddDigitalOutputChannel("rfSwitch", pgBoard, 0, 4); AddDigitalOutputChannel("pumprfSwitch", pgBoard, 3, 4); AddDigitalOutputChannel("fmSelect", pgBoard, 1, 0); // This line selects which fm voltage is // sent to the synth. AddDigitalOutputChannel("attenuatorSelect", pgBoard, 0, 5); // This line selects the attenuator voltage // sent to the voltage-controlled attenuator. AddDigitalOutputChannel("piFlip", pgBoard, 1, 1); AddDigitalOutputChannel("ttlSwitch", pgBoard, 1, 3); // This is the output that the pg // will switch if it's switch scanning. AddDigitalOutputChannel("scramblerEnable", pgBoard, 1, 4); //RF Counter Control (single pole 4 throw) //AddDigitalOutputChannel("rfCountSwBit1", pgBoard, 3, 5); //AddDigitalOutputChannel("rfCountSwBit2", pgBoard, 3, 6); // new rf amp blanking AddDigitalOutputChannel("rfAmpBlanking", pgBoard, 1, 5); // these channel are usually software switched - they should not be in // the lower half of the pattern generator AddDigitalOutputChannel("b", pgBoard, 2, 0); AddDigitalOutputChannel("notB", pgBoard, 2, 1); AddDigitalOutputChannel("db", pgBoard, 2, 2); AddDigitalOutputChannel("notDB", pgBoard, 2, 3); // AddDigitalOutputChannel("notEOnOff", pgBoard, 2, 4); // this line seems to be broken on our pg board // AddDigitalOutputChannel("eOnOff", pgBoard, 2, 5); // this and the above are not used now we have analog E control AddDigitalOutputChannel("ePol", pgBoard, 2, 6); AddDigitalOutputChannel("notEPol", pgBoard, 2, 7); AddDigitalOutputChannel("eBleed", pgBoard, 3, 0); AddDigitalOutputChannel("eSwitching", aoBoard, 0, 3); AddDigitalOutputChannel("piFlipEnable", pgBoard, 3, 1); AddDigitalOutputChannel("notPIFlipEnable", pgBoard, 3, 5); AddDigitalOutputChannel("mwEnable", pgBoard, 3, 3); AddDigitalOutputChannel("mwSelectPumpChannel", pgBoard, 3, 6); AddDigitalOutputChannel("mwSelectTopProbeChannel", pgBoard, 3, 2); AddDigitalOutputChannel("mwSelectBottomProbeChannel", pgBoard, 2, 4); // these digitial outputs are are not switched during the pattern AddDigitalOutputChannel("argonShutter", aoBoard, 0, 0); AddDigitalOutputChannel("patternTTL", aoBoard, 0, 7); AddDigitalOutputChannel("rfPowerAndFreqSelectSwitch", aoBoard, 0, 1); AddDigitalOutputChannel("targetStepper", aoBoard, 0, 2);; // map the analog channels // These channels are on the daq board. Used mainly for diagnostic purposes. AddAnalogInputChannel("iodine", daqBoard + "/ai2", AITerminalConfiguration.Nrse); AddAnalogInputChannel("cavity", daqBoard + "/ai3", AITerminalConfiguration.Nrse); AddAnalogInputChannel("probePD", daqBoard + "/ai4", AITerminalConfiguration.Nrse); AddAnalogInputChannel("pumpPD", daqBoard + "/ai5", AITerminalConfiguration.Nrse); AddAnalogInputChannel("northLeakage", daqBoard + "/ai6", AITerminalConfiguration.Nrse); AddAnalogInputChannel("southLeakage", daqBoard + "/ai7", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("northLeakage", usbDAQ4 + "/ai0", AITerminalConfiguration.Rse); //AddAnalogInputChannel("southLeakage", usbDAQ4 + "/ai1", AITerminalConfiguration.Rse); // Used ai13,11 & 12 over 6,7 & 8 for miniFluxgates, because ai8, 9 have an isolated ground. AddAnalogInputChannel("miniFlux1", daqBoard + "/ai13", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux2", daqBoard + "/ai11", AITerminalConfiguration.Nrse); AddAnalogInputChannel("miniFlux3", daqBoard + "/ai12", AITerminalConfiguration.Nrse); AddAnalogInputChannel("ground", daqBoard + "/ai14", AITerminalConfiguration.Nrse); AddAnalogInputChannel("piMonitor", daqBoard + "/ai10", AITerminalConfiguration.Nrse); //AddAnalogInputChannel("diodeLaserRefCavity", daqBoard + "/ai13", AITerminalConfiguration.Nrse); // Don't use ai10, cross talk with other channels on this line // high quality analog inputs (will be) on the S-series analog in board // The last number in AddAnalogInputChannel is an optional calibration which turns VuS and MHz AddAnalogInputChannel("topProbe", analogIn + "/ai0", AITerminalConfiguration.Differential, 0.1); AddAnalogInputChannel("bottomProbe", analogIn + "/ai1", AITerminalConfiguration.Differential, 0.02); AddAnalogInputChannel("magnetometer", analogIn + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("gnd", analogIn + "/ai3", AITerminalConfiguration.Differential); AddAnalogInputChannel("battery", analogIn + "/ai4", AITerminalConfiguration.Differential); //AddAnalogInputChannel("piMonitor", analogIn + "/ai5", AITerminalConfiguration.Differential); //AddAnalogInputChannel("bFieldCurrentMonitor", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf1Amplitude", analogIn + "/ai5", AITerminalConfiguration.Differential); AddAnalogInputChannel("reflectedrf2Amplitude", analogIn + "/ai6", AITerminalConfiguration.Differential); AddAnalogInputChannel("rfCurrent", analogIn + "/ai7 ", AITerminalConfiguration.Differential); AddAnalogOutputChannel("phaseScramblerVoltage", aoBoard + "/ao10"); AddAnalogOutputChannel("b", aoBoard + "/ao2"); // rf rack control //AddAnalogInputChannel("rfPower", usbDAQ1 + "/ai0", AITerminalConfiguration.Rse); AddAnalogOutputChannel("rf1Attenuator", usbDAQ1 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2Attenuator", usbDAQ1 + "/ao1", 0, 5); AddAnalogOutputChannel("rf1FM", usbDAQ2 + "/ao0", 0, 5); AddAnalogOutputChannel("rf2FM", usbDAQ2 + "/ao1", 0, 5); // E field control and monitoring //AddAnalogInputChannel("cPlusMonitor", usbDAQ3 + "/ai1", AITerminalConfiguration.Differential); //AddAnalogInputChannel("cMinusMonitor", usbDAQ3 + "/ai2", AITerminalConfiguration.Differential); AddAnalogInputChannel("cPlusMonitor", daqBoard + "/ai0", AITerminalConfiguration.Differential); AddAnalogInputChannel("cMinusMonitor", daqBoard + "/ai1", AITerminalConfiguration.Differential); AddAnalogOutputChannel("cPlus", usbDAQ3 + "/ao0", 0, 10); AddAnalogOutputChannel("cMinus", usbDAQ3 + "/ao1", 0, 10); // B field control //AddAnalogOutputChannel("steppingBBias", usbDAQ4 + "/ao0", 0, 5); // map the counter channels AddCounterChannel("phaseLockOscillator", counterBoard + "/ctr7"); AddCounterChannel("phaseLockReference", counterBoard + "/pfi10"); //AddCounterChannel("northLeakage", counterBoard + "/ctr0"); //AddCounterChannel("southLeakage", counterBoard + "/ctr1"); // Cavity inputs for the cavity that controls the Pump lasers AddAnalogInputChannel("PumpCavityRampVoltage", tclBoardPump + "/ai8", AITerminalConfiguration.Rse); //tick AddAnalogInputChannel("Pumpmaster", tclBoardPump + "/ai1", AITerminalConfiguration.Rse); AddAnalogInputChannel("Pumpp1", tclBoardPump + "/ai2", AITerminalConfiguration.Rse); AddAnalogInputChannel("Pumpp2", tclBoardPump + "/ai3", AITerminalConfiguration.Rse); // Lasers locked to pump cavity AddAnalogOutputChannel("KeopsysDiodeLaser", tclBoardPump + "/ao2", -4, 4); //tick AddAnalogOutputChannel("MenloPZT", tclBoardPump + "/ao0", 0, 10); //tick // Length stabilisation for pump cavity AddAnalogOutputChannel("PumpCavityLengthVoltage", tclBoardPump + "/ao1", -10, 10); //tick //TCL configuration for pump cavity TCLConfig tcl1 = new TCLConfig("Pump Cavity"); tcl1.AddLaser("MenloPZT", "Pumpp1"); tcl1.AddLaser("KeopsysDiodeLaser", "Pumpp2"); tcl1.Trigger = tclBoardPump + "/PFI0"; tcl1.Cavity = "PumpCavityRampVoltage"; tcl1.MasterLaser = "Pumpmaster"; tcl1.Ramp = "PumpCavityLengthVoltage"; tcl1.TCPChannel = 1190; tcl1.AnalogSampleRate = 61250; tcl1.DefaultScanPoints = 500; tcl1.MaximumNLMFSteps = 20; tcl1.PointsToConsiderEitherSideOfPeakInFWHMs = 2.5; tcl1.TriggerOnRisingEdge = false; tcl1.AddFSRCalibration("MenloPZT", 3.84); tcl1.AddFSRCalibration("KeopsysDiodeLaser", 3.84); tcl1.AddDefaultGain("Master", 0.3); tcl1.AddDefaultGain("MenloPZT", -0.2); tcl1.AddDefaultGain("KeopsysDiodeLaser", 4); Info.Add("PumpCavity", tcl1); Info.Add("DefaultCavity", tcl1); // Probe cavity inputs AddAnalogInputChannel("ProbeRampVoltage", tclBoardProbe + "/ai0", AITerminalConfiguration.Rse); //tick AddAnalogInputChannel("Probemaster", tclBoardProbe + "/ai1", AITerminalConfiguration.Rse); //tick AddAnalogInputChannel("Probep1", tclBoardProbe + "/ai2", AITerminalConfiguration.Rse); //tick // Lasers locked to Probe cavity AddAnalogOutputChannel("TopticaSHGPZT", tclBoardProbe + "/ao0", -4, 4); //tick AddAnalogOutputChannel("ProbeCavityLengthVoltage", tclBoardProbe + "/ao1", -10, 10); //tick // TCL configuration for Probe cavity TCLConfig tcl2 = new TCLConfig("Probe Cavity"); tcl2.AddLaser("TopticaSHGPZT", "Probep1"); tcl2.Trigger = tclBoardProbe + "/PFI0"; tcl2.Cavity = "ProbeRampVoltage"; tcl2.MasterLaser = "Probemaster"; tcl2.Ramp = "ProbeCavityLengthVoltage"; tcl2.TCPChannel = 1191; tcl2.AnalogSampleRate = 61250 / 2; tcl2.DefaultScanPoints = 250; tcl2.MaximumNLMFSteps = 20; tcl2.PointsToConsiderEitherSideOfPeakInFWHMs = 12; tcl2.AddFSRCalibration("TopticaSHGPZT", 3.84); tcl2.TriggerOnRisingEdge = false; tcl2.AddDefaultGain("Master", 0.4); tcl2.AddDefaultGain("TopticaSHGPZT", 0.04); Info.Add("ProbeCavity", tcl2); //Info.Add("DefaultCavity", tcl2); // Obsolete Laser control AddAnalogOutputChannel("probeAOM", aoBoard + "/ao19", 0, 10); AddAnalogOutputChannel("pumpAOM", aoBoard + "/ao20", 0, 10); AddAnalogOutputChannel("fibreAmpPwr", aoBoard + "/ao3"); AddAnalogOutputChannel("I2LockBias", aoBoard + "/ao5", 0, 5); //Microwave Control Channels AddAnalogOutputChannel("uWaveDCFM", aoBoard + "/ao11", -2.5, 2.5); //AddAnalogOutputChannel("uWaveMixerV", aoBoard + "/ao12", 0, 10); AddAnalogOutputChannel("pumpMixerV", aoBoard + "/ao19", 0, 5); AddAnalogOutputChannel("bottomProbeMixerV", aoBoard + "/ao24", 0, 5); AddAnalogOutputChannel("topProbeMixerV", aoBoard + "/ao25", 0, 5); //RF control Channels AddAnalogOutputChannel("VCO161Amp", aoBoard + "/ao13", 0, 10); AddAnalogOutputChannel("VCO161Freq", aoBoard + "/ao14", 0, 10); AddAnalogOutputChannel("VCO30Amp", aoBoard + "/ao15", 0, 10); AddAnalogOutputChannel("VCO30Freq", aoBoard + "/ao16", 0, 10); AddAnalogOutputChannel("VCO155Amp", aoBoard + "/ao17", 0, 10); AddAnalogOutputChannel("VCO155Freq", aoBoard + "/ao18", 0, 10); }