Thanks. The first option seems more straightforward -  that is to
create parameter and topology files for Tm metal.
Sorry for my questions. I'm still getting used to XPLOR.
So the top/par files need to be created first for Thulium before I run this
line, correct?:* seqToPSF("TM3",startResid=90)*. Where can I get the
topology info for TM?

*PS: the tag is a DOTA-M7Py tag with Tm metal in the center attached to a
Cysteine. In case the above option doesn't work, If I am going to patch
the full lanthanide tag, it's not very clear to me how to do this. I saw
the lines below in one of the threads on the XPLOR forum. How can I modify
this to create the full Tm-DOTA-M7Py tag? *

import protocol
protocol.initTopology(protein')
protocol.initTopology('extra/ctsa.par')
protocol.initParams('protein')
protocol.initParams('extra/ctsa.par')
import pfsGen
psfGen.addResidue('CTSA')


Adedolapo Ojoawo


On Wed, Nov 29, 2023 at 1:31 PM Charles Schwieters <[email protected]>
wrote:

>
> 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

Reply via email to