File: solvation.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 239,848 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 93
file content (103 lines) | stat: -rw-r--r-- 2,947 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// ----------------------------------------------------
// $Maintainer: Marcel Schumann $
// $Authors: Marcel Schumann $
// ----------------------------------------------------

#include <BALL/SCORING/COMPONENTS/solvation.h>
#include <BALL/KERNEL/PTE.h>

using namespace BALL;
using namespace std;



Solvation::Solvation(ScoringFunction& sf)
	: ScoringComponent(sf)
{
	setName("Solvation");

	// Parameters taken from Autodock4, AD4_PARM99.dat
	solvation_parameters["H"] = 0.00051;
	solvation_parameters["N"] = -0.00162;
	solvation_parameters["C"] = -0.00143;
	solvation_parameters["O"] = -0.00251;
	solvation_parameters["S"] = -0.00214;
	solvation_parameters["Cl"] = -0.00110;
	solvation_parameters["Ca"] = -0.00110;
	solvation_parameters["Mn"] = -0.00110;
	solvation_parameters["Mg"] = -0.00110;
	solvation_parameters["Fe"] = -0.00110;
	solvation_parameters["Zn"] = -0.00110;
	solvation_parameters["Br"] = -0.00110;
	solvation_parameters["I"] = -0.00110;
	solvation_parameters["F"] = -0.00110;
	solvation_parameters["Cs"] = -0.00110;
	solvation_parameters["P"] = -0.00110;

	solvation_volumes["H"] = 0.9;
	solvation_volumes["N"] = 25.42;
	solvation_volumes["C"] = 29.10;
	solvation_volumes["O"] = 19.20;
	solvation_volumes["S"] = 33.51;
	solvation_volumes["Cl"] = 30.96;
	solvation_volumes["Ca"] = 21.06;
	solvation_volumes["Mn"] = 2.1400; // from AD4_parameters.dat
	solvation_volumes["Mg"] = 2.09;
	solvation_volumes["Fe"] = 1.8400; // from AD4_parameters.dat
	solvation_volumes["Zn"] = 5.58;
	solvation_volumes["Br"] = 45.83;
	solvation_volumes["I"] = 54.36;
	solvation_volumes["F"] = 22.45;
	solvation_volumes["Cs"] = 163.91;
	solvation_volumes["P"] = 38.79;

	type_name_ = "solv";
}



void Solvation::update(const AtomPairVector& pair_vector)
{
	pair_vector_ = pair_vector;
}


double Solvation::updateScore()
{
	score_ = 0;

	for (AtomPairVector::iterator it = pair_vector_.begin(); it != pair_vector_.end(); it++)
	{
		const Atom* atom_i = it->first;
		const Atom* atom_j = it->second;

		double distance = atom_i->getPosition().getDistance(atom_j->getPosition());

		String element_i = atom_i->getElement().getSymbol();
		map<String, double>::iterator search_it = solvation_parameters.find(element_i);
		if (search_it == solvation_parameters.end())
		{
			throw BALL::Exception::GeneralException(__FILE__, __LINE__, "Solvation::updateScore() error", "No solvation parameter for element "+element_i+" found!");
		}
		double par_i = search_it->second;

		String element_j = atom_j->getElement().getSymbol();
		search_it = solvation_volumes.find(element_j);
		if (search_it == solvation_volumes.end())
		{
			throw BALL::Exception::GeneralException(__FILE__, __LINE__, "Solvation::updateScore() error", "No solvation volume for element "+element_j+" found!");
		}
		double vol_j = search_it->second;

		score_ += par_i*vol_j*exp((-distance*distance)/(2*3.5*3.5));
	}

	/*
	scaleScore();
	return score_;
	*/

	return getScaledScore();
}