IMP logo
IMP Reference Guide  2.9.0
The Integrative Modeling Platform
profile_fit.py
1 ## \example saxs/profile_fit.py
2 # In this example, we read a protein from a PDB file and experimental profile file. Next we compute the theoretical profile from the PDB file and fit it to the experimental one. Unlike in profile.py example, here we fit the profile with adjustment of the excluded volume and hydration layer density of the molecule.
3 #
4 # This application is available as a web service at salilab.org/foxs. It is also available as C++ code in IMP/applications.
5 #
6 # The experimental data for lysozyme is taken from crysol program (www.embl-hamburg.de/ExternalInfo/Research/Sax/crysol.html)
7 #
8 
9 from __future__ import print_function
10 import IMP
11 import IMP.atom
12 import IMP.core
13 import IMP.saxs
14 import os
15 import sys
16 
17 IMP.setup_from_argv(sys.argv, "profile fit")
18 
19 m = IMP.Model()
20 
21 #! read PDB
24 
25 #! read experimental profile
26 exp_profile = IMP.saxs.Profile(IMP.saxs.get_example_path('lyzexp.dat'))
27 
28 print('min_q = ' + str(exp_profile.get_min_q()))
29 print('max_q = ' + str(exp_profile.get_max_q()))
30 print('delta_q = ' + str(exp_profile.get_delta_q()))
31 
32 #! select particles from the model
33 particles = IMP.atom.get_by_type(mp, IMP.atom.ATOM_TYPE)
34 
35 #! add radius for water layer computation
37 for i in range(0, len(particles)):
38  radius = ft.get_radius(particles[i])
39  IMP.core.XYZR.setup_particle(particles[i], radius)
40 # compute surface accessibility
42 surface_area = s.get_solvent_accessibility(IMP.core.XYZRs(particles))
43 
44 #! calculate SAXS profile
45 delta_q = 0.5 / 500
46 model_profile = IMP.saxs.Profile(0.0, 0.5, delta_q)
47 model_profile.calculate_profile_partial(particles, surface_area)
48 # model_profile.write_SAXS_file('6lyz.dat')
49 
50 #! calculate chi-square score (should be ~0.25 for this example)
51 saxs_score = IMP.saxs.ProfileFitterChi(exp_profile)
52 chi = saxs_score.compute_score(model_profile)
53 print('Chi without parameter fitting = ' + str(chi))
54 
55 chi = (saxs_score.fit_profile(model_profile)).get_chi_square()
56 print('Chi after adjustment of excluded volume and water layer parameters = ' + str(chi))
57 saxs_score.fit_profile(model_profile, 0.95, 1.05, -2.0, 4.0, False,
58  '6lyz_fitted.dat')
Select non water and non hydrogen atoms.
Definition: pdb.h:243
Strings setup_from_argv(const Strings &argv, std::string description, std::string positional_description, int num_positional)
static XYZR setup_particle(Model *m, ParticleIndex pi)
Definition: XYZR.h:48
FormFactorTable * get_default_form_factor_table()
void read_pdb(TextInput input, int model, Hierarchy h)
Class for storing model, its restraints, constraints, and particles.
Definition: Model.h:72
std::string get_example_path(std::string file_name)
Return the full path to one of this module's example files.
Basic functionality that is expected to be used by a wide variety of IMP users.
Functionality for loading, creating, manipulating and scoring atomic structures.
Support for small angle X-ray scattering (SAXS) data.