Generate comparison latex report in specified output directory
        Returns LatexReport object

def compare(self, other, analysis_set, output_directory, unique_ajps, verbose = True, compile_pdf = True):
        """
        Generate comparison latex report in specified output directory
        Returns LatexReport object
        """
        self_unique_name = self.get_definitive_name(unique_ajps)
        other_unique_name = other.get_definitive_name(unique_ajps)

        output_directory = os.path.join(output_directory, os.path.join(self_unique_name, other_unique_name) )
        assert( not os.path.isdir( output_directory ) )

        subplot_directory = os.path.join(output_directory, 'plots')
        if not os.path.isdir(subplot_directory):
            os.makedirs(subplot_directory)

        report = lr.LatexReport( table_of_contents = False )

        # Construct dataframe comparing our predictions to other's predictions
        both_predictions = pandas.concat(
            [
                self.add_identifying_columns_to_df(self.dataframe[['Predicted']], unique_ajps),
                other.add_identifying_columns_to_df(other.dataframe[['Predicted']], unique_ajps),
            ],
            join = 'outer',
        ).sort_index()
        both_predictions_subtracted = subtract_row_pairs_for_display(
            both_predictions,
            output_csv = os.path.join(output_directory, 'predictions_v_predictions.csv'),
            merge_df = self.dataframe,
            verbose = verbose,
        )

        # Construct dataframe comparing our diff with experimental values to other's
        self_diff = self.get_pred_minus_exp_dataframe(analysis_set, unique_ajps)
        other_diff = other.get_pred_minus_exp_dataframe(analysis_set, unique_ajps)
        diffs_df = pandas.concat(
            [self_diff, other_diff],
            join = 'outer',
        )

        diffs_df = subtract_row_pairs_for_display(
            diffs_df,
            output_csv = os.path.join(output_directory, 'diffs_v_diffs.csv'),
            merge_df = self.dataframe,
            verbose = verbose,
        )

        report.set_title_page(
            '%s vs %s' % (
                self.get_definitive_name(unique_ajps, join_character = '\n'),
                other.get_definitive_name(unique_ajps, join_character = '\n')
            )
        )
        predictions_v_predictions_df = self.dataframe[['Predicted']].merge(
            other.dataframe[['Predicted']],
            left_index = True,
            right_index = True,
        )
        predictions_v_predictions_df.columns = [self_unique_name, other_unique_name]
        report.add_plot( general_matplotlib.make_corr_plot(predictions_v_predictions_df, predictions_v_predictions_df.columns.values[0], predictions_v_predictions_df.columns.values[1], output_directory = subplot_directory, plot_title = 'Prediction comparison', axis_label_size = 8.0, output_name = 'vs_scatter', fig_height = 7, fig_width = 8, verbose = verbose, plot_11_line = True ), plot_title = 'Experimental vs. Predicted scatterplot (with density binning)' )

        diff_v_diff_dataframe = self.get_pred_minus_exp_dataframe(analysis_set).merge(
            other.get_pred_minus_exp_dataframe(analysis_set),
            left_index = True,
            right_index = True,
        )
        report.add_section_page( title = 'Plots' )
        diff_v_diff_dataframe.columns = [self_unique_name, other_unique_name]
        report.add_plot( general_matplotlib.make_corr_plot(diff_v_diff_dataframe, diff_v_diff_dataframe.columns.values[0], diff_v_diff_dataframe.columns.values[1], output_directory = subplot_directory, plot_title = 'Error v. Error', axis_label_size = 7.0, output_name = 'diff_vs_scatter', fig_height = 7, fig_width = 8, verbose = verbose, plot_11_line = True ), plot_title = 'Outliers --- Error (Predicted - Experimental) v. error. \\ x-axis=%s \\ y-axis=%s' % (diff_v_diff_dataframe.columns.values[0], diff_v_diff_dataframe.columns.values[1]) )

        report.add_section_page( title = 'Tables' )

        report.content.append( lr.LatexPandasTable(
            diffs_df, float_format = float_format_2sigfig,
            caption_text = 'Outliers --- Comparison of error (Predicted - Experimental) for first prediction set (%s) vs second set of predictions (%s). Values sorted by descending absolute delta.' % (self_unique_name, other_unique_name),
        ) )

        report.content.append( lr.LatexPandasTable(
            both_predictions_subtracted, float_format = float_format_2sigfig,
            caption_text = 'Direct comparison of predicted values. Values sorted by descending absolute delta.',
        ) )

        # Get joined stats comparison dataframe
        for case_table in BenchmarkRun.make_case_description_tables(BenchmarkRun.get_stats_comparison_dataframe(
                [self, other], unique_ajps,
                output_csv = os.path.join(output_directory, 'comparison_metrics.csv'),
        )):
            report.content.append( case_table )

        report.generate_pdf_report(
            os.path.join(output_directory, 'comparison.pdf'),
            verbose = verbose,
            compile_pdf = compile_pdf,
        )
        if verbose:
            print 'Comparison report saved to:', os.path.join(output_directory, 'comparison.pdf')
        return report