Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
GIDI_data.hpp
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# Copyright 2019, Lawrence Livermore National Security, LLC.
4# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus).
5# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT).
6# SPDX-License-Identifier: MIT
7# <<END-copyright>>
8*/
9
10#ifndef GIDI_data_hpp_included
11#define GIDI_data_hpp_included 1
12
13#include <stdio.h>
14#include <string>
15#include <vector>
16
17namespace GIDI {
18
19/*
20============================================================
21=========================== Data1d =========================
22============================================================
23*/
24class Data1d { // BRB: currently not used.
25
26 private:
27 std::vector<double> m_xs;
28 std::vector<double> m_ys;
29
30 public:
31 Data1d( std::size_t a_number, double const *const a_xs );
32 Data1d( std::size_t a_number, double const *const a_xs, double const *const a_ys );
33 Data1d( std::vector<double> const &a_xs );
34 Data1d( std::vector<double> const &a_xs, std::vector<double> const &a_ys );
35 Data1d( Data1d const &a_1dData );
36 ~Data1d( );
37
38 std::size_t size( ) const { return( m_xs.size( ) ); }
39
40 Data1d operator+( double a_value ) const ;
41 Data1d &operator+=( double a_value );
42 Data1d operator+( Data1d const &a_rhs ) const ;
43 Data1d &operator+=( Data1d const &a_rhs );
44
45 Data1d operator-( double a_value ) const ;
46 Data1d &operator-=( double a_value );
47 Data1d operator-( Data1d const &a_rhs ) const ;
48 Data1d &operator-=( Data1d const &a_rhs );
49
50 Data1d operator*( double a_value ) const ;
51 Data1d &operator*=( double a_value );
52 Data1d operator/( double a_value ) const ;
53 Data1d &operator/=( double a_value );
54
55 void print( std::string const &a_prefix ) const ;
56};
57
58/*
59============================================================
60========================== Vector ==========================
61============================================================
62*/
63class Vector {
64
65 private:
66 std::vector<double> m_vector; /**< The list of elements, each is a double instance. */
67
68 void writeWithBoundaries2( FILE *a_file, char const *a_format, std::vector<double> const &a_boundaries, double a_epsilon ) const ;
69
70 public:
71 Vector( std::size_t a_number = 0 );
72 Vector( std::vector<double> const &a_values );
73 Vector( std::size_t a_number, double const *a_values );
74 Vector( Vector const &a_vector );
75 ~Vector( );
76
77 Vector &operator=( Vector const &a_rhs );
78
79 std::size_t size( ) const { return( m_vector.size( ) ); } /**< Returns a number of elements of *this*. */
80 void resize( std::size_t a_number, double a_value = 0.0 ) { m_vector.resize( a_number, a_value ); } /**< Resizes *this* to *a_number* elements. For details, see std::vector.resize. */
81 std::vector<double> &data( ) { return( m_vector ); }
82
83 double &operator[]( std::size_t a_index ) { return( m_vector[a_index] ); } /**< Returns a reference to the (*a_index*-1)th element. */
84 double operator[]( std::size_t a_index ) const { return( m_vector[a_index] ); } /**< Returns a reference to the (*a_index*-1)th element. */
85
86 Vector operator+( double a_value ) const ;
87 Vector &operator+=( double a_value );
88 Vector operator+( Vector const &a_rhs ) const ;
89 Vector &operator+=( Vector const &a_rhs );
90
91 Vector operator-( double a_value ) const ;
92 Vector &operator-=( double a_value );
93 Vector operator-( Vector const &a_rhs ) const ;
94 Vector &operator-=( Vector const &a_rhs );
95
96 Vector operator*( double a_value ) const ;
97 Vector &operator*=( double a_value );
98
99 Vector operator/( double a_value ) const ;
100 Vector &operator/=( double a_value );
101
102 void reverse( );
103
104 void setToValueInFlatRange( std::size_t a_start, std::size_t a_end, double a_value );
105 double sum( );
106 void print( std::string const &a_prefix ) const ;
107 void write( FILE *a_file, std::string const &a_prefix ) const ;
108 void writeWithBoundaries( FILE *a_file, char const *a_format, std::vector<double> const &a_boundaries, double a_epsilon ) const ;
109};
110
111/*
112============================================================
113========================== Matrix ==========================
114============================================================
115*/
116class Matrix {
117
118 private:
119 std::vector<Vector> m_matrix; /**< The list of rows, each is a Vector instance. */
120
121 public:
122 Matrix( std::size_t a_rows, std::size_t a_columns );
123 Matrix( Matrix const &a_gidi_matrix );
124 ~Matrix( );
125 Matrix &operator=( Matrix const &a_rhs );
126
127 std::size_t size( ) const { return( m_matrix.size( ) ); } /**< Returns the number of rows or *this*. */
128
129 Vector &operator[]( std::size_t a_index ) { return( m_matrix[a_index] ); } /**< Returns a reference to the (*a_index*-1)th row. */
130 Vector const &operator[]( std::size_t a_index ) const { return( m_matrix[a_index] ); } /**< Returns a reference to the (*a_index*-1)th row. */
131
132 /** Sets the cell at row **a_row** and column **a_column** to **a_value**. */
133 void operator()( std::size_t a_row /**< The cell's row. */,
134 std::size_t a_column /**< The cell's row. */,
135 double a_value /**< The value to put in the cell. */ )
136 { m_matrix[a_row][a_column] = a_value; }
137
138 std::vector<Vector> const &matrix( ) const { return( m_matrix ); }
139
140 Matrix operator+( double a_value ) const ;
141 Matrix &operator+=( double a_value );
142 Matrix operator+( Matrix const &a_rhs ) const ;
143 Matrix &operator+=( Matrix const &a_rhs );
144
145 Matrix operator-( double a_value ) const ;
146 Matrix &operator-=( double a_value );
147 Matrix operator-( Matrix const &a_rhs ) const ;
148 Matrix &operator-=( Matrix const &a_rhs );
149
150 Matrix operator*( double a_value ) const ;
151 Matrix &operator*=( double a_value );
152
153 Matrix operator/( double a_value ) const ;
154 Matrix &operator/=( double a_value );
155
156 std::size_t numberOfColumns( ) const ;
157 /** Sets the cell at row **a_row** and column **a_column** to **a_value**. */
158 void set( std::size_t a_row /**< The cell's row. */,
159 std::size_t a_column /**< The cell's row. */,
160 double a_value /**< The value to put in the cell. */ )
161 { m_matrix[a_row][a_column] = a_value; }
162 /** Sets the row at **a_row** to **a_vector**. */
163 void set( std::size_t a_row /**< The row to set. */,
164 Vector const &a_vector /**< The Vector to set at row **a_row**. */ )
165 { m_matrix[a_row] = a_vector; }
166 void push_back( Vector const &a_vector );
167 Matrix transpose( );
168 void reverse( );
169 void print( std::string const &a_prefixForRow ) const ;
170};
171
172}
173
174#endif // End of GIDI_data_hpp_included
Data1d(std::size_t a_number, double const *const a_xs)
std::size_t size() const
Definition GIDI_data.hpp:38
Data1d & operator-=(double a_value)
Data1d operator/(double a_value) const
Data1d & operator*=(double a_value)
Data1d operator*(double a_value) const
void print(std::string const &a_prefix) const
Data1d operator+(double a_value) const
Data1d operator-(double a_value) const
Data1d & operator+=(double a_value)
Data1d & operator/=(double a_value)
Matrix operator*(double a_value) const
Matrix & operator/=(double a_value)
Matrix & operator+=(double a_value)
Matrix & operator*=(double a_value)
std::vector< Vector > const & matrix() const
std::size_t size() const
Matrix transpose()
Matrix operator/(double a_value) const
Matrix & operator=(Matrix const &a_rhs)
void set(std::size_t a_row, Vector const &a_vector)
Matrix operator-(double a_value) const
Matrix(std::size_t a_rows, std::size_t a_columns)
Matrix operator+(double a_value) const
Vector & operator[](std::size_t a_index)
void operator()(std::size_t a_row, std::size_t a_column, double a_value)
void print(std::string const &a_prefixForRow) const
std::size_t numberOfColumns() const
void set(std::size_t a_row, std::size_t a_column, double a_value)
Vector const & operator[](std::size_t a_index) const
void push_back(Vector const &a_vector)
Matrix & operator-=(double a_value)
std::vector< double > & data()
Definition GIDI_data.hpp:81
Vector & operator+=(double a_value)
Vector operator+(double a_value) const
Vector & operator*=(double a_value)
double & operator[](std::size_t a_index)
Definition GIDI_data.hpp:83
std::size_t size() const
Definition GIDI_data.hpp:79
Vector operator/(double a_value) const
void setToValueInFlatRange(std::size_t a_start, std::size_t a_end, double a_value)
Vector & operator=(Vector const &a_rhs)
void writeWithBoundaries(FILE *a_file, char const *a_format, std::vector< double > const &a_boundaries, double a_epsilon) const
Vector & operator-=(double a_value)
void write(FILE *a_file, std::string const &a_prefix) const
double operator[](std::size_t a_index) const
Definition GIDI_data.hpp:84
Vector & operator/=(double a_value)
void print(std::string const &a_prefix) const
Vector operator-(double a_value) const
Vector(std::size_t a_number=0)
void resize(std::size_t a_number, double a_value=0.0)
Definition GIDI_data.hpp:80
Vector operator*(double a_value) const
Definition GIDI.hpp:32