diff --git a/iexcode/staff_cheatsheet.md b/iexcode/staff_cheatsheet.md
new file mode 100644
index 0000000000000000000000000000000000000000..e7b988e9a3a4595558028203147b4cf0842a3a77
--- /dev/null
+++ b/iexcode/staff_cheatsheet.md
@@ -0,0 +1,488 @@
+# **IEX python - cheatsheet**
+list iexcode function by file 
+<br>
+
+---
+<br>
+
+# **Instruments**
+
+## **ARPES**
+ARPES sepcific functions
+
+    tey,ca15 = ARPES_init('user_name')
+
+## **AD_utilites**
+functions for common area detector operations
+
+## **bakeout**
+functions for monitoring a bakeout
+
+## **cfg**
+config file which holds global variable BL and MPA
+
+    
+    import iexcode.instruments.cfg as iex
+
+## **converstions_constants**
+    h                               #Planck's constant (eV/s)
+    c                               #speed of light (m/s)
+    -------------------------------------------------------------
+    deg2rad(deg)                    #converts degree to radian
+    rad2deg(radian)                 #converts radian to degrees
+    -------------------------------------------------------------
+    eV2Lambda(eV)                   #converts eV to wavelength in Angstroms
+    Lambda2eV(Angstroms)            #converts Angstroms to eV
+    -------------------------------------------------------------
+    hv2kz(lattice,V0,hv)            #converts photon energy to kz       
+    kz2hv(lattice,V0,n)             #converst kz to photon energy
+    kx2deg(kx,hv)                   #converts in-plane momentum to degrees
+    deg2kx(th,hv)                   #conversts degrees to in-plane momentum
+
+## **diagnostics**
+beamline diagnostics, positions and current amplifiers
+To Do: add functions to enable scanning
+
+    diagnostic_name_list()          #prints the name of all the diagnostics_all_in/out()            #move all diagnostics to in/out position
+    diagnostic(name,in_out)         #moves the specified 
+    diagnostic_read(name)           #reads the current amplifier for a given diagnostic
+    -------------------------------------------------------------
+    mesh_W(In_Out)                  #moves W-mesh in the A-hutch in/out
+    diode_c(In_Out)                 #moves diode in c-branch in/out
+    diode_c_read()                  #reads the current amplifier for the c-branch diode
+    diode_d(In_Out)                 #moves diode in c-branch in/out; located just before the kappa endstation
+    mesh_d(In_Out)                  #moves mesh in d-branch in/out; used for normalization
+    mesh_d_read()                   #reads the current amplifier for the d-branch mesh
+-------------------------------------------------------------
+    diagnostics_preset_list()       #returns the dictionary with all preset positions
+    diagnostics_presets_go(diag_name,preset_name)   #goes to preset value 
+    _diagnostics_sp_write(diag_name,preset_name,val)
+
+## **electron_analyzer**
+Scienta functions
+
+    folders_EA(userPath             #sets the folder for spectra saving (called by folders_ARPES)  
+    -------------------------------------------------------------
+    EA_ioc_init()                   #initializes the ioc after a reboot (eventually goes in AutoSave)
+    -------------------------------------------------------------
+    EA.get()                        #get current EA setting
+    EA.put(KE,PE)                   #change EA setting
+    EA.off()                        #turns off EA high voltagae
+    -------------------------------------------------------------
+    SES_motor_get()                 #gets current SES slit number
+    SES_motor_set(slit_number)      #change SES slit
+    -------------------------------------------------------------
+    scanEA_reset()                  #clears scanRecord after abort
+    -------------------------------------------------------------
+    scanEA(EAlist)                          #takes spectra
+    scanFM(EAlist,thList,RoughPositions)    #takes Fermi map
+    scanEA_y(EAlist,y_start,y_stop,y_step)  #takes spectra along y
+    scanEA_z(EAlist,z_start,z_stop,z_step)  #takes spectra along z
+    scanEA_map_sample(EAlist,y_list,z_list) #takes spectra in 2D y,z scan
+    -------------------------------------------------------------
+    EA_ioc_init()                           #initializes the ioc after a reboot (eventually goes in AutoSave)
+
+
+## **encoder**
+all beamline absolute encoders
+
+    encoder_name_list()             #lists names in encoder dictionary
+    encoder_sync(name)              #syncs all the encoders associated with name
+    encoders_reset_zero(name)       #resets the center for the current position
+
+## **files_and_folder**
+general functions for dealing with files and directories
+
+    path_dserv(folder,run,user_name)                        #path to user data directory on the dserve
+    check_run()                                             #returns the current run based on todays date
+    folder_ftp(folder,run,user_name)                        #creates the folders on the ftp server, kip
+    make_user_folders(run,folder,user_name,endstation_name) #creates all the appropriate user folders
+    folder_mdarun,folder,user_name,file_prefix,ioc)         #creates/set the user folder for the scanRecord
+    folder_SPEC(run,folder,user_name)                       #creat3s spec folder in 29iduser account
+
+## **FMB_mirrors**
+functions for M0,M1,M3R
+To Do: M0M1 table moves to dictionary with csv file
+
+    FMB_mirror_get(mirror_num)                      #get the current position of all axes for a given mirror
+    FMB_mirror_move(mirror_num,axis)                #moves the specified axis ('Tx','Ty','Tz','Rx','Ry','Rz') for the given mirror
+    FMB_mirror_move_all(mirror_num,position_list)   #moves all the axes to the positions specified in position_list
+    FMB_mirror_tweak(mirror_num,axis)               #relative moves
+    FMB_mirror_scan(mirror_num,start,stop,step)     #scan a mirror axis
+    M0M1_Table                                      #reads the dictionary file to get the previous mirror positions
+    M0M1_SP                                         #writes the values form M0M1_Table to the set points (still need to push move)
+
+## **hxp_mirrors**
+Newport hexapods M3A/M4A and M4R
+
+    hxp_sync(mirror_name)                   #syncs the motor setpoint and readback values 
+    hxp_get(mirror_name)                    #gets a mirror position
+    hxp_get_all()                           #gets all the mirror positions
+
+## **IEX_camera**
+Cameras to enable/disable when switching between branches
+
+    cam_pv_dictionary()
+    _enable_endstation_cameras(unused_off=True)
+
+## **IEX_BL_config**
+used to access current beamline configuration, based on instance initialization not pv
+
+    Beamline_Config                                 #class to carry all configuration info gets stored in BL
+    BLconfig_endstation_name()                      #gets or sets iex.BL.endstation_name
+    BLconfig_folder()                               #gets or sets iex.BL.folder 
+    BLconfig_branch()                               #gets or sets iex.BL.branch 
+    BLconfig_xrays()                                #gets or sets iex.BL.xrays (True/False) 
+    BLconfig_mode()                                 #gets or sets iex.BL.mode ('user'/'staff')
+    BLconfig_get_set(endstation_get)                #sets iex.BL.endstation_get
+    BLconfig_safe_state_set(endstation_safe_state)  #sets iex.BL.safe_state
+    -------------------------------------------------------------
+    get_all()                                       #gets relavent pv values
+
+## **IEX_VPU: undulator functions**
+insertion device functions
+
+    ID_wait_for_permission()      #waits for security access 
+    -------------------------------------------------------------
+    ID_get_all()                  #gets ID_mode, ID_QP_ratio, ID_sp, ID_rbv
+    ID_energy_range()             #return max/min for a given mode
+    ID_ready()                    #looks at the two busy records
+    ID_off/on()                   #turns off/on the ID 
+    ID_power_status()             #returns off/on
+    ID_start(ID_mode,QP_ratio)    #turns on the ID in a given mode
+    ID_switch_mode(ID_mode)       #changes the ID mode
+    ID_get/set()                  #gets rbv / sets val in keV
+    ID_get/set_eV()               #gets rbv / sets val in eV, uses keV pvs, just does math
+    ID_energy_set(val)            #set calibrated energy in keV
+    ID_energy_set_eV(val)         #set calibrated energy in keV, just does math
+    ID_get_rbv/_eV()              #get the read back value in keV/eV (same as ID_get)
+    ID_get_sp/_eV()               #get the read back value in keV/eV
+    -------------------------------------------------------------
+    ID_calc_eV(mono_grating,ID_mode,hv_eV,QP_ratio) #calculate the set point for maximum flux
+
+
+## **kappa_angle_calcs**
+
+    fourc2kappa(theta,chi,phi)         # converts between four-circle angles and kappa angles
+    kappa2fourc(kth,kappa,kphi)        # converts between kappa dn four-circle angles
+
+## **kappa_det**
+defines kappa tth detector class and other functions
+
+    Kappa_Detector(kappa_Motors)       #for detset etc in kappa chamber
+        tthdet.set(det_name)           #sets the tth to a different detector
+        tthdet.get()                   #returns the current tth det_name
+        tth0_set()                     #resets the tth zero; d4 only
+
+
+## **kappa** 
+kappa specific functions
+
+    tey,d3,d4,mesh,tth_pv,tthdet = kappa_init('user_name)
+
+## **Keithley_current_amplifiers**
+Keithley specific functions
+
+    ca = Keithley(ca_crate, ca_num)   #class for Keithley current amplifiers
+        ca.get()                      #gets current values
+        ca.reset()                    #resets
+        ca.autoscale(On_Off)          #turn autoscaling on/off
+        ca.avg(num_averages)          #set averaging (1 or 0 is off)
+        ca_detector_list              #list of detectors which are used in a given branch ('b for beamline)
+        ca_average()                  #turns on averaging for all Keithleys in ca_list
+        ca_reset_all()                #resets all Keithleys in all branches
+
+
+## **Logfile** 
+functions for writing logfile.txt, gets set by IEX_BL_config
+
+    log_print(comment)      #print a comment in the logfile
+    log_update()            #updates the logfile with the current info (used if script is aborted)
+    log_name_set(new_name)  #change name of logfile
+    log_init(endstation_name,user_name,log_dictionary) #sets up logging
+
+## **m3r**
+functions for dealing with m3r
+To Do - move m3r table to dictionary
+
+    m3r_tweak_pitch(tweak_value)      #tweaks the pitch of m3r
+    m3r_table()                       #go to the default position specified branch
+    m3r_branch()                      #returns the branch based on mirror position
+    m3r_switch_branch()               #moves the mirror to the default position for a given branch, does not close the shutter
+    m3r_centroid()                    #returns the centroid position for m3r
+    m3r_align  ()                     #aligns the m3r
+
+## **Motors** 
+motor class and common name functions
+
+    Motor                       #class definition get set in Beamline_Config
+    mvx(val)                    #moves motor x
+    dmvx(val)                   #relative move of x 
+    scanx(start,stop,step)      #scan of x motor
+    dscanx (start,stop,step)    #relative scan of x motor
+    ...
+
+## **resolution**
+
+    resolution()            #gives the resolution for the current settings
+
+## **scalers**
+
+    scaler_cts()            #sets the scaler counter for the current endstation
+
+## **scanRecord**
+functions and class for handling the scanRecord
+
+    saveData_get_all()  #returns dictions of fileSystem,subDir,scanNumber,baseName
+    mda_filepath()      #gets the full filepath from the current mda setting
+    mda_prefix()        #get the prefix from the current mda setting
+    mda_user_name()     #gets the user name from the current mda setting
+    mda_run_cycle()     #gets the run cycle from the current mda setting
+    mda_ioc()           #returns the ioc
+    mda_reset()         #resets the scanRecord base on init parameters
+
+
+    mda_fileNum()       #return next fileNum
+    last_mda()          #retruns the filenum for the last saved scan
+    -------------------------------------------------------------
+    ScanRecord #class for handling scanRecord_user
+    -------------------------------------------------------------
+    scan_fillin(VAL,RBV,start,stop,steps)   #fills in scanRecord linear mode
+    scan_fillin_table(VAL,RBV,my_table)     #fills in scanRecord table mode
+    scan_go()                               #starts a scan
+    -------------------------------------------------------------
+    scan_after_table_reset()                #sets back to linear and clears positioners
+    -------------------------------------------------------------
+    scan_positioners_clear()                #clears the positioners
+    scan_positioner_after_set()             #procs the after scan sequence
+    scan_positioner_settling_time_set()     #sets the settling time
+    scan_triggers_set()                     #sets the scan triggers
+    scan_triggers_clear()                   #clears the triggers
+    scan_detectors_set()                    #adds a detector
+    -------------------------------------------------------------
+    scan_empty()                    #scan with no positioners
+    scan_time(duration_min)         #scan with positioner readback as time and detector settling as minutes
+    -------------------------------------------------------------
+    mda_detector_dictionary()       #reads,sets or updates default detector dictionary
+    mda_trigger_dictionaryy()       #reads,sets or updates default trigger_dictionary
+    mda_before_scan_pv()            #reads,sets before_scan_pv
+    mda_after_scan_pv()             #reads,sets after_scan_pv
+    mda_snake_set()                 #reads,set snake_set function
+
+
+## **Scienta**
+base functions for taking spectra, called by electron_analyzer
+
+## **shutters**
+main shutter and branch shutter functions
+
+    shutter_check()         #checks and then opens main and branch shutters
+    main_shutter_open()     #checks status then opens if not open
+    main_shutter_close()    #checks status then closes if not closed
+    main_shutter_status()   #returns open=True/False
+    branch_shutter_open()   #checks status then opens iex.BL.mda.branch shuttter if not open
+    branch_shutter_close()  #checks status then closes iex.BL.mda.branch shuttter  if not closed
+    branch_shutter_status() #returns open=True/False
+
+## **slits**
+beamline slits and aperatures
+
+    slit_name_list()                                #list all slits/apertures
+    slits_synch(slit_name)                          #syncs the motor position with the slit table for a given slit
+    slits_synch_all()                               #syncs all slits
+    slits_get_all()                                 #gets current values
+    slits_set(slit_name,(Hsize,Vsize),(Hcenter,Vcenter))                   #sets the slit/aperature to the specified size and position
+    slits_get(slit_name)                             #gets the slit/aperature size and position
+    slits_set_size(slit_name,(Hsize,Vsize))          #sets the slit/aperature to the specified size
+    slits_set_center(slit_name,(Hcenter,Vcenter))  
+    slits_scan_size(slit_name,direction,start,stop,step)
+    slits_scan_center(slits_scan_center(slit_name,direction,start,stop,step)
+    slit1A_scribe_marks()                           #moves the slits so that the scribe marks should align
+    slit1A_get()
+    slit1A_set(H_size,V_size)
+    slit2B_get()
+    slit2B_set(H_size,V_size)
+    slit2B_encoders_reset(Hcenter,Vcenter)         #resets the encords to be zero at the specified position
+    slit3C_get()
+    slit3C_set(size)
+    slit3D_get()
+    slit3D_set(V_size,center=None)
+    slit3D_encoders_reset(Vcenter)
+    exit_slit_get()
+    exit_slit_set(branch, size)                     #uses iex.BL.branch to set correct exit slit size
+
+## **SRS_current_amplifiers**
+SRS specific functions
+
+    d=SRS                   #class for SRS current amplifiers
+    d.get()                 #read the current values
+    d.set_all()             #updates pv
+    d.setgain(gain,unit)    #sets the gain
+    d.srs_print_all()       #prints current values
+
+
+## **staff** 
+detector dictionionary for staff 
+
+## **storage ring**
+wait_for_beam()                 #waits for storage ring current to be above ring_current
+
+## **userCals** 
+functions for filling in user calcs and string Sequences
+
+
+## **utilities** 
+general functions
+
+    dateandtime()                           #prints current date and time
+    today()                                 #returns a string with the date
+    print_warning_message(message)          #prints a warning message_string
+    wait_for_it(D,H,M)                      #waits for future time
+    input_timeout(question,t)               #used to break for an input
+    playsound()                             #plays audio file 
+    range_up/down(start,end,step)           #loop for noninteger counting (inclusive of last point)
+    take_closest_value(my_list,my_number)   #takes the closest value from a list
+    read_dict(filename)                     #reads text files in iexcode.IEX_dictionaries
+    make_table(start_stop_step_lists)       #makes a table array from a list of lists 
+
+## **valves** 
+control valves via epics
+
+branch_valve_close/open()
+valve_close/open()
+
+## **VLS_PGM** 
+mono functions
+To Do - we need to look at the parameters_history
+
+    mono_get_all()                      #returns the current mono settings from most common parameters
+    mono_get_all_extended()             #returns all the current mono settings
+    mono_grating_get()                  #gets the grating_name
+    mono_grating_set(grating_name)      #translate to the specified grating (mono only, no shutter)
+    mono_energy_get()                   #gets the current mono energy
+    mono_energy_set()                   #set the mono energy
+    mono_reset_pitch()                  #resets the motors after a following error
+    mono_stop()                         #stops the mono motors
+    mono_enable()                       #reenables the mono motors
+    mono_limits_reset()                 #sets the energy lower limit to 200
+    mono_cff_print()
+    mono_parameters_get()
+    mono_parameters_history_read()
+    mono_parameters_history_write()
+    mono_temperature_interlock()        #moving this to EPS
+    mono_scan_fillin/_table             #standard scanRecord fill in stuff
+    mono_scan_after()                   #standard scanRecord fill in stuff
+    mono_motor_move(motor,value)                
+    mono_motor_scan_fillin()            #standard scanRecord fill in stuff
+    mono_zero_order(angle)              #set mono mirror and grating angle the same
+    mono_angles_set(alpha,beta)         #moves the mirror,grating angles
+    mono_pink_beam()                    #sets the mono angles to 0, and translates grating and mirror to let pink beam pass
+    mono_grating_offset_set(offset_val) #sets the grating offset  
+    mono_mirror_offset_set(offset_val)  #sets the grating offset 
+    mono_grating_mirror_offsets_set(mirror_offset) #sets the offsets while maintaining parallelism
+    mono_grating_b2_set/get(b2_val)
+    mono_cff_set/get(val,tune_num)      #set the ccf tuning value
+    mono_arm_set/get(distance_mm)       #set the mono arm distance
+
+## **vortex**
+control of the vortex
+To Do - make a class, add stuff to the ioc instead of userCalcs
+
+    mca_energy()                #sets the energy window for the vortex
+    mca_scaler(time_sec)        #sets acquisition time for vortex and SRS to time_sec
+    mca_run(time_sec)
+    mca_off()                   #turns off the power to the vortex
+    mca_on()                    #turns on the power to the vortex
+    scanmca()                   #setup the scanRecord for triggering the vortex
+    mca_check_save()            #checks that the saving is setup
+
+## **xrays**
+
+
+    safe_state()                #puts the beamline in a safe state
+    -------------------------------------------------------------
+    xrays_get_all()             #gets current beamline settings
+    energy_get_all()            #gets current ID and mono settings
+    energy_get() / getE()       #return the photon energy
+    getLambda()                 ##return the photon energy in wavelength (A)
+    slit_get()                  #gets the exit slit size
+    -------------------------------------------------------------
+    polarization(ID_mode)       #sets the polarization but not the energy
+    grating(grating_name)       #changes grating ('HEG','MEG')
+    energy(hv)                  #sets the photon energy (ID, mono, apertures)
+    mvmono(hv)                  #moves the mono energy only
+    mvID(hv)                    #move the ID energy (non calibrated)
+    mvID_calibrated()           #moves the ID for max flux
+    qp(QP_ratio)                #set the QP ration (off = 100 )
+    apertures_set(c_2B=1)       #(c_2B <1 kills flux)
+    slit(size)                  #sets the exit slit
+    -------------------------------------------------------------
+    scanXAS(hv_list,ID_tracking=True) 
+    -------------------------------------------------------------
+    shutter_check()             #checks main and branch shutter
+    switch_branch(branch)       #moves m3R to default position for the branch; close/reopens shutters too
+    get_mirrors()               #gets all the FMB mirror positions
+    slit()                      #sets the exit_slit
+    slit_get()                  #gets the exit slit
+
+
+
+current2flux #calculates the flux based on the current reading in an AUX100 photodiode
+flux2current #calculates the current reading for a given flux for and AUX100 photodiode
+
+
+
+
+# **Macros**
+
+
+## **ARPES_macros** 
+
+    WorkFunction_Measure(PE,KE=409)
+    WorkFunction_Calc()
+    RoughPositions_Find(th_start,th_stop, th_step,**kwargs)
+
+## **ARPES_macros** 
+
+    BL_Shutdown()
+
+
+## **cam_macros** 
+used for taking images from epics
+
+    cam_snap(cam_num)               # takes a single image
+    cam_scan_setup(cam_num)         #configures the scanRecord trigger an image
+    cam_live(cam_nume)              #puts the camera back in live/free-run mode
+    cam_done(cam_num)               #turns off acquisition
+
+## **commissioning** 
+functions for aligning the beamline
+
+    check_flux_scan()               #puts the diode in and scans the mono
+    check_flux_read()               #puts the diode in in the branch defined my position of m3r
+    measures flux 
+    -------------------------------------------------------------
+    scan_wire(direction)
+    -------------------------------------------------------------
+    scan_narrow_slit(slit='2V',slit_parameters=[0.25,-2,2,0.5])
+    scan_mono_vs_slit(slit='2V',slit_parameters=[0.25,-2,2,0.5],energy_parameters=[470,530,2])
+    mono_MIR_GRT_find_offset(grt,slit_list)     #find MIR-GRT offset by scanning 0 order through exit slit
+    -------------------------------------------------------------exit_slit_vs_hv(hv)                         #Adjust slit size to keep reasonable count vs hv
+    scan_energy_along_grating(hv)               #Takes a Slit-2V map for a range of photon energies 
+    scan_mono_energy_drift(start,stop,step      #measure the energy shift vs photon energy
+    -------------------------------------------------------------
+    scan_pinhole_full()                         #pinhole scan of slit1A
+    -------------------------------------------------------------
+    iex_steering(h_position,v_position)         #calculates ID steering required
+    M0M1_steering(H2,V2)                        #calculates M1 adjustment
+
+    ID_steering_scans()
+    ID_steering_plots(scanNum,det_num,xrange=[-1,1])
+
+    wire_scans()
+
+    monoVslit_quick_scan(slit_name)
+    monoVslit_quick_plot(scanNum,detDiode,c,xrange=None)
+
+    -------------------------------------------------------------
+    check_slit1A(step=0.1)                      #realign slit 1A; obsolete
\ No newline at end of file