private void writeSelf(
      String origTarget, GeneBranch currentParent, GeneBranch down, Writer writer1, Writer writer2)
      throws IOException {
    if (!down.isSelected()) return;

    String edgeTag;

    if (down.isLeaf() || travExp.getUpstream(down.gene).contains(currentParent)) {
      edgeTag = SIFEnum.CONTROLS_EXPRESSION_OF.getTag();
    } else edgeTag = SIFEnum.CONTROLS_STATE_CHANGE_OF.getTag();

    writer1.write(currentParent.gene + "\t" + edgeTag + "\t" + down.gene + "\n");

    writeWeights(origTarget, currentParent, down, edgeTag, writer2);

    writeBranches(origTarget, down, writer1, writer2);
  }