/**
   \file opt_types
   \brief define some usually used template
   \author Junhua Gu
 */


#ifndef OPT_TYPES_HPP
#define OPT_TYPES_HPP
#define OPT_HEADER
#include <core/optimizer.hpp>
#include <core/fitter.hpp>
#include <data_sets/default_data_set.hpp>
#include <methods/powell/powell_method.hpp>
#include <statistics/chisq.hpp>
#include <statistics/leastsq.hpp>
#include <vector>

namespace opt_utilities
{
  
  template <typename Ty,typename Tx,typename Tp,typename Ts,typename Tstr>
  class opt_types
  {
  public:
    typedef ::opt_utilities::fitter<Ty,Tx,Tp,Ts,Tstr> fitter;
    typedef ::opt_utilities::chisq<Ty,Tx,Tp,Ts,Tstr> chisq;
    typedef ::opt_utilities::leastsq<Ty,Tx,Tp,Ts,Tstr> leastsq;
    typedef ::opt_utilities::powell_method<Ty,Tp> powell_method;
    typedef ::opt_utilities::model<Ty,Tx,Tp,Tstr> model;
    typedef ::opt_utilities::default_data_set<Ty,Ty> data_set;
    typedef ::opt_utilities::optimizer<Ty,Tp> optimizer;
    typedef ::opt_utilities::func_obj<Ty,Tp> func_obj;
    typedef ::opt_utilities::opt_method<Ty,Tp> opt_method;
  };

  typedef opt_types<double,double,std::vector<double>,double,std::string> dopt;
  
}




#endif
//EOF