[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [IMP-dev] Harmonic



Hi Frido,

these are the methods I implemented so far in a new class Morse.h.

The first one returns a constant score if feature is greater then threshold. At the moment the returned score is the Harmonic potential calculated when feature >= threshold (i.e. when feature is >= threshold, the returned score will always be Harmonic::evaluate(threshold) ).
The second one implements the Morse potential as described by Marc.

These methods are still in a development phase since there are some parameters which need to be better defined, such as the threshold to be applied and the parameters that define the Morse potential.

Regards,
Davide


  // 1. a function that is a Harmonic for x<std and constant for x>std
  /** If the feature is greater than or equal to the threshold, the score is constant.
      \param[in] feature Value of feature being tested.
      \return Score
  */
  virtual Float evaluate(Float feature) const {
    Float k = Harmonic::get_k();
    Float mean = Harmonic::get_mean();
    Float threshold = 1.0 * mean + XYZRDecorator::get_radius();

    if ( feature <= threshold ) {
      return Harmonic::evaluate(feature);
    } else {
      return evaluate_with_derivative(threshold, k).first;
    }
  }


  //  2. a function that is a Harmonic for x<std and asymptotically approaches a constant value for x-> inf:
  /** If the feature is greater than or equal to the threshold, apply the Morse potential.
      \param[in] feature Value of feature being tested.
      \return Score
  */
  virtual Float evaluate(Float feature) const {
    Float mean = Harmonic::get_mean();
    Float k = Harmonic::get_k();
    Float threshold = 1.0 * mean + XYZRDecorator::get_radius();

   // MORSE POTENTIAL PARAMETERS
    Float var = 1.0/k;
    Float alpha = 2.0;
    Float De = 40.0;
    Float beta = 1.0;
    Float swf = 0.0;   

    if ( feature <= threshold ) {
      return Harmonic::evaluate(feature);
    } else {
      swf = beta * pow( ( 1.0 - exp( - sqrt( alpha/De ) * ( feature - threshold )/2.0 ) ), 2 ); // MORSE POTENTIAL
      return swf;
    }
  }




 
On Thu, Jan 8, 2009 at 10:20 AM, Marc A. Marti-Renom <">> wrote:
Hi Frido,

Indeed we are also in need of similar stuff. Davide Bau (a postdoc in my lab and also in the IMP-Dev list) has already implemented a sort of a MORSE potential in IMP restraints, which is not what you ask but may be similar. I implemented many many many years ago something similar in CHARMM (http://sgu.bioinfo.cipf.es/martirenom/Thesis/pdf/Thesis.pdf, Chapter 4 page 86). 

Unfortunately, we are NOT yet ready to commit the changes in the code to the SVN since we are in the middle of production phase (ie, making models) thus would prefer not to update IMP. But I am sure we could do soon.

Davide, any comments? :-)

m
  
-------
Marc A. Marti-Renom, Head of the Structural Genomics Unit
Bioinformatics & Genomics Department, Prince Felipe Research Center
Avda. Autopista del Saler, 16 , 46012 Valencia, Spain 
Tel +34 96 328 96 80  (ext. 1015) Fax +34 96 328 97 01

*** Consider the environment. Print responsibly. ***

On Jan 8, 2009, at 10:00 AM, Friedrich Foerster wrote:

hi all,

when dealing with experimental restraints i often feel that harmonic restraints are somewhat unsatisfactory:
experimental data can be wrong and thus there is not necessarily a solution that fulfills all restraints (score=0). in those cases, a model with a lower score is not necessarily any more correct than a higher scoring one. thus, i think it'd be good to have an additional scoring function that levels off if the feature exceeds a certain value. for example, i'd suggest the following two functions alternatively to Harmonic:
1. a function that is a Harmonic for x<std and constant for x>std
2. a function that is a Harmonic for x<std and asymptotically approaches a constant value for x-> inf:
   e.g.:  f=x^2 for x<1 and f=2-x^-2 for x>1 (would even be continuous in 1st derivative)

is anyone else also interested in something like that?
any better suggestions?
is any IMP core expert interested and willing to code that (including analogous functions for Upper and Lower Harmonic)? probably i'd be one of the slowest and clumsiest persons in doing that...

thanks

frido


--

Friedrich Foerster
Max-Planck Institut fuer Biochemie
Am Klopferspitz 18
D-82152 Martinsried

Tel: +49 89 8578 2651
Fax: +49 89 8578 2641

" target="_blank">

www.tomotronic.org






_______________________________________________
IMP-dev mailing list
" target="_blank">
https://salilab.org/mailman/listinfo/imp-dev



_______________________________________________
IMP-dev mailing list
">
https://salilab.org/mailman/listinfo/imp-dev