// Clears charge in current model ('clearcharges') bool Commands::function_ClearCharges(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Remove charges"); obj.rs()->clearCharges(); obj.rs()->endUndoState(); return true; }
// Assign charge to a pattern atom, propagated over the model ('chargepatom <id> <q>') bool Commands::function_ChargePAtom(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Charge single pattern atom"); obj.rs()->chargePatternAtom(obj.p,c->argi(0),c->argd(1)); obj.rs()->endUndoState(); return true; }
// Assign charges from forcefield atom types ('chargeff') bool Commands::function_ChargeFF(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Assign forcefield charges"); bool result = obj.rs()->assignForcefieldCharges(); obj.rs()->endUndoState(); return (result); }
// Copy atomic charges from model to model's current trajectory frame bool Commands::function_ChargeFromModel(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; if (obj.rs() == obj.m) { Messenger::print("Error - 'chargefrommodel' requires an active trajectory frame in the current model."); return false; } else obj.rs()->copyAtomData(obj.m, Atom::ChargeData); return true; }
// Load grid ('loadgrid <filename>') bool Commands::function_LoadGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; Grid* g = NULL; if (aten_.importGrid(obj.rs(), c->argc(0))) g = obj.g; else return false; // Set return value rv.set(VTypes::GridData, g); return true; }
ATEN_USING_NAMESPACE // Assign charge to selected atoms in model ('charge <q>'), or get charge of current selection bool Commands::function_Charge(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; double q = 0.0; if (c->hasArg(0)) { obj.rs()->beginUndoState("Charge selected atoms"); for (RefListItem<Atom,int>* ri = obj.rs()->selection(); ri != NULL; ri = ri->next) obj.rs()->atomSetCharge(ri->item, c->argd(0)); obj.rs()->endUndoState(); } else { q = 0.0; for (RefListItem<Atom,int>* ri = obj.rs()->selection(); ri != NULL; ri = ri->next) q += ri->item->charge(); } rv.set(q); return true; }
// Return nth grid of model bool Commands::function_GetGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; Grid* g = NULL; switch (c->argType(0)) { case (VTypes::IntegerData): g = obj.rs()->grid(c->argi(0)-1); break; case (VTypes::GridData): g = (Grid*) c->argp(0, VTypes::GridData); break; default: Messenger::print("Can't convert a variable of type '%s' to a Grid.", VTypes::dataType(c->argType(0))); break; } if (g == NULL) return false; rv.set(VTypes::GridData, g); return true; }