1 /*! \file cif/cif_data_io.h
2     Header file for reflection data cif importer
3 */
4 //c Copyright (C) 2000-2006 Paul Emsley, 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_CIF_IO
46 #define CLIPPER_CIF_IO
47 
48 #include "../core/hkl_datatypes.h"
49 
50 namespace clipper
51 {
52 
53   //! CIF import/export parent class for clipper objects
54   /*! This is the import class which can be linked to an cif data
55     file and be used to transfer data into a Clipper
56     data structure.
57     It is currently a read-only class.
58   */
59   class CIFfile
60   {
61    public:
62     //! Constructor: does nothing
63     CIFfile();
64     //! Destructor: close any file that was left open
65     ~CIFfile();
66 
67     //! Open a file for read access
68     void open_read( const String filename_in );
69     //! Close a file after reading
70     void close_read();
71 
72     //! get file spacegroup
73     const Spacegroup& spacegroup() const;
74     //! get file cell
75     const Cell& cell() const;
76     //! get file resolution
77     const Resolution& resolution() const;
78     //! get file HKL sampling
79     const HKL_sampling& hkl_sampling() const;
80     //! get file resolution
81     Resolution resolution( const Cell& cell ) const;
82 
83     //! read the reflection list from the PHS file
84     void import_hkl_info( HKL_info& target );
85     //! mark a hkl_data for import from PHS file
86     void import_hkl_data( HKL_data_base& cdata );
87     //! contains phases predicate
88     bool contains_phases_p() const;
89 
90 
91   private:
92     enum CIFmode { NONE, READ};
93 
94     CIFmode mode;                        //!< file mode
95     String filename;                     //!< input/output file
96     HKL_data_base* f_sigf_i;             //!< input HKL_data Fs
97     HKL_data_base* I_sigI_i;             //!< input HKL_data intensities
98     HKL_data_base* f_phi_i;              //!< input HKL_data object (calc sfs)
99     HKL_data_base* rfree_i;              //!< input HKL_data rfree flags
100     HKL_data_base* phi_fom_i;            //!< input HKL_data phi foms
101     HKL_data_base* f_sigf_ano_i;         //!< input anomalous Fs
102     HKL_data_base* I_sigI_ano_i;         //!< input anomalous intensities
103     HKL_data_base* d_sigd_i;             //!< input anomalous diffs
104     HKL_data_base* ABCD_i;               //!< input Hendrickson Lattman coeffs.
105     const HKL_data_base* f_sigf_o;       //!< output HKL_data object
106     const HKL_data_base* phi_wt_o;       //!< output HKL_data object
107     //! object which supplies the hkl list (write mode only)
108     const HKL_info* hkl_ptr;
109 
110     Spacegroup space_group;
111     Cell cell_;
112     Resolution resolution_;
113     HKL_sampling hkl_sampling_;
114     int set_cell_symm_reso(std::string cif_file_name);
115     int set_cell_symm_reso_by_cif(std::string cif_file_name);
116     int set_cell_symm_reso_by_kludge(std::string cif_file_name);
117 
118     // internal variables, due to the strange and variable nature of
119     // mmCIF files, sometime these things are in the file, sometimes
120     // not...
121     //
122     short int clipper_cell_set_flag;
123     short int clipper_reso_set_flag;
124     short int clipper_symm_set_flag;
125 
126   };
127 
128 } // namespace clipper
129 
130 #endif // CLIPPER_CIF_IO
131 
132 
133