diff -ur amber12.orig/AmberTools/src/leap/src/leap/parmSet.c amber12.new/AmberTools/src/leap/src/leap/parmSet.c --- amber12.orig/AmberTools/src/leap/src/leap/parmSet.c 2013-04-12 15:04:19.000000000 +0300 +++ amber12.new/AmberTools/src/leap/src/leap/parmSet.c 2013-05-09 10:47:45.330552552 +0300 @@ -2199,6 +2199,29 @@ strcpy(sDesc, tmPCur->tpTorsion.sDesc); } +// Pass back also sOrder. +void +ParmSetTORSIONTerm2( TORSION tTorsion, int iTorsionIndex, int *iPParmSetIndex, + char *cPType1, char *cPType2, char *cPType3, char *cPType4, + int *iPN, double *dPKp, double *dPP0, double *dPScEE, + double *dPScNB, char *sDesc, char *sOrder ) +{ +TORSION_MATCHt *tmPCur; + + tmPCur = PVAI( tTorsion, TORSION_MATCHt, iTorsionIndex ); + *iPParmSetIndex = tmPCur->iIndex; + strcpy( cPType1, tmPCur->tpTorsion.sType1 ); + strcpy( cPType2, tmPCur->tpTorsion.sType2 ); + strcpy( cPType3, tmPCur->tpTorsion.sType3 ); + strcpy( cPType4, tmPCur->tpTorsion.sType4 ); + *iPN = tmPCur->tpTorsion.iN; + *dPKp = tmPCur->tpTorsion.dKp; + *dPP0 = tmPCur->tpTorsion.dP0; + *dPScEE = tmPCur->tpTorsion.dScEE; + *dPScNB = tmPCur->tpTorsion.dScNB; + strcpy(sOrder, tmPCur->tpTorsion.sOrder); + strcpy(sDesc, tmPCur->tpTorsion.sDesc); +} /* diff -ur amber12.orig/AmberTools/src/leap/src/leap/unitio.c amber12.new/AmberTools/src/leap/src/leap/unitio.c --- amber12.orig/AmberTools/src/leap/src/leap/unitio.c 2013-04-12 15:08:56.000000000 +0300 +++ amber12.new/AmberTools/src/leap/src/leap/unitio.c 2013-05-09 10:40:51.502892220 +0300 @@ -2080,16 +2080,17 @@ iPertN = MAX_N; bCalc14 = TRUE; bCalcPert14 = TRUE; + STRING sOrder = "0123"; /* * get 1st term */ if (iParmSetTORSIONTermCount(tTorsion) != 0) { - ParmSetTORSIONTerm(tTorsion, iTerm, + ParmSetTORSIONTerm2(tTorsion, iTerm, &iIndex, sAtom1, sAtom2, sAtom3, sAtom4, &iN, &dKp, &dP0, &dScEE, &dScNB, - sDesc); + sDesc, &sOrder); MESSAGE(("First non-perturbed multiplicity: %d\n", iN)); } else { if (bProper) { @@ -2208,11 +2209,17 @@ dScEE, dScNB, sDesc); /* else if ( !GDefaults.iCharmm ) ???---should I do this???? */ - else + else { + char* atoms[4]; + atoms[sOrder[0]-'0'] = sAtom1; + atoms[sOrder[1]-'0'] = sAtom2; + atoms[sOrder[2]-'0'] = sAtom3; + atoms[sOrder[3]-'0'] = sAtom4; iIndex = iParmSetAddImproperTerm(uUnit->psParameters, - sAtom1, sAtom2, - sAtom3, sAtom4, iN, + atoms[0], atoms[1], + atoms[2], atoms[3], iN, dKp, dP0, dScEE, dScNB,sDesc); + } } if (bCopyPert) { if (bProper) {