Ignore:
Timestamp:
Jul 22, 2010, 7:11:35 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:
75dc28
Parents:
0c9cc3
Message:

Split PairCorrelation into Pair, Point and SurfaceCorrelation.

  • also converted to new createDialog().
Location:
src/Actions/AnalysisAction
Files:
4 added
2 edited

Legend:

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

    r0c9cc3 rd02e07  
    3838{}
    3939
     40Dialog* AnalysisPairCorrelationAction::createDialog() {
     41  Dialog *dialog = UIFactory::getInstance().makeDialog();
     42  int ranges[3] = {1, 1, 1};
     43  double BinEnd = 0.;
     44  double BinStart = 0.;
     45  double BinWidth = 0.;
     46  molecule *Boundary = NULL;
     47  string outputname;
     48  string binoutputname;
     49  bool periodic;
     50  ofstream output;
     51  ofstream binoutput;
     52  std::vector< element *> elements;
     53  string type;
     54  Vector Point;
     55  BinPairMap *binmap = NULL;
     56
     57  dialog->queryElement("elements", &elements, MapOfActions::getInstance().getDescription("elements"));
     58  dialog->queryDouble("bin-start", &BinStart, MapOfActions::getInstance().getDescription("bin-start"));
     59  dialog->queryDouble("bin-width", &BinWidth, MapOfActions::getInstance().getDescription("bin-width"));
     60  dialog->queryDouble("bin-end", &BinEnd, MapOfActions::getInstance().getDescription("bin-end"));
     61  dialog->queryString("output-file", &outputname, MapOfActions::getInstance().getDescription("output-file"));
     62  dialog->queryString("bin-output-file", &binoutputname, MapOfActions::getInstance().getDescription("bin-output-file"));
     63  dialog->queryBoolean("periodic", &periodic, MapOfActions::getInstance().getDescription("periodic"));
     64
     65  return dialog;
     66}
     67
    4068Action::state_ptr AnalysisPairCorrelationAction::performCall() {
    41   Dialog *dialog = UIFactory::getInstance().makeDialog();
    4269  int ranges[3] = {1, 1, 1};
    4370  double BinEnd = 0.;
     
    5683  MoleculeListClass *molecules = World::getInstance().getMolecules();
    5784
    58   // first dialog: Obtain which type of correlation
    59   dialog->queryString(NAME, &type, MapOfActions::getInstance().getDescription(NAME));
    60   if(dialog->display()) {
    61     delete dialog;
    62   } else {
    63     delete dialog;
    64     return Action::failure;
    65   }
     85  // obtain information
     86  MapOfActions::getInstance().queryCurrentValue("elements", elements);
     87  MapOfActions::getInstance().queryCurrentValue("bin-start", BinStart);
     88  MapOfActions::getInstance().queryCurrentValue("bin-width", BinWidth);
     89  MapOfActions::getInstance().queryCurrentValue("bin-end", BinEnd);
     90  MapOfActions::getInstance().queryCurrentValue("output-file", outputname);
     91  MapOfActions::getInstance().queryCurrentValue("bin-output-file", binoutputname);
     92  MapOfActions::getInstance().queryCurrentValue("periodic", periodic);
    6693
    67   // second dialog: Obtain parameters specific to this type
    68   dialog = UIFactory::getInstance().makeDialog();
    69   if (type == "P")
    70     dialog->queryVector("position", &Point, false, MapOfActions::getInstance().getDescription("position"));
    71   if (type == "S")
    72     dialog->queryMolecule("molecule-by-id", &Boundary, MapOfActions::getInstance().getDescription("molecule-by-id"));
    73   dialog->queryElement("elements", &elements, MapOfActions::getInstance().getDescription("elements"));
    74   dialog->queryDouble("bin-start", &BinStart, MapOfActions::getInstance().getDescription("bin-start"));
    75   dialog->queryDouble("bin-width", &BinWidth, MapOfActions::getInstance().getDescription("bin-width"));
    76   dialog->queryDouble("bin-end", &BinEnd, MapOfActions::getInstance().getDescription("bin-end"));
    77   dialog->queryString("output-file", &outputname, MapOfActions::getInstance().getDescription("output-file"));
    78   dialog->queryString("bin-output-file", &binoutputname, MapOfActions::getInstance().getDescription("bin-output-file"));
    79   dialog->queryBoolean("periodic", &periodic, MapOfActions::getInstance().getDescription("periodic"));
    80 
    81   if(dialog->display()) {
    82     output.open(outputname.c_str());
    83     binoutput.open(binoutputname.c_str());
    84     if (type == "E") {
    85       PairCorrelationMap *correlationmap = NULL;
    86       if (periodic)
    87         correlationmap = PeriodicPairCorrelation(World::getInstance().getMolecules(), elements, ranges);
    88       else
    89         correlationmap = PairCorrelation(World::getInstance().getMolecules(), elements);
    90       OutputPairCorrelation(&output, correlationmap);
    91       binmap = BinData( correlationmap, BinWidth, BinStart, BinEnd );
    92       OutputCorrelation ( &binoutput, binmap );
    93       delete(binmap);
    94       delete(correlationmap);
    95     } else if (type == "P")  {
    96       cout << "Point to correlate to is  " << Point << endl;
    97       CorrelationToPointMap *correlationmap = NULL;
    98       if (periodic)
    99         correlationmap  = PeriodicCorrelationToPoint(molecules, elements, &Point, ranges);
    100       else
    101         correlationmap = CorrelationToPoint(molecules, elements, &Point);
    102       OutputCorrelationToPoint(&output, correlationmap);
    103       binmap = BinData( correlationmap, BinWidth, BinStart, BinEnd );
    104       OutputCorrelation ( &binoutput, binmap );
    105       delete(binmap);
    106       delete(correlationmap);
    107     } else if (type == "S") {
    108       ASSERT(Boundary != NULL, "No molecule specified for SurfaceCorrelation.");
    109       const double radius = 4.;
    110       double LCWidth = 20.;
    111       if (BinEnd > 0) {
    112         if (BinEnd > 2.*radius)
    113           LCWidth = BinEnd;
    114         else
    115           LCWidth = 2.*radius;
    116       }
    117 
    118       // get the boundary
    119       class Tesselation *TesselStruct = NULL;
    120       const LinkedCell *LCList = NULL;
    121       // find biggest molecule
    122       int counter  = molecules->ListOfMolecules.size();
    123       bool *Actives = new bool[counter];
    124       counter = 0;
    125       for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
    126         Actives[counter++] = (*BigFinder)->ActiveFlag;
    127         (*BigFinder)->ActiveFlag = (*BigFinder == Boundary) ? false : true;
    128       }
    129       LCList = new LinkedCell(Boundary, LCWidth);
    130       FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
    131       CorrelationToSurfaceMap *surfacemap = NULL;
    132       if (periodic)
    133         surfacemap = PeriodicCorrelationToSurface( molecules, elements, TesselStruct, LCList, ranges);
    134       else
    135         surfacemap = CorrelationToSurface( molecules, elements, TesselStruct, LCList);
    136       delete LCList;
    137       OutputCorrelationToSurface(&output, surfacemap);
    138       // re-set ActiveFlag
    139       counter = 0;
    140       for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
    141         (*BigFinder)->ActiveFlag = Actives[counter++];
    142       }
    143       delete[] Actives;
    144       // check whether radius was appropriate
    145       {
    146         double start; double end;
    147         GetMinMax( surfacemap, start, end);
    148         if (LCWidth < end)
    149           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);
    150       }
    151       binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd );
    152       OutputCorrelation ( &binoutput, binmap );
    153       delete TesselStruct;  // surfacemap contains refs to triangles! delete here, not earlier!
    154       delete(binmap);
    155       delete(surfacemap);
    156     } else {
    157       return Action::failure;
    158     }
    159     output.close();
    160     binoutput.close();
    161     delete dialog;
    162     return Action::success;
    163   } else {
    164     delete dialog;
    165     return Action::failure;
    166   }
     94  // execute action
     95  output.open(outputname.c_str());
     96  binoutput.open(binoutputname.c_str());
     97  PairCorrelationMap *correlationmap = NULL;
     98  if (periodic)
     99    correlationmap = PeriodicPairCorrelation(World::getInstance().getMolecules(), elements, ranges);
     100  else
     101    correlationmap = PairCorrelation(World::getInstance().getMolecules(), elements);
     102  OutputPairCorrelation(&output, correlationmap);
     103  binmap = BinData( correlationmap, BinWidth, BinStart, BinEnd );
     104  OutputCorrelation ( &binoutput, binmap );
     105  delete(binmap);
     106  delete(correlationmap);
     107  output.close();
     108  binoutput.close();
     109  return Action::success;
    167110}
    168111
    169112Action::state_ptr AnalysisPairCorrelationAction::performUndo(Action::state_ptr _state) {
    170 //  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
    171 
    172   return Action::failure;
    173 //  string newName = state->mol->getName();
    174 //  state->mol->setName(state->lastName);
    175 //
    176 //  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
     113  return Action::success;
    177114}
    178115
    179116Action::state_ptr AnalysisPairCorrelationAction::performRedo(Action::state_ptr _state){
    180   return Action::failure;
     117  return Action::success;
    181118}
    182119
    183120bool AnalysisPairCorrelationAction::canUndo() {
    184   return false;
     121  return true;
    185122}
    186123
    187124bool AnalysisPairCorrelationAction::shouldUndo() {
    188   return false;
     125  return true;
    189126}
    190127
  • src/Actions/AnalysisAction/PairCorrelationAction.hpp

    r0c9cc3 rd02e07  
    2121  virtual const std::string getName();
    2222private:
     23  virtual Dialog * createDialog();
    2324  virtual Action::state_ptr performCall();
    2425  virtual Action::state_ptr performUndo(Action::state_ptr);
Note: See TracChangeset for help on using the changeset viewer.