Ejemplo n.º 1
0
void FlyEm::ZSubstackRoi::exportSwc(const string &filePath)
{
  if (!m_cuboidArray.empty()) {
    ZSwcTree *tree = new ZSwcTree;
    int index = 0;
    for (ZIntCuboidArray::const_iterator iter = m_cuboidArray.begin();
         iter != m_cuboidArray.end(); ++iter, ++index) {
      ZCuboid cuboid;
      cuboid.set(iter->cb[0], iter->cb[1], iter->cb[2], iter->ce[0], iter->ce[1],
          iter->ce[2]);
      ZSwcTree *subtree = ZSwcTree::CreateCuboidSwc(cuboid);
      if (!m_idArray.empty()) {
        subtree->setType(m_idArray[index]);
      } else {
        subtree->setType(index);
      }
      tree->merge(subtree, true);
    }

    tree->resortId();
    tree->save(filePath);

    delete tree;
  }
}
Ejemplo n.º 2
0
ZSwcTree* ZSwcGenerator::createRangeCompareSwc(
    const ZFlyEmNeuronRange &range, const ZFlyEmNeuronRange &reference)
{
  if (range.isEmpty()) {
    return NULL;
  }

  double minZ = range.getMinZ();
  double maxZ = range.getMaxZ();

  double dz = (maxZ - minZ) / 50.0;

  if (dz == 0.0) { //Avoid dead loop
    dz = 1.0;
  }

  ZSwcTree *tree = createVirtualRootSwc();

  double minReferenceZ = reference.getMinZ();
  double maxReferenceZ = reference.getMaxZ();

  for (double z = minReferenceZ; z < minZ; z += dz) {
    ZSwcTree *subtree = createCircleSwc(0, 0, z, reference.getRadius(z));
    subtree->setType(5);
    tree->merge(subtree, true);
  }

  for (double z = maxZ + dz; z <= maxReferenceZ; z += dz) {
    ZSwcTree *subtree = createCircleSwc(0, 0, z, reference.getRadius(z));
    subtree->setType(5);
    tree->merge(subtree, true);
  }

  for (double z = minZ; z <= maxZ; z += dz) {
    double r = range.getRadius(z);
    ZSwcTree *subtree = createCircleSwc(0, 0, z, r);
    ZFlyEmNeuronRangeCompare comp;
    ZFlyEmNeuronRangeCompare::EMatchStatus status =
        comp.compare(range, reference, z);
    switch (status) {
    case ZFlyEmNeuronRangeCompare::MISSING_BRANCH:
      subtree->setType(2);
      break;
    case ZFlyEmNeuronRangeCompare::EXTRA_BRANCH:
      subtree->setType(3);
      break;
    case ZFlyEmNeuronRangeCompare::GOOD_MATCH:
      subtree->setType(0);
      break;
    default:
      subtree->setType(0);
    }

    tree->merge(subtree, true);
  }

  tree->resortId();

  return tree;
}
Ejemplo n.º 3
0
void ZIntCuboidArray::exportSwc(const string &filePath) const
{
  if (!empty()) {
    ZSwcTree *tree = new ZSwcTree;
    int index = 0;
    for (ZIntCuboidArray::const_iterator iter = begin(); iter != end();
         ++iter, ++index) {
      ZCuboid cuboid;
      cuboid.set(iter->cb[0], iter->cb[1], iter->cb[2], iter->ce[0], iter->ce[1],
          iter->ce[2]);
      ZSwcTree *subtree = ZSwcTree::CreateCuboidSwc(cuboid);
      subtree->setType(index);
      tree->merge(subtree, true);
    }

    tree->resortId();
    tree->save(filePath);

    delete tree;
  }
}
Ejemplo n.º 4
0
ZSwcTree* ZIntCuboidArray::toSwc() const
{
  ZSwcTree *tree = NULL;
  if (!empty()) {
    tree = new ZSwcTree;
    int index = 0;
    for (ZIntCuboidArray::const_iterator iter = begin(); iter != end();
         ++iter, ++index) {
      ZCuboid cuboid;
      cuboid.set(iter->cb[0], iter->cb[1], iter->cb[2], iter->ce[0], iter->ce[1],
          iter->ce[2]);
      ZSwcTree *subtree = ZSwcTree::CreateCuboidSwc(cuboid);
      subtree->setType(index);
      tree->merge(subtree, true);
    }

    tree->resortId();
  }

  return tree;
}