Here's an example of sof (set of frames) files generated by the XSHooter pipeline when creating a master bias frame.
There are 4 files creates:
- data.sof
- input_sof.json
- output_files.sof
- products_sof.json
Here is what the ESO esorex docs say about the sof files.
A
soffile contains a list of the input data. This data is specified in ansoffile (which is just a text file), where each input file is specified with its associated classification and category. The format of each line in thesoffile is as follows:
full-path-to-file  classification
The first of the files above data.sof seem to meet these criteria and contains the path to the input bias frames and what appears to be their HIERARCH ESO DPR TYPE keyword together with HIERARCH ESO SEQ ARM (classification tag):
/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:34:46.596.fits BIAS_UVB_1x1
/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:36:19.284.fits BIAS_UVB_1x1
/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:37:52.583.fits BIAS_UVB_1x1
/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:39:24.501.fits BIAS_UVB_1x1
/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:40:58.590.fits BIAS_UVB_1x1
There is also a JSON version of the SOF with much more detailed information. Here is a file called 'input_sof.json' with the same set of files as above:
[
  {
    "purposes": [
      "ACTION_MBIAS_UVB/ACTION_FLUX_SLIT_NOD_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:20:39.700.fits",
    "checksum": "500031168314E955F0A3533660CA7E5A",
    "category": "BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  },
  {
    "purposes": [
      "ACTION_MBIAS_UVB/ACTION_FLUX_SLIT_NOD_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:23:27.505.fits",
    "checksum": "557B300BF8E403413101C543B454C1EC",
    "category": "BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  },
  {
    "purposes": [
      "ACTION_MBIAS_UVB/ACTION_FLUX_SLIT_NOD_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:26:17.621.fits",
    "checksum": "5D5C8D9032EDF7D385F952D92F8CD370",
    "category": "BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  },
  {
    "purposes": [
      "ACTION_MBIAS_UVB/ACTION_FLUX_SLIT_NOD_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:29:05.346.fits",
    "checksum": "4A96894259FD95CAB09416B1711BADAC",
    "category": "BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  },
  {
    "purposes": [
      "ACTION_MBIAS_UVB/ACTION_FLUX_SLIT_NOD_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/raw_data/XSHOO.2017-08-18T21:31:55.631.fits",
    "checksum": "86CF0957ABEAE8AB5074DB6EF4AF863A",
    "category": "BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  }
]Alongside input_sof.json there are also output_files.sof and products_sof.json
[
  {
    "purposes": [
      "ACTION_MFLAT_SLIT_UVB/ACTION_SCI_SLIT_STARE_UVB"
    ],
    "name": "/Users/Dave/Dropbox/Desktop/xshooter_qub_demo/other_data/reflex_tmp_products/xshooter/xsh_mbias_1/2019-09-30T10:36:13.810/MASTER_BIAS_UVB.fits",
    "checksum": "9149D64DB44F7EBEFF5B22D82E0A8F08",
    "category": "MASTER_BIAS_UVB",
    "class": "org.eso.domain.FitsFile"
  }
][
  {
    "name": "\/Users\/Dave\/Dropbox\/Desktop\/xshooter_qub_demo\/other_data\/reflex_tmp_products\/xshooter\/xsh_mbias_1\/2019-09-30T10:37:11.042\/MASTER_BIAS_UVB.fits",
    "category": "MASTER_BIAS_UVB"
  }
]To generate an sof file for a directory containing FITS files run the command:
python create_sof_from_directory_contents.py /path/to/folder > my_sof_file.sofYou can also filter on arm, binning and frame type:
create_sof_from_directory_contents <directoryPath>
    create_sof_from_directory_contents <directoryPath> <type>
    create_sof_from_directory_contents <directoryPath> <type> <arm>
    create_sof_from_directory_contents <directoryPath> <type> <arm> <xbin> <ybin>
    ```