Commit 5b3bff53 authored by Heller, William T.'s avatar Heller, William T.
Browse files

Merge branch 'test_coupled_parameters' into 'master'

Test coupled parameters

See merge request !11
parents 397b5bbe f864c926
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -21,9 +21,11 @@ model:
        linear: [0.000, 0.010]
    sld: 
        linear: [-0.56, 8.00]
        #log: [0.0, 1.0]
    sld_solvent: 
        linear: [-0.56, 6.38]
        #coupled: [sld]
        #linear: [1.0, 2.0]
        log: [1.0, 2.0]
        coupled: [sld]
    radius: 
        linear: [50.0, 300.0] 
        polydispersity:
+96 −0
Original line number Diff line number Diff line
r"""
sas_temper

test_coupled_params.py:  code for testing parameters that are coupled  

This is intended for the "tests" folder.  

Oak Ridge National Laboratory, 2020

"""

import sys
import sas_temper.sas_temper_config as sa_config
import sas_temper.parse_conf as parse_conf
import sas_temper.modelconfig as modelconfig
import sas_temper.param as param
import sas_temper.polydispersity as polydispersity
import sas_temper.sas_temper_engine as engine

def main():
    if len(sys.argv) < 2:
        raise Exception("No configuration file specified")
    
    # this now works like the main function in __main__.py
    sasTemperConf, modelConf = parse_conf.parse_config(sys.argv[1])
    
    print("the input data file is " + str(sasTemperConf.datafile))
    print("    to be fit over q = " + str(sasTemperConf.qmin) + " to " + str(sasTemperConf.qmax))
    print("the output filename base is " + str(sasTemperConf.output))
    print("")
    print("The parameters for the simulated annealing:")
    print("     temperatures: " + str(sasTemperConf.temperatures))
    print("     temperature_rate: " + str(sasTemperConf.temp_rate))
    print("     parameter_rate: " + str(sasTemperConf.param_rate))
    print("     iterations: " + str(sasTemperConf.iterations))
    print("     models to generate: " + str(sasTemperConf.models))
    
    print("")
    print("The model that will be used for the data:")
    print("     name:  " + str(modelConf.name))
    print("     category:  " + str(modelConf.category))
    
    for i,p in enumerate(modelConf.params):
        print("\t\tparameters name:  " + str(p.name) + " kind: " + str(p.kind))
        if p.kind in ["fixed"]:
            print("\t\t\t value:  " + str(p.min))
        else :
            print("\t\t\t range:  " + str(p.min) + " to " + str(p.max))
        if p.coupled is not None :
            print("\t\t\t coupled to " + str(p.coupled))
    
    if modelConf.sq is not None:
        print("\tstructure factor:  " + modelConf.sq.type)
        for i,sqp in enumerate(modelConf.sq.params):
            print("\t\tparameters name:  " + str(sqp.name) + " kind: " + str(sqp.kind))
            if sqp.kind in ["fixed"]:
                print("\t\t\t value:  " + str(sqp.min))
            else :
                print("\t\t\t range:  " + str(sqp.min) + " to " + str(sqp.max))
            if sqp.coupled is not None :
                print("\t\t\t coupled to " + str(sqp.coupled))
    
    # create a couple instances of the model configuration class to hold things
    f = modelconfig.ModelConfig(modelConf.name,modelConf.category,modelConf.params,modelConf.sq)
    conv_conf = modelconfig.ModelConfig(modelConf.name,modelConf.category,modelConf.params,modelConf.sq)
    cur = modelconfig.ModelConfig(modelConf.name,modelConf.category,modelConf.params,modelConf.sq)
    
    # then call the function that will create a single random model
    f = engine.define_model(1,modelConf,10.0,1.0,cur)
    
    # convert it to a configuration that is used for calculating an actual model profile
    conv_conf = modelconfig.convert_conf(f)
    
    # print out the results
    print("")
    print("Original Configuration")
    for i,p in enumerate(f.params):
        print("\t\tparameters name:  " + str(p.name) + " value: " + str(p.val))
    
    if f.sq is not None:
        print("\tstructure factor:  " + f.sq.type)
        for i,sqp in enumerate(f.sq.params):
            print("\t\tparameters name:  " + str(sqp.name) + " value: " + str(sqp.val))
    
    print("")
    print("Converted Configuration")
    for i,p in enumerate(conv_conf.params):
        print("\t\tparameters name:  " + str(p.name) + " value: " + str(p.val))
    
    if conv_conf.sq is not None:
        print("\tstructure factor:  " + conv_conf.sq.type)
        for i,sqp in enumerate(conv_conf.sq.params):
            print("\t\tparameters name:  " + str(sqp.name) + " value: " + str(sqp.val))
            
if __name__=="__main__":
    main()