// Add Pattern Node Pattern* Model::addPattern(QString patternName, int nMols, int nAtomsPerMol) { Messenger::enter("Model::addPattern"); // Determine starting atom... Pattern* lastp = patterns_.last(); int start = (lastp == NULL ? 0 : lastp->startAtom() + lastp->nMolecules() * lastp->nAtoms()); Pattern* newpnode = patterns_.add(); newpnode->setParent(this); newpnode->setName(patternName); newpnode->initialise(patterns_.nItems()-1, start, nMols, nAtomsPerMol); Messenger::print("New pattern '%s' added - startatom %i, %i mols, %i atoms per mol.", qPrintable(patternName) , start+1, nMols, nAtomsPerMol); if ((start + nMols*nAtomsPerMol) == atoms_.nItems()) { Messenger::print("Pattern description completed (spans %i atoms).", atoms_.nItems()); energy.resize(patterns_.nItems()); Messenger::print("Done."); // Patterns depend only on the properties / relation of the atoms, and not the positions.. patternsPoint_ = log(Log::Structure); } else if ((start + nMols*nAtomsPerMol) > atoms_.nItems()) { Messenger::print("New pattern '%s' extends %i atoms past number of atoms in owner model.", qPrintable(patternName), (start + nMols*nAtomsPerMol) - atoms_.nItems()); Messenger::print("Not added."); patterns_.remove(newpnode); newpnode = NULL; } Messenger::exit("Model::addPattern"); return newpnode; }
// Own pattern void Model::ownPattern(Pattern* source, bool own) { Messenger::enter("Model::ownPattern"); // Set the starting atom from the last pattern in the model's list Pattern* p = patterns_.last(); int start = (p == NULL ? 0 : p->startAtom() + p->nMolecules() * p->nAtoms()); // Add the pattern onto the end of the current list patterns_.own(source); energy.resize(patterns_.nItems()); // Set startatom and endatom to be coherent with the models current list source->setContents(start,-1,-1); source->setId(patterns_.nItems()-1); //source->set_id(patterns_.nItems()-1); if (own) source->setParent(this); Messenger::exit("Model::ownPattern"); }
// Print patterns void Model::printPatterns() const { Messenger::enter("Model::printPatterns"); Pattern* p = patterns_.first(); if (p == NULL) Messenger::print("No patterns defined for model '%s'.", qPrintable(name_)); else { Messenger::print("Pattern info for model '%s':", qPrintable(name_)); Messenger::print(" ID NMols StartId EndId Name Forcefield"); while (p != NULL) { Messenger::print(" %2i %-5i %-6i %-6i %-16s %s", p->id(), p->nMolecules(), p->startAtom()+1, p->endAtom()+1, qPrintable(p->name()), p->forcefield() ? qPrintable(p->forcefield()->name()) : "< Inherited >"); p = p->next; } } Messenger::exit("Model::printPatterns"); }