Resources
Programs using libcifpp often need access to common data files. E.g. CIF dictionary files, CCP4 monomer restraints files or the CCD data file. In libcifpp these files are called resources. These files are often also based on external sources that are updated on a regular basis.
Resources can be compiled into the executable so that the resulting application can be made portable to other machines. For this you need to use mrc which only works on Un*x like systems using the ELF executable format or on MS Windows
But resources may also be located as files on the filesytem at specific locations. And you can specify your own location for files (a directory) or even override named resources with your own data.
Loading Resources
No matter where the resource is located, you should always use the single libcifpp API call cif::load_resource()
to load them. This function returns a std::istream wrapped inside a std::unique_ptr.
The order in which resources are searched for is:
Use the resource that was defined by calling
cif::add_file_resource()
for this name.Search the paths specified by
cif::add_data_directory()
, last one added is searched firstSearch the so-called CACHE_DIR. This location is defined at compile time and based on the installation directory of libcifpp. Usually it is /var/cache/libcifpp. It is in this directory where the cron job for libcifpp will put the updated files weekly.
If the CCP4 environment is available, the $ENV{CCP4}/share/libcifpp is searched.
If the environment variable LIBCIFPP_DATA_DIR is set it is searched
The DATA_DIR is searched, this is also a variable defined at compile time, also based on the installation directory of libcifpp. It usually is /usr/share/libcifpp
As a last resort an attempt is made to load the data from resources compiled by mrc.