X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmodels.h;h=c1c96d1cb52addfdade3d847df8929b1536d8fd7;hb=40d817fd1c0ec184927450858ca95b722ae8acba;hp=6a61506ffe38efb0ea87778fc392b47826130220;hpb=f8575ea6c0982bba5ccf42771b2994d19500c0a3;p=germs.git diff --git a/src/models.h b/src/models.h index 6a61506..c1c96d1 100644 --- a/src/models.h +++ b/src/models.h @@ -21,48 +21,121 @@ #ifndef __MODELS_H__ #define __MODELS_H__ -#include - class SortAction; +class GeneOrder; namespace Models { +/** + * Basic implementation of a model. All sort actions are considered equal. + */ class ModelImpl { public: virtual ~ModelImpl(); - virtual double score(const SortAction& sa); - - virtual std::string name(); + /** + * All actions return 1 in this model. + * + * \see Model::score + */ + virtual double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + virtual const char* name(); }; +/** + * A model that favors reversals. + */ +class Whirl : public ModelImpl { + public: + /** + * Returns a higher score for reversals and a lower score + * for all other actions. + * + * \see Model::score + */ + double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + const char* name(); +}; +/** + * A model that favors symmetric reversal, resulting in an X-like + * picture in a dot plot. + */ class X : public ModelImpl { public: - double score(const SortAction& sa); - - std::string name(); + /** + * Returns a higher score for reversals around the center + * + * \see Model::score + */ + double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + const char* name(); }; +/** + * A model that favors short reversals, resulting in a zipper-like + * picture in a dot plot + */ class Zipper : public ModelImpl { public: - double score(const SortAction& sa); - - std::string name(); + /** + * Returns higher score for shorter reversals. + * + * \see Model::score + */ + double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + const char* name(); }; +/** + * A model that favors single gene transpositions, resulting in a + * very scattered dot plot. + */ class Cloud : public ModelImpl { public: - double score(const SortAction& sa); - - std::string name(); + /** + * \todo has to be implemented + * \see Model::score + */ + double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + const char* name(); }; +/** + * A model similar to X, but a wider X in the dot plot. + */ class FatX : public ModelImpl { public: - double score(const SortAction& sa); - - std::string name(); + /** + * \todo has to be implemented + * \see Model::score + */ + double score(const SortAction& sa, const GeneOrder& go); + + /** + * \see Model::name + */ + const char* name(); }; }