void pyne::Material::from_hdf5(std::string filename, std::string datapath, int row, int protocol) { // Turn off annoying HDF5 errors herr_t status; H5Eset_auto2(H5E_DEFAULT, NULL, NULL); // Check that the file is there if (!pyne::file_exists(filename)) throw pyne::FileNotFound(filename); // Check to see if the file is in HDF5 format. bool ish5 = H5Fis_hdf5(filename.c_str()); if (!ish5) throw h5wrap::FileNotHDF5(filename); //Set file access properties so it closes cleanly hid_t fapl; fapl = H5Pcreate(H5P_FILE_ACCESS); H5Pset_fclose_degree(fapl,H5F_CLOSE_STRONG); // Open the database hid_t db = H5Fopen(filename.c_str(), H5F_ACC_RDONLY, fapl); bool datapath_exists = h5wrap::path_exists(db, datapath); if (!datapath_exists) throw h5wrap::PathNotFound(filename, datapath); // Clear current content comp.clear(); // Load via various protocols if (protocol == 0) _load_comp_protocol0(db, datapath, row); else if (protocol == 1) _load_comp_protocol1(db, datapath, row); else throw pyne::MaterialProtocolError(); // Close the database status = H5Fclose(db); // Renomalize the composition, just to be safe. norm_comp(); };
void pyne::Material::from_hdf5(std::string filename, std::string datapath, int row, int protocol) { // Turn off annoying HDF5 errors H5::Exception::dontPrint(); // Check that the file is there if (!pyne::file_exists(filename)) throw pyne::FileNotFound(filename); // Check to see if the file is in HDF5 format. bool isH5 = H5::H5File::isHdf5(filename); if (!isH5) throw h5wrap::FileNotHDF5(filename); // Open the database H5::H5File db (filename, H5F_ACC_RDONLY); bool datapath_exists = h5wrap::path_exists(&db, datapath); if (!datapath_exists) throw h5wrap::PathNotFound(filename, datapath); // Clear current content comp.clear(); // Load via various protocols if (protocol == 0) _load_comp_protocol0(&db, datapath, row); else if (protocol == 1) _load_comp_protocol1(&db, datapath, row); else throw pyne::MaterialProtocolError(); // Close the database db.close(); // Renomalize the composition, just to be safe. norm_comp(); };