Ignore:
Timestamp:
Nov 3, 2011, 9:52:29 AM (13 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:
bbff92
Parents:
13510b (diff), 5837dd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'DipoleAngularCorrelation' into mergeMaster

Conflicts:

src/World.cpp

  • tiny conflict in World.cpp
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/AnalysisAction/DipoleAngularCorrelationAction.cpp

    r13510b r7ba268  
    99 * DipoleAngularCorrelationAction.cpp
    1010 *
    11  *  Created on: May 9, 2010
     11 *  Created on: Feb 11, 2011
    1212 *      Author: heber
    1313 */
     
    2323#include "Tesselation/boundary.hpp"
    2424#include "linkedcell.hpp"
    25 #include "CodePatterns/Verbose.hpp"
    2625#include "CodePatterns/Log.hpp"
     26#include "Descriptors/AtomOfMoleculeSelectionDescriptor.hpp"
     27#include "Descriptors/MoleculeFormulaDescriptor.hpp"
    2728#include "Element/element.hpp"
    28 #include "molecule.hpp"
    2929#include "Element/periodentafel.hpp"
    3030#include "LinearAlgebra/Vector.hpp"
     31#include "molecule.hpp"
    3132#include "World.hpp"
     33#include "WorldTime.hpp"
    3234
    3335#include <iostream>
     36#include <map>
    3437#include <string>
    3538
     
    4548Action::state_ptr AnalysisDipoleAngularCorrelationAction::performCall() {
    4649  //int ranges[3] = {1, 1, 1};
    47   ofstream output;
    48   ofstream binoutput;
    4950  string type;
    50   BinPairMap *binmap = NULL;
    5151
    5252  // obtain information
    5353  getParametersfromValueStorage();
     54  ASSERT(!params.periodic, "AnalysisDipoleAngularCorrelationAction() - periodic case not implemented.");
    5455
    55   // execute action
    56   output.open(params.outputname.string().c_str());
    57   binoutput.open(params.binoutputname.string().c_str());
    58   DipoleAngularCorrelationMap *correlationmap = NULL;
    59   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
    60   DoLog(0) && (Log() << Verbose(0) << "There are " << molecules.size() << " selected molecules." << std::endl);
    61   ASSERT(!params.periodic, "AnalysisDipoleAngularCorrelationAction() - periodic case not implemented.");
    62   correlationmap = DipoleAngularCorrelation(molecules);
    63   OutputCorrelationMap<DipoleAngularCorrelationMap>(&output, correlationmap, OutputDipoleAngularCorrelation_Header, OutputDipoleAngularCorrelation_Value);
    64   binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
    65   OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
    66   delete(binmap);
    67   delete(correlationmap);
    68   output.close();
    69   binoutput.close();
     56  // get selected atoms
     57  std::vector<atom*> old_atom_selection = World::getInstance().getSelectedAtoms();
     58  std::vector<molecule*> old_molecule_selection = World::getInstance().getSelectedMolecules();
     59
     60  // get current time step
     61  const unsigned int oldtime = WorldTime::getTime();
     62
     63  // select atoms and obtain zero dipole orientation
     64  Formula DipoleFormula(params.DipoleFormula);
     65  World::getInstance().setTime(params.timestepzero);
     66  World::getInstance().clearMoleculeSelection(); // TODO: This should be done in setTime or where molecules are re-done
     67  World::getInstance().selectAllMolecules(MoleculeByFormula(DipoleFormula));
     68  std::vector<molecule *> molecules = World::getInstance().getSelectedMolecules();
     69  std::map<atomId_t, Vector> ZeroVector = CalculateZeroAngularDipole(molecules);
     70
     71  // go through each step of common trajectory of all atoms in set
     72  World::getInstance().clearAtomSelection();
     73  World::getInstance().selectAllAtoms(AtomsByMoleculeSelection());
     74  std::vector<atom *> atoms = World::getInstance().getSelectedAtoms();
     75  ASSERT(!atoms.empty(),
     76      "AnalysisDipoleAngularCorrelationAction::performCall() - "
     77      +toString(DipoleFormula)+" selects no atoms.");
     78  range<size_t> timesteps = getMaximumTrajectoryBounds(atoms);
     79  ASSERT(params.timestepzero < timesteps.first,
     80    "AnalysisDipoleAngularCorrelationAction::performCall() - time step zero "
     81    +toString(params.timestepzero)+" is beyond trajectory range ("
     82    +toString(timesteps.first)+") of some atoms.");
     83  for (size_t step = params.timestepzero; step < timesteps.first; ++step) {
     84    // calculate dipoles relative to zero orientation
     85    DipoleAngularCorrelationMap *correlationmap = NULL;
     86    correlationmap = DipoleAngularCorrelation(DipoleFormula, step, ZeroVector, DontResetTime);
     87
     88    // prepare step string in filename
     89    std::stringstream stepstream;
     90    stepstream << std::setw(4) << std::setfill('0') << step;
     91    const std::string stepname(stepstream.str());
     92
     93    // output correlation map
     94    ofstream output;
     95    std::string filename = params.outputname.string()+"."+stepname+".dat";
     96    output.open(filename.c_str());
     97    OutputCorrelationMap<DipoleAngularCorrelationMap>(&output, correlationmap, OutputDipoleAngularCorrelation_Header, OutputDipoleAngularCorrelation_Value);
     98    output.close();
     99
     100    // bin map
     101    BinPairMap *binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
     102
     103    // free correlation map
     104    delete(correlationmap);
     105
     106    // output binned map
     107    ofstream binoutput;
     108    std::string binfilename = params.binoutputname.string()+"."+stepname+".dat";
     109    binoutput.open(binfilename.c_str());
     110    OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
     111    binoutput.close();
     112
     113    // free binned map
     114    delete(binmap);
     115  }
     116
     117  // reset to old time step
     118  World::getInstance().setTime(oldtime);
     119
     120  // reset to old selections
     121  World::getInstance().clearAtomSelection();
     122  BOOST_FOREACH(atom *_atom, old_atom_selection) {
     123    World::getInstance().selectAtom(_atom);
     124  }
     125  World::getInstance().clearMoleculeSelection();
     126  BOOST_FOREACH(molecule *_mol, old_molecule_selection) {
     127    World::getInstance().selectMolecule(_mol);
     128  }
     129
     130  // exit
    70131  return Action::success;
    71132}
Note: See TracChangeset for help on using the changeset viewer.