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;
   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++) {
  1004       if (RetVal < 0) { 
ProblemParsing(
"Unable to requestAtom", ResRange); }
  1034   int   ResNum, ResNum1, ResNum2, 
AtomID, RetVal;
  1043   for (ResNum=ResNum1; ResNum<=ResNum2; ResNum++) {
  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)