<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def save_hdf(self,filename,path='',properties=None, overwrite=False, append=False):
 """Saves to HDF5 file. Subclasses should be sure to define ``_properties`` attribute to ensure that all correct attributes get saved. Load a saved population with :func:`StarPopulation.load_hdf`. Example usage:: True True :param filename: Name of HDF file. :param path: (optional) Path within HDF file to save object. :param properties: (optional) Names of any properties (in addition to those defined in ``_properties`` attribute) that you wish to save. (This is an old keyword, and should probably be removed. Feel free to ignore it.) :param overwrite: (optional) Whether to overwrite file if it already exists. If ``True``, then any existing file will be deleted before object is saved. Use ``append`` if you don't wish this to happen. :param append: (optional) If ``True``, then if the file exists, then only the particular path in the file will get written/overwritten. If ``False`` and both file and path exist, then an ``IOError`` will be raised. If ``False`` and file exists but not path, then no error will be raised. """

        if os.path.exists(filename):
            with pd.HDFStore(filename) as store:
                if path in store:
                    if overwrite:
                        os.remove(filename)
                    elif not append:
                        raise IOError('{} in {} exists.  '.format(path,filename) +
                                     'Set either overwrite or append option.')

        if properties is None:
            properties = {}

        for prop in self._properties:
            properties[prop] = getattr(self, prop)

        self.stars.to_hdf(filename,'{}/stars'.format(path))
        self.constraint_df.to_hdf(filename,'{}/constraints'.format(path))

        if self.orbpop is not None:
            self.orbpop.save_hdf(filename, path=path+'/orbpop')

        with pd.HDFStore(filename) as store:
            attrs = store.get_storer('{}/stars'.format(path)).attrs
            attrs.selectfrac_skip = self.selectfrac_skip
            attrs.distribution_skip = self.distribution_skip
            attrs.name = self.name
            attrs.poptype = type(self)
            attrs.properties = properties