There are several filename generating mechanisms that facilitate file handling. Not all of them apply to all file types.
There can be UNIX shell environment variables in any input or output filename. The environment variables have to be in the format ${VARNAME} or $(VARNAME). Also, two predefined macros are available for string variables:
When accessing an atom file, a specified filename is tried first. If this is unsuccessful, MODELLER automatically expands the original filename by adding extensions '.Z', '.gz', or '.bz2'. This allows it to detect atom files compressed with the UNIX compress, gzip, or bzip2 commands. If the compressed file exists, MODELLER automatically uncompresses it, reads it, and puts it back into the original state after the reading is finished (note that the gzip and bzip2 programs must be installed on your system in order for this to work). If the specified file is still not found, the extensions '.atm', '.pdb', '.ent', and '.crd' are tried in this order, with and without the compressed extensions, then also with the 'pdb' prefix. This search for the atom file is repeated through all the directories in io_data.atom_files_directory (directories are separated by ':'), unless the input atom filename starts with '/', in which case io_data.atom_files_directory is neglected.
Any derivative data that MODELLER may need, including residue solvent accessibilities, hydrogen bonding information, dihedral angles, residue neighbors, etc., are calculated on demand from the atomic coordinates. The most time consuming operation is calculating solvent accessibility, but even this calculation takes less than 1 sec for a 200 residue protein on a Pentium III workstation.
MODELLER stores the filenames of coordinate sets in the alignment arrays. These arrays are used by alignment.compare_structures(), restraints.make(), alignment.malign3d(), alignment.align2d(), and several other commands. If these filenames do not change when the structures are needed for the second time, the coordinate files are not re-read because they should already be in memory. This creates a problem only when the contents of a structure file changes since it was last read during the current job.