Пример #1
0
if ODT == True:
    s.digichg('odtttl',1)
s.wait(20.0)

ss = float(report['SEQ']['analogstepsize'])

# Cool and Compress MOT
# ENDCNC is defined as the time up to release from the MOT
motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

# Load UVMOT from CNCMOT
uvfppiezo, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvcooling.uvcoolRamps(motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

# Set imaging values
camera = 'ANDOR'
motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)

#Switch bfield to FESHBACH
switchdt  = float(report['FESHBACH']['switchdt'])
offdelay  = float(report['FESHBACH']['offdelay'])
quickdelay  = float(report['FESHBACH']['quickdelay'])
switchdelay  = float(report['FESHBACH']['switchdelay'])
bias  = float(report['FESHBACH']['bias'])
biasrampdt  = float(report['FESHBACH']['rampdt'])
bfield.linear(0.0,0.0)
bfield.appendhold(offdelay)
bfield.appendhold(2*switchdt)
bfield.appendhold(quickdelay)
bfield.appendhold(switchdelay)
bfield.linear(cnv('bfield',bias),biasrampdt)
#bfield.Exponential( 0.0, bias, biasrampdt, 30.0)
Пример #2
0
def  go_to_highfield(s):

	#Keep ODT on
	ODT = gen.bstr('ODT',report)
	if ODT == True:
		s.digichg('odtttl',1)
	s.wait(20.0)

	ss = float(report['SEQ']['analogstepsize'])

	# Cool and Compress MOT
	# ENDCNC is defined as the time up to release from the MOT
	motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

	# Load UVMOT from CNCMOT
	uvfppiezo, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvcooling.uvcoolRamps(motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

	# Set imaging values
	camera = 'ANDOR'
	motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)

	# Switch bfield to FESHBACH
	overlapdt    = float(report['ODT']['overlapdt'])
	rampdelay    = float(report['ODT']['rampdelay'])
	rampbf       = float(report['ODT']['rampbf'])
	bf           = float(report['ODT']['bf'])
	feshbachdt   = float(report['ODT']['feshbachdt'])
	switchondt  = float(report['FESHBACH']['switchondt'])
	switchdelay  = float(report['FESHBACH']['switchdelay'])
	bias         = float(report['FESHBACH']['bias'])
	biasrampdt   = float(report['FESHBACH']['rampdt'])

	bfield.chop(ENDUVMOT-overlapdt)
	bfield.appendhold(rampdelay)
	bfield.linear( bf, rampbf)
	bfield.extend(ENDUVMOT+feshbachdt)
	bfield.linear(0.0, 0.0)
	ENDBFIELD = feshbachdt
	bfield.appendhold( switchondt + switchdelay)
	bfield.linear(bias,biasrampdt)

	rampupdt = float(report['ODT']['rampupdt'])
	updt = float(report['ODT']['updt'])
	overshootdt = float(report['ODT']['overshootdt'])
	
	#~ odtpow0 = wfm.wave('odtpow', 0.0, ss)
	#~ odtpow0.extend(ENDUVMOT-overlapdt-updt-rampupdt)
	#~ odtpow0.odt_linear( 0.0 , f('ODT','odtpow0'), rampupdt)
	#~ odtpow0.appendhold( updt)
	#~ odtpow0.odt_linear(f('ODT','odtpow0'), f('ODT','odtpow'), overshootdt)

	odtpow0 = wfm.wave('odtpow', f('ODT','odtpow0'), ss)
	odtpow0.extend(ENDUVMOT-overlapdt)
	odtpow0.odt_linear(f('ODT','odtpow0'), f('ODT','odtpow'), overshootdt)

	
	EXTRA = max( overshootdt - (bfield.dt() - (ENDUVMOT-overlapdt-updt-rampupdt)) , 0.0) 
	print "...EXTRA time to allow for ODT overshoot = %f"  % EXTRA


	#Add waveforms to sequence
	s.analogwfm_add(ss,[ motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow, odtpow0])
	
	#wait normally rounds down using floor, here the duration is changed before so that
	#the wait is rounded up
	ENDUVMOT = ss*math.ceil(ENDUVMOT/ss)
	
	#insert QUICK pulse  for fast ramping of the field gradient
	s.wait(-10.0)
	quickval = 1 if gen.bstr('CNC',report) == True else 0
	s.digichg('quick',quickval)	
	s.wait(10.0)

	#insert UV pulse
	uvtime  = float(report['UV']['uvtime'])
	s.wait(ENDCNC)
	s.digichg('quick',0)
	s.wait(uvtime)
	#Shut down the UVAOM's and open the shutter
	s.wait(-50.0)
	s.digichg('uvaom1',0)
	s.digichg('uvaom2',0)
	s.digichg('uvshutter',1)
	s.wait(50.0)
	#Turn on UVAOM
	s.digichg('uvaom1',1)
	s.wait(-uvtime - ENDCNC)
	
	#Go to MOT release time and set QUICK back to low
	s.wait(ENDUVMOT)
	s.digichg('quick',0)

	#Leave UVMOT on for state transfer
	fstatedt  = float(report['ODT']['fstatedt'])
	s.wait(fstatedt)
	s.digichg('uvaom1',0)
	s.wait(-fstatedt) 


	#RELEASE FROM MOT
	waitshutter=5.0
	s.wait(waitshutter)
	s.digichg('uvshutter',0)
	#~ s.wait(20.0)
	#~ s.digichg('uvaom1',0)
	#~ s.digichg('uvaom2',0)
	#~ s.wait(-20.0)
	s.wait(-waitshutter)

	s.digichg('motswitch',0) 
	s.digichg('motshutter',1)
	s.digichg('field',0)

	#Insert ODT overlap with UVMOT and switch field to FESHBACH
	overlapdt = float(report['ODT']['overlapdt'])
	servodt = float(report['ODT']['servodt'])
	s.wait(-overlapdt-servodt)
	s.digichg('odt7595',1)
	s.wait(servodt)
	s.digichg('odtttl',1)
	#feshbachdt = rampdelay + rampbf + holdbf
	s.wait(overlapdt)
	s.wait( feshbachdt )
	s.digichg('feshbach',1)
	#s.wait(overlapdt - feshbachdt)
	#s.wait( -feshbachdt)
	

	#s.wait(offdelay)
	#s.wait(2*switchdt)
	#s.wait(quickdelay)
	s.wait(switchondt)
	do_quick=1
	s.digichg('field',1)
	s.digichg('hfquick',do_quick)
	s.digichg('quick',do_quick)
	#Can't leave quick ON for more than quickmax
	quickmax=100.
	s.wait(quickmax)
	s.digichg('hfquick',0)
	s.digichg('quick',0)
	s.wait(-quickmax)
	s.wait(switchdelay+biasrampdt)
	s.digichg('quick',0)
	s.wait(-biasrampdt)
	#s.wait(-switchdelay-quickdelay-2*switchdt-offdelay)
	s.wait(-switchdelay - switchondt - feshbachdt - ss)

	#At this point the time sequence is at ENDUVMOT
	
	#This is the time until the end of the bfield ramp
	#toENDBFIELD = biasrampdt + switchdelay + quickdelay + 2*switchdt + offdelay
	toENDBFIELD = biasrampdt + switchdelay + switchondt + feshbachdt
	
	return s, toENDBFIELD + EXTRA
Пример #3
0
def go_to_highfield(s):

    #Keep ODT on
    ODT = gen.bstr('ODT', report)
    if ODT == True:
        s.digichg('odtttl', 1)
    s.wait(20.0)

    ss = float(report['SEQ']['analogstepsize'])

    # Cool and Compress MOT
    # ENDCNC is defined as the time up to release from the MOT
    motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

    # Load UVMOT from CNCMOT
    uvfppiezo, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvred.uvcoolRamps(
        motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

    # Set imaging values
    camera = 'ANDOR'
    motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(
        motpow, repdet, trapdet, reppow, trappow, camera)

    # Switch bfield to FESHBACH
    overlapdt = float(report['ODT']['overlapdt'])
    rampdelay = float(report['FESHBACH']['rampdelay'])
    rampbf = float(report['FESHBACH']['rampbf'])
    bf = float(report['FESHBACH']['bf'])
    feshbachdt = float(report['FESHBACH']['feshbachdt'])
    switchondt = float(report['FESHBACH']['switchondt'])
    switchdelay = float(report['FESHBACH']['switchdelay'])
    bias = float(report['FESHBACH']['bias'])
    biasrampdt = float(report['FESHBACH']['rampdt'])

    bfield.chop(ENDUVMOT - overlapdt)
    bfield.appendhold(rampdelay)
    bfield.linear(bf, rampbf)
    bfield.extend(ENDUVMOT + feshbachdt)
    bfield.linear(0.0, 0.0)
    ENDBFIELD = feshbachdt
    bfield.appendhold(switchondt + switchdelay)
    bfield.linear(bias, biasrampdt)

    #---Ramp up ODT
    odtpow0 = odt.odt_wave('odtpow', f('ODT', 'odtpow0'), ss)
    odtpow0.extend(ENDUVMOT)

    #Add waveforms to sequence
    s.analogwfm_add(ss, [
        motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow,
        odtpow0
    ])

    #wait normally rounds down using floor, here the duration is changed before so that
    #the wait is rounded up
    ENDUVMOT = ss * math.ceil(ENDUVMOT / ss)

    #insert QUICK pulse  for fast ramping of the field gradient
    s.wait(-10.0)
    quickval = 1 if gen.bstr('CNC', report) == True else 0
    s.digichg('quick', quickval)
    s.wait(10.0)

    #insert UV pulse
    uvtime = float(report['UVRED']['uvtime'])
    s.wait(ENDCNC)
    s.digichg('quick', 0)
    s.wait(uvtime)
    #Shut down the UVAOM's and open the shutter
    s.wait(-50.0)
    s.digichg('uvaom1', 0)
    s.digichg('uvaom2', 0)
    s.digichg('uvshutter', 1)
    s.wait(50.0)
    #Turn on UVAOM
    s.digichg('uvaom1', 1)
    s.wait(-uvtime - ENDCNC)

    #Go to MOT release time and set QUICK back to low
    s.wait(ENDUVMOT)
    s.digichg('quick', 0)

    #CAREFUL: State transfer should be programmed in uvred.py, as it is done un uvmot.py
    s.digichg('uvaom1', 0)

    #RELEASE FROM MOT
    waitshutter = 5.0
    s.wait(waitshutter)
    s.digichg('uvshutter', 0)
    #~ s.wait(20.0)
    #~ s.digichg('uvaom1',0)
    #~ s.digichg('uvaom2',0)
    #~ s.wait(-20.0)
    s.wait(-waitshutter)

    s.digichg('motswitch', 0)
    s.digichg('motshutter', 1)
    s.digichg('field', 0)

    #Insert ODT overlap with UVMOT and switch field to FESHBACH
    overlapdt = float(report['ODT']['overlapdt'])
    servodt = float(report['ODT']['servodt'])
    s.wait(-overlapdt - servodt)
    s.digichg('odt7595', 1)
    s.wait(servodt)
    s.digichg('odtttl', 1)
    #feshbachdt = rampdelay + rampbf + holdbf
    s.wait(overlapdt)
    s.wait(feshbachdt)
    s.digichg('feshbach', 1)
    #s.wait(overlapdt - feshbachdt)
    #s.wait( -feshbachdt)

    #s.wait(offdelay)
    #s.wait(2*switchdt)
    #s.wait(quickdelay)
    s.wait(switchondt)
    do_quick = 1
    s.digichg('field', 1)
    s.digichg('hfquick', do_quick)
    s.digichg('quick', do_quick)
    #Can't leave quick ON for more than quickmax
    quickmax = 100.
    s.wait(quickmax)
    s.digichg('hfquick', 0)
    s.digichg('quick', 0)
    s.wait(-quickmax)
    s.wait(switchdelay + biasrampdt)
    s.digichg('quick', 0)
    s.wait(-biasrampdt)
    #s.wait(-switchdelay-quickdelay-2*switchdt-offdelay)
    s.wait(-switchdelay - switchondt - feshbachdt - ss)

    #At this point the time sequence is at ENDUVMOT

    #This is the time until the end of the bfield ramp
    #toENDBFIELD = biasrampdt + switchdelay + quickdelay + 2*switchdt + offdelay
    toENDBFIELD = biasrampdt + switchdelay + switchondt + feshbachdt

    return s, toENDBFIELD
Пример #4
0
def  go_to_highfield(s):

	#---Keep ODT on
	odton = gen.bstr('ODT',report)
	if odton == True:
		s.digichg('odtttl',1)
	s.wait(20.0)

	ss = SEQ.analogstepsize

	#---Cool and Compress MOT
	#---ENDCNC is defined as the time up to release from the MOT
	motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

	#---Load UVMOT from CNCMOT
	uvpow2, uvpow, motpow, bfield, ENDUVMOT = uvmot.uvRamps(motpow, bfield, ENDCNC)

	repdet.extend(ENDUVMOT)
	trapdet.extend(ENDUVMOT)
	reppow.extend(ENDUVMOT)
	trappow.extend(ENDUVMOT)
	
	#---Make sure everything has the same length before setting imaging values
	#--- Set imaging values
	camera = 'ANDOR'
	motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)


	#---Switch bfield to FESHBACH 
	bfield.appendhold(FB.rampdelay)
	bfield.linear( FB.bf, FB.rampbf)
	bfield.appendhold( FB.feshbachdt)
	bfield.linear(0.0, 0.0)
	bfield.appendhold( FB.switchondt + FB.switchdelay + UV.extradt)
	bfield.linear(FB.bias,FB.rampdt)


	#---Set the starting voltage for the ODT
	odtpow0 = odt.odt_wave('odtpow', ODT.odtpow0, ss)
	odtpow0.extend(ENDUVMOT)
	
	#---Change shunt value from motV to hfV before going to highfield
	shunt = wfm.wave('gradientfield', SHUNT.motV, ss, volt = SHUNT.motV)
	shunt.extend(ENDUVMOT + FB.rampdelay + FB.rampbf + FB.feshbachdt + UV.extradt) 
	#shunt.linear(SHUNT.hfV, 0.0,volt =SHUNT.hfV)	
	shunt.linear(SHUNT.hfV, 0.0,volt =0.0)	
	
	
	wfms = [ motpow, repdet, trapdet, bfield, reppow, trappow, uvpow, uvpow2,odtpow0, shunt]

	
	#---Add waveforms to sequence
	s.analogwfm_add(ss,wfms)
	
		
	#wait normally rounds down using floor, here the duration is changed before so that
	#the wait is rounded up
	ENDUVMOT = ss*math.ceil(ENDUVMOT/ss)
	
	#---Insert QUICK pulse for fast ramping of the field gradient during CNC
	s.wait(-10.0)
	quickval = 1 if gen.bstr('CNC',report) == True else 0
	s.digichg('quick',quickval)	
	s.wait(10.0)
	s.wait(ENDCNC)
	s.digichg('quick',0)
	
	#---Go back in time, shut down the UVAOM's and open the shutter
	#---UVAOM's were on to keep them warm
	s.wait(-50.0)
	s.digichg('uvaom1',0)
	s.digichg('uvaom2',0)
	s.digichg('uvshutter',1)
	s.wait(50.0)
	
	#---Insert ODT overlap 
	s.wait(-ODT.overlapdt-ODT.servodt)
	s.digichg('odt7595',1)
	s.wait(ODT.servodt)
	s.digichg('odtttl',1)
	s.wait(ODT.overlapdt)
	
	#---Turn OFF red light
	s.wait(UV.delay_red)
	s.digichg('motswitch',0) 
	s.digichg('motshutter',1)
	s.wait(-UV.delay_red)
	
	#---Turn ON UVAOM's
	s.wait(UV.delay_uv)
	s.digichg('uvaom1',1)
	s.digichg('uvaom2',1)
	s.wait(-UV.delay_uv)
	

	#---Go to MOT release time
	s.wait(-ENDCNC)
	s.wait(ENDUVMOT)
	

	#---Go to end of field rampdown and set QUICK back to low
	s.wait(FB.rampdelay+FB.rampbf) 
	s.digichg('quick',0)
	

	#---Wait in the UVMOT and then do optical pumping
	s.wait(UV.extradt) 
	s.wait(-UV.pumptime)
	s.digichg('uvaom2',0)
	s.wait(UV.pumptime)
	#---Turn OFF UVAOM
	s.digichg('uvaom1',0)
	#---Close UV shutter
	waitshutter=5.0
	s.wait(waitshutter)
	s.digichg('uvshutter',0)
	s.wait(-waitshutter)

	#---Turn OFF MOT magnetic field and switch it to FESHBACH
	s.digichg('field',0)
	s.wait( FB.feshbachdt )
	s.digichg('feshbach',1)
	s.wait(FB.switchondt)
	do_quick=1
	s.digichg('field',1)
	s.digichg('hfquick',do_quick)
	s.digichg('quick',do_quick)
	#Can't leave quick ON for more than quickmax
	quickmax=100.
	s.wait(quickmax)
	s.digichg('hfquick',0)
	s.digichg('quick',0)
	s.wait(-quickmax)
	#
	s.wait(FB.switchdelay+FB.rampdt)
	s.digichg('quick',0)
	s.wait(-FB.rampdt)
	s.wait(-FB.switchdelay - FB.switchondt - FB.feshbachdt - ss)


	#---At this point the time sequence is at ENDUVMOT
	#---Leave the sequence at the end of the UVMOT, but provide the amount
	#---of time that it needs to wait to go to ENDBFIELD
	toENDBFIELD = FB.rampdt + FB.switchdelay + FB.switchondt + FB.feshbachdt
	
	return s, toENDBFIELD
Пример #5
0
def  go_to_highfield(s):

	#Keep ODT on
	ODT = gen.bstr('ODT',report)
	if ODT == True:
		s.digichg('odtttl',1)
	s.wait(20.0)

	ss = float(report['SEQ']['analogstepsize'])

	# Cool and Compress MOT
	# ENDCNC is defined as the time up to release from the MOT
	motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

	# Load UVMOT from CNCMOT
	uvfppiezo, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvcooling.uvcoolRamps(motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

	# Set imaging values
	camera = 'ANDOR'
	motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)

	# Switch bfield to FESHBACH while UV cools in trap
	overlapdt    = float(report['ODT']['overlapdt'])
	rampdelay    = float(report['ODT']['rampdelay'])
	rampbf       = float(report['ODT']['rampbf'])
	bf           = float(report['ODT']['bf'])
	holdbf       = float(report['ODT']['holdbf'])
	switchdt     = float(report['FESHBACH']['switchdt'])
	offdelay     = float(report['FESHBACH']['offdelay'])
	quickdelay   = float(report['FESHBACH']['quickdelay'])
	switchdelay  = float(report['FESHBACH']['switchdelay'])
	bias         = float(report['FESHBACH']['bias'])
	biasrampdt   = float(report['FESHBACH']['rampdt'])

	bfield.chop(ENDUVMOT-overlapdt)
	bfield.appendhold(rampdelay)
	bfield.linear( bf, rampbf)
	bfield.appendhold(holdbf)
	bfield.linear(0.0, 0.0)
	ENDBFIELD=(rampdelay+rampbf+holdbf-overlapdt)
	bfield.appendhold(-ENDBFIELD+offdelay+2*switchdt+quickdelay+switchdelay)
	bfield.linear(bias,biasrampdt)

	#Add waveforms to sequence
	s.analogwfm_add(ss,[ motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow])
	
	#wait normally rounds down using floor, here the duration is changed before so that
	#the wait is rounded up
	ENDUVMOT = ss*math.ceil(ENDUVMOT/ss)
	
	#insert QUICK pulse  for fast ramping of the field gradient
	s.wait(-10.0)
	quickval = 1 if gen.bstr('CNC',report) == True else 0
	s.digichg('quick',quickval)	
	s.wait(10.0)

	#insert UV pulse
	uvtime  = float(report['UV']['uvtime'])
	s.wait(ENDCNC)
	s.digichg('quick',0)
	s.wait(uvtime)
	s.digichg('uvaom1',1)
	s.wait(-uvtime - ENDCNC)
	
	#Go to MOT release time
	s.wait(ENDUVMOT)
	s.digichg('quick',0)

	#Leave UVMOT on for state transfer
	fstatedt  = float(report['ODT']['fstatedt'])
	s.wait(fstatedt)
	s.digichg('uvaom1',0)
	s.wait(-fstatedt) 


	#RELEASE FROM MOT
	waitshutter=5.0
	s.wait(waitshutter)
	s.digichg('uvshutter',0)
	s.wait(-waitshutter)

	s.digichg('motswitch',0) 
	s.digichg('motshutter',1)
	s.digichg('field',0)

	#Insert ODT overlap with UVMOT and switch field to FESHBACH
	overlapdt = float(report['ODT']['overlapdt'])
	s.wait(-overlapdt)
	s.digichg('odtttl',1)
	s.digichg('odt7595',1)
	feshbachdt = rampdelay + rampbf + holdbf
	s.wait( feshbachdt )
	s.digichg('feshbach',1)
	s.wait(overlapdt - feshbachdt)

	s.wait(offdelay)
	s.wait(2*switchdt)
	s.wait(quickdelay)
	do_quick=1
	s.digichg('field',1)
	s.digichg('hfquick',do_quick)
	s.digichg('quick',do_quick)
	#Can't leave quick ON for more than quickmax
	quickmax=100.
	s.wait(quickmax)
	s.digichg('hfquick',0)
	s.digichg('quick',0)
	s.wait(-quickmax)
	s.wait(switchdelay+biasrampdt)
	s.digichg('quick',0)
	s.wait(-biasrampdt)
	s.wait(-switchdelay-quickdelay-2*switchdt-offdelay)

	#At this point the time sequence is at ENDUVMOT
	
	#This is the time until the end of the bfield ramp
	toENDBFIELD = biasrampdt + switchdelay + quickdelay + 2*switchdt + offdelay
	
	return s, toENDBFIELD
Пример #6
0
def go_to_highfield(s):

    #Keep ODT on
    ODT = gen.bstr('ODT', report)
    if ODT == True:
        s.digichg('odtttl', 1)
    s.wait(20.0)

    ss = float(report['SEQ']['analogstepsize'])

    # Cool and Compress MOT
    # ENDCNC is defined as the time up to release from the MOT
    motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

    # Load UVMOT from CNCMOT
    uvfppiezo, uvpow2, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvcooling_repump.uvcoolRamps_repump(
        motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

    # Set imaging values
    camera = 'ANDOR'
    motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(
        motpow, repdet, trapdet, reppow, trappow, camera)

    # Switch bfield to FESHBACH
    overlapdt = float(report['ODT']['overlapdt'])
    rampdelay = float(report['ODT']['rampdelay'])
    rampbf = float(report['ODT']['rampbf'])
    bf = float(report['ODT']['bf'])
    feshbachdt = float(report['ODT']['feshbachdt'])
    switchondt = float(report['FESHBACH']['switchondt'])
    switchdelay = float(report['FESHBACH']['switchdelay'])
    bias = float(report['FESHBACH']['bias'])
    biasrampdt = float(report['FESHBACH']['rampdt'])

    bfield.chop(ENDUVMOT - overlapdt, 1)
    bfield.appendhold(rampdelay)
    bfield.linear(bf, rampbf)
    bfield.extend(ENDUVMOT + feshbachdt)
    bfield.linear(0.0, 0.0)
    ENDBFIELD = feshbachdt
    bfield.appendhold(switchondt + switchdelay)
    bfield.linear(bias, biasrampdt)

    rampupdt = float(report['ODT']['rampupdt'])
    updt = float(report['ODT']['updt'])
    overshootdt = float(report['ODT']['overshootdt'])

    #~ odtpow0 = wfm.wave('odtpow', 0.0, ss)
    #~ odtpow0.extend(ENDUVMOT-overlapdt-updt-rampupdt)
    #~ odtpow0.odt_linear( 0.0 , f('ODT','odtpow0'), rampupdt)
    #~ odtpow0.appendhold( updt)
    #~ odtpow0.odt_linear(f('ODT','odtpow0'), f('ODT','odtpow'), overshootdt)

    odtpow0 = wfm.wave('odtpow', f('ODT', 'odtpow0'), ss)
    odtpow0.extend(ENDUVMOT - overlapdt)
    odtpow0.odt_linear(f('ODT', 'odtpow0'), f('ODT', 'odtpow'), overshootdt)

    EXTRA = max(
        overshootdt - (bfield.dt() - (ENDUVMOT - overlapdt - updt - rampupdt)),
        0.0)
    print "...EXTRA time to allow for ODT overshoot = %f" % EXTRA

    #Add waveforms to sequence
    s.analogwfm_add(ss, [
        motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow,
        uvpow2, odtpow0
    ])

    #wait normally rounds down using floor, here the duration is changed before so that
    #the wait is rounded up
    ENDUVMOT = ss * math.ceil(ENDUVMOT / ss)

    #insert QUICK pulse  for fast ramping of the field gradient
    s.wait(-10.0)
    quickval = 1 if gen.bstr('CNC', report) == True else 0
    s.digichg('quick', quickval)
    s.wait(10.0)

    #insert UV pulse
    uvtime = float(report['UV']['uvtime'])
    s.wait(ENDCNC)
    s.digichg('quick', 0)
    s.wait(uvtime)
    #Shut down the UVAOM's and open the shutter
    s.wait(-50.0)
    s.digichg('uvaom1', 0)
    s.digichg('uvaom2', 0)
    s.digichg('uvshutter', 1)
    s.wait(50.0)
    #Turn on UVAOM
    s.digichg('uvaom1', 1)
    s.wait(-uvtime)

    #Turn on UVAOM2
    uvreptime = float(report['UV']['uvreptime'])
    s.wait(uvreptime)
    s.digichg('uvaom2', 1)

    #Tur off RED light
    s.digichg('motswitch', 0)
    s.digichg('motshutter', 1)
    s.wait(-uvreptime)

    s.wait(-ENDCNC)

    #Go to MOT release time and set QUICK back to low
    s.wait(ENDUVMOT)
    s.digichg('quick', 0)

    #Turn OFF UVAOM2 for optical pumping
    pumptime = float(report['UV']['pumptime'])
    uvhold = float(report['UV']['uvhold'])
    s.wait(-pumptime)
    s.digichg('uvaom2', 0)
    s.wait(pumptime)

    #Leave UVMOT on for state transfer
    fstatedt = float(report['ODT']['fstatedt'])
    s.wait(fstatedt)
    s.digichg('uvaom1', 0)
    s.wait(-fstatedt)

    #Close UV shutter
    waitshutter = 5.0
    s.wait(waitshutter)
    s.digichg('uvshutter', 0)
    s.wait(-waitshutter)

    #Turn OFF MOT magnetic field
    s.digichg('field', 0)

    #Insert ODT overlap with UVMOT and switch field to FESHBACH
    overlapdt = float(report['ODT']['overlapdt'])
    servodt = float(report['ODT']['servodt'])
    s.wait(-overlapdt - servodt)
    s.digichg('odt7595', 1)
    s.wait(servodt)
    s.digichg('odtttl', 1)
    #feshbachdt = rampdelay + rampbf + holdbf
    s.wait(overlapdt)
    s.wait(feshbachdt)
    s.digichg('feshbach', 1)
    #s.wait(overlapdt - feshbachdt)
    #s.wait( -feshbachdt)

    #s.wait(offdelay)
    #s.wait(2*switchdt)
    #s.wait(quickdelay)
    s.wait(switchondt)
    do_quick = 1
    s.digichg('field', 1)
    s.digichg('hfquick', do_quick)
    s.digichg('quick', do_quick)
    #Can't leave quick ON for more than quickmax
    quickmax = 100.
    s.wait(quickmax)
    s.digichg('hfquick', 0)
    s.digichg('quick', 0)
    s.wait(-quickmax)
    s.wait(switchdelay + biasrampdt)
    s.digichg('quick', 0)
    s.wait(-biasrampdt)
    #s.wait(-switchdelay-quickdelay-2*switchdt-offdelay)
    s.wait(-switchdelay - switchondt - feshbachdt - ss)

    #At this point the time sequence is at ENDUVMOT

    #This is the time until the end of the bfield ramp
    #toENDBFIELD = biasrampdt + switchdelay + quickdelay + 2*switchdt + offdelay
    toENDBFIELD = biasrampdt + switchdelay + switchondt + feshbachdt

    return s, toENDBFIELD + EXTRA
Пример #7
0
def  go_to_highfield(s):

	#---Keep ODT on
	ODT = gen.bstr('ODT',report)
	if ODT == True:
		s.digichg('odtttl',1)
	s.wait(20.0)

	ss = float(report['SEQ']['analogstepsize'])

	#---Cool and Compress MOT
	#---ENDCNC is defined as the time up to release from the MOT
	motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

	#---Load UVMOT from CNCMOT
	uvfppiezo, uvpow2, uvpow, motpow, bfield, ENDUVMOT = uvmot.uvRamps(motpow, bfield, ENDCNC)

	repdet.extend(ENDUVMOT)
	trapdet.extend(ENDUVMOT)
	reppow.extend(ENDUVMOT)
	trappow.extend(ENDUVMOT)
	
	#---Make sure everything has the same length before setting imaging values
	#print motpow.dt(), repdet.dt(), trapdet.dt(), bfield.dt(), reppow.dt(), trappow.dt(), uvfppiezo.dt()
	#print motpow.N(), repdet.N(), trapdet.N(), bfield.N(), reppow.N(), trappow.N(), uvfppiezo.N()
	#--- Set imaging values
	camera = 'ANDOR'
	motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)

	#---Switch bfield to FESHBACH 
	overlapdt    = float(report['ODT']['overlapdt'])
	rampdelay    = float(report['FESHBACH']['rampdelay'])
	rampbf       = float(report['FESHBACH']['rampbf'])
	bf           = float(report['FESHBACH']['bf'])
	feshbachdt   = float(report['FESHBACH']['feshbachdt'])
	switchondt  = float(report['FESHBACH']['switchondt'])
	switchdelay  = float(report['FESHBACH']['switchdelay'])
	bias         = float(report['FESHBACH']['bias'])
	biasrampdt   = float(report['FESHBACH']['rampdt'])
	
	bfield.chop(ENDUVMOT-overlapdt,1)
	bfield.appendhold(rampdelay)
	bfield.linear( bf, rampbf)
	bfield.extend(ENDUVMOT+feshbachdt)
	bfield.linear(0.0, 0.0)
	ENDBFIELD = feshbachdt
	bfield.appendhold( switchondt + switchdelay)
	bfield.linear(bias,biasrampdt)
	
	
	#---Ramp up ODT
	odtpow0 = odt.odt_wave('odtpow', f('ODT','odtpow0'), ss)
	odtpow0.extend(ENDUVMOT)
	
	#---Add waveforms to sequence
	s.analogwfm_add(ss,[ motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow, uvpow2,odtpow0])
	
	#wait normally rounds down using floor, here the duration is changed before so that
	#the wait is rounded up
	ENDUVMOT = ss*math.ceil(ENDUVMOT/ss)
	
	#---Insert QUICK pulse for fast ramping of the field gradient during CNC
	s.wait(-10.0)
	quickval = 1 if gen.bstr('CNC',report) == True else 0
	s.digichg('quick',quickval)	
	s.wait(10.0)
	s.wait(ENDCNC)
	s.digichg('quick',0)

	#---Go back in time, shut down the UVAOM's and open the shutter
	s.wait(-50.0)
	s.digichg('uvaom1',0)
	s.digichg('uvaom2',0)
	s.digichg('uvshutter',1)
	s.wait(50.0)
	
	#---Turn OFF red light
	delay_red = float(report['UV']['delay_red'])
	s.wait(delay_red)
	s.digichg('motswitch',0) 
	s.digichg('motshutter',1)
	s.wait(-delay_red)
	
	#---Turn ON UVAOM's
	delay_uv = float(report['UV']['delay_uv'])
	s.wait(delay_uv)
	s.digichg('uvaom1',1)
	s.digichg('uvaom2',1)
	s.wait(-delay_uv)
	
	s.wait(-ENDCNC)
	
	#---Go to MOT release time and set QUICK back to low
	s.wait(ENDUVMOT)
	s.digichg('quick',0)

	#---Turn OFF UVAOM2 for optical pumping
	pumptime = float(report['UV']['pumptime'])
	s.wait(-pumptime)
	s.digichg('uvaom2',0)
	s.wait(pumptime)
	#---Turn OFF UVAOM
	s.digichg('uvaom1',0)
	#---Close UV shutter
	waitshutter=5.0
	s.wait(waitshutter)
	s.digichg('uvshutter',0)
	s.wait(-waitshutter)
	
	#---Turn OFF MOT magnetic field
	s.digichg('field',0)

	#---Insert ODT overlap with UVMOT and switch field to FESHBACH
	overlapdt = float(report['ODT']['overlapdt'])
	servodt = float(report['ODT']['servodt'])
	#
	s.wait(-overlapdt-servodt)
	s.digichg('odt7595',1)
	s.wait(servodt)
	s.digichg('odtttl',1)
	s.wait(overlapdt)
	s.wait( feshbachdt )
	s.digichg('feshbach',1)
	s.wait(switchondt)
	do_quick=1
	s.digichg('field',1)
	s.digichg('hfquick',do_quick)
	s.digichg('quick',do_quick)
	#Can't leave quick ON for more than quickmax
	quickmax=100.
	s.wait(quickmax)
	s.digichg('hfquick',0)
	s.digichg('quick',0)
	s.wait(-quickmax)
	#
	s.wait(switchdelay+biasrampdt)
	s.digichg('quick',0)
	s.wait(-biasrampdt)
	s.wait(-switchdelay - switchondt - feshbachdt - ss)

	#---At this point the time sequence is at ENDUVMOT
	
	#This is the time until the end of the bfield ramp
	toENDBFIELD = biasrampdt + switchdelay + switchondt + feshbachdt
	
	return s, toENDBFIELD
Пример #8
0
def  go_to_highfield(s):

	#---Keep ODT on
	odton = gen.bstr('ODT',report)
	if odton == True:
		s.digichg('odtttl',1)
	s.wait(20.0)

	ss = SEQ.analogstepsize

	#---Cool and Compress MOT
	#---ENDCNC is defined as the time up to release from the MOT
	motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

	#---Load UVMOT from CNCMOT
	uvpow2, uvpow, motpow, bfield, ENDUVMOT = uvmot.uvRamps(motpow, bfield, ENDCNC)

	repdet.extend(ENDUVMOT)
	trapdet.extend(ENDUVMOT)
	reppow.extend(ENDUVMOT)
	trappow.extend(ENDUVMOT)
	
	#---Make sure everything has the same length before setting imaging values
	#--- Set imaging values
	camera = 'ANDOR'
	motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(motpow, repdet, trapdet, reppow, trappow, camera)


	#---Switch bfield to FESHBACH 
	bfield.appendhold(FB.rampdelay)
	bfield.linear( FB.bf, FB.rampbf)
	bfield.appendhold( FB.feshbachdt)
	bfield.linear(0.0, 0.0)
	bfield.appendhold( FB.switchondt + FB.switchdelay + UV.extradt)
	bfield.linear(FB.bias,FB.rampdt)


	#---Set the starting voltage for the ODT
	odtpow0 = odt.odt_wave('odtpow', ODT.odtpow0, ss)
	odtpow0.extend(ENDUVMOT)
	
	#---Change shunt value from motV to hfV before going to highfield
	shunt = wfm.wave('gradientfield', SHUNT.motV, ss, volt = SHUNT.motV)
	shunt.extend(ENDUVMOT + FB.rampdelay + FB.rampbf + FB.feshbachdt + UV.extradt) 
	#shunt.linear(SHUNT.hfV, 0.0,volt =SHUNT.hfV)	
	shunt.linear(SHUNT.hfV, 0.0,volt =0.0)	
	
	
	wfms = [ motpow, repdet, trapdet, bfield, reppow, trappow, uvpow, uvpow2,odtpow0, shunt]

	
	#---Add waveforms to sequence
	s.analogwfm_add(ss,wfms)
	
		
	#wait normally rounds down using floor, here the duration is changed before so that
	#the wait is rounded up
	ENDUVMOT = ss*math.ceil(ENDUVMOT/ss)
	
	#---Insert QUICK pulse for fast ramping of the field gradient during CNC
	s.wait(-10.0)
	quickval = 1 if gen.bstr('CNC',report) == True else 0
	s.digichg('quick',quickval)	
	s.wait(10.0)
	s.wait(ENDCNC)
	s.digichg('quick',0)
	
	#---Go back in time, shut down the UVAOM's 
	#---UVAOM's were on to keep them warm
	s.wait(UV.clearaoms)
	s.digichg('uvaom1',0)
	s.digichg('uvaom2',0)
	s.wait(-UV.clearaoms)
	
	#---Insert ODT overlap 
	s.wait(-ODT.overlapdt-ODT.servodt)
	s.digichg('odt7595',1)
	s.wait(ODT.servodt)
	s.digichg('odtttl',1)
	s.wait(ODT.overlapdt)
	
	#---Turn OFF red light
	s.wait(UV.delay_red)
	s.digichg('motswitch',0) 
	s.digichg('motshutter',1)
	s.wait(-UV.delay_red)
	
	#---Turn ON UVAOM's
	s.wait(UV.delay_uv)
        #---make sure to open the shutter:
        s.wait(UV.openshutter)
	s.digichg('uvshutter',1)
        s.wait(-UV.openshutter)

	s.digichg('uvaom1',1)
	s.digichg('uvaom2',1)
	s.wait(-UV.delay_uv)
	

	#---Go to MOT release time
	s.wait(-ENDCNC)
	s.wait(ENDUVMOT)
	

	#---Go to end of field rampdown and set QUICK back to low
	s.wait(FB.rampdelay+FB.rampbf) 
	s.digichg('quick',0)
	

	#---Wait in the UVMOT and then do optical pumping
	s.wait(UV.extradt) 
	s.wait(-UV.pumptime)
	s.digichg('uvaom2',0)
	s.wait(UV.pumptime)
	#---Turn OFF UVAOM
	s.digichg('uvaom1',0)
	#---Close UV shutter
	waitshutter=UV.closeshutter
	s.wait(waitshutter)
	s.digichg('uvshutter',0)
	s.wait(-waitshutter)

	#---Turn OFF MOT magnetic field and switch it to FESHBACH
	s.digichg('field',0)
	s.wait( FB.feshbachdt )
	s.digichg('feshbach',1)
	s.wait(FB.switchondt)
	do_quick=1
	s.digichg('field',1)
	s.digichg('hfquick',do_quick)
	s.digichg('quick',do_quick)
	#Can't leave quick ON for more than quickmax
	quickmax=100.
	s.wait(quickmax)
	s.digichg('hfquick',0)
	s.digichg('quick',0)
	s.wait(-quickmax)
	#
	s.wait(FB.switchdelay+FB.rampdt)
	s.digichg('quick',0)
	s.wait(-FB.rampdt)
	s.wait(-FB.switchdelay - FB.switchondt - FB.feshbachdt - ss)


	#---At this point the time sequence is at ENDUVMOT
	#---Leave the sequence at the end of the UVMOT, but provide the amount
	#---of time that it needs to wait to go to ENDBFIELD
	toENDBFIELD = FB.rampdt + FB.switchdelay + FB.switchondt + FB.feshbachdt
	
	return s, toENDBFIELD
Пример #9
0
def go_to_highfield(s):

    #Keep ODT on
    ODT = gen.bstr('ODT', report)
    if ODT == True:
        s.digichg('odtttl', 1)
    s.wait(20.0)

    ss = float(report['SEQ']['analogstepsize'])

    # Cool and Compress MOT
    # ENDCNC is defined as the time up to release from the MOT
    motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC = cnc.cncRamps()

    # Load UVMOT from CNCMOT
    uvfppiezo, uvpow, motpow, repdet, trapdet, reppow, trappow, bfield, ENDUVMOT = uvcooling.uvcoolRamps(
        motpow, repdet, trapdet, reppow, trappow, bfield, ENDCNC)

    # Set imaging values
    camera = 'ANDOR'
    motpow, repdet, trapdet, reppow, trappow, maxDT = cnc.imagingRamps_nobfield(
        motpow, repdet, trapdet, reppow, trappow, camera)

    # Switch bfield to FESHBACH while UV cools in trap
    overlapdt = float(report['ODT']['overlapdt'])
    rampdelay = float(report['ODT']['rampdelay'])
    rampbf = float(report['ODT']['rampbf'])
    bf = float(report['ODT']['bf'])
    holdbf = float(report['ODT']['holdbf'])
    switchdt = float(report['FESHBACH']['switchdt'])
    offdelay = float(report['FESHBACH']['offdelay'])
    quickdelay = float(report['FESHBACH']['quickdelay'])
    switchdelay = float(report['FESHBACH']['switchdelay'])
    bias = float(report['FESHBACH']['bias'])
    biasrampdt = float(report['FESHBACH']['rampdt'])

    bfield.chop(ENDUVMOT - overlapdt)
    bfield.appendhold(rampdelay)
    bfield.linear(bf, rampbf)
    bfield.appendhold(holdbf)
    bfield.linear(0.0, 0.0)
    ENDBFIELD = (rampdelay + rampbf + holdbf - overlapdt)
    bfield.appendhold(-ENDBFIELD + offdelay + 2 * switchdt + quickdelay +
                      switchdelay)
    bfield.linear(bias, biasrampdt)

    #Add waveforms to sequence
    s.analogwfm_add(
        ss,
        [motpow, repdet, trapdet, bfield, reppow, trappow, uvfppiezo, uvpow])

    #wait normally rounds down using floor, here the duration is changed before so that
    #the wait is rounded up
    ENDUVMOT = ss * math.ceil(ENDUVMOT / ss)

    #insert QUICK pulse  for fast ramping of the field gradient
    s.wait(-10.0)
    quickval = 1 if gen.bstr('CNC', report) == True else 0
    s.digichg('quick', quickval)
    s.wait(10.0)

    #insert UV pulse
    uvtime = float(report['UV']['uvtime'])
    s.wait(ENDCNC)
    s.digichg('quick', 0)
    s.wait(uvtime)
    s.digichg('uvaom1', 1)
    s.wait(-uvtime - ENDCNC)

    #Go to MOT release time
    s.wait(ENDUVMOT)
    s.digichg('quick', 0)

    #Leave UVMOT on for state transfer
    fstatedt = float(report['ODT']['fstatedt'])
    s.wait(fstatedt)
    s.digichg('uvaom1', 0)
    s.wait(-fstatedt)

    #RELEASE FROM MOT
    waitshutter = 5.0
    s.wait(waitshutter)
    s.digichg('uvshutter', 0)
    s.wait(-waitshutter)

    s.digichg('motswitch', 0)
    s.digichg('motshutter', 1)
    s.digichg('field', 0)

    #Insert ODT overlap with UVMOT and switch field to FESHBACH
    overlapdt = float(report['ODT']['overlapdt'])
    s.wait(-overlapdt)
    s.digichg('odtttl', 1)
    s.digichg('odt7595', 1)
    feshbachdt = rampdelay + rampbf + holdbf
    s.wait(feshbachdt)
    s.digichg('feshbach', 1)
    s.wait(overlapdt - feshbachdt)

    s.wait(offdelay)
    s.wait(2 * switchdt)
    s.wait(quickdelay)
    do_quick = 1
    s.digichg('field', 1)
    s.digichg('hfquick', do_quick)
    s.digichg('quick', do_quick)
    #Can't leave quick ON for more than quickmax
    quickmax = 100.
    s.wait(quickmax)
    s.digichg('hfquick', 0)
    s.digichg('quick', 0)
    s.wait(-quickmax)
    s.wait(switchdelay + biasrampdt)
    s.digichg('quick', 0)
    s.wait(-biasrampdt)
    s.wait(-switchdelay - quickdelay - 2 * switchdt - offdelay)

    #At this point the time sequence is at ENDUVMOT

    #This is the time until the end of the bfield ramp
    toENDBFIELD = biasrampdt + switchdelay + quickdelay + 2 * switchdt + offdelay

    return s, toENDBFIELD