Commit d4eaf3e5 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Use exception handling to parse input data

parent 4209500a
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -24,10 +24,25 @@ using namespace std;
 */
void cluster(string config_file, string data_file, string output_path) {
  printf("INFO: making legacy configuration...");
  ScattererConfiguration *sconf = ScattererConfiguration::from_dedfb(config_file);
  sconf->write_formatted(output_path + "/c_OEDFB_clu");
  sconf->write_binary(output_path + "/c_TEDF_clu");
  GeometryConfiguration *gconf = GeometryConfiguration::from_legacy(data_file);
  ScattererConfiguration *sconf = NULL;
  try {
    sconf = ScattererConfiguration::from_dedfb(config_file);
  } catch(const OpenConfigurationFileException &ex) {
    printf("\nERROR: failed to open scatterer configuration file.\n");
    printf("FILE: %s\n", ex.what());
    exit(1);
  }
  sconf->write_formatted(output_path + "/c_OEDFB");
  sconf->write_binary(output_path + "/c_TEDF");
  GeometryConfiguration *gconf = NULL;
  try {
    gconf = GeometryConfiguration::from_legacy(data_file);
  } catch (const OpenConfigurationFileException &ex) {
    printf("\nERROR: failed to open geometry configuration file.\n");
    printf("FILE: %s\n", ex.what());
    if (sconf) delete sconf;
    exit(1);
  }
  printf(" done.\n");
  if (sconf->number_of_spheres == gconf->number_of_spheres) {
    // Shortcuts to variables stored in configuration objects
+264 −265
Original line number Diff line number Diff line
@@ -28,8 +28,7 @@ public:
   * \brief Exception message.
   */
  virtual const char* what() const throw() {
		std::string message = "Error opening configuration file: " + file_name;
		return message.c_str();
    return file_name.c_str();
  }
};

+10 −7
Original line number Diff line number Diff line
@@ -64,8 +64,9 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) {
  smatch m;
  try {
    file_lines = load_file(file_name, &num_lines);
  } catch (exception &ex) {
    throw OpenConfigurationFileException(file_name);
  } catch (...) {
    OpenConfigurationFileException ex(file_name);
    throw ex;
  }
  int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0;
  int _li = 0, _le = 0, _mxndm = 0, _iavm = 0;
@@ -263,7 +264,7 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
      input.read(reinterpret_cast<char *>(&nxi), sizeof(int));
      try {
	xi_vec = new double[nxi]();
      } catch (bad_alloc &ex) {
      } catch (const bad_alloc &ex) {
	throw UnrecognizedConfigurationException("Wrong parameter set: invalid number of scales " + nxi);
      }
      for (int i = 0; i < nxi; i++) {
@@ -283,7 +284,7 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
	if (max_ici < (nsh + 1) / 2) max_ici = (nsh + 1) / 2;
	try {
	  rcf_vector[i115 - 1] = new double[nsh]();
	} catch (bad_alloc &ex) {
	} catch (const bad_alloc &ex) {
	  throw UnrecognizedConfigurationException("Wrong parameter set: invalid number of layers " + nsh);
	}
	for (int nsi = 0; nsi < nsh; nsi++) {
@@ -313,7 +314,8 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
      }
      input.close();
    } else { // Opening of the input file did not succeed.
      throw OpenConfigurationFileException(file_name);
      OpenConfigurationFileException ex(file_name);
      throw ex;
    }
  } else { // A different binary format was chosen.
    //TODO: this part is not yet implemented.
@@ -346,8 +348,9 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam
  smatch m;
  try {
    file_lines = load_file(dedfb_file_name, &num_lines);
  } catch (exception &ex) {
    throw OpenConfigurationFileException(dedfb_file_name);
  } catch (...) {
    OpenConfigurationFileException ex(dedfb_file_name);
    throw ex;
  }
  int nsph, ies;
  int max_ici = 0;
+572 −555
Original line number Diff line number Diff line
@@ -21,8 +21,25 @@ void sphere(string config_file, string data_file, string output_path) {
  complex<double> arg, s0, tfsas;
  double th, ph;
  printf("INFO: making legacy configuration...\n");
	ScattererConfiguration *sconf = ScattererConfiguration::from_dedfb(config_file);
	GeometryConfiguration *gconf = GeometryConfiguration::from_legacy(data_file);
  ScattererConfiguration *sconf = NULL;
  try {
    sconf = ScattererConfiguration::from_dedfb(config_file);
  } catch(const OpenConfigurationFileException &ex) {
    printf("\nERROR: failed to open scatterer configuration file.\n");
    printf("FILE: %s\n", ex.what());
    exit(1);
  }
  sconf->write_formatted(output_path + "c_OEDFB");
  sconf->write_binary(output_path + "c_TEDF");
  GeometryConfiguration *gconf = NULL;
  try {
    gconf = GeometryConfiguration::from_legacy(data_file);
  } catch(const OpenConfigurationFileException &ex) {
    printf("\nERROR: failed to open geometry configuration file.\n");
    printf("FILE: %s\n", ex.what());
    if (sconf) delete sconf;
    exit(1);
  }
  if (sconf->number_of_spheres == gconf->number_of_spheres) {
    int isq, ibf;
    double *argi, *args, *gaps;