Scripting and batch processing

The tomo class can be called from user-written IDL routines to perform all steps in the reconstruction process. This can be used to write scripts to do batch processing of data without using the tomo_display GUI.

The tomo class documentation explains the use of each of the tomo methods. These are the routines whose names begin with tomo::.

Processing a single dataset

The following IDL procedure will reconstruct a single dataset.

pro process_dataset, camera_file
  tomo = obj_new('tomo')
  tomo->restore_settings, 'tomo_settings.txt'
  tomo->read_camera_file, camera_file
  tomo->preprocess
  tomo->optimize_center, [200, 1080], 954, method='0-180'
  tomo->reconstruct_volume
end

This procedure does the following:

  • Creates a tomo object

  • Restores a settings file. It is a good idea to save a settings file with the preprocessing, center optimization, and reconstruction parameters that work well for similar datasets. This can be done with the File\Save settings ... menu in tomo_display. This is the contents of that tomo_settings.txt file:

    {
      "zingerWidth": 3,
      "zingerThreshold": 0.10000000,
      "zingerDoubleThreshold": 0.10000000,
      "preprocessScale": 10000.000,
      "preprocessOffset": 0.00000000,
      "preprocessThreads": 8,
      "preprocessDataType": "Float32",
      "preprocessWriteOutput": 0,
      "preprocessWriteFormat": "HDF5",
      "reconMethod": 0,
      "reconSlicesPerChunk": 256,
      "reconDataType": "Int16",
      "reconWriteOutput": 1,
      "reconWriteFormat": "HDF5",
      "reconScale": 1000000.0,
      "reconOffset": 0.00000000,
      "reconThreads": 8,
      "paddedSinogramWidth": 0,
      "paddingAverage": 10,
      "airPixels": 10,
      "ringWidth": 9,
      "fluorescence": 0,
      "debug": 2,
      "debugFile": "tomoRecon_debug.txt",
      "geom": 0,
      "pswfParam": 6.0000000,
      "sampl": 1.0000000,
      "maxPixSize": 1.0000000,
      "ROI": 1.0000000,
      "X0": 0.00000000,
      "Y0": 0.00000000,
      "ltbl": 512,
      "GR_filterName": "hann",
      "BP_Method": 0,
      "BP_filterName": "Gen_Hamming",
      "BP_filterSize": 1920,
      "RiemannInterpolation": 0,
      "RadonInterpolation": 0,
      "optimizeMethod": 1,
      "optimizeRange": 10.000000,
      "optimizeStep": 0.50000000,
      "movieZoom": 2,
      "displayOrder": 1,
      "displayDirection": 2,
      "displayAuto": 0,
      "displayMin": -1000.0000,
      "displayMax": 3500.0000
    
  • Reads the camera file

  • Preprocesses the data

  • Optimizes the rotation center. The upper and lower slices, initial guess of rotation center, and optimization method were specified on the command line.

  • Does the reconstruction

It can be run at the IDL command line with the following commands:

IDL> cd, 'C:\Data\Pamukcu'
IDL> .compile -v 'C:\Data\process_dataset.pro'
IDL> process_dataset, 'Ka5_RunD_A.h5'

That produces this output:

Time to read camera file=       5.9350002
Sun Mar 19 10:01:17 2023 Doing corrections on flat fields ...
Sun Mar 19 10:01:19 2023 Dark, flat, zinger correction ...
Sun Mar 19 10:01:27 2023 Preprocessing complete
Preprocess execution times:
                  Flat adjustments:       2.5039999
  Dark, flat and zinger correction:       7.4550002
                Convert to UInt16:      0.00000000
                    Writing output:    0.0019998550
                    Freeing memory:      0.58599997
                            Total:       10.547000
optimize_center, time=     0.093000174
Sun Mar 19 10:01:27 2023 Initializing reconstruction ...
Sun Mar 19 10:01:27 2023 Beginning reconstruction ...
tomo_recon: time to convert to float:      0.12100005
                time to reconstruct:       36.282000
                          total time:       36.403000
Sun Mar 19 10:02:05 2023 Converting to output data type ...
Sun Mar 19 10:02:13 2023 Writing reconstructed file ...
    Convert 360 to 180:      0.00000000
Convert input to float:      0.00000000
            Reconstruct:       37.346000
Convert output to Int16:       8.6210001
            Write file:       35.560000
            Total time:       81.527000
Sun Mar 19 10:02:49 2023 Reconstruction complete.

Processing a mulitple datasets

The following IDL procedure will reconstruct a multiple datasets collected with the IDL collect_tomoscan_stack procedure. Each file has a base name followed by _A, _B, etc.

pro process_stack, base_file, num_files
  tomo = obj_new('tomo')
  suffixes = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M']
  tomo->restore_settings, 'tomo_settings.txt'
  for i=0, num_files-1 do begin
    camera_file = base_file + '_' + suffixes[i] + '.h5'
    print, 'Processing file: ' + camera_file
    tomo->read_camera_file, camera_file
    tomo->preprocess
    tomo->optimize_center, [200, 1080], 954, method='0-180'
    tomo->reconstruct_volume
    print, 'Done processing file: ' + camera_file
  endfor
end

This is similar to the process_dataset procedure above, but it loops over a set of datasets. Note that the tomo object is created outside the loop, which is more efficient. The settings file is also read outside the loop. The procedure prints status information before and after processing so the user can see what dataset is currently being processed.

It can be run at the IDL command line with the following commands:

IDL> cd, 'C:\Data\Pamukcu'
IDL> .compile -v 'C:\Data\process_stack.pro'
IDL> process_stack, 'Ka5_RunD', 6

Ka5_RunD is the base file name, and there are 6 datasets in this stack.