00001 #ifndef DeterministicAnnealing_H 00002 #define DeterministicAnnealing_H 00003 00004 #include "RecoVertex/VertexTools/interface/AnnealingSchedule.h" 00005 #include <vector> 00006 00007 class DeterministicAnnealing : public AnnealingSchedule { 00008 00009 public: 00010 00018 DeterministicAnnealing( float cutoff = 3.0 ); 00019 DeterministicAnnealing( const std::vector < float > & sched, float cutoff = 3.0 ); 00020 00021 void anneal(); //< One annealing step. theT *= theRatio. 00022 void resetAnnealing(); //< theT = theT0. 00023 00027 double phi ( double chi2 ) const; 00028 00032 double weight ( double chi2 ) const; 00033 00037 bool isAnnealed() const; 00038 00039 void debug() const; 00040 00044 // double weight ( double chi2, const vector < double > & chi2s ) const; 00045 00046 00047 double cutoff() const; 00048 double currentTemp() const; 00049 double initialTemp() const; 00050 00051 DeterministicAnnealing * clone() const 00052 { 00053 return new DeterministicAnnealing ( * this ); 00054 }; 00055 00056 private: 00057 unsigned int theIndex; 00058 double theChi2cut; 00059 bool theIsAnnealed; 00060 }; 00061 00062 #endif