Esempio n. 1
0
 HMMExperiment::HMMExperiment(std::string dataset, std::string logfile_, std::string logprogressfile_,
                              int hs_, int nfolds_, bool shuffle_, int EMiterations_, int nworkers_,
                              PredictionType prediction_type_, TestingStrategy testing_strat_)
 : logfile(logfile_, std::ofstream::app), logprogressfile(logprogressfile_, std::ofstream::out) {
     assert(logfile.good());
     assert(logprogressfile.good());
     
     nworkers = nworkers_;
     for(int iworkers=0; iworkers<nworkers; iworkers++)
         workers.push_back(HMMWorkerThread());
     
     hs = hs_;
     nfolds = nfolds_;
     shuffle = shuffle_;
     EMiterations = EMiterations_;
     prediction_type = prediction_type_;
     testing_strat = testing_strat_;
     
     set_dataset(dataset);
 }
Esempio n. 2
0
/* Return NULL if failed */
static SpglibDataset * get_dataset(SPGCONST double lattice[3][3],
				   SPGCONST double position[][3],
				   const int types[],
				   const int num_atom,
				   const int hall_number,
				   const double symprec)
{
  Spacegroup spacegroup;
  SpacegroupType spacegroup_type;
  SpglibDataset *dataset;
  Cell *cell;
  Primitive *primitive;

  spacegroup.number = 0;
  dataset = NULL;
  cell = NULL;
  primitive = NULL;

  if ((dataset = (SpglibDataset*) malloc(sizeof(SpglibDataset))) == NULL) {
    warning_print("spglib: Memory could not be allocated.");
    return NULL;
  }

  dataset->spacegroup_number = 0;
  strcpy(dataset->international_symbol, "");
  strcpy(dataset->hall_symbol, "");
  strcpy(dataset->setting, "");
  dataset->origin_shift[0] = 0;
  dataset->origin_shift[1] = 0;
  dataset->origin_shift[2] = 0;
  dataset->n_atoms = 0;
  dataset->wyckoffs = NULL;
  dataset->equivalent_atoms = NULL;
  dataset->n_operations = 0;
  dataset->rotations = NULL;
  dataset->translations = NULL;
  dataset->n_brv_atoms = 0;
  dataset->brv_positions = NULL;
  dataset->brv_types = NULL;

  if ((cell = cel_alloc_cell(num_atom)) == NULL) {
    free(dataset);
    dataset = NULL;
    return NULL;
  }

  cel_set_cell(cell, lattice, position, types);

  primitive = spa_get_spacegroup(&spacegroup, cell, symprec);

  if ((spacegroup.number > 0) && (primitive != NULL)) {

    /* With hall_number > 0, specific choice is searched. */
    if (hall_number > 0) {
      spacegroup_type = spgdb_get_spacegroup_type(hall_number);
      if (spacegroup.number == spacegroup_type.number) {
	spacegroup = spa_get_spacegroup_with_hall_number(primitive,
							 hall_number);
      } else {
	goto err;
      }

      if (spacegroup.number == 0) {
	goto err;
      }
    }

    if (spacegroup.number > 0) {
      if ((set_dataset(dataset,
		       cell,
		       primitive->cell,
		       &spacegroup,
		       primitive->mapping_table,
		       primitive->tolerance)) == 0) {
	goto err;
      }
    }
  }

  cel_free_cell(cell);
  prm_free_primitive(primitive);

  return dataset;

 err:
  cel_free_cell(cell);
  prm_free_primitive(primitive);
  free(dataset);
  dataset = NULL;
  return NULL;
}
Esempio n. 3
0
/*---------*/
static SpglibDataset * get_dataset(SPGCONST double lattice[3][3],
				   SPGCONST double position[][3],
				   const int types[],
				   const int num_atom,
				   const double symprec)
{
  int attempt;
  int *mapping_table;
  double tolerance, tolerance_from_prim;
  Spacegroup spacegroup;
  SpglibDataset *dataset;
  Cell *cell, *primitive;

  dataset = (SpglibDataset*) malloc(sizeof(SpglibDataset));
  dataset->spacegroup_number = 0;
  strcpy(dataset->international_symbol, "");
  strcpy(dataset->hall_symbol, "");
  strcpy(dataset->setting, "");
  dataset->origin_shift[0] = 0;
  dataset->origin_shift[1] = 0;
  dataset->origin_shift[2] = 0;
  dataset->n_atoms = 0;
  dataset->wyckoffs = NULL;
  dataset->equivalent_atoms = NULL;
  dataset->n_operations = 0;
  dataset->rotations = NULL;
  dataset->translations = NULL;

  mapping_table = (int*) malloc(sizeof(int) * num_atom);

  cell = cel_alloc_cell(num_atom);
  cel_set_cell(cell, lattice, position, types);

  tolerance = symprec;
  for (attempt = 0; attempt < 100; attempt++) {
    primitive = prm_get_primitive_and_mapping_table(mapping_table,
						    cell,
						    tolerance);
    if (primitive->size > 0) {
      tolerance_from_prim = prm_get_current_tolerance();
      spacegroup = spa_get_spacegroup_with_primitive(primitive,
						     tolerance_from_prim);
      if (spacegroup.number > 0) {
	set_dataset(dataset,
		    cell,
		    primitive,
		    &spacegroup,
		    mapping_table,
		    tolerance_from_prim);
	cel_free_cell(primitive);
	break;
      }
    }
    
    tolerance *= REDUCE_RATE;
    cel_free_cell(primitive);
    
    warning_print("  Attempt %d tolerance = %f failed.", attempt, tolerance);
    warning_print(" (line %d, %s).\n", __LINE__, __FILE__);
  }

  free(mapping_table);
  mapping_table = NULL;
  cel_free_cell(cell);

  return dataset;
}