00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
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:
00138 CCP4MTZfile();
00140 ~CCP4MTZfile();
00141
00143 void open_read( const String filename_in );
00145 void close_read();
00147 void open_append( const String filename_in, const String filename_out );
00149 void close_append();
00151 void open_write( const String filename_out );
00153 void close_write();
00154
00156 const Spacegroup& spacegroup() const;
00158 const Cell& cell() const;
00160 const Resolution& resolution() const;
00162 const HKL_sampling& hkl_sampling() const;
00164 std::vector<String> column_labels() const;
00165
00167 void import_hkl_list( HKL_info& target );
00169 void import_hkl_info( HKL_info& target, const bool generate = true );
00171 void import_crystal( MTZcrystal& cxtl, const String mtzpath );
00173 void import_dataset( MTZdataset& cset, const String mtzpath );
00175 void import_hkl_data( HKL_data_base& cdata, const String mtzpath );
00176
00178 void export_hkl_info( const HKL_info& target );
00180 void export_crystal( const MTZcrystal& cxtl, const String mtzpath );
00182 void export_dataset( const MTZdataset& cset, const String mtzpath );
00184 void export_hkl_data( const HKL_data_base& cdata, const String mtzpath );
00185
00187 void import_chkl_data( Container& target, const String mtzpath, const String path = "" );
00189 void export_chkl_data( Container& target, const String mtzpath );
00190
00192 std::vector<String> column_paths() const;
00194 const std::vector<String>& assigned_paths() const;
00195
00197 void import_hkl_data( HKL_data_base& cdata, MTZdataset& cset, MTZcrystal& cxtl, const String mtzpath );
00199 void export_hkl_data( const HKL_data_base& cdata, const MTZdataset& cset, const MTZcrystal& cxtl, const String mtzpath );
00200
00201
00202
00203 struct datacolinf{String label; String type;};
00204 struct datasetinf{MTZdataset dataset;std::vector<datacolinf> columns;};
00205 struct crystalinf{MTZcrystal crystal;std::vector<datasetinf> datasets;};
00206 struct hkldatacol{String path; ftype scale;};
00207 private:
00208 enum MTZmode { NONE, READ, WRITE, APPEND };
00209
00211 String filename_in_, filename_out_;
00212 std::vector<crystalinf> crystals;
00213 HKL_info* hkl_info_i;
00214 const HKL_info* hkl_info_o;
00215 std::vector<HKL_data_base* > hkl_data_i;
00216 std::vector<const HKL_data_base*> hkl_data_o;
00217 std::vector<std::vector<hkldatacol> > hkl_data_cols;
00218 std::vector<String> assigned_paths_;
00220 MTZmode mode;
00221
00223 Spacegroup spacegroup_;
00224 Cell cell_;
00225 Resolution resolution_;
00226 HKL_sampling hkl_sampling_;
00227
00228
00229 bool match_path( const String& path, int& x, int& s, int& c );
00230 };
00231
00232
00233 }
00234
00235 #endif