本文整理汇总了C++中Topology::AddDihedral方法的典型用法代码示例。如果您正苦于以下问题:C++ Topology::AddDihedral方法的具体用法?C++ Topology::AddDihedral怎么用?C++ Topology::AddDihedral使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Topology
的用法示例。
在下文中一共展示了Topology::AddDihedral方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadParm
//.........这里部分代码省略.........
// 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);
int nlines = ndihedral / 2;
if ( (ndihedral % 2) != 0) nlines++;
for (int dihline = 0; dihline < nlines; dihline++) {
if ( (buffer=infile.NextLine()) == 0) {
mprinterr("Error: Reading dihedral line %i\n", dihline+1);
return 1;
}
// Each line has 2 groups of 4 atom numbers
int ndihread = 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);
for (int dihidx=0; dihidx < ndihread; dihidx += 4)
parmOut.AddDihedral( bondatoms[dihidx ]-1,
bondatoms[dihidx+1]-1,
bondatoms[dihidx+2]-1,
bondatoms[dihidx+3]-1 );
}
} else
mprintf("Warning: PSF has no dihedrals.\n");
mprintf("\tPSF contains %i atoms, %i residues.\n", parmOut.Natom(), parmOut.Nres());
infile.CloseFile();
return 0;
}