====== Convert image file series ======
===== Introduction =====
Typical diamond anvil cell beamlines generate series of diffraction files in various formats, which are not the [[fileformat:edf|EDF]] format used in further processing. The tools here can be used to convert the files into the proper format.
Data collected at step scans have a starting ω position, an end ω position, and a step size δω. Diffraction are collected at each ω and save in files such as ''name-0000.tif'', ''name-0001.tif'', etc. For instance, if you collect data from -2° to +2° with a step size of 1.0°, starting from image 5, with a stem ''mydata'', you will save the following data files
* ''mydata-0005.tif'' for a scan between ω = -2.0° to -1.0° with an average ω of -1.5°,
* ''mydata-0006.tif'' for a scan between ω = -1.0° to -0.0° with an average ω of -0.5°,
* ''mydata-0007.tif'' for a scan between ω = +0.0° to +1.0° with an average ω of -0.5°,
* ''mydata-0008.tif'' for a scan between ω = +1.0° to +2.0° with an average ω of -1.5°.
The scripts ''timelessTiff2edf'' and ''timelessMccd2edf'', which are both part of the [[software:timelesstools|TIMEleSS tools]], are meant to convert such file series into series of EDF files.
Watch out! You can generate vast amount of data! You may want to include such scripts into larger scripts as you develop your data processing strategy.
===== timelessTiff2edf =====
timelessTiff2edf -h
usage: timelessTiff2edf -f from -t to -s step -n stem -i first image [OPTIONS]
Creates a list of EDF files based on a collection of TIFF files This is part
of the TIMEleSS project http://timeless.texture.rocks
optional arguments:
-h, --help show this help message and exit
-f FROM, --from FROM Start for omega scan (in degrees, required)
-t TO, --to TO End for omega scan (in degrees, required)
-s STEP, --step STEP Omega step (in degrees, required)
-n STEM, --stem STEM Stem for images files (required)
-i IMAGEFIRST, --imagefirst IMAGEFIRST
Number of first image file in series (required)
-p TIFFIMAGEPATH, --tiffimagepath TIFFIMAGEPATH
Path to tiff images. Default is ./
-e EDFIMAGEPATH, --edfimagepath EDFIMAGEPATH
Path in which to save edf images. Default is ./
-x EXTENSION, --extension EXTENSION
Extension for tiff files. Default is tif
-d NDIGITS, --ndigits NDIGITS
Number of digits for file number. Default is 4
===== timelessMccd2edf =====
timelessMccd2edf -h
usage: timelessMccd2edf -f from -t to -s step -n stem -i first image [OPTIONS]
Creates a list of EDF files based on a collection of MarCCD files This is part
of the TIMEleSS project http://timeless.texture.rocks
optional arguments:
-h, --help show this help message and exit
-f FROM, --from FROM Start for omega scan (in degrees, required)
-t TO, --to TO End for omega scan (in degrees, required)
-s STEP, --step STEP Omega step (in degrees, required)
-n STEM, --stem STEM Stem for images file (required)
-i IMAGEFIRST, --imagefirst IMAGEFIRST
Number of first image file in series (required)
-p MCCDIMAGEPATH, --mccdimagepath MCCDIMAGEPATH
Path to MarCCD images. Default is ./
-e EDFIMAGEPATH, --edfimagepath EDFIMAGEPATH
Path in which to save edf images. Default is ./
-x EXTENSION, --extension EXTENSION
Extension for MarCCD files. Default is mccd
-d NDIGITS, --ndigits NDIGITS
Number of digits for file number. Default is 4
===== Other formats =====
The ESRF fabio library, which you must have installed by now, can open and read many formats. Below is an example python program that will convert a series ''CBF'' files placed into a folder to ''EDF''.
As you can see, the code is not specific to CBF, as long as Fabio can read it, it will work...
import glob
import fabio, os
cbf_dir = "/folder/with/CBFFiles"
edf_dir = "/folder/to/save/EDFFiles"
dest_format = "edf"
# Starting value of omega
omegastart = -23.5
# Omega step
omegastep = 0.5
# The first file will be assigne a value of omega = omegastart+omegastep/2.
files = glob.glob("%s/*.cbf" % cbf_dir)
files.sort()
print("Number of files: %s" % len(files))
if not os.path.exists(edf_dir):
os.makedirs(edf_dir)
omega = omegastart + omegastep / 2.
for onefile in files:
dst_name = os.path.join(edf_dir, os.path.splitext(os.path.basename(onefile))[0] + "." + dest_format)
print("Converting %s into %s" % (onefile, dst_name))
im = fabio.open(onefile)
im.header["Omega"] = omega
im.convert(dest_format).save(dst_name)
omega += omegastep
print ("Read %d file in %s" % (len(files), cbf_dir))
print ("Saved %d file in %s"% (len(files), edf_dir))
print ("Done")