/** This is the program for validation of SAXS profiles. */ #include #include #include #include #include #include #include namespace po = boost::program_options; int main(int argc, char **argv) { // output arguments for (int i = 0; i < argc; i++) std::cerr << argv[i] << " "; std::cerr << std::endl; bool use_offset = false; po::options_description desc("Usage: ..."); desc.add_options() ("help", "Any number of input profiles is supported. \ The chi value is computed relative to the first profile using its error column") ("input-files", po::value< std::vector >(), "input PDB and profile files") ("offset,o", "use offset in fitting (default = false)") ; po::positional_options_description p; p.add("input-files", -1); po::variables_map vm; po::store( po::command_line_parser(argc,argv).options(desc).positional(p).run(), vm); po::notify(vm); std::vector files, dat_files; if(vm.count("input-files")) { files = vm["input-files"].as< std::vector >(); } if(vm.count("help") || files.size() == 0) { std::cout << desc << "\n"; return 0; } if(vm.count("offset")) use_offset=true; std::vector exp_profiles; for(unsigned int i=0; isize() == 0) { std::cerr << "can't parse input file " << files[i] << std::endl; return 1; } else { dat_files.push_back(files[i]); exp_profiles.push_back(profile); std::cout << "Profile read from file " << files[i] << " size = " << profile->size() << std::endl; } } IMP::saxs::Profile* exp_saxs_profile = exp_profiles[0]; IMP::Pointer >saxs_score = new IMP::saxs::ProfileFitter(*exp_saxs_profile); for(unsigned int i=1; i(i)) + ".dat"; float chi = saxs_score->compute_score(*exp_profiles[i], use_offset, "fit"); std::cout << "File " << files[i] << " chi=" << chi << std::endl; } return 0; }