CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

npstat::MultivariateFunctorScanner< IndexMapper > Class Template Reference

#include <MultivariateFunctorScanner.h>

List of all members.

Public Member Functions

 MultivariateFunctorScanner (const AbsMultivariateFunctor &fcn, const std::vector< IndexMapper > &maps)
double operator() (const unsigned *index, const unsigned indexLen) const

Private Member Functions

 MultivariateFunctorScanner ()

Private Attributes

std::vector< double > buf_
unsigned dim_
const AbsMultivariateFunctorfcn_
const std::vector< IndexMapper > & mapping_

Detailed Description

template<class IndexMapper>
class npstat::MultivariateFunctorScanner< IndexMapper >

This class adapts an object derived from AbsMultivariateFunctor so that it can be used with ArrayND method "functorFill" and such

Definition at line 27 of file MultivariateFunctorScanner.h.


Constructor & Destructor Documentation

template<class IndexMapper >
npstat::MultivariateFunctorScanner< IndexMapper >::MultivariateFunctorScanner ( const AbsMultivariateFunctor fcn,
const std::vector< IndexMapper > &  maps 
) [inline]

A mapper for each coordinate in the "maps" argument will convert the array index into a proper argument for the scanned density.

This functor will NOT make copies of either "fcn" or "maps" parameters. These parameters will be used by reference only (aliased). It is up to the user of this class to ensure proper lifetime of these objects.

Definition at line 40 of file MultivariateFunctorScanner.h.

References npstat::MultivariateFunctorScanner< IndexMapper >::dim_, and npstat::AbsMultivariateFunctor::maxDim().

            : fcn_(fcn), mapping_(maps), buf_(fcn.minDim()), dim_(fcn.minDim())
        {
            if (!(dim_ && dim_ == maps.size())) throw npstat::NpstatInvalidArgument(
                "In npstat::MultivariateFunctorScanner constructor: "
                "incompatible arguments");
            if (dim_ != fcn.maxDim()) throw npstat::NpstatInvalidArgument(
                "In npstat::MultivariateFunctorScanner constructor: "
                "functors of variable dimensionality are not supported");
        }
template<class IndexMapper >
npstat::MultivariateFunctorScanner< IndexMapper >::MultivariateFunctorScanner ( ) [private]

Member Function Documentation

template<class IndexMapper >
double npstat::MultivariateFunctorScanner< IndexMapper >::operator() ( const unsigned *  index,
const unsigned  indexLen 
) const [inline]

Calculate the functor value for the given array indices

Definition at line 53 of file MultivariateFunctorScanner.h.

References npstat::MultivariateFunctorScanner< IndexMapper >::buf_, npstat::MultivariateFunctorScanner< IndexMapper >::dim_, npstat::MultivariateFunctorScanner< IndexMapper >::fcn_, i, npstat::MultivariateFunctorScanner< IndexMapper >::mapping_, and x.

        {
            if (dim_ != indexLen) throw npstat::NpstatInvalidArgument(
                "In npstat::MultivariateFunctorScanner::operator(): "
                "incompatible input point dimensionality");
            assert(index);
            double* x = &buf_[0];
            for (unsigned i=0; i<dim_; ++i)
                x[i] = mapping_[i](index[i]);
            return fcn_(x, dim_);
        }

Member Data Documentation

template<class IndexMapper >
std::vector<double> npstat::MultivariateFunctorScanner< IndexMapper >::buf_ [mutable, private]
template<class IndexMapper >
unsigned npstat::MultivariateFunctorScanner< IndexMapper >::dim_ [private]
template<class IndexMapper >
const AbsMultivariateFunctor& npstat::MultivariateFunctorScanner< IndexMapper >::fcn_ [private]
template<class IndexMapper >
const std::vector<IndexMapper>& npstat::MultivariateFunctorScanner< IndexMapper >::mapping_ [private]