00001
00002
00003
00004
00005
00006
00007
00008 #ifndef IMPCORE_MOVER_H
00009 #define IMPCORE_MOVER_H
00010
00011 #include "core_config.h"
00012
00013 #include <IMP/base_types.h>
00014 #include <IMP/RefCounted.h>
00015 #include <IMP/WeakPointer.h>
00016 #include <IMP/Optimizer.h>
00017
00018 #include <vector>
00019
00020 IMPCORE_BEGIN_NAMESPACE
00021
00022 class MonteCarlo;
00023
00024
00025
00026
00027
00028
00029
00030 class IMPCOREEXPORT Mover: public Object
00031 {
00032 friend class MonteCarlo;
00033 void set_optimizer(Optimizer *c) {
00034 if (c) set_was_used(true);
00035 opt_=c;
00036 }
00037
00038 WeakPointer<Optimizer> opt_;
00039 public:
00040 Mover(std::string name=std::string("Mover"));
00041
00042
00043
00044
00045
00046
00047 virtual void propose_move(Float size)=0;
00048
00049
00050
00051 virtual void accept_move()=0;
00052
00053
00054 virtual void reject_move()=0;
00055
00056
00057 Optimizer *get_optimizer() const {
00058 IMP_CHECK_OBJECT(this);
00059 return opt_;
00060 }
00061 virtual void show(std::ostream&out= std::cout) const {
00062 out << "Mover doesn't implement show " << std::endl;
00063 }
00064
00065 IMP_REF_COUNTED_DESTRUCTOR(Mover);
00066 };
00067
00068 IMP_OUTPUT_OPERATOR(Mover);
00069
00070
00071 IMP_OBJECTS(Mover);
00072
00073
00074
00075
00076 IMPCORE_END_NAMESPACE
00077
00078 #endif