35 iout <<
"FreeEnergy: " << std::endl <<
endi;
36 iout <<
"FreeEnergy: ";
37 iout <<
"Problem parsing input parameters" << std::endl <<
endi;
38 iout <<
"FreeEnergy: ";
40 iout <<
" Error: " << Message << std::endl <<
endi;
43 iout <<
" Warning: " << Message << std::endl <<
endi;
45 iout <<
"FreeEnergy: ";
46 iout <<
" Read Until: " << Str << std::endl <<
endi;
47 iout <<
"FreeEnergy: " << std::endl <<
endi;
49 NAMD_die(
"FreeEnergy: Fatal Parsing Error");
58 int ParenthesesCount = 0;
59 int CurlyBracketCount = 0;
61 for (
unsigned int i=0; i<strlen(Str); i++) {
62 if (Str[i] ==
'(') {ParenthesesCount++;}
63 if (Str[i] ==
')') {ParenthesesCount--;}
64 if (Str[i] ==
'{') {CurlyBracketCount++;}
65 if (Str[i] ==
'}') {CurlyBracketCount--;}
66 if ((ParenthesesCount<0) || (CurlyBracketCount<0)) {
89 while (OldStr != Str) {
100 OldPmfBlock = PmfBlock;
101 PmfBlock.
Init(OldPmfBlock);
105 if (strlen(Str) > 0) {
126 int Count, Count1, Count2;
128 char* FullString=Str;
136 double Lambda=-1, LambdaT=-1, Time;
145 Count = Count1 + Count2;
167 if (Str == TempStr) {
175 Time =
GetTime(Time, TimeUnits);
182 Str +=
ReadAValue(Str, LambdaT, kPrintErrMsg);
187 Time =
GetTime(Time, TimeUnits);
196 Time =
GetTime(Time, TimeUnits);
202 Time =
GetTime(Time, TimeUnits);
207 NumRepeats = (int)Dummy;
216 if (Count!=0) {Finished=
kTrue;}
257 return(Str-FullString);
266 case k_fs:
return(Val);
267 case k_ps:
return(Val*1000);
268 case k_ns:
return(Val*1000000);
287 char* FullString=Str;
290 if (strncmp(Str,
"fs",2)==0) {Units=
k_fs; FoundIt=
kTrue;}
291 if (strncmp(Str,
"ps",2)==0) {Units=
k_ps; FoundIt=
kTrue;}
292 if (strncmp(Str,
"ns",2)==0) {Units=
k_ns; FoundIt=
kTrue;}
299 Units = DefaultUnits;
301 return(Str-FullString);
315 char* FullString=Str;
318 if (strncmp(Str,
"up",2)==0) {Task=
kUp;
goto GotIt;}
319 if (strncmp(Str,
"down",4)==0) {Task=
kDown;
goto GotIt;}
320 if (strncmp(Str,
"stop",4)==0) {Task=
kStop;
goto GotIt;}
321 if (strncmp(Str,
"grow",4)==0) {Task=
kGrow;
goto GotIt;}
322 if (strncmp(Str,
"fade",4)==0) {Task=
kFade;
goto GotIt;}
323 if (strncmp(Str,
"nogrow",6)==0) {Task=
kNoGrow;
goto GotIt;}
324 if (strncmp(Str,
"stepup",6)==0) {Task=
kStepUp;
goto GotIt;}
325 if (strncmp(Str,
"stepdown",8)==0) {Task=
kStepDown;
goto GotIt;}
326 if (strncmp(Str,
"stepgrow",8)==0) {Task=
kStepGrow;
goto GotIt;}
327 if (strncmp(Str,
"stepfade",8)==0) {Task=
kStepFade;
goto GotIt;}
333 return(Str-FullString);
347 char* FullString=Str;
350 if (strncmp(Str,
"task",4)==0) {PmfSpec=
kTask;
goto GotIt;}
351 if (strncmp(Str,
"time",4)==0) {PmfSpec=
kTime;
goto GotIt;}
353 if (strncmp(Str,
"lambdat",7)==0) {PmfSpec=
kLambdaT;
goto GotIt;}
354 if (strncmp(Str,
"lambda",6)==0) {PmfSpec=
kLambda;
goto GotIt;}
355 if (strncmp(Str,
"print",5)==0) {PmfSpec=
kPrint;
goto GotIt;}
356 if (strncmp(Str,
"nopr",4)==0) {PmfSpec=
kNoPrint;
goto GotIt;}
357 if (strncmp(Str,
"equil",5)==0) {PmfSpec=
kEquilTime;
goto GotIt;}
358 if (strncmp(Str,
"accum",5)==0) {PmfSpec=
kAccumTime;
goto GotIt;}
359 if (strncmp(Str,
"numstep",7)==0) {PmfSpec=
kNumRepeats;
goto GotIt;}
365 return(Str-FullString);
380 char* FullString=Str;
395 if (Count==0) {Finished=
kTrue;}
397 AllRestraints.
Add(pRestraint);
401 if (Count!=0) {Finished=
kTrue;}
406 return(Str-FullString);
420 AGroup Group1, Group2, Group3, Group4;
427 double A=0, A0=0, A1=0, A2=0;
486 Str +=
ReadWord(Str,
"ref", kPrintErrMsg);
495 Str +=
ReadWord(Str,
"ref", kPrintErrMsg);
500 Str +=
ReadWord(Str,
"ref", kPrintErrMsg);
505 Str +=
ReadWord(Str,
"ref", kPrintErrMsg);
536 Str +=
ReadWord(Str,
"low", kPrintErrMsg);
539 Str +=
ReadWord(Str,
"hi", kPrintErrMsg);
542 Str +=
ReadWord(Str,
"delta", kPrintErrMsg);
547 Str +=
ReadWord(Str,
"low", kPrintErrMsg);
550 Str +=
ReadAValue(Str, Pos0[0], kPrintErrMsg);
551 Str +=
ReadAValue(Str, Pos0[1], kPrintErrMsg);
552 Str +=
ReadAValue(Str, Pos0[2], kPrintErrMsg);
554 Str +=
ReadWord(Str,
"hi", kPrintErrMsg);
557 Str +=
ReadAValue(Str, Pos1[0], kPrintErrMsg);
558 Str +=
ReadAValue(Str, Pos1[1], kPrintErrMsg);
559 Str +=
ReadAValue(Str, Pos1[2], kPrintErrMsg);
563 Str +=
ReadWord(Str,
"low", kPrintErrMsg);
566 Str +=
ReadWord(Str,
"hi", kPrintErrMsg);
571 Str +=
ReadWord(Str,
"low", kPrintErrMsg);
574 Str +=
ReadWord(Str,
"hi", kPrintErrMsg);
579 Str +=
ReadWord(Str,
"low", kPrintErrMsg);
582 Str +=
ReadWord(Str,
"hi", kPrintErrMsg);
599 pRestraint->
SetKf(Kf);
605 pRestraint->
SetKf(Kf);
611 pRestraint->
SetKf(Kf);
612 pRestraint->
SetGroups(Group3, Group2, Group1);
617 pRestraint->
SetKf(Kf);
618 pRestraint->
SetGroups(Group4, Group3, Group2, Group1);
623 pRestraint->
SetKf(Kf);
631 pRestraint->
SetKf(Kf);
638 pRestraint->
SetKf(Kf);
639 pRestraint->
SetGroups(Group3, Group2, Group1);
645 pRestraint->
SetKf(Kf);
646 pRestraint->
SetGroups(Group4, Group3, Group2, Group1);
653 pRestraint->
SetKf(Kf);
660 pRestraint->
SetKf(Kf);
667 pRestraint->
SetKf(Kf);
668 pRestraint->
SetGroups(Group3, Group2, Group1);
674 pRestraint->
SetKf(Kf);
675 pRestraint->
SetGroups(Group4, Group3, Group2, Group1);
682 NumChars = Str-FullStr;
723 Value = strtod(Str, &NewStr);
727 NumChars = NewStr - Str;
730 if ((NumChars==0) && (ErrMsg)) {
746 char* FullString=Str;
750 strcpy(Message,
"Character Missing: ");
753 if (Str[0] == Char) {
757 NumChars = Str - FullString;
760 if ((NumChars==0) && (ErrMsg)) {
762 Message[strlen(Message)-1] = Char;
784 const char* FullString=Str;
785 int NumChars, StrLen;
789 strcpy(Message,
"Word Missing: ");
791 StrLen = strlen(Word);
792 if (strncmp(Str, Word, StrLen) == 0) {
797 NumChars = Str - FullString;
800 if ((NumChars==0) && (ErrMsg)) {
801 strcat(Message, Word);
826 char* FullString=Str;
829 if (strncmp(Str,
"pos", 3)==0) {RestraintType=
kPosi;
goto GotIt;}
830 if (strncmp(Str,
"dist",4)==0) {RestraintType=
kDist;
goto GotIt;}
831 if (strncmp(Str,
"angl",4)==0) {RestraintType=
kAngle;
goto GotIt;}
832 if (strncmp(Str,
"dihe",4)==0) {RestraintType=
kDihe;
goto GotIt;}
834 return(RestraintType);
843 if (strncmp(Str,
"bound",5)==0) {
844 switch (RestraintType) {
856 if (strncmp(Str,
"pmf",3)==0) {
857 switch (RestraintType) {
870 NumChars = Str-FullString;
871 return(RestraintType);
930 RetNumChars += NumChars;
946 int Count, ArrayIndex, i;
947 char AtomNamesArray[21][30];
950 if (AtomNames[0] ==
'(') {
957 while ( (AtomNames[0]!=
':') && (AtomNames[0]!=
')') ) {
959 strncpy(AtomNamesArray[ArrayIndex], AtomNames, Count);
960 AtomNamesArray[ArrayIndex][Count] =
'\0';
968 for (i=0; i<ArrayIndex; i++) {
969 if (strcmp(AtomNamesArray[i],
"all") == 0) {
973 AddAtom(Group, ResRange, AtomNamesArray[i], CFE);
987 int ResNum1, ResNum2, ResNum;
988 int i, NumAtoms,
AtomID, RetVal;
995 for (ResNum=ResNum1; ResNum<=ResNum2; ResNum++) {
998 if (NumAtoms < 1) {
ProblemParsing(
"No Atoms in Residue", ResRange); }
999 for (i=0; i<NumAtoms; i++) {
1001 AtomID = CFE.
getAtomID(SegName, ResNum, i);
1004 if (RetVal < 0) {
ProblemParsing(
"Unable to requestAtom", ResRange); }
1020 AddAtom(Group, Atom, AtomName, CFE);
1034 int ResNum, ResNum1, ResNum2,
AtomID, RetVal;
1043 for (ResNum=ResNum1; ResNum<=ResNum2; ResNum++) {
1044 AtomID = CFE.
getAtomID(SegName, ResNum, AtomName);
1047 if (RetVal < 0) {
ProblemParsing(
"Unable to requestAtom", ResRange); }
1059 char SegName1[21], SegName2[21];
1070 if (strncmp(ResRange,
"to", 2) == 0) {
1078 if (strcmp(SegName1, SegName2)!=0) {
1081 if (ResNum2 < ResNum1) {
1100 char* FullString=Str;
1107 strncpy(SegName, Str, Count);
1108 SegName[Count] =
'\0';
1110 return(Str-FullString);
1122 char* FullString=Str;
1126 ResNum = (int) strtol(Str, NULL, 10);
1130 return(Str-FullString);
1141 char* FullString=Str;
1147 strncpy(AtomName, Str, Count);
1148 AtomName[Count] =
'\0';
1153 return(Str-FullString);
1181 Num=
IsAtom(Str);
if (Num) {RetVal=
kAtom;
goto Found;}
1200 char* FullString=Str;
1202 if (strncmp(Str,
"group", 5) == 0) {
1205 if (Str[0] ==
'{') {
1207 return(Str-FullString);
1220 if (Str[0] ==
'}') {
1234 char* FullString=Str;
1240 if (Str[0] ==
':') {
1242 return(Str-FullString);
1256 char* FullString=Str;
1264 if (Str[0] ==
':') {
1266 return(Str-FullString);
1280 char* FullString=Str;
1289 if (Str[0] ==
'(') {
1304 if (Str[0] ==
')') {
1306 return(Str-FullString);
1323 char* FullString=Str;
1332 if (strncmp(Str,
"to", 2) == 0) {
1338 return(Str-FullString);
1373 char* FullString=Str;
1382 if (Str[0] ==
'(') {
1393 if (Str[0] ==
')') {
1395 return(Str-FullString);
1413 if (Str[0] !=
'(') {
1416 Str2 = strchr(Str,
')');
1420 return((Str2-Str)+1);
1431 if (isalpha(Str[i]) || Str[i]==
'\'' || Str[i]==
'\"' || Str[i] ==
'*') {
1449 if (isalnum(Str[i]) || Str[i]==
'\'' || Str[i]==
'\"' || Str[i] ==
'*') {
1467 if (isdigit(Str[i])) {
1517 for (
unsigned int i=0; i<strlen(Str); i++) {
1518 Str[i] = (char)tolower(Str[i]);
void SetNumEquilSteps(int Steps)
int IsAResidue(char *Str)
int Add(ALambdaControl &PmfBlock)
int GetAtomName(char *Str, char *AtomName)
restr_t ReadNextRestraintType(char *Str, int &NumChars)
int getAtomID(const char *segid, int resid, const char *aname)
int IsAtomNameList(char *Str)
int requestAtom(int atomid)
int ReadAlphaNum(const char *Str)
virtual void SetRefPos(AVector)
int ReadAlpha(const char *Str)
int ReadWhite(const char *Str)
void SetNumSteps(int Steps)
void SetLambdaRef(double LambdaRef)
virtual void SetStopAngle(double)
virtual void SetBound(Bound_t)
std::ostream & endi(std::ostream &s)
void SetTask(feptask_t Task)
int ReadAValue(char *Str, double &Value, Bool_t ErrMsg)
virtual void SetIntervalAngle(double)
int ReadParentheses(const char *Str)
int IsResidueRange(char *Str)
void AddResidues(AGroup &Group, char *ResRange, GlobalMasterFreeEnergy &CFE)
void SetLambdaKf(double LambdaKf)
int AddAtoms(AGroup &Group, char *Str, GlobalMasterFreeEnergy &CFE)
void Add(ARestraint *pRestraint)
virtual void SetStopPos(AVector)
virtual void SetRefAngle(double)
virtual void SetStartDist(double)
void ProblemParsing(const char *Message, const char *Str, Bool_t Terminate)
int ReadTimeUnits(char *Str, TimeUnits_t &Units, TimeUnits_t DefaultUnits)
void AddAtom(AGroup &Group, char *Atom, GlobalMasterFreeEnergy &CFE)
double GetTime(double Val, TimeUnits_t Units)
item_t ReadNextItem(char *Str, int &NumChars)
void ReadInput(char *Str, ARestraintManager &RMgr, ALambdaManager &LMgr, GlobalMasterFreeEnergy &CFE, double dT)
int ReadChar(char *Str, char Char, Bool_t ErrMsg)
virtual void SetRefDist(double)
int ReadTaskType(char *Str, feptask_t &Task)
int IsAtomName(char *Str)
void SetNumPrintSteps(int Steps)
virtual void SetStopDist(double)
void SetNumRepeats(int Repeats)
void NAMD_die(const char *err_msg)
virtual void SetStartPos(AVector)
void SetGroups(AGroup &Group1)
int GetResNum(char *Str, int &ResNum)
void CheckParentheses(const char *Str)
void SetNumAccumSteps(int Steps)
int ReadPmfBlock(char *Str, ALambdaControl &PmfBlock, double dT)
int IsStartGroup(char *Str)
void Init(ALambdaControl &PriorBlock)
void AddAtomsInResidues(AGroup &Group, char *AtomNames, char *ResRange, GlobalMasterFreeEnergy &CFE)
int ReadDigits(const char *Str)
virtual void SetStartAngle(double)
int ReadWord(const char *Str, const char *Word, Bool_t ErrMsg)
virtual void SetLowerAngle(double)
virtual void SetUpperAngle(double)
int GetSegName(char *Str, char *SegName)
int ReadBound(char *Str, Bound_t &Bound)
ARestraint * GetRestraint(char *Str, int &NumChars, GlobalMasterFreeEnergy &CFE)
void GetResRange(char *ResRange, int &ResNum1, int &ResNum2)
int getNumAtoms(const char *segid, int resid)
int ReadNextPmfSpec(char *Str, pmf_t &PmfSpec)
int IsEndGroup(char *Str)
int ReadRestraints(char *Str, ARestraintManager &AllRestraints, GlobalMasterFreeEnergy &CFE)