The default behavior in Probe is to ignore mainchain-mainchain comparisons for the same residue but this default will change and be turned off . This is filtered within the examineDots() method, it avoids comparisons between atoms that are both marked as mainchain and that both come from the same residue (and neither is HET). This might be handled by adding these to the excluded list for each atom when that atom is on the mainchain, moving the logic into the outer loop in the CCTBX Probe.
However, we do need to report separately for clashes between mainchain and sidechain and combintions.
CCTBX seems to handle main chain determination by doing a selection based on atom names: ['C', 'O', 'CA', 'N', 'CB'], are the main-chain atoms, but select.c in Probe also seems to mark hydrogens (or deuteriums) bonded to the main chain.
These can be determined in genDotIntersect() as part of setting up the list to pass to examineDots(), so can remain in the Python code rather than the C++ code. It can simply not put these neighboring atoms into the list of those to be examined.
We'll need to know how to determine this in CCTBX. Will ask during office hours.
The default behavior in Probe is to ignore mainchain-mainchain comparisons for the same residue but this default will change and be turned off . This is filtered within the examineDots() method, it avoids comparisons between atoms that are both marked as mainchain and that both come from the same residue (and neither is HET). This might be handled by adding these to the excluded list for each atom when that atom is on the mainchain, moving the logic into the outer loop in the CCTBX Probe.
However, we do need to report separately for clashes between mainchain and sidechain and combintions.
CCTBX seems to handle main chain determination by doing a selection based on atom names: ['C', 'O', 'CA', 'N', 'CB'], are the main-chain atoms, but select.c in Probe also seems to mark hydrogens (or deuteriums) bonded to the main chain.
These can be determined in genDotIntersect() as part of setting up the list to pass to examineDots(), so can remain in the Python code rather than the C++ code. It can simply not put these neighboring atoms into the list of those to be examined.
We'll need to know how to determine this in CCTBX. Will ask during office hours.