BIE |
/home/weinberg/src/BIE/include/Model.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef Model_h 00004 #define Model_h 00005 00006 #include <new> 00007 #include <typeinfo> 00008 00009 #include "gaussQ.h" 00010 #include "BIEconfig.h" 00011 #include "RecordType.h" 00012 #include "Distribution.h" 00013 00014 #include "Serializable.h" 00015 00016 00017 namespace BIE { 00018 00019 //+ CLICLASS Model 00043 class Model: public Serializable 00044 { 00045 public: 00046 00048 static bool quadtree; 00049 00051 static int maxlevels; 00052 00054 static double qeps; 00055 00057 static double dX0; 00058 00060 static double dY0; 00061 00063 static double dX1; 00064 00066 static double dY1; 00067 00069 static int numX; 00070 00072 static int numY; 00073 00074 virtual ~Model() 00075 { 00076 delete iX; delete iY; 00077 if (parametertype) {delete parametertype;} 00078 } 00079 00080 //+ CLIMETHOD RecordType* getParameterType 00082 RecordType * getParameterType() { return parametertype; } 00083 00084 //+ CLIMETHOD void setNormKnots double double 00087 void setNormKnots(int nx, int ny) { numX = nx; numY = ny; } 00088 00089 //+ CLIMETHOD void setQuadTreeParams double double double double double int 00098 void setQuadTreeParams(double dx0, double dy0, double dx1, double dy1, 00099 double eps, int mlev); 00100 00102 virtual void Initialize(State&) = 0; 00103 00105 virtual void ResetCache() {}; 00106 00108 virtual double NormEval(double xmin, double xmax, 00109 double ymin, double ymax, bool serial); 00110 00112 virtual double NormEval(double x, double y, SampleDistribution *d) = 0; 00113 00122 virtual double NormEval(double X, double Y) { 00123 string msg = 00124 "Model classes must implement a NormEval(double, double) method for\n"\ 00125 "handling point type data or override the normalization calculation\n"\ 00126 "NormEval(double, double, double, double)"; 00127 throw InternalError(msg, __FILE__, __LINE__); 00128 return 0.0; 00129 } 00130 00132 virtual double NormEvalMeasure(double X, double Y) { return 1.0; } 00133 00135 virtual vector<double> Evaluate(double x, double y, SampleDistribution* d); 00136 00142 00144 virtual vector<double> EvaluateBinned(double x, double y, 00145 BinnedDistribution* d) 00146 { return vector<double>(1, 0.0); } 00147 00149 virtual vector<double> EvaluatePoint(double x, double y, 00150 PointDistribution* d) 00151 { return vector<double>(1, 0.0); } 00152 00154 00156 virtual string ParameterDescription(int i) = 0; 00157 00159 virtual int DataDimension() = 0; 00160 00162 enum EvalType {binned, point}; 00163 00164 protected: 00165 00167 LegeQuad *iX, *iY; 00168 00173 Model() { iX = 0; iY = 0; parametertype = 0; } 00174 00176 RecordType * parametertype; 00177 00179 RecordType* createMixParameterType 00180 (const char ** paramnames, int numparams, int mixturedim); 00181 00182 // AUTO GENERATED BY ../persistence/autopersist.py 00183 private: 00184 friend class boost::serialization::access; 00185 template<class Archive> 00186 void serialize(Archive & ar, const unsigned int version) { 00187 this->pre_serialize(ar, version); 00188 try { 00189 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00190 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00191 } 00192 try { 00193 ar & BOOST_SERIALIZATION_NVP(iX); 00194 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00195 } 00196 try { 00197 ar & BOOST_SERIALIZATION_NVP(iY); 00198 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00199 } 00200 try { 00201 ar & BOOST_SERIALIZATION_NVP(parametertype); 00202 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00203 } 00204 this->post_serialize(ar, version); 00205 } 00206 00207 }; 00208 } // namespace BIE 00209 00210 BIE_CLASS_EXPORT_KEY(BIE::Model) 00211 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|