- Timestamp:
- Mar 27, 2012, 3:53:35 PM (13 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 46c832
- Parents:
- 955b91
- git-author:
- Frederik Heber <heber@…> (03/19/12 16:42:39)
- git-committer:
- Frederik Heber <heber@…> (03/27/12 15:53:35)
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/MoleculeListClass.hpp
r955b91 r4d2b33 53 53 int CountAllAtoms() const; 54 54 55 // Methods moved here from the menus56 // TODO: more refactoring needed on these methods57 void createNewMolecule(periodentafel *periode);58 void loadFromXYZ(periodentafel *periode);59 void setMoleculeFilename();60 void parseXYZIntoMolecule();61 void eraseMolecule();62 63 55 private: 64 56 World *world; //!< The world this List belongs to. Needed to avoid deadlocks in the destructor -
src/molecule.cpp
r955b91 r4d2b33 36 36 #include "Descriptors/AtomIdDescriptor.hpp" 37 37 #include "Element/element.hpp" 38 #include "Element/periodentafel.hpp"39 38 #include "Graph/BondGraph.hpp" 40 39 #include "LinearAlgebra/Exceptions.hpp" … … 55 54 * Initialises molecule list with correctly referenced start and end, and sets molecule::last_atom to zero. 56 55 */ 57 molecule::molecule( const periodentafel * const teil) :56 molecule::molecule() : 58 57 Observable("molecule"), 59 elemente(teil),60 58 MDSteps(0), 61 59 NoNonHydrogen(0), … … 74 72 75 73 molecule *NewMolecule(){ 76 return new molecule( World::getInstance().getPeriode());74 return new molecule(); 77 75 } 78 76 … … 590 588 }; 591 589 592 /** Adds given atom \a *pointer from molecule list.593 * Increases molecule::last_atom and gives last number to added atom.594 * \param filename name and path of xyz file595 * \return true - succeeded, false - file not found596 */597 bool molecule::AddXYZFile(std::string filename)598 {599 600 istringstream *input = NULL;601 int NumberOfAtoms = 0; // atom number in xyz read602 int i; // loop variables603 atom *Walker = NULL; // pointer to added atom604 char shorthand[3]; // shorthand for atom name605 ifstream xyzfile; // xyz file606 string line; // currently parsed line607 double x[3]; // atom coordinates608 609 xyzfile.open(filename.c_str());610 if (!xyzfile)611 return false;612 613 OBSERVE;614 getline(xyzfile,line,'\n'); // Read numer of atoms in file615 input = new istringstream(line);616 *input >> NumberOfAtoms;617 LOG(0, "Parsing " << NumberOfAtoms << " atoms in file.");618 getline(xyzfile,line,'\n'); // Read comment619 LOG(1, "Comment: " << line);620 621 if (MDSteps == 0) // no atoms yet present622 MDSteps++;623 for(i=0;i<NumberOfAtoms;i++){624 Walker = World::getInstance().createAtom();625 getline(xyzfile,line,'\n');626 istringstream *item = new istringstream(line);627 //istringstream input(line);628 //LOG(1, "Reading: " << line);629 *item >> shorthand;630 *item >> x[0];631 *item >> x[1];632 *item >> x[2];633 Walker->setType(elemente->FindElement(shorthand));634 if (Walker->getType() == NULL) {635 ELOG(1, "Could not parse the element at line: '" << line << "', setting to H.");636 Walker->setType(1);637 }638 639 Walker->setPosition(Vector(x));640 Walker->setPositionAtStep(MDSteps-1, Vector(x));641 Walker->setAtomicVelocityAtStep(MDSteps-1, zeroVec);642 Walker->setAtomicForceAtStep(MDSteps-1, zeroVec);643 AddAtom(Walker); // add to molecule644 delete(item);645 }646 xyzfile.close();647 delete(input);648 return true;649 };650 651 590 /** Creates a copy of this molecule. 652 591 * \return copy of molecule -
src/molecule.hpp
r955b91 r4d2b33 84 84 typedef boost::transform_iterator<FromIdToAtom, atomIdSet::const_iterator, const atom *, atomId_t const &> const_iterator; 85 85 86 const periodentafel * const elemente; //!< periodic table with each element87 86 int MDSteps; //!< The number of MD steps in Trajectories 88 87 mutable int NoNonHydrogen; //!< number of non-hydrogen atoms in molecule … … 103 102 protected: 104 103 105 molecule( const periodentafel * const teil);104 molecule(); 106 105 virtual ~molecule(); 107 106 … … 188 187 /// Add/remove atoms to/from molecule. 189 188 atom * AddCopyAtom(atom *pointer); 190 bool AddXYZFile(std::string filename);191 189 bool AddHydrogenReplacementAtom(bond *Bond, atom *BottomOrigin, atom *TopOrigin, atom *TopReplacement, bool IsAngstroem); 192 190 bond * AddBond(atom *first, atom *second, int degree = 1); -
src/moleculelist.cpp
r955b91 r4d2b33 633 633 return AtomNo; 634 634 } 635 636 /***********637 * Methods Moved here from the menus638 */639 640 void MoleculeListClass::createNewMolecule(periodentafel *periode) {641 OBSERVE;642 molecule *mol = NULL;643 mol = World::getInstance().createMolecule();644 insert(mol);645 };646 647 void MoleculeListClass::loadFromXYZ(periodentafel *periode){648 molecule *mol = NULL;649 Vector center;650 char filename[MAXSTRINGSIZE];651 std::cout << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;652 mol = World::getInstance().createMolecule();653 do {654 std::cout << "Enter file name: ";655 cin >> filename;656 } while (!mol->AddXYZFile(filename));657 mol->SetNameFromFilename(filename);658 // center at set box dimensions659 mol->CenterEdge(¢er);660 RealSpaceMatrix domain;661 for(int i =0;i<NDIM;++i)662 domain.at(i,i) = center[i];663 World::getInstance().setDomain(domain);664 insert(mol);665 }666 667 void MoleculeListClass::setMoleculeFilename() {668 char filename[MAXSTRINGSIZE];669 int nr;670 molecule *mol = NULL;671 do {672 std::cout << "Enter index of molecule: ";673 cin >> nr;674 mol = ReturnIndex(nr);675 } while (mol == NULL);676 std::cout << "Enter name: ";677 cin >> filename;678 mol->SetNameFromFilename(filename);679 }680 681 void MoleculeListClass::parseXYZIntoMolecule(){682 char filename[MAXSTRINGSIZE];683 int nr;684 molecule *mol = NULL;685 mol = NULL;686 do {687 std::cout << "Enter index of molecule: ";688 cin >> nr;689 mol = ReturnIndex(nr);690 } while (mol == NULL);691 std::cout << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;692 do {693 std::cout << "Enter file name: ";694 cin >> filename;695 } while (!mol->AddXYZFile(filename));696 mol->SetNameFromFilename(filename);697 };698 699 void MoleculeListClass::eraseMolecule(){700 int nr;701 molecule *mol = NULL;702 std::cout << "Enter index of molecule: ";703 cin >> nr;704 for(MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++)705 if (nr == (*ListRunner)->IndexNr) {706 mol = *ListRunner;707 ListOfMolecules.erase(ListRunner);708 World::getInstance().destroyMolecule(mol);709 break;710 }711 };
Note:
See TracChangeset
for help on using the changeset viewer.