本文整理汇总了C++中StuntDouble::getGlobalIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ StuntDouble::getGlobalIndex方法的具体用法?C++ StuntDouble::getGlobalIndex怎么用?C++ StuntDouble::getGlobalIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StuntDouble
的用法示例。
在下文中一共展示了StuntDouble::getGlobalIndex方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: computeFrame
void RCorrFuncZ::computeFrame(int istep) {
hmat_ = currentSnapshot_->getHmat();
halfBoxZ_ = hmat_(2,2) / 2.0;
StuntDouble* sd;
int isd1, isd2;
unsigned int index;
if (evaluator1_.isDynamic()) {
seleMan1_.setSelectionSet(evaluator1_.evaluate());
}
if (uniqueSelections_ && evaluator2_.isDynamic()) {
seleMan2_.setSelectionSet(evaluator2_.evaluate());
}
for (sd = seleMan1_.beginSelected(isd1); sd != NULL;
sd = seleMan1_.nextSelected(isd1)) {
index = computeProperty1(istep, sd);
if (index == sele1ToIndex_[istep].size()) {
sele1ToIndex_[istep].push_back(sd->getGlobalIndex());
} else {
sele1ToIndex_[istep].resize(index+1);
sele1ToIndex_[istep][index] = sd->getGlobalIndex();
}
}
if (uniqueSelections_) {
for (sd = seleMan2_.beginSelected(isd2); sd != NULL;
sd = seleMan2_.nextSelected(isd2)) {
index = computeProperty1(istep, sd);
if (index == sele2ToIndex_[istep].size()) {
sele2ToIndex_[istep].push_back(sd->getGlobalIndex());
} else {
sele2ToIndex_[istep].resize(index+1);
sele2ToIndex_[istep][index] = sd->getGlobalIndex();
}
}
}
}
示例2: process
void BondAngleDistribution::process() {
Molecule* mol;
Atom* atom;
RigidBody* rb;
int myIndex;
SimInfo::MoleculeIterator mi;
Molecule::RigidBodyIterator rbIter;
Molecule::AtomIterator ai;
StuntDouble* sd;
Vector3d vec;
std::vector<Vector3d> bondvec;
RealType r;
int nBonds;
int i;
bool usePeriodicBoundaryConditions_ = info_->getSimParams()->getUsePeriodicBoundaryConditions();
DumpReader reader(info_, dumpFilename_);
int nFrames = reader.getNFrames();
frameCounter_ = 0;
nTotBonds_ = 0;
for (int istep = 0; istep < nFrames; istep += step_) {
reader.readFrame(istep);
frameCounter_++;
currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
if (evaluator_.isDynamic()) {
seleMan_.setSelectionSet(evaluator_.evaluate());
}
// update the positions of atoms which belong to the rigidbodies
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (rb = mol->beginRigidBody(rbIter); rb != NULL;
rb = mol->nextRigidBody(rbIter)) {
rb->updateAtoms();
}
}
// outer loop is over the selected StuntDoubles:
for (sd = seleMan_.beginSelected(i); sd != NULL;
sd = seleMan_.nextSelected(i)) {
myIndex = sd->getGlobalIndex();
nBonds = 0;
bondvec.clear();
// inner loop is over all other atoms in the system:
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (atom = mol->beginAtom(ai); atom != NULL;
atom = mol->nextAtom(ai)) {
if (atom->getGlobalIndex() != myIndex) {
vec = sd->getPos() - atom->getPos();
if (usePeriodicBoundaryConditions_)
currentSnapshot_->wrapVector(vec);
// Calculate "bonds" and make a pair list
r = vec.length();
// Check to see if neighbor is in bond cutoff
if (r < rCut_) {
// Add neighbor to bond list's
bondvec.push_back(vec);
nBonds++;
nTotBonds_++;
}
}
}
for (int i = 0; i < nBonds-1; i++ ){
Vector3d vec1 = bondvec[i];
vec1.normalize();
for(int j = i+1; j < nBonds; j++){
Vector3d vec2 = bondvec[j];
vec2.normalize();
RealType theta = acos(dot(vec1,vec2))*180.0/NumericConstant::PI;
if (theta > 180.0){
theta = 360.0 - theta;
}
int whichBin = int(theta/deltaTheta_);
histogram_[whichBin] += 2;
}
}
//.........这里部分代码省略.........
示例3: process
void TetrahedralityParam::process() {
Molecule* mol;
StuntDouble* sd;
StuntDouble* sd2;
StuntDouble* sdi;
StuntDouble* sdj;
RigidBody* rb;
int myIndex;
SimInfo::MoleculeIterator mi;
Molecule::RigidBodyIterator rbIter;
Molecule::IntegrableObjectIterator ioi;
Vector3d vec;
Vector3d ri, rj, rk, rik, rkj, dposition, tposition;
RealType r;
RealType cospsi;
RealType Qk;
std::vector<std::pair<RealType,StuntDouble*> > myNeighbors;
int isd;
bool usePeriodicBoundaryConditions_ = info_->getSimParams()->getUsePeriodicBoundaryConditions();
DumpReader reader(info_, dumpFilename_);
int nFrames = reader.getNFrames();
frameCounter_ = 0;
Distorted_.clear();
Tetrahedral_.clear();
for (int istep = 0; istep < nFrames; istep += step_) {
reader.readFrame(istep);
frameCounter_++;
currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
if (evaluator_.isDynamic()) {
seleMan_.setSelectionSet(evaluator_.evaluate());
}
// update the positions of atoms which belong to the rigidbodies
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (rb = mol->beginRigidBody(rbIter); rb != NULL;
rb = mol->nextRigidBody(rbIter)) {
rb->updateAtoms();
}
}
// outer loop is over the selected StuntDoubles:
for (sd = seleMan_.beginSelected(isd); sd != NULL;
sd = seleMan_.nextSelected(isd)) {
myIndex = sd->getGlobalIndex();
Qk = 1.0;
myNeighbors.clear();
// inner loop is over all StuntDoubles in the system:
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (sd2 = mol->beginIntegrableObject(ioi); sd2 != NULL;
sd2 = mol->nextIntegrableObject(ioi)) {
if (sd2->getGlobalIndex() != myIndex) {
vec = sd->getPos() - sd2->getPos();
if (usePeriodicBoundaryConditions_)
currentSnapshot_->wrapVector(vec);
r = vec.length();
// Check to see if neighbor is in bond cutoff
if (r < rCut_) {
myNeighbors.push_back(std::make_pair(r,sd2));
}
}
}
}
// Sort the vector using predicate and std::sort
std::sort(myNeighbors.begin(), myNeighbors.end());
//std::cerr << myNeighbors.size() << " neighbors within "
// << rCut_ << " A" << " \n";
// Use only the 4 closest neighbors to do the rest of the work:
int nbors = myNeighbors.size()> 4 ? 4 : myNeighbors.size();
int nang = int (0.5 * (nbors * (nbors - 1)));
rk = sd->getPos();
//std::cerr<<nbors<<endl;
for (int i = 0; i < nbors-1; i++) {
sdi = myNeighbors[i].second;
//.........这里部分代码省略.........
示例4: process
void TetrahedralityParamXYZ::process() {
Molecule* mol;
StuntDouble* sd;
StuntDouble* sd2;
StuntDouble* sdi;
StuntDouble* sdj;
RigidBody* rb;
int myIndex;
SimInfo::MoleculeIterator mi;
Molecule::RigidBodyIterator rbIter;
Vector3d vec;
Vector3d ri, rj, rk, rik, rkj;
RealType r;
RealType cospsi;
RealType Qk;
std::vector<std::pair<RealType,StuntDouble*> > myNeighbors;
//std::vector<std::pair<Vector3d, RealType> > qvals;
//std::vector<std::pair<Vector3d, RealType> >::iterator qiter;
int isd1;
int isd2;
int kMax = int(5.0 * gaussWidth_ / voxelSize_);
int kSqLim = kMax*kMax;
cerr << "gw = " << gaussWidth_ << " vS = " << voxelSize_ << " kMax = "
<< kMax << " kSqLim = " << kSqLim << "\n";
DumpReader reader(info_, dumpFilename_);
int nFrames = reader.getNFrames();
for (int istep = 0; istep < nFrames; istep += step_) {
reader.readFrame(istep);
currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
Mat3x3d hmat = currentSnapshot_->getHmat();
Vector3d halfBox = Vector3d(hmat(0,0), hmat(1,1), hmat(2,2)) / 2.0;
if (evaluator1_.isDynamic()) {
seleMan1_.setSelectionSet(evaluator1_.evaluate());
}
if (evaluator2_.isDynamic()) {
seleMan2_.setSelectionSet(evaluator2_.evaluate());
}
// update the positions of atoms which belong to the rigidbodies
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (rb = mol->beginRigidBody(rbIter); rb != NULL;
rb = mol->nextRigidBody(rbIter)) {
rb->updateAtoms();
}
}
//qvals.clear();
// outer loop is over the selected StuntDoubles:
for (sd = seleMan1_.beginSelected(isd1); sd != NULL;
sd = seleMan1_.nextSelected(isd1)) {
myIndex = sd->getGlobalIndex();
Qk = 1.0;
myNeighbors.clear();
for (sd2 = seleMan2_.beginSelected(isd2); sd2 != NULL;
sd2 = seleMan2_.nextSelected(isd2)) {
if (sd2->getGlobalIndex() != myIndex) {
vec = sd->getPos() - sd2->getPos();
if (usePeriodicBoundaryConditions_)
currentSnapshot_->wrapVector(vec);
r = vec.length();
// Check to see if neighbor is in bond cutoff
if (r < rCut_) {
myNeighbors.push_back(std::make_pair(r,sd2));
}
}
}
// Sort the vector using predicate and std::sort
std::sort(myNeighbors.begin(), myNeighbors.end());
// Use only the 4 closest neighbors to do the rest of the work:
int nbors = myNeighbors.size()> 4 ? 4 : myNeighbors.size();
int nang = int (0.5 * (nbors * (nbors - 1)));
rk = sd->getPos();
for (int i = 0; i < nbors-1; i++) {
sdi = myNeighbors[i].second;
ri = sdi->getPos();
rik = rk - ri;
//.........这里部分代码省略.........
示例5: process
void TetrahedralityParamZ::process() {
Molecule* mol;
StuntDouble* sd;
StuntDouble* sd2;
StuntDouble* sdi;
StuntDouble* sdj;
RigidBody* rb;
int myIndex;
SimInfo::MoleculeIterator mi;
Molecule::RigidBodyIterator rbIter;
Vector3d vec;
Vector3d ri, rj, rk, rik, rkj;
RealType r;
RealType cospsi;
RealType Qk;
std::vector<std::pair<RealType,StuntDouble*> > myNeighbors;
int isd1;
int isd2;
DumpReader reader(info_, dumpFilename_);
int nFrames = reader.getNFrames();
for (int istep = 0; istep < nFrames; istep += step_) {
reader.readFrame(istep);
currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
Mat3x3d hmat = currentSnapshot_->getHmat();
zBox_.push_back(hmat(2,2));
RealType halfBoxZ_ = hmat(2,2) / 2.0;
if (evaluator1_.isDynamic()) {
seleMan1_.setSelectionSet(evaluator1_.evaluate());
}
if (evaluator2_.isDynamic()) {
seleMan2_.setSelectionSet(evaluator2_.evaluate());
}
// update the positions of atoms which belong to the rigidbodies
for (mol = info_->beginMolecule(mi); mol != NULL;
mol = info_->nextMolecule(mi)) {
for (rb = mol->beginRigidBody(rbIter); rb != NULL;
rb = mol->nextRigidBody(rbIter)) {
rb->updateAtoms();
}
}
// outer loop is over the selected StuntDoubles:
for (sd = seleMan1_.beginSelected(isd1); sd != NULL;
sd = seleMan1_.nextSelected(isd1)) {
myIndex = sd->getGlobalIndex();
Qk = 1.0;
myNeighbors.clear();
for (sd2 = seleMan2_.beginSelected(isd2); sd2 != NULL;
sd2 = seleMan2_.nextSelected(isd2)) {
if (sd2->getGlobalIndex() != myIndex) {
vec = sd->getPos() - sd2->getPos();
if (usePeriodicBoundaryConditions_)
currentSnapshot_->wrapVector(vec);
r = vec.length();
// Check to see if neighbor is in bond cutoff
if (r < rCut_) {
myNeighbors.push_back(std::make_pair(r,sd2));
}
}
}
// Sort the vector using predicate and std::sort
std::sort(myNeighbors.begin(), myNeighbors.end());
// Use only the 4 closest neighbors to do the rest of the work:
int nbors = myNeighbors.size()> 4 ? 4 : myNeighbors.size();
int nang = int (0.5 * (nbors * (nbors - 1)));
rk = sd->getPos();
for (int i = 0; i < nbors-1; i++) {
sdi = myNeighbors[i].second;
ri = sdi->getPos();
rik = rk - ri;
if (usePeriodicBoundaryConditions_)
currentSnapshot_->wrapVector(rik);
rik.normalize();
for (int j = i+1; j < nbors; j++) {
sdj = myNeighbors[j].second;
//.........这里部分代码省略.........