50Polynomial1d::Polynomial1d(
Axes const &a_axes,
double a_domainMin,
double a_domainMax, std::vector<double>
const &a_coefficients,
int a_index,
double a_outerDomainValue ) :
52 m_domainMin( a_domainMin ),
53 m_domainMax( a_domainMax ),
54 m_coefficients( a_coefficients ) {
70 nf_Buffer<double> coeff;
72 m_coefficients = coeff.vector();
83 m_domainMin( a_polynomial1d.
domainMin( ) ),
84 m_domainMax( a_polynomial1d.
domainMax( ) ),
107 if( a_x1 < m_domainMin )
return( 0.0 );
108 if( a_x1 > m_domainMax )
return( 0.0 );
110 for( std::vector<double>::const_reverse_iterator riter = m_coefficients.rbegin( ); riter != m_coefficients.rend( ); ++riter ) {
111 _value = *riter + _value * a_x1;
126void Polynomial1d::mapToXsAndAdd( std::size_t a_offset, std::vector<double>
const &a_Xs, std::vector<double> &a_results,
double a_scaleFactor )
const {
128 if( a_Xs.size( ) != a_results.size( ) )
throw Exception(
"Constant1d::mapToXsAndAdd: a_Xs.size( ) != a_results.size( )." );
130 std::size_t
index = 0;
131 auto XsIter = a_Xs.begin( );
133 for( ; XsIter != a_Xs.end( ); ++XsIter, ++
index ) {
134 if( a_offset ==
index )
break;
137 for( ; XsIter != a_Xs.end( ); ++XsIter, ++
index ) {
138 if( *XsIter >= m_domainMin )
break;
141 for( ; XsIter != a_Xs.end( ); ++XsIter, ++
index ) {
142 if( *XsIter > m_domainMax )
break;
161 XYs1d *xys1d =
nullptr;
163 if( m_coefficients.size( ) < 3 ) {
164 double offset = 0.0, slope = 0.0;
165 if( m_coefficients.size( ) > 0 ) {
166 offset = m_coefficients[0];
167 if( m_coefficients.size( ) == 2 ) slope = m_coefficients[1];
170 std::vector<double> xs( 2 );
174 std::vector<double> ys( 2 );
175 ys[0] = slope * xs[0] +
offset;
176 ys[1] = slope * xs[1] +
offset;
182 if( ptwXYPoints1 !=
nullptr ) xys1d =
new XYs1d(
axes( ), ptwXYPoints1 );
200 std::string attributes;
G4ThreadLocal T * G4GeomSplitter< T >::offset
#define GIDI_outerDomainValueChars
#define GIDI_domainMaxChars
#define GIDI_domainMinChars
#define GIDI_polynomial1dChars
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
void toXMLList_func(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions) const
Polynomial1d(Axes const &a_axes, double a_domainMin, double a_domainMax, std::vector< double > const &a_coefficients, int a_index=0, double a_outerDomainValue=0.0)
XYs1d * asXYs1d(bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps) const
double evaluate(double a_x1) const
void mapToXsAndAdd(std::size_t a_offset, std::vector< double > const &a_Xs, std::vector< double > &a_results, double a_scaleFactor) const
std::vector< double > const & coefficients() const
std::string const & moniker() const
std::string attribute() const
void addNodeEnder(std::string const &a_moniker)
std::string incrementalIndent(std::string const &indent)
void addNodeStarter(std::string const &indent, std::string const &a_moniker, std::string const &a_attributes="")
std::string addAttribute(std::string const &a_name, std::string const &a_value) const
Node child(const char *name) const
void parseValuesOfDoubles(Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer< double > &a_vector)
void doublesToXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, std::vector< double > const &a_values, std::size_t a_start=0, bool a_newLine=true, std::string const &a_valueType="")
std::string intToString(int a_value)
std::string doubleToShortestString(double a_value, int a_significantDigits=15, int a_favorEFormBy=0)
enum nfu_status_e nfu_status
ptwXYPoints * ptwXY_createFromFunction(statusMessageReporting *smr, int n, double *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax)
@ ptwXY_interpolationLinLin
struct ptwXYPoints_s ptwXYPoints