Page MenuHomec4science

database.hpp
No OneTemporary

File Metadata

Created
Sat, Jul 20, 03:15

database.hpp

/*-------------------------------------------------------
- Module : database
- File : database.hpp
- Author : Fabien Georget
Copyright (c) 2014, Fabien Georget, Princeton University
---------------------------------------------------------*/
#ifndef SPECMICP_DATABASE_DATABASE_HPP
#define SPECMICP_DATABASE_DATABASE_HPP
//! \file database.hpp Database management
#include "module.hpp"
namespace specmicp {
//! \namespace database Database management
namespace database {
//! \brief Database management
//!
//! Prepare the database for the computation.
//! This class is a proxy for one-tasked modules.
class Database: public DatabaseModule
{
public:
//! \brief Default constructor
//!
//! the method parse_database must be called to parse the json database
Database() {}
//! \brief Initialise the database py parsing 'filepath'
Database(std::string filepath) {
parse_database(filepath);
make_canonical();
}
//! \brief initialise the database with the raw database
Database(std::shared_ptr<DataContainer> raw_data):
data(raw_data)
{}
//! \brief Parse the database 'filepath'
void parse_database(std::string filepath);
//! \brief Transform the database into canonical form
//!
//! This process is necessary before any computation
void make_canonical();
//! \brief Return the database
//!
//! Return a smart pointer of a DataCotnainer instance
//! Note : this is a read write access, be careful
std::shared_ptr<DataContainer> get_database() {return data;}
//! \brief Change the basis
//!
//! @param new_basis list of id of the new basis
//!
//! The new basis is a list of id, id = id_component for no swapping
//! or id = id_aqueous + nb_component for swapping a secondary species
void change_basis(std::vector<int>& new_basis);
//! \brief Swap some component in the basis
void swap_components(std::map<std::string, std::string>& swap_to_make);
//! \brief Remove components non present in the system
void remove_components(const std::vector<int>& id_components_to_remove);
//! \brief Keep only some minerals at equilibrium
//!
//! The effect is to flag all the other minerals as "kinetic"
void minerals_keep_only(const std::vector<std::string>& minerals_to_keep);
private:
std::shared_ptr<DataContainer> data; //!< The data
};
} // end namespace database
} // end namespace specmicp
#endif // SPECMICP_DATABASE_DATABASE_HPP

Event Timeline