Ejemplo n.º 1
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.º 2
0
ZSwcTree* ZSwcGenerator::createSwc(const ZFlyEmNeuronRange &range)
{
  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();

  for (double z = minZ; z <= maxZ; z += dz) {
    double r = range.getRadius(z);
    ZSwcTree *subtree = createCircleSwc(0, 0, z, r);
    tree->merge(subtree, true);
  }

  tree->resortId();

  return tree;
}
Ejemplo n.º 3
0
ZSwcTree* ZSwcGenerator::createSwc(
    const ZObject3dScan &blockObj, int z, const ZDvidInfo &dvidInfo)
{
#ifdef _FLYEM_
  ZObject3dScan slice = blockObj.getSlice(z);
  size_t stripeNumber = slice.getStripeNumber();

  ZSwcTree *tree = new ZSwcTree;
  for (size_t s = 0; s < stripeNumber; ++s) {
    const ZObject3dStripe &stripe = slice.getStripe(s);
    int nseg = stripe.getSegmentNumber();
    int y = stripe.getY();
    int z = stripe.getZ();
    for (int i = 0; i < nseg; ++i) {
      int x0 = stripe.getSegmentStart(i);
      int x1 = stripe.getSegmentEnd(i);
      for (int x = x0; x <= x1; ++x) {
        ZIntCuboid cuboid = dvidInfo.getBlockBox(x, y, z);
        tree->merge(createBoxSwc(cuboid));
      }
    }
  }

  return tree;
#else
  UNUSED_PARAMETER(&blockObj);
  UNUSED_PARAMETER(z);
  UNUSED_PARAMETER(&dvidInfo);
  return NULL;
#endif
}
Ejemplo n.º 4
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.º 5
0
ZSwcTree* ZSwcGenerator::createSwc(
    const ZIntCuboidFaceArray &faceArray, double radius)
{
  if (faceArray.empty()) {
    return NULL;
  }

  ZSwcTree *tree = new ZSwcTree;

  for (ZIntCuboidFaceArray::const_iterator iter = faceArray.begin();
       iter != faceArray.end(); ++iter) {
    ZSwcTree *subtree = createSwc(*iter, radius);
    tree->merge(subtree, true);
  }

  return tree;
}
Ejemplo n.º 6
0
ZSwcTree* ZSwcGenerator::createSwc(
    const ZFlyEmNeuronRange &range, const ZFlyEmNeuronAxis &axis)
{
  double minZ = range.getMinZ();
  double maxZ = range.getMaxZ();

  double dz = (maxZ - minZ) / 50.0;

  ZSwcTree *tree = createVirtualRootSwc();

  for (double z = minZ; z <= maxZ; z += dz) {
    double r = range.getRadius(z);
    ZPoint pt = axis.getCenter(z);
    ZSwcTree *subtree = createCircleSwc(pt.x(), pt.y(), z, r);
    tree->merge(subtree, true);
  }

  tree->resortId();

  return tree;
}
Ejemplo n.º 7
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.º 8
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;
}