Exemple #1
0
void Reflection::resetFlip()
{
    for (int j = 0; j < millerCount(); j++)
    {
        miller(j)->setFlipMatrix(MatrixPtr(new Matrix()));
    }
}
Exemple #2
0
template <typename PointT, typename FlannDistance> void
pcl::search::FlannSearch<PointT, FlannDistance>::convertInputToFlannMatrix ()
{
  size_t original_no_of_points = indices_ && !indices_->empty () ? indices_->size () : input_->size ();

  if (input_copied_for_flann_)
    delete input_flann_->ptr();
  input_copied_for_flann_ = true;
  index_mapping_.clear();
  identity_mapping_ = true;

  //cloud_ = (float*)malloc (original_no_of_points * dim_ * sizeof (float));
  //index_mapping_.reserve(original_no_of_points);
  //identity_mapping_ = true;

  if (!indices_ || indices_->empty ())
  {
    // best case: all points can be passed to flann without any conversions
    if (input_->is_dense && point_representation_->isTrivial ())
    {
      // const cast is evil, but flann won't change the data
      input_flann_ = MatrixPtr (new flann::Matrix<float> (const_cast<float*>(reinterpret_cast<const float*>(&(*input_) [0])), original_no_of_points, point_representation_->getNumberOfDimensions (),sizeof (PointT)));
      input_copied_for_flann_ = false;
    }
    else
    {
      input_flann_ = MatrixPtr (new flann::Matrix<float> (new float[original_no_of_points*point_representation_->getNumberOfDimensions ()], original_no_of_points, point_representation_->getNumberOfDimensions ()));
      float* cloud_ptr = input_flann_->ptr();
      for (size_t i = 0; i < original_no_of_points; ++i)
      {
        const PointT& point = (*input_)[i];
        // Check if the point is invalid
        if (!point_representation_->isValid (point))
        {
          identity_mapping_ = false;
          continue;
        }

        index_mapping_.push_back (static_cast<int> (i));  // If the returned index should be for the indices vector

        point_representation_->vectorize (point, cloud_ptr);
        cloud_ptr += dim_;
      }
    }

  }
  else
  {
    input_flann_ = MatrixPtr (new flann::Matrix<float> (new float[original_no_of_points*point_representation_->getNumberOfDimensions ()], original_no_of_points, point_representation_->getNumberOfDimensions ()));
    float* cloud_ptr = input_flann_->ptr();
    for (size_t indices_index = 0; indices_index < original_no_of_points; ++indices_index)
    {
      int cloud_index = (*indices_)[indices_index];
      const PointT&  point = (*input_)[cloud_index];
      // Check if the point is invalid
      if (!point_representation_->isValid (point))
      {
        identity_mapping_ = false;
        continue;
      }

      index_mapping_.push_back (static_cast<int> (indices_index));  // If the returned index should be for the indices vector

      point_representation_->vectorize (point, cloud_ptr);
      cloud_ptr += dim_;
    }
  }
  if (input_copied_for_flann_)
    input_flann_->rows = index_mapping_.size ();
}
Exemple #3
0
 void SwapBuffer::swap()
 {
     current_ = next_;
     next_ = MatrixPtr();
 }
Exemple #4
0
/**
 Hard-coding the matrix ambiguities for various twinnable space groups.
*/
MatrixPtr Reflection::matrixForAmbiguity(int i)
{
    if (i >= ambiguityCount())
        std::cout << "Ambiguity issue!" << std::endl;
    
    if (i == 0)
    {
        MatrixPtr identity = MatrixPtr(new Matrix());
        
        return identity;
    }
    
    if (i == 1)
    {
        if (ambiguityCount() == 2 || ambiguityCount() == 4)
        {
            MatrixPtr khMinusL = MatrixPtr(new Matrix());
            (*khMinusL)[0] = 0;
            (*khMinusL)[4] = 1;
            (*khMinusL)[1] = 1;
            (*khMinusL)[5] = 0;
            (*khMinusL)[10] = -1;
            
            return khMinusL;
        }
        
        if (ambiguityCount() == 3)
        {
            // return -h -k -l
            MatrixPtr minusHminusKL = MatrixPtr(new Matrix());
            (*minusHminusKL)[0] = -1;
            (*minusHminusKL)[5] = -1;
            (*minusHminusKL)[10] = 1;
            
            return minusHminusKL;
        }
    }
    
    if (i == 2)
    {
        if (ambiguityCount() == 3)
        {
            if (spgNum == 149 || spgNum == 151 || spgNum == 153)
            {
                // return k h -l
                MatrixPtr khMinusL = MatrixPtr(new Matrix());
                (*khMinusL)[0] = 0;
                (*khMinusL)[4] = 1;
                (*khMinusL)[1] = 1;
                (*khMinusL)[5] = 0;
                (*khMinusL)[10] = -1;
                
                return khMinusL;
            }
            
            if (spgNum == 152 || spgNum == 152 || spgNum == 154)
            {
                // return -k -h -l
                MatrixPtr minusAllHKL = MatrixPtr(new Matrix());
                (*minusAllHKL)[0] = -1;
                (*minusAllHKL)[5] = -1;
                (*minusAllHKL)[10] = -1;
                
                return minusAllHKL;
            }
        }

        if (ambiguityCount() == 4)
        {
            // return k h -l
            MatrixPtr khMinusL = MatrixPtr(new Matrix());
            (*khMinusL)[0] = 0;
            (*khMinusL)[4] = 1;
            (*khMinusL)[1] = 1;
            (*khMinusL)[5] = 0;
            (*khMinusL)[10] = -1;
            
            return khMinusL;
        }
    }
    
    if (i == 3)
    {
        if (ambiguityCount() == 4)
        {
            // return -k -h -l
            MatrixPtr minusAllHKL = MatrixPtr(new Matrix());
            (*minusAllHKL)[0] = -1;
            (*minusAllHKL)[5] = -1;
            (*minusAllHKL)[10] = -1;
            
            return minusAllHKL;
        }

    }
    
    return MatrixPtr(new Matrix());
}