Example #1
0
    def make_subfigure(self, fig_funcs, layout=(5, 4), close=True):
        #todo figure out how to iterate properly
        n = np.product(layout)
        chunks = grouper(n, fig_funcs)
        w = str(1 / layout[1])
        pbar = tqdm(total=len(fig_funcs))
        for chunk in chunks:
            with self.doc.create(pyl.Figure(position='ht')) as tex_fig:
                for i, fig_func in enumerate(chunk):
                    if fig_func is None:
                        continue
                    with self.doc.create(
                            pyl.SubFigure(
                                position='b',
                                width=pyl.NoEscape(w +
                                                   r'\linewidth'))) as subfig:
                        fig = fig_func()
                        file_path = self._save_fig(
                            fig,
                            bbox_inches='tight')  # todo access these kwargs
                        if close:
                            plt.close(fig)
                        subfig.add_image(file_path,
                                         width=pyl.NoEscape(r'\linewidth'))
                    if i % layout[1] == layout[1] - 1:
                        self.doc.append('\n')
                    pbar.update(1)

            self.doc.append(pyl.NewPage())
Example #2
0
    def createFig(self,
                  imagePath,
                  caption,
                  width=tex.NoEscape(r'0.5\linewidth')):
        fig = tex.SubFigure(position='b', width=width)
        fig.add_image(str(imagePath), width=tex.NoEscape(r'\linewidth'))
        fig.add_caption(caption)

        return fig
Example #3
0
    def test_subfigure(self):
        fig = plt.figure()
        plt.plot([2,3,42,1])

        file_path = self._save_fig(fig)

        with self.doc.create(pyl.Figure(position='h!')) as kittens:
            w = str(0.25)
            for i in range(8):
                with self.doc.create(pyl.SubFigure(
                        position='b',
                        width=pyl.NoEscape(w + r'\linewidth'))) as left_kitten:

                    left_kitten.add_image(file_path,
                                          width=pyl.NoEscape(r'\linewidth'))
                    left_kitten.add_caption(f'Kitten on the {i}')
                if i % 4 == 3:
                    self.doc.append('\n')
            kittens.add_caption("Two kittens")
Example #4
0
    def profile_likelihood(self, pl_directory, size=0.3, num_per_row=3):
        """
        compile any pdf, jpg and png files
        in directory into a latex pdf document
        :return:
        """
        if isinstance(self.file_types, str):
            self.file_types = [self.file_types]

        files = self.search_recursive(pl_directory)

        if files is []:
            raise errors.InputError(
                '''Cannot locate pdf, jpg or png files in "{}". Please 
                give the full path to where your model selection results are
                 plotted. 
                '''.format(pl_directory))
        doc = pylatex.Document(self.filename, documentclass='article')

        for k, v in list(files.items()):
            assert isinstance(v, list)
            if v is not None:
                with doc.create(
                        pylatex.Figure(
                            position='htbp!',
                            width=pylatex.NoEscape(r'\linewidth'))) as fig:
                    # [fig.add_image(i) for i in v]
                    for i in range(len(v)):
                        with doc.create(
                                pylatex.SubFigure(width=pylatex.NoEscape(
                                    str(size) + r'\linewidth'))) as sub:
                            sub.add_image(v[i])
                            sub.add_caption(os.path.split(v[i])[1])
                        if i is not 0 and i % num_per_row is 0:
                            doc.append(pylatex.NoEscape(r'\break'))
                            # sub.add_label(i)
                            #         # fig.add_caption(os.path.join(*Path(v[i]).parts[-3:-1]))

                        doc.append(pylatex.NoEscape(r'\hfill'))
                    fig.add_caption(os.path.split(k)[1])

        doc.generate_pdf()
        LOG.info('PDF generated at "{}"'.format(doc.default_filepath))
Example #5
0
    def prepare_document(self, directory, subdirs=False, file_types='.png'):
        """
        compile any pdf, jpg and png files
        in directory into a latex pdf document
        :return:
        """
        if subdirs not in [True, False]:
            raise errors.InputError(
                'subdirs argument should be either True or False')

        if isinstance(file_types, str):
            file_types = [file_types]

        if subdirs:
            files = self.search_recursive(directory)

        else:
            files = self.search()

        if files is []:
            raise errors.InputError(
                '''Cannot locate pdf, jpg or png files in "{}". Please 
                give the full path to where your model selection results are
                 plotted. 
                '''.format(directory))
        doc = pylatex.Document(self.filename, documentclass='article')

        for k, v in list(files.items()):
            assert isinstance(v, list)
            if v is not None:
                with doc.create(
                        pylatex.Section(os.path.join(*Path(k).parts[-1:]))):
                    doc.append(k)
                    doc.append(pylatex.NoEscape(r'\\*'))
                    if len(v) == 1:
                        with doc.create(
                                pylatex.Figure(position='htbp!',
                                               width=pylatex.NoEscape(
                                                   r'0.3\linewidth'))) as fig:

                            fig.add_image(v[0])
                            fig.add_caption(
                                os.path.join(*Path(v[0]).parts[-2:]))
                            # fig.add_label(v[0])
                    else:
                        with doc.create(
                                pylatex.Figure(
                                    position='htbp!',
                                    width=pylatex.NoEscape(r'\linewidth'),
                                )) as fig:
                            for i in range(len(v)):
                                with doc.create(
                                        pylatex.SubFigure(
                                            width=pylatex.NoEscape(
                                                r'0.3\linewidth'))) as sub:
                                    sub.add_image(v[i])
                                    # sub.add_caption('')
                                if i % 3 == 0:
                                    doc.append(pylatex.NoEscape(r'\break'))
                                    # sub.add_label(i)
                            fig.add_caption(
                                os.path.join(*Path(v[i]).parts[-3:-1]))
                    doc.append(pylatex.NoEscape(r'\hfill'))

        doc.generate_pdf()
        LOG.info('PDF generated at "{}"'.format(doc.default_filepath))
Example #6
0
    def _add_fits(self,
                  doc,
                  fit_log,
                  fit_name,
                  operator_set,
                  ratio,
                  gap=False,
                  const=False):
        with doc.create(pylatex.Center()) as centered:
            if gap and const and util.ERR_PREC <= 4:
                cols = "X[c] X[c] X[4,c] X[4,c] X[4,c] X[4,c] X[2,c] X[2,c] X[2,c] X[c]"
            elif (gap or const) and util.ERR_PREC <= 4:
                cols = "X[c] X[c] X[4,c] X[4,c] X[4,c] X[2,c] X[2,c] X[2,c] X[c]"
            else:
                cols = "X[c] X[c] X[4,c] X[4,c] X[2,c] X[2,c] X[2,c] X[c]"
            with centered.create(pylatex.LongTabu(
                    cols, to=r"\linewidth")) as fit_table:
                if ratio:
                    energy_header = r"$a_t \Delta E_{\rm fit}$"
                else:
                    energy_header = r"$a_t E_{\rm fit}$"
                header_row = [
                    pylatex.NoEscape(r"$t_{\rm min}$"),
                    pylatex.NoEscape(r"$t_{\rm max}$"),
                    pylatex.NoEscape(energy_header),
                    "A",
                    pylatex.NoEscape(r"$\chi^2 / \text{dof}$"),
                    pylatex.NoEscape(r"$p$-value"),
                    pylatex.NoEscape(r"$t_{\rm exc}$"),
                    pylatex.NoEscape(r"$\sigma_{\rm cut}$"),
                ]
                if const and util.ERR_PREC <= 4:
                    header_row.insert(4, pylatex.NoEscape(r"const"))
                if gap and util.ERR_PREC <= 4:
                    header_row.insert(4, pylatex.NoEscape(r"$a \Delta$"))

                fit_table.add_row(header_row, mapper=[pylatex.utils.bold])
                fit_table.add_hline()
                fit_table.end_table_header()
                for fit_info, fit_result in fit_log.fits.items():
                    value_row = [
                        fit_info.tmin,
                        fit_info.tmax,
                        fit_result.energy,
                        fit_result.amplitude,
                        round(fit_result.chisq, 2),
                        round(fit_result.quality, 2),
                        fit_info.exclude_times,
                        round(fit_info.noise_cutoff, 1),
                    ]
                    if const and util.ERR_PREC <= 4:
                        value_row.insert(4, fit_result.const)
                    if gap and util.ERR_PREC <= 4:
                        value_row.insert(4, fit_result.gap)
                    fit_table.add_row(value_row)

        if self.fit_plots:
            for fit_info1, fit_info2 in zip(*[iter(fit_log.fits.keys())] * 2):
                fit_plot1 = self.fit_plotfile(operator_set,
                                              fit_name,
                                              fit_info1,
                                              extension=util.PlotExtension.pdf)
                fit_plot2 = self.fit_plotfile(operator_set,
                                              fit_name,
                                              fit_info2,
                                              extension=util.PlotExtension.pdf)

                with doc.create(pylatex.Figure(position='H')) as fig:
                    with doc.create(
                            pylatex.SubFigure(position='b',
                                              width=pylatex.NoEscape(
                                                  r'0.5\linewidth'))) as fig1:
                        caption = f"{fit_info1.model.short_name}, $t_{{\\rm fit}} = {fit_info1.tmin}, {fit_info1.tmax}$"
                        if fit_info1.ratio:
                            caption += " Ratio"
                        if fit_info1.exclude_times:
                            caption += f" $t_{{\\rm exc}}$ = {fit_info1.exclude_times}"
                        if fit_info1.noise_cutoff:
                            caption += f" $\sigma_{{\\rm cut}} = {fit_info1.noise_cutoff}$"
                        util.add_image(fig1,
                                       self.results_dir,
                                       fit_plot1,
                                       width="1.0",
                                       caption=caption)
                    with doc.create(
                            pylatex.SubFigure(position='b',
                                              width=pylatex.NoEscape(
                                                  r'0.5\linewidth'))) as fig2:
                        caption = f"{fit_info2.model.short_name}, $t_{{\\rm fit}} = {fit_info2.tmin}, {fit_info2.tmax}$"
                        if fit_info1.ratio:
                            caption += " Ratio"
                        if fit_info2.exclude_times:
                            caption += f" $t_{{\\rm exc}}$ = {fit_info2.exclude_times}"
                        if fit_info2.noise_cutoff:
                            caption += f" $\sigma_{{\\rm cut}} = {fit_info2.noise_cutoff}$"
                        util.add_image(fig2,
                                       self.results_dir,
                                       fit_plot2,
                                       width="1.0",
                                       caption=caption)

            if len(fit_log.fits) % 2 != 0:
                fit_info = list(fit_log.fits.keys())[-1]
                fit_plot = self.fit_plotfile(operator_set,
                                             fit_name,
                                             fit_info,
                                             extension=util.PlotExtension.pdf)
                with doc.create(pylatex.Figure(position='H')) as fig:
                    caption = f"{fit_info.model.short_name}, $t_{{\\rm fit}} = {fit_info.tmin}, {fit_info.tmax}$"
                    if fit_info.ratio:
                        caption += " Ratio"
                    if fit_info.exclude_times:
                        caption += f" $t_{{\\rm exc}}$ = {fit_info.exclude_times}"
                    if fit_info.noise_cutoff:
                        caption += f" $\sigma_{{\\rm cut}} = {fit_info.noise_cutoff}$"
                    util.add_image(fig,
                                   self.results_dir,
                                   fit_plot,
                                   width="0.5",
                                   caption=caption)

        doc.append(pylatex.NoEscape(r"\newpage"))
Example #7
0
    def _add_tmins(self, doc, fit_infos, fit_name, operator_set, ratio):
        for fit_info1, fit_info2 in zip(*[iter(fit_infos)] * 2):
            fit_plot1 = self.tmin_fit_plotfile(
                operator_set,
                fit_name,
                fit_info1,
                extension=util.PlotExtension.pdf)
            fit_plot2 = self.tmin_fit_plotfile(
                operator_set,
                fit_name,
                fit_info2,
                extension=util.PlotExtension.pdf)

            with doc.create(pylatex.Figure(position='H')) as fig:
                with doc.create(
                        pylatex.SubFigure(
                            position='b',
                            width=pylatex.NoEscape(r'0.5\linewidth'))) as fig1:
                    caption = f"{fit_info1.model.short_name}, $t_{{\\rm max}} = {fit_info1.tmax}$"
                    if fit_info1.ratio:
                        caption += " Ratio"
                    if fit_info1.exclude_times:
                        caption += f" $t_{{\\rm exc}}$ = {fit_info1.exclude_times}"
                    util.add_image(fig1,
                                   self.results_dir,
                                   fit_plot1,
                                   width="1.0",
                                   caption=caption)
                with doc.create(
                        pylatex.SubFigure(
                            position='b',
                            width=pylatex.NoEscape(r'0.5\linewidth'))) as fig2:
                    caption = f"{fit_info2.model.short_name}, $t_{{\\rm max}} = {fit_info2.tmax}$"
                    if fit_info1.ratio:
                        caption += " Ratio"
                    if fit_info2.exclude_times:
                        caption += f" $t_{{\\rm exc}}$ = {fit_info2.exclude_times}"
                    util.add_image(fig2,
                                   self.results_dir,
                                   fit_plot2,
                                   width="1.0",
                                   caption=caption)

        if len(fit_infos) % 2 != 0:
            fit_info = list(fit_infos)[-1]
            fit_plot = self.tmin_fit_plotfile(operator_set,
                                              fit_name,
                                              fit_info,
                                              extension=util.PlotExtension.pdf)
            with doc.create(pylatex.Figure(position='H')) as fig:
                caption = f"{fit_info.model.short_name}, $t_{{\\rm max}} = {fit_info.tmax}$"
                if fit_info.ratio:
                    caption += " Ratio"
                if fit_info.exclude_times:
                    caption += f" $t_{{\\rm exc}}$ = {fit_info.exclude_times}"
                util.add_image(fig,
                               self.results_dir,
                               fit_plot,
                               width="0.5",
                               caption=caption)

        doc.append(pylatex.NoEscape(r"\newpage"))
Example #8
0
def _add_data(doc: pl.Document, ds: Dataset, nr: NonRedundantization,
              meth: MLMethod):
    name = f'{ds.name}_{nr.name}_{meth.name}'
    directory = ds.name

    aVp_graph = f'{name}.jpg'
    angle_dist_graph = f'{name}_angledistribution.jpg'
    error_dist_graph = f'{name}_errordistribution.jpg'
    sqerror_graph = f'{name}_sqerror_vs_actual.jpg'
    stats_csv_all = f'{name}_stats_all.csv'
    stats_csv_out = f'{name}_stats_out.csv'

    actualVpred_file = os.path.join(directory, aVp_graph)
    ang_dist_file = os.path.join(directory, angle_dist_graph)
    error_dist_file = os.path.join(directory, error_dist_graph)
    sqerror_file = os.path.join(directory, sqerror_graph)

    df_all = pd.read_csv(os.path.join(directory, stats_csv_all))
    df_out = pd.read_csv(os.path.join(directory, stats_csv_out))

    with doc.create(pl.Section(f'Method: {ds.name}, {nr.name}, {meth.name}')):
        with doc.create(pl.Subsection('Summary of method:')):
            doc.append(f'Dataset: {ds.name}')
            doc.append(f'\nNon-redundantization: {nr.name}')
            doc.append(f'\nType of machine learning used: {meth.name}')

    with doc.create(pl.Subsection('Summary of the data:')):
        with doc.create(pl.Figure(position='!htbp')) as actualVpred:
            actualVpred.add_image(actualVpred_file, width='300px')
            actualVpred.add_caption(
                'Graph showing the predicted packing angle against the actual packing angle, when using the above specified methods of non-redundetization and machine learning.'
            )

        with doc.create(pl.Table(position='!htbp')) as table:
            table.add_caption('Summary of results for all data')
            table.append(pl.Command('centering'))
            table.append(pl.NoEscape(df_all.to_latex(escape=False)))

        with doc.create(pl.Table(position='!htbp')) as table:
            table.add_caption('Summary of results for outliers.')
            table.append(pl.Command('centering'))
            table.append(pl.NoEscape(df_out.to_latex(escape=False)))

        with doc.create(pl.Figure(position='!htbp')) as graphs:
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.30\linewidth'))) as ang_dist_graph:
                ang_dist_graph.add_image(ang_dist_file,
                                         width=pl.NoEscape(r'\linewidth'))
                ang_dist_graph.add_caption(
                    'Frequency distribution of the packing angle.')
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.33\linewidth'))) as error_dist_graph:
                error_dist_graph.add_image(error_dist_file,
                                           width=pl.NoEscape(r'\linewidth'))
                error_dist_graph.add_caption(
                    'Distribution of errors calculated as the difference between the predicted and actual interface angle.'
                )
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.33\linewidth'))) as sqerror_graph:
                sqerror_graph.add_image(sqerror_file,
                                        width=pl.NoEscape(r'\linewidth'))
                sqerror_graph.add_caption(
                    'Squared error in predicted packing angle against actual packing angle.'
                )
            graphs.add_caption('Graphs for further metrics.')
Example #9
0
def add_correlator(doc, task_handler, correlator, name, obs_handler):

    operator_src = operator_info.operator.Operator(correlator.getSource())
    subtractvev = task_handler.subtractvev and operator_src.channel.vev
    if correlator.isSinkSourceSame():
        left_pdf_file = task_handler.correlator_plotfile(
            correlator, name, extension=PlotExtension.pdf)
        right_pdf_file = task_handler.energy_plotfile(
            operator_src, name, extension=PlotExtension.pdf)

    else:
        left_pdf_file = task_handler.correlator_plotfile(
            correlator,
            name,
            complex_arg=sigmond.ComplexArg.RealPart,
            extension=PlotExtension.pdf)
        right_pdf_file = task_handler.correlator_plotfile(
            correlator,
            name,
            complex_arg=sigmond.ComplexArg.ImaginaryPart,
            extension=PlotExtension.pdf)

    if correlator.isSinkSourceSame():
        left_estimates = sigmond.getCorrelatorEstimates(
            obs_handler, correlator, task_handler.hermitian, subtractvev,
            sigmond.ComplexArg.RealPart, task_handler.sampling_mode)
        right_estimates = sigmond.getEffectiveEnergy(
            obs_handler, correlator, task_handler.hermitian, subtractvev,
            sigmond.ComplexArg.RealPart, task_handler.sampling_mode,
            task_handler.plot_info.timestep,
            task_handler.plot_info.eff_energy_type.value, 0.)
    else:
        left_estimates = sigmond.getCorrelatorEstimates(
            obs_handler, correlator, task_handler.hermitian, subtractvev,
            sigmond.ComplexArg.RealPart, task_handler.sampling_mode)
        right_estimates = sigmond.getCorrelatorEstimates(
            obs_handler, correlator, task_handler.hermitian, subtractvev,
            sigmond.ComplexArg.ImaginaryPart, task_handler.sampling_mode)

    if correlator.isSinkSourceSame():
        doc.append(pylatex.NoEscape(rf"Score: {score(left_estimates)}"))

    with doc.create(pylatex.Figure(position='H')):
        with doc.create(
                pylatex.SubFigure(
                    position='b',
                    width=pylatex.NoEscape(r'0.5\linewidth'))) as left_fig:
            add_image(left_fig,
                      task_handler.results_dir,
                      left_pdf_file,
                      width="1.0")
        with doc.create(
                pylatex.SubFigure(
                    position='b',
                    width=pylatex.NoEscape(r'0.5\linewidth'))) as right_fig:
            add_image(right_fig,
                      task_handler.results_dir,
                      right_pdf_file,
                      width="1.0")

    if correlator.isSinkSourceSame():
        header_row = [
            pylatex.NoEscape(r"$t$"),
            pylatex.NoEscape(r"$C(t)$"),
            pylatex.NoEscape(r"$\delta C(t)$"),
        ]
        if task_handler.plot_info.eff_energy_type.value < 2:
            header_row.extend([
                pylatex.NoEscape(
                    rf"$a_t E_{{\rm eff}} (t + {task_handler.plot_info.timestep}/2)$"
                ),
                pylatex.NoEscape(
                    rf"$\delta a_t E_{{\rm eff}} (t + {task_handler.plot_info.timestep}/2)$"
                ),
            ])
        else:
            header_row.extend([
                pylatex.NoEscape(r"$a_t E_{\rm eff} (t)$"),
                pylatex.NoEscape(r"$\delta a_t E_{\rm eff} (t)$"),
            ])

    else:
        header_row = [
            pylatex.NoEscape(r"$t$"),
            pylatex.NoEscape(r"$Re C(t)$"),
            pylatex.NoEscape(r"$\delta Re C(t)$"),
            pylatex.NoEscape(r"$Im C(t)$"),
            pylatex.NoEscape(r"$\delta Im C(t)$")
        ]

    with doc.create(pylatex.Center()) as centered:
        with centered.create(
                pylatex.LongTabu("X[c] X[2,c] X[2,c] X[2,c] X[2,c]",
                                 to=r"\linewidth")) as data_table:
            data_table.add_row(header_row, mapper=[pylatex.utils.bold])
            data_table.add_hline()
            data_table.end_table_header()
            for t in sorted(left_estimates.keys()):
                left_value = left_estimates[t].getFullEstimate()
                left_error = left_estimates[t].getSymmetricError()
                left_est = nice_value(left_value, left_error)
                left_rel_error = round(left_estimates[t].getRelativeError(), 4)
                t_right = t
                if correlator.isSinkSourceSame(
                ) and task_handler.plot_info.eff_energy_type.value < 2:
                    t_right = t + 0.5 * task_handler.plot_info.timestep

                if t_right in right_estimates:
                    right_value = right_estimates[t_right].getFullEstimate()
                    right_error = right_estimates[t_right].getSymmetricError()
                    right_est = nice_value(right_value, right_error)
                    right_rel_error = round(
                        right_estimates[t_right].getRelativeError(), 4)
                else:
                    right_est = ""
                    right_rel_error = ""

                row = [
                    int(t), left_est, left_rel_error, right_est,
                    right_rel_error
                ]
                data_table.add_row(row)

    doc.append(pylatex.NoEscape(r"\newpage"))
Example #10
0
    def makeInteractionFigure(self, ker, cum, n_terms):
        """
        Create figure for interaction analysis, which includes a subfigure of
        the latest additive component and a subfigure of posterior of the overall
        compositional kernel up to now.

        :param ker: latest additive component to be plotted
        :type ker: GPCKernel
        :param cum: overall compositional kernel up to and including `ker`
        :type cum: GPCKernel
        :param n_terms: number of additive terms considered in `cum` so far
        """
        assert isinstance(ker, GPCKernel), 'Kernel must be of type GPCKernel'
        assert isinstance(cum, GPCKernel), 'Kernel must be of type GPCKernel'

        doc = self.doc
        kerDims = ker.getActiveDims()
        cumDims = cum.getActiveDims()

        img1Name = 'additive{0}ker'.format(n_terms)
        img1Format = '.eps' if len(kerDims) != 3 else '.png'
        img1Filename = img1Name + img1Format
        ker.draw(os.path.join(self.path, img1Name), active_dims_only=True)

        if n_terms == 1 or len(cumDims) > 3:
            # Only present current additive component
            caption_str = r"Trained classifier on " + dims2text(
                kerDims, ker.data) + "."
            with doc.create(pl.Figure(position='htbp!')) as fig:
                fig.add_image(img1Filename,
                              width=ut.NoEscape(r'0.7\textwidth'))
                fig.add_caption(ut.NoEscape(caption_str))
                self.fignum += 1

        else:
            # Present both current component and cumulative kernel
            img2Name = 'additive{0}cum'.format(n_terms)
            img2Format = '.eps' if len(cumDims) != 3 else '.png'
            img2Filename = img2Name + img2Format
            cum.draw(os.path.join(self.path, img2Name), active_dims_only=True)
            caption1_str = r"Current additive component involving " + dims2text(
                kerDims, ker.data) + "."
            caption2_str = r"Previous and current components combined, involving " + dims2text(
                cumDims, cum.data) + "."
            caption_str = r"Trained classifier on " + dims2text(
                cumDims, cum.data) + "."

            with doc.create(pl.Figure(position='htbp!')) as fig:
                with doc.create(
                        pl.SubFigure(
                            position='b',
                            width=ut.NoEscape(r'0.47\textwidth'))) as subfig1:
                    subfig1.add_image(img1Filename,
                                      width=ut.NoEscape(r'\textwidth'))
                    subfig1.add_caption(ut.NoEscape(caption1_str))
                doc.append(ut.NoEscape(r'\hfill'))
                with doc.create(
                        pl.SubFigure(
                            position='b',
                            width=ut.NoEscape(r'0.47\textwidth'))) as subfig2:
                    subfig2.add_image(img2Filename,
                                      width=ut.NoEscape(r'\textwidth'))
                    subfig2.add_caption(ut.NoEscape(caption2_str))
                fig.add_caption(ut.NoEscape(caption_str))
                self.fignum += 1
Example #11
0
def _add_data(doc: pl.Document, dataset):
    name = f'{dataset}_NR2_GBReg'
    directory = dataset

    aVp_graph = f'{name}.jpg'
    angle_dist_graph = f'{name}_angledistribution.jpg'
    error_dist_graph = f'{name}_errordistribution.jpg'
    sqerror_graph = f'{name}_sqerror_vs_actual.jpg'
    stats_csv_all = f'{name}_stats_all.csv'
    stats_csv_out = f'{name}_stats_out.csv'

    actualVpred_file = os.path.join(directory, aVp_graph)
    ang_dist_file = os.path.join(directory, angle_dist_graph)
    error_dist_file = os.path.join(directory, error_dist_graph)
    sqerror_file = os.path.join(directory, sqerror_graph)

    df_all = pd.read_csv(os.path.join(directory, stats_csv_all))
    df_out = pd.read_csv(os.path.join(directory, stats_csv_out))

    with doc.create(pl.Section(f'Results')):
        with doc.create(pl.Subsection('Summary of method:')):
            doc.append('Trained on PreAF2 dataset.')
            doc.append('\n')
            doc.append(f'Dataset tested: {dataset}')
            doc.append('\n')
            doc.append(f'GBR parameters: {gbr_params}.')
            doc.append('\n')

    with doc.create(pl.Subsection('Summary of the data:')):
        with doc.create(pl.Figure(position='!htbp')) as actualVpred:
            actualVpred.add_image(actualVpred_file, width='300px')
            actualVpred.add_caption(
                'Graph showing the predicted packing angle against the actual packing angle.'
            )

        with doc.create(pl.Table(position='!htbp')) as table:
            table.add_caption('Summary of results for all data')
            table.append(pl.Command('centering'))
            table.append(pl.NoEscape(df_all.to_latex(escape=False)))

        with doc.create(pl.Table(position='!htbp')) as table:
            table.add_caption('Summary of results for outliers.')
            table.append(pl.Command('centering'))
            table.append(pl.NoEscape(df_out.to_latex(escape=False)))

        with doc.create(pl.Figure(position='!htbp')) as graphs:
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.30\linewidth'))) as ang_dist_graph:
                ang_dist_graph.add_image(ang_dist_file,
                                         width=pl.NoEscape(r'\linewidth'))
                ang_dist_graph.add_caption(
                    'Frequency distribution of the packing angle.')
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.33\linewidth'))) as error_dist_graph:
                error_dist_graph.add_image(error_dist_file,
                                           width=pl.NoEscape(r'\linewidth'))
                error_dist_graph.add_caption(
                    'Distribution of errors calculated as the difference between the predicted and actual interface \
                        angle.')
            with doc.create(
                    pl.SubFigure(position='!htbp',
                                 width=pl.NoEscape(
                                     r'0.33\linewidth'))) as sqerror_graph:
                sqerror_graph.add_image(sqerror_file,
                                        width=pl.NoEscape(r'\linewidth'))
                sqerror_graph.add_caption(
                    'Squared error in predicted packing angle against actual packing angle.'
                )
            graphs.add_caption('Graphs for further metrics.')