view mosaics/src/convolution_2S.cpp @ 6:c9e0cd67dd84 draft

Uploaded
author dongjun
date Thu, 10 Jan 2013 15:57:50 -0500
parents b6d0c6ceda2c
children
line wrap: on
line source


#include <Rcpp.h>

using namespace Rcpp;

RCPP_FUNCTION_6(NumericVector,convolution_2S_cpp,IntegerVector y,NumericVector mu,NumericVector mu_U,NumericMatrix pN,NumericVector pS1,NumericVector pS2) {
	
	// result vector
	
	NumericVector conv1(y.size());
	NumericVector conv2(y.size());
	NumericVector conv(2*y.size());
	int conv_index = 0;
	
	// convolution
	// - length of y = length of mu
	// - rows of pN match mu_U
	
	for ( int i=0; i<y.size(); i++ ) {
		conv1[i] = 0.0;
		conv2[i] = 0.0;
		for ( int j=0; j<mu_U.size(); j++ ) {
			if ( mu_U[j]==mu[i] ) {
				for ( int k=0; k<=y[i]; k++ ) {
					conv1[i] += pS1[(y[i]-k)] * pN(j,k);
					conv2[i] += pS2[(y[i]-k)] * pN(j,k);
				}
			}
		}
	}
	
	// summarize results
	
	for ( int i=0; i<y.size(); i++ ) {
		conv[conv_index] = conv1[i];
		conv_index++;
		conv[conv_index] = conv2[i];
		conv_index++;
	}
	
	return conv;

}