Changeset cb85c2e for src


Ignore:
Timestamp:
Mar 2, 2010, 4:12:19 PM (15 years ago)
Author:
Frederik Heber <heber@…>
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:
c5805a
Parents:
8db598
Message:

ManipulateAtoms() can turn atoms around bonds again, in ParseCommandLineOptions() case 'C' Binwidth can be specified.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/builder.cpp

    r8db598 rcb85c2e  
    655655static void ManipulateAtoms(periodentafel *periode, MoleculeListClass *molecules, config *configuration)
    656656{
    657   atom *first, *second;
     657  atom *first, *second, *third;
    658658  molecule *mol = NULL;
    659659  Vector x,y,z,n; // coordinates for absolute point in cell volume
     
    667667  Log() << Verbose(0) << "r - remove an atom" << endl;
    668668  Log() << Verbose(0) << "b - scale a bond between atoms" << endl;
     669  Log() << Verbose(0) << "t - turn an atom round another bond" << endl;
    669670  Log() << Verbose(0) << "u - change an atoms element" << endl;
    670671  Log() << Verbose(0) << "l - measure lengths, angles, ... for an atom" << endl;
     
    746747        RemoveAtoms(mol);
    747748      }
     749      break;
     750
     751    case 't': // turn/rotate atom
     752      for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
     753        if ((*ListRunner)->ActiveFlag) {
     754          mol = *ListRunner;
     755          Log() << Verbose(0) << "Turning atom around another bond - first is atom to turn, second (central) and third specify bond" << endl;
     756          first = mol->AskAtom("Enter turning atom: ");
     757          second = mol->AskAtom("Enter central atom: ");
     758          third  = mol->AskAtom("Enter bond atom: ");
     759          cout << Verbose(0) << "Enter new angle in degrees: ";
     760          double tmp = 0.;
     761          cin >> tmp;
     762          // calculate old angle
     763          x.CopyVector((const Vector *)&first->x);
     764          x.SubtractVector((const Vector *)&second->x);
     765          y.CopyVector((const Vector *)&third->x);
     766          y.SubtractVector((const Vector *)&second->x);
     767          double alpha = (acos(x.ScalarProduct((const Vector *)&y)/(y.Norm()*x.Norm()))/M_PI*180.);
     768          cout << Verbose(0) << "Bond angle between first atom Nr." << first->nr << ", central atom Nr." << second->nr << " and last atom Nr." << third->nr << ": ";
     769          cout << Verbose(0) << alpha << " degrees" << endl;
     770          // rotate
     771          z.MakeNormalVector(&x,&y);
     772          x.RotateVector(&z,(alpha-tmp)*M_PI/180.);
     773          x.AddVector(&second->x);
     774          first->x.CopyVector(&x);
     775          // check new angle
     776          x.CopyVector((const Vector *)&first->x);
     777          x.SubtractVector((const Vector *)&second->x);
     778          alpha = (acos(x.ScalarProduct((const Vector *)&y)/(y.Norm()*x.Norm()))/M_PI*180.);
     779          cout << Verbose(0) << "new Bond angle between first atom Nr." << first->nr << ", central atom Nr." << second->nr << " and last atom Nr." << third->nr << ": ";
     780          cout << Verbose(0) << alpha << " degrees" << endl;
     781        }
    748782      break;
    749783
     
    14131447            Log() << Verbose(0) << "\t-B xx xy xz yy yz zz\tBound atoms by domain with given symmetric matrix of (xx,xy,xz,yy,yz,zz)." << endl;
    14141448            Log() << Verbose(0) << "\t-c x1 x2 x3\tCenter atoms in domain with a minimum distance to boundary of (x1,x2,x3)." << endl;
    1415             Log() << Verbose(0) << "\t-C <type> [params] <output> <bin output> <BinStart> <BinEnd>\tPair Correlation analysis." << endl;
     1449            Log() << Verbose(0) << "\t-C <type> [params] <output> <bin output> <BinWidth> <BinStart> <BinEnd>\tPair Correlation analysis." << endl;
    14161450            Log() << Verbose(0) << "\t-d x1 x2 x3\tDuplicate cell along each axis by given factor." << endl;
    14171451            Log() << Verbose(0) << "\t-D <bond distance>\tDepth-First-Search Analysis of the molecule, giving cycles and tree/back edges." << endl;
     
    17431777                  case 'S':
    17441778                    {
    1745                       if ((argptr+5 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
     1779                      if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
    17461780                        ExitFlag = 255;
    1747                         eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output>" << endl;
     1781                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output> <BinWidth> <BinStart> <BinEnd>" << endl;
    17481782                        performCriticalExit();
    17491783                      } else {
     
    17511785                        ofstream binoutput(argv[argptr+3]);
    17521786                        const double radius = 4.;
    1753                         const double BinStart = atof(argv[argptr+4]);
    1754                         const double BinEnd = atof(argv[argptr+5]);
     1787                        const double BinWidth = atof(argv[argptr+4]);
     1788                        const double BinStart = atof(argv[argptr+5]);
     1789                        const double BinEnd = atof(argv[argptr+6]);
    17551790                        double LCWidth = 20.;
    17561791                        if (BinEnd > 0) {
     
    17921827                          eLog() << Verbose(1) << "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << "." << endl;
    17931828                        }
    1794                         BinPairMap *binmap = BinData( surfacemap, 0.5, BinStart, BinEnd );
     1829                        BinPairMap *binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd );
    17951830                        OutputCorrelation ( &binoutput, binmap );
    17961831                        output.close();
     
    18031838                        delete(binmap);
    18041839                        delete(surfacemap);
    1805                         argptr+=6;
     1840                        argptr+=7;
    18061841                      }
    18071842                    }
Note: See TracChangeset for help on using the changeset viewer.