docs: private ArrayList<PROCLUSCluster> assignPoints(ArrayDBIDs m_current, long[][] dimensions, Relation<V> database) {
      ModifiableDBIDs[] clusterIDs = new ModifiableDBIDs[dimensions.length];
      for(int i = 0; i < m_current.size(); i++) {
        clusterIDs[i] = DBIDUtil.newHashSet();
      }
  
      DBIDArrayIter m_i = m_current.iter();
      for(DBIDIter it = database.iterDBIDs(); it.valid(); it.advance()) {
        V p = database.get(it);
        double minDist = Double.NaN;
        int best = -1, i = 0;
        for(m_i.seek(0); m_i.valid(); m_i.advance(), i++) {
          V m = database.get(m_i);
          double currentDist = manhattanSegmentalDistance(p, m, dimensions[i]);
          if(!(minDist <= currentDist)) {
            minDist = currentDist;
            best = i;
          }
        }
        // add p to cluster with mindist
        assert best >= 0;
        clusterIDs[best].add(it);
      }
  
      ArrayList<PROCLUSCluster> clusters = new ArrayList<>(m_current.size());
      for(int i = 0; i < dimensions.length; i++) {
        ModifiableDBIDs objectIDs = clusterIDs[i];
        if(!objectIDs.isEmpty()) {
          long[] clusterDimensions = dimensions[i];
          double[] centroid = Centroid.make(database, objectIDs).getArrayRef();
          clusters.add(new PROCLUSCluster(objectIDs, clusterDimensions, centroid));
        }
        else {
          clusters.add(null);
        }
      }
  
      if(LOG.isDebugging()) {
        LOG.debugFine(new StringBuilder().append("clusters ").append(clusters).toString());
      }
      return clusters;
    }