本文整理汇总了C++中PDB::getArgumentValue方法的典型用法代码示例。如果您正苦于以下问题:C++ PDB::getArgumentValue方法的具体用法?C++ PDB::getArgumentValue怎么用?C++ PDB::getArgumentValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PDB
的用法示例。
在下文中一共展示了PDB::getArgumentValue方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readArgumentsFromPDB
void ReferenceArguments::readArgumentsFromPDB( const PDB& pdb ) {
ReferenceAtoms* aref=dynamic_cast<ReferenceAtoms*>( this );
arg_names.resize( pdb.getArgumentNames().size() );
for(unsigned i=0; i<arg_names.size(); ++i) arg_names[i]=pdb.getArgumentNames()[i];
if( !aref && arg_names.size()==0 ) error("no arguments in input PDB file");
reference_args.resize( arg_names.size() ); arg_der_index.resize( arg_names.size() );
for(unsigned i=0; i<arg_names.size(); ++i) {
if( !pdb.getArgumentValue(arg_names[i], reference_args[i]) ) error("argument " + arg_names[i] + " was not set in pdb input");
arg_der_index[i]=i;
}
if( hasweights ) {
plumed_massert( !hasmetric, "should not have weights if we are using metric");
weights.resize( arg_names.size() ); sqrtweight.resize( arg_names.size() );
for(unsigned i=0; i<reference_args.size(); ++i) {
if( !pdb.getArgumentValue("sigma_" + arg_names[i], weights[i]) ) error("value sigma_" + arg_names[i] + " was not set in pdb input");
sqrtweight[i] = sqrt( weights[i] );
}
} else if( hasmetric ) {
plumed_massert( !hasweights, "should not have weights if we are using metric");
double thissig; metric.resize( arg_names.size(), arg_names.size() );
for(unsigned i=0; i<reference_args.size(); ++i) {
for(unsigned j=i; j<reference_args.size(); ++j) {
if( !pdb.getArgumentValue("sigma_" + arg_names[i] + "_" + arg_names[j], thissig) ) {
error("value sigma_" + arg_names[i] + "_" + arg_names[j] + " was not set in pdb input");
}
metric(i,j)=metric(j,i)=thissig;
}
}
} else {
weights.resize( arg_names.size() ); sqrtweight.resize( arg_names.size() );
for(unsigned i=0; i<weights.size(); ++i) sqrtweight[i]=weights[i]=1.0;
}
}
示例2: read
void MultiDomainRMSD::read( const PDB& pdb ) {
unsigned nblocks = pdb.getNumberOfAtomBlocks();
if( nblocks<2 ) error("multidomain RMSD only has one block of atoms");
std::vector<Vector> positions; std::vector<double> align, displace;
std::string num; blocks.resize( nblocks+1 ); blocks[0]=0;
for(unsigned i=0; i<nblocks; ++i) blocks[i+1]=pdb.getAtomBlockEnds()[i];
double tmp, lower=0.0, upper=std::numeric_limits<double>::max( );
if( pdb.getArgumentValue("LOWER_CUTOFF",tmp) ) lower=tmp;
if( pdb.getArgumentValue("UPPER_CUTOFF",tmp) ) upper=tmp;
bool nopbc=pdb.hasFlag("NOPBC");
domains.resize(0); weights.resize(0);
for(unsigned i=1; i<=nblocks; ++i) {
Tools::convert(i,num);
if( ftype=="RMSD" ) {
// parse("TYPE"+num, ftype );
lower=0.0; upper=std::numeric_limits<double>::max( );
if( pdb.getArgumentValue("LOWER_CUTOFF"+num,tmp) ) lower=tmp;
if( pdb.getArgumentValue("UPPER_CUTOFF"+num,tmp) ) upper=tmp;
nopbc=pdb.hasFlag("NOPBC");
}
domains.emplace_back( metricRegister().create<SingleDomainRMSD>( ftype ) );
positions.resize( blocks[i] - blocks[i-1] );
align.resize( blocks[i] - blocks[i-1] );
displace.resize( blocks[i] - blocks[i-1] );
unsigned n=0;
for(unsigned j=blocks[i-1]; j<blocks[i]; ++j) {
positions[n]=pdb.getPositions()[j];
align[n]=pdb.getOccupancy()[j];
displace[n]=pdb.getBeta()[j];
n++;
}
domains[i-1]->setBoundsOnDistances( !nopbc, lower, upper );
domains[i-1]->setReferenceAtoms( positions, align, displace );
domains[i-1]->setupRMSDObject();
double ww=0;
if( !pdb.getArgumentValue("WEIGHT"+num,ww) ) weights.push_back( 1.0 );
else weights.push_back( ww );
}
// And set the atom numbers for this object
indices.resize(0); atom_der_index.resize(0);
for(unsigned i=0; i<pdb.size(); ++i) { indices.push_back( pdb.getAtomNumbers()[i] ); atom_der_index.push_back(i); }
// setAtomNumbers( pdb.getAtomNumbers() );
}