Exemplo n.º 1
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse(10000, 0, 100000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        //p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");
        //p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");
        //p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger");
        p.AddEdge("shutterenable", 50000, false);

        p.DownPulse(190000, 0, 50, "CameraTrigger");
        p.DownPulse(195000, 0, 50, "CameraTrigger");

        //p.AddEdge("aom0enable", (int)Parameters["MOTLoadTime"], false);
        //p.AddEdge("aom1enable", (int)Parameters["MOTLoadTime"], false);
        //p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false);

        return(p);
    }
Exemplo n.º 2
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse(10000, 0, 100000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        p.DownPulse(150000, 0, 50, "CameraTrigger");
        p.DownPulse(155000, 0, 50, "CameraTrigger");

        // loads the mag trap by switching off the MOT beams
        p.AddEdge("aom0enable", (int)Parameters["MOTLoadTime"], false);
        p.AddEdge("aom1enable", (int)Parameters["MOTLoadTime"], false);
        //p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false); //switches off Zeeman beam
        p.AddEdge("aom2enable", (int)Parameters["MOTLoadTime"], false);
        //p.AddEdge("aom3enable", (int)Parameters["MOTLoadTime"], false);
        p.DownPulse((int)Parameters["MOTLoadTime"], 0, (int)Parameters["Frame0Trigger"] - (int)Parameters["MOTLoadTime"], "aom3enable");
        //p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");

        return(p);
    }
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!



        p.AddEdge("D2aomshutter1", 0, true); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        p.AddEdge("D2aomshutter2", 0, true); //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        p.AddEdge("aom2enable", 119000, false);//turn off Zeeman beam to measure lifetime.
        p.AddEdge("aom3enable", 199000, false);
        p.AddEdge("aom1enable", 199000, false);
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        p.DownPulse(210000, 0, 50, "CameraTrigger");
        p.DownPulse(215000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 4
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.


        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!


        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("shutterenable", 500, false);
        p.AddEdge("shutterenable", 1500, true);


        //p.DownPulse(10000 , -5, 2, "CameraTrigger"); //take an image without the cloud.


        p.DownPulse(1000, 0, 2, "CameraTrigger"); //background image - no light.
        //p.DownPulse(10005, 0, 2, "CameraTrigger"); //take an image without the cloud.
        //p.DownPulse(10010, 0, 2, "CameraTrigger"); //take an image without the cloud.

        p.DownPulse(20005, 0, 50, "CameraTrigger"); //take an image without the cloud.
        p.DownPulse(30010, 0, 50, "CameraTrigger"); //take an image without the cloud.
        return(p);
    }
Exemplo n.º 5
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);  // This just loads the MOT, and leaves it "on". You need

        //turn off the MOT and Zeeman light yourself

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);

        //switches off Zeeman beams after loading
        p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false);

        //turn OFF the MOT AOMs, cutting off all light to the chamber
        p.AddEdge("aom3enable", (int)Parameters["MagTrapTransferTime"], false);

        //Imaging
        p.Pulse((int)Parameters["Frame0Trigger"], 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, 100, "CameraTrigger");  //take an image of the cloud after D1 stage

        p.Pulse((int)Parameters["Frame1Trigger"] + 10010, 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["Frame1Trigger"] + 10010, 0, 100, "CameraTrigger"); //take an image without the cloud.

        //p.AddEdge("aom1enable", 150000, false);
        p.DownPulse(160000, 0, 50, "CameraTrigger"); //background image - no light.

        return(p);
    }
Exemplo n.º 6
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        p.AddEdge("D2aomshutter1", 0, true);                      //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        p.AddEdge("D2aomshutter2", 0, true);                      //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman and Zeeman repump beams before the CMOT phase
        p.AddEdge("shutterenable", (int)Parameters["CMOTStartTime"] - 5000, false);
        p.AddEdge("aom2enable", (int)Parameters["CMOTStartTime"] - 20, false);
        p.AddEdge("aom3enable", (int)Parameters["CMOTStartTime"] - 20, false);
        p.AddEdge("probeshutterenable", (int)Parameters["CMOTEndTime"] - 500, true);

        //switches off the MOT and repump beams and takes an image of the expanding cloud
        //(for the image, probe and repump beams are switched on)
        p.AddEdge("aom0enable", (int)Parameters["CMOTEndTime"], false);
        p.AddEdge("aom1enable", (int)Parameters["CMOTEndTime"], false);

        //turn ON the D1 light, then turn OFF the D2 light
        p.AddEdge("D1aomshutter1", (int)Parameters["CMOTEndTime"], true);
        p.AddEdge("D2aomshutter1", (int)Parameters["CMOTEndTime"] + 1, false);
        p.AddEdge("D2aomshutter2", (int)Parameters["CMOTEndTime"] + 1, false);

        //turn on the D1 light
        p.Pulse((int)Parameters["CMOTEndTime"] + 2, 0, (int)Parameters["D1Duration"], "aom0enable");
        p.Pulse((int)Parameters["CMOTEndTime"] + 2, 0, (int)Parameters["D1Duration"], "aom1enable");

        //turn OFF the D1 light, then turn ON the D2 light
        p.AddEdge("D1aomshutter1", (int)Parameters["CMOTEndTime"] + (int)Parameters["D1Duration"] + 2, false);
        p.AddEdge("D2aomshutter1", (int)Parameters["CMOTEndTime"] + (int)Parameters["D1Duration"] + 3, true);
        p.AddEdge("D2aomshutter2", (int)Parameters["CMOTEndTime"] + (int)Parameters["D1Duration"] + 3, true);

        //image
        p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        //takes image of the probe beam with no atoms, this always happens 100ms after the atoms have been released from the CMOT
        p.Pulse((int)Parameters["CMOTEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.Pulse((int)Parameters["CMOTEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["CMOTEndTime"] + 1000, 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        //takes a background image
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");

        p.DownPulse(160000, 0, 50, "CameraTrigger");
        p.DownPulse(170000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 7
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);  // This just loads the MOT, and leaves it "on". You need

        //turn off the MOT and Zeeman light yourself

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("aom4enable", 0, true);          //leave the optical pumping aom on for the MOT loading to stabilise it.
        p.AddEdge("probeshutterenable", 0, false); // leave the molasses shutter open

        //close the oven shutter after loading
        p.AddEdge("ovenShutterOpen", (int)Parameters["MOTLoadEndTime"] - 3000, false);

        //switches off Zeeman beams after loading
        p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false);

        //turn OFF the MOT EOMs, pumping atoms into f=1 ground state
        p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"] - 1, false);


        //turn OFF the MOT AOMs, cutting off all light to the chamber
        p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"], false);
        //turn off the Optical Pumping AOM at this time
        p.AddEdge("aom4enable", (int)Parameters["MOTEndTime"] - 1000, false);

        //pulse on the molasses light
        p.Pulse((int)Parameters["MOTEndTime"], (int)Parameters["MolStartDelay"], (int)Parameters["MolassesPulseLength"], "aom2enable");

        //Close molasses shutter
        p.AddEdge("probeshutterenable", (int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MolassesShutterCloseTime"] - 30, true);

        //Optical Pumping
        p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"], -(int)Parameters["OPTimeDelay"], (int)Parameters["OPPulseLength"], "aom4enable");

        //Magnetic trap

        //Imaging
        p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"] + (int)Parameters["MagTrapRampTime"] + (int)Parameters["MagTrapHoldTime"] + (int)Parameters["ImageDelay"], 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["MOTEndTime"] + (int)Parameters["MolStartDelay"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["MagTrapDelay"] + (int)Parameters["MagTrapRampTime"] + (int)Parameters["MagTrapHoldTime"] + (int)Parameters["ImageDelay"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage

        p.Pulse((int)Parameters["Frame1Trigger"], -1, 100, "aom1enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, 100, "CameraTrigger"); //take an image without the cloud.

        //p.AddEdge("aom1enable", 150000, false);
        p.DownPulse(90000, 0, 50, "CameraTrigger"); //background image - no light.
        p.DownPulse(100000, 0, 50, "CameraTrigger");
        return(p);
    }
Exemplo n.º 8
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 10, "AnalogPatternTrigger");                //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse(100000, 0, 100000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame2Trigger"] - 5, 0, (int)Parameters["ExposureTime"] + 10, "aom2enable");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");
        //p.DownPulse((int)Parameters["Frame4Trigger"] - 100, 0, (int)Parameters["ExposureTime"] + 200, "aom2enable");
        //p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger");

        //switches off Zeeman and Absoroption beams to obtain an image of the background scattered light with no probe beam present
        p.AddEdge("aom2enable", 1150000, false);
        p.AddEdge("aom3enable", 1150000, false);
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");

        p.DownPulse(1500000, 0, 50, "CameraTrigger");
        p.DownPulse(1550000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 9
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse(40000, 0, 100000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        p.DownPulse(190000, 0, 50, "CameraTrigger");
        p.DownPulse(195000, 0, 50, "CameraTrigger");

        // switches off the Zeeman and absorption beams to avoid reloading the MOT whilst imaging, and to allow fluorescence images to be obtained
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["CameraExposure"], "aom2enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["CameraExposure"], "aom3enable");

        // loads the mag trap, Zeeman light is not switched back on again to avoid MOT reloading
        p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["MagTrapDuration"], "aom0enable");
        p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["MagTrapDuration"], "aom1enable");
        p.AddEdge("aom2enable", (int)Parameters["MOTLoadDuration"], false);
        p.AddEdge("aom3enable", (int)Parameters["MOTLoadDuration"], false);

        return(p);
    }
Exemplo n.º 10
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        int motCompressStartTime    = (int)Parameters["LoadingDuration"];
        int molassesStartTime       = motCompressStartTime + (int)Parameters["MOTCoilsCurrentRampDuration"] + (int)Parameters["MOTCoilsCurrentWaitAfterRamp"];
        int opticalPumpingStartTime = molassesStartTime + (int)Parameters["MolassesDuration"];
        int magTrapStartTime        = opticalPumpingStartTime + (int)Parameters["OpticalPumpingDuration"];
        int motRecaptureTime        = magTrapStartTime + (int)Parameters["MagTrapDuration"];
        int imageTime = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"];

        p.Pulse(0, 0, 10, "aoPatternTrigger");  // THIS TRIGGERS THE ANALOG PATTERN. The analog pattern will start at the same time as the Q-switch is fired.

        p.Pulse(0, opticalPumpingStartTime, motRecaptureTime - opticalPumpingStartTime, "rbCoolingAOM");

        p.AddEdge("rbOpticalPumpingAOM", 0, true);                                                                  // Turn off for most of sequence
        p.DownPulse(0, opticalPumpingStartTime, (int)Parameters["OpticalPumpingDuration"], "rbOpticalPumpingAOM");  // Turn on for optical pumping step
        p.AddEdge("rbOpticalPumpingAOM", imageTime + 2000, false);                                                  // Turn back on safely after imaging has finished

        p.Pulse(0, magTrapStartTime - 1600, motRecaptureTime - magTrapStartTime + 1600 - 1200, "rbCoolingShutter"); // Takes 16ms to start closing, 14ms to fully open
        p.Pulse(0, magTrapStartTime - 1400, motRecaptureTime - magTrapStartTime + 1400, "rbOpticalPumpingShutter"); // Takes 14ms to start closing, don't really care when it opens again as not required for imaging

        //p.Pulse(0, molassesStartTime - 500, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2");

        p.Pulse(0, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger2");

        return(p);
    }
Exemplo n.º 11
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        p.DownPulse(150000, 0, 50, "CameraTrigger");
        p.DownPulse(160000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 12
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);  // This just loads the MOT, and leaves it "on". You need

        //turn off the MOT and Zeeman light yourself

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);

        //switches off Zeeman beams after loading
        p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false);

        //turn OFF the MOT EOMs, pumping atoms into f=1 ground state
        p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"] - 1, false);

        //turn OFF EOM for imaging without repump light
        //p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"], false);

        //turn OFF the MOT AOMs, cutting off all light to the chamber
        p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"], false);

        //pulse ON the EOM for optical pumping
        p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], -2, 1, "D2EOMenable");

        //flash probe beam on for 100us prior to imaging to pump the atoms
        p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], -2, 1, "aom1enable");

        //Imaging
        p.Pulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["MOTEndTime"] + (int)Parameters["ImageDelay"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage

        p.Pulse((int)Parameters["Frame1Trigger"], -1, 100, "aom1enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, 100, "CameraTrigger"); //take an image without the cloud.

        //p.AddEdge("aom1enable", 150000, false);
        p.DownPulse(90000, 0, 50, "CameraTrigger"); //background image - no light.
        p.DownPulse(100000, 0, 50, "CameraTrigger");
        return(p);
    }
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("D2aomshutter1", 0, true);                      //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        p.AddEdge("D2aomshutter2", 0, true);                      //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        p.Pulse((int)Parameters["MOTEndTime"] + 1100, 0, 20000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);

        //switches off Zeeman and Zeeman repump beams before releasing atoms into the magnetic trap
        p.AddEdge("shutterenable", (int)Parameters["MOTEndTime"] - 5000, false);
        p.AddEdge("ovenShutterClose", (int)Parameters["MOTEndTime"] - 1600, true);
        p.AddEdge("aom2enable", (int)Parameters["MOTEndTime"] - 20, false);
        p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"] - 20, false);

        // loads the mag trap by switching off the MOT and repump beams
        p.AddEdge("aom0enable", (int)Parameters["MOTEndTime"], false);
        p.AddEdge("aom1enable", (int)Parameters["MOTEndTime"], false);

        //reforms the MOT
        p.AddEdge("aom0enable", (int)Parameters["MagTrapEndTime"], true);
        p.AddEdge("aom1enable", (int)Parameters["MagTrapEndTime"], true);

        //flashes on probe beam in order to image the atoms in the reformed MOT
        p.Pulse((int)Parameters["MagTrapEndTime"] + 10, 0, (int)Parameters["ExposureTime"] + 2, "aom3enable");
        p.DownPulse((int)Parameters["MagTrapEndTime"] + 10, 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //flashes on probe beam for the "no atoms" picture, where the no atoms image is always taken 100ms after the atoms are released
        //from the trap, then a background image is taken
        p.Pulse((int)Parameters["MagTrapEndTime"] + 1205, 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["MagTrapEndTime"] + 1205, 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        p.DownPulse(205000, 0, 50, "CameraTrigger");
        p.DownPulse(208000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 14
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse((int)Parameters["CMOTEndTime"] + 100, 0, 20000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman, Zeeman repump and probe beams before CMOT stage to stop loading the MOT
        p.AddEdge("shutterenable", (int)Parameters["CMOTStartTime"] - 5000, false);
        p.AddEdge("aom2enable", (int)Parameters["CMOTStartTime"] - 20, false);
        p.AddEdge("aom3enable", (int)Parameters["CMOTStartTime"] - 20, false);

        // loads the mag trap by switching off the MOT and repump beams
        p.AddEdge("aom0enable", (int)Parameters["CMOTEndTime"], false);
        p.AddEdge("aom1enable", (int)Parameters["CMOTEndTime"], false);

        //opens the probe beam shutter 50ms before the magnetic trap is switched off
        p.AddEdge("probeshutterenable", (int)Parameters["MagTrapEndTime"] - 500, true);

        //flashes on probe and repump beam in order to image the atoms in the mag trap
        p.Pulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        //p.Pulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.DownPulse((int)Parameters["MagTrapEndTime"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //flashes on probe and repump beam for the "no atoms" picture, where the no atoms image is always taken 100ms after the atoms are released from the
        //magnetic trap, then takes background image
        p.Pulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom3enable");
        //p.Pulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.DownPulse((int)Parameters["MagTrapEndTime"] + 1000, 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        p.DownPulse(205000, 0, 50, "CameraTrigger");
        p.DownPulse(208000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 15
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        p.AddEdge("D2aomshutter1", 0, true);                      //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        p.AddEdge("D2aomshutter2", 0, true);                      //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.
        p.AddEdge("D1aomshutter1", 0, true);
        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman repump, and Zeeman beam before imaging, so that MOT is not reloaded
        p.AddEdge("shutterenable", (int)Parameters["Frame0Trigger"] - 5000, false);
        p.AddEdge("probeshutterenable", (int)Parameters["Frame0Trigger"] - 500, true);
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"] - 500, false);
        p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"] - 500, false);

        p.AddEdge("aom0enable", (int)Parameters["Frame0Trigger"] - 2, false);
        p.AddEdge("aom1enable", (int)Parameters["Frame0Trigger"] - 2, false);

        //switches on the probe beam to take an image of the MOT
        p.Pulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.Pulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //switches on the probe beam to take the no atoms image, then takes a background image
        p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        p.DownPulse(150000, 0, 50, "CameraTrigger");
        p.DownPulse(160000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 16
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        p.DownPulse(150000, 0, 50, "CameraTrigger");
        p.DownPulse(160000, 0, 50, "CameraTrigger");

        //switches off Zeeman and Absoroption beams during imaging, so that MOT is not reloaded and fluorescence images can be taken
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"], false);
        p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"], false);

        return(p);
    }
Exemplo n.º 17
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);

        p.AddEdge("D2EOMenable", 0, true);
        p.AddEdge("D2EOMenable", (int)Parameters["SwitchTime"], false);

        p.DownPulse(10, 0, 50, "CameraTrigger");
        p.DownPulse(10010, 0, 50, "CameraTrigger");
        p.DownPulse(20010, 0, 50, "CameraTrigger");


        return(p);
    }
Exemplo n.º 18
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);  // This just loads the MOT, and leaves it "on". You need

        //turn off the MOT and Zeeman light yourself

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);

        //switches off Zeeman beams after loading
        p.AddEdge("shutterenable", (int)Parameters["MOTLoadEndTime"], false);


        //turn OFF the MOT AOMs, cutting off all light to the chamber
        p.AddEdge("aom3enable", (int)Parameters["MOTEndTime"], false);
        p.AddEdge("D2EOMenable", (int)Parameters["MOTEndTime"] + 1, false);

        //pulse on molasses light
        p.PulseSwitchable((int)Parameters["MolassesStartTime"], 0, (int)Parameters["MolassesPulseLength"], "aom2enable", (bool)Parameters["DoMolassesPulse"]);

        //Imaging - no repump since we want to see how much has gone into the f=1 ground state
        p.Pulse((int)Parameters["MolassesStartTime"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["ImageDelay"], 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["MolassesStartTime"] + (int)Parameters["MolassesPulseLength"] + (int)Parameters["ImageDelay"], 0, 100, "CameraTrigger"); //take an image of the cloud after D1 stage

        p.Pulse((int)Parameters["Frame1Trigger"], 0, 100, "aom1enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, 100, "CameraTrigger");  //take an image without the cloud.

        //p.AddEdge("aom1enable", 150000, false);
        p.DownPulse(95000, 0, 50, "CameraTrigger"); //background image - no light.

        return(p);
    }
Exemplo n.º 19
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse((int)Parameters["CMOTEndTime"] + 100, 0, (int)Parameters["TranslationStageTriggerDuration"], "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman and Zeeman repump beams during imaging, so that MOT is not reloaded and opens the probe beam
        //shutter 50ms before the MOT image is taken
        p.AddEdge("shutterenable", (int)Parameters["Frame0Trigger"] - 5000, false);
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"] - 500, false);
        p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"] - 500, false);
        p.AddEdge("probeshutterenable", (int)Parameters["Frame0Trigger"] - 500, true);

        //takes an image of the MOT
        p.Pulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //switches off the MOT beams to load the mag trap - use if you want to go to the mag trap then back to the MOT
        p.DownPulse((int)Parameters["CMOTEndTime"], 0, (int)Parameters["CMOTOffTime"], "aom0enable");
        p.DownPulse((int)Parameters["CMOTEndTime"], 0, (int)Parameters["CMOTOffTime"], "aom1enable");

        //takes an image of the MOT after the atoms have gone through the CMOT phase
        p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        //takes image of the probe beam with no atoms
        p.Pulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        //takes a background image
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");


        p.DownPulse(354000, 0, 50, "CameraTrigger");
        p.DownPulse(354500, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 20
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p      = new PatternBuilder32();
        int patternStartBeforeQ = (int)Parameters["TCLBlockStart"];
        int molassesStartTime   = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"];
        int pumpTime            = molassesStartTime + (int)Parameters["MolassesDuration"];
        int imageTime           = pumpTime + (int)Parameters["v0F0PumpDuration"];

        MOTMasterScriptSnippet lm = new LoadMoleculeMOT(p, Parameters);                                                // This is how you load "preset" patterns.

        p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00AOM"); // pulse off the MOT light whilst MOT fields are turning off
        p.Pulse(patternStartBeforeQ, 1, 35000, "bXShutter");                                                           // Close BX shutter during magnetic trap (note it takes at least 30ms to do anything so turning off at 1 is fine)
        p.AddEdge("v00Shutter", 0, true);
        p.DownPulse(patternStartBeforeQ, imageTime, 1000, "v00Shutter");
        p.Pulse(patternStartBeforeQ, imageTime, (int)Parameters["Frame0TriggerDuration"], "cameraTrigger"); // camera trigger

        return(p);
    }
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);

        //switches off Zeeman and Zeeman repump beams during imaging, so that MOT is not reloaded, then images the MOT
        p.AddEdge("shutterenable", (int)Parameters["Frame0Trigger"] - 5000, false);
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"] - 10, false);
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //switches off all light at the same time as the magnetic field is switched off to allow the cloud to expand freely
        p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["ReleaseTime"], "aom0enable");
        p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["ReleaseTime"], "aom1enable");
        p.DownPulse((int)Parameters["MOTLoadDuration"], 0, (int)Parameters["ReleaseTime"], "aom3enable");

        //take an image of the recaptured atoms, note that there is a slight delay between the MOT switching back on and the image
        // being taken, this should allow the atoms to cool slightly so the cloud width remains the same.
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        //MOT is dumped by switching off the magnetic field in order to take a picture of the probe beam
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");

        //probe beam is switched off ready for the background image
        p.AddEdge("aom3enable", (int)Parameters["Frame3Trigger"] - 10, false);
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");

        p.DownPulse(140000, 0, 50, "CameraTrigger");
        p.DownPulse(150000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 22
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        //initialise all channels, all AOMs are switched off at the start of the script
        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("aom0enable", 0, false);
        p.AddEdge("aom1enable", 0, false);
        p.AddEdge("aom2enable", 0, false);
        p.AddEdge("aom3enable", 0, false);

        //pulse the probe beam on and take a photo
        p.Pulse((int)Parameters["probePulseStartTime"], 0, 1, "aom3enable");
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        return(p);
    }
Exemplo n.º 23
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p      = new PatternBuilder32();
        int patternStartBeforeQ = (int)Parameters["TCLBlockStart"];
        int molassesStartTime   = (int)Parameters["MOTSwitchOffTime"] + (int)Parameters["MolassesDelay"];
        int v0F0PumpStartTime   = molassesStartTime + (int)Parameters["MolassesDuration"];
        int microwavePulseTime  = v0F0PumpStartTime + (int)Parameters["v0F0PumpDuration"];
        int motRecaptureTime    = microwavePulseTime + (int)Parameters["MicrowavePulseDuration"];
        int imageTime           = motRecaptureTime + (int)Parameters["MOTWaitBeforeImage"];

        MOTMasterScriptSnippet lm = new LoadMoleculeMOT(p, Parameters);  // This is how you load "preset" patterns.

        p.AddEdge("v00Shutter", 0, true);
        p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "microwaveIO");
        p.AddEdge("microwaveSweepTrigger", 0, true);
        p.DownPulse(patternStartBeforeQ, microwavePulseTime, 10, "microwaveSweepTrigger");
        p.Pulse(patternStartBeforeQ, (int)Parameters["MOTSwitchOffTime"], (int)Parameters["MolassesDelay"], "v00AOM");                     // pulse off the MOT light whilst MOT fields are turning off
        p.Pulse(patternStartBeforeQ, microwavePulseTime, (int)Parameters["MicrowavePulseDuration"], "v00AOM");                             // turn off the MOT light for microwave pulse
        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);
    }
Exemplo n.º 24
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        //p.AddEdge("D2aomshutter1", 0 , true);//The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        //p.AddEdge("D2aomshutter2", 0, true); //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);
        p.Pulse(10000, 0, 100, "AbsorptionScopeTrigger");
        p.Pulse(10000, 0, 500, "D1aomshutter1");


        p.DownPulse(15000 + 0, 0, 50, "CameraTrigger"); //take an image of the cloud after D1 stage

        return(p);
    }
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);

        //switches off Zeeman and Zeeman repump beams during imaging, so that MOT is not reloaded, also switches off probe beam
        p.AddEdge("shutterenable", (int)Parameters["Frame0Trigger"] - 1000, false);
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"] - 20, false);
        p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"] - 20, false);

        //switches on the probe beam to take an image of the MOT (the F=1 probe repump is also on during this image)
        p.Pulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //takes an image of the atoms with only the F=1 probe repump on
        p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        //switches on the probe beam to take the no atoms image, then switches off the F=1 light to take a background image
        p.Pulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");
        p.AddEdge("aom1enable", (int)Parameters["Frame3Trigger"] - 100, false);
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");

        //finally takes an image of the F=2 probe beam with no atoms present
        //p.Pulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger");

        p.DownPulse(160000, 0, 50, "CameraTrigger");
        p.DownPulse(165000, 0, 50, "CameraTrigger");

        return(p);
    }
Exemplo n.º 26
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);
    }
Exemplo n.º 27
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters); // This is how you load "preset" patterns.

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");                 //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.Pulse((int)Parameters["CMOTEndTime"] + 1100, 0, 15000, "TranslationStageTrigger");

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman and Zeeman repump beams during imaging, so that MOT is not reloaded, then takes image of MOT,
        // probe beam is pulsed on for image
        p.AddEdge("shutterenable", (int)Parameters["Frame0Trigger"] - 5000, false);
        p.AddEdge("aom2enable", (int)Parameters["Frame0Trigger"] - 500, false);
        p.AddEdge("aom3enable", (int)Parameters["Frame0Trigger"] - 500, false);
        p.AddEdge("probeshutterenable", (int)Parameters["Frame0Trigger"] - 500, true);

        //takes an image of the atoms in the MOT
        p.Pulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame0Trigger"], 0, (int)Parameters["Frame0TriggerDuration"], "CameraTrigger");

        //pulses on abs beam in order to take an image of the compressed MOT
        //p.Pulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        //p.DownPulse((int)Parameters["Frame1Trigger"], 0, (int)Parameters["Frame1TriggerDuration"], "CameraTrigger");

        //switches off MOT beams to load the magnetic trap
        p.AddEdge("aom0enable", (int)Parameters["CMOTEndTime"], false);
        p.AddEdge("aom1enable", (int)Parameters["CMOTEndTime"], false);

        //pulses on the absorption beam to optically pump the atoms
        //p.Pulse((int)Parameters["CMOTEndTime"], 0, 1, "aom3enable");
        //p.AddEdge("aom1enable", (int)Parameters["CMOTEndTime"] + 5, false);

        //use the following block of code to reform the MOT before imaging the magnetically trapped atoms
        //NOTE - either use this block or the next block but not both together

        //reforms the MOT by switching on the MOT beams, then takes an image of the atoms by pulsing on the abs beam
        //p.AddEdge("aom0enable", (int)Parameters["ReformMOTTime"], true);
        //p.AddEdge("aom1enable", (int)Parameters["ReformMOTTime"], true);
        //p.Pulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        //p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");


        //use the following block of code to image the atoms directly in the magnetic trap (or immediately after release from
        //mag trap

        //pulses on the abs and MOT repump beams to image the atoms in the magnetic trap
        p.Pulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.Pulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame2Trigger"], 0, (int)Parameters["Frame2TriggerDuration"], "CameraTrigger");


        //abs and MOT repump beams are pulsed on for the "no atoms" image, and then a background image is taken
        //p.Pulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["ExposureTime"], "aom1enable");
        p.Pulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["ExposureTime"], "aom3enable");
        p.DownPulse((int)Parameters["Frame3Trigger"], 0, (int)Parameters["Frame3TriggerDuration"], "CameraTrigger");
        p.DownPulse((int)Parameters["Frame4Trigger"], 0, (int)Parameters["Frame4TriggerDuration"], "CameraTrigger");

        //switches on mot and mot repump beams to take background image for atoms in the MOT (note F=1 probe beam power increases
        // if the MOT AOM is switched off)
        //p.AddEdge("aom1enable", 159000, true);
        //p.AddEdge("aom0enable", 159000, true);
        //p.Pulse((int)Parameters["Frame5Trigger"] - 1, 0, (int)Parameters["ExposureTime"] + 2, "aom3enable");
        //p.DownPulse((int)Parameters["Frame5Trigger"], 0, (int)Parameters["Frame5TriggerDuration"], "CameraTrigger");

        p.DownPulse(183000, 0, 5, "CameraTrigger");
        p.DownPulse(185000, 0, 5, "CameraTrigger");

        return(p);
    }
Exemplo n.º 28
0
    public override PatternBuilder32 GetDigitalPattern()
    {
        PatternBuilder32 p = new PatternBuilder32();

        p.AddEdge("D2aomshutter1", 0, true); //The pattern builder assumes that digital channels are off at time zero, unless you tell them so.
        p.AddEdge("D2aomshutter2", 0, true); //Turning anything Off as a first command will cause "edge conflict error", unless it was turned On at time zero.


        MOTMasterScriptSnippet lm = new SHLoadMOT(p, Parameters);  // This just loads the MOT, and leaves it "on". You need

        //turn off the MOT and Zeeman light yourself

        p.Pulse(0, 0, 1, "AnalogPatternTrigger");  //NEVER CHANGE THIS!!!! IT TRIGGERS THE ANALOG PATTERN!

        p.AddEdge("CameraTrigger", 0, true);
        p.AddEdge("shutterenable", 0, true);
        p.AddEdge("ovenShutterClose", 0, false);
        p.AddEdge("probeshutterenable", 0, false);

        //switches off Zeeman repump, and Zeeman beam before imaging, so that MOT is not reloaded
        p.AddEdge("shutterenable", (int)Parameters["D1StartTime"] - 5000, false);
        p.AddEdge("probeshutterenable", (int)Parameters["D1StartTime"] - 500, true);
        p.AddEdge("aom2enable", (int)Parameters["D1StartTime"] - 500, false);
        p.AddEdge("aom3enable", (int)Parameters["D1StartTime"] - 500, false);

        //turn OFF the MOT AOMs, cutting off all light to the chamber
        p.AddEdge("aom0enable", (int)Parameters["D1StartTime"] - 5, false);
        p.AddEdge("aom1enable", (int)Parameters["D1StartTime"] - 5, false);

        //turn ON the D1 light, then turn OFF the D2 light
        p.AddEdge("D1aomshutter1", (int)Parameters["D1StartTime"] - 4, true);
        p.AddEdge("D2aomshutter1", (int)Parameters["D1StartTime"] - 3, false);
        p.AddEdge("D2aomshutter2", (int)Parameters["D1StartTime"] - 3, false);

        //turn ON the MOT AOMs, allowing the D1 light through
        //p.AddEdge("aom0enable", (int)Parameters["D1StartTime"], true);
        //p.AddEdge("aom1enable", (int)Parameters["D1StartTime"], true);

        //p.AddEdge("D1aomshutter1", (int)Parameters["D1StartTime"] +10000, false);

        //turn off MOT cooling beam, directing the D1 light into the repumper beam
        //p.AddEdge("aom0enable", (int)Parameters["D1StartTime"]+0, false);

        //turn on the Zeeman AOM which acts as a shutter for the probe beam. Happens 1ms after the D1 cooling starts
        p.AddEdge("aom3enable", (int)Parameters["D1StartTime"] + 0, true);

        //turn ON the D2 light. Now both lasers go through the TA but nothing goes to the chamber.
        p.AddEdge("D2aomshutter1", (int)Parameters["D1StartTime"] + (int)Parameters["D1CoolingDuration"], true);
        p.AddEdge("D2aomshutter2", (int)Parameters["D1StartTime"] + (int)Parameters["D1CoolingDuration"], true);


        p.DownPulse((int)Parameters["D1StartTime"] + 0, 0, 50, "CameraTrigger"); //take an image of the cloud after D1 stage

        p.DownPulse(120000, 0, 50, "CameraTrigger");                             //take an image without the cloud.

        p.AddEdge("aom3enable", 155000, false);                                  //turn off the probe beam.
        p.AddEdge("D1aomshutter1", 155000, false);                               //turn off D1 light.
        p.DownPulse(160000, 0, 50, "CameraTrigger");                             //background image - no light.

        return(p);
    }