Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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);
    }