Changes in / [46ce1c:b119a0]
- Files:
-
- 18 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/userguide/userguide.xml
r46ce1c rb119a0 955 955 domain.</para> 956 956 </section> 957 958 <section xml:id='atoms.mirror-atoms'> 959 <title xml:id='atoms.mirror-atoms.title'>Mirroring atoms</title> 960 961 <para>Present (and selected) atoms can be mirrored with respect to 962 a certain plane. You have to specify the normal vector of the plane 963 and the offset with respect to the origin as follows</para> 964 965 <programlisting> 966 ... --mirror-atoms "1,0,0" \ 967 --plane-offset 10.1 \ 968 --periodic 0 969 </programlisting> 970 </section> 957 971 958 972 <section xml:id='atoms.change-element'> … … 2109 2123 a fragment of order 1, e.g. a single hydrogen atom.</para> 2110 2124 </note> 2125 </section> 2126 2127 <section xml:id='potentials.fit-compound-potential'> 2128 <title xml:id='potentials.fit-compound-potential.title'>Fitting 2129 many empirical potentials simultaneously</title> 2130 2111 2131 2112 2132 <para>Another way is using a file containing a specific set of … … 2114 2134 2115 2135 <programlisting> 2116 ... --fit- potential \2136 ... --fit-compound-potential \ 2117 2137 --fragment-charges 8 1 1 \ 2118 2138 --potential-file water.potentials \ … … 2136 2156 type of analysis.</para> 2137 2157 2138 <para>Note that you can combine the two ways, i.e. start with the 2139 first but give an empty potential file. The resulting parameters are 2140 stored in this way. Fit other potentials and give different file 2141 names for each. Eventually, you have to combine the file in a text 2142 editor at the moment.</para> 2158 <para>Note that you can combine the two ways, i.e. start with a 2159 fit-potential call but give an empty potential file. The resulting 2160 parameters are stored in it. Fit other potentials and give different 2161 file names for each in turn. Eventually, you have to combine the file 2162 in a text editor at the moment. And perform a fit-compound-potential 2163 with this file.</para> 2164 </section> 2165 2166 2167 <section xml:id='potentials.parse-potential'> 2168 <title xml:id='potentials.parse-potential.title'>Parsing an 2169 empirical potentials file</title> 2170 2171 <para>Responsible for the compound potential is every potential 2172 function whose signature matches with the designated fragment-charges 2173 and who is currently known to an internal instance called the 2174 PotentialRegistry.</para> 2175 2176 <para>More potentials can be registered (fit-potential will also 2177 register the potential it fits) by parsing them from a file.</para> 2178 2179 <programlisting> 2180 ... --parse-potentials water.potentials 2181 </programlisting> 2182 2183 <note>Currently, only <productname>TREMOLO</productname> potential 2184 files are understood and can be parsed.</note> 2185 </section> 2186 2187 <section xml:id='potentials.save-potential'> 2188 <title xml:id='potentials.save-potential.title'>Saving an 2189 empirical potentials file</title> 2190 2191 <para>The opposite to parse-potentials is save-potentials that writes 2192 every potential currently known to the PotentialRegistry to the given 2193 file along with the currently fitted parameters</para> 2194 2195 <programlisting> 2196 ... --save-potentials water.potentials 2197 </programlisting> 2198 2199 <note>Again, only the <productname>TREMOLO</productname> potential 2200 format is understood currently and is written.</note> 2143 2201 </section> 2144 2202 -
src/Actions/GlobalListOfActions.hpp
r46ce1c rb119a0 31 31 (AtomAdd) \ 32 32 (AtomChangeElement) \ 33 (AtomMirror) \ 33 34 (AtomRemove) \ 34 35 (AtomRotateAroundOriginByAngle) \ … … 83 84 (PotentialFitParticleCharges) \ 84 85 (PotentialParseHomologies) \ 86 (PotentialParsePotentials) \ 85 87 (PotentialSaveHomologies) \ 88 (PotentialSavePotentials) \ 86 89 (ParserParseTremoloPotentials) \ 87 90 (ParserSaveSelectedAtomsAsExtTypes) \ … … 148 151 #define GLOBALLISTOFACTIONS_LEVMAR \ 149 152 BOOST_PP_SEQ_PUSH_BACK( \ 150 GLOBALLISTOFACTIONS_initial, \ 151 PotentialFitPotential \ 153 BOOST_PP_SEQ_PUSH_BACK( \ 154 GLOBALLISTOFACTIONS_initial, \ 155 PotentialFitPotential \ 156 ), \ 157 PotentialFitCompoundPotential \ 152 158 ) 153 159 #else -
src/Actions/Makefile.am
r46ce1c rb119a0 144 144 Actions/AtomAction/AddAction.cpp \ 145 145 Actions/AtomAction/ChangeElementAction.cpp \ 146 Actions/AtomAction/MirrorAction.cpp \ 146 147 Actions/AtomAction/RemoveAction.cpp \ 147 148 Actions/AtomAction/RotateAroundOriginByAngleAction.cpp \ … … 151 152 Actions/AtomAction/AddAction.hpp \ 152 153 Actions/AtomAction/ChangeElementAction.hpp \ 154 Actions/AtomAction/MirrorAction.hpp \ 153 155 Actions/AtomAction/RemoveAction.hpp \ 154 156 Actions/AtomAction/RotateAroundOriginByAngleAction.hpp \ … … 158 160 Actions/AtomAction/AddAction.def \ 159 161 Actions/AtomAction/ChangeElementAction.def \ 162 Actions/AtomAction/MirrorAction.def \ 160 163 Actions/AtomAction/RemoveAction.def \ 161 164 Actions/AtomAction/RotateAroundOriginByAngleAction.def \ … … 351 354 Actions/PotentialAction/FitParticleChargesAction.cpp \ 352 355 Actions/PotentialAction/ParseHomologiesAction.cpp \ 353 Actions/PotentialAction/SaveHomologiesAction.cpp 356 Actions/PotentialAction/ParsePotentialsAction.cpp \ 357 Actions/PotentialAction/SaveHomologiesAction.cpp \ 358 Actions/PotentialAction/SavePotentialsAction.cpp 354 359 POTENTIALACTIONHEADER = \ 355 360 Actions/PotentialAction/FitParticleChargesAction.hpp \ 356 361 Actions/PotentialAction/ParseHomologiesAction.hpp \ 357 Actions/PotentialAction/SaveHomologiesAction.hpp 362 Actions/PotentialAction/ParsePotentialsAction.hpp \ 363 Actions/PotentialAction/SaveHomologiesAction.hpp \ 364 Actions/PotentialAction/SavePotentialsAction.hpp 358 365 POTENTIALACTIONDEFS = \ 359 366 Actions/PotentialAction/FitParticleChargesAction.def \ 360 367 Actions/PotentialAction/ParseHomologiesAction.def \ 361 Actions/PotentialAction/SaveHomologiesAction.def 368 Actions/PotentialAction/ParsePotentialsAction.def \ 369 Actions/PotentialAction/SaveHomologiesAction.def \ 370 Actions/PotentialAction/SavePotentialsAction.def 362 371 363 372 if CONDLEVMAR 364 373 POTENTIALACTIONSOURCE += \ 374 Actions/PotentialAction/FitCompoundPotentialAction.cpp \ 365 375 Actions/PotentialAction/FitPotentialAction.cpp 366 376 POTENTIALACTIONHEADER += \ 377 Actions/PotentialAction/FitCompoundPotentialAction.hpp \ 367 378 Actions/PotentialAction/FitPotentialAction.hpp 368 379 POTENTIALACTIONDEFS += \ 380 Actions/PotentialAction/FitCompoundPotentialAction.def \ 369 381 Actions/PotentialAction/FitPotentialAction.def 370 382 endif -
src/Actions/PotentialAction/FitPotentialAction.cpp
r46ce1c rb119a0 55 55 #include "Fragmentation/Homology/HomologyGraph.hpp" 56 56 #include "Fragmentation/Summation/SetValues/Fragment.hpp" 57 #include "FunctionApproximation/Extractors.hpp" 58 #include "FunctionApproximation/FunctionApproximation.hpp" 59 #include "FunctionApproximation/FunctionModel.hpp" 60 #include "FunctionApproximation/TrainingData.hpp" 61 #include "FunctionApproximation/writeDistanceEnergyTable.hpp" 62 #include "Potentials/CompoundPotential.hpp" 63 #include "Potentials/Exceptions.hpp" 64 #include "Potentials/PotentialDeserializer.hpp" 57 #include "Potentials/EmpiricalPotential.hpp" 65 58 #include "Potentials/PotentialFactory.hpp" 66 59 #include "Potentials/PotentialRegistry.hpp" 67 60 #include "Potentials/PotentialSerializer.hpp" 61 #include "Potentials/PotentialTrainer.hpp" 68 62 #include "Potentials/SerializablePotential.hpp" 63 #include "World.hpp" 69 64 70 65 using namespace MoleCuilder; … … 75 70 /** =========== define the function ====================== */ 76 71 77 HomologyGraph getFirstGraphwithSpecifiedElements(78 const HomologyContainer &homologies,79 const SerializablePotential::ParticleTypes_t &types)80 {81 ASSERT( !types.empty(),82 "getFirstGraphwithSpecifiedElements() - charges is empty?");83 // create charges84 Fragment::charges_t charges;85 charges.resize(types.size());86 std::transform(types.begin(), types.end(),87 charges.begin(), boost::lambda::_1);88 // convert into count map89 Extractors::elementcounts_t counts_per_charge =90 Extractors::_detail::getElementCounts(charges);91 ASSERT( !counts_per_charge.empty(),92 "getFirstGraphwithSpecifiedElements() - charge counts are empty?");93 LOG(2, "DEBUG: counts_per_charge is " << counts_per_charge << ".");94 // we want to check each (unique) key only once95 for (HomologyContainer::const_key_iterator iter = homologies.key_begin();96 iter != homologies.key_end(); iter = homologies.getNextKey(iter)) {97 // check if every element has the right number of counts98 Extractors::elementcounts_t::const_iterator countiter = counts_per_charge.begin();99 for (; countiter != counts_per_charge.end(); ++countiter)100 if (!(*iter).hasTimesAtomicNumber(101 static_cast<size_t>(countiter->first),102 static_cast<size_t>(countiter->second))103 )104 break;105 if( countiter == counts_per_charge.end())106 return *iter;107 }108 return HomologyGraph();109 }110 111 SerializablePotential::ParticleTypes_t getNumbersFromElements(112 const std::vector<const element *> &fragment)113 {114 SerializablePotential::ParticleTypes_t fragmentnumbers;115 std::transform(fragment.begin(), fragment.end(), std::back_inserter(fragmentnumbers),116 boost::bind(&element::getAtomicNumber, _1));117 return fragmentnumbers;118 }119 120 121 72 ActionState::ptr PotentialFitPotentialAction::performCall() { 122 73 // fragment specifies the homology fragment to use 123 74 SerializablePotential::ParticleTypes_t fragmentnumbers = 124 getNumbersFromElements(params.fragment.get());75 PotentialTrainer::getNumbersFromElements(params.fragment.get()); 125 76 126 77 // either charges and a potential is specified or a file 127 if (boost::filesystem::exists(params.potential_file.get())) { 128 std::ifstream returnstream(params.potential_file.get().string().c_str()); 129 if (returnstream.good()) { 130 try { 131 PotentialDeserializer deserialize(returnstream); 132 deserialize(); 133 } catch (SerializablePotentialMissingValueException &e) { 134 if (const std::string *key = boost::get_error_info<SerializablePotentialKey>(e)) 135 STATUS("Missing value when parsing information for potential "+*key+"."); 136 else 137 STATUS("Missing value parsing information for potential with unknown key."); 138 return Action::failure; 139 } catch (SerializablePotentialIllegalKeyException &e) { 140 if (const std::string *key = boost::get_error_info<SerializablePotentialKey>(e)) 141 STATUS("Illegal key parsing information for potential "+*key+"."); 142 else 143 STATUS("Illegal key parsing information for potential with unknown key."); 144 return Action::failure; 145 } 146 } else { 147 STATUS("Failed to parse from "+params.potential_file.get().string()+"."); 148 return Action::failure; 78 if (params.charges.get().empty()) { 79 STATUS("No charges given!"); 80 return Action::failure; 81 } else { 82 // charges specify the potential type 83 SerializablePotential::ParticleTypes_t chargenumbers = 84 PotentialTrainer::getNumbersFromElements(params.charges.get()); 85 86 LOG(0, "STATUS: I'm training now a " << params.potentialtype.get() 87 << " potential on charges " << chargenumbers << " on data from World's homologies."); 88 89 // register desired potential and an additional constant one 90 { 91 EmpiricalPotential *potential = 92 PotentialFactory::getInstance().createInstance( 93 params.potentialtype.get(), 94 chargenumbers); 95 // check whether such a potential already exists 96 const std::string potential_name = potential->getName(); 97 if (PotentialRegistry::getInstance().isPresentByName(potential_name)) { 98 delete potential; 99 potential = PotentialRegistry::getInstance().getByName(potential_name); 100 } else 101 PotentialRegistry::getInstance().registerInstance(potential); 149 102 } 150 returnstream.close(); 151 152 LOG(0, "STATUS: I'm training now a set of potentials parsed from " 153 << params.potential_file.get().string() << " on a fragment " 154 << fragmentnumbers << " on data from World's homologies."); 155 156 } else { 157 if (params.charges.get().empty()) { 158 STATUS("Neither charges nor potential file given!"); 159 return Action::failure; 160 } else { 161 // charges specify the potential type 162 SerializablePotential::ParticleTypes_t chargenumbers = 163 getNumbersFromElements(params.charges.get()); 164 165 LOG(0, "STATUS: I'm training now a " << params.potentialtype.get() 166 << " potential on charges " << chargenumbers << " on data from World's homologies."); 167 168 // register desired potential and an additional constant one 169 { 170 EmpiricalPotential *potential = 171 PotentialFactory::getInstance().createInstance( 172 params.potentialtype.get(), 173 chargenumbers); 174 // check whether such a potential already exists 175 const std::string potential_name = potential->getName(); 176 if (PotentialRegistry::getInstance().isPresentByName(potential_name)) { 177 delete potential; 178 potential = PotentialRegistry::getInstance().getByName(potential_name); 179 } else 180 PotentialRegistry::getInstance().registerInstance(potential); 181 } 182 { 183 EmpiricalPotential *constant = 184 PotentialFactory::getInstance().createInstance( 185 std::string("constant"), 186 SerializablePotential::ParticleTypes_t()); 187 // check whether such a potential already exists 188 const std::string constant_name = constant->getName(); 189 if (PotentialRegistry::getInstance().isPresentByName(constant_name)) { 190 delete constant; 191 constant = PotentialRegistry::getInstance().getByName(constant_name); 192 } else 193 PotentialRegistry::getInstance().registerInstance(constant); 194 } 103 { 104 EmpiricalPotential *constant = 105 PotentialFactory::getInstance().createInstance( 106 std::string("constant"), 107 SerializablePotential::ParticleTypes_t()); 108 // check whether such a potential already exists 109 const std::string constant_name = constant->getName(); 110 if (PotentialRegistry::getInstance().isPresentByName(constant_name)) { 111 delete constant; 112 constant = PotentialRegistry::getInstance().getByName(constant_name); 113 } else 114 PotentialRegistry::getInstance().registerInstance(constant); 195 115 } 196 116 } 197 117 198 118 // parse homologies into container 199 HomologyContainer &homologies = World::getInstance().getHomologies();119 const HomologyContainer &homologies = World::getInstance().getHomologies(); 200 120 201 121 // first we try to look into the HomologyContainer … … 211 131 212 132 // then we ought to pick the right HomologyGraph ... 213 const HomologyGraph graph = getFirstGraphwithSpecifiedElements(homologies,fragmentnumbers); 133 const HomologyGraph graph = 134 PotentialTrainer::getFirstGraphwithSpecifiedElements(homologies,fragmentnumbers); 214 135 if (graph != HomologyGraph()) { 215 136 LOG(1, "First representative graph containing fragment " … … 220 141 } 221 142 222 // fit potential 223 FunctionModel *model = new CompoundPotential(graph); 224 ASSERT( model != NULL, 225 "PotentialFitPotentialAction::performCall() - model is NULL."); 226 227 /******************** TRAINING ********************/ 228 // fit potential 229 FunctionModel::parameters_t bestparams(model->getParameterDimension(), 0.); 230 { 231 // Afterwards we go through all of this type and gather the distance and the energy value 232 TrainingData data(model->getSpecificFilter()); 233 data(homologies.getHomologousGraphs(graph)); 234 235 // print distances and energies if desired for debugging 236 if (!data.getTrainingInputs().empty()) { 237 // print which distance is which 238 size_t counter=1; 239 if (DoLog(3)) { 240 const FunctionModel::arguments_t &inputs = data.getAllArguments()[0]; 241 for (FunctionModel::arguments_t::const_iterator iter = inputs.begin(); 242 iter != inputs.end(); ++iter) { 243 const argument_t &arg = *iter; 244 LOG(3, "DEBUG: distance " << counter++ << " is between (#" 245 << arg.indices.first << "c" << arg.types.first << "," 246 << arg.indices.second << "c" << arg.types.second << ")."); 247 } 248 } 249 250 // print table 251 if (params.training_file.get().string().empty()) { 252 LOG(3, "DEBUG: I gathered the following training data:\n" << 253 _detail::writeDistanceEnergyTable(data.getDistanceEnergyTable())); 254 } else { 255 std::ofstream trainingstream(params.training_file.get().string().c_str()); 256 if (trainingstream.good()) { 257 LOG(3, "DEBUG: Writing training data to file " << 258 params.training_file.get().string() << "."); 259 trainingstream << _detail::writeDistanceEnergyTable(data.getDistanceEnergyTable()); 260 } 261 trainingstream.close(); 262 } 263 } 264 265 if ((params.threshold.get() < 1) && (params.best_of_howmany.isSet())) 266 ELOG(2, "threshold parameter always overrules max_runs, both are specified."); 267 // now perform the function approximation by optimizing the model function 268 FunctionApproximation approximator(data, *model); 269 if (model->isBoxConstraint() && approximator.checkParameterDerivatives()) { 270 double l2error = std::numeric_limits<double>::max(); 271 // seed with current time 272 srand((unsigned)time(0)); 273 unsigned int runs=0; 274 // threshold overrules max_runs 275 const double threshold = params.threshold.get(); 276 const unsigned int max_runs = (threshold >= 1.) ? 277 (params.best_of_howmany.isSet() ? params.best_of_howmany.get() : 1) : 0; 278 LOG(1, "INFO: Maximum runs is " << max_runs << " and threshold set to " << threshold << "."); 279 do { 280 // generate new random initial parameter values 281 model->setParametersToRandomInitialValues(data); 282 LOG(1, "INFO: Initial parameters of run " << runs << " are " 283 << model->getParameters() << "."); 284 approximator(FunctionApproximation::ParameterDerivative); 285 LOG(1, "INFO: Final parameters of run " << runs << " are " 286 << model->getParameters() << "."); 287 const double new_l2error = data.getL2Error(*model); 288 if (new_l2error < l2error) { 289 // store currently best parameters 290 l2error = new_l2error; 291 bestparams = model->getParameters(); 292 LOG(1, "STATUS: New fit from run " << runs 293 << " has better error of " << l2error << "."); 294 } 295 } while (( ++runs < max_runs) || (l2error > threshold)); 296 // reset parameters from best fit 297 model->setParameters(bestparams); 298 LOG(1, "INFO: Best parameters with L2 error of " 299 << l2error << " are " << model->getParameters() << "."); 300 } else { 301 STATUS("No required parameter derivatives for a box constraint minimization known."); 302 return Action::failure; 303 } 304 305 // create a map of each fragment with error. 306 HomologyContainer::range_t fragmentrange = homologies.getHomologousGraphs(graph); 307 TrainingData::L2ErrorConfigurationIndexMap_t WorseFragmentMap = 308 data.getWorstFragmentMap(*model, fragmentrange); 309 LOG(0, "RESULT: WorstFragmentMap " << WorseFragmentMap << "."); 310 311 // print fitted potentials 312 std::stringstream potentials; 313 PotentialSerializer serialize(potentials); 314 serialize(); 315 LOG(1, "STATUS: Resulting parameters are " << std::endl << potentials.str()); 316 std::ofstream returnstream(params.potential_file.get().string().c_str()); 317 if (returnstream.good()) { 318 returnstream << potentials.str(); 319 } 143 // training 144 PotentialTrainer trainer; 145 const bool status = trainer( 146 homologies, 147 graph, 148 params.training_file.get(), 149 params.threshold.get(), 150 params.best_of_howmany.get()); 151 if (!status) { 152 STATUS("No required parameter derivatives for a box constraint minimization known."); 153 return Action::failure; 320 154 } 321 delete model;322 155 323 156 return Action::success; -
src/Actions/PotentialAction/FitPotentialAction.def
r46ce1c rb119a0 18 18 #include "Parameters/Validators/Specific/ElementValidator.hpp" 19 19 #include "Parameters/Validators/Specific/EmptyStringValidator.hpp" 20 #include "Parameters/Validators/Specific/FileSuffixValidator.hpp"21 #include "Parameters/Validators/Specific/FilePresentValidator.hpp"22 20 #include "Parameters/Validators/Specific/PotentialTypeValidator.hpp" 23 21 … … 25 23 // ValueStorage by the token "Z" -> first column: int, Z, "Z" 26 24 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value 27 #define paramtypes (boost::filesystem::path)(std::string)( boost::filesystem::path)(std::vector<const element *>)(std::vector<const element *>)(unsigned int)(double)28 #define paramtokens ("training-file")("potential-type")("potential- file")("potential-charges")("fragment-charges")("take-best-of")("set-threshold")29 #define paramdescriptions ("optional file to write training data to")("potential type to fit")(" optional potential file specifying multiple potentials to fit")("charges specifying the potential")("charges specifying the fragment")("take the best among this many approximations")("Require L2 error to be smaller than threshold, overrides number of attempts")30 #define paramdefaults (PARAM_DEFAULT(""))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)( NOPARAM_DEFAULT)(PARAM_DEFAULT(3))(PARAM_DEFAULT(1.))31 #define paramreferences (training_file)(potentialtype)( potential_file)(charges)(fragment)(best_of_howmany)(threshold)25 #define paramtypes (boost::filesystem::path)(std::string)(std::vector<const element *>)(std::vector<const element *>)(unsigned int)(double) 26 #define paramtokens ("training-file")("potential-type")("potential-charges")("fragment-charges")("take-best-of")("set-threshold") 27 #define paramdescriptions ("optional file to write training data to")("potential type to fit")("charges specifying the potential")("charges specifying the fragment")("take the best among this many approximations")("Require L2 error to be smaller than threshold, overrides number of attempts") 28 #define paramdefaults (PARAM_DEFAULT(""))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(3))(PARAM_DEFAULT(1.)) 29 #define paramreferences (training_file)(potentialtype)(charges)(fragment)(best_of_howmany)(threshold) 32 30 #define paramvalids \ 33 31 (DummyValidator<boost::filesystem::path>()) \ 34 (EmptyStringValidator() || PotentialTypeValidator()) \ 35 (!FilePresentValidator() || FileSuffixValidator("potentials")) \ 32 (PotentialTypeValidator()) \ 36 33 (STLVectorValidator< std::vector<const element *> >(0,99, ElementValidator())) \ 37 34 (STLVectorValidator< std::vector<const element *> >(1,99, ElementValidator())) \ -
src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp
r46ce1c rb119a0 93 93 break; 94 94 default: 95 ASSERT(0, "SelectionAtomByIdAction::performCall() - this must not happen.");95 STATUS("No atoms have been selected."); 96 96 return Action::failure; 97 97 break; -
src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp
r46ce1c rb119a0 93 93 break; 94 94 default: 95 ASSERT(0, "SelectionAtomByIdAction::performCall() - this must not happen.");95 STATUS("No atoms have been selected."); 96 96 return Action::failure; 97 97 break; -
src/Potentials/Makefile.am
r46ce1c rb119a0 53 53 Potentials/Specifics/PotentialTypes.def \ 54 54 Potentials/Specifics/PotentialTypes.undef 55 56 if CONDLEVMAR 57 POTENTIALSHEADER += \ 58 Potentials/PotentialTrainer.hpp 59 POTENTIALSSOURCE = \ 60 Potentials/PotentialTrainer.cpp 61 endif 55 62 56 63 # add here headers for real potentials (i.e. the PotentialFactory should instantiate) -
tests/Python/AllActions/options.dat
r46ce1c rb119a0 99 99 mesh-size "10,10,10" 100 100 min-distance "1." 101 mirror-atoms "1.,1.,1." 101 102 molecule-by-id "0" 102 103 near-field-cells "3" … … 124 125 output-types "xyz mpqc" 125 126 parse-homologies "homology.dat" 127 parse-potentials "water.potentials" 126 128 parse-tremolo-potentials "argon.potentials" 127 129 parse-tremolo-potentials "tensid.potentials" … … 129 131 parser-parameters "psi3" 130 132 periodic "0" 133 plane-offset "5." 131 134 position "0 0 0" 132 135 position "0 0 1" … … 161 164 save-bonds "test.bond" 162 165 save-homologies "homology.dat" 166 save-potentials "water.potentials" 163 167 save-selected-atoms "testsave.xyz" 164 168 save-selected-atoms-as-exttypes "test.exttypes" -
tests/regression/Atoms/testsuite-atoms.at
r46ce1c rb119a0 38 38 # Undo and redo a translation 39 39 m4_include([Atoms/Translation/testsuite-atoms-translation.at]) 40 41 # mirror atoms 42 m4_include([Atoms/Mirror/testsuite-atoms-mirror.at]) -
tests/regression/Makefile.am
r46ce1c rb119a0 35 35 $(srcdir)/Atoms/Add/testsuite-atoms-add.at \ 36 36 $(srcdir)/Atoms/ChangeElement/testsuite-atoms-change-element.at \ 37 $(srcdir)/Atoms/Mirror/testsuite-atoms-mirror.at \ 37 38 $(srcdir)/Atoms/Remove/testsuite-atoms-remove.at \ 38 39 $(srcdir)/Atoms/RemoveCuboid/testsuite-atoms-remove-cuboid.at \ -
tests/regression/Potential/FitPotential/testsuite-potential-fit-potential.at
r46ce1c rb119a0 26 26 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 27 27 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 28 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=1;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "morse" --potential-charges 8 1 --fragment-charges 1 8 1 --set-threshold 1e-6], 0, [stdout], [ignore]) 28 AT_CHECK([../../molecuilder \ 29 --parse-homologies $file \ 30 --set-random-number-engine "lagged_fibonacci607" \ 31 --random-number-engine-parameters "seed=1;" \ 32 --set-random-number-distribution "uniform_real" \ 33 --random-number-distribution-parameters "min=0;max=1;" \ 34 --fit-potential \ 35 --potential-type "morse" \ 36 --potential-charges 8 1 \ 37 --fragment-charges 1 8 1 \ 38 --set-threshold 1e-6 \ 39 --save-potentials length.potentials], 0, [stdout], [ignore]) 29 40 # check that L_2 error is below 1e-6 30 41 AT_CHECK([grep "Best parameters with L2 error" stdout | awk '{if ($8 > 1e-6) exit 1}'], 0, [ignore], [ignore]) 31 42 # check parameters to printed precision 32 AT_CHECK([grep "morse:.*particle_type1=8,.*particle_type2=1,.*spring_constant=1.27.*,.*equilibrium_distance=1.78.*,.*dissociation_energy=0.19.*;" stdout], 0, [ignore], [ignore])43 AT_CHECK([grep "morse:.*particle_type1=8,.*particle_type2=1,.*spring_constant=1.27.*,.*equilibrium_distance=1.78.*,.*dissociation_energy=0.19.*;" length.potentials], 0, [ignore], [ignore]) 33 44 34 45 AT_CLEANUP … … 41 52 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 42 53 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 43 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=1;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "harmonic_bond" --potential-charges 8 1 --fragment-charges 1 8 1 --set-threshold 1e-6], 0, [stdout], [ignore]) 54 AT_CHECK([../../molecuilder \ 55 --parse-homologies $file \ 56 --set-random-number-engine "lagged_fibonacci607" \ 57 --random-number-engine-parameters "seed=1;" \ 58 --set-random-number-distribution "uniform_real" \ 59 --random-number-distribution-parameters "min=0;max=1;" \ 60 --fit-potential \ 61 --potential-type "harmonic_bond" \ 62 --potential-charges 8 1 \ 63 --fragment-charges 1 8 1 \ 64 --set-threshold 1e-6 \ 65 --save-potentials harmonic.potentials], 0, [stdout], [ignore]) 44 66 # check that L_2 error is below 1e-6 45 67 AT_CHECK([grep "Best parameters with L2 error" stdout | awk '{if ($8 > 1e-6) exit 1}'], 0, [ignore], [ignore]) 46 68 # check parameters to printed precision 47 AT_CHECK([grep "harmonic_bond:.*particle_type1=8,.*particle_type2=1,.*spring_constant=0.29.*,.*equilibrium_distance=1.8.*;" stdout], 0, [ignore], [ignore])69 AT_CHECK([grep "harmonic_bond:.*particle_type1=8,.*particle_type2=1,.*spring_constant=0.29.*,.*equilibrium_distance=1.8.*;" harmonic.potentials], 0, [ignore], [ignore]) 48 70 49 71 AT_CLEANUP … … 56 78 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 57 79 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 58 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=1;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "harmonic_angle" --potential-charges 1 8 1 --fragment-charges 1 8 1 --set-threshold 1e-6], 0, [stdout], [ignore]) 80 AT_CHECK([../../molecuilder \ 81 --parse-homologies $file \ 82 --set-random-number-engine "lagged_fibonacci607" \ 83 --random-number-engine-parameters "seed=1;" \ 84 --set-random-number-distribution "uniform_real" \ 85 --random-number-distribution-parameters "min=0;max=1;" \ 86 --fit-potential \ 87 --potential-type "harmonic_angle" \ 88 --potential-charges 1 8 1 \ 89 --fragment-charges 1 8 1 \ 90 --set-threshold 1e-6 \ 91 --save-potentials angle.potentials], 0, [stdout], [ignore]) 59 92 # check that L_2 error is below 1e-6 60 93 AT_CHECK([grep "||e||_2:" stdout | awk '{if ($7 > 1e-6) exit 1}'], 0, [ignore], [ignore]) 61 94 # check parameters to printed precision 62 AT_CHECK([grep "harmonic_angle:.*particle_type1=1,.*particle_type2=8,.*particle_type3=1,.*spring_constant=0.10.*,.*equilibrium_distance=-0.27.*;" stdout], 0, [ignore], [ignore])95 AT_CHECK([grep "harmonic_angle:.*particle_type1=1,.*particle_type2=8,.*particle_type3=1,.*spring_constant=0.10.*,.*equilibrium_distance=-0.27.*;" angle.potentials], 0, [ignore], [ignore]) 63 96 64 97 AT_CLEANUP … … 71 104 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 72 105 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 73 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=1;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "torsion" --potential-charges 6 6 6 6 --fragment-charges 6 6 6 6 1 1 1 1 1 1 1 1 1 1 --set-threshold 2e-10], 0, [stdout], [ignore]) 106 AT_CHECK([../../molecuilder \ 107 --parse-homologies $file \ 108 --set-random-number-engine "lagged_fibonacci607" \ 109 --random-number-engine-parameters "seed=1;" \ 110 --set-random-number-distribution "uniform_real" \ 111 --random-number-distribution-parameters "min=0;max=1;" \ 112 --fit-potential \ 113 --potential-type "torsion" \ 114 --potential-charges 6 6 6 6 \ 115 --fragment-charges 6 6 6 6 1 1 1 1 1 1 1 1 1 1 \ 116 --set-threshold 2e-10 \ 117 --save-potentials torsion.potentials], 0, [stdout], [ignore]) 74 118 # check that L_2 error is below 9e-12 ... just 2e-10 otherwise test takes tooo long 75 119 AT_CHECK([grep "Best parameters with L2 error" stdout | awk '{if ($8 > 2e-10) exit 1}'], 0, [ignore], [ignore]) 76 AT_CHECK([grep "torsion:.*particle_type1=6,.*particle_type2=6,.*particle_type3=6,.*particle_type4=6,.*spring_constant=.*,.*equilibrium_distance=.*;" stdout], 0, [ignore], [ignore])77 #AT_CHECK([grep "torsion:.*particle_type1=6,.*particle_type2=6,.*particle_type3=6,.*particle_type4=6,.*spring_constant=0.001.*,.*equilibrium_distance=0.99.*;" stdout], 0, [ignore], [ignore])120 AT_CHECK([grep "torsion:.*particle_type1=6,.*particle_type2=6,.*particle_type3=6,.*particle_type4=6,.*spring_constant=.*,.*equilibrium_distance=.*;" torsion.potentials], 0, [ignore], [ignore]) 121 #AT_CHECK([grep "torsion:.*particle_type1=6,.*particle_type2=6,.*particle_type3=6,.*particle_type4=6,.*spring_constant=0.001.*,.*equilibrium_distance=0.99.*;" torsion.potentials], 0, [ignore], [ignore]) 78 122 79 123 AT_CLEANUP … … 86 130 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 87 131 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 88 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=1;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "improper" --potential-charges 1 7 1 1 --fragment-charges 7 1 1 1 --set-threshold 3e-4], 0, [stdout], [ignore]) 132 AT_CHECK([../../molecuilder \ 133 --parse-homologies $file \ 134 --set-random-number-engine "lagged_fibonacci607" \ 135 --random-number-engine-parameters "seed=1;" \ 136 --set-random-number-distribution "uniform_real" \ 137 --random-number-distribution-parameters "min=0;max=1;" \ 138 --fit-potential \ 139 --potential-type "improper" \ 140 --potential-charges 1 7 1 1 \ 141 --fragment-charges 7 1 1 1 \ 142 --set-threshold 3e-4 \ 143 --save-potentials improper.potentials], 0, [stdout], [ignore]) 89 144 # check that L_2 error is below 3e-4 90 145 AT_CHECK([grep "Best parameters with L2 error" stdout | awk '{if ($8 > 3e-4) exit 1}'], 0, [ignore], [ignore]) 91 146 # check parameters to printed precision 92 AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=.*,.*equilibrium_distance=.*;" stdout], 0, [ignore], [ignore])93 #AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=1.02.*,.*equilibrium_distance=0.85.*;" stdout], 0, [ignore], [ignore])147 AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=.*,.*equilibrium_distance=.*;" improper.potentials], 0, [ignore], [ignore]) 148 #AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=1.02.*,.*equilibrium_distance=0.85.*;" improper.potentials], 0, [ignore], [ignore]) 94 149 95 150 AT_CLEANUP … … 102 157 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0) 103 158 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore]) 104 AT_CHECK([../../molecuilder --parse-homologies $file --set-random-number-engine "lagged_fibonacci607" --random-number-engine-parameters "seed=5;" --set-random-number-distribution "uniform_real" --random-number-distribution-parameters "min=0;max=1;" --fit-potential --potential-type "lennardjones" --potential-charges 18 18 --fragment-charges 18 18 --set-threshold 7e-9], 0, [stdout], [ignore]) 159 AT_CHECK([../../molecuilder \ 160 --parse-homologies $file \ 161 --set-random-number-engine "lagged_fibonacci607" \ 162 --random-number-engine-parameters "seed=5;" \ 163 --set-random-number-distribution "uniform_real" \ 164 --random-number-distribution-parameters "min=0;max=1;" \ 165 --fit-potential \ 166 --potential-type "lennardjones" \ 167 --potential-charges 18 18 \ 168 --fragment-charges 18 18 \ 169 --set-threshold 7e-9 \ 170 --save-potentials lj.potentials], 0, [stdout], [ignore]) 105 171 # check that L_2 error is below 7e-11 ... just 7e-9 otherwise test takes too long 106 172 AT_CHECK([grep "Best parameters with L2 error" stdout | awk '{if ($8 > 7e-9) exit 1}'], 0, [ignore], [ignore]) 107 173 # check parameters to printed precision 108 AT_CHECK([grep "lennardjones:.*particle_type1=18,.*particle_type2=18,.*epsilon=.*,.*sigma=.*;" stdout], 0, [ignore], [ignore])109 #AT_CHECK([grep "lennardjones:.*particle_type1=18,.*particle_type2=18,.*epsilon=1.*e-05,.*sigma=8.2.*;" stdout], 0, [ignore], [ignore])174 AT_CHECK([grep "lennardjones:.*particle_type1=18,.*particle_type2=18,.*epsilon=.*,.*sigma=.*;" lj.potentials], 0, [ignore], [ignore]) 175 #AT_CHECK([grep "lennardjones:.*particle_type1=18,.*particle_type2=18,.*epsilon=1.*e-05,.*sigma=8.2.*;" lj.potentials], 0, [ignore], [ignore]) 110 176 111 177 AT_CLEANUP
Note:
See TracChangeset
for help on using the changeset viewer.