Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/IO/PDFWriter.hpp
4 : : \copyright 2012-2015 J. Bakosi,
5 : : 2016-2018 Los Alamos National Security, LLC.,
6 : : 2019-2021 Triad National Security, LLC.,
7 : : 2022-2024 J. Bakosi
8 : : All rights reserved. See the LICENSE file for details.
9 : : \brief PDF writer class declaration
10 : : \details This file declares a PDF writer class that facilitates outputing
11 : : probability density functions (PDFs) into files in various formats using
12 : : various configurations.
13 : : */
14 : : // *****************************************************************************
15 : : #pragma once
16 : :
17 : : #include <string>
18 : : #include <iostream>
19 : :
20 : : #include "Writer.hpp"
21 : : #include "UniPDF.hpp"
22 : : #include "StatCtr.hpp"
23 : :
24 : : namespace tk {
25 : :
26 : : //! PDFWriter : Writer
27 : : class PDFWriter : public tk::Writer {
28 : :
29 : : public:
30 : : //! Constructor
31 : : explicit PDFWriter(
32 : : const std::string& filename,
33 : : const std::string& format = "default",
34 : : std::streamsize precision = std::cout.precision() );
35 : :
36 : : //! Write univariate PDF to text file
37 : : void writeTxt( const UniPDF& pdf, const tk::ctr::PDFInfo& info ) const;
38 : :
39 : : private:
40 : : //! Assert the number of sample space dimensions given
41 : : template< std::size_t size, class Container >
42 : 726 : void assertSampleSpaceDimensions( [[maybe_unused]] const Container& c )
43 : : const {
44 [ - + ][ - - ]: 726 : Assert( c.size() == size,
[ - - ][ - - ]
[ - - ][ - - ]
45 : : "Number of sample space variables must equal " +
46 : : std::to_string( size ) + " in PDF writer." );
47 : 726 : }
48 : :
49 : : //! Assert the number of sample space extents given
50 : : template< std::size_t size, class Container >
51 : 1452 : void assertSampleSpaceExtents( const Container& c ) const {
52 [ - + ]: 1452 : if (!c.empty())
53 [ - - ][ - - ]: 0 : Assert( c.size() == size*2,
[ - - ][ - - ]
[ - - ][ - - ]
54 : : "PDF user-specified sample space extents must be defined by " +
55 : : std::to_string( size*2 ) +" real numbers: minx, maxx, ..." );
56 : 1452 : }
57 : :
58 : : //! Query extents and other metadata of univariate PDF sample space
59 : : void extents( const UniPDF& pdf,
60 : : const std::vector< tk::real >& uext,
61 : : std::size_t& nbi,
62 : : tk::real& min,
63 : : tk::real& max,
64 : : tk::real& binsize,
65 : : std::array< long, 2*UniPDF::dim >& ext,
66 : : std::vector< tk::real >& outpdf ) const;
67 : : };
68 : :
69 : : } // tk::
|