public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v00ChirpTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int singleFrequencyMolassesTime = v00ChirpTime + (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"]; int microwavePulseTime = singleFrequencyMolassesTime + (int)Parameters["SingleFreqMolassesDuration"]; int motRecaptureTime = microwavePulseTime + (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"];; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveC"); p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00MOTAOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"], "v00MOTAOM"); p.Pulse(patternStartBeforeQ, microwavePulseTime, motRecaptureTime - microwavePulseTime, "v00MOTAOM"); // turn off the MOT light for microwave pulse p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"], "v00Sidebands"); p.Pulse(patternStartBeforeQ, v00ChirpTime, 2 * (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"] + 200, "v00LockBlock"); p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.AddEdge("v10SlowingAOM", patternStartBeforeQ + (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"] - 1400, 5000, "bXSlowingShutter"); //Takes 14ms to start closing //p.Pulse(patternStartBeforeQ, microwavePulseTime - 1675, motRecaptureTime - microwavePulseTime + 1675 - 1000, "v00MOTShutter"); p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.Pulse(10000, 0, 100000, "TranslationStageTrigger"); p.AddEdge("CameraTrigger", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.DownPulse(150000, 0, 50, "CameraTrigger"); p.DownPulse(155000, 0, 50, "CameraTrigger"); // loads the mag trap by switching off the MOT beams p.AddEdge("aom0enable", (int)Parameters["MOTLoadTime"], false); p.AddEdge("aom1enable", (int)Parameters["MOTLoadTime"], false); //p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false); //switches off Zeeman beam p.AddEdge("aom2enable", (int)Parameters["MOTLoadTime"], false); //p.AddEdge("aom3enable", (int)Parameters["MOTLoadTime"], false); p.DownPulse((int)Parameters["MOTLoadTime"], 0, (int)Parameters["Frame0Trigger"] - (int)Parameters["MOTLoadTime"], "aom3enable"); //p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int motCompressStartTime = (int)Parameters["LoadingDuration"]; int molassesStartTime = motCompressStartTime + (int)Parameters["MOTCoilsCurrentRampDuration"] + (int)Parameters["MOTCoilsCurrentWaitAfterRamp"]; int opticalPumpingStartTime = molassesStartTime + (int)Parameters["MolassesDuration"]; int magTrapStartTime = opticalPumpingStartTime + (int)Parameters["OpticalPumpingDuration"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; p.Pulse(0, 0, 10, "aoPatternTrigger"); // THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired. p.Pulse(0, opticalPumpingStartTime, motRecaptureTime - opticalPumpingStartTime, "rbCoolingAOM"); p.AddEdge("rbOpticalPumpingAOM", 0, true); // Turn off for most of sequence p.DownPulse(0, opticalPumpingStartTime, (int)Parameters["OpticalPumpingDuration"], "rbOpticalPumpingAOM"); // Turn on for optical pumping step p.AddEdge("rbOpticalPumpingAOM", imageTime + 2000, false); // Turn back on safely after imaging has finished p.Pulse(0, magTrapStartTime - 1600, motRecaptureTime - magTrapStartTime + 1600 - 1200, "rbCoolingShutter"); // Takes 16ms to start closing, 14ms to fully open p.Pulse(0, magTrapStartTime - 1400, motRecaptureTime - magTrapStartTime + 1400, "rbOpticalPumpingShutter"); // Takes 14ms to start closing, don't really care when it opens again as not required for imaging //p.Pulse(0, molassesStartTime - 500, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v0F0PumpStartTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"]; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int secondMicrowavePulseTime = blowAwayTime + (int)Parameters["PokeDuration"]; int magTrapStartTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"] + (int)Parameters["WaitBeforeMagTrap"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveB"); p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveA"); p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00MOTAOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, microwavePulseTime, motRecaptureTime - microwavePulseTime, "v00MOTAOM"); // turn off the MOT light for microwave pulse p.Pulse(patternStartBeforeQ, blowAwayTime, (int)Parameters["PokeDuration"], "bXSlowingAOM"); // Blow away p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.AddEdge("v10SlowingAOM", patternStartBeforeQ + (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime - 1400, (int)Parameters["MagTrapDuration"] + 3000, "bXSlowingShutter"); //Takes 14ms to start closing //p.Pulse(patternStartBeforeQ, microwavePulseTime - 1500, motRecaptureTime - microwavePulseTime + 1500 - 1100, "v00MOTShutter"); //p.Pulse(patternStartBeforeQ, molassesStartTime, secondMicrowavePulseTime - 100 - molassesStartTime, "bottomCoilDirection"); p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.AddEdge("shutterenable", 500, false); p.AddEdge("shutterenable", 1500, true); //p.DownPulse(10000 , -5, 2, "CameraTrigger"); //take an image without the cloud. p.DownPulse(1000, 0, 2, "CameraTrigger"); //background image - no light. //p.DownPulse(10005, 0, 2, "CameraTrigger"); //take an image without the cloud. //p.DownPulse(10010, 0, 2, "CameraTrigger"); //take an image without the cloud. p.DownPulse(20005, 0, 50, "CameraTrigger"); //take an image without the cloud. p.DownPulse(30010, 0, 50, "CameraTrigger"); //take an image without the cloud. return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.Pulse(10000, 0, 100000, "TranslationStageTrigger"); p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); //p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger"); //p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger"); //p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger"); p.AddEdge("shutterenable", 50000, false); p.DownPulse(190000, 0, 50, "CameraTrigger"); p.DownPulse(195000, 0, 50, "CameraTrigger"); //p.AddEdge("aom0enable", (int)Parameters["MOTLoadTime"], false); //p.AddEdge("aom1enable", (int)Parameters["MOTLoadTime"], false); //p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); p.Pulse(0, 0, 10, "aoPatternTrigger"); //THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired. int patternStartBeforeQ = (int)Parameters["TCLBlockStart"] + (int)Parameters["RbMOTLoadTime"]; p.Pulse(patternStartBeforeQ, -(int)Parameters["TCLBlockStart"], (int)Parameters["TCLBlockDuration"], "tclBlock"); p.Pulse(patternStartBeforeQ, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch p.Pulse(patternStartBeforeQ, (int)Parameters["slowingAOMOnStart"], (int)Parameters["slowingAOMOffStart"] - (int)Parameters["slowingAOMOnStart"], "bXSlowingAOM"); //first pulse to slowing AOM p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.Pulse(patternStartBeforeQ, (int)Parameters["slowingRepumpAOMOnStart"], (int)Parameters["slowingRepumpAOMOffStart"] - (int)Parameters["slowingRepumpAOMOnStart"], "v10SlowingAOM"); //first pulse to slowing repump AOM p.AddEdge("v10SlowingAOM", patternStartBeforeQ + (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high p.Pulse(patternStartBeforeQ, (int)Parameters["BgCameraTrigger"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); //camera trigger for first frame //p.Pulse(patternStartBeforeQ, (int)Parameters["BgCameraTrigger"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.Pulse(patternStartBeforeQ, (int)Parameters["BgCameraTrigger"] + (int)Parameters["MeasCameraTriggerDelay"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int v0F0PumpStartTime = molassesStartTime + (int)Parameters["MolassesDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"]; int magTrapStartTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int magTrapStopTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int microwavePulseTimeSecond = magTrapStopTime + (int)Parameters["MicrowaveDelay"]; int motRecaptureTime = microwavePulseTimeSecond + (int)Parameters["MicrowavePulseDuration2"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.AddEdge("v00Shutter", 0, true); p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveIO");//pump out p.Pulse(patternStartBeforeQ, microwavePulseTimeSecond, (int)Parameters["MicrowavePulseDuration2"], "microwaveIO"); //pump back p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00AOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, microwavePulseTime, motRecaptureTime - microwavePulseTime, "v00AOM"); // turn off the MOT light for microwave pulse p.Pulse(patternStartBeforeQ, magTrapStartTime + (int)Parameters["MOTCoilsCurrentRampDuration"], (int)Parameters["PokeDuration"], "aom"); //poke pulse to MOT p.AddEdge("aom", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.Pulse(40000, 0, 100000, "TranslationStageTrigger"); p.AddEdge("CameraTrigger", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger"); p.DownPulse(190000, 0, 50, "CameraTrigger"); p.DownPulse(195000, 0, 50, "CameraTrigger"); // switches off the Zeeman and absorption beams to avoid reloading the MOT whilst imaging, and to allow fluorescence images to be obtained p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["CameraExposure"], "aom2enable"); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["CameraExposure"], "aom3enable"); // loads the mag trap, Zeeman light is not switched back on again to avoid MOT reloading p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["MagTrapDuration"], "aom0enable"); p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["MagTrapDuration"], "aom1enable"); p.AddEdge("aom2enable", (int)Parameters["MOTLoadDuration"], false); p.AddEdge("aom3enable", (int)Parameters["MOTLoadDuration"], false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This just loads the MOT, and leaves it "on". You need //turn off the MOT and Zeeman light yourself p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); //switches off Zeeman beams after loading p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false); //turn OFF the MOT AOMs, cutting off all light to the chamber p.AddEdge("aom3enable", (int)Parameters["MagTrapTransferTime"], false); //Imaging p.Pulse((int)Parameters["Frame0Trigger"], 0, 100, "aom1enable"); p.DownPulse((int)Parameters["Frame0Trigger"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage p.Pulse((int)Parameters["Frame1Trigger"] + 10010, 0, 100, "aom1enable"); p.DownPulse((int)Parameters["Frame1Trigger"] + 10010, 0, 100, "CameraTrigger"); //take an image without the cloud. //p.AddEdge("aom1enable", 150000, false); p.DownPulse(160000, 0, 50, "CameraTrigger"); //background image - no light. return(p); }
public void AddDigitalSnippet(PatternBuilder32 p, Dictionary <String, Object> parameters) { p.AddEdge("aom0enable", (int)parameters["MOTStartTime"], true); p.AddEdge("aom1enable", (int)parameters["MOTStartTime"], true); p.AddEdge("aom2enable", (int)parameters["MOTStartTime"], true); p.AddEdge("aom3enable", (int)parameters["MOTStartTime"], true); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 10, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.Pulse(100000, 0, 100000, "TranslationStageTrigger"); p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable"); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame2Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable"); p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger"); //p.DownPulse((int)Parameters["Frame4Trigger"] - 100, 0, (int)Parameters["ExposureTime"] + 200, "aom2enable"); //p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger"); //switches off Zeeman and Absoroption beams to obtain an image of the background scattered light with no probe beam present p.AddEdge("aom2enable", 1150000, false); p.AddEdge("aom3enable", 1150000, false); p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger"); p.DownPulse(1500000, 0, 50, "CameraTrigger"); p.DownPulse(1550000, 0, 50, "CameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v00ChirpTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int singleFrequencyMolassesTime = v00ChirpTime + (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"]; int releaseTime = singleFrequencyMolassesTime + (int)Parameters["SingleFreqMolassesDuration"]; int cameraTriggerTime = releaseTime + (int)Parameters["ExpansionTime"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00MOTAOM"); //pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"], "v00MOTAOM"); p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"] - 1400, cameraTriggerTime - (int)Parameters["MOTSwitchOffTime"] + 3000, "bXSlowingShutter"); //Takes 14ms to start closing p.Pulse(patternStartBeforeQ, releaseTime, (int)Parameters["ExpansionTime"], "v00MOTAOM"); //pulse off the MOT light to release the cloud p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"], "v00Sidebands"); p.Pulse(patternStartBeforeQ, v00ChirpTime, 2 * (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"] + 200, "v00LockBlock"); p.Pulse(patternStartBeforeQ, releaseTime - 1500, (int)Parameters["ExpansionTime"] + 1500 - 1250, "v00MOTShutter"); p.AddEdge("topCoilDirection", patternStartBeforeQ + molassesStartTime, true); p.AddEdge("topCoilDirection", patternStartBeforeQ + (int)Parameters["CoilsSwitchOffTime"] + 1000, false); p.AddEdge("bottomCoilDirection", patternStartBeforeQ + molassesStartTime, true); p.AddEdge("bottomCoilDirection", patternStartBeforeQ + (int)Parameters["CoilsSwitchOffTime"] + 1000, false); // p.Pulse(patternStartBeforeQ, 4000, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.Pulse(patternStartBeforeQ, cameraTriggerTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame return(p); }
public void AddDigitalSnippet(PatternBuilder32 p, Dictionary <String, Object> parameters) { //p.AddEdge("aom0enable", (int)parameters["MOTStartTime"], true); //p.AddEdge("aom1enable", (int)parameters["MOTStartTime"], true); //p.AddEdge("aom2enable", (int)parameters["MOTStartTime"], true); //Not with new optics setup p.AddEdge("aom3enable", (int)parameters["MOTStartTime"], true); p.AddEdge("D2EOMenable", (int)parameters["MOTStartTime"], true); p.AddEdge("ovenShutterOpen", (int)parameters["MOTStartTime"] - 7000, true);//open the oven shutter }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This just loads the MOT, and leaves it "on". You need //turn off the MOT and Zeeman light yourself p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.AddEdge("aom4enable", 0, true); //leave the optical pumping aom on for the MOT loading to stabilise it. p.AddEdge("probeshutterenable", 0, false); // leave the molasses shutter open //close the oven shutter after loading p.AddEdge("ovenShutterOpen", (int)Parameters["MOTLoadEndTime"] - 3000, false); //switches off Zeeman beams after loading p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false); //turn OFF the MOT EOMs, pumping atoms into f=1 ground state p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"] - 1, false); //turn OFF the MOT AOMs, cutting off all light to the chamber p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"], false); //turn off the Optical Pumping AOM at this time p.AddEdge("aom4enable", (int)Parameters["MOTEndTime"] - 1000, false); //pulse on the molasses light p.Pulse((int)Parameters["MOTEndTime"], (int)Parameters["MolStartDelay"], (int)Parameters["MolassesPulseLength"], "aom2enable"); //Close molasses shutter p.AddEdge("probeshutterenable", (int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MolassesShutterCloseTime"] - 30, true); //Optical Pumping p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"], -(int)Parameters["OPTimeDelay"], (int)Parameters["OPPulseLength"], "aom4enable"); //Magnetic trap //Imaging p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"] + (int)Parameters["MagTrapRampTime"] + (int)Parameters["MagTrapHoldTime"] + (int)Parameters["ImageDelay"], 0, 100, "aom1enable"); p.DownPulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"] + (int)Parameters["MagTrapRampTime"] + (int)Parameters["MagTrapHoldTime"] + (int)Parameters["ImageDelay"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage p.Pulse((int)Parameters["Frame1Trigger"], -1, 100, "aom1enable"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, 100, "CameraTrigger"); //take an image without the cloud. //p.AddEdge("aom1enable", 150000, false); p.DownPulse(90000, 0, 50, "CameraTrigger"); //background image - no light. p.DownPulse(100000, 0, 50, "CameraTrigger"); return(p); }
public void AddDigitalSnippet(PatternBuilder32 p, Dictionary <String, Object> parameters) { int patternStartBeforeQ = (int)parameters["TCLBlockStart"] + (int)parameters["MOTLoadTime"] + (int)parameters["CMOTCoilsCurrentRampDuration"]; //!!! p.Pulse(patternStartBeforeQ, (int)parameters["SlowingChirpStartTime"], (2 * (int)parameters["SlowingChirpDuration"]) + 200, "bXLockBlock"); // Want it to be blocked for whole time that bX laser is moved p.Pulse(patternStartBeforeQ, -(int)parameters["FlashToQ"], (int)parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse((int)parameters["TCLBlockStart"], 0, 10, "aoPatternTrigger"); //THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired.//trigger the Q switch !!!1st parameter was patternStartBeforeQ p.Pulse(patternStartBeforeQ, 0, (int)parameters["QSwitchPulseDuration"], "qSwitch"); p.Pulse(patternStartBeforeQ, -(int)parameters["HeliumShutterToQ"], (int)parameters["HeliumShutterDuration"], "heliumShutter"); p.Pulse(patternStartBeforeQ, (int)parameters["slowingAOMOnStart"], (int)parameters["slowingAOMOffStart"] - (int)parameters["slowingAOMOnStart"], "bXSlowingAOM"); //first pulse to slowing AOM p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)parameters["slowingAOMOffStart"] + (int)parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.Pulse(patternStartBeforeQ, (int)parameters["slowingRepumpAOMOnStart"], (int)parameters["slowingRepumpAOMOffStart"] - (int)parameters["slowingRepumpAOMOnStart"], "v10SlowingAOM"); //first pulse to slowing repump AOM p.AddEdge("v10SlowingAOM", patternStartBeforeQ + (int)parameters["slowingRepumpAOMOffStart"] + (int)parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high //p.Pulse(patternStartBeforeQ, (int)parameters["PMTTrigger"], (int)parameters["PMTTriggerDuration"], "detector"); // trigger data acquistion from PMT }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int imageTime = (int)Parameters["LoadingDuration"]; p.Pulse(0, 0, 10, "aoPatternTrigger"); // THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired. p.AddEdge("rbOpticalPumpingAOM", 0, true); // Turn off for most of sequence p.AddEdge("rbOpticalPumpingAOM", imageTime + 2000, false); // Turn back on safely after imaging has finished p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v0F0PumpStartTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"]; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int microwavePulseTimeSecond = blowAwayTime + (int)Parameters["PokeDuration"] + (int)Parameters["MicrowavePulseDelay"]; int magTrapStartTime = microwavePulseTimeSecond + (int)Parameters["MicrowavePulseDurationSecond"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagneticTrapDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveA"); //now linked to B channel p.Pulse(patternStartBeforeQ, microwavePulseTimeSecond, (int)Parameters["MicrowavePulseDurationSecond"], "microwaveB"); // now linked to gigatronics p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00MOTAOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, microwavePulseTime, motRecaptureTime - microwavePulseTime, "v00MOTAOM"); // turn off the MOT light for microwave pulse p.Pulse(patternStartBeforeQ, blowAwayTime, (int)Parameters["PokeDuration"], "bXSlowingAOM"); // Blow away pulse during magnetic trap p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger return(p); }
public void AddDigitalSnippet(PatternBuilder32 p, Dictionary <String, Object> parameters) { int patternStartBeforeQ = (int)parameters["TCLBlockStart"]; p.Pulse(0, 0, (int)parameters["TCLBlockDuration"], "tclBlock"); p.Pulse(patternStartBeforeQ, -(int)parameters["FlashToQ"], (int)parameters["QSwitchPulseDuration"], "flash"); //trigger the flashlamp p.Pulse(patternStartBeforeQ, 0, 10, "AnalogPatternTrigger"); //THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired. p.Pulse(patternStartBeforeQ, 0, (int)parameters["QSwitchPulseDuration"], "q"); //trigger the Q switch p.Pulse(patternStartBeforeQ, (int)parameters["slowingAOMOnStart"], (int)parameters["slowingAOMOffStart"] - (int)parameters["slowingAOMOnStart"], "aom"); //first pulse to slowing AOM p.AddEdge("aom", patternStartBeforeQ + (int)parameters["slowingAOMOffStart"] + (int)parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high // p.Pulse(patternStartBeforeQ, (int)parameters["slowingAOMOffStart"] + (int)parameters["slowingAOMOffDuration"], (int)parameters["slowingAOMOnDuration"] - ((int)parameters["slowingAOMOffStart"] - (int)parameters["slowingAOMOnStart"]) - (int)parameters["slowingAOMOffDuration"], "aom"); //second pulse to slowing AOM p.Pulse(patternStartBeforeQ, (int)parameters["slowingRepumpAOMOnStart"], (int)parameters["slowingRepumpAOMOffStart"] - (int)parameters["slowingRepumpAOMOnStart"], "aom2"); //first pulse to slowing repump AOM p.AddEdge("aom2", patternStartBeforeQ + (int)parameters["slowingRepumpAOMOffStart"] + (int)parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high // p.Pulse(patternStartBeforeQ, (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], (int)Parameters["slowingRepumpAOMOnDuration"] - ((int)Parameters["slowingRepumpAOMOffStart"] - (int)Parameters["slowingRepumpAOMOnStart"]) - (int)Parameters["slowingRepumpAOMOffDuration"], "aom2"); //second pulse to slowing repump AOM p.Pulse(patternStartBeforeQ, (int)parameters["PMTTrigger"], (int)parameters["PMTTriggerDuration"], "detector"); // trigger data acquistion from PMT }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v0F0PumpStartTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"]; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int magTrapStartTime = blowAwayTime + (int)Parameters["PokeDuration"] + (int)Parameters["MicrowaveSecondPulseDuration"]; //Empty space same length as second microwave pulse to make as similar as possible to N=1 script int microwaveSecondPulseTime = magTrapStartTime + (int)Parameters["MagneticTrapDuration"]; int motRecaptureTime = microwaveSecondPulseTime + (int)Parameters["MicrowaveSecondPulseDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveIO"); //now linked to B channel p.Pulse(patternStartBeforeQ, microwaveSecondPulseTime, (int)Parameters["MicrowaveSecondPulseDuration"], "microwaveSweepTrigger"); // now linked to A channel p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00AOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, microwavePulseTime, motRecaptureTime - microwavePulseTime, "v00AOM"); // turn off the MOT light for microwave pulse p.Pulse(patternStartBeforeQ, blowAwayTime, (int)Parameters["PokeDuration"], "aom"); // Blow away pulse during magnetic trap p.AddEdge("aom", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.Pulse(patternStartBeforeQ, blowAwayTime - 600, (int)Parameters["MagneticTrapDuration"], "bXShutter"); // takes 12ms to shut, want 1 ms poke, don't care when it reopens p.Pulse(patternStartBeforeQ, magTrapStartTime - 1100, (int)Parameters["MagneticTrapDuration"] - 1000, "v00Shutter"); // takes 12ms to start to shut (need open for optical pumping step), 21ms to reopen, want open at end of trap but closed at start p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This just loads the MOT, and leaves it "on". You need //turn off the MOT and Zeeman light yourself p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); //switches off Zeeman beams after loading p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false); //turn OFF the MOT EOMs, pumping atoms into f=1 ground state p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"] - 1, false); //turn OFF EOM for imaging without repump light //p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"], false); //turn OFF the MOT AOMs, cutting off all light to the chamber p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"], false); //pulse ON the EOM for optical pumping p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], -2, 1, "D2EOMenable"); //flash probe beam on for 100us prior to imaging to pump the atoms p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], -2, 1, "aom1enable"); //Imaging p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], 0, 100, "aom1enable"); p.DownPulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage p.Pulse((int)Parameters["Frame1Trigger"], -1, 100, "aom1enable"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, 100, "CameraTrigger"); //take an image without the cloud. //p.AddEdge("aom1enable", 150000, false); p.DownPulse(90000, 0, 50, "CameraTrigger"); //background image - no light. p.DownPulse(100000, 0, 50, "CameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("D2aomshutter1", 0, true); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. p.AddEdge("D2aomshutter2", 0, true); //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.AddEdge("aom2enable", 119000, false);//turn off Zeeman beam to measure lifetime. p.AddEdge("aom3enable", 199000, false); p.AddEdge("aom1enable", 199000, false); p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger"); p.DownPulse(210000, 0, 50, "CameraTrigger"); p.DownPulse(215000, 0, 50, "CameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOT(p, Parameters); // This is how you load "preset" patterns. // p.AddEdge("v00Shutter", 0, true); //p.Pulse(patternStartBeforeQ, 3000 - 1400, 10000, "bXSlowingShutter"); //Takes 14ms to start closing p.AddEdge("v00MOTAOM", (int)Parameters["Frame0Trigger"], true); p.AddEdge("v00MOTAOM", (int)Parameters["Frame0Trigger"] + (int)Parameters["MagTrapHoldTime"], false); p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + (int)Parameters["MagTrapHoldTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.Pulse((int)Parameters["CMOTEndTime"] + 100, 0, 20000, "TranslationStageTrigger"); p.AddEdge("CameraTrigger", 0, true); p.AddEdge("shutterenable", 0, true); p.AddEdge("ovenShutterClose", 0, false); p.AddEdge("probeshutterenable", 0, false); //switches off Zeeman, Zeeman repump and probe beams before CMOT stage to stop loading the MOT p.AddEdge("shutterenable", (int)Parameters["CMOTStartTime"] - 5000, false); p.AddEdge("aom2enable", (int)Parameters["CMOTStartTime"] - 20, false); p.AddEdge("aom3enable", (int)Parameters["CMOTStartTime"] - 20, false); // loads the mag trap by switching off the MOT and repump beams p.AddEdge("aom0enable", (int)Parameters["CMOTEndTime"], false); p.AddEdge("aom1enable", (int)Parameters["CMOTEndTime"], false); //opens the probe beam shutter 50ms before the magnetic trap is switched off p.AddEdge("probeshutterenable", (int)Parameters["MagTrapEndTime"] - 500, true); //flashes on probe and repump beam in order to image the atoms in the mag trap p.Pulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["ExposureTime"], "aom3enable"); //p.Pulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["ExposureTime"], "aom1enable"); p.DownPulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); //flashes on probe and repump beam for the "no atoms" picture, where the no atoms image is always taken 100ms after the atoms are released from the //magnetic trap, then takes background image p.Pulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom3enable"); //p.Pulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom1enable"); p.DownPulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger"); p.DownPulse(205000, 0, 50, "CameraTrigger"); p.DownPulse(208000, 0, 50, "CameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int molassesStartTime = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v00ChirpTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int singleFrequencyMolassesTime = v00ChirpTime + (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"]; int microwavePulseTime = singleFrequencyMolassesTime + (int)Parameters["SingleFreqMolassesDuration"]; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int secondMicrowavePulseTime = blowAwayTime + (int)Parameters["PokeDuration"]; int biasStartTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int levitateTime = biasStartTime + (int)Parameters["LevitateWait"]; int cameraTriggerTime = levitateTime + (int)Parameters["ExpansionTime"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00MOTAOM"); //pulse off the MOT light whilst MOT fields are turning off p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"], "v00MOTAOM"); p.Pulse(patternStartBeforeQ, microwavePulseTime, cameraTriggerTime - microwavePulseTime, "v00MOTAOM"); //pulse off the MOT light to release the cloud //p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveA"); //p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveB"); // now linked to A channel //p.Pulse(patternStartBeforeQ, blowAwayTime, (int)Parameters["PokeDuration"], "bXSlowingAOM"); // Blow away p.AddEdge("bXSlowingAOM", patternStartBeforeQ + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.AddEdge("v10SlowingAOM", patternStartBeforeQ + (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high //p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime - 1400, cameraTriggerTime - secondMicrowavePulseTime + 3000, "bXSlowingShutter"); //Takes 14ms to start closing //p.Pulse(patternStartBeforeQ, microwavePulseTime - 1500, cameraTriggerTime - microwavePulseTime + 1500 - 1250, "v00MOTShutter"); p.Pulse(patternStartBeforeQ, v00ChirpTime, (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"], "v00Sidebands"); p.Pulse(patternStartBeforeQ, v00ChirpTime, 2 * (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["SingleFreqMolassesDuration"] + 200, "v00LockBlock"); p.Pulse(patternStartBeforeQ, molassesStartTime, (int)Parameters["CoilsSwitchOffTime"] - molassesStartTime + 1000, "topCoilDirection"); p.Pulse(patternStartBeforeQ, molassesStartTime, (int)Parameters["CoilsSwitchOffTime"] - molassesStartTime + 1000, "bottomCoilDirection"); p.Pulse(patternStartBeforeQ, 4000, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.Pulse(patternStartBeforeQ, cameraTriggerTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int motCompressStartTime = (int)Parameters["LoadingDuration"]; int molassesStartTime = motCompressStartTime + (int)Parameters["MOTCoilsCurrentRampDuration"] + (int)Parameters["MOTCoilsCurrentWaitAfterRamp"]; int releaseTime = molassesStartTime + (int)Parameters["MolassesDuration"]; int imageTime = releaseTime + (int)Parameters["ExpansionTime"]; p.Pulse(0, 0, 10, "aoPatternTrigger"); // THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired. p.Pulse(0, releaseTime, (int)Parameters["ExpansionTime"], "rbCoolingAOM"); p.AddEdge("rbOpticalPumpingAOM", 0, true); // Turn off for most of sequence p.AddEdge("rbOpticalPumpingAOM", imageTime + 2000, false); // Turn back on safely after imaging has finished p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int motLoadingEndTime = patternStartBeforeQ + 5000; int motSwitchOffTime = motLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int cameraTriggerTime = motSwitchOffTime + (int)Parameters["FreeExpansionTime"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOT(p, Parameters); // This is how you load "preset" patterns. // p.AddEdge("v00Shutter", 0, true); //p.Pulse(patternStartBeforeQ, 3000 - 1400, 10000, "bXSlowingShutter"); //Takes 14ms to start closing p.Pulse(patternStartBeforeQ, cameraTriggerTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.AddEdge("v00MOTAOM", 0, false); p.AddEdge("v00MOTAOM", motSwitchOffTime, true); p.AddEdge("v00MOTAOM", cameraTriggerTime, false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so. //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.AddEdge("D2EOMenable", 0, true); p.AddEdge("D2EOMenable", (int)Parameters["SwitchTime"], false); p.DownPulse(10, 0, 50, "CameraTrigger"); p.DownPulse(10010, 0, 50, "CameraTrigger"); p.DownPulse(20010, 0, 50, "CameraTrigger"); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns. p.Pulse(0, 0, 1, "AnalogPatternTrigger"); //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN! p.AddEdge("CameraTrigger", 0, true); p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger"); p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger"); p.DownPulse(150000, 0, 50, "CameraTrigger"); p.DownPulse(160000, 0, 50, "CameraTrigger"); //switches off Zeeman and Absoroption beams during imaging, so that MOT is not reloaded and fluorescence images can be taken p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false); p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"], false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"] + (int)Parameters["MOTLoadTime"] + (int)Parameters["CMOTCoilsCurrentRampDuration"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTDualSpecies(p, Parameters); // This is how you load "preset" patterns. // p.AddEdge("v00Shutter", 0, true); //p.Pulse(patternStartBeforeQ, 3000 - 1400, 10000, "bXSlowingShutter"); //Takes 14ms to start closing //Rb light switches: p.AddEdge("rb3DCooling", 0, false); p.AddEdge("rb3DCooling", (int)Parameters["MOTLoadTime"] + (int)Parameters["CMOTCoilsCurrentRampDuration"] + 50000, true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", (int)Parameters["MOTLoadTime"], true); //Switch off 2D MOT after 3D MOT is loaded p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", (int)Parameters["MOTLoadTime"], true); //Switch off push beam after 3D MOT is loaded //Here we send 4 camera triggers once the CaF MOT is loaded separated by 25 ms each to do a single experiment life time measurement: p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame //p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + 2500, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for 2nd frame //p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + 5000, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for 3rd frame //p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + 7500, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for 4th frame //p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + 10000, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for 4th frame p.Pulse(patternStartBeforeQ, (int)Parameters["Frame0Trigger"] + 7500, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //camera trigger for 4th frame return(p); }