00001 #ifndef GeometricAnnealing_H 00002 #define GeometricAnnealing_H 00003 00004 #include "RecoVertex/VertexTools/interface/AnnealingSchedule.h" 00005 #include <vector> 00006 00007 class GeometricAnnealing : public AnnealingSchedule { 00008 00009 public: 00010 00018 GeometricAnnealing( const double cutoff=3.0, const double T=256.0, 00019 const double annealing_ratio=0.25 ); 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 00034 double cutoff() const; 00035 double currentTemp() const; 00036 double initialTemp() const; 00037 00041 bool isAnnealed() const; 00042 00043 void debug() const; 00044 00045 GeometricAnnealing * clone() const 00046 { 00047 return new GeometricAnnealing ( * this ); 00048 }; 00049 00050 private: 00051 double theT0; 00052 double theT; 00053 double theChi2cut; 00054 double theRatio; 00055 00056 }; 00057 00058 #endif