PiRSquared17 / cing

Automatically exported from code.google.com/p/cing
0 stars 0 forks source link

Stereospecificity isopropyl group gone in CING after translation from Aria to CCPN to CING #156

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. I still need to contact the author and ask if I can make the data public.

What is the expected output? What do you see instead?
The author expected to see stereospecific Val gammas in the restraint list.

I have checked only in 1 restraint:

CING:

Restraint 947
Atoms:: (A.VAL1.QQG, A.ASP2.HA)
Restraint:: Lower | Upper: 0.00 | 4.88
Actual:: Av +- Sd | Min | Max: 3.78 +- 0.22 | 3.38 | 4.10
Violations:: Av +- Sd | Max: 0.00 +- 0.00 | 0.00
Counts:: > 0.1 | 0.3 | 0.5 A: 0 | 0 | 0

Analysis:
The attached image shows the Analysis restraint. Looks to me as not 
stereospecific.

Original Aria table:
assign  (resid 1 and name HG*   ) (resid 2 and name HA   )   4.88 4.88  0.00 

Ok, let's check one more Valine: Val 20 restraint 245:
assign  (resid 20 and name HN   ) (resid 20 and name HG2*   )   3.87 3.87  0.00 
but notice Val 20 also occurs without stereospecificity: restraint 22
assign  (resid 21 and name HD1   ) (resid 20 and name HG*   )   6.00 6.00  0.00 

It's also stereospecific in Analysis see attached figure 2.

And now in CING it's no longer stereospecific; terrific. Looks like a bug 
indeed.

Restraint 244
Atoms:: (A.VAL20.HN, A.VAL20.QQG)
Restraint:: Lower | Upper: 0.00 | 3.87
Actual:: Av +- Sd | Min | Max: 2.03 +- 0.33 | 1.74 | 2.87
Violations:: Av +- Sd | Max: 0.00 +- 0.00 | 0.00
Counts:: > 0.1 | 0.3 | 0.5 A: 0 | 0 | 0

Original issue reported on code.google.com by jurge...@gmail.com on 9 Apr 2009 at 3:46

Attachments:

GoogleCodeExporter commented 9 years ago
Below shows 2 restraints where the first should have a ssa and the second 
should have a non-ssa Val gamma group:
CING collapses both to non-ssa.

DEBUG: Constraint [245]: [0.0] - [3.9]
DEBUG:   [20.H] - [20.HG11,20.HG12,20.HG13,20.HG21,20.HG22,20.HG23]
DEBUG: 
DEBUG: fixedResonanceListOfList: [[<ccp.nmr.NmrConstraint.FixedResonance [1, 
99]>, <ccp.nmr.NmrConstraint.FixedResonance [1, 384]>]]
DEBUG:   fixedResonanceList: [<ccp.nmr.NmrConstraint.FixedResonance [1, 99]>, 
<ccp.nmr.NmrConstraint.FixedResonance [1, 384]>]
DEBUG:     fixedAtomSetListLeft  = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 
105]>]
DEBUG:     fixedAtomSetListRight = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 
108]>, <ccp.nmr.NmrConstraint.FixedAtomSet [1, 109]>]
DEBUG:       fixedAtomSetLeft: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 105]>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 20, 'H']>
DEBUG:       atomListLeft: [<Atom VAL20.HN>]
DEBUG:         atomLeft: <Atom VAL20.HN>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 
108]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG11']>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG12']>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG13']>
DEBUG:           atomListRight: [<Atom VAL20.QG1>]
DEBUG:             atomPair: <Atom VAL20.HN> <Atom VAL20.QG1>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 
109]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG21']>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG22']>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 20, 'HG23']>
DEBUG:           atomListRight: [<Atom VAL20.QG2>]
DEBUG:             atomPair: <Atom VAL20.HN> <Atom VAL20.QG2>
DEBUG: _getConstraintAtomPairList: [(<Atom VAL20.HN>, <Atom VAL20.QG1>), (<Atom 
VAL20.HN>, <Atom VAL20.QG2>)]

DEBUG: Constraint [233]: [0.0] - [5.5]
DEBUG:   [1.HG11,1.HG12,1.HG13,1.HG21,1.HG22,1.HG23] - [3.H]
DEBUG:   [1.HG11,1.HG12,1.HG13,1.HG21,1.HG22,1.HG23] - [3.H]
DEBUG: 
DEBUG: fixedResonanceListOfList: [[<ccp.nmr.NmrConstraint.FixedResonance [1, 
3]>, <ccp.nmr.NmrConstraint.FixedResonance [1, 139]>], 
[<ccp.nmr.NmrConstraint.FixedResonance [1, 378]>, 
<ccp.nmr.NmrConstraint.FixedResonance [1, 139]>]]
DEBUG:   fixedResonanceList: [<ccp.nmr.NmrConstraint.FixedResonance [1, 3]>, 
<ccp.nmr.NmrConstraint.FixedResonance [1, 139]>]
DEBUG:     fixedAtomSetListLeft  = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 
2]>, <ccp.nmr.NmrConstraint.FixedAtomSet [1, 3]>]
DEBUG:     fixedAtomSetListRight = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>]
DEBUG:       fixedAtomSetLeft: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 2]>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG11']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG12']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG13']>
DEBUG:       atomListLeft: [<Atom VAL1.QG1>]
DEBUG:         atomLeft: <Atom VAL1.QG1>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 3, 'H']>
DEBUG:           atomListRight: [<Atom MET3.HN>]
DEBUG:             atomPair: <Atom VAL1.QG1> <Atom MET3.HN>
DEBUG:       fixedAtomSetLeft: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 3]>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG21']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG22']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG23']>
DEBUG:       atomListLeft: [<Atom VAL1.QG2>]
DEBUG:         atomLeft: <Atom VAL1.QG2>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 3, 'H']>
DEBUG:           atomListRight: [<Atom MET3.HN>]
DEBUG:             atomPair: <Atom VAL1.QG2> <Atom MET3.HN>
DEBUG:   fixedResonanceList: [<ccp.nmr.NmrConstraint.FixedResonance [1, 378]>, 
<ccp.nmr.NmrConstraint.FixedResonance [1, 139]>]
DEBUG:     fixedAtomSetListLeft  = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 
2]>, <ccp.nmr.NmrConstraint.FixedAtomSet [1, 3]>]
DEBUG:     fixedAtomSetListRight = [<ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>]
DEBUG:       fixedAtomSetLeft: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 2]>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG11']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG12']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG13']>
DEBUG:       atomListLeft: [<Atom VAL1.QG1>]
DEBUG:         atomLeft: <Atom VAL1.QG1>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 3, 'H']>
DEBUG:           atomListRight: [<Atom MET3.HN>]
DEBUG:             atomPair: <Atom VAL1.QG1> <Atom MET3.HN>
DEBUG: Skipping pair already represented.
DEBUG:       fixedAtomSetLeft: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 3]>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG21']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG22']>
DEBUG:         ccpnAtom Left: <ccp.molecule.MolSystem.Atom ['Molecularsystem', 
'A', 1, 'HG23']>
DEBUG:       atomListLeft: [<Atom VAL1.QG2>]
DEBUG:         atomLeft: <Atom VAL1.QG2>
DEBUG:           fixedAtomSetRight: <ccp.nmr.NmrConstraint.FixedAtomSet [1, 7]>
DEBUG:                 ccpnAtom Right: <ccp.molecule.MolSystem.Atom 
['Molecularsystem', 'A', 3, 'H']>
DEBUG:           atomListRight: [<Atom MET3.HN>]
DEBUG:             atomPair: <Atom VAL1.QG2> <Atom MET3.HN>
DEBUG: Skipping pair already represented.
DEBUG: _getConstraintAtomPairList: [(<Atom VAL1.QG1>, <Atom MET3.HN>), (<Atom 
VAL1.QG2>, <Atom MET3.HN>)]

Original comment by jurge...@gmail.com on 10 Apr 2009 at 9:06

GoogleCodeExporter commented 9 years ago
I need expert help on this issue. The code is at:
http://code.google.com/p/cing/source/browse/trunk/cing/python/cing/PluginCode/Cc
pn.py#1320 (r550)

Original comment by jurge...@gmail.com on 10 Apr 2009 at 9:14

GoogleCodeExporter commented 9 years ago
The funny thing is that this works in NRG-CING.

In NRG-CING for 1hue based on the original data:
1:ILE_32:HA        1:VAL_42:HG2*       1.800  3.800  3.500 40.00 40.00 1000.000 
 0.00
1:ILE_32:HA        1:VAL_42:HG1*       1.800  4.300  4.000 40.00 40.00 1000.000 
 0.00

I have got in NRG-CING:

Restraint 2034
Atoms:: (A.ILE32.HA, A.VAL42.QG2)
Restraint:: Lower | Upper: 1.80 | 3.80
Actual:: Av +- Sd | Min | Max: 2.20 +- 0.16 | 1.95 | 2.50
Violations:: Av +- Sd | Max: 0.00 +- 0.00 | 0.00
Counts:: > 0.1 | 0.3 | 0.5 A: 0 | 0 | 0

Restraint 1493
Atoms:: (A.ILE32.HA, A.VAL42.QG1)
Restraint:: Lower | Upper: 1.80 | 4.30
Actual:: Av +- Sd | Min | Max: 3.04 +- 0.15 | 2.71 | 3.23
Violations:: Av +- Sd | Max: 0.00 +- 0.00 | 0.00
Counts:: > 0.1 | 0.3 | 0.5 A: 0 | 0 | 0

So until somebody tells me otherwise I am going to propose the conversion in 
NRG was done properly and the author's conversion was not.

Original comment by jurge...@gmail.com on 10 Apr 2009 at 10:09

GoogleCodeExporter commented 9 years ago
I'm seeing this problem come up in different situations too now. Stay tuned.

Original comment by jurge...@gmail.com on 24 Apr 2009 at 2:24

GoogleCodeExporter commented 9 years ago
OK the problem is here:

            fixedAtomSetListLeft = fixedResonanceSetLeft.sortedAtomSets()
            fixedAtomSetListRight = fixedResonanceSetRight.sortedAtomSets()

You're indiscriminately using both atomSets in the case where prochirals are not
stereospecifically assigned. So what I do is *first* set up a dictionary where
Resonance objects are linked to Atom(Set)s, you then make sure that in the case 
where
you have a ResonanceSet, two Resonances, and two AtomSets, each Resonance gets 
linked
to one single AtomSet.

This is not straightforward as you also have to make sure that, e.g. for 
valine, HG1*
and CG1 remain 'connected' in the output/conversion, as well as HG2* and CG2. 
All the
code that does this for the FC is deeply buried (though extractable if 
necessary) -
do you have anything more accessible Tim?

Original comment by wfvran...@gmail.com on 24 Apr 2009 at 2:49

GoogleCodeExporter commented 9 years ago
In CCPN terms, in Picture 2 the restraint is 20ValHgb*-20ValH, this is
non-stereospecific. The restraint in Picture 1 is both ambiguous and 
non-stereospecific.

If the original restraint was:

assign  (resid 20 and name HN   ) (resid 20 and name HG2*   )   3.87 3.87  0.00 

If your CCPN project has stereospecific resonances, it looks like you should 
get:
20ValHg2*-20ValH, i.e. the .tbl to CCPN conversion doesn't look right. 
However, if there are only non-stereo resonances in CCPN (e.g. you don't have a
specific shift for HG2*) then the .tbl import is as good as it can be.

Is Hg2* (as distinct from Hga* or Hgb*) in the resonance list?

As for Wim's point, I agree. To resolve the ambiguous resonance to atomSet 
mapping
when forced I usually do something like:

  index   = resonanceSet.sortedResonances().index(resonance)
  atomSets = resonanceSet.sortedAtomSets()
  atomSet = atomSets[min(index,len(atomSets)-1)]  

I suspect this is probably what you want. If you have a non-stereo .tbl 
restraint it
will appear ambiguous, so you will end up with two different atom sets after 
the last
conversion. If it is stereo, with one option, even if CCPN is unable to link a 
stereo
resonance, you will only get one (hopefully matching the original) atom set in 
the end.

T.

Original comment by tjs...@googlemail.com on 24 Apr 2009 at 5:13

GoogleCodeExporter commented 9 years ago
I think the cause of this issue has been with the import of original data into 
the CCPN data model.
I think I did it wrong. I rediscovered the options panel as described in:

ccpnmr/ccpnmr2.0/python/ccpnmr/format/doc/LinkResonances.html
I was not doing this by hand before just accepting the default unambiguous 
import.

Now using the "Link resonances setup" I changed:

"'Complete stereospecific assignment': If selected, all prochiral atoms are 
assumed to be stereospecifically assigned." to True.

Does this overwrite the BMRB codes?:
#       Chemical Shift Ambiguity Index Value Definitions          #
#                                                                 #
#   Index Value            Definition                             #
#                                                                 #
#      1             Unique (geminal atoms and geminal methyl     #
#                         groups with identical chemical shifts   #
#                         are assumed to be assigned to           #
#                         stereospecific atoms)                   #
#      2             Ambiguity of geminal atoms or geminal methyl #
#                         proton groups                           #
#      3             Aromatic atoms on opposite sides of          #
#                         symmetrical rings (e.g. Tyr HE1 and HE2 #
#                         protons)                                #
#      4             Intraresidue ambiguities (e.g. Lys HG and    #
#                         HD protons or Trp HZ2 and HZ3 protons)  #
#      5             Interresidue ambiguities (Lys 12 vs. Lys 27) #
#      9             Ambiguous, specific ambiguity not defined    #

Yes it does. Perfect.

In summary:
- make sure the restraints have the right stereospecific assignment in the CCPN 
project before attempting to convert to CING.
- then realize that CING does not distinguish between an unassigned resonance 
and a pseudo. In other words an stereospecifically unassigned Gly alpha group 
in the CNS 
restraint:

assign ( resi 31 and name HA2 ) ( ( resi 31 and name HA3 )  x y z

would become a CCPN restraint:

31 Gly Hab - 31 Gly Haa.

then the CCPN import to CING is ok for this one to:
31 Gly QA - 31 Gly QA 

I propose that the conversion here is to blame and CING should indeed report a 
lowerbound violation. Any objections?

Original comment by jurge...@gmail.com on 27 Apr 2009 at 11:03