Program: 180351
Project: 180351
Buggy source:
@Override protected SpawnedResult spawnTrajectories(Trajectory trajectory,Trajectory neighbor,Distance distance){
  int diffDimension=-1;
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (trajectory.getFirstPoint().getValue(dim) != neighbor.getFirstPoint().getValue(dim)) {
      if (diffDimension != -1) {
        throw new IllegalStateException("String_Node_Str");
      }
      diffDimension=dim;
    }
  }
  float radius=Math.abs(trajectory.getFirstPoint().getValue(diffDimension) - neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  float[] middleSeedData=trajectory.getFirstPoint().toArrayCopy();
  middleSeedData[diffDimension]=(trajectory.getFirstPoint().getValue(diffDimension) - neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  Trajectory middleTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),middleSeedData);
  List<Trajectory> neighborTrajectories=new ArrayList<Trajectory>();
  List<Trajectory> spawnedSecondaryTrajectories=new ArrayList<Trajectory>();
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (dim == diffDimension) {
      continue;
    }
    for (int sign=-1; sign <= 1; sign+=2) {
      float[] newPointData=middleTrajectory.getFirstPoint().toArrayCopy();
      newPointData[dim]+=sign * radius;
      Trajectory newTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),newPointData);
      if (alreadySpawnedCollisionTrajectories.containsKey(newTrajectory.getFirstPoint())) {
        newTrajectory=alreadySpawnedCollisionTrajectories.get(newTrajectory.getFirstPoint());
      }
 else {
        alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),newTrajectory);
        spawnedSecondaryTrajectories.add(newTrajectory);
      }
      neighborTrajectories.add(newTrajectory);
    }
  }
  Map<Point,DataBlock<Trajectory>> neighborhood=new HashMap<Point,DataBlock<Trajectory>>(neighborTrajectories.size() + 1);
  neighborhood.put(middleTrajectory.getFirstPoint(),new ListDataBlock<Trajectory>(neighborTrajectories));
  Collection<Trajectory> spawnedCol=new ArrayList<Trajectory>();
  spawnedCol.add(middleTrajectory);
  return new SpawnedResult(neighborhood,spawnedCol,spawnedSecondaryTrajectories);
}

Fixed version (ground truth):
@Override protected SpawnedResult spawnTrajectories(Trajectory trajectory,Trajectory neighbor,Distance distance){
  int diffDimension=-1;
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (trajectory.getFirstPoint().getValue(dim) != neighbor.getFirstPoint().getValue(dim)) {
      if (diffDimension != -1) {
        throw new IllegalStateException("String_Node_Str");
      }
      diffDimension=dim;
    }
  }
  float radius=Math.abs(trajectory.getFirstPoint().getValue(diffDimension) - neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  float[] middleSeedData=trajectory.getFirstPoint().toArrayCopy();
  middleSeedData[diffDimension]=(trajectory.getFirstPoint().getValue(diffDimension) + neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  Trajectory middleTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),middleSeedData);
  List<Trajectory> neighborTrajectories=new ArrayList<Trajectory>();
  List<Trajectory> spawnedSecondaryTrajectories=new ArrayList<Trajectory>();
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (dim == diffDimension) {
      continue;
    }
    for (int sign=-1; sign <= 1; sign+=2) {
      float[] newPointData=middleTrajectory.getFirstPoint().toArrayCopy();
      newPointData[dim]+=sign * radius;
      Trajectory newTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),newPointData);
      if (alreadySpawnedCollisionTrajectories.containsKey(newTrajectory.getFirstPoint())) {
        newTrajectory=alreadySpawnedCollisionTrajectories.get(newTrajectory.getFirstPoint());
      }
 else {
        alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),newTrajectory);
        spawnedSecondaryTrajectories.add(newTrajectory);
      }
      neighborTrajectories.add(newTrajectory);
    }
  }
  Map<Point,DataBlock<Trajectory>> neighborhood=new HashMap<Point,DataBlock<Trajectory>>(neighborTrajectories.size() + 1);
  neighborhood.put(middleTrajectory.getFirstPoint(),new ListDataBlock<Trajectory>(neighborTrajectories));
  Collection<Trajectory> spawnedCol=new ArrayList<Trajectory>();
  spawnedCol.add(middleTrajectory);
  return new SpawnedResult(neighborhood,spawnedCol,spawnedSecondaryTrajectories);
}