docs: private void findBestValidSolution(BundleAdjustment<SceneStructureMetric> bundleAdjustment) {
  		// prints out useful debugging information that lets you know how well it's converging
  		if( verbose != null && verboseLevel > 0 )
  			bundleAdjustment.setVerbose(verbose,0);
  
  		// Specifies convergence criteria
  		bundleAdjustment.configure(convergeSBA.ftol, convergeSBA.gtol, convergeSBA.maxIterations);
  
  		bundleAdjustment.setParameters(structure,observations);
  		bundleAdjustment.optimize(structure);
  
  		// ensure that the points are in front of the camera and are a valid solution
  		if( checkBehindCamera(structure) ) {
  			if( verbose != null )
  				verbose.println("  flipping view");
  			flipAround(structure,observations);
  			bundleAdjustment.setParameters(structure,observations);
  			bundleAdjustment.optimize(structure);
  		}
  
  		double bestScore = bundleAdjustment.getFitScore();
  		List<Se3_F64> bestPose = new ArrayList<>();
  		List<BundlePinholeSimplified> bestCameras = new ArrayList<>();
  		for (int i = 0; i < structure.views.length; i++) {
  			BundlePinholeSimplified c = structure.cameras[i].getModel();
  			bestPose.add(structure.views[i].worldToView.copy());
  			bestCameras.add( c.copy());
  		}
  
  		for (int i = 0; i < structure.cameras.length; i++) {
  			BundlePinholeSimplified c = structure.cameras[i].getModel();
  			c.f = listPinhole.get(i).fx;
  			c.k1 = c.k2 = 0;
  		}
  		// flip rotation assuming that it was done wrong
  		for (int i = 1; i < structure.views.length; i++) {
  			CommonOps_DDRM.transpose(structure.views[i].worldToView.R);
  		}
  		triangulatePoints(structure,observations);
  
  		bundleAdjustment.setParameters(structure,observations);
  		bundleAdjustment.optimize(structure);
  
  		if( checkBehindCamera(structure) ) {
  			if( verbose != null )
  				verbose.println("  flipping view");
  			flipAround(structure,observations);
  			bundleAdjustment.setParameters(structure,observations);
  			bundleAdjustment.optimize(structure);
  		}
  
  		// revert to old settings
  		if( verbose != null )
  			verbose.println(" ORIGINAL / NEW = " + bestScore+" / "+bundleAdjustment.getFitScore());
  		if( bundleAdjustment.getFitScore() > bestScore ) {
  			if( verbose != null )
  				verbose.println("  recomputing old structure");
  			for (int i = 0; i < structure.cameras.length; i++) {
  				BundlePinholeSimplified c = structure.cameras[i].getModel();
  				c.set(bestCameras.get(i));
  				structure.views[i].worldToView.set(bestPose.get(i));
  			}
  			triangulatePoints(structure,observations);
  			bundleAdjustment.setParameters(structure,observations);
  			bundleAdjustment.optimize(structure);
  			if( verbose != null )
  				verbose.println("  score = "+bundleAdjustment.getFitScore());
  		}
  	}