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); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTDualSpecies(p, Parameters); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int motSwitchOffTime = patternStartBeforeQ + (int)Parameters["MOTSwitchOffTime"]; int molassesStartTime = motSwitchOffTime + (int)Parameters["MolassesDelay"]; int v0F0PumpStartTime = molassesStartTime + (int)Parameters["MolassesDuration"]; 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 releaseTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = releaseTime + (int)Parameters["ExpansionTime"]; // Add Analog Channels p.AddChannel("v00Intensity"); p.AddChannel("v00Frequency"); p.AddChannel("xShimCoilCurrent"); p.AddChannel("yShimCoilCurrent"); p.AddChannel("v00EOMAmp"); p.AddChannel("zShimCoilCurrent"); p.AddChannel("rbCoolingIntensity"); // Slowing field p.AddAnalogValue("slowingCoilsCurrent", 0, (double)Parameters["slowingCoilsValue"]); p.AddAnalogValue("slowingCoilsCurrent", patternStartBeforeQ + (int)Parameters["slowingCoilsOffTime"], 0.0); // B Field p.AddAnalogValue("MOTCoilsCurrent", 0, (double)Parameters["rbMOTCoilsLoadValue"]); p.AddLinearRamp("MOTCoilsCurrent", patternStartBeforeQ - (int)Parameters["MOTCoilsCurrentRampDuration"], (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampStartValue"]); p.AddLinearRamp("MOTCoilsCurrent", patternStartBeforeQ + (int)Parameters["MOTCoilsCurrentRampStartTime"], (int)Parameters["MOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoilsCurrentRampEndValue"]); p.AddAnalogValue("MOTCoilsCurrent", motSwitchOffTime, (double)Parameters["MOTCoilsCurrentMolassesValue"]); p.AddAnalogValue("MOTCoilsCurrent", magTrapStartTime, (double)Parameters["MOTCoilsCurrentMagTrapValue"]); p.AddAnalogValue("MOTCoilsCurrent", releaseTime, 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"]); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); p.AddLinearRamp("v00Intensity", patternStartBeforeQ + (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["v0IntensityRampEndValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime, (double)Parameters["v0IntensityMolassesValue"]); p.AddAnalogValue("v00Intensity", molassesStartTime + 650, 7.4); p.AddAnalogValue("v00Intensity", molassesStartTime + 700, 7.83); p.AddAnalogValue("v00Intensity", molassesStartTime + 750, 8.09); p.AddAnalogValue("v00Intensity", v0F0PumpStartTime, (double)Parameters["v0IntensityF0PumpValue"]); p.AddAnalogValue("v00Intensity", magTrapStartTime, (double)Parameters["v0IntensityImageValue"]); // v0 EOM p.AddAnalogValue("v00EOMAmp", 0, (double)Parameters["v0EOMMOTValue"]); p.AddAnalogValue("v00EOMAmp", v0F0PumpStartTime, (double)Parameters["v0EOMPumpValue"]); p.AddAnalogValue("v00EOMAmp", magTrapStartTime, (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", magTrapStartTime, ((double)Parameters["lockAomFrequency"] - (double)Parameters["v0FrequencyMOTValue"] / 2 - (double)Parameters["calibOffset"]) / (double)Parameters["calibGradient"] ); // Rb Cooling light intensity p.AddAnalogValue("rbCoolingIntensity", 0, (double)Parameters["rbCoolingMOTIntensity"]); p.AddLinearRamp("rbCoolingIntensity", patternStartBeforeQ + (int)Parameters["v0IntensityRampStartTime"], (int)Parameters["v0IntensityRampDuration"], (double)Parameters["rbCoolingMOTIntensityRampEndValue"]); p.AddAnalogValue("rbCoolingIntensity", motSwitchOffTime, (double)Parameters["rbCoolingMolassesIntensity"]); //p.AddAnalogValue("rbCoolingIntensity", molassesStartTime + (int)Parameters["rbExpansionDuration"] + 100, 1.79); //p.AddAnalogValue("rbCoolingIntensity", molassesStartTime + (int)Parameters["rbExpansionDuration"] + 200, 1.65); //p.AddAnalogValue("rbCoolingIntensity", molassesStartTime + (int)Parameters["rbExpansionDuration"] + 300, 1.48); //p.AddAnalogValue("rbCoolingIntensity", molassesStartTime + (int)Parameters["rbExpansionDuration"] + 400, 1.397); //p.AddAnalogValue("rbCoolingIntensity", molassesStartTime + (int)Parameters["rbExpansionDuration"] + 600, 1.316); p.AddAnalogValue("rbCoolingIntensity", magTrapStartTime, (double)Parameters["rbCoolingMOTIntensity"]); return(p); }
public override AnalogPatternBuilder GetAnalogPattern() { AnalogPatternBuilder p = new AnalogPatternBuilder((int)Parameters["PatternLength"]); MOTMasterScriptSnippet lm = new LoadMoleculeMOTDualSpecies(p, Parameters); // 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"); //Rb Laser detunings starting values p.AddAnalogValue("rb3DCoolingFrequency", 0, (double)Parameters["MOTCoolingLoadingFrequency"]); p.AddAnalogValue("rbRepumpFrequency", 0, (double)Parameters["MOTRepumpLoadingFrequency"]); p.AddAnalogValue("rbAbsImagingFrequency", 0, (double)Parameters["ImagingFrequency"]); p.AddAnalogValue("rb3DCoolingAttenuation", 0, 0.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["MOTCoilsCurrentValue"]); p.AddLinearRamp("MOTCoilsCurrent", (int)Parameters["MOTLoadTime"], (int)Parameters["CMOTCoilsCurrentRampDuration"], (double)Parameters["CMOTCurrentValue"]); //Ramp field to CaF loading gradient p.AddAnalogValue("MOTCoilsCurrent", (int)Parameters["MOTLoadTime"] + (int)Parameters["CMOTCoilsCurrentRampDuration"] + 50000, 0.0); //This will switch off the MOT coils 500 ms after CaF MOT loading sequence start // Shim Fields p.AddAnalogValue("xShimCoilCurrent", 0, (double)Parameters["xShimLoadCurrent"]); p.AddAnalogValue("yShimCoilCurrent", 0, (double)Parameters["yShimLoadCurrent"]); p.AddAnalogValue("zShimCoilCurrent", 0, (double)Parameters["zShimLoadCurrent"]); // F=0 p.AddAnalogValue("v00EOMAmp", 0, 5.2); // v0 Intensity Ramp p.AddAnalogValue("v00Intensity", 0, (double)Parameters["v0IntensityRampStartValue"]); // v0 Frequency Ramp p.AddAnalogValue("v00Frequency", 0, (double)Parameters["v0FrequencyStartValue"]); //v0 chirp p.AddAnalogValue("v00Chirp", 0, 0.0); //Rb CMOT detuning ramp //p.AddLinearRamp("rb3DCoolingFrequency", (int)Parameters["MOTLoadTime"], (int)Parameters["CMOTCoilsCurrentRampDuration"], (double)Parameters["MOTCoolingLoadingFrequency"]); return(p); }
public override PatternBuilder32 GetDigitalPattern() { PatternBuilder32 p = new PatternBuilder32(); int patternStartBeforeQ = (int)Parameters["TCLBlockStart"]; int motSwitchOffTime = patternStartBeforeQ + (int)Parameters["MOTSwitchOffTime"]; int molassesStartTime = motSwitchOffTime + (int)Parameters["MolassesDelay"]; int v0F0PumpStartTime = molassesStartTime + (int)Parameters["MolassesDuration"]; 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 releaseTime = magTrapStartTime + (int)Parameters["MagTrapDuration"]; int imageTime = releaseTime + (int)Parameters["ExpansionTime"]; MOTMasterScriptSnippet lm = new LoadMoleculeMOTDualSpecies(p, Parameters); // This is how you load "preset" patterns. //int yagFiresBeforeSlowing = ((int)Parameters["TCLBlockStart"] - (int)Parameters["FlashToQ"]) / 50000; //int firstYAGFire = patternStartBeforeQ - yagFiresBeforeSlowing * 50000; //for (int t = firstYAGFire; t < (int)Parameters["PatternLength"]; t += 50000) //{ // p.Pulse(t, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp // p.Pulse(t, 0, (int)Parameters["QSwitchPulseDuration"], "qSwitch"); //trigger the Q switch //} p.Pulse(patternStartBeforeQ - 100000, -(int)Parameters["FlashToQ"], (int)Parameters["QSwitchPulseDuration"], "flashLamp"); //trigger the flashlamp p.Pulse(patternStartBeforeQ - 100000, 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 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(0, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveA"); // p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveB"); p.Pulse(0, secondMicrowavePulseTime, (int)Parameters["SecondMicrowavePulseDuration"], "microwaveB"); // now linked to A channel p.Pulse(0, motSwitchOffTime, (int)Parameters["MolassesDelay"], "v00MOTAOM"); // pulse off the MOT light whilst MOT fields are turning off p.Pulse(0, microwavePulseTime, imageTime - microwavePulseTime, "v00MOTAOM"); // turn off the MOT light for microwave pulse p.Pulse(0, 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(0, secondMicrowavePulseTime - 1400, (int)Parameters["MagTrapDuration"] + 3000, "bXSlowingShutter"); //Takes 14ms to start closing p.Pulse(0, microwavePulseTime - 1500, releaseTime - microwavePulseTime + 1500 - 1100, "v00MOTShutter"); //p.Pulse(patternStartBeforeQ, (int)Parameters["MOTPictureTriggerTime"], (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger for picture of initial MOT p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger //rb Pattern p.AddEdge("rbCoolingAOM", 0, true); p.AddEdge("rbCoolingAOM", patternStartBeforeQ - (int)Parameters["rbLoadingDuration"], false); p.Pulse(0, molassesStartTime, (int)Parameters["rbExpansionDuration"], "rbCoolingAOM"); p.Pulse(0, magTrapStartTime - (int)Parameters["rbOpticalPumpingDuration"], imageTime - (magTrapStartTime - (int)Parameters["rbOpticalPumpingDuration"]), "rbCoolingAOM"); p.AddEdge("rbOpticalPumpingAOM", 0, true); // Turn off for most of sequence p.DownPulse(0, magTrapStartTime - (int)Parameters["rbOpticalPumpingDuration"], (int)Parameters["rbOpticalPumpingDuration"], "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, releaseTime - magTrapStartTime + 1600 - 1200, "rbCoolingShutter"); // Takes 16ms to start closing, 14ms to fully open p.Pulse(0, magTrapStartTime - 1400, releaseTime - 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 - 600, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2"); return(p); }