/* See {ParseEnergyParams.h} */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include MixedEnergy.T PROCEDURE Parse(argparser_t *pp)/* Raises {ParseParams.Error} */ == CONST MaxTerms == 10; e: ARRAY [0..MaxTerms-1] OF Energy.T; w: ARRAY [0..MaxTerms-1] OF REAL; uint n = 0; { while (argparser_keyword_present(pp, "-energy")){ w[n] = pp.getNextReal(0.0, 1000000000.0); if ((pp.testNext("Excen"))) { e[n] = NEW(ExcenEnergy.T).init(); } else if ((pp.testNext("Curv1D"))){ e[n] = NEW(Curvature1D.T).init(); } else if ((pp.testNext("Curv2D"))){ e[n] = NEW(Curvature2D.T).init(); } else if ((pp.testNext("Curv3D"))){ e[n] = NEW(Curvature3D.T) } else if ((pp.testNext("Spring"))){ if ((pp.testNext("OriKamada"))) { REAL length ; REAL strength; bool_t detail = FALSE; { if ((pp.testNext("strength"))) { strength = pp.getNextReal(0.0, 100000.0); } else { strength = 1.0; } if ((pp.testNext("length"))) { length = pp.getNextReal(0.0, 100000.0); } else { length = 2.0; } if ((pp.testNext("detail"))) { detail = TRUE; } else { detail = FALSE; } e[n] = NEW(OriKamSpring.T,strength=strength, length=length, detail=detail); } }; if ((pp.testNext("ModKamada"))) { REAL length ; REAL strength; { if ((pp.testNext("strength"))) { strength = pp.getNextReal(0.0, 10.0); } else { strength = 1.0; } if ((pp.testNext("length"))) { length = pp.getNextReal(0.0, 10.0); } else { length = 2.0; } e[n] = NEW(ModKamSpring.T,strength=strength, length=length); } }; if ((pp.testNext("VarKamada"))) { REAL length ; REAL strength; { if ((pp.testNext("strength"))) { strength = pp.getNextReal(0.0, 10.0); } else { strength = 1.0; } if ((pp.testNext("length"))) { length = pp.getNextReal(0.0, 10.0); } else { length = 2.0; } e[n] = NEW(VarKamSpring.T,strength=strength, length=length); } }; if ((pp.testNext("Simple"))) { REAL length ; { if ((pp.testNext("length"))) { length = pp.getNextReal(0.0, 10.0); } else { length = 1.0; } e[n] = NEW(SimpleSpring.T,length = length); } }; } else if ((pp.testNext("Spring"))){ REAL *length; { if ((pp.testNext("length"))) { length = pp.getNextReal(0.0, 10.0); } else { length = 1.0; } e[n] = NEW(SimpleSpring.T, length = length) } } else if ((pp.testNext("Orien"))){ double *minVol; { if ((pp.testNext("minVol"))) { minVol = pp.getNextLongReal(); } else { minVol = 1.0/sqrt(72.0); } e[n] = NEW(OrientationEnergy.T) }; } else { argparser_error(pp, "Unknown energy: \"" & argparser_get_next(pp) & "\"") } if (w[n]!=0.0){ n++; } } /* DF energy: */ if (n == 0) { return NULL; } else { return NEW(MixedEnergy.T).init(SUBARRAY(e, 0, n), SUBARRAY(w, 0, n)) } } /* END Parse */ { } ParseEnergyParams.