mailRe: looping the optimization in full_analysis.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Sebastien Morin on August 29, 2007 - 16:17:
Hi all,

I just tried, a couple of days ago, the CONV_LOOP = 1 option in the full_analysis,py script.

Strangely (as opposed to Douglas), it works well for me with different DIFF_MODEL options. Also, I get the same exact results for differents rounds of calculation/optimization (chi-squared, model convergence, etc).

I used line 1.2 revision 3354.

Cheers



Séb




Douglas Kojetin wrote:
Hi Edward,

I am just picking back up on my relaxation analysis, and noticed that  
the CONV_LOOP = 1 function is full_analysis.py does not seem to work  
properly.  I get the following error:

"""
#####################
# Convergence tests #
#####################


Chi-squared test:
     chi2 (k-1): 164.3021658998544
     chi2 (k):   168.91097779838205
     The chi-squared value has not converged.

Identical model-free models test:
Traceback (most recent call last):
   File "/opt/relax/1.2/relax", line 454, in ?
     Relax()
   File "/opt/relax/1.2/relax", line 166, in __init__
     self.interpreter.run()
   File "/opt/relax/1.2/prompt/interpreter.py", line 213, in run
     run_script(intro=self.relax.intro_string, local=self.local,  
script_file=self.relax.script_file, quit=1)
   File "/opt/relax/1.2/prompt/interpreter.py", line 388, in run_script
     console.interact(intro, local, script_file, quit)
   File "/opt/relax/1.2/prompt/interpreter.py", line 340, in  
interact_script
     execfile(script_file, local)
   File "full_analysis.py", line 574, in ?
     Main(self.relax)
   File "full_analysis.py", line 247, in __init__
     converged = self.convergence(run=name)
   File "full_analysis.py", line 368, in convergence
     curr_models = curr_models + self.relax.data.res[run][i].model
AttributeError: Element instance has no attribute 'model'
"""

Thanks,
Doug

On Jun 27, 2007, at 11:22 AM, Edward d'Auvergne wrote:

  
Hi,

To commit changes to the repository, you need to become a relax
developer.  There is detailed information in the relax manual about
this long process.  Alternatively if you run the command svn diff to
create a patch file, I can then apply the patch and make the commit
for you.  In this case however I am making the changes to the 1.3
repository line and then back porting to the 1.2 line (this is the
origin of the relax_data_store error you saw before).  Therefore if
you post what the changes are, I will manually apply them to 1.3 and
then back port to 1.2.

Cheers,

Edward


P.S.  The change to line 290 was unnecessary as far as I can see (I
could be wrong though).  And I also replaced the looping over
LOCAL_TM_MODELS and MF_MODELS with a single test within the model-free
model loop which already exists - just to simplify the code.  The
changes have been committed to the repository.




On 6/27/07, Douglas Kojetin <douglas.kojetin@xxxxxxxxx> wrote:
    
Another update.  I had to change a few more lines, but the script
seems to work properly now.

% diff OLD.py NEW.py
229a230,231
 >                     if name in self.relax.data.run_names:
 >                         run.delete(name)
290a293,294
 >             if 'final' in self.relax.data.run_names:
 >                 run.delete('final')
524a529,531
 >             for name_to_remove in LOCAL_TM_MODELS:
 >                 if name_to_remove in self.relax.data.run_names:
 >                     run.delete(name_to_remove)
526a534,536
 >             for name_to_remove in MF_MODELS:
 >                 if name_to_remove in self.relax.data.run_names:
 >                     run.delete(name_to_remove)


If you would like me to commit these changes, just let me know where
I can find instructions on how to do so.

Thanks,

Doug



On Jun 26, 2007, at 3:58 AM, Edward d'Auvergne wrote:

      
Whoops, that should have been 'self.relax.data.run_names'!  It's  
        
all
      
fixed in the repository.

Cheers,

Edward


On 6/25/07, Douglas Kojetin <douglas.kojetin@xxxxxxxxx> wrote:
        
Hi Edward,

A new error, that appears before the first round of iteration  
          
starts
      
after executing the script:

 
          
---------------------------------------------------------------------
      
---
----------------------------
Traceback (most recent call last):
   File "/home/dkojetin/bin/relax", line 454, in ?
     Relax()
   File "/home/dkojetin/bin/relax", line 166, in __init__
     self.interpreter.run()
   File "/opt/relax/1.2/prompt/interpreter.py", line 213, in run
     run_script(intro=self.relax.intro_string, local=self.local,
script_file=self.relax.script_file, quit=1)
   File "/opt/relax/1.2/prompt/interpreter.py", line 388, in
run_script
     console.interact(intro, local, script_file, quit)
   File "/opt/relax/1.2/prompt/interpreter.py", line 340, in
interact_script
     execfile(script_file, local)
   File "n3.py", line 578, in ?
     Main(self.relax)
   File "n3.py", line 230, in __init__
     self.load_tensor()
   File "n3.py", line 499, in load_tensor
     if 'previous' in self.relax.data.runs:
AttributeError: Data instance has no attribute 'runs'


Doug



On Jun 25, 2007, at 8:54 AM, Edward d'Auvergne wrote:

          
Hi,

Sorry, that relax_data_store was 1.3 line specific and I  
            
forgot to
      
change that for the 1.2 line.  The repository code should now  
            
have
      
that fixed.

Cheers,

Edward


On 6/25/07, Douglas Kojetin <douglas.kojetin@xxxxxxxxx> wrote:
            
Hello,

Here is the error reported by the modified full_analysis.py  
              
script
      
(named n.py in the below Traceback):

#--start

              
 
          
---------------------------------------------------------------------
      
---
----------------------------
Traceback (most recent call last):
   File "/home/dkojetin/bin/relax", line 454, in ?
     Relax()
   File "/home/dkojetin/bin/relax", line 166, in __init__
     self.interpreter.run()
   File "/opt/relax/1.2/prompt/interpreter.py", line 213, in  
              
run
      
     run_script(intro=self.relax.intro_string,  
              
local=self.local,
      
script_file=self.relax.script_file, quit=1)
   File "/opt/relax/1.2/prompt/interpreter.py", line 388, in
run_script
     console.interact(intro, local, script_file, quit)
   File "/opt/relax/1.2/prompt/interpreter.py", line 340, in
interact_script
     execfile(script_file, local)
   File "n.py", line 577, in ?
     Main(self.relax)
   File "n.py", line 229, in __init__
     self.load_tensor()
   File "n.py", line 498, in load_tensor
     if relax_data_store.has_key('previous'):
NameError: global name 'relax_data_store' is not defined

#--end

Thanks,
Doug


On Jun 25, 2007, at 4:42 AM, Edward d'Auvergne wrote:
              
Hi,

I've just made modifications to the 1.2 and 1.3 repository
                
lines to
          
hopefully fix this problem.  Could you try again to see if  
                
the
      
script
              
works this time?

Cheers,

Edward


On 6/25/07, Douglas Kojetin <douglas.kojetin@xxxxxxxxx>  
                
wrote:
      
Hi Edward,

I gave the new script a try, setting CONV_LOOP = 1, but it
                  
reported
              
an error after optimizing the first round:

"""
Convergence:
     [ No ]

relax> run.create(run='previous', run_type='mf')
RelaxError: The run 'previous' already exists.
"""

If you have any suggestions for changes to the script, send
                  
them my
              
way and I'll give it a try.

Doug



On Jun 24, 2007, at 11:47 AM, Edward d'Auvergne wrote:

                  
Hi,

The simplest way to do this would be to use a while loop
                    
using a
          
modified version of the convergence() function which  
                    
returns
      
1 or 0
              
depending on whether the results have converged  
                    
(exactly like
      
your
              
suggestion).  I have added this looping ability to the
full_analysis.py script in the relax repository (to both
                    
the 1.2
          
and
                  
1.3 lines).  This is not activated by default though  
                    
and the
      
scripts
                  
in the repository are significantly different from that in
                    
the
          
relax
                  
1.2.10 version (all the variables which should be  
                    
modified by
      
the user
                  
have been shifted to the top of the script).  Would you be
                    
able to
              
test if this automatic looping over all rounds of
                    
optimisation
          
until
                  
convergence actually works?  There could possibly be bugs
                    
lurking
              
there.  Thanks.

The problem that you encountered with the calling of the
                    
__init__()
              
function is because this function should not be called.
                    
Using that
              
type of approach, the looping should have been outside  
                    
of the
      
Main
              
class to work.

Cheers,

Edward


On 6/16/07, Douglas Kojetin <douglas.kojetin@xxxxxxxxx>
                    
wrote:
          
Hi All,

Is it possible to edit full_analysis.py so the
                      
optimization of
          
MII to
                  
MV (self.round > 0) is done automatically by looping  
                      
until
      
convergence?
                      
Do you mean that the script will automatically


                    
 I tried to do this by modifying the following in
convergence() [near the end]:

"""
         # Final print out.
         ##################

         print "\nConvergence:"
         if chi2_converged and models_converged and
                      
params_converged:
                  
             print "    [ Yes ]"
             return 1
         else:
             print "    [ No ]"
             return 0
"""

then modifying __init__(), at the end of the "elif
                      
DIFF_MODEL ==
              
'sphere' or DIFF_MODEL == 'prolate' or DIFF_MODEL ==
                      
'oblate' or
              
DIFF_MODEL == 'ellipsoid':" statement:

"""
                 # Test for convergence.
                 test=self.convergence(run=name)

                 if test == 0:
                     __init__(self.relax)
                     #Main(self.relax)
"""

but it did not work properly.  I think the problem has
                      
something to
                  
do with the call to __init__() or Main().  I'll see if  
                      
I can
      
dig up
                  
the error reported by relax.

Thanks,
Doug

_______________________________________________
relax (http://nmr-relax.com)

This is the relax-users mailing list
relax-users@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-users

                      
                  
              
          
      


_______________________________________________
relax (http://nmr-relax.com)

This is the relax-users mailing list
relax-users@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-users

  

-- 
         ______________________________________    
     _______________________________________________
    |                                               |
   || Sebastien Morin                               ||
  ||| Etudiant au PhD en biochimie                  |||
 |||| Laboratoire de resonance magnetique nucleaire ||||
||||| Dr Stephane Gagne                             |||||
 |||| CREFSIP (Universite Laval, Quebec, CANADA)    ||||
  ||| 1-418-656-2131 #4530                          |||
   ||                                               ||
    |_______________________________________________|
         ______________________________________    

Related Messages


Powered by MHonArc, Updated Wed Aug 29 16:40:51 2007