// ReferenceAction::InitRef() int ReferenceAction::InitRef(bool previousIn, bool firstIn, bool massIn, bool fitIn, std::string const& reftrajname, ReferenceFrame const& REF, Topology* RefParm, std::string const& refmaskIn, ArgList& actionArgs, const char* call) { refmode_ = UNKNOWN_REF; previous_ = previousIn; if (firstIn || previous_) refmode_ = FIRST; else { if (REF.error()) return 1; if (REF.empty()) { if (!reftrajname.empty()) { if (RefParm == 0) { mprinterr("Error: %s: No parm found for reftraj %s. Make sure parm has been loaded.\n", call, reftrajname.c_str()); return 1; } refmode_ = REFTRAJ; } else { // No reference keywords specified. Default to first. mprintf("Warning: %s: No reference structure given. Defaulting to first.\n",call); refmode_ = FIRST; } } else refmode_ = REFFRAME; } // Set the reference mask expression refMask_.SetMaskString(refmaskIn); // Initialize reference if not 'first' if (refmode_ != FIRST) { if ( !reftrajname.empty() ) { // Reference trajectory if (SetRefMask( *RefParm, call )!=0) return 1; // Attempt to open reference traj. if (refTraj_.SetupTrajRead( reftrajname, actionArgs, RefParm)) { mprinterr("Error: %s: Could not set up reftraj %s\n", call, reftrajname.c_str()); return 1; } refFrame_.SetupFrameV(RefParm->Atoms(), refTraj_.TrajCoordInfo()); if (refTraj_.BeginTraj()) { mprinterr("Error: %s: Could not open reftraj %s\n", call, reftrajname.c_str()); return 1; } } else { // Reference Frame if (SetRefMask( REF.Parm(), call ) != 0) return 1; SetRefStructure( REF.Coord(), fitIn, massIn ); } } // Set reference mode string if (previous_) modeString_ = "previous frame"; else if (refmode_ == FIRST) modeString_ = "first frame"; else if (refmode_==REFTRAJ) modeString_ = "trajectory " + refTraj_.Traj().Filename().Full(); else // REFFRAME modeString_ = "\"" + REF.RefName() + "\""; modeString_ += " (" + refMask_.MaskExpression() + ")"; return 0; }