Program: 150556
Project: 150556
Buggy source:
/** 
 * For the two seed views just triangulate all the common features. The motion already has its translation normalized to one
 */
private void triangulateInitialSeed(CameraView origin,CameraMotion edge){
  CameraView viewA=edge.viewSrc;
  CameraView viewB=edge.viewDst;
  Vector3D_F64 arrowA=new Vector3D_F64();
  Vector3D_F64 arrowB=new Vector3D_F64();
  Se3_F64 viewAtoB=new Se3_F64();
  viewA.viewToWorld.concat(viewB.viewToWorld.invert(null),viewAtoB);
  for (int i=0; i < edge.features.size(); i++) {
    AssociatedIndex f=edge.features.get(i);
    if (viewA.features3D[f.src] != null || viewB.features3D[f.dst] != null)     continue;
    Point2D_F64 normA=viewA.featureNorm.get(f.src);
    Point2D_F64 normB=viewB.featureNorm.get(f.dst);
    Feature3D feature3D=new Feature3D();
    feature3D.feature.add(f.src);
    feature3D.feature.add(f.dst);
    arrowA.set(normA.x,normA.y,1);
    arrowB.set(normB.x,normB.y,1);
    GeometryMath_F64.mult(viewAtoB.R,arrowA,arrowA);
    double angle=UtilVector3D_F64.acute(arrowA,arrowB);
    if (angle < TRIANGULATE_MIN_ANGLE)     continue;
    if (!triangulate.triangulate(normA,normB,viewAtoB,feature3D.worldPt)) {
      System.out.println("String_Node_Str");
      continue;
    }
    if (viewB == origin) {
      SePointOps_F64.transformReverse(viewAtoB,feature3D.worldPt,feature3D.worldPt);
    }
    viewA.features3D[f.src]=feature3D;
    viewB.features3D[f.dst]=feature3D;
    if (feature3D.views.contains(viewA))     throw new RuntimeException("String_Node_Str");
    if (feature3D.views.contains(viewB))     throw new RuntimeException("String_Node_Str");
    feature3D.views.add(viewA);
    feature3D.views.add(viewB);
    features3D.add(feature3D);
  }
  System.out.println("String_Node_Str" + viewA.index + "String_Node_Str"+ viewB.index+ "String_Node_Str"+ features3D.size()+ "String_Node_Str"+ edge.features.size());
}

Fixed version (ground truth):
/** 
 * For the two seed views just triangulate all the common features. The motion already has its translation normalized to one
 */
private void triangulateInitialSeed(CameraView origin,CameraMotion edge){
  CameraView viewA=edge.viewSrc;
  CameraView viewB=edge.viewDst;
  Vector3D_F64 arrowA=new Vector3D_F64();
  Vector3D_F64 arrowB=new Vector3D_F64();
  Se3_F64 viewAtoB=new Se3_F64();
  viewA.viewToWorld.concat(viewB.viewToWorld.invert(null),viewAtoB);
  for (int i=0; i < edge.features.size(); i++) {
    AssociatedIndex f=edge.features.get(i);
    if (viewA.features3D[f.src] != null || viewB.features3D[f.dst] != null)     continue;
    Point2D_F64 normA=viewA.observationNorm.get(f.src);
    Point2D_F64 normB=viewB.observationNorm.get(f.dst);
    Feature3D feature3D=new Feature3D();
    feature3D.obsIdx.add(f.src);
    feature3D.obsIdx.add(f.dst);
    arrowA.set(normA.x,normA.y,1);
    arrowB.set(normB.x,normB.y,1);
    GeometryMath_F64.mult(viewAtoB.R,arrowA,arrowA);
    double angle=UtilVector3D_F64.acute(arrowA,arrowB);
    if (angle < TRIANGULATE_MIN_ANGLE)     continue;
    if (!triangulate.triangulate(normA,normB,viewAtoB,feature3D.worldPt)) {
      System.out.println("String_Node_Str");
      continue;
    }
    if (viewB == origin) {
      SePointOps_F64.transform(viewAtoB,feature3D.worldPt,feature3D.worldPt);
    }
    viewA.features3D[f.src]=feature3D;
    viewB.features3D[f.dst]=feature3D;
    if (feature3D.views.contains(viewA))     throw new RuntimeException("String_Node_Str");
    if (feature3D.views.contains(viewB))     throw new RuntimeException("String_Node_Str");
    feature3D.views.add(viewA);
    feature3D.views.add(viewB);
    features3D.add(feature3D);
  }
  System.out.println("String_Node_Str" + viewA.index + "String_Node_Str"+ viewB.index+ "String_Node_Str"+ features3D.size()+ "String_Node_Str"+ edge.features.size());
}