#include <ctype.h>#include <string.h>#include <stdlib.h>#include "common.h"#include "InfoStream.h"#include "FreeEnergyEnums.h"#include "FreeEnergyAssert.h"#include "Vector.h"#include "FreeEnergyVector.h"#include "FreeEnergyGroup.h"#include "FreeEnergyRestrain.h"#include "FreeEnergyRMgr.h"#include "FreeEnergyLambda.h"#include "FreeEnergyLambdMgr.h"#include "NamdTypes.h"#include "GlobalMaster.h"#include "GlobalMasterFreeEnergy.h"#include "FreeEnergyParse.h"Go to the source code of this file.
Functions | |
| void | ProblemParsing (const char *Message, const char *Str, Bool_t Terminate) |
| void | CheckParentheses (const char *Str) |
| void | ReadInput (char *Str, ARestraintManager &RMgr, ALambdaManager &LMgr, GlobalMasterFreeEnergy &CFE, double dT) |
| int | ReadPmfBlock (char *Str, ALambdaControl &PmfBlock, double dT) |
| double | GetTime (double Val, TimeUnits_t Units) |
| int | ReadTimeUnits (char *Str, TimeUnits_t &Units, TimeUnits_t DefaultUnits) |
| int | ReadTaskType (char *Str, feptask_t &Task) |
| int | ReadNextPmfSpec (char *Str, pmf_t &PmfSpec) |
| int | ReadRestraints (char *Str, ARestraintManager &AllRestraints, GlobalMasterFreeEnergy &CFE) |
| ARestraint * | GetRestraint (char *Str, int &NumChars, GlobalMasterFreeEnergy &CFE) |
| int | ReadBound (char *Str, Bound_t &Bound) |
| int | ReadAValue (char *Str, double &Value, Bool_t ErrMsg) |
| int | ReadChar (char *Str, char Char, Bool_t ErrMsg) |
| int | ReadWord (const char *Str, const char *Word, Bool_t ErrMsg) |
| restr_t | ReadNextRestraintType (char *Str, int &NumChars) |
| int | AddAtoms (AGroup &Group, char *Str, GlobalMasterFreeEnergy &CFE) |
| void | AddAtomsInResidues (AGroup &Group, char *AtomNames, char *ResRange, GlobalMasterFreeEnergy &CFE) |
| void | AddResidues (AGroup &Group, char *ResRange, GlobalMasterFreeEnergy &CFE) |
| void | AddAtom (AGroup &Group, char *Atom, GlobalMasterFreeEnergy &CFE) |
| void | AddAtom (AGroup &Group, char *ResRange, char *AtomName, GlobalMasterFreeEnergy &CFE) |
| void | GetResRange (char *ResRange, int &ResNum1, int &ResNum2) |
| int | GetSegName (char *Str, char *SegName) |
| int | GetResNum (char *Str, int &ResNum) |
| int | GetAtomName (char *Str, char *AtomName) |
| item_t | ReadNextItem (char *Str, int &NumChars) |
| int | IsStartGroup (char *Str) |
| int | IsEndGroup (char *Str) |
| int | IsAtomName (char *Str) |
| int | IsAtomNameList (char *Str) |
| int | IsAtom (char *Str) |
| int | IsResidueRange (char *Str) |
| int | IsResidue (char *Str) |
| int | IsAResidue (char *Str) |
| int | ReadParentheses (const char *Str) |
| int | ReadAlpha (const char *Str) |
| int | ReadAlphaNum (const char *Str) |
| int | ReadDigits (const char *Str) |
| int | ReadWhite (const char *Str) |
| void | ToLower (char *Str) |
|
||||||||||||||||||||
|
Definition at line 1024 of file FreeEnergyParse.C. References AGroup::Add(), AtomID, GlobalMasterFreeEnergy::getAtomID(), GetResRange(), GetSegName(), ProblemParsing(), and GlobalMasterFreeEnergy::requestAtom(). Referenced by AddAtom(), AddAtoms(), and AddAtomsInResidues(). 01025 {
01026 //-------------------------------------------------------------------
01027 // Group contains a list of int's representing AtomID's.
01028 // ResRange should be "(segname, resnum) to (segname, resnum)"
01029 // or "(segname, resnum)"
01030 // AtomName is specified separately.
01031 // get the atomID, and add it to Group.
01032 //-------------------------------------------------------------------
01033 char SegName[21];
01034 int ResNum, ResNum1, ResNum2, AtomID, RetVal;
01035
01036 // convert "(segname, resnum1) to (segname, resnum2)"
01037 // -> SegName, ResNum1, ResNum2
01038 GetSegName(ResRange, SegName);
01039 GetResRange(ResRange, ResNum1, ResNum2);
01040
01041 // get atomID for each atom in the specified residue range
01042 // register it, add it to Group
01043 for (ResNum=ResNum1; ResNum<=ResNum2; ResNum++) {
01044 AtomID = CFE.getAtomID(SegName, ResNum, AtomName);
01045 if (AtomID < 0) { ProblemParsing("Invalid AtomID", ResRange); }
01046 RetVal = CFE.requestAtom(AtomID);
01047 if (RetVal < 0) { ProblemParsing("Unable to requestAtom", ResRange); }
01048 Group.Add(AtomID);
01049 }
01050 }
|
|
||||||||||||||||
|
Definition at line 1011 of file FreeEnergyParse.C. 01011 {
01012 //-------------------------------------------------------------------
01013 // Group contains a list of int's representing AtomID's.
01014 // Atom should be "(segname, resnum, atomname)"
01015 // get the atomID for Atom, and add it to Group.
01016 //-------------------------------------------------------------------
01017 char AtomName[21];
01018
01019 GetAtomName(Atom, AtomName);
01020 AddAtom(Group, Atom, AtomName, CFE);
01021 }
|
|
||||||||||||||||
|
Definition at line 875 of file FreeEnergyParse.C. References AddAtom(), AddAtomsInResidues(), AddResidues(), Bool_t, kAtom, kAtomName, kAtomNameList, kEndGroup, kResidue, kResidueRange, kStartGroup, ProblemParsing(), ReadNextItem(), and ReadWhite(). Referenced by GetRestraint(). 00875 {
00876 //----------------------------------------------------------------------------
00877 // Str contains specifications for which atoms to add to Group.
00878 // The atoms may be:
00879 // a) a single atom, b) all atoms of a residue, c) a list of atoms
00880 // d) all atoms in a list of residues, e) all atoms in a range of residues,
00881 // e) one or more atomnames in a list of residues, or
00882 // f) one or more atomnames in a range of residues
00883 // Add the AtomID's for these specified atoms to Group.
00884 // return the number of characters in Str that were read.
00885 //----------------------------------------------------------------------------
00886 int NumChars;
00887 int RetNumChars = 0;
00888 Bool_t GroupMode = kFalse;
00889 Bool_t AtomList = kFalse;
00890 Bool_t Finished = kFalse;
00891 char* SavePtr = 0;
00892
00893 while (!Finished) {
00894 switch(ReadNextItem(Str, NumChars)) {
00895 case kStartGroup:
00896 GroupMode = kTrue;
00897 break;
00898 case kEndGroup:
00899 Finished = kTrue;
00900 break;
00901 case kAtom:
00902 AddAtom(Group, Str, CFE);
00903 if (!GroupMode) {
00904 Finished = kTrue;
00905 }
00906 break;
00907 case kAtomName:
00908 case kAtomNameList:
00909 AtomList = kTrue;
00910 SavePtr = Str;
00911 break;
00912 case kResidue:
00913 case kResidueRange:
00914 if (AtomList) {
00915 AddAtomsInResidues(Group, SavePtr, Str, CFE);
00916 }
00917 else {
00918 AddResidues(Group, Str, CFE);
00919 }
00920 if (!GroupMode) {
00921 Finished = kTrue;
00922 }
00923 break;
00924 default:
00925 Finished = kTrue;
00926 ProblemParsing("Can't Read Atoms", Str);
00927 break;
00928 }
00929 Str += NumChars;
00930 RetNumChars += NumChars;
00931 }
00932 RetNumChars += ReadWhite(Str);
00933 return(RetNumChars);
00934 }
|
|
||||||||||||||||||||
|
Definition at line 937 of file FreeEnergyParse.C. References AddAtom(), AddResidues(), ReadAlphaNum(), and ReadWhite(). Referenced by AddAtoms(). 00938 {
00939 //-------------------------------------------------------------------
00940 // Group contains a list of int's representing AtomID's.
00941 // ResRange should be "(segname, resnum) to (segname, resnum)"
00942 // or "(segname, resnum)"
00943 // AtomNames should be "(atomname, atomname, ...):" or "atomname:"
00944 // get the atomID's for each atomname in ResRange, add them to Group.
00945 //-------------------------------------------------------------------
00946 int Count, ArrayIndex, i;
00947 char AtomNamesArray[21][30];
00948
00949 // skip to start of first atomname
00950 if (AtomNames[0] == '(') {
00951 AtomNames++;
00952 Count = ReadWhite(AtomNames);
00953 AtomNames += Count;
00954 }
00955 // put each atomname into the array, finish when ':' or ')' is found
00956 ArrayIndex = 0;
00957 while ( (AtomNames[0]!=':') && (AtomNames[0]!=')') ) {
00958 Count = ReadAlphaNum(AtomNames);
00959 strncpy(AtomNamesArray[ArrayIndex], AtomNames, Count);
00960 AtomNamesArray[ArrayIndex][Count] = '\0';
00961 AtomNames += Count;
00962 Count = ReadWhite(AtomNames);
00963 AtomNames += Count;
00964 ArrayIndex++;
00965 }
00966 // now add each atomname of Res to Group.
00967 // if "all" is specified, add all atoms of Res to Group.
00968 for (i=0; i<ArrayIndex; i++) {
00969 if (strcmp(AtomNamesArray[i], "all") == 0) {
00970 AddResidues(Group, ResRange, CFE);
00971 }
00972 else {
00973 AddAtom(Group, ResRange, AtomNamesArray[i], CFE);
00974 }
00975 }
00976 }
|
|
||||||||||||||||
|
Definition at line 979 of file FreeEnergyParse.C. References AGroup::Add(), AtomID, GlobalMasterFreeEnergy::getAtomID(), GlobalMasterFreeEnergy::getNumAtoms(), GetResRange(), GetSegName(), ProblemParsing(), and GlobalMasterFreeEnergy::requestAtom(). Referenced by AddAtoms(), and AddAtomsInResidues(). 00979 {
00980 //-------------------------------------------------------------------
00981 // Group contains a list of int's representing AtomID's.
00982 // ResRange should be "(segname, resnum) to (segname, resnum)"
00983 // or "(segname, resnum)"
00984 // get the atomID's for each atom of ResRange, and add them to Group.
00985 //-------------------------------------------------------------------
00986 char SegName[21];
00987 int ResNum1, ResNum2, ResNum;
00988 int i, NumAtoms, AtomID, RetVal;
00989
00990 // get start and stop residue numbers
00991 GetSegName(ResRange, SegName);
00992 GetResRange(ResRange, ResNum1, ResNum2);
00993
00994 // for each residue of residue range
00995 for (ResNum=ResNum1; ResNum<=ResNum2; ResNum++) {
00996 // for each atom of residue
00997 NumAtoms = CFE.getNumAtoms(SegName, ResNum);
00998 if (NumAtoms < 1) { ProblemParsing("No Atoms in Residue", ResRange); }
00999 for (i=0; i<NumAtoms; i++) {
01000 // get atomID, register it, add it to Group
01001 AtomID = CFE.getAtomID(SegName, ResNum, i);
01002 if (AtomID < 0) { ProblemParsing("Invalid AtomID", ResRange); }
01003 RetVal = CFE.requestAtom(AtomID);
01004 if (RetVal < 0) { ProblemParsing("Unable to requestAtom", ResRange); }
01005 Group.Add(AtomID);
01006 }
01007 }
01008 }
|
|
|
Definition at line 54 of file FreeEnergyParse.C. References ProblemParsing(). Referenced by ReadInput(). 00054 {
00055 //----------------------------------------------------------------------------
00056 // check for balanced '(' ')' and '{' '}'
00057 //----------------------------------------------------------------------------
00058 int ParenthesesCount = 0;
00059 int CurlyBracketCount = 0;
00060
00061 for (unsigned int i=0; i<strlen(Str); i++) {
00062 if (Str[i] == '(') {ParenthesesCount++;}
00063 if (Str[i] == ')') {ParenthesesCount--;}
00064 if (Str[i] == '{') {CurlyBracketCount++;}
00065 if (Str[i] == '}') {CurlyBracketCount--;}
00066 if ((ParenthesesCount<0) || (CurlyBracketCount<0)) {
00067 ProblemParsing("Mismatched Parentheses", Str+i);
00068 }
00069 }
00070 }
|
|
||||||||||||
|
Definition at line 1134 of file FreeEnergyParse.C. References GetResNum(), ProblemParsing(), ReadAlphaNum(), and ReadWhite(). Referenced by AddAtom(). 01134 {
01135 //-------------------------------------------------------------------
01136 // Str should be (segname, resnum, atomname)
01137 // put atomname into AtomName
01138 // return the number of characters from start-of-Str thru ')'
01139 //-------------------------------------------------------------------
01140 int Count, ResNum;
01141 char* FullString=Str;
01142
01143 Str += GetResNum(Str, ResNum);
01144 Str += ReadWhite(Str);
01145 Count = ReadAlphaNum(Str);
01146 if (Count == 0) {ProblemParsing("Missing Atom Name", Str);}
01147 strncpy(AtomName, Str, Count);
01148 AtomName[Count] = '\0';
01149 Str += Count;
01150 Str += ReadWhite(Str);
01151 if (Str[0] != ')') {ProblemParsing("Missing )", Str);}
01152 Str += 1;
01153 return(Str-FullString);
01154 }
|
|
||||||||||||
|
Definition at line 1114 of file FreeEnergyParse.C. References GetSegName(), ProblemParsing(), ReadDigits(), and ReadWhite(). Referenced by GetAtomName(), and GetResRange(). 01114 {
01115 //-------------------------------------------------------------------
01116 // Str should be (segname, resnum) or (segname, resnum, atomname)
01117 // convert resnum to an int and return it
01118 // return the number of characters from start-of-Str thru resnum
01119 //-------------------------------------------------------------------
01120 int Count;
01121 char SegName[21];
01122 char* FullString=Str;
01123
01124 Str += GetSegName(Str, SegName);
01125 Str += ReadWhite(Str);
01126 ResNum = (int) strtol(Str, NULL, 10);
01127 Count = ReadDigits(Str);
01128 if (Count == 0) {ProblemParsing("Missing Residue Number", Str);}
01129 Str += Count;
01130 return(Str-FullString);
01131 }
|
|
||||||||||||||||
|
Definition at line 1053 of file FreeEnergyParse.C. References GetResNum(), GetSegName(), ProblemParsing(), ReadAlphaNum(), ReadParentheses(), and ReadWhite(). Referenced by AddAtom(), and AddResidues(). 01053 {
01054 //-------------------------------------------------------------------
01055 // ResRange should be "(segname, resnum1) to (segname, resnum2)"
01056 // return ResNum1 & ResNum2
01057 // if "to" is missing, return resnum1 in both ResNum1 & ResNum2
01058 //-------------------------------------------------------------------
01059 char SegName1[21], SegName2[21];
01060
01061 // get start residue number
01062 GetSegName(ResRange, SegName1);
01063 GetResNum(ResRange, ResNum1);
01064
01065 // skip to where "to" should appear
01066 ResRange += ReadParentheses(ResRange);
01067 ResRange += ReadWhite(ResRange);
01068
01069 // if "to" is found
01070 if (strncmp(ResRange, "to", 2) == 0) {
01071 //skip to next residue
01072 ResRange += ReadAlphaNum(ResRange);
01073 ResRange += ReadWhite(ResRange);
01074 // get final residue number
01075 GetSegName(ResRange, SegName2);
01076 GetResNum(ResRange, ResNum2);
01077 // do some checks
01078 if (strcmp(SegName1, SegName2)!=0) {
01079 ProblemParsing("SegNames Differ", ResRange);
01080 }
01081 if (ResNum2 < ResNum1) {
01082 ProblemParsing("Decreasing Residues", ResRange);
01083 }
01084 }
01085
01086 // otherwise, ResNum2 = ResNum1
01087 else {
01088 ResNum2 = ResNum1;
01089 }
01090 }
|
|
||||||||||||||||
|
Definition at line 410 of file FreeEnergyParse.C. References AddAtoms(), ASSERT, Bool_t, Bound_t, kAngle, kAngleBound, kAnglePMF, kDihe, kDiheBound, kDihePMF, kDist, kDistBound, kDistPMF, kPi, kPosi, kPosiBound, kPosiPMF, kUnknownRestr, ProblemParsing(), ReadAValue(), ReadBound(), ReadChar(), ReadNextRestraintType(), ReadWord(), restr_t, ARestraint::SetBound(), ARestraint::SetGroups(), ARestraint::SetIntervalAngle(), ARestraint::SetKf(), ARestraint::SetLowerAngle(), ARestraint::SetRefAngle(), ARestraint::SetRefDist(), ARestraint::SetRefPos(), ARestraint::SetStartAngle(), ARestraint::SetStartDist(), ARestraint::SetStartPos(), ARestraint::SetStopAngle(), ARestraint::SetStopDist(), ARestraint::SetStopPos(), and ARestraint::SetUpperAngle(). Referenced by ReadRestraints(). 00410 {
00411 //----------------------------------------------------------------------------
00412 // read spec's for a restraint, from the input string.
00413 // allocate space for and initialize a restraint object with these specs.
00414 // note: memory is allocated here, and free'd elsewhere.
00415 //
00416 // return a pointer to this object.
00417 // return the number of characters to read past these specs.
00418 // return NumChars=0 for illegal restraint specs.
00419 //----------------------------------------------------------------------------
00420 AGroup Group1, Group2, Group3, Group4;
00421 ARestraint* pRestraint = NULL;
00422 restr_t Restraint;
00423 Bound_t Bound;
00424 int Count;
00425 double Kf;
00426 double D, D0, D1;
00427 double A=0, A0=0, A1=0, A2=0;
00428 AVector Pos, Pos0, Pos1;
00429 char* FullStr;
00430 char* TempStr;
00431
00432 const Bool_t kPrintErrMsg=kTrue; // kNoErrMsg=kFalse;
00433
00434 // save pointer to full string
00435 FullStr = Str;
00436 NumChars = 0;
00437
00438 // get restraint type
00439 Restraint = ReadNextRestraintType(Str, Count);
00440 if (Count == 0) {
00441 ProblemParsing("Can't Read Restraint Type", Str);
00442 return(pRestraint);
00443 }
00444
00445 // skip past restraint type
00446 ASSERT(Restraint != kUnknownRestr);
00447 Str += Count;
00448
00449 // read in appropriate number of atoms or groups-of-atoms for
00450 // this restraint type, put the atoms in Group1 thru Group4
00451 switch (Restraint) {
00452 case kDihe: case kDiheBound: case kDihePMF:
00453 Str += AddAtoms(Group4, Str, CFE);
00454 case kAngle: case kAngleBound: case kAnglePMF:
00455 Str += AddAtoms(Group3, Str, CFE);
00456 case kDist: case kDistBound: case kDistPMF:
00457 Str += AddAtoms(Group2, Str, CFE);
00458 case kPosi: case kPosiBound: case kPosiPMF:
00459 Str += AddAtoms(Group1, Str, CFE);
00460 default: ;
00461 }
00462
00463 // for dihedrals, allow keywords of "barr=", "gap=", OR "kf="
00464 // for other restraints, just allow "kf="
00465 TempStr = Str;
00466 switch(Restraint) {
00467 case kDihe:
00468 case kDiheBound:
00469 case kDihePMF:
00470 Str += ReadWord(Str, "barr");
00471 Str += ReadWord(Str, "gap");
00472 default:
00473 Str += ReadWord(Str, "kf");
00474 // make sure the word "barr", "gap", or "kf" was read
00475 if (Str==TempStr) {
00476 ProblemParsing("Word Missing: barr, gap, or kf", Str);
00477 }
00478 Str += ReadChar(Str, '=');
00479 }
00480 // get the Kf value
00481 Str += ReadAValue(Str, Kf, kPrintErrMsg);
00482
00483 // read the reference positions, distances or angles
00484 switch (Restraint) {
00485 case kPosi:
00486 Str += ReadWord(Str, "ref", kPrintErrMsg);
00487 Str += ReadChar(Str, '=');
00488 Str += ReadChar(Str, '(');
00489 Str += ReadAValue(Str, Pos[0], kPrintErrMsg);
00490 Str += ReadAValue(Str, Pos[1], kPrintErrMsg);
00491 Str += ReadAValue(Str, Pos[2], kPrintErrMsg);
00492 Str += ReadChar(Str, ')');
00493 break;
00494 case kDist:
00495 Str += ReadWord(Str, "ref", kPrintErrMsg);
00496 Str += ReadChar(Str, '=');
00497 Str += ReadAValue(Str, D, kPrintErrMsg);
00498 break;
00499 case kAngle:
00500 Str += ReadWord(Str, "ref", kPrintErrMsg);
00501 Str += ReadChar(Str, '=');
00502 Str += ReadAValue(Str, A, kPrintErrMsg);
00503 break;
00504 case kDihe:
00505 Str += ReadWord(Str, "ref", kPrintErrMsg);
00506 Str += ReadChar(Str, '=');
00507 Str += ReadAValue(Str, A, kPrintErrMsg);
00508 break;
00509 case kPosiBound:
00510 if (ReadBound(Str, Bound) == 0) {ProblemParsing("Missing Bound", Str);}
00511 Str += ReadWord(Str, "low");
00512 Str += ReadWord(Str, "hi");
00513 Str += ReadChar(Str, '=');
00514 Str += ReadChar(Str, '(');
00515 Str += ReadAValue(Str, Pos[0], kPrintErrMsg);
00516 Str += ReadAValue(Str, Pos[1], kPrintErrMsg);
00517 Str += ReadAValue(Str, Pos[2], kPrintErrMsg);
00518 Str += ReadAValue(Str, D, kPrintErrMsg);
00519 Str += ReadChar(Str, ')');
00520 break;
00521 case kDistBound:
00522 if (ReadBound(Str, Bound) == 0) {ProblemParsing("Missing Bound", Str);}
00523 Str += ReadWord(Str, "low");
00524 Str += ReadWord(Str, "hi");
00525 Str += ReadChar(Str, '=');
00526 Str += ReadAValue(Str, D, kPrintErrMsg);
00527 break;
00528 case kAngleBound:
00529 if (ReadBound(Str, Bound) == 0) {ProblemParsing("Missing Bound", Str);}
00530 Str += ReadWord(Str, "low");
00531 Str += ReadWord(Str, "hi");
00532 Str += ReadChar(Str, '=');
00533 Str += ReadAValue(Str, A, kPrintErrMsg);
00534 break;
00535 case kDiheBound:
00536 Str += ReadWord(Str, "low", kPrintErrMsg);
00537 Str += ReadChar(Str, '=');
00538 Str += ReadAValue(Str, A0, kPrintErrMsg);
00539 Str += ReadWord(Str, "hi", kPrintErrMsg);
00540 Str += ReadChar(Str, '=');
00541 Str += ReadAValue(Str, A1, kPrintErrMsg);
00542 Str += ReadWord(Str, "delta", kPrintErrMsg);
00543 Str += ReadChar(Str, '=');
00544 Str += ReadAValue(Str, A2, kPrintErrMsg);
00545 break;
00546 case kPosiPMF:
00547 Str += ReadWord(Str, "low", kPrintErrMsg);
00548 Str += ReadChar(Str, '=');
00549 Str += ReadChar(Str, '(');
00550 Str += ReadAValue(Str, Pos0[0], kPrintErrMsg);
00551 Str += ReadAValue(Str, Pos0[1], kPrintErrMsg);
00552 Str += ReadAValue(Str, Pos0[2], kPrintErrMsg);
00553 Str += ReadChar(Str, ')');
00554 Str += ReadWord(Str, "hi", kPrintErrMsg);
00555 Str += ReadChar(Str, '=');
00556 Str += ReadChar(Str, '(');
00557 Str += ReadAValue(Str, Pos1[0], kPrintErrMsg);
00558 Str += ReadAValue(Str, Pos1[1], kPrintErrMsg);
00559 Str += ReadAValue(Str, Pos1[2], kPrintErrMsg);
00560 Str += ReadChar(Str, ')');
00561 break;
00562 case kDistPMF:
00563 Str += ReadWord(Str, "low", kPrintErrMsg);
00564 Str += ReadChar(Str, '=');
00565 Str += ReadAValue(Str, D0, kPrintErrMsg);
00566 Str += ReadWord(Str, "hi", kPrintErrMsg);
00567 Str += ReadChar(Str, '=');
00568 Str += ReadAValue(Str, D1, kPrintErrMsg);
00569 break;
00570 case kAnglePMF:
00571 Str += ReadWord(Str, "low", kPrintErrMsg);
00572 Str += ReadChar(Str, '=');
00573 Str += ReadAValue(Str, A0, kPrintErrMsg);
00574 Str += ReadWord(Str, "hi", kPrintErrMsg);
00575 Str += ReadChar(Str, '=');
00576 Str += ReadAValue(Str, A1, kPrintErrMsg);
00577 break;
00578 case kDihePMF:
00579 Str += ReadWord(Str, "low", kPrintErrMsg);
00580 Str += ReadChar(Str, '=');
00581 Str += ReadAValue(Str, A0, kPrintErrMsg);
00582 Str += ReadWord(Str, "hi", kPrintErrMsg);
00583 Str += ReadChar(Str, '=');
00584 Str += ReadAValue(Str, A1, kPrintErrMsg);
00585 break;
00586 default: ;
00587 }
00588
00589 // convert degrees to radians
00590 A *= (kPi/180);
00591 A0 *= (kPi/180);
00592 A1 *= (kPi/180);
00593 A2 *= (kPi/180);
00594
00595 // initialize the restraint
00596 switch (Restraint) {
00597 case kPosi:
00598 pRestraint = new AFixedPosRestraint;
00599 pRestraint->SetKf(Kf);
00600 pRestraint->SetGroups(Group1);
00601 pRestraint->SetRefPos(Pos);
00602 break;
00603 case kDist:
00604 pRestraint = new AFixedDistRestraint;
00605 pRestraint->SetKf(Kf);
00606 pRestraint->SetGroups(Group2, Group1);
00607 pRestraint->SetRefDist(D);
00608 break;
00609 case kAngle:
00610 pRestraint = new AFixedAngleRestraint;
00611 pRestraint->SetKf(Kf);
00612 pRestraint->SetGroups(Group3, Group2, Group1);
00613 pRestraint->SetRefAngle(A);
00614 break;
00615 case kDihe:
00616 pRestraint = new AFixedDiheRestraint;
00617 pRestraint->SetKf(Kf);
00618 pRestraint->SetGroups(Group4, Group3, Group2, Group1);
00619 pRestraint->SetRefAngle(A);
00620 break;
00621 case kPosiBound:
00622 pRestraint = new ABoundPosRestraint;
00623 pRestraint->SetKf(Kf);
00624 pRestraint->SetGroups(Group1);
00625 pRestraint->SetRefPos(Pos);
00626 pRestraint->SetRefDist(D);
00627 pRestraint->SetBound(Bound);
00628 break;
00629 case kDistBound:
00630 pRestraint = new ABoundDistRestraint;
00631 pRestraint->SetKf(Kf);
00632 pRestraint->SetGroups(Group2, Group1);
00633 pRestraint->SetRefDist(D);
00634 pRestraint->SetBound(Bound);
00635 break;
00636 case kAngleBound:
00637 pRestraint = new ABoundAngleRestraint;
00638 pRestraint->SetKf(Kf);
00639 pRestraint->SetGroups(Group3, Group2, Group1);
00640 pRestraint->SetRefAngle(A);
00641 pRestraint->SetBound(Bound);
00642 break;
00643 case kDiheBound:
00644 pRestraint = new ABoundDiheRestraint;
00645 pRestraint->SetKf(Kf);
00646 pRestraint->SetGroups(Group4, Group3, Group2, Group1);
00647 pRestraint->SetLowerAngle(A0);
00648 pRestraint->SetUpperAngle(A1);
00649 pRestraint->SetIntervalAngle(A2);
00650 break;
00651 case kPosiPMF:
00652 pRestraint = new AForcingPosRestraint;
00653 pRestraint->SetKf(Kf);
00654 pRestraint->SetGroups(Group1);
00655 pRestraint->SetStartPos(Pos0);
00656 pRestraint->SetStopPos(Pos1);
00657 break;
00658 case kDistPMF:
00659 pRestraint = new AForcingDistRestraint;
00660 pRestraint->SetKf(Kf);
00661 pRestraint->SetGroups(Group2, Group1);
00662 pRestraint->SetStartDist(D0);
00663 pRestraint->SetStopDist(D1);
00664 break;
00665 case kAnglePMF:
00666 pRestraint = new AForcingAngleRestraint;
00667 pRestraint->SetKf(Kf);
00668 pRestraint->SetGroups(Group3, Group2, Group1);
00669 pRestraint->SetStartAngle(A0);
00670 pRestraint->SetStopAngle(A1);
00671 break;
00672 case kDihePMF:
00673 pRestraint = new AForcingDiheRestraint;
00674 pRestraint->SetKf(Kf);
00675 pRestraint->SetGroups(Group4, Group3, Group2, Group1);
00676 pRestraint->SetStartAngle(A0);
00677 pRestraint->SetStopAngle(A1);
00678 break;
00679 default: ;
00680 }
00681 // calc number of chars to read restraint specs
00682 NumChars = Str-FullStr;
00683 return(pRestraint);
00684 }
|
|
||||||||||||
|
Definition at line 1093 of file FreeEnergyParse.C. References ProblemParsing(), ReadAlphaNum(), and ReadWhite(). Referenced by AddAtom(), AddResidues(), GetResNum(), and GetResRange(). 01093 {
01094 //-------------------------------------------------------------------
01095 // Str should be (segname, resnum) or (segname, resnum, atomname)
01096 // put segname into SegName
01097 // return the number of characters from start-of-Str thru segname
01098 //-------------------------------------------------------------------
01099 int Count;
01100 char* FullString=Str;
01101
01102 if (Str[0] != '(') {ProblemParsing("Missing (", Str);}
01103 Str += 1;
01104 Str += ReadWhite(Str);
01105 Count = ReadAlphaNum(Str);
01106 if (Count == 0) {ProblemParsing("Missing Segment Name", Str);}
01107 strncpy(SegName, Str, Count);
01108 SegName[Count] = '\0';
01109 Str += Count;
01110 return(Str-FullString);
01111 }
|
|
||||||||||||
|
Definition at line 261 of file FreeEnergyParse.C. References ASSERT, k_fs, k_ns, k_ps, and kFalse. Referenced by ReadPmfBlock(). 00261 {
00262 //----------------------------------------------------------------------------
00263 // convert (Val Units) to fs, where Units is either fs, ps, or ns
00264 //----------------------------------------------------------------------------
00265 switch (Units) {
00266 case k_fs: return(Val);
00267 case k_ps: return(Val*1000);
00268 case k_ns: return(Val*1000000);
00269 default:
00270 ASSERT(kFalse);
00271 return(Val);
00272 }
00273 }
|
|
|
Definition at line 1366 of file FreeEnergyParse.C. References IsAtomNameList(), ReadAlphaNum(), ReadDigits(), and ReadWhite(). Referenced by IsResidue(), and IsResidueRange(). 01366 {
01367 //------------------------------------------------------------------------
01368 // see if Str starts with "(segname, resnum)"
01369 // return: the number of characters, including white space.
01370 // 0, if Str does not start with "(segname, resnum)"
01371 //------------------------------------------------------------------------
01372 int Count;
01373 char* FullString=Str;
01374
01375 // if char following the parentheses is ':', this isn't a residue
01376 if (IsAtomNameList(Str)) {
01377 return(0);
01378 }
01379 // Str must contain the following in sequence to be a legit residue
01380 // <ws> = optional white-space
01381 // '(', <ws>, alphanumeric, <ws>, numeric, <ws>, ')'
01382 if (Str[0] == '(') {
01383 Str += 1;
01384 Str += ReadWhite(Str);
01385 Count = ReadAlphaNum(Str);
01386 if (Count) {
01387 Str += Count;
01388 Str += ReadWhite(Str);
01389 Count = ReadDigits(Str);
01390 if (Count) {
01391 Str += Count;
01392 Str += ReadWhite(Str);
01393 if (Str[0] == ')') {
01394 Str += 1;
01395 return(Str-FullString);
01396 }
01397 }
01398 }
01399 }
01400 return(0);
01401 }
|
|
|
Definition at line 1273 of file FreeEnergyParse.C. References IsAtomNameList(), ReadAlphaNum(), ReadDigits(), and ReadWhite(). Referenced by ReadNextItem(). 01273 {
01274 //------------------------------------------------------------------------
01275 // see if Str starts with "(segname, resnum, atomname)"
01276 // return: the number of characters, including white space.
01277 // 0, if Str does not start with "(segname, resnum, atomname)"
01278 //------------------------------------------------------------------------
01279 int Count;
01280 char* FullString=Str;
01281
01282 // if char following the parentheses is ':', this isn't an atom
01283 if (IsAtomNameList(Str)) {
01284 return(0);
01285 }
01286 // Str must contain the following in sequence to be a legit atom
01287 // <ws> = optional white-space
01288 // '(', <ws>, alphanumeric, <ws>, numeric, <ws>, alphanumeric, <ws>, ')'
01289 if (Str[0] == '(') {
01290 Str += 1;
01291 Str += ReadWhite(Str);
01292 Count = ReadAlphaNum(Str);
01293 if (Count) {
01294 Str += Count;
01295 Str += ReadWhite(Str);
01296 Count = ReadDigits(Str);
01297 if (Count) {
01298 Str += Count;
01299 Str += ReadWhite(Str);
01300 Count = ReadAlphaNum(Str);
01301 if (Count) {
01302 Str += Count;
01303 Str += ReadWhite(Str);
01304 if (Str[0] == ')') {
01305 Str += 1;
01306 return(Str-FullString);
01307 }
01308 }
01309 }
01310 }
01311 }
01312 return(0);
01313 }
|
|
|
Definition at line 1227 of file FreeEnergyParse.C. References ReadAlphaNum(), and ReadWhite(). Referenced by ReadNextItem(). 01227 {
01228 //-------------------------------------------------------------------
01229 // see if Str starts with "atomname:"
01230 // return: the number of characters, including white space.
01231 // 0, if Str does not start with "atomname:"
01232 //-------------------------------------------------------------------
01233 int Count;
01234 char* FullString=Str;
01235
01236 Count = ReadAlphaNum(Str);
01237 if (Count) {
01238 Str += Count;
01239 Str += ReadWhite(Str);
01240 if (Str[0] == ':') {
01241 Str += 1;
01242 return(Str-FullString);
01243 }
01244 }
01245 return(0);
01246 }
|
|
|
Definition at line 1249 of file FreeEnergyParse.C. References ReadParentheses(), and ReadWhite(). Referenced by IsAResidue(), IsAtom(), and ReadNextItem(). 01249 {
01250 //------------------------------------------------------------------------
01251 // see if Str starts with "(atomname, atomname, ...):"
01252 // return: the number of characters, including white space.
01253 // 0, if Str does not start with "(atomname, atomname, ...):"
01254 //------------------------------------------------------------------------
01255 int Count;
01256 char* FullString=Str;
01257
01258 // Str will be considered an atom-name-list if it contains the following:
01259 // '(', anything, ')', ':'
01260 Count = ReadParentheses(Str);
01261 if (Count > 0) {
01262 Str += Count;
01263 Str += ReadWhite(Str);
01264 if (Str[0] == ':') {
01265 Str += 1;
01266 return(Str-FullString);
01267 }
01268 }
01269 return(0);
01270 }
|
|
|
Definition at line 1214 of file FreeEnergyParse.C. Referenced by ReadNextItem(). 01214 {
01215 //-------------------------------------------------------------------
01216 // see if Str starts with "}"
01217 // return: the number of characters, including white space.
01218 // 0, if Str does not start with "}"
01219 //-------------------------------------------------------------------
01220 if (Str[0] == '}') {
01221 return(1);
01222 }
01223 return(0);
01224 }
|
|
|
Definition at line 1346 of file FreeEnergyParse.C. References IsAResidue(), and IsResidueRange(). Referenced by ReadNextItem(). 01346 {
01347 //------------------------------------------------------------------------
01348 // see if Str starts with "(segname, resnum)"
01349 // but not "(segname, resnum) to (segname, resnum)"
01350 //------------------------------------------------------------------------
01351 int Count;
01352
01353 Count = IsAResidue(Str);
01354 if (Count) {
01355 if (IsResidueRange(Str)) {
01356 return(0);
01357 }
01358 else {
01359 return(Count);
01360 }
01361 }
01362 return(0);
01363 }
|
|
|
Definition at line 1316 of file FreeEnergyParse.C. References IsAResidue(), and ReadWhite(). Referenced by IsResidue(), and ReadNextItem(). 01316 {
01317 //------------------------------------------------------------------------
01318 // see if Str starts with "(segname, resnum) to (segname, resnum)"
01319 // return: the number of characters, including white space.
01320 // 0, if Str does not start with "(sn, rn) to (sn, rn)"
01321 //------------------------------------------------------------------------
01322 int Count;
01323 char* FullString=Str;
01324
01325 // Str must contain the following in sequence to be a legit res range
01326 // <ws> = optional white-space
01327 // residue, <ws>, "to", <ws>, residue
01328 Count = IsAResidue(Str);
01329 if (Count) {
01330 Str += Count;
01331 Str += ReadWhite(Str);
01332 if (strncmp(Str, "to", 2) == 0) {
01333 Str += 2;
01334 Str += ReadWhite(Str);
01335 Count = IsAResidue(Str);
01336 if (Count) {
01337 Str += Count;
01338 return(Str-FullString);
01339 }
01340 }
01341 }
01342 return(0);
01343 }
|
|
|
Definition at line 1194 of file FreeEnergyParse.C. References ReadWhite(). Referenced by ReadNextItem(). 01194 {
01195 //-------------------------------------------------------------------
01196 // see if Str starts with "group {"
01197 // return: the number of characters, including white space.
01198 // 0, if Str does not start with "group {"
01199 //-------------------------------------------------------------------
01200 char* FullString=Str;
01201
01202 if (strncmp(Str, "group", 5) == 0) {
01203 Str += 5;
01204 Str += ReadWhite(Str);
01205 if (Str[0] == '{') {
01206 Str += 1;
01207 return(Str-FullString);
01208 }
01209 }
01210 return(0);
01211 }
|
|
||||||||||||||||
|
Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved. Definition at line 31 of file FreeEnergyParse.C. References iout, and NAMD_die(). Referenced by AddAtom(), AddAtoms(), AddResidues(), CheckParentheses(), GetAtomName(), GetResNum(), GetResRange(), GetRestraint(), GetSegName(), ReadAValue(), ReadChar(), ReadInput(), ReadPmfBlock(), and ReadWord(). 00031 {
00032 //----------------------------------------------------------------------------
00033 // print this message if there's a problem parsing
00034 //----------------------------------------------------------------------------
00035 iout << "FreeEnergy: " << std::endl << endi;
00036 iout << "FreeEnergy: ";
00037 iout << "Problem parsing input parameters" << std::endl << endi;
00038 iout << "FreeEnergy: ";
00039 if (Terminate) {
00040 iout << " Error: " << Message << std::endl << endi;
00041 }
00042 else {
00043 iout << " Warning: " << Message << std::endl << endi;
00044 }
00045 iout << "FreeEnergy: ";
00046 iout << " Read Until: " << Str << std::endl << endi;
00047 iout << "FreeEnergy: " << std::endl << endi;
00048 if (Terminate) {
00049 NAMD_die("FreeEnergy: Fatal Parsing Error");
00050 }
00051 }
|
|
|
Definition at line 1424 of file FreeEnergyParse.C. Referenced by ReadNextPmfSpec(), ReadTaskType(), ReadTimeUnits(), and ReadWord(). 01424 {
01425 //-------------------------------------------------------------------
01426 // determine the leading number of alphabetic characters in Str.
01427 //-------------------------------------------------------------------
01428 int i=0;
01429
01430 while (1) {
01431 if (isalpha(Str[i]) || Str[i]=='\'' || Str[i]=='\"' || Str[i] == '*') {
01432 i++;
01433 }
01434 else {
01435 break;
01436 }
01437 }
01438 return(i);
01439 }
|
|
|
Definition at line 1442 of file FreeEnergyParse.C. Referenced by AddAtomsInResidues(), GetAtomName(), GetResRange(), GetSegName(), IsAResidue(), IsAtom(), IsAtomName(), and ReadNextRestraintType(). 01442 {
01443 //-------------------------------------------------------------------
01444 // determine the leading number of alphanumeric characters in Str.
01445 //-------------------------------------------------------------------
01446 int i=0;
01447
01448 while (1) {
01449 if (isalnum(Str[i]) || Str[i]=='\'' || Str[i]=='\"' || Str[i] == '*') {
01450 i++;
01451 }
01452 else {
01453 break;
01454 }
01455 }
01456 return(i);
01457 }
|
|
||||||||||||||||
|
Definition at line 712 of file FreeEnergyParse.C. References ProblemParsing(), and ReadWhite(). Referenced by GetRestraint(), and ReadPmfBlock(). 00712 {
00713 //----------------------------------------------------------------------------
00714 // Str should start with a floating point number. convert it to a double.
00715 // also, return the number of chars to read past the value + white-space
00716 // return NumChars = 0 if Str does not start with a valid fp number.
00717 // Print an error message if ErrMsg is kTrue, and no value is read.
00718 //----------------------------------------------------------------------------
00719 int NumChars;
00720 char* NewStr;
00721
00722 // read f.p. number and trailing white-space
00723 Value = strtod(Str, &NewStr);
00724 if (NewStr != Str) {
00725 NewStr += ReadWhite(NewStr);
00726 }
00727 NumChars = NewStr - Str;
00728
00729 // if no number was read, and ErrMsg is kTrue, print a message
00730 if ((NumChars==0) && (ErrMsg)) {
00731 ProblemParsing("Floating Point Number Expected", Str);
00732 }
00733
00734 return(NumChars);
00735 }
|
|
||||||||||||
|
Definition at line 687 of file FreeEnergyParse.C. References ReadWord(). Referenced by GetRestraint(). 00687 {
00688 //----------------------------------------------------------------------------
00689 // Str should start with "low" or "hi". determine which it is and
00690 // count the number of characters to read past this word + white-space.
00691 // return NumChars=0 if Str does not start with "low" or "hi"
00692 //----------------------------------------------------------------------------
00693 int Count;
00694
00695 Bound = kUnknownBound;
00696 Count = ReadWord(Str, "low");
00697 if (Count) {
00698 Bound=kLower;
00699 return(Count);
00700 }
00701
00702 Count = ReadWord(Str, "hi");
00703 if (Count) {
00704 Bound=kUpper;
00705 return(Count);
00706 }
00707
00708 return(Count); // Count will be 0 if "low" or "hi" wasn't found
00709 }
|
|