File: diffmap.cpp

package info (click to toggle)
clipper 2.1.20130601-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 6,812 kB
  • ctags: 4,269
  • sloc: cpp: 26,716; sh: 11,175; makefile: 242; fortran: 41; csh: 18
file content (64 lines) | stat: -rw-r--r-- 2,184 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Clipper test application
/* (C) 2003 Kevin Cowtan */


#include <clipper/clipper.h>
#include <clipper/clipper-ccp4.h>


using clipper::data32::F_sigF;
using clipper::data32::F_phi;


int main(int argc, char** argv)
{
  const int n_scl_param = 6;

  clipper::CCP4MTZfile mtzfile;
  clipper::MTZcrystal xtal;
  clipper::MTZdataset dset;

  // make data objects
  clipper::HKL_info wrk_hkl;
  clipper::HKL_data<F_sigF> wrk_fo( wrk_hkl );
  clipper::HKL_data<F_phi> wrk_fc( wrk_hkl );

  // read data
  mtzfile.open_read( argv[1] );
  mtzfile.import_hkl_info( wrk_hkl );
  mtzfile.import_hkl_data( wrk_fo, dset, xtal, argv[2] );
  mtzfile.import_hkl_data( wrk_fc, dset, xtal, argv[3] );
  for ( int i = 0; i < mtzfile.column_labels().size(); i++ ) std::cout << i << mtzfile.column_labels()[i] << "\n";
  mtzfile.close_read();

  mtzfile.spacegroup().debug();
  std::cout << mtzfile.cell().format() << "\n";
  std::cout << mtzfile.resolution().limit() << "\n";
  wrk_hkl.debug();
  for ( clipper::HKL_info::HKL_reference_index ih = wrk_hkl.first(); !ih.last(); ih.next() ) std::cout << ih.hkl().format() << "\t" << wrk_fo[ih].f() << "\t" << wrk_fo[ih].sigf() << "\t" << wrk_fc[ih].f() << "\t" << wrk_fc[ih].phi() << "\n";

  // scale and difference data
  std::vector<clipper::ftype> params( n_scl_param, 1.0 );
  clipper::BasisFn_spline wrk_basis( wrk_hkl, n_scl_param, 2.0 );
  clipper::TargetFn_scaleF1F2<F_phi,F_sigF> wrk_target( wrk_fc, wrk_fo );
  clipper::ResolutionFn wrk_scale( wrk_hkl, wrk_basis, wrk_target, params );
  clipper::HKL_info::HKL_reference_index ih;
  for ( ih = wrk_hkl.first(); !ih.last(); ih.next() )
    if ( !wrk_fc[ih].missing() ) {
      wrk_fc[ih].scale( sqrt( wrk_scale.f(ih) ) );  // scale
      wrk_fc[ih].f() -= wrk_fo[ih].f();             // difference
    }

  // calculate map
  clipper::Grid_sampling wrk_grid( wrk_hkl.spacegroup(), wrk_hkl.cell(),
				   wrk_hkl.resolution() );
  clipper::Xmap<float> wrk_map( wrk_hkl.spacegroup(), wrk_hkl.cell(),
				wrk_grid );
  wrk_map.fft_from( wrk_fc );

  // output the map
  clipper::CCP4MAPfile mapfile;
  mapfile.open_write( "diff.map" );
  mapfile.export_xmap( wrk_map );
  mapfile.close_write();
}