diff --git a/script/Extreme.py b/script/Extreme.py new file mode 100644 index 0000000..fa073d9 --- /dev/null +++ b/script/Extreme.py @@ -0,0 +1,80 @@ +#Parameters + +B1 = -6.8 # starting mag. field in Amps +B2 = 6.8 # final mag. field in Amps +BSTEP = 0.2 # step size mag. field in Amps +ENERGIES = (707.90, 703.90) #list of energies in eV +MODE = 'CIRC +' #polarization (CIRC+ or CIRC-) +OFFSET1 = 0.0 #ID1 offset +OFFSET2 = 0.0 #ID2 offset +FIELD_PRECISION = 0.01 # in Amps +ENERGY_CHANGE_SLEEP = 0.0 # put the Enerrgy settling time if needed +FIELD_CHANGE_SLEEP = 0.0 # put the Field settling time if needed + +# List of scans. Each scan is defined as: (start,stop, step) +# to make a whole loop two scans are needed: [(B1, B2, BSTEP),(B2,B1,-BSTEP)] +# to make half of a loop one scan is needed: [(B1, B2, BSTEP),] <- don't forget to put comma before ] +RANGES = [(B1, B2, BSTEP),(B2,B1,-BSTEP)] + + +#Pre-actions +# Here polarization and offsets are set +if MODE is ["CIRC +", "CIRC -"]: + caput(OTF_MODE1,MODE) + caput(OTF_MODE2,MODE) +else: + raise Exception("Invalid polarization type: " + MODE) + +caput(OTF_OFF1,OFFSET1) #caput('X11MA-ID1:ENERGY-OFFS', OFFSET) +caput(OTF_OFF2,OFFSET2) + +wait_channel(OTF_DONE, 1, type = 'i') + + +# Generating a list of mag. fields (setpoints) needed for the loop +setpoints = [] +for r in RANGES: + setpoints = setpoints + frange(r[0], r[1], r[2], True) + +# plot properties +set_preference(Preference.ENABLED_PLOTS, ['field', 'tey_norm', 'trans_norm']) +set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1}) + +scan = ManualScan(['Mag. field', 'Energy'], ['TEY', 'I0', 'polarization', 'polAngle', 'RingCurrent', 'tey_norm'] , [min(setpoints), min(ENERGIES)], [max(setpoints), max(ENERGIES)], [len(setpoints)-1, len(ENERGIES)-1]) +scan.start() + +# Main loop +for B in setpoints: + print "Setting field = ", B + caput("X11MA-XMCD:I-SETraw",B) + + readback1 = caget("X11MA-XMCD:Ireadout") + time.sleep( FIELD_CHANGE_SLEEP ) # Settling time + + while abs(readback1-B) > FIELD_PRECISION: + readback1 = caget("X11MA-XMCD:Ireadout") + time.sleep(0.5) + + for E in ENERGIES: + print "Setting energy = ", E + caput(OTF_ESET, E) + wait_channel(OTF_DONE, 1, type = 'i') + readback2 = energy.read() + if abs(readback2 - E) > 0.1 : # TODO: Check accuracy + raise Exception('Energy could not be set to the value ' + str(E)) + sleep( ENERGY_CHANGE_SLEEP ) # Settling time + + detector1 = keithley_1a.read() #Keithley1 + detector2 = keithley_2a.read() #Keithley2 + #detector3 = keithley_3a.read() #Keithley3 + detector4 = caget(OTF_MODE1) #polarization in ID1 + detector5 = caget("X11MA-ID1:ALPHA-READ") # polAngle in ID1 + #detector6 = temperature.read() #temperature.get() + detector7 = caget("ARIDI-PCT:CURRENT") + #detector8 = signal_field_analog_x.read() # fieldAnalogX.get() + tey_norm = detector1/detector2 + #trans_norm = detector3/detector2 + scan.append ([B, E], [readback1, readback2], [detector1, detector2, detector3, detector4, detector5, detector7, tey_norm, trans_norm]) + +scan.end() +