Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
GIDI_1dData.cc
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#include "GIDI.hpp"
11
12namespace GIDI {
13
14/*! \class Data1d
15 * Currently not used.
16 */
17
18/*
19============================================================
20 *
21 * @param a_number
22 * @param a_xs
23 * @return
24 */
25Data1d::Data1d( std::size_t a_number, double const *const a_xs ) {
26
27 m_xs.resize( a_number );
28 m_ys.resize( a_number );
29
30 for( std::size_t i1 = 0; i1 < a_number; ++i1 ) {
31 m_xs[i1] = a_xs[i1];
32 m_ys[i1] = 0.0;
33 }
34}
35/*
36============================================================
37 *
38 * @param a_number
39 * @param a_xs
40 * @param a_ys
41 * @return
42 */
43Data1d::Data1d( std::size_t a_number, double const *const a_xs, double const *const a_ys ) {
44
45 m_xs.resize( a_number );
46 m_ys.resize( a_number );
47 for( std::size_t i1 = 0; i1 < a_number; ++i1 ) {
48 m_xs[i1] = a_xs[i1];
49 m_ys[i1] = a_ys[i1];
50 }
51}
52/*
53============================================================
54 *
55 * @param a_xs
56 * @return
57 */
58Data1d::Data1d( std::vector<double> const &a_xs ) {
59
60 m_xs = a_xs;
61 m_ys.resize( a_xs.size( ) );
62 for( std::vector<double>::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter = 0.0;
63}
64/*
65============================================================
66 *
67 * @param a_xs
68 * @param a_ys
69 * @return
70 */
71Data1d::Data1d( std::vector<double> const &a_xs, std::vector<double> const &a_ys ) {
72
73 if( a_xs.size( ) != a_ys.size( ) ) throw Exception( "sizes not the same" );
74 m_xs = a_xs;
75 m_ys = a_ys;
76}
77/*
78============================================================
79 *
80 * @param a_gidi_1dData
81 * @return
82 */
83Data1d::Data1d( Data1d const &a_gidi_1dData ) {
84
85 m_xs = a_gidi_1dData.m_xs;
86 m_ys = a_gidi_1dData.m_ys;
87}
88/*
89============================================================
90*/
92
93}
94
95/*
96============================================================
97============================ add ===========================
98============================================================
99 */
100Data1d Data1d::operator+( double a_value ) const {
101
102 Data1d gidi_1dData( *this );
103
104 gidi_1dData += a_value;
105 return( gidi_1dData );
106}
107/*
108============================================================
109 */
110Data1d &Data1d::operator+=( double a_value ) {
111
112 for( std::vector<double>::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter += a_value;
113 return( *this );
114}
115/*
116============================================================
117 */
118Data1d Data1d::operator+( Data1d const &a_rhs ) const {
119
120 Data1d gidi_1dData( *this );
121
122 gidi_1dData += a_rhs;
123 return( gidi_1dData );
124}
125/*
126============================================================
127 */
129
130 std::size_t __size = size( );
131
132 if( __size != a_rhs.size( ) ) throw Exception( "data1d sizes differ." );
133 for( std::size_t i1 = 0; i1 < __size; ++i1 ) m_ys[i1] += a_rhs.m_ys[i1];
134 return( *this );
135}
136
137/*
138============================================================
139========================== subtract ========================
140============================================================
141 */
142Data1d Data1d::operator-( double a_value ) const {
143
144 Data1d gidi_1dData( *this );
145
146 gidi_1dData -= a_value;
147 return( gidi_1dData );
148}
149/*
150============================================================
151 */
152Data1d &Data1d::operator-=( double a_value ) {
153
154 for( std::vector<double>::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter -= a_value;
155 return( *this );
156}
157/*
158============================================================
159 */
160Data1d Data1d::operator-( Data1d const &a_rhs ) const {
161
162 Data1d gidi_1dData( *this );
163
164 gidi_1dData -= a_rhs;
165 return( gidi_1dData );
166}
167/*
168============================================================
169 */
171
172 std::size_t __size = size( );
173
174 if( __size != a_rhs.size( ) ) throw Exception( "data1d sizes differ." );
175 for( std::size_t i1 = 0; i1 < __size; ++i1 ) m_ys[i1] -= a_rhs.m_ys[i1];
176 return( *this );
177}
178
179/*
180============================================================
181========================== multiply ========================
182============================================================
183 */
184Data1d Data1d::operator*( double a_value ) const {
185
186 Data1d gidi_1dData( *this );
187
188 gidi_1dData *= a_value;
189 return( gidi_1dData );
190}
191/*
192============================================================
193 */
194Data1d &Data1d::operator*=( double a_value ) {
195
196 for( std::vector<double>::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter *= a_value;
197 return( *this );
198}
199
200/*
201============================================================
202========================== divide ==========================
203============================================================
204 */
205Data1d Data1d::operator/( double a_value ) const {
206
207 Data1d gidi_1dData( *this );
208
209 gidi_1dData /= a_value;
210 return( gidi_1dData );
211}
212/*
213============================================================
214 */
215Data1d &Data1d::operator/=( double a_value ) {
216
217 if( a_value == 0 ) throw Exception( "divide by zero." );
218 for( std::vector<double>::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter /= a_value;
219 return( *this );
220}
221
222/*
223============================================================
224========================== others ==========================
225============================================================
226 */
227void Data1d::print( std::string const &a_prefix ) const {
228
229 std::size_t __size = size( );
230
231 for( std::size_t i1 = 0; i1 < __size; ++i1 ) {
232 std::cout << a_prefix;
233 printf( "%18.11e %18.11e", m_xs[i1], m_ys[i1] );
234 std::cout << std::endl;
235 }
236}
237
238}
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)
Definition GIDI.hpp:32