 class Characteristic {
 public:
 	// constructor
-	__device__ __host__ Characteristic(curandState& localState, int iter, int id) : state(localState), current_iter(iter), idata(id);
+	__device__ __host__ Characteristic(int iter, int id) : current_iter(iter), idata(id);
 	__device__ __host__ virtual ~Characteristic() {}
+
+	// set the state of the random number generator
+	void SetState(curandState& localState) { state = localState; }
 
 	// compute the conditional log-posterior density of the measurements given the characteristic
 	__device__ __host__ virtual double logdensity_meas(double* chi, double* meas, double* meas_unc)

	{
		int idata = blockDim.x * blockIdx.x + threadIdx.x;
		if (idata < c_ndata) {
			curandState localState = devStates;

		}


		logdensity_pop<ChiType><<<nBlocks,nThreads>>>(p_theta, p_chi, p_logdens);
        CUDA_CHECK_RETURN(cudaDeviceSynchronize());

        // copy initial values of logdensity to host
        h_logdens = d_logdens;

		// reset the number of MCMC iterations
		current_iter = 1;
		naccept = 0;
