Ignore:
Timestamp:
Aug 28, 2010, 12:52:58 AM (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, Candidate_v1.7.0, 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:
b4fa106
Parents:
0b2ce9
git-author:
Frederik Heber <heber@…> (08/25/10 17:20:37)
git-committer:
Frederik Heber <heber@…> (08/28/10 00:52:58)
Message:

Extended macro framework.

Extensions:

  • all central definitions reside in .def files
    • This if file is necessary because we need the definitions at two places: hpp and cpp
    • And as we always use the same define names, we have to undefine them at the end of both (otherwise we get compiler warnings and are prone to dumb mistakes of forgotten defines seeming present)
  • the .hpp is just a very tiny header, that should be possible to batch- construct inside Makefile as well
  • .cpp includes some Action_...hpp files and implements the function

For later (i.e. when ActionRegistry becomes prototype copier)

  • instead of waiting for clone(), for now we simply call the prototype.
  • in the action command we must not yet prefix paramreferences with "params."

Changes:

  • Dialog::query<> is a template which is specialized for every present query...() function. We need it to automatize fillDialog()
  • all AnalysisAction's are now converted, i.e. framework is functional with parameters and queries (MolecularVolume had none).
File:
1 edited

Legend:

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

    r0b2ce9 r9ee38b  
    2020#include "Helpers/MemDebug.hpp"
    2121
    22 #include "Actions/AnalysisAction/SurfaceCorrelationAction.hpp"
    23 #include "Actions/ActionRegistry.hpp"
    2422#include "analysis_correlation.hpp"
    2523#include "boundary.hpp"
     
    3937using namespace std;
    4038
    41 #include "UIElements/UIFactory.hpp"
    42 #include "UIElements/Dialog.hpp"
    43 #include "Actions/ValueStorage.hpp"
     39#include "Actions/AnalysisAction/SurfaceCorrelationAction.hpp"
    4440
    45 const char AnalysisSurfaceCorrelationAction::NAME[] = "surface-correlation";
     41// and construct the stuff
     42#include "SurfaceCorrelationAction.def"
     43#include "Action_impl_pre.hpp"
    4644
    47 AnalysisSurfaceCorrelationAction::AnalysisSurfaceCorrelationAction() :
    48   Action(NAME)
    49 {}
    50 
    51 AnalysisSurfaceCorrelationAction::~AnalysisSurfaceCorrelationAction()
    52 {}
    53 
    54 void AnalysisSurfaceCorrelation(std::vector< element *> &elements, molecule *mol, double BinStart, double BinWidth, double BinEnd, std::string &outputname, std::string &binoutputname, bool periodic) {
    55   ValueStorage::getInstance().setCurrentValue("elements", elements);
    56   ValueStorage::getInstance().setCurrentValue("molecule-by-id", mol);
    57   ValueStorage::getInstance().setCurrentValue("bin-start", BinStart);
    58   ValueStorage::getInstance().setCurrentValue("bin-width", BinWidth);
    59   ValueStorage::getInstance().setCurrentValue("bin-end", BinEnd);
    60   ValueStorage::getInstance().setCurrentValue("output-file", outputname);
    61   ValueStorage::getInstance().setCurrentValue("bin-output-file", binoutputname);
    62   ValueStorage::getInstance().setCurrentValue("periodic", periodic);
    63   ActionRegistry::getInstance().getActionByName(AnalysisSurfaceCorrelationAction::NAME)->call(Action::NonInteractive);
    64 };
    65 
    66 
    67 void AnalysisSurfaceCorrelationAction::getParametersfromValueStorage()
    68 {};
    69 
    70 Dialog* AnalysisSurfaceCorrelationAction::fillDialog(Dialog *dialog) {
    71   ASSERT(dialog,"No Dialog given when filling action dialog");
    72 
    73   dialog->queryMolecule("molecule-by-id", ValueStorage::getInstance().getDescription("molecule-by-id"));
    74   dialog->queryElements("elements", ValueStorage::getInstance().getDescription("elements"));
    75   dialog->queryDouble("bin-start", ValueStorage::getInstance().getDescription("bin-start"));
    76   dialog->queryDouble("bin-width", ValueStorage::getInstance().getDescription("bin-width"));
    77   dialog->queryDouble("bin-end", ValueStorage::getInstance().getDescription("bin-end"));
    78   dialog->queryString("output-file", ValueStorage::getInstance().getDescription("output-file"));
    79   dialog->queryString("bin-output-file", ValueStorage::getInstance().getDescription("bin-output-file"));
    80   dialog->queryBoolean("periodic", ValueStorage::getInstance().getDescription("periodic"));
    81 
    82   return dialog;
    83 }
    84 
     45/** =========== define the function ====================== */
    8546Action::state_ptr AnalysisSurfaceCorrelationAction::performCall() {
    8647  int ranges[3] = {1, 1, 1};
    87   double BinEnd = 0.;
    88   double BinStart = 0.;
    89   double BinWidth = 0.;
    90   molecule *Boundary = NULL;
    91   string outputname;
    92   string binoutputname;
    93   bool periodic;
    9448  ofstream output;
    9549  ofstream binoutput;
    96   std::vector<const element *> elements;
    9750  string type;
    98   Vector Point;
    9951  BinPairMap *binmap = NULL;
    10052
    10153  // obtain information
    102   ValueStorage::getInstance().queryCurrentValue("molecule-by-id", Boundary);
    103   ValueStorage::getInstance().queryCurrentValue("elements", elements);
    104   ValueStorage::getInstance().queryCurrentValue("bin-start", BinStart);
    105   ValueStorage::getInstance().queryCurrentValue("bin-width", BinWidth);
    106   ValueStorage::getInstance().queryCurrentValue("bin-end", BinEnd);
    107   ValueStorage::getInstance().queryCurrentValue("output-file", outputname);
    108   ValueStorage::getInstance().queryCurrentValue("bin-output-file", binoutputname);
    109   ValueStorage::getInstance().queryCurrentValue("periodic", periodic);
     54  getParametersfromValueStorage();
    11055
    11156  // execute action
    112   output.open(outputname.c_str());
    113   binoutput.open(binoutputname.c_str());
    114   ASSERT(Boundary != NULL, "No molecule specified for SurfaceCorrelation.");
     57  output.open(params.outputname.c_str());
     58  binoutput.open(params.binoutputname.c_str());
     59  ASSERT(params.Boundary != NULL, "No molecule specified for SurfaceCorrelation.");
    11560  const double radius = 4.;
    11661  double LCWidth = 20.;
    117   if (BinEnd > 0) {
    118     if (BinEnd > 2.*radius)
    119       LCWidth = BinEnd;
     62  if (params.BinEnd > 0) {
     63    if (params.BinEnd > 2.*radius)
     64      LCWidth = params.BinEnd;
    12065    else
    12166      LCWidth = 2.*radius;
     
    12873  std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
    12974  std::cout << "There are " << molecules.size() << " selected molecules." << std::endl;
    130   LCList = new LinkedCell(Boundary, LCWidth);
    131   FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
     75  LCList = new LinkedCell(params.Boundary, LCWidth);
     76  FindNonConvexBorder(params.Boundary, TesselStruct, LCList, radius, NULL);
    13277  CorrelationToSurfaceMap *surfacemap = NULL;
    133   if (periodic)
    134     surfacemap = PeriodicCorrelationToSurface( molecules, elements, TesselStruct, LCList, ranges);
     78  if (params.periodic)
     79    surfacemap = PeriodicCorrelationToSurface( molecules, params.elements, TesselStruct, LCList, ranges);
    13580  else
    136     surfacemap = CorrelationToSurface( molecules, elements, TesselStruct, LCList);
     81    surfacemap = CorrelationToSurface( molecules, params.elements, TesselStruct, LCList);
    13782  delete LCList;
    13883  OutputCorrelationToSurface(&output, surfacemap);
     
    14489      DoeLog(1) && (eLog()<< Verbose(1) << "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << "." << endl);
    14590  }
    146   binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd );
     91  binmap = BinData( surfacemap, params.BinWidth, params.BinStart, params.BinEnd );
    14792  OutputCorrelation ( &binoutput, binmap );
    14893  delete TesselStruct;  // surfacemap contains refs to triangles! delete here, not earlier!
     
    173118  return NAME;
    174119}
     120/** =========== end of function ====================== */
Note: See TracChangeset for help on using the changeset viewer.