# ap_stiff_docking_crmsd¶

ap_stiff_docking_crmsd calculates crmsd of a ligand that is bound to a receptor, assuming the receptor conformation has not changed much

The program reads in a native pose and at least one PDB file with a computed pose (i.e. a model), each of them must contain a ligand molecule bound to a protein receptor. The ligand can be a small molecule, peptide or even a protein. The program finds the ligand either by residue ID (a three-letter code, such as CAM) or a chain ID - a single letter code.

USAGE:
ap_stiff_docking_crmsd 2m56-ref.pdb CAM 00199.pdb 00963.pdb 04473.pdb
ap_stiff_docking_crmsd 2m56-ref.pdb X 00199.pdb 00963.pdb 04473.pdb
ap_stiff_docking_crmsd - X 00199.pdb 00963.pdb 04473.pdb


where 2m56-ref.pdb is the native and CAM is the three-letter PDB code of the ligand for which crmsd will be evaluated and 00199.pdb and the two other files are conformation after docking. In the second example, X is the ID of the chain containing a ligand molecule.

The program evaluates crmsd based on ligand coordinates. It assumes the receptor structure doesn’t change significantly and superimposes all models on the first one, which significantly reduces calculation time. If the reference structure is not given and dash ‘-‘ character is used instead (as in the last example), the program evaluates pairwise all-vs-all crmsd calculations.

## Categories:¶

• core::protocols::PairwiseLigandCrmsd

## Program source:¶

  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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 #include #include #include #include #include #include #include std::string program_info = R"( ap_stiff_docking_crmsd calculates crmsd of a ligand that is bound to a receptor, assuming the receptor conformation has not changed much The program reads in a native pose and at least one PDB file with a computed pose (i.e. a model), each of them must contain a ligand molecule bound to a protein receptor. The ligand can be a small molecule, peptide or even a protein. The program finds the ligand either by residue ID (a three-letter code, such as CAM) or a chain ID - a single letter code. USAGE: ap_stiff_docking_crmsd 2m56-ref.pdb CAM 00199.pdb 00963.pdb 04473.pdb ap_stiff_docking_crmsd 2m56-ref.pdb X 00199.pdb 00963.pdb 04473.pdb ap_stiff_docking_crmsd - X 00199.pdb 00963.pdb 04473.pdb where 2m56-ref.pdb is the native and CAM is the three-letter PDB code of the ligand for which crmsd will be evaluated and 00199.pdb and the two other files are conformation after docking. In the second example, X is the ID of the chain containing a ligand molecule. The program evaluates crmsd based on ligand coordinates. It assumes the receptor structure doesn't change significantly and superimposes all models on the first one, which significantly reduces calculation time. If the reference structure is not given and dash '-' character is used instead (as in the last example), the program evaluates pairwise all-vs-all crmsd calculations. )"; using namespace core::data::structural; /** @brief ap_peptide_docking_crmsd calculates crmsd of a peptide that is bound to a receptor * * CATEGORIES: core::protocols::PairwiseLigandCrmsd * KEYWORDS: PDB input; crmsd; docking; structure selectors */ int main(const int argc, const char* argv[]) { using namespace core::data::structural; if (argc < 3) utils::exit_OK_with_message(program_info); // --- complain about missing program parameter const std::string code(argv[2]); // --- The ligand code is the second parameter of the program AtomSelector_SP select_ligand = nullptr; // --- Ligand selector object if (code.size() == 3) // --- If the code is 3 characters long, its a residue code select_ligand = std::static_pointer_cast(std::make_shared(code)); else { AtomSelector_SP select_chain = std::static_pointer_cast(std::make_shared(code[0])); std::shared_ptr select_chain_ca = std::make_shared(); select_chain_ca->add_selector( std::make_shared() ); select_chain_ca->add_selector(select_chain); select_ligand = select_chain_ca; } std::shared_ptr select_receptor = std::make_shared(); // --- Receptor selector object AtomSelector_SP select_not_ligand = std::static_pointer_cast(std::make_shared(*select_ligand)); select_receptor->add_selector(std::make_shared()); select_receptor->add_selector(select_not_ligand); core::protocols::PairwiseLigandCrmsd crmsd_protocol(select_ligand, select_receptor); for(core::index2 i=3;i1) { for (core::index2 j = 0; j < reader.count_models(); ++j) crmsd_protocol.add_input_structure(reader.create_structure(j), utils::string_format("%s:%4d",argv[i], j)); } else crmsd_protocol.add_input_structure(reader.create_structure(0), argv[i]); } crmsd_protocol.crmsd_cutoff(20.0); // crmsd cutoff large anough to get some output crmsd_protocol.output_stream( std::shared_ptr(&std::cout, [](void*) {}) ); if(std::string(argv[1]) != "-") { core::data::io::Pdb reader(argv[1], core::data::io::is_not_hydrogen); Structure_SP native = reader.create_structure(0); crmsd_protocol.calculate(native); } else crmsd_protocol.calculate(); }