esrf

Beamline Instrument Software Support
SPEC Macro documentation: [ Macro Index | BCU Home ]

#%TITLE% mxmarccd.mac
#%NAME% 
#  Controls MAR CCD macro set for MX datacollection
#
#%CATEGORY% MX, Detection, Ccd
#
#%LOG%
#$Log: mxmarccd.mac,v $
#Revision 1.11  2012/06/26 17:35:43  guijarro
#fixed frame number
#
#Revision 1.10  2011/04/18 12:34:14  guijarro
#use 4 digits for image number
#
#Revision 1.9  2008/08/12 14:39:32  rey
#documentation changes
#
#Revision 1.8  2007/04/25 09:42:20  guijarro
#adapted for new /data/pyarch directory
#
#Revision 1.7  2006/06/16 07:12:10  guijarro
#thumbnails are jpegs (instead of tiffs)
#
#Revision 1.4  2006/06/09 13:27:25  guijarro
#turned mccdprep to a function
#
#Revision 1.3  2006/06/06 13:32:59  spruce
#forgot one COLLECT_PARS
#
#Revision 1.2  2006/06/06 13:31:33  spruce
#3/4 digit names, collect_pars changed for mxutils functions
#
#Revision 1.1  2005/11/08 17:38:15  beteva
#Initial revision
#
#%END%

def marccd_on '{
  cdef("ccdstart","mccdstart","_pxccd",0x20)
  cdef("ccdread","mccdread","_pxccd",0x20)
  cdef("ccdsave","marccdsave","_pxccd",0x20)
  cdef("ccdflush","marccdsave","_pxccd",0x20)  
  cdef("ccdfile","setccdfilename","_pxccd",0x20)
  cdef("ccdprep","mccdprep","_pxccd",0x20)
  cdef("ccdcleanup","mccdstop","_pxccd",0x20)
}'

def mccdprep(dark,start_angle,range,exp_time,number_of_passes,comment) '{
  # hard code to corrected only for now
  # call to take a background here if necessary
  dark=MXCOLLECT_PARS["TakeDarkFlag"]

  if (dark) {
    gui_logmsg("Taking a background")

    _mccd_state()
    if (MCCD_STATE == 2) {
      notice ("CCD Clearing before background image ...")
      mccdstop
    }
    mccdwait
    mccdstop_bkg
    mccdwait
  }
}'
  
def marccdsave '{
  #$*
  mccdsave_f(MCCD_FILENAME,MCCD_HEADER)

  if ( MXCOLLECT_PARS["display"] == "adxv" ) {
     mar_adxv_notify()
  }
  
  MXCOLLECT_PARS["TakeDarkFlag"]=0  
}'

def setccdfilename(cpars,frame) '{
  global MCCD_HEADER[] mccd_image_number
  mccd_image_number = frame      
  formatstring = sprintf("%s%d%s","%s/%s_%d_%0",4,"d.%s")
  
  MCCD_FILENAME =  sprintf(formatstring,cpars["fileinfo"]["directory"],\
                                            cpars["fileinfo"]["prefix"],\
                                            cpars["fileinfo"]["run_number"],\
                                            mccd_image_number,getMxDetectorFileSuffix())

  # But also set the MAR parameters for mccdsave
  MCCD_HEADER["xtal_to_detector"]=  getMxCurrentDistance()
  MCCD_HEADER["start_phi"]=         getMxCollectPars("current_phi")
  MCCD_HEADER["rotation_range"]=    cpars["range"]
  MCCD_HEADER["source_wavelength"]= getMxWavelength()
  MCCD_HEADER["exposure_time"]=     cpars["exposure_time"]
  MCCD_HEADER["beam_x"]=            getMxBeamCentreX()
  MCCD_HEADER["beam_y"]=            getMxBeamCentreY()
  MCCD_HEADER["dataset_comments"]=  cpars["comment"]
  MCCD_HEADER["file_comments"]=     cpars["comment"]

  # prepare thumbnails
  global MCCD_THUMBNAIL
  local dir thumbnail1_filename thumbnail2_filename
  
  thumbnail1_filename = sprintf(formatstring,cpars["archive_dir"],\
                                            cpars["fileinfo"]["prefix"],\
                                            cpars["fileinfo"]["run_number"],\
                                            mccd_image_number,"jpeg")
  thumbnail2_filename = sprintf(formatstring,cpars["archive_dir"],\
                                            cpars["fileinfo"]["prefix"],\
                                            cpars["fileinfo"]["run_number"],\
                                            mccd_image_number,"thumb.jpeg")

  printf("jpeg thumbnails should be written to : %s , %s\n", thumbnail1_filename, thumbnail2_filename)
  if ((MCCD_THUMBNAIL["enable1"]==1)||(MCCD_THUMBNAIL["enable2"]==1)) {
    unix(sprintf("mkdir -p \`dirname %s\`", thumbnail1_filename))
  }
 
  MCCD_THUMBNAIL["filename1"]=thumbnail1_filename
  MCCD_THUMBNAIL["filename2"]=thumbnail2_filename
  
  return(MCCD_FILENAME)
}'

# For using the adxv program with the mar software
# When images are saved 
def mar_adxv_notify() '{

   global MCCD_NOTIFY_FILE MCCD_NOTIFY_RUN

   MCCD_NOTIFY_FILE = MXCOLLECT_PARS["adxv_notify_file"]
   MCCD_NOTIFY_RUN += 1

   tmpfile = "/tmp/adxv_notify"

   fprintf(tmpfile,"%d %s", MCCD_NOTIFY_RUN, MCCD_FILENAME)
   close(tmpfile)
   unix(sprintf("cp %s %s;/bin/rm %s", tmpfile, MCCD_NOTIFY_FILE, tmpfile)) 
}'

#%MACROS%
#%IMACROS%
#%TOC%
#%AUTHOR% BLISS
#$Revision: 1.11 $$Date: 2012/06/26 17:35:43 $