Create functional data object from given file and associate the
        object with the specified experiment.

        Parameters
        ----------
        experiment_id : string
            Unique experiment identifier
        filename : File-type object
            Functional data file

        Returns
        -------
        FMRIDataHandle
            Handle for created fMRI object or None if identified experiment
            is unknown

def experiments_fmri_create(self, experiment_id, filename):
        """Create functional data object from given file and associate the
        object with the specified experiment.

        Parameters
        ----------
        experiment_id : string
            Unique experiment identifier
        filename : File-type object
            Functional data file

        Returns
        -------
        FMRIDataHandle
            Handle for created fMRI object or None if identified experiment
            is unknown
        """
        # Get the experiment to ensure that it exist before we even create the
        # functional data object
        experiment = self.experiments_get(experiment_id)
        if experiment is None:
            return None
        # Create functional data object from given file
        fmri = self.funcdata.create_object(filename)
        # Update experiment to associate it with created fMRI object. Assign
        # result to experiment. Should the experiment have been deleted in
        # parallel the result will be None
        experiment = self.experiments.update_fmri_data(experiment_id, fmri.identifier)
        if experiment is None:
            # Delete fMRI object's data directory
            shutil.rmtree(fmri.directory)
            # Delete functional data object from databases
            self.funcdata.delete_object(fmri.identifier, erase=True)
            return None
        else:
            return funcdata.FMRIDataHandle(fmri, experiment_id)