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 offsetFieldTurnOnTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int firstRamseyPulseTime = offsetFieldTurnOnTime + (int)Parameters["OffsetFieldWait"]; int secondRamseyPulseTime = firstRamseyPulseTime + (int)Parameters["RamseyWaitTime"] + (int)Parameters["RamseyPulseDuration"]; int offsetFieldTurnOffTime = secondRamseyPulseTime + (int)Parameters["RamseyPulseDuration"]; int magTrapStartTime = offsetFieldTurnOffTime + (int)Parameters["OffsetFieldWait"]; 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"], "microwaveA"); p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveB"); p.Pulse(patternStartBeforeQ, firstRamseyPulseTime, (int)Parameters["RamseyPulseDuration"], "microwaveC"); p.Pulse(patternStartBeforeQ, secondRamseyPulseTime, (int)Parameters["RamseyPulseDuration"], "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, 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 - 1600, motRecaptureTime - microwavePulseTime + 1600 - 1080, "v00MOTShutter"); p.Pulse(patternStartBeforeQ, molassesRampTime, offsetFieldTurnOffTime + (int)Parameters["OffsetFieldWait"] / 2 - molassesRampTime, "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 AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // Add Analog Channels p.AddChannel("v0IntensityRamp"); p.AddChannel("v0FrequencyRamp"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("zShimCoilCurrent"); // B Field // For the delta electronica box (bottom MOT coil) p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTCoilsSwitchOn"], (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTCoilsSwitchOff"], 0); // For BOP p.AddAnalogValue("MOTBOPCoilsCurrent", (int)Parameters["MOTCoilsSwitchOn"], (double)Parameters["MOTBOPCoilsCurrentStartValue"]); p.AddAnalogValue("MOTBOPCoilsCurrent", (int)Parameters["MOTCoilsSwitchOff"], (double)Parameters["MOTBOPCoilsCurrentMolassesValue"]); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // v0 Intensity Ramp p.AddAnalogValue("v0IntensityRamp", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v0IntensityRamp", (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v0IntensityRamp", (int)Parameters["PokeStartTime"] + (int)Parameters["PokeDuration"] + (int)Parameters["FreeFlightTime"], (double)Parameters["v0IntensityRampStartValue"]); // v0 Frequency Ramp p.AddAnalogValue("v0FrequencyRamp", 0, (double)Parameters["v0FrequencyRampStartValue"]); p.SwitchAllOffAtEndOfPattern(); 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 motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. for (int t = 50000; t < (int)Parameters["PatternLength"]; t += 50000) { p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch } p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveA"); // p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveB"); p.Pulse(patternStartBeforeQ, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveB"); // now linked to A channel 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, (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(); 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"] + 80; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int secondMicrowavePulseTime = blowAwayTime + (int)Parameters["PokeDuration"]; int magTrapStartTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int thirdMicrowavePulseTime = magTrapStartTime + (int)Parameters["MagTrapDuration"] - (int)Parameters["ThirdMicrowavePulseDuration"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"] + (int)Parameters["WaitBeforeRecapture"]; 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, thirdMicrowavePulseTime, (int)Parameters["ThirdMicrowavePulseDuration"], "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.AddEdge("bXSlowingShutter", patternStartBeforeQ + secondMicrowavePulseTime - 1500, true); p.AddEdge("bXSlowingShutter", patternStartBeforeQ + motRecaptureTime + 5000, false); p.AddEdge("v00MOTShutter", patternStartBeforeQ + magTrapStartTime - 2060, true); p.AddEdge("v00MOTShutter", patternStartBeforeQ + motRecaptureTime - 950, false); 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(); 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 releaseTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int levitationGradientTime = releaseTime + (int)Parameters["LevitateWait"]; int imageTime = releaseTime + (int)Parameters["ExpansionTime"]; 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"); // now linked to A channel 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, imageTime - 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, imageTime - secondMicrowavePulseTime + 1400 + 3000, "bXSlowingShutter"); //Takes 14ms to start closing //p.Pulse(patternStartBeforeQ, microwavePulseTime - 1500, motRecaptureTime - microwavePulseTime + 1500 - 1100, "v00MOTShutter"); p.Pulse(patternStartBeforeQ, microwavePulseTime, imageTime - microwavePulseTime + 3000, "topCoilDirection"); p.Pulse(patternStartBeforeQ, microwavePulseTime, imageTime - microwavePulseTime + 3000, "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(); 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 v00ChirpBackTime = singleFrequencyMolassesTime + (int)Parameters["SingleFreqMolassesDuration"]; int v0F0PumpStartTime = v00ChirpBackTime + (int)Parameters["v00ChirpDuration"] + (int)Parameters["v00ChirpWait"] + (int)Parameters["WaitBeforeOpticalPumping"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"]; int motRecaptureTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; 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"); 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, v00ChirpBackTime, v0F0PumpStartTime - v00ChirpBackTime, "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, (int)Parameters["MagTrapDuration"] + 3000, "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 AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); 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 firstRamseyPulseTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int ramseyPiPulseTime = firstRamseyPulseTime + (int)Parameters["FirstRamseyWaitTime"] + (int)Parameters["RamseyPulseDuration"]; int secondRamseyPulseTime = ramseyPiPulseTime + (int)Parameters["SecondRamseyWaitTime"] + (int)Parameters["RamseyPiPulseDuration"]; int magTrapStartTime = secondRamseyPulseTime + (int)Parameters["RamseyPulseDuration"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("zShimCoilCurrent"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", 0, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTCoilsSwitchOn"], (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddLinearRamp("MOTCoilsCurrent", (int)Parameters["MOTCoilsCurrentRampStartTime"], (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampEndValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTSwitchOffTime"], (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime, (double)Parameters["MOTCoilsCurrentMagTrapValue"]); p.AddAnalogValue("MOTCoilsCurrent", motRecaptureTime, (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["CoilsSwitchOffTime"], -0.01); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime, (double)Parameters["v0IntensityMolassesValue"]); p.AddAnalogValue("v00Intensity", molassesRampTime + 50, 7.4); p.AddAnalogValue("v00Intensity", molassesRampTime + 100, 7.83); p.AddAnalogValue("v00Intensity", molassesRampTime + 150, 8.09); p.AddAnalogValue("v00Intensity", v0F0PumpStartTime, (double)Parameters["v0IntensityF0PumpValue"]); p.AddAnalogValue("v00Intensity", motRecaptureTime, (double)Parameters["v0IntensityImageValue"]); // v0 EOM p.AddAnalogValue("v00EOMAmp", 0, (double)Parameters["v0EOMMOTValue"]); p.AddAnalogValue("v00EOMAmp", v0F0PumpStartTime, (double)Parameters["v0EOMPumpValue"]); p.AddAnalogValue("v00EOMAmp", motRecaptureTime, (double)Parameters["v0EOMMOTValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"]); p.AddAnalogValue( "v00Frequency", molassesStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMolassesValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", v0F0PumpStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyF0PumpValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", motRecaptureTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int rbMOTLoadingStartTime = patternStartBeforeQ; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + (int)Parameters["loadingTime"]; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int lastImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"] * (int)Parameters["NoOfTriggers"]; for (int t = 0; t < (int)Parameters["RbMOTLoadTime"]; t += 50000) { p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch } MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); for (int t = firstImageTime; t < lastImageTime; t += (int)Parameters["TimeBetweenTriggers"]) { p.Pulse(0, t, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); } //Rb: p.AddEdge("rb3DCooling", 0, true); //3D MOT never loads p.AddEdge("rb2DCooling", 0, true); // 2D MOT off while CaF MOT loads p.AddEdge("rb2DCooling", moleculeMOTLoadingEndTime, false); // 2D MOT ON when CaF MOT loaded p.AddEdge("rb2DCooling", lastImageTime, true); // 2D MOT stays on for lifetime measurement p.AddEdge("rbPushBeam", 0, true); p.AddEdge("rbPushBeam", moleculeMOTLoadingEndTime, false); p.AddEdge("rbPushBeam", lastImageTime, true); //Turn everything back on at end of sequence: //p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe p.AddEdge("rbAbsImagingBeam", lastImageTime + 1100, false); p.AddEdge("rbAbsImagingBeam", lastImageTime + 1100 + 15, true); p.AddEdge("rbAbsImagingBeam", lastImageTime + 12200, false); p.AddEdge("rbAbsImagingBeam", lastImageTime + 12200 + 15, true); p.Pulse(0, lastImageTime + 1100, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of cloud p.Pulse(0, lastImageTime + 12200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of probe p.Pulse(0, lastImageTime + 21200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of background //p.AddEdge("rb3DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rb2DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rbPushBeam", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); int rbMOTLoadingStartTime = 0; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + (int)Parameters["loadingTime"]; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"] + 2500; int lastImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"] * (int)Parameters["NoOfTriggers"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("v00Chirp"); // Add Rb Analog channels p.AddChannel("rb3DCoolingFrequency"); p.AddChannel("rb3DCoolingAttenuation"); p.AddChannel("rbRepumpFrequency"); p.AddChannel("rbRepumpAttenuation"); p.AddChannel("rbAbsImagingFrequency"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", rbMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueRb"]); p.AddAnalogValue("MOTCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueCaF"]); p.AddAnalogValue("MOTCoilsCurrent", lastImageTime + 1000, 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // trigger delay // p.AddAnalogValue("triggerDelay", 0, (double)Parameters["triggerDelay"]); // F=0 p.AddAnalogValue("v00EOMAmp", 0, 4.1); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", moleculeMOTLoadingEndTime, (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityEndValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, (double)Parameters["v0FrequencyStartValue"]); p.AddAnalogValue("v00Frequency", moleculeMOTLoadingEndTime, (double)Parameters["v0FrequencyNewValue"]); //v0 chirp p.AddAnalogValue("v00Chirp", 0, 0.0); //Rb Laser detunings p.AddAnalogValue("rb3DCoolingFrequency", 0, (double)Parameters["MOTCoolingLoadingFrequency"]); p.AddAnalogValue("rbRepumpFrequency", 0, (double)Parameters["MOTRepumpLoadingFrequency"]); p.AddAnalogValue("rbAbsImagingFrequency", 0, (double)Parameters["ImagingFrequency"]); /////////Switch Rb cooling detuning to the blue to heat out the atoms from the trap: //p.AddAnalogValue("rb3DCoolingFrequency", seventhImageTime + 1000, 7.0); //////// //Switch Rb repump: p.AddAnalogValue("rbRepumpAttenuation", 0, (double)Parameters["RbRepumpSwitch"]); //p.AddAnalogValue("rbRepumpAttenuation", 0, 10.0); //p.AddAnalogValue("rbRepumpAttenuation", seventhImageTime + 2000, 10.0); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); int rbMOTLoadingStartTime = 0; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 5000; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"] + 2500; int secondImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"]; int thridImageTime = secondImageTime + (int)Parameters["TimeBetweenTriggers"]; int fourthImageTime = thridImageTime + (int)Parameters["TimeBetweenTriggers"]; int fithImageTime = fourthImageTime + (int)Parameters["TimeBetweenTriggers"]; int sixthImageTime = fithImageTime + (int)Parameters["TimeBetweenTriggers"]; int seventhImageTime = sixthImageTime + (int)Parameters["TimeBetweenTriggers"]; int eightImageTime = seventhImageTime + (int)Parameters["TimeBetweenTriggers"]; int ninethImageTime = eightImageTime + (int)Parameters["TimeBetweenTriggers"]; int tenthImageTime = ninethImageTime + (int)Parameters["TimeBetweenTriggers"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("v00Chirp"); //v00 AOM switching on and off continuously //p.AddChannel("transferCoils"); // Add Rb Analog channels p.AddChannel("rb3DCoolingFrequency"); p.AddChannel("rb3DCoolingAttenuation"); p.AddChannel("rbRepumpFrequency"); p.AddChannel("rbRepumpAttenuation"); p.AddChannel("rbAbsImagingFrequency"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", rbMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueRb"]); p.AddAnalogValue("MOTCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueCaF"]); p.AddAnalogValue("MOTCoilsCurrent", tenthImageTime + 1000, 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // trigger delay // p.AddAnalogValue("triggerDelay", 0, (double)Parameters["triggerDelay"]); // F=0 p.AddAnalogValue("v00EOMAmp", 0, 4.7); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", moleculeMOTLoadingEndTime, (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityEndValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, (double)Parameters["v0FrequencyStartValue"]); //v0 chirp p.AddAnalogValue("v00Chirp", 0, 0.0); //Rb Laser detunings p.AddAnalogValue("rb3DCoolingFrequency", 0, (double)Parameters["MOTCoolingLoadingFrequency"]); p.AddAnalogValue("rbRepumpFrequency", 0, (double)Parameters["MOTRepumpLoadingFrequency"]); p.AddAnalogValue("rbAbsImagingFrequency", 0, (double)Parameters["ImagingFrequency"]); //Switch Rb repump: p.AddAnalogValue("rbRepumpAttenuation", 0, (double)Parameters["RbRepumpSwitch"]); //p.AddAnalogValue("transferCoils", 0, 0.8); // New stuff to modulate the CaF light /* * for (int t = moleculeMOTLoadingEndTime; t < tenthImageTime + 1000; t += (int)Parameters["CaFCycleLength"]) * { * p.AddAnalogValue("transferCoils", t, 0.3); * p.AddAnalogValue("transferCoils", t + (int)Parameters["CaFHalfCycleLength"], 0.7); * } */ return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); 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"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("slowingCoilsCurrent"); //dodgy way of checking frequency after second microwave pulse p.AddAnalogValue("yShimCoilCurrent", 0, 0.0); p.AddAnalogValue("yShimCoilCurrent", motRecaptureTime, 5.0); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", 0, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTCoilsSwitchOn"], (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddLinearRamp("MOTCoilsCurrent", (int)Parameters["MOTCoilsCurrentRampStartTime"], (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampEndValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTSwitchOffTime"], (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime, (double)Parameters["MagTrapCoilsCurrentValue"]); // p.AddLinearRamp("MOTCoilsCurrent", magTrapStartTime, (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MagTrapCoilsCurrentValue"]); // p.AddLinearRamp("MOTCoilsCurrent", magTrapStopTime, (int)Parameters["MOTCoilsCurrentRampDuration"], 0.0); p.AddAnalogValue("MOTCoilsCurrent", magTrapStopTime, (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", motRecaptureTime, (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["CoilsSwitchOffTime"], 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); // p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); //p.AddLinearRamp("zShimCoilCurrent", v0F0PumpStartTime, 50, (double)Parameters["zShimZeemanSplitValue"]); // p.AddAnalogValue("zShimCoilCurrent", motRecaptureTime, (double)Parameters["zShimLoadCurrent"]); // p.AddAnalogValue("xShimCoilCurrent", v0F0PumpStartTime, 10.0); // p.AddAnalogValue("xShimCoilCurrent", magTrapStartTime, (double)Parameters["xShimLoadCurrent"]); // p.AddAnalogValue("xShimCoilCurrent", magTrapStopTime + 100, 10.0); // p.AddAnalogValue("xShimCoilCurrent", motRecaptureTime, (double)Parameters["xShimLoadCurrent"]); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime, (double)Parameters["v0IntensityMolassesValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime + 50, 6.76); p.AddAnalogValue("v00Intensity", molassesStartTime + 100, 7.24); p.AddAnalogValue("v00Intensity", molassesStartTime + 150, 7.54); p.AddAnalogValue("v00Intensity", v0F0PumpStartTime, (double)Parameters["v0IntensityF0PumpValue"]); p.AddAnalogValue("v00Intensity", motRecaptureTime, (double)Parameters["v0IntensityImageValue"]); // v0 EOM p.AddAnalogValue("v00EOMAmp", 0, (double)Parameters["v0EOMMOTValue"]); p.AddAnalogValue("v00EOMAmp", v0F0PumpStartTime, (double)Parameters["v0EOMPumpValue"]); p.AddAnalogValue("v00EOMAmp", motRecaptureTime, (double)Parameters["v0EOMMOTValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"]); p.AddAnalogValue( "v00Frequency", molassesStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMolassesValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", v0F0PumpStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyF0PumpValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", motRecaptureTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); int atomMOTLoadingStartTime = 0; int atomMOTLoadingEndTime = atomMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = atomMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + (int)Parameters["CaFMOTLoadingDuration"]; int cMOTEndTime = moleculeMOTLoadingEndTime + (int)Parameters["MOTCoilsCurrentRampDuration"] + (int)Parameters["CMOTHoldTime"]; int motSwitchOffTime = cMOTEndTime + (int)Parameters["v0IntensityRampDuration"] + (int)Parameters["LowIntensityMOTHoldTime"]; int molassesStartTime = motSwitchOffTime + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int v0F0PumpStartTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"] + 80; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int secondMicrowavePulseTime = blowAwayTime + (int)Parameters["PokeDuration"]; int magTrapStartTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"] + (int)Parameters["WaitBeforeRecapture"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("zShimCoilCurrent"); // Add Rb Analog channels p.AddChannel("rb3DCoolingFrequency"); p.AddChannel("rb3DCoolingAttenuation"); p.AddChannel("rbRepumpFrequency"); p.AddChannel("rbRepumpAttenuation"); p.AddChannel("rbAbsImagingFrequency"); p.AddChannel("rbOffsetLock"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", atomMOTLoadingEndTime, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", atomMOTLoadingEndTime + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", 0, (double)Parameters["MOTCoilsCurrentRbMOTLoadingValue"]); p.AddAnalogValue("MOTCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["CaFMOTLoadGradient"]); p.AddLinearRamp("MOTCoilsCurrent", moleculeMOTLoadingEndTime, (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampEndValue"]); p.AddAnalogValue("MOTCoilsCurrent", motSwitchOffTime, (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime, (double)Parameters["MOTCoilsCurrentMagTrapValue"]); //p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime + (int)Parameters["MagTrapDuration"], 0.0); // switching off field earlier to measure Rb mag trap life time p.AddAnalogValue("MOTCoilsCurrent", motRecaptureTime, (double)Parameters["CaFMOTLoadGradient"]); p.AddAnalogValue("MOTCoilsCurrent", imageTime + 3000, 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", atomMOTLoadingStartTime, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", atomMOTLoadingStartTime, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", atomMOTLoadingStartTime, (double)Parameters["zShimLoadCurrent"]); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", atomMOTLoadingStartTime, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", cMOTEndTime, (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime, (double)Parameters["v0IntensityMolassesValue"]); p.AddAnalogValue("v00Intensity", molassesRampTime + 50, 7.4); p.AddAnalogValue("v00Intensity", molassesRampTime + 100, 7.83); p.AddAnalogValue("v00Intensity", molassesRampTime + 150, 8.09); p.AddAnalogValue("v00Intensity", v0F0PumpStartTime, (double)Parameters["v0IntensityF0PumpValue"]); p.AddAnalogValue("v00Intensity", motRecaptureTime, (double)Parameters["v0IntensityImageValue"]); // v0 EOM p.AddAnalogValue("v00EOMAmp", 0, (double)Parameters["v0EOMMOTValue"]); p.AddAnalogValue("v00EOMAmp", v0F0PumpStartTime, (double)Parameters["v0EOMPumpValue"]); p.AddAnalogValue("v00EOMAmp", secondMicrowavePulseTime, (double)Parameters["v0EOMMOTValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"]); p.AddAnalogValue( "v00Frequency", molassesStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMolassesValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", v0F0PumpStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyF0PumpValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", motRecaptureTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); //Rb: p.AddAnalogValue("rb3DCoolingFrequency", atomMOTLoadingStartTime, (double)Parameters["MOTCoolingLoadingFrequency"]);//Rb MOT loading p.AddAnalogValue("rbRepumpFrequency", atomMOTLoadingStartTime, (double)Parameters["MOTRepumpLoadingFrequency"]); p.AddAnalogValue("rbAbsImagingFrequency", atomMOTLoadingStartTime, (double)Parameters["ImagingFrequency"]); p.AddAnalogValue("rb3DCoolingFrequency", moleculeMOTLoadingEndTime, (double)Parameters["RbCoolingFrequencyCMOT"]);//Rb CMOT p.AddAnalogValue("rbRepumpFrequency", moleculeMOTLoadingEndTime, (double)Parameters["RbRepumpFrequencyCMOT"]); p.AddLinearRamp("rb3DCoolingFrequency", molassesStartTime, (int)Parameters["RbMolassesDuration"], (double)Parameters["RbMolassesEndDetuning"]); //Rb molasses p.AddLinearRamp("rb3DCoolingFrequency", molassesStartTime + (int)Parameters["RbMolassesDuration"], (int)Parameters["RbMolassesDuration"], (double)Parameters["MOTCoolingLoadingFrequency"]); //Jump back frequency to MOT loading value after molasses p.AddAnalogValue("rbOffsetLock", 0, 1.1); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); 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"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("zShimCoilCurrent"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", 0, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTCoilsSwitchOn"], (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddLinearRamp("MOTCoilsCurrent", (int)Parameters["MOTCoilsCurrentRampStartTime"], (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampEndValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTSwitchOffTime"], (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime, (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["CoilsSwitchOffTime"], 0.0); //dodgy way of checking frequency after second microwave pulse //p.AddAnalogValue("yShimCoilCurrent", 0, 0.0); // p.AddAnalogValue("yShimCoilCurrent", motRecaptureTime, 5.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); // p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); //p.AddLinearRamp("zShimCoilCurrent",v0F0PumpStartTime,50,(double)Parameters["zShimZeemanSplitValue"]); //p.AddAnalogValue("xShimCoilCurrent", v0F0PumpStartTime, (double)Parameters["xShimZeemanSplitValue"]);//used to be at v0f0pump time //p.AddAnalogValue("zShimCoilCurrent", motRecaptureTime, (double)Parameters["zShimLoadCurrent"]); //p.AddAnalogValue("xShimCoilCurrent", v0F0PumpStartTime, 5.0); //p.AddAnalogValue("xShimCoilCurrent", motRecaptureTime, (double)Parameters["xShimLoadCurrent"]); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime, (double)Parameters["v0IntensityMolassesValue"]); p.AddAnalogValue("v00Intensity", molassesRampTime + 50, 7.4); p.AddAnalogValue("v00Intensity", molassesRampTime + 200, 7.83); p.AddAnalogValue("v00Intensity", molassesRampTime + 150, 8.09); p.AddAnalogValue("v00Intensity", v0F0PumpStartTime, (double)Parameters["v0IntensityF0PumpValue"]); p.AddAnalogValue("v00Intensity", motRecaptureTime, (double)Parameters["v0IntensityImageValue"]); // v0 EOM p.AddAnalogValue("v00EOMAmp", 0, (double)Parameters["v0EOMMOTValue"]); p.AddAnalogValue("v00EOMAmp", v0F0PumpStartTime, (double)Parameters["v0EOMPumpValue"]); p.AddAnalogValue("v00EOMAmp", motRecaptureTime, (double)Parameters["v0EOMMOTValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"]); p.AddAnalogValue( "v00Frequency", molassesStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMolassesValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", v0F0PumpStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyF0PumpValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); p.AddAnalogValue( "v00Frequency", motRecaptureTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); int rbMOTLoadingStartTime = 0; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 5000 + (int)Parameters["v0IntensityRampDuration"] + (int)Parameters["MOTHoldTime"]; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["FieldDecayTime"] + (int)Parameters["FreeExpansionTime"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("v00Chirp"); // Add Rb Analog channels p.AddChannel("rb3DCoolingFrequency"); p.AddChannel("rb3DCoolingAttenuation"); p.AddChannel("rbRepumpFrequency"); p.AddChannel("rbRepumpAttenuation"); p.AddChannel("rbAbsImagingFrequency"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", rbMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueRb"]); p.AddAnalogValue("MOTCoilsCurrent", moleculeMOTLoadingEndTime, 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // trigger delay // p.AddAnalogValue("triggerDelay", 0, (double)Parameters["triggerDelay"]); // F=0 p.AddAnalogValue("v00EOMAmp", 0, 4.1); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", moleculeMOTLoadingStartTime + 5000, (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityEndValue"]); p.AddAnalogValue("v00Intensity", moleculeMOTLoadingEndTime + (int)Parameters["FieldDecayTime"], (double)Parameters["v0IntensityRampStartValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, (double)Parameters["v0FrequencyStartValue"]); //v0 chirp p.AddAnalogValue("v00Chirp", 0, 0.0); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int atomMOTLoadingStartTime = patternStartBeforeQ; int atomMOTLoadingEndTime = atomMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = atomMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + (int)Parameters["CaFMOTLoadingDuration"]; int cMOTEndTime = moleculeMOTLoadingEndTime + (int)Parameters["MOTCoilsCurrentRampDuration"] + (int)Parameters["CMOTHoldTime"]; int motSwitchOffTime = cMOTEndTime + (int)Parameters["v0IntensityRampDuration"] + (int)Parameters["LowIntensityMOTHoldTime"]; int molassesStartTime = motSwitchOffTime + (int)Parameters["MolassesDelay"]; int molassesRampTime = molassesStartTime + (int)Parameters["MolassesHoldTime"]; int rbMolassesEndTime = molassesStartTime + (int)Parameters["RbMolassesDuration"]; int v0F0PumpStartTime = molassesRampTime + (int)Parameters["MolassesRampDuration"]; int microwavePulseTime = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"] + 80; int blowAwayTime = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"]; int secondMicrowavePulseTime = blowAwayTime + (int)Parameters["PokeDuration"]; int magTrapStartTime = secondMicrowavePulseTime + (int)Parameters["SecondMicrowavePulseDuration"]; int motRecaptureTime = magTrapStartTime + (int)Parameters["MagTrapDuration"] + (int)Parameters["WaitBeforeRecapture"]; int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"]; int cameraTrigger1 = imageTime + 3100; int cameraTrigger2 = cameraTrigger1 + (int)Parameters["CameraTriggerDelayAfterFirstImage"]; //probe image int cameraTrigger3 = cameraTrigger2 + (int)Parameters["CameraTriggerDelayAfterFirstImage"]; //bg /* * int cameraTrigger1 = motRecaptureTime + (int)Parameters["WaitBeforeImage"] + (int)Parameters["FreeExpansionTime"]; * int cameraTrigger2 = cameraTrigger1 + (int)Parameters["CameraTriggerDelayAfterFirstImage"]; //probe image * int cameraTrigger3 = cameraTrigger2 + (int)Parameters["CameraTriggerDelayAfterFirstImage"]; //bg */ int swtichAllOn = cameraTrigger3 + 5000; 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 + 50000, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + 50000, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); // This is how you load "preset" patterns. /* * for (int t = 150000; t < (int)Parameters["PatternLength"]; t += 50000) * { * p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp * p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch * } */ p.Pulse(0, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveB"); p.Pulse(0, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveA"); //p.Pulse(patternStartBeforeQ, thirdMicrowavePulseTime, (int)Parameters["ThirdMicrowavePulseDuration"], "microwaveA"); p.Pulse(0, motSwitchOffTime, (int)Parameters["MolassesDelay"], "v00MOTAOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(0, microwavePulseTime, magTrapStartTime - microwavePulseTime + 2000, "v00MOTAOM"); // turn off the MOT light for microwave pulse and leav it off until loading mag trap. Trun back on once light is shuttered mechanically p.Pulse(0, blowAwayTime, (int)Parameters["PokeDuration"], "bXSlowingAOM"); // Blow away p.AddEdge("bXSlowingAOM", atomMOTLoadingEndTime + (int)Parameters["slowingAOMOffStart"] + (int)Parameters["slowingAOMOffDuration"], true); // send slowing aom high and hold it high p.AddEdge("v10SlowingAOM", atomMOTLoadingEndTime + (int)Parameters["slowingRepumpAOMOffStart"] + (int)Parameters["slowingRepumpAOMOffDuration"], true); // send slowing repump aom high and hold it high p.AddEdge("bXSlowingShutter", secondMicrowavePulseTime - 1500, true); p.AddEdge("bXSlowingShutter", motRecaptureTime + 5000, false); p.AddEdge("v00MOTShutter", magTrapStartTime - 2060, true); p.AddEdge("v00MOTShutter", motRecaptureTime - 950, false); p.Pulse(0, moleculeMOTLoadingEndTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger //Rb: p.AddEdge("rb3DCooling", 0, false); p.AddEdge("rb3DCooling", rbMolassesEndTime, true); //////////////////////// //p.AddEdge("rbRepump", 0, true); p.AddEdge("rbRepump", 0, false); p.AddEdge("rbRepump", rbMolassesEndTime + (int)Parameters["RbOpticalPumpingDuration"], true); //////////////////////// p.AddEdge("rbOpticalPumpingAOM", 0, true); p.AddEdge("rbOpticalPumpingAOM", rbMolassesEndTime, false); // turn on to pump atoms p.AddEdge("rbOpticalPumpingAOM", rbMolassesEndTime + (int)Parameters["RbOpticalPumpingDuration"], true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", atomMOTLoadingEndTime, true); p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", atomMOTLoadingEndTime, true); p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe p.AddEdge("rbAbsImagingBeam", cameraTrigger1, false); p.AddEdge("rbAbsImagingBeam", cameraTrigger1 + 15, true); p.AddEdge("rbAbsImagingBeam", cameraTrigger2, false); p.AddEdge("rbAbsImagingBeam", cameraTrigger2 + 15, true); //p.AddEdge("rbAbsImagingBeam", cameraTrigger2, false); //p.AddEdge("rbAbsImagingBeam", cameraTrigger2 + 15, true); //Rb mechanical shutters: p.AddEdge("rb2DMOTShutter", 0, true); //p.AddEdge("rb2DMOTShutter", atomMOTLoadingEndTime, true); //turn on probe beam to image cloud after holding in mag trap for some time p.AddEdge("rb2DMOTShutter", swtichAllOn, false); p.AddEdge("rbPushBamAbsorptionShutter", 0, false); p.AddEdge("rbPushBamAbsorptionShutter", atomMOTLoadingEndTime - (int)Parameters["rbAbsorptionShutterClosingTime"], true); p.AddEdge("rbPushBamAbsorptionShutter", imageTime + 3100 - (int)Parameters["rbAbsorptionShutterOpeningTime"], false); p.AddEdge("rb3DMOTShutter", 0, false); p.AddEdge("rb3DMOTShutter", rbMolassesEndTime - (int)Parameters["coolingShutterClosingTime"], true); //p.AddEdge("rb3DMOTShutter", swtichAllOn, false); p.AddEdge("rbOPShutter", 0, false); //this shutter now shutters only the optical pumping light p.AddEdge("rbOPShutter", rbMolassesEndTime + (int)Parameters["RbOpticalPumpingDuration"] - (int)Parameters["repumpShutterClosingTime"], true); //p.AddEdge("rbOPShutter", swtichAllOn, false); //Rb camera: p.Pulse(0, cameraTrigger1, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //1st camera frame //p.Pulse(0, cameraTrigger2, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //2nd camera frame //p.Pulse(0, cameraTrigger3, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //3rd camera frame return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int rbMOTLoadingStartTime = patternStartBeforeQ; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 5000; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"] + 2500; int secondImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"]; int thridImageTime = secondImageTime + (int)Parameters["TimeBetweenTriggers"]; int fourthImageTime = thridImageTime + (int)Parameters["TimeBetweenTriggers"]; int fithImageTime = fourthImageTime + (int)Parameters["TimeBetweenTriggers"]; int sixthImageTime = fithImageTime + (int)Parameters["TimeBetweenTriggers"]; int seventhImageTime = sixthImageTime + (int)Parameters["TimeBetweenTriggers"]; int eightImageTime = seventhImageTime + (int)Parameters["TimeBetweenTriggers"]; int ninethImageTime = eightImageTime + (int)Parameters["TimeBetweenTriggers"]; int tenthImageTime = ninethImageTime + (int)Parameters["TimeBetweenTriggers"]; /* * for (int t = 0; t < (int)Parameters["RbMOTLoadTime"]; t += 50000) * { * p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp * p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch * } */ MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.Pulse(0, secondImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, thridImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, fourthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, fithImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, sixthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, seventhImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, eightImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, ninethImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, tenthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //p.Pulse(0, tenthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //Rb: p.AddEdge("rb3DCooling", 0, false); p.AddEdge("rb3DCooling", tenthImageTime + 900, true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", rbMOTLoadingEndTime, true); p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", rbMOTLoadingEndTime, true); p.AddEdge("v00MOTAOM", 0, false); /* * for (int t = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; t < tenthImageTime + 1000; t += (int)Parameters["CaFCycleLength"]) * { * p.AddEdge("v00MOTAOM", t, true); * p.AddEdge("v00MOTAOM", t + (int)Parameters["CaFHalfCycleLength"], false); * } */ //Turn everything back on at end of sequence: //p.Pulse(0, moleculeMOTLoadingEndTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame /* * p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe * * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 1100, false); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 1100 + 15, true); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200, false); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200 + 15, true); * * * p.Pulse(0, tenthImageTime + 1100, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of cloud * p.Pulse(0, tenthImageTime + 17200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of probe * p.Pulse(0, tenthImageTime + 32200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of background */ //p.Pulse(0, moleculeMOTLoadingEndTime, 100, "rbAbsImgCamTrig"); //p.AddEdge("rb3DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rb2DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rbPushBeam", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int rbMOTLoadingStartTime = patternStartBeforeQ; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 3000; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int secondImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"]; for (int t = 0; t < (int)Parameters["RbMOTLoadTime"]; t += 50000) { p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch } MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame //p.Pulse(0, secondImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //Rb: p.AddEdge("rb3DCooling", 0, false); //p.AddEdge("rb3DCooling", eightImageTime + 3000, true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", rbMOTLoadingEndTime, true); p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", rbMOTLoadingEndTime, true); //Rb cooling light PWM p.AddEdge("rb3DCooling", rbMOTLoadingEndTime - 1, true); for (int t = rbMOTLoadingEndTime; t < secondImageTime + (int)Parameters["TimeBetweenTriggers"]; t += (int)Parameters["RbCycleLength"]) { p.AddEdge("rb3DCooling", t, false); p.AddEdge("rb3DCooling", t + (int)Parameters["RbHalfCycleLength"], true); } p.Pulse(0, rbMOTLoadingEndTime, 5000, "rbAbsImgCamTrig"); //this is for testing the PWM //Turn everything back on at end of sequence: //p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe /* * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 3200, false); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 3200 + 15, true); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200, false); * p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200 + 15, true); * * * p.Pulse(0, tenthImageTime + 3200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of cloud * p.Pulse(0, tenthImageTime + 12200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of probe * p.Pulse(0, tenthImageTime + 21200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of background * */ //p.AddEdge("rb3DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rb2DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rbPushBeam", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int rbMOTLoadingStartTime = patternStartBeforeQ; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + (int)Parameters["loadingTime"]; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int lastImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"] * (int)Parameters["NoOfTriggers"]; for (int t = 0; t < (int)Parameters["RbMOTLoadTime"]; t += 50000) { p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch } MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); //Rb: p.AddEdge("rb3DCooling", 0, false); p.AddEdge("rb3DCooling", lastImageTime + 1100, true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", rbMOTLoadingEndTime, true); p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", rbMOTLoadingEndTime, true); p.AddEdge("v00MOTAOM", 0, false); // modulation of CaF MOT light for (int t = firstImageTime; t < lastImageTime; t += (int)Parameters["CycleLength"]) { p.AddEdge("v00MOTAOM", t, true); p.AddEdge("v00MOTAOM", t + (int)Parameters["HalfCycleLength"], false); } /* * // modulation of Rb MOT light * for (int t = rbMOTLoadingEndTime + 1; t < lastImageTime; t += (int)Parameters["CycleLength"]) * { * p.AddEdge("rb3DCooling", t, false); * p.AddEdge("rb3DCooling", t + (int)Parameters["HalfCycleLength"], true); * } * * p.AddEdge("rb3DCooling", lastImageTime, false); * p.AddEdge("rb3DCooling", lastImageTime + 1000, true); */ // consequtive camera triggers for (int t = firstImageTime; t < lastImageTime; t += (int)Parameters["TimeBetweenTriggers"]) { p.Pulse(0, t, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); } //Turn everything back on at end of sequence: p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe p.AddEdge("rbAbsImagingBeam", lastImageTime + 1100, false); p.AddEdge("rbAbsImagingBeam", lastImageTime + 1100 + 15, true); p.AddEdge("rbAbsImagingBeam", lastImageTime + 12200, false); p.AddEdge("rbAbsImagingBeam", lastImageTime + 12200 + 15, true); p.Pulse(0, lastImageTime + 1100, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of cloud p.Pulse(0, lastImageTime + 12200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of probe p.Pulse(0, lastImageTime + 21200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of background //p.AddEdge("rb3DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rb2DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rbPushBeam", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); int rbMOTLoadingStartTime = 0; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 5000; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int secondImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"]; int thridImageTime = secondImageTime + (int)Parameters["TimeBetweenTriggers"]; int fourthImageTime = thridImageTime + (int)Parameters["TimeBetweenTriggers"]; int fithImageTime = fourthImageTime + (int)Parameters["TimeBetweenTriggers"]; int sixthImageTime = fithImageTime + (int)Parameters["TimeBetweenTriggers"]; int seventhImageTime = sixthImageTime + (int)Parameters["TimeBetweenTriggers"]; int eightImageTime = seventhImageTime + (int)Parameters["TimeBetweenTriggers"]; int ninethImageTime = eightImageTime + (int)Parameters["TimeBetweenTriggers"]; int tenthImageTime = ninethImageTime + (int)Parameters["TimeBetweenTriggers"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("v00Chirp"); // Add Rb Analog channels p.AddChannel("rb3DCoolingFrequency"); p.AddChannel("rb3DCoolingAttenuation"); p.AddChannel("rbRepumpFrequency"); p.AddChannel("rbRepumpAttenuation"); p.AddChannel("rbAbsImagingFrequency"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", moleculeMOTLoadingStartTime + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", rbMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueRb"]); p.AddAnalogValue("MOTCoilsCurrent", moleculeMOTLoadingStartTime, (double)Parameters["MOTCoilsCurrentValueCaF"]); p.AddAnalogValue("MOTCoilsCurrent", tenthImageTime + 1000, 0.0); // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // trigger delay // p.AddAnalogValue("triggerDelay", 0, (double)Parameters["triggerDelay"]); // F=0 p.AddAnalogValue("v00EOMAmp", 0, 4.7); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", moleculeMOTLoadingEndTime, (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityEndValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, (double)Parameters["v0FrequencyStartValue"]); //v0 chirp p.AddAnalogValue("v00Chirp", 0, 0.0); //Rb Laser detunings p.AddAnalogValue("rb3DCoolingFrequency", 0, (double)Parameters["MOTCoolingLoadingFrequency"]); p.AddAnalogValue("rbRepumpFrequency", 0, (double)Parameters["MOTRepumpLoadingFrequency"]); p.AddAnalogValue("rbAbsImagingFrequency", 0, (double)Parameters["ImagingFrequency"]); //Rb Laser intensities p.AddAnalogValue("rb3DCoolingAttenuation", 0, 0.0); //Rb DARK MOT repump detuning p.AddAnalogValue("rbRepumpAttenuation", 0, 6.5); //This channel is now used for controlling DARK MOT repump detuning (6.5 V normal value 109.5 MHz) return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int rbMOTLoadingStartTime = patternStartBeforeQ; int rbMOTLoadingEndTime = rbMOTLoadingStartTime + (int)Parameters["RbMOTLoadTime"]; int moleculeMOTLoadingStartTime = rbMOTLoadingEndTime; int moleculeMOTLoadingEndTime = moleculeMOTLoadingStartTime + 5000; int firstImageTime = moleculeMOTLoadingEndTime + (int)Parameters["v0IntensityRampDuration"]; int secondImageTime = firstImageTime + (int)Parameters["TimeBetweenTriggers"]; int thridImageTime = secondImageTime + (int)Parameters["TimeBetweenTriggers"]; int fourthImageTime = thridImageTime + (int)Parameters["TimeBetweenTriggers"]; int fithImageTime = fourthImageTime + (int)Parameters["TimeBetweenTriggers"]; int sixthImageTime = fithImageTime + (int)Parameters["TimeBetweenTriggers"]; int seventhImageTime = sixthImageTime + (int)Parameters["TimeBetweenTriggers"]; int eightImageTime = seventhImageTime + (int)Parameters["TimeBetweenTriggers"]; int ninethImageTime = eightImageTime + (int)Parameters["TimeBetweenTriggers"]; int tenthImageTime = ninethImageTime + (int)Parameters["TimeBetweenTriggers"]; for (int t = 0; t < (int)Parameters["RbMOTLoadTime"]; t += 50000) { p.Pulse(patternStartBeforeQ + t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ + t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch } MOTMasterScriptSnippet lm = new LoadMoleculeMOTNoSlowingEdge(p, Parameters); p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame p.Pulse(0, secondImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, thridImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, fourthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, fithImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, sixthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, seventhImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, eightImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, ninethImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); p.Pulse(0, tenthImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //Rb: p.AddEdge("rb3DCooling", 0, false); p.AddEdge("rb3DCooling", tenthImageTime + 1000, true); p.AddEdge("rb2DCooling", 0, false); p.AddEdge("rb2DCooling", rbMOTLoadingEndTime, true); p.AddEdge("rbPushBeam", 0, false); p.AddEdge("rbPushBeam", rbMOTLoadingEndTime, true); //Turn everything back on at end of sequence: //p.Pulse(0, firstImageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); //camera trigger for first frame //DARK MOT: p.AddEdge("rbOpticalPumpingAOM", 0, false); //Using thic channel for controlling DARK SPOT repump AOM p.AddEdge("rbOpticalPumpingAOM", tenthImageTime + 1100, true); p.AddEdge("rbRepump", 0, false); p.AddEdge("rbRepump", rbMOTLoadingEndTime, true); p.AddEdge("rbRepump", tenthImageTime + 1000, false); p.AddEdge("rbAbsImagingBeam", 0, true); //Absorption imaging probe p.AddEdge("rbAbsImagingBeam", tenthImageTime + 1100, false); p.AddEdge("rbAbsImagingBeam", tenthImageTime + 1100 + 15, true); p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200, false); p.AddEdge("rbAbsImagingBeam", tenthImageTime + 12200 + 15, true); p.Pulse(0, tenthImageTime + 1100, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of cloud p.Pulse(0, tenthImageTime + 12200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of probe p.Pulse(0, tenthImageTime + 21200, (int)Parameters["Frame0TriggerDuration"], "rbAbsImgCamTrig"); //trigger camera to take image of background //p.AddEdge("rb3DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rb2DCooling", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); //p.AddEdge("rbPushBeam", (int)Parameters["PatternLength"] - (int)Parameters["TurnAllLightOn"], false); return(p); }