bool ToFCameraPMDController::GetAmplitudes(float* amplitudeArray)
 {
   float* tempArray = new float[m_CaptureWidth*m_CaptureHeight];
   this->m_PMDRes = pmdGetAmplitudes(m_PMDHandle, tempArray, this->m_NumberOfBytes);
   TransformCameraOutput(tempArray, amplitudeArray, false);
   delete[] tempArray;
   return ErrorText(this->m_PMDRes);
 }
 bool ToFCameraPMDController::GetAmplitudes(float* amplitudeArray)
 {
   this->m_PMDRes = pmdGetAmplitudes(m_PMDHandle, amplitudeArray, this->m_NumberOfBytes);
   return ErrorText(this->m_PMDRes);
 }
/**
 *
 * @brief Publish the data based on set up parameters.
 *
 */
int publishData() {

	/*
	 * Update Camera settings
	 */
	res = pmdUpdate (hnd);
	if (res != PMD_OK)
	{
		pmdGetLastError (hnd, err, 128);
		ROS_ERROR_STREAM("Could transfer data: " << err);
		pmdClose (hnd);
		return 0;
	}

	/*
	 * Obtain PointClouds
	 */
	if (!cartesianDist)
		cartesianDist = new float [noOfRows * noOfColumns * 3];
	res = pmdGet3DCoordinates (hnd, cartesianDist, noOfColumns * noOfRows * 3 * sizeof (float));
	if (res != PMD_OK)
	{
		pmdGetLastError (hnd, err, 128);
		ROS_ERROR_STREAM("Could get cartesian coordinates: " << err);
		pmdClose (hnd);
		return 0;
	}


	/*
	 * Obtain Amplitude Values
	 */
	if (!amplitudes)
		amplitudes = new float [noOfRows * noOfColumns];

	res = pmdGetAmplitudes (hnd, amplitudes, noOfRows * noOfColumns * sizeof (float));
	if (res != PMD_OK)
	{
		pmdGetLastError (hnd, err, 128);
		ROS_ERROR_STREAM("Could get amplitude values: " << err);
		pmdClose (hnd);
		return 1;
	}

	/*
	 * Creating the pointcloud
	 */
	 
	// Fill in the cloud data
	PointCloud::Ptr msg_non_filtered (new PointCloud);
	msg_non_filtered->header.frame_id = "tf_argos3d";
	msg_non_filtered->height = 1;
	msg_non_filtered->width = noOfRows*noOfColumns;
	
	PointCloud::Ptr msg_filtered (new PointCloud);
	msg_filtered->header.frame_id = "tf_argos3d";
	msg_filtered->width    = 1;
	msg_filtered->height   = noOfColumns*noOfRows;
	msg_filtered->is_dense = false;
	//msg_filtered->points.resize (noOfRows*noOfColumns);

	int countWidth=0;

	for (size_t i = 0; i < noOfRows*noOfColumns; ++i)	{
		pcl::PointXYZI temp_point;
		temp_point.x = cartesianDist[(i*3) + 0]*flip_x;
	 	temp_point.y = cartesianDist[(i*3) + 1]*flip_y;
	 	temp_point.z = cartesianDist[(i*3) + 2];
	 	temp_point.intensity = amplitudes[i];

		if(AmplitudeFilterOn==true && amplitudes[i]>AmplitudeThreshold) {
			msg_filtered->points.push_back(temp_point);
			countWidth++;
		}
		msg_non_filtered->points.push_back(temp_point);
	}
	msg_filtered->height   = countWidth;

	 /*
	  * Publishing the messages
	  */
	 if(AmplitudeFilterOn){
		#if ROS_VERSION > ROS_VERSION_COMBINED(1,9,49)
			msg_filtered->header.stamp = ros::Time::now().toNSec();
		#else
			msg_filtered->header.stamp = ros::Time::now();
		#endif
			pub_filtered.publish (msg_filtered);
	 }

	#if ROS_VERSION > ROS_VERSION_COMBINED(1,9,49)
		msg_non_filtered->header.stamp = ros::Time::now().toNSec();
	#else
		msg_non_filtered->header.stamp = ros::Time::now();
	#endif
		pub_non_filtered.publish (msg_non_filtered);

	return 1;
}