You need an empty constructor for any object you want to store in vectors. Eg.
vector<lsst::fw::MaskedPixelAccessor<PixelT, MaskT> > convolvedAccessorRowVec(10);
requires
MaskedPixelAccessor();
However,
vector<lsst::fw::MaskedPixelAccessor<PixelT, MaskT> > convolvedAccessorRowVec();
does not. This means that making vectors of MaskedPixelAccessor? requires push_back instead of setting elements
typedef and typename
typename lsst::fw::MaskedImage<PixelT,MaskT>::MaskedImagePtrT imageToConvolvePtr;
typename lsst::fw::MaskedImage<PixelT,MaskT>::MaskedImagePtrT imageToNotConvolvePtr;
or
typedef typename MaskedImage<PixelT,MaskT>::MaskedImagePtrT maskedImagePtrTType;
maskedImagePtrTType imageToConvolvePtr;
maskedImagePtrTType imageToNotConvolvePtr;
ptrs!
computePSFMatchingKernelForPostageStamp(*imageToConvolvePtr, *imageToNotConvolvePtr, kernelBasisSet, kernelCoeffs);
when
template <class PixelT, class MaskT, class KernelT>
void lsst::imageproc::computePSFMatchingKernelForPostageStamp(
lsst::fw::MaskedImage<PixelT, MaskT> const &imageToConvolve, ///< Goes with the code
lsst::fw::MaskedImage<PixelT, MaskT> const &imageToNotConvolve, ///< This is for doxygen
lsst::fw::LinearCombinationKernel<KernelT> &kernelBasisSet, ///< This is for doxygen
std::vector<KernelT> &kernelCoeffs ///< This is for doxygen
) {
iterators!
std::vector<boost::shared_ptr<lsst::fw::Kernel<PixelT> > > kernelList = kernelBasisSet.getKernelList();
for (unsigned ki = 0; ki < nKernelParameters; ki++) {
lsst::fw::MaskedImage<PixelT, MaskT>
convolvedImage = lsst::fw::kernel::convolve(imageToConvolve, *(kernelList[ki]), 0.0, vw::NoEdgeExtension());
convolvedImageVec.push_back(convolvedImage);
}
to
typename std::vector<boost::shared_ptr<lsst::fw::Kernel<PixelT> > >::iterator kiter = kernelList.begin();
for (; kiter != kernelList.end(); ++kiter) {
lsst::fw::MaskedImage<PixelT, MaskT>
convolvedImage = lsst::fw::kernel::convolve(imageToConvolve, *kiter, 0.0, vw::NoEdgeExtension());
convolvedImageVec.push_back(convolvedImage);
}
