ccp4_mtz_io.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_CCP4_MTZ_IO
00046 #define CLIPPER_CCP4_MTZ_IO
00047 
00048 
00049 #include "ccp4_mtz_types.h"
00050 
00051 
00052 namespace clipper
00053 {
00054 
00056 
00064   class CCP4MTZ_type_registry
00065   {
00066   public:
00068     CCP4MTZ_type_registry();
00070     static void add_type( const String& name, const String& type, const ftype32& scale );
00072     static String type( const String& name );
00074     static ftype32 scale( const String& name );
00075   private:
00076     static char names[200][12];
00077     static char types[200][4];
00078     static ftype32 scales[200];
00079   };
00080 
00081 
00082 
00083 
00085 
00134   class CCP4MTZfile
00135   {
00136    public:
00137     enum CCP4MTZcolumn_label_mode { Default, Normal, Legacy };
00138 
00140     CCP4MTZfile();
00142     ~CCP4MTZfile();
00143 
00145     void open_read( const String filename_in );
00147     void close_read();
00149     void open_append( const String filename_in, const String filename_out );
00151     void close_append();
00153     void open_write( const String filename_out );
00155     void close_write();
00156 
00158     const Spacegroup& spacegroup() const;
00160     const Cell& cell() const;
00162     const Resolution& resolution() const;
00164     const HKL_sampling& hkl_sampling() const;
00166     std::vector<String> column_labels() const;
00167 
00169     void import_hkl_list( HKL_info& target );
00171     void import_hkl_info( HKL_info& target, const bool generate = true );
00173     void import_crystal( MTZcrystal& cxtl, const String mtzpath );
00175     void import_dataset( MTZdataset& cset, const String mtzpath );
00177     void import_hkl_data( HKL_data_base& cdata, const String mtzpath );
00178 
00180     void export_hkl_info( const HKL_info& target );
00182     void export_crystal( const MTZcrystal& cxtl, const String mtzpath );
00184     void export_dataset( const MTZdataset& cset, const String mtzpath );
00186     void export_hkl_data( const HKL_data_base& cdata, const String mtzpath );
00187 
00189     void import_chkl_data( Container& target, const String mtzpath, const String path = "" );
00191     void export_chkl_data( Container& target, const String mtzpath );
00192 
00194     std::vector<String> column_paths() const;
00196     const std::vector<String>& assigned_paths() const;
00197 
00199     String title() const;
00201     void set_title( const String& title );
00203     std::vector<String> history() const;
00205     void set_history( const std::vector<String>& history );
00206 
00208     void set_column_label_mode( CCP4MTZcolumn_label_mode mode );
00209 
00211     void import_hkl_data( HKL_data_base& cdata, MTZdataset& cset, MTZcrystal& cxtl, const String mtzpath );
00213     void export_hkl_data( const HKL_data_base& cdata, const MTZdataset& cset, const MTZcrystal& cxtl, const String mtzpath );
00214 
00215 
00216     // index from clipper data lists to mtz columns (by name)
00217     struct datacolinf{String label; String type;};
00218     struct datasetinf{MTZdataset dataset;std::vector<datacolinf> columns;};
00219     struct crystalinf{MTZcrystal crystal;std::vector<datasetinf> datasets;};
00220     struct hkldatacol{String path; ftype scale;};
00221   private:
00222     enum MTZmode { NONE, READ, WRITE, APPEND };
00223 
00225     String filename_in_, filename_out_;
00226     std::vector<crystalinf> crystals;
00227     HKL_info*       hkl_info_i;
00228     const HKL_info* hkl_info_o;
00229     std::vector<HKL_data_base*      > hkl_data_i;
00230     std::vector<const HKL_data_base*> hkl_data_o;
00231     std::vector<std::vector<hkldatacol> > hkl_data_cols;
00232     std::vector<String> assigned_paths_;
00234     MTZmode mode;
00235     CCP4MTZcolumn_label_mode colmode;
00236 
00238     Spacegroup spacegroup_;
00239     Cell cell_;
00240     Resolution resolution_;
00241     HKL_sampling hkl_sampling_;
00243     String title_;
00244     std::vector<String> history_;
00245 
00246     // generic methods
00247     bool match_path( const String& path, int& x, int& s, int& c );
00248   };
00249 
00250 
00251 } // namespace clipper
00252 
00253 #endif

Generated on 4 Jan 2010 for Clipper_ccp4 by  doxygen 1.6.1