Clipper
hkl_compute.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_HKL_COMPUTE
46#define CLIPPER_HKL_COMPUTE
47
48#include "hkl_datatypes.h"
49
50
51namespace clipper
52{
53
54 namespace datatypes
55 {
56 // Define conversion operators
57
59 template<class dtype> class Compute_phifom_from_abcd
60 {
61 public:
62 // constructor: sets up integration tables
64 const Phi_fom<dtype> operator()( const HKL_info::HKL_reference_index& ih, const ABCD<dtype>& abcd ) const;
65 private:
66 ftype costab[144], sintab[144];
67 };
68
70 template<class dtype> class Compute_abcd_from_phifom
71 {
72 public:
73 const ABCD<dtype> operator()( const HKL_info::HKL_reference_index& ih, const Phi_fom<dtype>& phifom ) const;
74 };
75
77 template<class dtype> class Compute_fphi_from_fsigf_phifom
78 {
79 public:
80 const F_phi<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_sigF<dtype>& fsigf, const Phi_fom<dtype>& phifom ) const;
81 };
82
84 template<class dtype> class Compute_EsigE_from_FsigF
85 {
86 public:
87 const E_sigE<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_sigF<dtype>& fsigf ) const;
88 };
89
91 template<class dtype> class Compute_mean_fsigf_from_fsigfano
92 {
93 public:
94 const F_sigF<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_sigF_ano<dtype>& fsigfano ) const;
95 };
96
98 template<class dtype> class Compute_diff_fsigf_from_fsigfano
99 {
100 public:
101 const F_sigF<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_sigF_ano<dtype>& fsigfano ) const;
102 };
103
105 template<class dtype> class Compute_neg_fphi
106 {
107 public:
108 const F_phi<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_phi<dtype>& fphi1 ) const;
109 };
110
112 template<class dtype> class Compute_add_fphi
113 {
114 public:
115 const F_phi<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_phi<dtype>& fphi1, const F_phi<dtype>& fphi2 ) const;
116 };
117
119 template<class dtype> class Compute_sub_fphi
120 {
121 public:
122 const F_phi<dtype> operator()( const HKL_info::HKL_reference_index& ih, const F_phi<dtype>& fphi1, const F_phi<dtype>& fphi2 ) const;
123 };
124
126 template<class dtype> class Compute_add_abcd
127 {
128 public:
129 const ABCD<dtype> operator()( const HKL_info::HKL_reference_index& ih, const ABCD<dtype>& abcd1, const ABCD<dtype>& abcd2 ) const;
130 };
131
133 template<class T> class Compute_scale_u
134 {
135 public:
137 Compute_scale_u( const ftype& s, const ftype& u );
138 const T operator()( const HKL_info::HKL_reference_index& ih, T data ) const;
139 private:
140 ftype s_, u_;
141 };
142
144 template<class T> class Compute_scale_u_iso
145 {
146 public:
148 Compute_scale_u_iso( const ftype& s, const ftype& u );
149 const T operator()( const HKL_info::HKL_reference_index& ih, T data ) const;
150 private:
151 ftype s_, u_;
152 };
153
155 template<class T> class Compute_scale_u_aniso
156 {
157 public:
159 Compute_scale_u_aniso( const ftype& s, const U_aniso_orth& u );
160 const T operator()( const HKL_info::HKL_reference_index& ih, T data ) const;
161 private:
162 ftype s_;
163 U_aniso_orth u_;
164 };
165
167
169 template<class dtype, class T> class Compute_FsigF
170 {
171 public:
172 const F_sigF<dtype> operator()( const HKL_info::HKL_reference_index& ih, const T& fsigf ) const;
173 };
174
175
176 }
177
178
179 namespace data32
180 {
201
206 }
207
208 namespace data64
209 {
230
235 }
236
237
238
239} // namespace clipper
240
241#endif
HKL reference with index-like behaviour.
Definition hkl_info.h:152
Anisotropic orthogonal atomic displacement parameters.
Definition coords.h:427
Reflection data type: Hendrickson-Lattman coeff.
Definition hkl_datatypes.h:364
Compute from F_sigF to E_sigE.
Definition hkl_compute.h:85
const E_sigE< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_sigF< dtype > &fsigf) const
conv op
Definition hkl_compute.cpp:121
Compute from F_sigF to F_sigF.
Definition hkl_compute.h:170
const F_sigF< dtype > operator()(const HKL_info::HKL_reference_index &ih, const T &fsigf) const
conv op
Definition hkl_compute.cpp:275
Compute from Phi_fom to ABCD ( C = D = 0 )
Definition hkl_compute.h:71
const ABCD< dtype > operator()(const HKL_info::HKL_reference_index &ih, const Phi_fom< dtype > &phifom) const
conv op
Definition hkl_compute.cpp:94
Add two ABCD datalists.
Definition hkl_compute.h:127
const ABCD< dtype > operator()(const HKL_info::HKL_reference_index &ih, const ABCD< dtype > &abcd1, const ABCD< dtype > &abcd2) const
conv op
Definition hkl_compute.cpp:199
Add two F_phi datalists.
Definition hkl_compute.h:113
const F_phi< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_phi< dtype > &fphi1, const F_phi< dtype > &fphi2) const
conv op
Definition hkl_compute.cpp:181
Compute from F_sigF_anom to F_sigF (difference structure factor)
Definition hkl_compute.h:99
const F_sigF< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_sigF_ano< dtype > &fsigfano) const
conv op
Definition hkl_compute.cpp:154
Compute from F_sigF+Phi_fom to F_phi.
Definition hkl_compute.h:78
const F_phi< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_sigF< dtype > &fsigf, const Phi_fom< dtype > &phifom) const
conv op
Definition hkl_compute.cpp:110
Compute from F_sigF_anom to F_sigF (mean structure factor)
Definition hkl_compute.h:92
const F_sigF< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_sigF_ano< dtype > &fsigfano) const
conv op
Definition hkl_compute.cpp:132
Negate F_phi (i.e. advance phase by pi)
Definition hkl_compute.h:106
const F_phi< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_phi< dtype > &fphi1) const
conv op
Definition hkl_compute.cpp:172
Compute from ABCD to Phi_fom by phase integration (loses bimodality)
Definition hkl_compute.h:60
const Phi_fom< dtype > operator()(const HKL_info::HKL_reference_index &ih, const ABCD< dtype > &abcd) const
conv op
Definition hkl_compute.cpp:59
Apply scale and U to any scalable datatype.
Definition hkl_compute.h:156
const T operator()(const HKL_info::HKL_reference_index &ih, T data) const
conv op
Definition hkl_compute.cpp:267
Apply scale and U to any scalable datatype.
Definition hkl_compute.h:145
const T operator()(const HKL_info::HKL_reference_index &ih, T data) const
conv op
Definition hkl_compute.cpp:248
Definition hkl_compute.h:134
const T operator()(const HKL_info::HKL_reference_index &ih, T data) const
conv op
Definition hkl_compute.cpp:228
Subtract two F_phi datalists.
Definition hkl_compute.h:120
const F_phi< dtype > operator()(const HKL_info::HKL_reference_index &ih, const F_phi< dtype > &fphi1, const F_phi< dtype > &fphi2) const
conv op
Definition hkl_compute.cpp:190
Reflection data type: E + sigE.
Definition hkl_datatypes.h:223
Reflection data type: F + phi model or map coeff (e.g. Fcalc, Fbest)
Definition hkl_datatypes.h:292
Reflection data type: F(+) F(+) sigF(+) sigF(-) cov+-.
Definition hkl_datatypes.h:177
Reflection data type: F + sigF.
Definition hkl_datatypes.h:140
Reflection data type: best phi + fom.
Definition hkl_datatypes.h:335
datatypes::Compute_scale_u_iso< datatypes::F_sigF_ano< ftype32 > > Compute_scale_u_iso_fsigfano
operator
Definition hkl_compute.h:193
datatypes::Compute_EsigE_from_FsigF< ftype32 > Compute_EsigE_from_FsigF
operator
Definition hkl_compute.h:184
datatypes::Compute_FsigF< ftype32, datatypes::F_sigF_ano< ftype32 > > Compute_FsigF_from_ano
operator
Definition hkl_compute.h:200
datatypes::Compute_scale_u_iso< datatypes::I_sigI< ftype32 > > Compute_scale_u_iso_isigi
operator
Definition hkl_compute.h:191
datatypes::Compute_scale_u_iso< datatypes::F_phi< ftype32 > > Compute_scale_u_iso_fphi
operator
Definition hkl_compute.h:194
datatypes::Compute_abcd_from_phifom< ftype32 > Compute_abcd_from_phifom
operator
Definition hkl_compute.h:182
datatypes::Compute_scale_u_iso< datatypes::F_sigF< ftype32 > > Compute_scale_u_iso_fsigf
operator
Definition hkl_compute.h:192
datatypes::Compute_FsigF< ftype32, datatypes::F_sigF< ftype32 > > Compute_FsigF
operator
Definition hkl_compute.h:199
datatypes::Compute_scale_u_aniso< datatypes::F_sigF_ano< ftype32 > > Compute_scale_u_aniso_fsigfano
operator
Definition hkl_compute.h:197
datatypes::Compute_mean_fsigf_from_fsigfano< ftype32 > Compute_mean_fsigf_from_fsigfano
operator
Definition hkl_compute.h:185
datatypes::Compute_scale_u_aniso< datatypes::F_sigF< ftype32 > > Compute_scale_u_aniso_fsigf
operator
Definition hkl_compute.h:196
datatypes::Compute_add_abcd< ftype32 > Compute_add_abcd
operator
Definition hkl_compute.h:190
datatypes::Compute_scale_u_aniso< datatypes::I_sigI< ftype32 > > Compute_scale_u_aniso_isigi
operator
Definition hkl_compute.h:195
datatypes::Compute_diff_fsigf_from_fsigfano< ftype32 > Compute_diff_fsigf_from_fsigfano
operator
Definition hkl_compute.h:186
datatypes::Compute_add_fphi< ftype32 > Compute_add_fphi
operator
Definition hkl_compute.h:188
datatypes::Compute_phifom_from_abcd< ftype32 > Compute_phifom_from_abcd
operator
Definition hkl_compute.h:181
datatypes::Compute_neg_fphi< ftype32 > Compute_neg_fphi
operator
Definition hkl_compute.h:187
datatypes::Compute_scale_u_aniso< datatypes::F_phi< ftype32 > > Compute_scale_u_aniso_fphi
operator
Definition hkl_compute.h:198
datatypes::Compute_fphi_from_fsigf_phifom< ftype32 > Compute_fphi_from_fsigf_phifom
operator
Definition hkl_compute.h:183
datatypes::Compute_sub_fphi< ftype32 > Compute_sub_fphi
operator
Definition hkl_compute.h:189
datatypes::Compute_scale_u_aniso< datatypes::F_sigF_ano< ftype64 > > Compute_scale_u_aniso_fsigfano
operator
Definition hkl_compute.h:226
datatypes::Compute_add_abcd< ftype64 > Compute_add_abcd
operator
Definition hkl_compute.h:219
datatypes::Compute_FsigF< ftype64, datatypes::F_sigF_ano< ftype64 > > Compute_FsigF_from_ano
operator
Definition hkl_compute.h:229
datatypes::Compute_EsigE_from_FsigF< ftype64 > Compute_EsigE_from_FsigF
operator
Definition hkl_compute.h:213
datatypes::Compute_neg_fphi< ftype64 > Compute_neg_fphi
operator
Definition hkl_compute.h:216
datatypes::Compute_abcd_from_phifom< ftype64 > Compute_abcd_from_phifom
operator
Definition hkl_compute.h:211
datatypes::Compute_phifom_from_abcd< ftype64 > Compute_phifom_from_abcd
operator
Definition hkl_compute.h:210
datatypes::Compute_FsigF< ftype64, datatypes::F_sigF< ftype64 > > Compute_FsigF
operator
Definition hkl_compute.h:228
datatypes::Compute_add_fphi< ftype64 > Compute_add_fphi
operator
Definition hkl_compute.h:217
datatypes::Compute_scale_u_aniso< datatypes::F_sigF< ftype64 > > Compute_scale_u_aniso_fsigf
operator
Definition hkl_compute.h:225
datatypes::Compute_scale_u_iso< datatypes::I_sigI< ftype64 > > Compute_scale_u_iso_isigi
operator
Definition hkl_compute.h:220
datatypes::Compute_scale_u_iso< datatypes::F_phi< ftype64 > > Compute_scale_u_iso_fphi
operator
Definition hkl_compute.h:223
datatypes::Compute_scale_u_aniso< datatypes::F_phi< ftype64 > > Compute_scale_u_aniso_fphi
operator
Definition hkl_compute.h:227
datatypes::Compute_sub_fphi< ftype64 > Compute_sub_fphi
operator
Definition hkl_compute.h:218
datatypes::Compute_fphi_from_fsigf_phifom< ftype64 > Compute_fphi_from_fsigf_phifom
operator
Definition hkl_compute.h:212
datatypes::Compute_scale_u_iso< datatypes::F_sigF_ano< ftype64 > > Compute_scale_u_iso_fsigfano
operator
Definition hkl_compute.h:222
datatypes::Compute_scale_u_iso< datatypes::F_sigF< ftype64 > > Compute_scale_u_iso_fsigf
operator
Definition hkl_compute.h:221
datatypes::Compute_diff_fsigf_from_fsigfano< ftype64 > Compute_diff_fsigf_from_fsigfano
operator
Definition hkl_compute.h:215
datatypes::Compute_mean_fsigf_from_fsigfano< ftype64 > Compute_mean_fsigf_from_fsigfano
operator
Definition hkl_compute.h:214
datatypes::Compute_scale_u_aniso< datatypes::I_sigI< ftype64 > > Compute_scale_u_aniso_isigi
operator
Definition hkl_compute.h:224
ftype64 ftype
ftype definition for floating point representation
Definition clipper_precision.h:58