Hello Adedolapo--
>
> Thanks for your response. I am testing this script with Ubiquitin PCS data so
> I
> can share more details with you. I assigned the TM as resid 90 in the PDB
> (though UBQ has 76 residues). The metal is part of a lanthanide tagged to
> cysteine at position 57 in UBQ. I do have a section in the script
> that generate PSF from the PDB (highlighted in yellow below).
It looks like your PSF is generated from sequence. To add an
additional ion, add an additional line:
seqToPSF("YB3",startResid=90)
Note that I'm naming the paramagnetic atom YB+3 (instead of TM), in
residue named YB3 only because it is present in Xplor-NIH's
toppar/ion.top. You can use TM if you add top/par values for it.
> How do I modify this to
> generate PSF for the metal? Your previous response suggests that might fix
> the error below.
> Here is the line in the PDB that indicates the TM ion and the metal position
> was obtained from paramagpy after calculating the initial tensor:
> HETATM 671 TM TM A 90 23.479 13.625 5.342 1.00 0.00 TM
It is possible to load HETATM records (they are ignored by default),
but it's probably easier to switch to ATOM. This line should work:
ATOM 863 YB+3 YB3 90 23.479 13.625 5.342 1.00 0.00
(again replaced TM with YB).
As long as the resids are not consecutive, you can simply add the line
above to a PDB and load it all up using protocol.loadPDB, with no need
to manually create a PSF.
Also, two other items to mention:
1) The paramagnetic center's position can also be determined using
pcsTools.calcXTensor().
2) You might be best served by generating the full cysteine-attached,
lathanide-ligated tag to better restrain the paramagnetic center to
physically reasonable positions.
Charles
> However, this is the error I'm still getting when I run the script:
> SystemError: xplor-nih error: error reading restraint: selection string resid
> 90 and name TM selects no atoms
>
> Here is part of my script if you could please take a look:
>
> ## START - variables to change by end-user ##
> initialPDB = '1ubqH_S57C_Tm_updated_metalpos.pdb'
> fastaSEQ = None
> referencePDB = None
>
> input_pcsFiles = ['PCS_UBQ_Tm_S75C.npc'] # list of files with experimental
> PCS
> values
> xplor_restraintFiles = [os.path.splitext(fn)[0] + ".xplor" for fn in
> input_pcsFiles]
> lanthanides = ['TM'] # list of lanthanide metals
> initialTensors = [(37.116e-32, 14.692e-32)] # list of tensors, specified as
> tuple
> (Xax, Xrh)
>
> metal_id = '90' # sequence number/id for the metal in the PDB file
> metal_name = 'TM' # name of the metal ion in the PDB file
>
> rigid_body = [(2,44), (61,76)]
> secondary_structure = [(2,44), (61,71)]
>
> numberOfStructures = 20
> ## END - variables to change by end-user #
>
> def PCSvaluesToXplorRestraints(filename, metal_id, metal_name):
> """Convert PCS values to XPLOR-NIH restraints."""
>
> data = np.loadtxt(filename,
> dtype={'names': ('res', 'atom', 'PCS', 'dPCS'),
> 'formats': ('f4', 'U1', 'f4', 'f4')})
>
> basename = os.path.splitext(filename)[0]
>
> with open(f"{basename}.xplor", "w") as outfile:
> for pcs in data:
> res, atom, PCS, dPCS = pcs
> outstring = ('assign ( resid 500 and name 00 )\n'
> ' ( resid 500 and name Z )\n'
> ' ( resid 500 and name X )\n'
> ' ( resid 500 and name Y )\n'
> f' ( resid {metal_id} and name {metal_name}
> )\n'
> f' ( resid {res} and name {atom} ) {PCS:.5f}
> {dPCS:.5f}\n')
> outfile.write(outstring)
> # TODO: make sure you use "HN" for the amide proton
>
> if initialPDB and fastaSEQ:
> print("ERROR: specify either a FASTA sequence or an initial PDB file")
> sys.exit(1)
>
> # convert output PCS files from Paramagpy to XPLOR-NIH restraint files
> for fn in input_pcsFiles:
> PCSvaluesToXplorRestraints(fn, metal_id, metal_name)
>
> xplor.requireVersion("3.0")
>
> (opts, args) = xplor.parseArguments(["quick"])
>
> quick = False
> for opt in opts:
> if opt[0]=="quick": # specify -quick to just test that the script runs
> quick=True
> pass
> pass
>
> if quick:
> numberOfStructures = 3
> pass
>
> # protocol module has many high-level helper functions.
> import protocol
>
> # explicitly set random seed from environment variable
> protocol.initRandomSeed(3421)
>
> # ** annealing settings ** #
> command = xplor.command
> protocol.initParams("protein")
>
> if fastaSEQ:
> basename = os.path.splitext(fastaSEQ)[0]
>
> if not os.path.exists(f"{basename}_extended.pdb"):
> # generate PSF data from sequence and initialize the correct
> parameters
> from psfGen import seqToPSF
>
> seqToPSF(fastaSEQ)
>
> # generate a random extended structure with correct covalent
> geometry
> protocol.genExtendedStructure(f"{basename}_extended.pdb")
>
> protocol.initParams("protein")
>
> initialPDB = f"{basename}_extended.pdb"
>
> Thank you for your help!
>
> Adedolapo Ojoawo
> Postdoctoral Research Associate
> Howard Hughes Med Inst./Brandeis Uni
> Waltham, MA
>
> On Wed, Nov 8, 2023 at 11:50 AM Charles Schwieters
> <[email protected]> wrote:
>
> Hello Adedolapo--
>
> > I am trying to refine a protein structure using PCS restraints. I have the
> > experimental PCS and initial tensors obtained from paramagpy. I am
> using a
> > modified version of the refine.py script fromgb1_rdc but I am running
> into
> > some issues with the script. I would appreciate your help in
> troubleshooting
> > this.
> >
> > However, I got the error message below. The metal has a resid of 77 in
> the PDB
> > and the name is Tm. These are also defined in the script as:
> > metal_id = '77' # sequence number/id for the metal in the PDB file
> > metal_name = 'Tm' # name of the metal ion in the PDB file
> >
> > Traceback (most recent call last):
>
> ...
>
> > SystemError: xplor-nih error: error reading restraint: selection string
> resid 77 and
> > name Tm selects no atoms
>
> I would guess that the TM ion was not read from the input PDB- if it's
> in the PDB, then there is probably a warning in the output of the
> Xplor-NIH script about this. You probably want to generate a custom
> PSF, containing the Tm, anything it is ligated to, along with the
> protein system. If you supplies more details about the system I should
> be able to help further.
>
> best regards--
> Charles
########################################################################
To unsubscribe from the XPLOR-NIH list, click the following link:
http://list.nih.gov/cgi-bin/wa.exe?SUBED1=XPLOR-NIH&A=1