Clipper
Main Page
Related Pages
Namespaces
Classes
Files
File List
clipper
core
resol_fn.h
1
4
//C Copyright (C) 2000-2006 Kevin Cowtan and University of York
5
//L
6
//L This library is free software and is distributed under the terms
7
//L and conditions of version 2.1 of the GNU Lesser General Public
8
//L Licence (LGPL) with the following additional clause:
9
//L
10
//L `You may also combine or link a "work that uses the Library" to
11
//L produce a work containing portions of the Library, and distribute
12
//L that work under terms of your choice, provided that you give
13
//L prominent notice with each copy of the work that the specified
14
//L version of the Library is used in it, and that you include or
15
//L provide public access to the complete corresponding
16
//L machine-readable source code for the Library including whatever
17
//L changes were used in the work. (i.e. If you make changes to the
18
//L Library you must distribute those, but you do not need to
19
//L distribute source or object code to those portions of the work
20
//L not covered by this licence.)'
21
//L
22
//L Note that this clause grants an additional right and does not impose
23
//L any additional restriction, and so does not affect compatibility
24
//L with the GNU General Public Licence (GPL). If you wish to negotiate
25
//L other terms, please contact the maintainer.
26
//L
27
//L You can redistribute it and/or modify the library under the terms of
28
//L the GNU Lesser General Public License as published by the Free Software
29
//L Foundation; either version 2.1 of the License, or (at your option) any
30
//L later version.
31
//L
32
//L This library is distributed in the hope that it will be useful, but
33
//L WITHOUT ANY WARRANTY; without even the implied warranty of
34
//L MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35
//L Lesser General Public License for more details.
36
//L
37
//L You should have received a copy of the CCP4 licence and/or GNU
38
//L Lesser General Public License along with this library; if not, write
39
//L to the CCP4 Secretary, Daresbury Laboratory, Warrington WA4 4AD, UK.
40
//L The GNU Lesser General Public can also be obtained by writing to the
41
//L Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
42
//L MA 02111-1307 USA
43
44
45
#ifndef CLIPPER_RESOL_FN
46
#define CLIPPER_RESOL_FN
47
48
#include "hkl_data.h"
49
50
namespace
clipper {
51
53
66
class
BasisFn_base
67
{
68
public
:
70
enum
FNtype
{ GENERAL, LINEAR };
71
73
class
Fderiv
74
{
75
public
:
76
ftype
f
;
77
std::vector<ftype>
df
;
78
Matrix<>
df2
;
79
Fderiv
() {}
80
Fderiv
(
const
int
& np) :
df
(np,0.0),
df2
(np,np,0.0) {}
//<! constructor
81
};
82
84
BasisFn_base
() {}
86
BasisFn_base
(
const
int
& np ) : np_(np), result_(np) {}
88
const
int
&
num_params
()
const
{
return
np_; }
90
virtual
ftype
f
(
const
HKL
& hkl,
const
Cell
& cell,
const
std::vector<ftype>& params )
const
{
return
fderiv
( hkl, cell, params ).
f
; }
92
virtual
const
Fderiv&
fderiv
(
const
HKL
& hkl,
const
Cell
& cell,
const
std::vector<ftype>& params )
const
= 0;
94
virtual
FNtype
type
()
const
;
96
virtual
int
num_diagonals
()
const
;
97
protected
:
99
Fderiv
&
result
()
const
{
return
result_; }
100
virtual
~BasisFn_base
() {}
101
102
private
:
103
int
np_;
104
mutable
Fderiv result_;
105
};
106
108
114
class
TargetFn_base
115
{
116
public
:
118
class
Rderiv
119
{
120
public
:
121
ftype
r
;
122
ftype
dr
;
123
ftype
dr2
;
124
};
125
127
enum
FNtype
{ GENERAL, QUADRATIC };
129
130
virtual
Rderiv
rderiv
(
const
HKL_info::HKL_reference_index
& ih,
const
ftype
& fh )
const
= 0;
132
virtual
FNtype
type
()
const
{
return
GENERAL; }
133
virtual
~TargetFn_base
() {}
134
136
void
debug
(
const
HKL_info
& hkl_info )
const
;
137
};
138
139
141
186
class
ResolutionFn
187
{
188
public
:
190
ResolutionFn
(
const
HKL_info
& hkl_info,
const
BasisFn_base
& basisfn,
const
TargetFn_base
& targetfn,
const
std::vector<ftype>&
params
,
const
ftype
damp = 0.0,
const
bool
debug
=
false
);
192
inline
ftype
f
(
const
HKL_info::HKL_reference_index
& ih )
const
{
return
basisfn_
->
f
( ih.
hkl
(),
cell_
,
params_
); }
194
const
std::vector<ftype>&
params
()
const
;
195
197
void
debug
()
const
;
198
199
protected
:
200
const
HKL_info
*
hkl_info_
;
201
const
TargetFn_base
*
targetfn_
;
202
const
BasisFn_base
*
basisfn_
;
203
std::vector<ftype>
params_
;
204
Cell
cell_
;
205
207
void
calc_derivs
(
const
std::vector<ftype>& params,
ftype
& r, std::vector<ftype>& drdp,
Matrix<>
& drdp2 )
const
;
208
210
ResolutionFn
() {}
211
};
212
213
215
234
class
ResolutionFn_nonlinear
:
public
ResolutionFn
235
{
236
public
:
238
ResolutionFn_nonlinear
(
const
HKL_info
& hkl_info,
const
BasisFn_base
& basisfn,
const
TargetFn_base
& targetfn,
const
std::vector<ftype>&
params
,
const
ftype
damp = 0.0,
const
bool
debug
=
false
);
239
};
240
241
242
}
// namespace clipper
243
244
#endif
Generated on Fri Sep 6 2013 19:58:36 for Clipper by
1.8.4