Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
cam_macros.py 4.03 KiB

import time 
from os.path import join

from epics import caget,caput,PV

from iexcode.instruments.AD_utilities import *
from iexcode.instruments.IEX_cameras import cam_pv_dictionary
from iexcode.instruments.scanRecord import mda_fileNum

from iexplot.mda_quick_plot import plot_image


##############################################################################################################
##############################             Camera Snapping an image         ##############################
##############################################################################################################

def cam_snap(cam_num,savePlugin='TIFF1:',**kwargs):
    """
    takes a camera image and saves it in the user folder
    
    **kwargs:
    ExposureTime: changes both the exposure time and the acquire time for the snapshot
                    resets after acquisition
    FreeRun: True => disable setting and go back to continuous acquision 
                False => leave saving enabled and camera in single acquision

    """
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    AD_snap(ADplugin,**kwargs)

def cam_exposure_time(cam_num,ExposureTime):
    """
    sets the exposure and acquire times for camera
    """
    ADioc = cam_pv_dictionary()[cam_num]
    AD_exposure_time(ADioc,ExposureTime)

##############################################################################################################
##############################             Scanning with a camera           ##############################
##############################################################################################################
def cam_scan_setup(cam_num,savePlugin='TIFF1:',**kwargs):
    """
    sets up the BL scanRecord for scanning at every point
    **kwargs
        scanDIM = 1
        detTrig = 2; detectorTrigger number
        
        # AD_SaveFileSetup
        filepath=userpath (from BL_ioc scanRecord)+"/dtype"
         (e.g. filepath="/net/s29data/export/data_29id"+folder+"/"+run+"/"+userName+"/"+df)
        dtype = taken from ADplugin
        FileTemplate="%s%s_%4.4d."+dtype; format for filename first %s = filepath, second %s = prefix
        prefix = MDAscan+mda_fileNum' with nzeros=4

    """
    kwargs.setdefault('nzeros',4)
    kwargs.setdefault('prefix',"MDAscan"+str.zfill(str(mda_fileNum()),kwargs["nzeros"]))
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    ADplugin_ScanSetup(ADplugin,**kwargs)  

def cam_live(cam_num,savePlugin='TIFF1:'):
    """
    puts camera in no save and continuous
    a.k.a free run

    """
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    AD_FreeRun(ADplugin)

def cam_done(cam_num,**kwargs):
    """
    stops camera acquisition (not will stop after current acquisition)
    """
    ADioc = cam_pv_dictionary()[cam_num]
    AD_Done(ADioc,**kwargs)

def cam_save_setup(cam_num,savePlugin='TIFF1:',**kwargs):
    """
    sets up the save paths using iex.BL.mda.current_user
    **kwargs 
        prefix: beginning of filename
    """
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    AD_SaveFileSetup(ADplugin,**kwargs)

def cam_attributes_set(cam_num,filename,savePlugin='TIFF1:',**kwargs):
    """
    filename of attributes.xml

    **kwargs:
        path = '/home/beams/29IDUSER/Documents/User_Macros/Macros_29id/AD_Attributes/'
    """
    kwargs.setdefault('path','/home/beams/29IDUSER/Documents/User_Macros/Macros_29id/AD_Attributes/')
    filepath = join(kwargs['path'],filename)
    savePlugin='TIFF1:'
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    AD_attributes_set(ADplugin, filepath)

def cam_last_filepath(cam_num,savePlugin='TIFF1:',verbose=True):
    """
    returns the full path for the last saved image
    """
    ADplugin = cam_pv_dictionary()[cam_num]+savePlugin
    fpath = AD_last_filename(ADplugin)
    return fpath
    
def cam_plot_last(cam_num,savePlugin='TIFF1:',h=5,v=10,**kwargs):
    """
    plots last file from cam_num
    using iexcode.macros.quick_plot
    """
    fpath = cam_last_filepath(cam_num,verbose=2)
    plot_image(fpath,savePlugin,h,v,**kwargs)