本文整理汇总了C++中Topology::SetParmName方法的典型用法代码示例。如果您正苦于以下问题:C++ Topology::SetParmName方法的具体用法?C++ Topology::SetParmName怎么用?C++ Topology::SetParmName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Topology
的用法示例。
在下文中一共展示了Topology::SetParmName方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadParm
int Parm_PDB::ReadParm(std::string const& fname, Topology &TopIn) {
PDBfile infile;
double XYZ[3];
int current_res = 0;
int last_res = -1;
if (infile.OpenRead(fname)) return 1;
// Loop over PDB records
while ( infile.NextLine() != 0 ) {
if (infile.IsPDBatomKeyword()) {
// If this is an ATOM / HETATM keyword, add to topology
infile.pdb_XYZ(XYZ);
NameType pdbresname = infile.pdb_Residue( current_res );
TopIn.AddTopAtom(infile.pdb_Atom(), pdbresname, current_res, last_res, XYZ);
} else if (infile.IsPDB_TER() || infile.IsPDB_END()) {
// Indicate end of molecule for TER/END. Finish if END.
TopIn.StartNewMol();
if (infile.IsPDB_END()) break;
}
}
// If Topology name not set with TITLE etc, use base filename.
// TODO: Read in title.
std::string pdbtitle;
TopIn.SetParmName( pdbtitle, infile.Filename().Base() );
infile.CloseFile();
return 0;
}
示例2: mprintf
/** Read file as a Tripos Mol2 file. */
int Parm_Mol2::ReadParm(FileName const& fname, Topology &parmOut) {
Mol2File infile;
if (infile.OpenRead(fname)) return 1;
mprintf(" Reading Mol2 file %s as topology file.\n",infile.Filename().base());
// Get @<TRIPOS>MOLECULE information
if (infile.ReadMolecule()) return 1;
parmOut.SetParmName( infile.Mol2Title(), infile.Filename() );
// Get @<TRIPOS>ATOM information
if (infile.ScanTo( Mol2File::ATOM)) return 1;
double XYZ[3];
for (int atom=0; atom < infile.Mol2Natoms(); atom++) {
if ( infile.Mol2XYZ(XYZ) ) return 1;
parmOut.AddTopAtom( infile.Mol2Atom(), infile.Mol2Residue(), XYZ );
}
// Get @<TRIPOS>BOND information [optional]
int at1 = 0;
int at2 = 0;
if (infile.ScanTo(Mol2File::BOND)==0) {
for (int bond=0; bond < infile.Mol2Nbonds(); bond++) {
if (infile.Mol2Bond(at1, at2)) return 1;
// mol2 atom #s start from 1
parmOut.AddBond(at1-1, at2-1);
}
needsBondSearch_ = false;
} else {
mprintf(" Mol2 file does not contain bond information.\n");
needsBondSearch_ = true;
}
// No box
parmOut.SetParmBox( Box() );
mprintf(" Mol2 contains %i atoms, %i residues,\n", parmOut.Natom(),parmOut.Nres());
//mprintf(" %i bonds to H, %i other bonds.\n", parmOut.NbondsWithH,parmOut.NbondsWithoutH);
infile.CloseFile();
return 0;
}
示例3: ReadParm
/** Read file as a Tinker file. */
int Parm_Tinker::ReadParm(FileName const& fname, Topology &parmOut) {
TinkerFile infile;
infile.SetTinkerName( fname );
if (infile.OpenTinker()) return 1;
mprintf("\tReading Tinker file %s as topology file.\n",infile.Filename().base());
// Allocate memory for coordinates.
double* Coords = new double[ infile.TinkerNatom() * 3 ];
std::vector<int> Bonds;
std::vector<Atom> Atoms = infile.ReadTinkerAtoms(Coords, Bonds);
if (Atoms.empty()) return 1;
// Use up to first 3 chars of title as residue name.
std::string resname;
for (std::string::const_iterator c = infile.TinkerTitle().begin();
c != infile.TinkerTitle().end(); ++c)
resname += *c;
if (resname.size() > 3) resname.resize(3);
Residue tinker_res( resname, 0, ' ', ' ' );
// Put atoms into topology
const double* XYZ = Coords;
for (std::vector<Atom>::const_iterator atom = Atoms.begin();
atom != Atoms.end();
++atom, XYZ += 3)
parmOut.AddTopAtom( *atom, tinker_res, XYZ );
delete[] Coords;
// Add bond information
for (std::vector<int>::const_iterator bond = Bonds.begin();
bond != Bonds.end(); bond += 2)
parmOut.AddBond( *bond, *(bond+1) );
// Try to set up residue info based on bonds.
if (parmOut.Setup_NoResInfo()) return 1;
// Set topology box info.
parmOut.SetParmBox( infile.TinkerBox() );
parmOut.SetParmName( infile.TinkerTitle(), infile.Filename() );
mprintf("\tTinker file contains %i atoms, %i residues,\n", parmOut.Natom(),parmOut.Nres());
//mprintf(" %i bonds to H, %i other bonds.\n", parmOut.NbondsWithH,parmOut.NbondsWithoutH);
infile.CloseFile();
return 0;
}
示例4: ReadParm
// Parm_CIF::ReadParm()
int Parm_CIF::ReadParm(FileName const& fname, Topology &TopIn) {
CIFfile infile;
CIFfile::DataBlock::data_it line;
if (infile.Read( fname, debug_ )) return 1;
CIFfile::DataBlock const& block = infile.GetDataBlock("_atom_site");
if (block.empty()) {
mprinterr("Error: CIF data block '_atom_site' not found.\n");
return 1;
}
// Does this CIF contain multiple models?
int Nmodels = 0;
int model_col = block.ColumnIndex("pdbx_PDB_model_num");
if (model_col != -1) {
line = block.end();
--line;
Nmodels = convertToInteger( (*line)[model_col] );
if (Nmodels > 1)
mprintf("Warning: CIF '%s' contains %i models. Using first model for topology.\n",
fname.full(), Nmodels);
}
// Get essential columns
int COL[NENTRY];
for (int i = 0; i < (int)NENTRY; i++) {
COL[i] = block.ColumnIndex(Entries[i]);
if (COL[i] == -1) {
mprinterr("Error: In CIF file '%s' could not find entry '%s' in block '%s'\n",
fname.full(), Entries[i], block.Header().c_str());
return 1;
}
if (debug_>0) mprintf("DEBUG: '%s' column = %i\n", Entries[i], COL[i]);
}
// Get optional columns
int occ_col = block.ColumnIndex("occupancy");
int bfac_col = block.ColumnIndex("B_iso_or_equiv");
int icode_col = block.ColumnIndex("pdbx_PDB_ins_code");
int altloc_col = block.ColumnIndex("label_alt_id");
std::vector<AtomExtra> extra;
// Loop over all atom sites
int current_res = 0;
double XYZ[3];
double occupancy = 1.0;
double bfactor = 0.0;
char altloc = ' ';
char icode;
icode = ' ';
Frame Coords;
for (line = block.begin(); line != block.end(); ++line) {
// If more than 1 model check if we are done.
if (Nmodels > 1) {
if ( convertToInteger( (*line)[model_col] ) > 1 )
break;
}
if (occ_col != -1) occupancy = convertToDouble( (*line)[ occ_col ] );
if (bfac_col != -1) bfactor = convertToDouble( (*line)[ bfac_col ] );
if (altloc_col != -1) altloc = (*line)[ altloc_col ][0];
// '.' altloc means blank?
if (altloc == '.') altloc = ' ';
extra.push_back( AtomExtra(occupancy, bfactor, altloc) );
if (icode_col != -1) {
icode = (*line)[ icode_col ][0];
// '?' icode means blank
if (icode == '?') icode = ' ';
}
XYZ[0] = convertToDouble( (*line)[ COL[X] ] );
XYZ[1] = convertToDouble( (*line)[ COL[Y] ] );
XYZ[2] = convertToDouble( (*line)[ COL[Z] ] );
NameType currentResName( (*line)[ COL[RNAME] ] );
// It seems that in some CIF files, there doesnt have to be a residue
// number. Check if residue name has changed.
if ( (*line)[ COL[RNUM] ][0] == '.' ) {
Topology::res_iterator lastResidue = TopIn.ResEnd();
--lastResidue;
if ( currentResName != (*lastResidue).Name() )
current_res = TopIn.Nres() + 1;
} else
current_res = convertToInteger( (*line)[ COL[RNUM] ] );
TopIn.AddTopAtom( Atom((*line)[ COL[ANAME] ], " "),
Residue(currentResName, current_res, icode,
(*line)[ COL[CHAINID] ][0]) );
Coords.AddXYZ( XYZ );
}
if (TopIn.SetExtraAtomInfo( 0, extra )) return 1;
// Search for bonds // FIXME nobondsearch?
BondSearch( TopIn, Coords, Offset_, debug_ );
// Get title.
CIFfile::DataBlock const& entryblock = infile.GetDataBlock("_entry");
std::string ciftitle;
if (!entryblock.empty())
ciftitle = entryblock.Data("id");
TopIn.SetParmName( ciftitle, infile.CIFname() );
// Get unit cell parameters if present.
CIFfile::DataBlock const& cellblock = infile.GetDataBlock("_cell");
if (!cellblock.empty()) {
double cif_box[6];
cif_box[0] = convertToDouble( cellblock.Data("length_a") );
cif_box[1] = convertToDouble( cellblock.Data("length_b") );
cif_box[2] = convertToDouble( cellblock.Data("length_c") );
//.........这里部分代码省略.........
示例5: ReadParm
/** Open the Charmm PSF file specified by filename and set up topology data.
* Mask selection requires natom, nres, names, resnames, resnums.
*/
int Parm_CharmmPsf::ReadParm(FileName const& fname, Topology &parmOut) {
const size_t TAGSIZE = 10;
char tag[TAGSIZE];
tag[0]='\0';
CpptrajFile infile;
if (infile.OpenRead(fname)) return 1;
mprintf(" Reading Charmm PSF file %s as topology file.\n",infile.Filename().base());
// Read the first line, should contain PSF...
const char* buffer = 0;
if ( (buffer=infile.NextLine()) == 0 ) return 1;
// Advance to <ntitle> !NTITLE
int ntitle = FindTag(tag, "!NTITLE", 7, infile);
// Only read in 1st title. Skip any asterisks.
std::string psftitle;
if (ntitle > 0) {
buffer = infile.NextLine();
const char* ptr = buffer;
while (*ptr != '\0' && (*ptr == ' ' || *ptr == '*')) ++ptr;
psftitle.assign( ptr );
}
parmOut.SetParmName( NoTrailingWhitespace(psftitle), infile.Filename() );
// Advance to <natom> !NATOM
int natom = FindTag(tag, "!NATOM", 6, infile);
if (debug_>0) mprintf("\tPSF: !NATOM tag found, natom=%i\n", natom);
// If no atoms, probably issue with PSF file
if (natom < 1) {
mprinterr("Error: No atoms in PSF file.\n");
return 1;
}
// Read the next natom lines
int psfresnum = 0;
char psfresname[6];
char psfname[6];
char psftype[6];
double psfcharge;
double psfmass;
for (int atom=0; atom < natom; atom++) {
if ( (buffer=infile.NextLine()) == 0 ) {
mprinterr("Error: ReadParmPSF(): Reading atom %i\n",atom+1);
return 1;
}
// Read line
// ATOM# SEGID RES# RES ATNAME ATTYPE CHRG MASS (REST OF COLUMNS ARE LIKELY FOR CMAP AND CHEQ)
sscanf(buffer,"%*i %*s %i %s %s %s %lf %lf",&psfresnum, psfresname,
psfname, psftype, &psfcharge, &psfmass);
parmOut.AddTopAtom( Atom( psfname, psfcharge, psfmass, psftype),
Residue( psfresname, psfresnum, ' ', ' '), 0 );
} // END loop over atoms
// Advance to <nbond> !NBOND
int bondatoms[9];
int nbond = FindTag(tag, "!NBOND", 6, infile);
if (nbond > 0) {
if (debug_>0) mprintf("\tPSF: !NBOND tag found, nbond=%i\n", nbond);
int nlines = nbond / 4;
if ( (nbond % 4) != 0) nlines++;
for (int bondline=0; bondline < nlines; bondline++) {
if ( (buffer=infile.NextLine()) == 0 ) {
mprinterr("Error: ReadParmPSF(): Reading bond line %i\n",bondline+1);
return 1;
}
// Each line has 4 pairs of atom numbers
int nbondsread = sscanf(buffer,"%i %i %i %i %i %i %i %i",bondatoms,bondatoms+1,
bondatoms+2,bondatoms+3, bondatoms+4,bondatoms+5,
bondatoms+6,bondatoms+7);
// NOTE: Charmm atom nums start from 1
for (int bondidx=0; bondidx < nbondsread; bondidx+=2)
parmOut.AddBond(bondatoms[bondidx]-1, bondatoms[bondidx+1]-1);
}
} else
mprintf("Warning: PSF has no bonds.\n");
// Advance to <nangles> !NTHETA
int nangle = FindTag(tag, "!NTHETA", 7, infile);
if (nangle > 0) {
if (debug_>0) mprintf("\tPSF: !NTHETA tag found, nangle=%i\n", nangle);
int nlines = nangle / 3;
if ( (nangle % 3) != 0) nlines++;
for (int angleline=0; angleline < nlines; angleline++) {
if ( (buffer=infile.NextLine()) == 0) {
mprinterr("Error: Reading angle line %i\n", angleline+1);
return 1;
}
// Each line has 3 groups of 3 atom numbers
int nanglesread = sscanf(buffer,"%i %i %i %i %i %i %i %i %i",bondatoms,bondatoms+1,
bondatoms+2,bondatoms+3, bondatoms+4,bondatoms+5,
bondatoms+6,bondatoms+7, bondatoms+8);
for (int angleidx=0; angleidx < nanglesread; angleidx += 3)
parmOut.AddAngle( bondatoms[angleidx ]-1,
bondatoms[angleidx+1]-1,
bondatoms[angleidx+2]-1 );
}
} else
mprintf("Warning: PSF has no angles.\n");
// Advance to <ndihedrals> !NPHI
int ndihedral = FindTag(tag, "!NPHI", 5, infile);
if (ndihedral > 0) {
if (debug_>0) mprintf("\tPSF: !NPHI tag found, ndihedral=%i\n", ndihedral);
//.........这里部分代码省略.........