Changes in / [e38750:dace6c]
- Files:
-
- 46 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/AtomAction/AddAction.cpp
re38750 rdace6c 55 55 #include "Action_impl_pre.hpp" 56 56 /** =========== define the function ====================== */ 57 58 atom * getNewAtom(const AtomAddAction::AtomAddParameters &_params)59 {60 atom * first = World::getInstance().createAtom();61 first->setType(_params.elemental.get());62 first->setPosition(_params.position.get());63 64 return first;65 }66 67 std::vector<atomId_t> createAtoms(68 const AtomAddAction::AtomAddParameters &_params,69 std::vector<molecule *> &_molecules)70 {71 std::vector<atomId_t> ids;72 if (!_molecules.empty()) {73 if (_molecules.size() == 1) {74 atom *first = getNewAtom(_params);75 molecule *mol = *_molecules.begin();76 LOG(1, "Adding new atom with element " << first->getType()->getName()77 << " at " << (first->getPosition()) << " to selected molecule "78 << mol->getName()+".");79 mol->AddAtom(first);80 ids.push_back(first->getId());81 }82 } else {83 atom *first = getNewAtom(_params);84 molecule *mol = World::getInstance().createMolecule();85 mol->setName("none");86 mol->AddAtom(first);87 LOG(1, "Adding new atom with element " << first->getType()->getName()88 << " at " << (first->getPosition()) << " to new molecule.");89 ids.push_back(first->getId());90 }91 92 return ids;93 }94 95 57 ActionState::ptr AtomAddAction::performCall() { 96 58 // execute action 97 std::vector<molecule *> molecules = World::getInstance().getSelectedMolecules(); 98 std::vector<atomId_t> ids = createAtoms(params, molecules); 99 100 if (molecules.size() > 1) 101 return Action::failure; 102 else 103 return ActionState::ptr(new AtomAddState(ids, params)); 59 atom * first = World::getInstance().createAtom(); 60 first->setType(params.elemental.get()); 61 first->setPosition(params.position.get()); 62 LOG(1, "Adding new atom with element " << first->getType()->getName() << " at " << (first->getPosition()) << "."); 63 // TODO: remove when all of World's atoms are stored. 64 std::vector<molecule *> molecules = World::getInstance().getAllMolecules(); 65 if (!molecules.empty()) { 66 std::vector<molecule *>::iterator iter = molecules.begin(); 67 (*iter)->AddAtom(first); 68 } 69 return ActionState::ptr(new AtomAddState(first->getId(), params)); 104 70 } 105 71 … … 107 73 AtomAddState *state = assert_cast<AtomAddState*>(_state.get()); 108 74 109 for (std::vector<atomId_t>::const_iterator iter = state->ids.begin(); 110 iter != state->ids.end(); ++iter) { 111 LOG(1, "Removing atom with id " << *iter << "."); 112 World::getInstance().destroyAtom(*iter); 113 } 75 LOG(1, "Removing atom with id " << state->id << "."); 76 World::getInstance().destroyAtom(state->id); 114 77 115 78 return ActionState::ptr(_state); … … 119 82 AtomAddState *state = assert_cast<AtomAddState*>(_state.get()); 120 83 121 std::vector<molecule *> molecules = World::getInstance().getSelectedMolecules(); 122 std::vector<atomId_t> newids = createAtoms(params, molecules); 84 atom * first = World::getInstance().createAtom(); 85 first->setType(state->params.elemental.get()); 86 first->setPosition(state->params.position.get()); 87 LOG(1, "Re-adding new atom with element " << state->params.elemental.get()->getName() << " at " << state->params.position.get() << "."); 88 // TODO: remove when all of World's atoms are stored. 89 std::vector<molecule *> molecules = World::getInstance().getAllMolecules(); 90 if (!molecules.empty()) { 91 std::vector<molecule *>::iterator iter = molecules.begin(); 92 (*iter)->AddAtom(first); 93 } 94 if (first->getId() != state->id) 95 if (!first->changeId(state->id)) { 96 STATUS("Could not change atom id "+toString(first->getId())+"->"+toString(state->id)+"."); 97 return Action::failure; 98 } 123 99 124 if (newids.size() != state->ids.size()) { 125 STATUS("Could not recreate all atoms after undo."); 126 for (std::vector<atomId_t>::const_iterator iter = newids.begin(); iter != newids.end();++iter) 127 World::getInstance().destroyAtom(*iter); 128 return Action::failure; 129 } 130 131 std::vector<atomId_t>::const_iterator newiter = newids.begin(); 132 std::vector<atomId_t>::const_iterator olditer = state->ids.begin(); 133 bool status=true; 134 for (; newiter != newids.end(); ++newiter, ++olditer) { 135 atom * first = World::getInstance().getAtom(AtomById(*newiter)); 136 ASSERT( first != NULL, 137 "AtomAddAction::performRedo() - re-created atom not present?"); 138 if (first->getId() != *olditer) 139 if (!first->changeId(*olditer)) { 140 STATUS("Could not change atom id "+toString(first->getId())+"->"+toString(*olditer)+"."); 141 // remove all created atoms 142 for (std::vector<atomId_t>::const_iterator iter = state->ids.begin(); iter != olditer;++iter) 143 World::getInstance().destroyAtom(*iter); 144 olditer = state->ids.end(); 145 for (std::vector<atomId_t>::const_iterator iter = newiter; iter != newids.end();++iter) 146 World::getInstance().destroyAtom(*iter); 147 status = false; 148 break; 149 } 150 } 151 ASSERT( olditer == state->ids.end(), 152 "AtomAddAction::performRedo() - after all unequal amount of ids in new and old?"); 153 154 if (!status) { 155 return Action::failure; 156 } else 157 return ActionState::ptr(_state); 100 return ActionState::ptr(_state); 158 101 } 159 102 -
src/Actions/AtomAction/AddAction.def
re38750 rdace6c 27 27 (BoxVectorValidator()) 28 28 29 #define statetypes ( std::vector<atomId_t>)30 #define statereferences (id s)29 #define statetypes (const atomId_t) 30 #define statereferences (id) 31 31 32 32 // some defines for all the names, you may use ACTION, STATE and PARAMS -
src/Actions/AtomAction/SaturateAction.cpp
re38750 rdace6c 79 79 // add the hydrogens 80 80 const Vector AtomsPosition = _atom->getPosition(); 81 double typical_distance = _atom->getType()->getHBondDistance( 0);81 double typical_distance = _atom->getType()->getHBondDistance(1); 82 82 if (typical_distance == -1.) 83 83 typical_distance = 1.; -
src/Actions/WorldAction/SetBoundaryConditionsAction.def
re38750 rdace6c 18 18 #define paramtypes (std::vector< std::string >) 19 19 #define paramtokens ("set-boundary-conditions") 20 #define paramdescriptions ("new boundary conditions as list of three strings, e.g. ' Wrap Bounce Ignore'")20 #define paramdescriptions ("new boundary conditions as list of three strings, e.g. 'wrap wrap ignore'") 21 21 #undef paramdefaults 22 22 #define paramreferences (newconditions) -
src/Atom/atom.cpp
re38750 rdace6c 264 264 // first we move ourselves in the world 265 265 // the world lets us know if that succeeded 266 atomId_t oldid = id;267 266 if(world->changeAtomId(id,newId,this)){ 268 267 OBSERVE; 269 268 id = newId; 270 if (mol != NULL)271 mol->changeAtomId(oldid, newId);272 269 NOTIFY(IndexChanged); 273 270 return true; -
src/Element/element.cpp
re38750 rdace6c 64 64 color[i] = (unsigned char)0; 65 65 for (size_t i =0; i<3;++i) 66 HBondDistance[i] = -1.;67 for (size_t i =0; i<3;++i) 68 HBondAngle[i] = -1.;66 HBondDistance[i] = 0.; 67 for (size_t i =0; i<3;++i) 68 HBondAngle[i] = 0.; 69 69 }; 70 70 -
src/Element/elements_db.cpp
re38750 rdace6c 258 258 const char *HbonddistanceDB =\ 259 259 "#atomic number bond distances for single, double and triple bond (-1 no bond)\n\ 260 1 0.741283 -1. -1.\n\ 261 2 0 -1. -1.\n\ 262 3 1.65217 -1. -1.\n\ 263 4 1.3455 -1. -1.\n\ 264 5 1.1962 1.19 1.18\n\ 265 6 1.09234 1.076 1.06\n\ 266 7 1.00154 1.02 1.01\n\ 267 8 0.941566 0.957 -1.\n\ 268 9 0.958865 -1. -1.\n\ 269 10 0 -1. -1.\n\ 270 11 1.9426 -1. -1.\n\ 271 12 1.73705 -1. -1.\n\ 272 13 1.60991 -1. -1.\n\ 273 14 1.49796 1.48 1.48\n\ 274 15 1.39145 -1. -1.\n\ 275 16 1.32987 -1. -1.\n\ 276 17 1.31403 -1. -1.\n\ 277 18 0 -1. -1.\n\ 278 19 2.38168 -1. -1.\n\ 279 20 2.39602 -1. -1.\n\ 280 21 1.69169 -1. -1.\n\ 281 22 1.69817 -1. -1.\n\ 282 23 1.75022 -1. -1.\n\ 283 24 1.79185 -1. -1.\n\ 284 25 1.49581 -1. -1.\n\ 285 26 1.76215 -1. -1.\n\ 286 27 1.4284 -1. -1.\n\ 287 28 1.56442 -1. -1.\n\ 288 29 2.00512 -1. -1.\n\ 289 30 1.55672 -1. -1.\n\ 290 31 1.58872 -1. -1.\n\ 291 32 1.5484 -1. -1.\n\ 292 33 1.47208 -1. -1.\n\ 293 34 1.43322 -1. -1.\n\ 294 35 1.45079 -1. -1.\n\ 295 36 0 -1. -1.\n\ 260 1 0.74 -1 -1\n\ 261 2 0.77429209 -1 -1\n\ 262 5 1.23 1.19 1.18\n\ 263 6 1.09 1.076 1.06\n\ 264 7 1.04 1.02 1.01\n\ 265 8 0.96 0.957 -1\n\ 266 14 1.48 1.48 1.48\n\ 267 15 1.42 -1 -1\n\ 268 16 1.35 -1 -1\n\ 269 17 1.29 -1 -1\n\ 270 20 1.09 1.09 -1\n\ 271 34 1.47 -1 -1\n\ 272 35 1.44 -1 -1\n\ 296 273 "; 297 274 … … 303 280 7 0 110 106.67\n\ 304 281 8 0 104.5 -1\n\ 305 11 0 -1 -1\n\306 282 14 0 120 109.47\n\ 307 283 15 0 -1 -1\n\ -
src/Element/unittests/ElementUnitTest.cpp
re38750 rdace6c 110 110 CPPUNIT_ASSERT_EQUAL( 0, testelement->getNoValenceOrbitals() ); 111 111 for (size_t i = 0; i < 3; ++i) 112 CPPUNIT_ASSERT_EQUAL( -1., testelement->getHBondDistance(i) );112 CPPUNIT_ASSERT_EQUAL( 0., testelement->getHBondDistance(i) ); 113 113 for (size_t i = 0; i < 3; ++i) 114 CPPUNIT_ASSERT_EQUAL( -1., testelement->getHBondAngle(i) );114 CPPUNIT_ASSERT_EQUAL( 0., testelement->getHBondAngle(i) ); 115 115 } 116 116 -
src/Fragmentation/Exporters/SaturatedBond.cpp
re38750 rdace6c 64 64 saturated_atom.getElement().getHBondDistance(saturated_bond.getDegree()-1); 65 65 ASSERT( HydrogenDistance > 0., 66 "SaturatedBond::SaturatedBond() - negative bond distance for " 67 +saturated_atom.getElement().getName()); 66 "SaturatedBond::SaturatedBond() - negative bond distance"); 68 67 const double HydrogenAngle = 69 68 saturated_atom.getElement().getHBondAngle(saturated_bond.getDegree()-1); 70 69 ASSERT( HydrogenAngle >= 0., 71 "SaturatedBond::SaturatedBond() - negative bond angle for " 72 +saturated_atom.getElement().getName()); 70 "SaturatedBond::SaturatedBond() - negative bond angle"); 73 71 LOG(5, "DEBUG: Hydrogen distance is " << HydrogenDistance 74 72 << ", angle is " << HydrogenAngle); -
src/Graph/BondGraph.hpp
re38750 rdace6c 221 221 neighboriter != ListOfNeighbors.end(); 222 222 ++neighboriter) { 223 const atom * const OtherWalker = dynamic_cast<const atom *>(*neighboriter);224 ASSERT(OtherWalker != NULL,225 "BondGraph::CreateAdjacency() - TesselPoint "226 +(*neighboriter)->getName()+" that was not an atom retrieved from LinkedList");227 if (OtherWalker->getId() > Walker->getId()) { // just to not add bonds from both sides223 if ((*neighboriter) > Walker) { // just to not add bonds from both sides 224 const atom * const OtherWalker = dynamic_cast<const atom *>(*neighboriter); 225 ASSERT(OtherWalker != NULL, 226 "BondGraph::CreateAdjacency() - TesselPoint " 227 +(*neighboriter)->getName()+" that was not an atom retrieved from LinkedList"); 228 228 LOG(4, "INFO: Current other atom is " << *OtherWalker << "."); 229 229 … … 245 245 } 246 246 } else { 247 LOG( 4, "REJECT: Not Adding: Wrong order.");247 LOG(5, "REJECT: Not Adding: Wrong order."); 248 248 } 249 249 } -
src/Parameters/Specifics/Value_element.cpp
re38750 rdace6c 35 35 #include "CodePatterns/MemDebug.hpp" 36 36 37 #include <boost/lexical_cast.hpp>38 39 37 #include "Value_element.hpp" 40 38 … … 47 45 static const element * FindElementByString(const std::string &_value) 48 46 { 49 const element * elem = NULL; 50 try { 51 const int tempvalue = boost::lexical_cast<atomicNumber_t>(_value); 52 elem = World::getInstance().getPeriode()->FindElement(tempvalue); 53 } catch( boost::bad_lexical_cast &e) { 54 elem = World::getInstance().getPeriode()->FindElement(_value); 55 } 56 return elem; 47 static ConvertTo<atomicNumber_t> converter; 48 const element * _element = 49 World::getInstance().getPeriode()->FindElement(converter(_value)); 50 return _element; 57 51 } 58 52 -
src/Parameters/Specifics/Value_elements.cpp
re38750 rdace6c 57 57 for(tokenizer::iterator beg=tok.begin(); 58 58 beg != tok.end();++beg) { 59 const element * elem = NULL; 60 try { 61 const int tempvalue = boost::lexical_cast<atomicNumber_t>(*beg); 62 elem = World::getInstance().getPeriode()->FindElement(tempvalue); 63 } catch( boost::bad_lexical_cast &e) { 64 elem = World::getInstance().getPeriode()->FindElement(*beg); 65 } 66 ASSERT( elem != NULL, 59 const int tempvalue = boost::lexical_cast<atomicNumber_t>(*beg); 60 const element * _element = 61 World::getInstance().getPeriode()->FindElement(tempvalue); 62 ASSERT( _element != NULL, 67 63 "FindElementsByString() - cannnot find element " 68 +toString( *beg)+" in periodentafel.");69 elements.push_back( elem);64 +toString(tempvalue)+" in periodentafel."); 65 elements.push_back(_element); 70 66 } 71 67 return elements; -
src/Parser/MpqcParser.cpp
re38750 rdace6c 309 309 *file << "% Created by MoleCuilder" << endl; 310 310 *file << "mpqc: (" << endl; 311 *file << "\tcheckpoint = no" << endl;312 311 *file << "\tsavestate = " << getParams().getParameter(MpqcParser_Parameters::savestateParam) << endl; 313 312 *file << "\tdo_gradient = " << getParams().getParameter(MpqcParser_Parameters::do_gradientParam) << endl; … … 375 374 ELOG(0, "Unknown level of theory requested for MPQC output file."); 376 375 } 377 const std::string jobtype = getParams().getParameter(MpqcParser_Parameters::jobtypeParam);378 if (jobtype == getParams().getJobtypeName(MpqcParser_Parameters::Optimization)) {379 *file << "\t% optimizer object for the molecular geometry" << endl;380 *file << "\topt<QNewtonOpt>: (" << endl;381 *file << "\t\tfunction = $..:mole" << endl;382 *file << "\t\tupdate<BFGSUpdate>: ()" << endl;383 *file << "\t\tconvergence<MolEnergyConvergence>: (" << endl;384 *file << "\t\t\tcartesian = yes" << endl;385 *file << "\t\t\tenergy = $..:..:mole" << endl;386 *file << "\t\t)" << endl;387 *file << "\t)" << endl;388 }389 376 *file << ")" << endl; 390 377 *file << "molecule<Molecule>: (" << endl; -
src/Parser/MpqcParser_Parameters.cpp
re38750 rdace6c 69 69 ParamNames[integrationParam] = "integration"; 70 70 ParamNames[theoryParam] = "theory"; 71 ParamNames[jobtypeParam] = "jobtype";72 71 } 73 72 … … 87 86 } 88 87 //InvertMap<TheoryNamesType,TheoryLookupType>(TheoryNames,TheoryLookup); 89 90 // create Jobs parameter91 {92 ValidJobtypes.clear();93 ValidJobtypes.resize(unknownJob);94 ValidJobtypes[Default]="Default";95 ValidJobtypes[Optimization]="Optimization";96 appendParameter(97 new Parameter<std::string>(98 ParamNames[jobtypeParam],99 ValidJobtypes,100 ValidJobtypes[Default]));101 }102 88 103 89 // create integration parameter … … 191 177 } 192 178 193 /** Getter for name of a specific Parameter.194 *195 * @param param index among enum Jobtype196 * @return name of the desired Jobtype197 */198 const std::string &MpqcParser_Parameters::getJobtypeName(const enum Jobtype jobtype) const199 {200 return ValidJobtypes[jobtype];201 }202 203 179 /** Getter for the name of specific of IntegrationMethod. 204 180 * -
src/Parser/MpqcParser_Parameters.hpp
re38750 rdace6c 58 58 integrationParam,//!< integrationParam, integration method to use in MBPT2 R12 59 59 theoryParam, //!< theoryParam, level of theory to use 60 jobtypeParam, //!< jobtypeParam, job type to use61 60 unknownParam}; //!< unknownParam, designates an unknown parameter 62 61 … … 70 69 MBPT2_R12, //!< Moeller Plesset Perturbation Theory second order with R12 integral 71 70 unknownTheory //!< designates an unknown theory 72 };73 74 /** Enumeration of all known jobtypes.75 *76 */77 enum Jobtype {78 Default, //!< standard energy and force calculation79 Optimization, //!< additional optimization of geometry80 unknownJob //!< designates an unknown job81 71 }; 82 72 … … 103 93 const std::string &getParameterName(const enum Parameters param) const; 104 94 const std::string &getTheoryName(const enum Theory theory) const; 105 const std::string &getJobtypeName(const enum Jobtype jobtype) const;106 95 const std::string &getIntegrationMethodName(const enum IntegrationMethod integration) const; 107 96 … … 110 99 //!> vector with all available theories in same order as enum Theory. 111 100 std::vector<std::string> ValidTheories; 112 113 //!> vector with all available jobtypes in same order as enum Jobs.114 std::vector<std::string> ValidJobtypes;115 101 116 102 //!> vector with all available integration methods in same order as enum IntegrationMethod. -
src/Parser/unittests/ParserMpqcUnitTest.cpp
re38750 rdace6c 63 63 static string waterMpqc_CLHF ="% Created by MoleCuilder\n\ 64 64 mpqc: (\n\ 65 \tcheckpoint = no\n\66 65 \tsavestate = no\n\ 67 66 \tdo_gradient = yes\n\ … … 87 86 static string waterMpqc_CLKS ="% Created by MoleCuilder\n\ 88 87 mpqc: (\n\ 89 \tcheckpoint = no\n\90 88 \tsavestate = no\n\ 91 89 \tdo_gradient = yes\n\ … … 112 110 static string waterMpqc_MBPT2 ="% Created by MoleCuilder\n\ 113 111 mpqc: (\n\ 114 \tcheckpoint = no\n\115 112 \tsavestate = no\n\ 116 113 \tdo_gradient = yes\n\ … … 141 138 static string waterMpqc_MBPT2_R12 ="% Created by MoleCuilder\n\ 142 139 mpqc: (\n\ 143 \tcheckpoint = no\n\144 140 \tsavestate = no\n\ 145 141 \tdo_gradient = yes\n\ -
src/UIElements/CommandLineUI/CommandLineParser.cpp
re38750 rdace6c 390 390 // currentOption->hasDefaultValue() ? 391 391 // po::value < const element * >()->default_value(boost::lexical_cast<const element *>(currentOption->getDefaultValue().c_str())) : 392 po::value < std::string>(),392 po::value < int >(), 393 393 currentOption->getDescription().c_str()) 394 394 ; … … 399 399 // currentOption->hasDefaultValue() ? 400 400 // po::value < std::vector<const element *> >()->default_value(boost::lexical_cast< std::vector<const element *> >(currentOption->getDefaultValue().c_str())) : 401 po::value < std::vector< std::string> >()->multitoken(),401 po::value < std::vector<int> >()->multitoken(), 402 402 currentOption->getDescription().c_str()) 403 403 ; -
src/UIElements/CommandLineUI/Query/ElementCommandLineQuery.cpp
re38750 rdace6c 36 36 #include "CodePatterns/MemDebug.hpp" 37 37 38 #include <string>39 40 38 #include "CommandLineUI/Query/CommandLineQuery.hpp" 41 39 #include "CommandLineUI/CommandLineParser.hpp" … … 56 54 // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector? 57 55 periodentafel *periode = World::getInstance().getPeriode(); 56 int Z = -1; 58 57 if (CommandLineParser::getInstance().vm.count(getTitle())) { 59 std::string argument("none");60 58 try { 61 argument = CommandLineParser::getInstance().vm[getTitle()].as< std::string >(); 62 try { 63 int Z = -1; 64 Z = boost::lexical_cast<int>(argument); 65 temp = periode->FindElement(Z); 66 } catch(boost::bad_lexical_cast &e) { 67 temp = periode->FindElement(argument); 68 } 59 Z = CommandLineParser::getInstance().vm[getTitle()].as< int >(); 69 60 } catch(boost::bad_any_cast &e) { 61 Z = -1; 70 62 return false; 71 63 } 64 temp = periode->FindElement(Z); 72 65 ASSERT(temp != NULL, "Invalid element specified in ElementCommandLineQuery"); 73 66 return true; -
src/UIElements/CommandLineUI/Query/ElementsCommandLineQuery.cpp
re38750 rdace6c 36 36 #include "CodePatterns/MemDebug.hpp" 37 37 38 #include <string>39 40 38 #include "CommandLineUI/Query/CommandLineQuery.hpp" 41 39 #include "CommandLineUI/CommandLineParser.hpp" … … 53 51 {} 54 52 55 template <typename T>56 std::vector<const element *> getElementsFromInput(const std::vector<std::string> &_input)57 {58 periodentafel *periode = World::getInstance().getPeriode();59 std::vector<const element *> result;60 const element *temp_element;61 for (typename std::vector<std::string>::const_iterator ZRunner = _input.begin(); ZRunner != _input.end(); ++ZRunner) {62 const T argument = boost::lexical_cast<T>(*ZRunner);63 temp_element = periode->FindElement(argument);64 ASSERT(temp_element != NULL, "Invalid element specified in ElementCommandLineQuery");65 result.push_back(temp_element);66 }67 return result;68 }69 70 53 bool CommandLineDialog::ElementsCommandLineQuery::handle() { 71 54 // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector? 55 periodentafel *periode = World::getInstance().getPeriode(); 56 std::vector<int> AllElements; 72 57 if (CommandLineParser::getInstance().vm.count(getTitle())) { 73 58 try { 74 std::vector<std::string> AllArguments; 75 AllArguments = CommandLineParser::getInstance().vm[getTitle()].as< vector<std::string> >(); 76 try { 77 temp = getElementsFromInput<int>(AllArguments); 78 } catch(boost::bad_lexical_cast &e) { 79 try { 80 temp = getElementsFromInput<std::string>(AllArguments); 81 } catch(boost::bad_lexical_cast &e) { 82 return false; 83 } 84 } 59 AllElements = CommandLineParser::getInstance().vm[getTitle()].as< vector<int> >(); 85 60 } catch(boost::bad_any_cast &e) { 61 AllElements.clear(); 86 62 return false; 87 63 } 88 if (temp.empty()) 89 return false; 90 else 91 return true; 64 const element *temp_element; 65 for (vector<int>::iterator ZRunner = AllElements.begin(); ZRunner != AllElements.end(); ++ZRunner) { 66 temp_element = periode->FindElement(*ZRunner); 67 ASSERT(temp_element != NULL, "Invalid element specified in ElementCommandLineQuery"); 68 temp.push_back(temp_element); 69 } 70 return true; 92 71 } 93 72 return false; -
src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
re38750 rdace6c 85 85 const Observable::channels_t GLMoleculeObject_molecule::AtomsChannels(getAtomsChannels()); 86 86 const Observable::channels_t GLMoleculeObject_molecule::HullChannels(getAllAtomicChangesChannels()); 87 const Observable::channels_t GLMoleculeObject_molecule::BoundingBoxChannels( 1, molecule::BoundingBoxChanged);87 const Observable::channels_t GLMoleculeObject_molecule::BoundingBoxChannels(getAllAtomicChangesChannels()); 88 88 const Observable::channels_t GLMoleculeObject_molecule::IndexChannels(1, molecule::IndexChanged); 89 89 const Observable::channels_t GLMoleculeObject_molecule::NameChannels(1, molecule::MoleculeNameChanged); … … 403 403 } 404 404 405 molecule::BoundingBoxInfo GLMoleculeObject_molecule::initBoundingBox() const406 { 407 molecule::BoundingBoxInfo info;405 GLMoleculeObject_molecule::BoundingBoxInfo GLMoleculeObject_molecule::initBoundingBox() const 406 { 407 BoundingBoxInfo info; 408 408 info.position = zeroVec; 409 409 info.radius = 0.; … … 411 411 } 412 412 413 molecule::BoundingBoxInfo GLMoleculeObject_molecule::updateBoundingBox() const414 { 415 molecule::BoundingBoxInfo info = BoundingBox.get();413 GLMoleculeObject_molecule::BoundingBoxInfo GLMoleculeObject_molecule::updateBoundingBox() const 414 { 415 BoundingBoxInfo info = BoundingBox.get(); 416 416 const molecule * const _molecule = getMolecule(MolIndex.get()); 417 417 if (_molecule != NULL) { … … 472 472 void GLMoleculeObject_molecule::resetBoundingBox() 473 473 { 474 molecule::BoundingBoxInfo info = BoundingBox.get();474 BoundingBoxInfo info = BoundingBox.get(); 475 475 setPosition(QVector3D(info.position[0], info.position[1], info.position[2])); 476 476 setScale(info.radius + 0.3); // getBoundingSphere() only sees atoms as points, so make the box a bit bigger -
src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
re38750 rdace6c 24 24 #include "GLMoleculeObject_bond.hpp" 25 25 26 #include "molecule.hpp"27 28 26 class atom; 29 27 class bond; 30 28 class GLMoleculeObject_atom; 31 29 class GLWorldScene; 30 class molecule; 32 31 33 32 class GLMoleculeObject_molecule : public GLMoleculeObject, public Observer … … 110 109 typedef std::set<atomId_t> atoms_t; 111 110 112 molecule::BoundingBoxInfo initBoundingBox() const; 111 /** Structure for the required information on the bounding box. 112 * 113 */ 114 struct BoundingBoxInfo { 115 //!> position of center 116 Vector position; 117 //!> radius of sphere 118 double radius; 119 }; 120 121 /** Structure for the required information on the tesselation hull. 122 * 123 */ 124 struct TesselationHullInfo { 125 }; 126 127 BoundingBoxInfo initBoundingBox() const; 113 128 114 129 QGeometryData updateTesselationHull() const; 115 molecule::BoundingBoxInfo updateBoundingBox() const;130 BoundingBoxInfo updateBoundingBox() const; 116 131 atoms_t updateAtoms(); 117 132 moleculeId_t updateIndex() const; … … 138 153 boost::function<std::string ()> MolNameUpdater; 139 154 boost::function<QGeometryData ()> TesselationHullUpdater; 140 boost::function< molecule::BoundingBoxInfo ()> BoundingBoxUpdater;155 boost::function<BoundingBoxInfo ()> BoundingBoxUpdater; 141 156 boost::function<atoms_t ()> PresentAtomsUpdater; 142 157 … … 148 163 Cacheable<QGeometryData> TesselationHull; 149 164 //!> contains newest version of the bounding box on request 150 ObservedValue< molecule::BoundingBoxInfo> BoundingBox;165 ObservedValue<BoundingBoxInfo> BoundingBox; 151 166 //!> contains the current live set of atoms for the molecule 152 167 ObservedValue<atoms_t> PresentAtoms; -
src/World.cpp
re38750 rdace6c 396 396 if (isAtomSelected(id)) 397 397 selectedAtoms.erase(id); 398 atoms.erase(id); 398 399 DeleteAtom(atom); 399 atoms.erase(id);400 400 atomIdPool.releaseId(id); 401 401 // remove molecule if empty -
src/molecule.cpp
re38750 rdace6c 36 36 37 37 #include <algorithm> 38 #include <boost/assign.hpp>39 38 #include <boost/bind.hpp> 40 39 #include <boost/foreach.hpp> … … 51 50 #include "CodePatterns/enumeration.hpp" 52 51 #include "CodePatterns/Log.hpp" 53 #include "CodePatterns/Observer/Observable.hpp"54 52 #include "CodePatterns/Observer/Notification.hpp" 55 53 #include "config.hpp" … … 69 67 #include "WorldTime.hpp" 70 68 71 using namespace boost::assign;72 73 // static entities74 static Observable::channels_t getBoundingBoxChannels()75 {76 Observable::channels_t channels;77 channels += molecule::AtomInserted, molecule::AtomRemoved, molecule::AtomMoved;78 return channels;79 }80 69 81 70 /************************************* Functions for class molecule *********************************/ … … 94 83 BondCount(this,boost::bind(&molecule::doCountBonds,this),"BondCount"), 95 84 atomIdPool(1, 20, 100), 96 BoundingBoxSweepingAxis(std::vector<AtomDistanceMap_t>(NDIM)),97 85 _lastchangedatomid(-1), 98 86 last_atom(0) … … 104 92 OurChannel->addChannel(type); 105 93 106 // cannot initialize in initializer body as then channels have not been setup yet107 BoundingBox.reset(108 new Cacheable<BoundingBoxInfo>(109 this, boost::bind(&molecule::updateBoundingBox, boost::cref(this)), "molecule_BoundingBox", getBoundingBoxChannels()));110 111 94 strcpy(name,World::getInstance().getDefaultName().c_str()); 112 } 95 }; 113 96 114 97 molecule *NewMolecule(){ … … 187 170 } 188 171 189 bool molecule::changeAtomId(int oldId, int newId)190 {191 OBSERVE;192 if ((!atomIds.contains( oldId )) || (atomIds.contains( newId )))193 return false;194 atomIds.erase( oldId );195 atomIds.insert( newId );196 // also update BoundingBoxSweepingAxis197 for (int i=0;i<NDIM;++i) {198 AtomDistanceMap_t::left_iterator iter = BoundingBoxSweepingAxis[i].left.find(oldId);199 ASSERT(iter != BoundingBoxSweepingAxis[i].left.end(),200 "molecule::changeAtomId() - could not find atom "+toString(oldId)201 +" in BoundingBoxSweepingAxis.");202 const double component = iter->second;203 BoundingBoxSweepingAxis[i].left.erase(iter);204 BoundingBoxSweepingAxis[i].left.insert( std::make_pair(newId, component) );205 }206 return true;207 }208 209 172 bool molecule::changeId(moleculeId_t newId){ 210 173 // first we move ourselves in the world … … 264 227 atomIds.erase( _atom->getId() ); 265 228 { 266 BoundingBoxInfo oldinfo = updateBoundingBox();267 for (int i=0;i<NDIM;++i)268 BoundingBoxSweepingAxis[i].left.erase( _atom->getId() );269 BoundingBoxInfo newinfo = updateBoundingBox();270 if (oldinfo != newinfo)271 NOTIFY(BoundingBoxChanged);272 }273 {274 229 NOTIFY(AtomNrChanged); 275 230 atomIdPool.releaseId(_atom->getNr()); … … 285 240 molecule::const_iterator molecule::erase( atom * key ) 286 241 { 242 OBSERVE; 243 { 244 _lastchangedatomid = key->getId(); 245 NOTIFY(AtomRemoved); 246 } 287 247 const_iterator iter = const_cast<const molecule &>(*this).find(key); 288 if (iter != const_cast<const molecule &>(*this).end()) 289 return erase(iter); 290 else 291 return iter; 248 if (iter != const_cast<const molecule &>(*this).end()){ 249 ++iter; 250 atomIds.erase( key->getId() ); 251 { 252 NOTIFY(AtomNrChanged); 253 atomIdPool.releaseId(key->getNr()); 254 LocalToGlobalId.erase(key->getNr()); 255 key->setNr(-1); 256 } 257 NOTIFY(FormulaChanged); 258 formula-=key->getType(); 259 key->removeFromMolecule(); 260 } 261 return iter; 292 262 } 293 263 … … 299 269 std::pair<iterator,bool> res = atomIds.insert(key->getId()); 300 270 if (res.second) { // push atom if went well 301 {302 BoundingBoxInfo oldinfo = updateBoundingBox();303 for (int i=0;i<NDIM;++i)304 BoundingBoxSweepingAxis[i].left.insert( std::make_pair(key->getId(), key->getPosition()[i]));305 BoundingBoxInfo newinfo = updateBoundingBox();306 if (oldinfo != newinfo)307 NOTIFY(BoundingBoxChanged);308 }309 271 NOTIFY(AtomNrChanged); 310 272 key->setNr(atomIdPool.getNextId()); … … 1076 1038 } 1077 1039 1078 molecule::BoundingBoxInfo molecule::updateBoundingBox() const1079 {1080 BoundingBoxInfo info;1081 Vector min = zeroVec;1082 Vector max = zeroVec;1083 for (int i=0;i<NDIM;++i) {1084 if (!BoundingBoxSweepingAxis[i].right.empty()) {1085 min[i] = BoundingBoxSweepingAxis[i].right.begin()->first;1086 max[i] = BoundingBoxSweepingAxis[i].right.rbegin()->first;1087 }1088 }1089 info.radius = (.5*(max-min)).Norm();1090 info.position = .5*(max+min);1091 return info;1092 }1093 1094 molecule::BoundingBoxInfo molecule::getBoundingBox() const1095 {1096 return **BoundingBox;1097 }1098 1099 1040 void molecule::update(Observable *publisher) 1100 1041 { … … 1116 1057 // emit others about one of our atoms moved 1117 1058 _lastchangedatomid = _atom->getId(); 1118 // update entry in map1119 BoundingBoxInfo oldinfo = updateBoundingBox();1120 for (int i=0;i<NDIM;++i) {1121 AtomDistanceMap_t::left_iterator iter = BoundingBoxSweepingAxis[i].left.find(_atom->getId());1122 ASSERT(iter != BoundingBoxSweepingAxis[i].left.end(),1123 "molecule::recieveNotification() - could not find atom "+toString(_atom->getId())1124 +" in BoundingBoxSweepingAxis.");1125 BoundingBoxSweepingAxis[i].left.erase(iter);1126 BoundingBoxSweepingAxis[i].left.insert(1127 std::make_pair(_atom->getId(), _atom->getPosition()[i]) );1128 }1129 BoundingBoxInfo newinfo = updateBoundingBox();1130 1059 OBSERVE; 1131 1060 NOTIFY(AtomMoved); 1132 if (oldinfo != newinfo)1133 NOTIFY(BoundingBoxChanged);1134 1061 break; 1135 1062 } -
src/molecule.hpp
re38750 rdace6c 22 22 23 23 #include <string> 24 25 #include <boost/bimap/bimap.hpp>26 #include <boost/bimap/unordered_set_of.hpp>27 #include <boost/bimap/multiset_of.hpp>28 #include <boost/optional.hpp>29 #include <boost/shared_ptr.hpp>30 24 31 25 #include "AtomIdSet.hpp" … … 121 115 MoleculeNameChanged, 122 116 IndexChanged, 123 BoundingBoxChanged,124 117 AboutToBeRemoved, 125 118 NotificationType_MAX … … 245 238 bool changeAtomNr(int oldNr, int newNr, atom* target=0); 246 239 247 friend bool atom::changeId(atomId_t newId);248 /**249 * used when changing an ParticleInfo::Id.250 * Note that this number is global (and the molecule uses it to know which atoms belong to it)251 *252 * @param oldId old Id253 * @param newId new Id to set254 * @return indicates wether the change could be done or not.255 */256 bool changeAtomId(int oldId, int newId);257 258 240 /** Updates the internal lookup fro local to global indices. 259 241 * … … 278 260 279 261 public: 280 281 /** Structure for the required information on the bounding box.282 *283 */284 struct BoundingBoxInfo {285 //!> position of center286 Vector position;287 //!> radius of sphere288 double radius;289 290 /** Equivalence operator for bounding box.291 *292 * \return true - both bounding boxes have same position and radius293 */294 bool operator==(const BoundingBoxInfo &_other) const295 { return (radius == _other.radius) && (position == _other.position); }296 297 /** Inequivalence operator for bounding box.298 *299 * \return true - bounding boxes have either different positions or different radii or both300 */301 bool operator!=(const BoundingBoxInfo &_other) const302 { return !(*this == _other); }303 };304 305 private:306 307 /** Returns the current bounding box.308 *309 * \return Shape with center and extension of box310 */311 BoundingBoxInfo updateBoundingBox() const;312 313 // stuff for keeping bounding box up-to-date efficiently314 315 //!> Cacheable for the bounding box, ptr such that316 boost::shared_ptr< Cacheable<BoundingBoxInfo> > BoundingBox;317 /** Bimap storing atomic ids and the component per axis.318 *319 * We need a bimap in order to have the components sorted and be able to320 * access max and min values in linear time and also access the ids in321 * constant time in order to update the map, when atoms move, are inserted,322 * or removed.323 */324 typedef boost::bimaps::bimap<325 boost::bimaps::unordered_set_of< atomId_t >,326 boost::bimaps::multiset_of< double, std::greater<double> >327 > AtomDistanceMap_t;328 std::vector<AtomDistanceMap_t> BoundingBoxSweepingAxis;329 330 public:331 332 /** Returns the current bounding box of this molecule.333 *334 * \return bounding box info with center and radius335 */336 BoundingBoxInfo getBoundingBox() const;337 262 338 263 /** Function to create a bounding spherical shape for the currently associated atoms. -
tests/regression/Atoms/Add/post/test.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Atoms/Add/post/test.pdb
re38750 rdace6c 1 1 REMARK created by molecuilder on Wed Feb 2 18:06:07 2011 2 ATOM 1 H01 0 non 0110.000 10.000 10.000 0.00 0.00 H 02 ATOM 1 H01 0- 00 10.000 10.000 10.000 0.00 0.00 H 0 3 3 END -
tests/regression/Atoms/Remove/post/test.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Atoms/Saturate/post/saturated_carbon.xyz
re38750 rdace6c 1 1 5 2 Created by molecuilder on Wed Sep 30 19:50:392015, time step 02 Created by molecuilder on Wed Jan 28 20:57:11 2015, time step 0 3 3 C 10 10 10 4 H 11.0 92310 105 H 9.6 3589 11.0299106 H 9.6 3589 9.48507 10.89197 H 9.6 3589 9.48507 9.108114 H 11.076 10 10 5 H 9.64133 11.0145 10 6 H 9.64133 9.49277 10.8786 7 H 9.64133 9.49277 9.12145 -
tests/regression/Atoms/Saturate/post/saturated_nitrogen.xyz
re38750 rdace6c 1 1 4 2 Created by molecuilder on Wed Sep 30 19:50:402015, time step 02 Created by molecuilder on Wed Jan 28 21:41:39 2015, time step 0 3 3 N 10 10 10 4 H 11.0 01510 105 H 9.49 92310.866 106 H 9.49 9239.13397 104 H 11.02 10 10 5 H 9.49 10.866 10 6 H 9.49 9.13397 10 -
tests/regression/Parser/Mpqc/post/doublewater.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Parser/Mpqc/post/empty.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Parser/Mpqc/post/test.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Parser/Mpqc/post/testCLHF.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/post/testCLKS.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/post/testMBPT2.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/post/testMBPT2_R12.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testCLHF.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testCLHF_n.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testCLHF_n_ascend_ids.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testCLHF_n_mixed_ids.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testCLKS.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testMBPT2.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/testMBPT2_R12.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/Mpqc/pre/water.in
re38750 rdace6c 1 1 % Created by MoleCuilder 2 2 mpqc: ( 3 checkpoint = no4 3 savestate = no 5 4 do_gradient = yes -
tests/regression/Parser/SetParameters/Mpqc/post/testCLHF.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes -
tests/regression/Parser/SetParameters/Mpqc/pre/testCLHF.in
re38750 rdace6c 1 1 mpqc: ( 2 checkpoint = no3 2 savestate = no 4 3 do_gradient = yes
Note:
See TracChangeset
for help on using the changeset viewer.