Clipper
hkl_datatypes.h
00001 
00004 //C Copyright (C) 2000-2006 Kevin Cowtan and University of York
00005 //L
00006 //L  This library is free software and is distributed under the terms
00007 //L  and conditions of version 2.1 of the GNU Lesser General Public
00008 //L  Licence (LGPL) with the following additional clause:
00009 //L
00010 //L     `You may also combine or link a "work that uses the Library" to
00011 //L     produce a work containing portions of the Library, and distribute
00012 //L     that work under terms of your choice, provided that you give
00013 //L     prominent notice with each copy of the work that the specified
00014 //L     version of the Library is used in it, and that you include or
00015 //L     provide public access to the complete corresponding
00016 //L     machine-readable source code for the Library including whatever
00017 //L     changes were used in the work. (i.e. If you make changes to the
00018 //L     Library you must distribute those, but you do not need to
00019 //L     distribute source or object code to those portions of the work
00020 //L     not covered by this licence.)'
00021 //L
00022 //L  Note that this clause grants an additional right and does not impose
00023 //L  any additional restriction, and so does not affect compatibility
00024 //L  with the GNU General Public Licence (GPL). If you wish to negotiate
00025 //L  other terms, please contact the maintainer.
00026 //L
00027 //L  You can redistribute it and/or modify the library under the terms of
00028 //L  the GNU Lesser General Public License as published by the Free Software
00029 //L  Foundation; either version 2.1 of the License, or (at your option) any
00030 //L  later version.
00031 //L
00032 //L  This library is distributed in the hope that it will be useful, but
00033 //L  WITHOUT ANY WARRANTY; without even the implied warranty of
00034 //L  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00035 //L  Lesser General Public License for more details.
00036 //L
00037 //L  You should have received a copy of the CCP4 licence and/or GNU
00038 //L  Lesser General Public License along with this library; if not, write
00039 //L  to the CCP4 Secretary, Daresbury Laboratory, Warrington WA4 4AD, UK.
00040 //L  The GNU Lesser General Public can also be obtained by writing to the
00041 //L  Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
00042 //L  MA 02111-1307 USA
00043 
00044 
00045 #ifndef CLIPPER_HKL_DATATYPES
00046 #define CLIPPER_HKL_DATATYPES
00047 
00048 #include <complex>
00049 #include "hkl_data.h"
00050 
00051 
00052 namespace clipper
00053 {
00054 
00055   // Now define some actual datatypes
00056 
00057 
00058   namespace datatypes
00059   {
00060 
00062 
00065     template<class dtype> class I_sigI : private Datatype_base
00066     {
00067     public:
00068       I_sigI() { Util::set_null(I_); Util::set_null(sigI_); }
00069       I_sigI( const dtype& I, const dtype& sigI ) : I_(I), sigI_(sigI) {}
00070       void set_null() { Util::set_null(I_); Util::set_null(sigI_); }
00071       static String type() { return "I_sigI"; }
00072       void friedel() {}
00073       void shift_phase(const ftype&) {}
00074       bool missing() const { return (Util::is_nan(I_) || Util::is_nan(sigI_)); }
00075       static int data_size() { return 2; }
00076       static String data_names() { return "I sigI"; }
00077       void data_export( xtype array[] ) const
00078         { array[0] = I(); array[1] = sigI(); }
00079       void data_import( const xtype array[] )
00080         { I() = array[0]; sigI() = array[1]; }
00082       void scale(const ftype& s) { I_ *= (s*s); sigI_ *= (s*s); }
00083       // accessors
00084       const dtype& I() const { return I_; }  //<! read access
00085       const dtype& sigI() const { return sigI_; }  //<! read access
00086       dtype& I() { return I_; }  //<! write access
00087       dtype& sigI() { return sigI_; }  //<! write access
00088       // anomalous-type accessors
00089       const dtype& I_pl() const { return I_; }  //<! read access as anom
00090       const dtype& sigI_pl() const { return sigI_; }  //<! read access as anom
00091       const dtype& I_mi() const { return I_; }  //<! read access as anom
00092       const dtype& sigI_mi() const { return sigI_; }  //<! read access as anom
00093       dtype cov() const { return 1.0; }  //<! read access as anom
00094     private:
00095       dtype I_,sigI_;
00096     };
00097 
00099 
00102     template<class dtype> class I_sigI_ano : private Datatype_base
00103     { public:
00104       I_sigI_ano() { set_null(); }
00105       void set_null() { Util::set_null(I_pl_); Util::set_null(I_mi_); Util::set_null(sigI_pl_); Util::set_null(sigI_mi_); Util::set_null(cov_); }
00106       static String type() { return "I_sigI_ano"; }
00107       void friedel() { dtype I=I_pl_; I_pl_=I_mi_; I_mi_=I;
00108                        I=sigI_pl_; sigI_pl_=sigI_mi_; sigI_mi_=I; }
00109       void shift_phase(const ftype&) {}
00110       bool missing() const { return (Util::is_nan(I_pl_) && Util::is_nan(I_mi_)); }
00111       static int data_size() { return 5; }
00112       static String data_names() { return "I+ sigI+ I- sigI- covI+-"; }
00113       void data_export( xtype a[] ) const { a[0] = I_pl(); a[1] = sigI_pl(); a[2] = I_mi(); a[3] = sigI_mi(); a[4] = cov(); }
00114       void data_import( const xtype a[] ) { I_pl() = a[0]; sigI_pl() = a[1]; I_mi() = a[2]; sigI_mi() = a[3]; cov() = a[4]; }
00116       void scale(const ftype& s) { I_pl_ *= (s*s); sigI_pl_ *= (s*s); I_mi_ *= (s*s); sigI_mi_ *= (s*s); cov_ *= (s*s); }
00117       // accessors
00118       const dtype& I_pl() const { return I_pl_; }  //<! read access
00119       const dtype& sigI_pl() const { return sigI_pl_; }  //<! read access
00120       const dtype& I_mi() const { return I_mi_; }  //<! read access
00121       const dtype& sigI_mi() const { return sigI_mi_; }  //<! read access
00122       const dtype& cov() const { return cov_; }  //<! read access
00123       dtype& I_pl() { return I_pl_; }  //<! write access
00124       dtype& sigI_pl() { return sigI_pl_; }  //<! write access
00125       dtype& I_mi() { return I_mi_; }  //<! write access
00126       dtype& sigI_mi() { return sigI_mi_; }  //<! write access
00127       dtype& cov() { return cov_; }  //<! write access
00128       // nonanomalous-type accessors
00129       dtype I() const { return Util::mean(I_pl_,I_mi_); }  //<! read access as simple
00130       dtype sigI() const { return Util::sig_mean(sigI_pl_,sigI_mi_,cov_); }  //<! read access as simple
00131     private:
00132       dtype I_pl_, I_mi_, sigI_pl_, sigI_mi_, cov_;
00133     };
00134 
00136 
00139     template<class dtype> class F_sigF : private Datatype_base
00140     {
00141     public:
00142       F_sigF() { Util::set_null(f_); Util::set_null(sigf_); }
00143       F_sigF( const dtype& f, const dtype& sigf ) : f_(f), sigf_(sigf) {}
00144       void set_null() { Util::set_null(f_); Util::set_null(sigf_); }
00145       static String type() { return "F_sigF"; }
00146       void friedel() {}
00147       void shift_phase(const ftype&) {}
00148       bool missing() const { return (Util::is_nan(f_) || Util::is_nan(sigf_)); }
00149       static int data_size() { return 2; }
00150       static String data_names() { return "F sigF"; }
00151       void data_export( xtype array[] ) const
00152         { array[0] = f(); array[1] = sigf(); }
00153       void data_import( const xtype array[] )
00154         { f() = array[0]; sigf() = array[1]; }
00156       void scale(const ftype& s) { f_ *= s; sigf_ *= s; }
00157       // accessors
00158       const dtype& f() const { return f_; }  //<! read access
00159       const dtype& sigf() const { return sigf_; }  //<! read access
00160       dtype& f() { return f_; }  //<! write access
00161       dtype& sigf() { return sigf_; }  //<! write access
00162       // anomalous-type accessors
00163       const dtype& f_pl() const { return f_; }  //<! read access as anom
00164       const dtype& sigf_pl() const { return sigf_; }  //<! read access as anom
00165       const dtype& f_mi() const { return f_; }  //<! read access as anom
00166       const dtype& sigf_mi() const { return sigf_; }  //<! read access as anom
00167       dtype cov() const { return 1.0; }  //<! read access as anom
00168     private:
00169       dtype f_,sigf_;
00170     };
00171 
00173 
00176     template<class dtype> class F_sigF_ano : private Datatype_base
00177     { public:
00178       F_sigF_ano() { set_null(); }
00179       void set_null() { Util::set_null(f_pl_); Util::set_null(f_mi_); Util::set_null(sigf_pl_); Util::set_null(sigf_mi_); Util::set_null(cov_); }
00180       static String type() { return "F_sigF_ano"; }
00181       void friedel() { dtype f=f_pl_; f_pl_=f_mi_; f_mi_=f;
00182                        f=sigf_pl_; sigf_pl_=sigf_mi_; sigf_mi_=f; }
00183       void shift_phase(const ftype&) {}
00184       bool missing() const { return (Util::is_nan(f_pl_) && Util::is_nan(f_mi_)); }
00185       static int data_size() { return 5; }
00186       static String data_names() { return "F+ sigF+ F- sigF- covF+-"; }
00187       void data_export( xtype a[] ) const { a[0] = f_pl(); a[1] = sigf_pl(); a[2] = f_mi(); a[3] = sigf_mi(); a[4] = cov(); }
00188       void data_import( const xtype a[] ) { f_pl() = a[0]; sigf_pl() = a[1]; f_mi() = a[2]; sigf_mi() = a[3]; cov() = a[4]; }
00190       void scale(const ftype& s) { f_pl_ *= s; sigf_pl_ *= s; f_mi_ *= s; sigf_mi_ *= s; cov_ *= (s*s); }
00191       // accessors
00192       const dtype& f_pl() const { return f_pl_; }  //<! read access
00193       const dtype& sigf_pl() const { return sigf_pl_; }  //<! read access
00194       const dtype& f_mi() const { return f_mi_; }  //<! read access
00195       const dtype& sigf_mi() const { return sigf_mi_; }  //<! read access
00196       const dtype& cov() const { return cov_; }  //<! read access
00197       dtype& f_pl() { return f_pl_; }  //<! write access
00198       dtype& sigf_pl() { return sigf_pl_; }  //<! write access
00199       dtype& f_mi() { return f_mi_; }  //<! write access
00200       dtype& sigf_mi() { return sigf_mi_; }  //<! write access
00201       dtype& cov() { return cov_; }  //<! write access
00202       // nonanomalous-type accessors
00203       dtype f() const { return Util::mean(f_pl_,f_mi_); }  //<! read access as simple
00204       dtype sigf() const { return Util::sig_mean(sigf_pl_,sigf_mi_,cov_); }  //<! read access as simple
00205     private:
00206       dtype f_pl_, f_mi_, sigf_pl_, sigf_mi_, cov_;
00207     };
00208 
00210 
00222     template<class dtype> class E_sigE : private Datatype_base
00223     {
00224     public:
00225       E_sigE() { Util::set_null(E_); Util::set_null(sigE_); }
00226       E_sigE( const dtype& E, const dtype& sigE ) : E_(E), sigE_(sigE) {}
00227       void set_null() { Util::set_null(E_); Util::set_null(sigE_); }
00228       static String type() { return "E_sigE"; }
00229       void friedel() {}
00230       void shift_phase(const ftype&) {}
00231       bool missing() const { return (Util::is_nan(E_) || Util::is_nan(sigE_)); }
00232       static int data_size() { return 2; }
00233       static String data_names() { return "E sigE"; }
00234       void data_export( xtype array[] ) const
00235         { array[0] = E(); array[1] = sigE(); }
00236       void data_import( const xtype array[] )
00237         { E() = array[0]; sigE() = array[1]; }
00239       void scale(const ftype& s) { E_ *= s; sigE_ *= s; }
00240       // accessors
00241       const dtype& E() const { return E_; }  //<! read access
00242       const dtype& sigE() const { return sigE_; }  //<! read access
00243       dtype& E() { return E_; }  //<! write access
00244       dtype& sigE() { return sigE_; }  //<! write access
00245       // anomalous-type accessors
00246       const dtype& E_pl() const { return E_; }  //<! read access as anom
00247       const dtype& sigE_pl() const { return sigE_; }  //<! read access as anom
00248       const dtype& E_mi() const { return E_; }  //<! read access as anom
00249       const dtype& sigE_mi() const { return sigE_; }  //<! read access as anom
00250       dtype cov() const { return 1.0; }  //<! read access as anom
00251     private:
00252       dtype E_,sigE_;
00253     };
00254 
00256 
00257     template<class dtype> class E_sigE_ano : private Datatype_base
00258     { public:
00259       E_sigE_ano() { set_null(); }
00260       void set_null() { Util::set_null(E_pl_); Util::set_null(E_mi_); Util::set_null(sigE_pl_); Util::set_null(sigE_mi_); Util::set_null(cov_); }
00261       static String type() { return "E_sigE_ano"; }
00262       void friedel() { dtype e=E_pl_; E_pl_=E_mi_; E_mi_=e;
00263                        e=sigE_pl_; sigE_pl_=sigE_mi_; sigE_mi_=e; }
00264       void shift_phase(const ftype&) {}
00265       bool missing() const { return (Util::is_nan(E_pl_) && Util::is_nan(E_mi_)); }
00266       static int data_size() { return 5; }
00267       static String data_names() { return "E+ sigE+ E- sigE- covE+-"; }
00268       void data_export( xtype a[] ) const { a[0] = E_pl(); a[1] = sigE_pl(); a[2] = E_mi(); a[3] = sigE_mi(); a[4] = cov(); }
00269       void data_import( const xtype a[] ) { E_pl() = a[0]; sigE_pl() = a[1]; E_mi() = a[2]; sigE_mi() = a[3]; cov() = a[4]; }
00271       void scale(const ftype& s) { E_pl_ *= s; sigE_pl_ *= s; E_mi_ *= s; sigE_mi_ *= s; cov_ *= (s*s); }
00272       // accessors
00273       const dtype& E_pl() const { return E_pl_; }  //<! read access
00274       const dtype& sigE_pl() const { return sigE_pl_; }  //<! read access
00275       const dtype& E_mi() const { return E_mi_; }  //<! read access
00276       const dtype& sigE_mi() const { return sigE_mi_; }  //<! read access
00277       const dtype& cov() const { return cov_; }  //<! read access
00278       dtype& E_pl() { return E_pl_; }  //<! write access
00279       dtype& sigE_pl() { return sigE_pl_; }  //<! write access
00280       dtype& E_mi() { return E_mi_; }  //<! write access
00281       dtype& sigE_mi() { return sigE_mi_; }  //<! write access
00282       dtype& cov() { return cov_; }  //<! write access
00283       // nonanomalous-type accessors
00284       dtype E() const { return Util::mean(E_pl_,E_mi_); }  //<! read access as simple
00285       dtype sigE() const { return Util::sig_mean(sigE_pl_,sigE_mi_,cov_); }  //<! read access as simple
00286     private:
00287       dtype E_pl_, E_mi_, sigE_pl_, sigE_mi_, cov_;
00288     };
00289 
00291     template<class dtype> class F_phi : private Datatype_base
00292     {
00293     public:
00294       F_phi() { Util::set_null(f_); Util::set_null(phi_); }
00295       F_phi( const dtype& f, const dtype& phi ) : f_(f), phi_(phi) {}
00296       void set_null() { Util::set_null(f_); Util::set_null(phi_); }
00297       static String type() { return "F_phi"; }
00298       void friedel()
00299         { if (!Util::is_nan(phi_)) phi_=-phi_; }
00300       void shift_phase(const ftype& dphi)
00301         { if (!Util::is_nan(phi_)) phi_+=dphi; }
00302       bool missing() const
00303         { return (Util::is_nan(f_) || Util::is_nan(phi_)); }
00304       static int data_size() { return 2; }
00305       static String data_names() { return "F phi"; }
00306       void data_export( xtype array[] ) const
00307         { array[0] = f(); array[1] = phi(); }
00308       void data_import( const xtype array[] )
00309         { f() = array[0]; phi() = array[1]; }
00311       void scale(const ftype& s) { f_ *= s; }
00312       // accessors
00313       const dtype& f() const { return f_; }  //<! read access
00314       const dtype& phi() const { return phi_; }  //<! read access
00315       dtype& f() { return f_; }  //<! write access
00316       dtype& phi() { return phi_; }  //<! write access
00318       dtype a() const { return f_ * cos( phi_ ); }
00320       dtype b() const { return f_ * sin( phi_ ); }
00322       F_phi(const std::complex<dtype> c) { f_=std::abs(c); phi_=std::arg(c); }
00324       operator std::complex<dtype>() const { return std::polar(f_, phi_); }
00326       dtype resolve(const dtype phi) { return f_ * cos( phi_ - phi ); }
00328       const F_phi<dtype>& norm() { if ( f_ < 0.0 ) { f_ = -f_; phi_ += Util::pi(); } phi_ = Util::mod( phi_, Util::twopi() ); return *this; }
00329     private:
00330       dtype f_,phi_;
00331     };
00332 
00334     template<class dtype> class Phi_fom : private Datatype_base
00335     {
00336     public:
00337       Phi_fom() { Util::set_null(phi_); Util::set_null(fom_); }
00338       Phi_fom( const dtype& phi, const dtype& fom ) : phi_(phi), fom_(fom) {}
00339       void set_null() { Util::set_null(phi_); Util::set_null(fom_); }
00340       static String type() { return "Phi_fom"; }
00341       void friedel()
00342         { if (!Util::is_nan(phi_)) phi_=-phi_; }
00343       void shift_phase(const ftype& dphi)
00344         { if (!Util::is_nan(phi_)) phi_+=dphi; }
00345       bool missing() const
00346         { return (Util::is_nan(phi_) || Util::is_nan(fom_)); }
00347       static int data_size() { return 2; }
00348       static String data_names() { return "phi fom"; }
00349       void data_export( xtype array[] ) const
00350         { array[0] = phi(); array[1] = fom(); }
00351       void data_import( const xtype array[] )
00352         { phi() = array[0]; fom() = array[1]; }
00353       // accessors
00354       const dtype& phi() const { return phi_; }  //<! read access
00355       const dtype& fom() const { return fom_; }  //<! read access
00356       dtype& phi() { return phi_; }  //<! write access
00357       dtype& fom() { return fom_; }  //<! write access
00358     private:
00359       dtype phi_,fom_;
00360     };
00361 
00363     template<class dtype> class ABCD : private Datatype_base
00364     {
00365     public:
00366       ABCD() { Util::set_null(a_); Util::set_null(b_); Util::set_null(c_); Util::set_null(d_); }
00367       ABCD( const dtype& a, const dtype& b, const dtype& c, const dtype& d ) : a_(a), b_(b), c_(c), d_(d) {}
00368       void set_null() { Util::set_null(a_); Util::set_null(b_); Util::set_null(c_); Util::set_null(d_); }
00369       static String type() { return "ABCD"; }
00370       void friedel() { if ( !missing() ) { b_=-b_; d_=-d_; } }
00371       void shift_phase(const ftype& dphi)
00372       {
00373         if ( !missing() ) {
00374           ftype cosd,sind;
00375           dtype a1, b1, c1, d1;
00376           cosd = cos(dphi);
00377           sind = sin(dphi);
00378           a1 = a_*cosd - b_*sind;
00379           b1 = a_*sind + b_*cosd;
00380           cosd = cos(2.0*dphi);
00381           sind = sin(2.0*dphi);
00382           c1 = c_*cosd - d_*sind;
00383           d1 = c_*sind + d_*cosd;
00384           a_ = a1; b_ = b1; c_ = c1; d_ = d1;
00385         }
00386       }
00387       bool missing() const { return (Util::is_nan(a_) || Util::is_nan(b_) || Util::is_nan(c_) || Util::is_nan(d_)); }
00388       static int data_size() { return 4; }
00389       static String data_names() { return "A B C D"; }
00390       void data_export( xtype array[] ) const
00391         { array[0] = a(); array[1] = b(); array[2] = c(); array[3] = d(); }
00392       void data_import( const xtype array[] )
00393         { a() = array[0]; b() = array[1]; c() = array[2]; d() = array[3]; }
00394       // accessors
00395       const dtype& a() const { return a_; }  //<! read access
00396       const dtype& b() const { return b_; }  //<! read access
00397       const dtype& c() const { return c_; }  //<! read access
00398       const dtype& d() const { return d_; }  //<! read access
00399       dtype& a() { return a_; }  //<! write access
00400       dtype& b() { return b_; }  //<! write access
00401       dtype& c() { return c_; }  //<! write access
00402       dtype& d() { return d_; }  //<! write access
00403     private:
00404       dtype a_,b_,c_,d_;
00405     };
00406 
00408     class Flag : private Datatype_base
00409     {
00410     public:
00411       Flag() { flag_ = -1; }
00412       explicit Flag( const int& flag ) : flag_(flag) {}
00413       void set_null() { flag_ = -1; }
00414       static String type() { return "Flag"; }
00415       void friedel() {}
00416       void shift_phase(const ftype&) {}
00417       bool missing() const { return (flag_ < 0); }
00418       static int data_size() { return 1; }
00419       static String data_names() { return "flag"; }
00420       void data_export( xtype array[] ) const
00421         { array[0] = xtype(flag()); }
00422       void data_import( const xtype array[] )
00423         { flag() = int(array[0]); }
00424       // accessors
00425       const int& flag() const { return flag_; }  //<! read access
00426       int& flag() { return flag_; }  //<! write access
00427     private:
00428       int flag_;
00429     };
00430 
00432     class Flag_bool : private Datatype_base
00433     {
00434     public:
00435       Flag_bool() : flag_(false) {}
00436       void set_null() { flag_ = false; }
00437       static String type() { return "Flag_bool"; }
00438       void friedel() {}
00439       void shift_phase(const ftype&) {}
00440       bool missing() const { return (!flag_); }
00441       static int data_size() { return 1; }
00442       static String data_names() { return "flag"; }
00443       void data_export( xtype array[] ) const
00444         { array[0] = xtype(flag()); }
00445       void data_import( const xtype array[] )
00446         { flag() = bool(array[0]); }
00447       // accessors
00448       const bool& flag() const { return flag_; }  //<! read access
00449       bool& flag() { return flag_; }  //<! write access
00450     private:
00451       bool flag_;
00452     };
00453 
00455 
00456     template<class dtype> class D_sigD : private Datatype_base
00457     {
00458     public:
00459       D_sigD() { Util::set_null(d_); Util::set_null(sigd_); }
00460       D_sigD( const dtype& d, const dtype& sigd ) : d_(d), sigd_(sigd) {}
00461       void set_null() { Util::set_null(d_); Util::set_null(sigd_); }
00462       static String type() { return "D_sigD"; }
00463       void friedel() { d_ = -d_; }
00464       void shift_phase(const ftype&) {}
00465       bool missing() const { return (Util::is_nan(d_) || Util::is_nan(sigd_)); }
00466       static int data_size() { return 2; }
00467       static String data_names() { return "Dano sigDano"; }
00468       void data_export( xtype array[] ) const
00469         { array[0] = d(); array[1] = sigd(); }
00470       void data_import( const xtype array[] )
00471         { d() = array[0]; sigd() = array[1]; }
00473       void scale(const ftype& s) { d_ *= s; sigd_ *= s; }
00474       // accessors
00475       const dtype& d() const { return d_; }  //<! read access
00476       const dtype& sigd() const { return sigd_; }  //<! read access
00477       dtype& d() { return d_; }  //<! write access
00478       dtype& sigd() { return sigd_; }  //<! write access
00479     private:
00480       dtype d_,sigd_;
00481     };
00482 
00483   }
00484 
00485 
00486   namespace data32
00487   {
00488     typedef clipper::datatypes::I_sigI<ftype32> I_sigI;          
00489     typedef clipper::datatypes::I_sigI_ano<ftype32> I_sigI_ano;  
00490     typedef clipper::datatypes::F_sigF<ftype32> F_sigF;          
00491     typedef clipper::datatypes::F_sigF_ano<ftype32> F_sigF_ano;  
00492     typedef clipper::datatypes::E_sigE<ftype32> E_sigE;          
00493     typedef clipper::datatypes::F_phi<ftype32> F_phi;            
00494     typedef clipper::datatypes::Phi_fom<ftype32> Phi_fom;        
00495     typedef clipper::datatypes::ABCD<ftype32> ABCD;              
00496     typedef clipper::datatypes::Flag Flag;                       
00497     typedef clipper::datatypes::Flag_bool Flag_bool;             
00498     typedef clipper::datatypes::D_sigD<ftype32> D_sigD;          
00499   }
00500 
00501   namespace data64
00502   {
00503     typedef clipper::datatypes::I_sigI<ftype64> I_sigI;          
00504     typedef clipper::datatypes::I_sigI_ano<ftype64> I_sigI_ano;  
00505     typedef clipper::datatypes::F_sigF<ftype64> F_sigF;          
00506     typedef clipper::datatypes::F_sigF_ano<ftype64> F_sigF_ano;  
00507     typedef clipper::datatypes::E_sigE<ftype64> E_sigE;          
00508     typedef clipper::datatypes::F_phi<ftype64> F_phi;            
00509     typedef clipper::datatypes::Phi_fom<ftype64> Phi_fom;        
00510     typedef clipper::datatypes::ABCD<ftype64> ABCD;              
00511     typedef clipper::datatypes::Flag Flag;                       
00512     typedef clipper::datatypes::Flag_bool Flag_bool;             
00513     typedef clipper::datatypes::D_sigD<ftype64> D_sigD;          
00514   }
00515 
00516 
00517 
00518 } // namespace clipper
00519 
00520 #endif