Ignore:
Timestamp:
Nov 4, 2009, 2:54:31 PM (16 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:
c9bce3e
Parents:
eecd33
Message:

Closed ticket #48 (AnalysisCorrelation...() take MoleculeListClass instead of molecule).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/analysis_correlation.cpp

    reecd33 ra5551b  
    1414#include "tesselationhelpers.hpp"
    1515#include "vector.hpp"
     16#include "verbose.hpp"
    1617
    1718
     
    1920 * Note given element order is unimportant (i.e. g(Si, O) === g(O, Si))
    2021 * \param *out output stream for debugging
    21  * \param *mol molecule with atoms
     22 * \param *molecules list of molecules structure
    2223 * \param *type1 first element or NULL (if any element)
    2324 * \param *type2 second element or NULL (if any element)
    2425 * \return Map of doubles with values the pair of the two atoms.
    2526 */
    26 PairCorrelationMap *PairCorrelation( const ofstream *out, const molecule * const mol, const element * const type1, const element * const type2 )
     27PairCorrelationMap *PairCorrelation( ofstream * const out, MoleculeListClass * const &molecules, const element * const type1, const element * const type2 )
    2728{
    2829  PairCorrelationMap *outmap = NULL;
    2930  double distance = 0.;
    3031
    31   if ((mol == NULL)) {
    32     cout << "No molecule given." << endl;
     32  if (molecules->ListOfMolecules.empty()) {
     33    cerr << Verbose(1) <<"No molecule given." << endl;
    3334    return outmap;
    3435  }
    3536  outmap = new PairCorrelationMap;
    36   atom *Walker = mol->start;
    37   while (Walker->next != mol->end) {
    38     Walker = Walker->next;
    39     if ((type1 == NULL) || (Walker->type == type1)) {
    40       atom *OtherWalker = mol->start;
    41       while (OtherWalker->next != mol->end) { // only go up to Walker
    42         OtherWalker = OtherWalker->next;
    43         if (Walker->nr < OtherWalker->nr)
    44           if ((type2 == NULL) || (OtherWalker->type == type2)) {
    45             distance = Walker->node->Distance(OtherWalker->node);
    46             //cout << "Inserting " << *Walker << " and " << *OtherWalker << endl;
    47             outmap->insert ( pair<double, pair <atom *, atom*> > (distance, pair<atom *, atom*> (Walker, OtherWalker) ) );
     37  for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     38    if ((*MolWalker)->ActiveFlag) {
     39      cerr << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
     40      atom *Walker = (*MolWalker)->start;
     41      while (Walker->next != (*MolWalker)->end) {
     42        Walker = Walker->next;
     43        *out << Verbose(3) << "Current atom is " << *Walker << "." << endl;
     44        if ((type1 == NULL) || (Walker->type == type1)) {
     45          for (MoleculeList::const_iterator MolOtherWalker = MolWalker; MolOtherWalker != molecules->ListOfMolecules.end(); MolOtherWalker++)
     46            if ((*MolOtherWalker)->ActiveFlag) {
     47              *out << Verbose(2) << "Current other molecule is " << *MolOtherWalker << "." << endl;
     48              atom *OtherWalker = (*MolOtherWalker)->start;
     49              while (OtherWalker->next != (*MolOtherWalker)->end) { // only go up to Walker
     50                OtherWalker = OtherWalker->next;
     51                *out << Verbose(3) << "Current otheratom is " << *OtherWalker << "." << endl;
     52                if (Walker->nr < OtherWalker->nr)
     53                  if ((type2 == NULL) || (OtherWalker->type == type2)) {
     54                    distance = Walker->node->Distance(OtherWalker->node);
     55                    //*out << Verbose(1) <<"Inserting " << *Walker << " and " << *OtherWalker << endl;
     56                    outmap->insert ( pair<double, pair <atom *, atom*> > (distance, pair<atom *, atom*> (Walker, OtherWalker) ) );
     57                  }
     58              }
    4859          }
     60        }
    4961      }
    5062    }
    51   }
    5263
    5364  return outmap;
     
    5667/** Calculates the distance (pair) correlation between a given element and a point.
    5768 * \param *out output stream for debugging
    58  * \param *mol molecule with atoms
     69 * \param *molecules list of molecules structure
    5970 * \param *type element or NULL (if any element)
    6071 * \param *point vector to the correlation point
    6172 * \return Map of dobules with values as pairs of atom and the vector
    6273 */
    63 CorrelationToPointMap *CorrelationToPoint( const ofstream *out, const molecule * const mol, const element * const type, const Vector *point )
     74CorrelationToPointMap *CorrelationToPoint(  ofstream * const out, MoleculeListClass * const &molecules, const element * const type, const Vector *point )
    6475{
    6576  CorrelationToPointMap *outmap = NULL;
    6677  double distance = 0.;
    6778
    68   if ((mol == NULL)) {
    69     cout << "No molecule given." << endl;
     79  if (molecules->ListOfMolecules.empty()) {
     80    *out << Verbose(1) <<"No molecule given." << endl;
    7081    return outmap;
    7182  }
    7283  outmap = new CorrelationToPointMap;
    73   atom *Walker = mol->start;
    74   while (Walker->next != mol->end) {
    75     Walker = Walker->next;
    76     if ((type == NULL) || (Walker->type == type)) {
    77       distance = Walker->node->Distance(point);
    78       outmap->insert ( pair<double, pair<atom *, const Vector*> >(distance, pair<atom *, const Vector*> (Walker, point) ) );
     84  for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     85    if ((*MolWalker)->ActiveFlag) {
     86      *out << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
     87      atom *Walker = (*MolWalker)->start;
     88      while (Walker->next != (*MolWalker)->end) {
     89        Walker = Walker->next;
     90        *out << Verbose(3) << "Current atom is " << *Walker << "." << endl;
     91        if ((type == NULL) || (Walker->type == type)) {
     92          distance = Walker->node->Distance(point);
     93          *out << Verbose(4) << "Current distance is " << distance << "." << endl;
     94          outmap->insert ( pair<double, pair<atom *, const Vector*> >(distance, pair<atom *, const Vector*> (Walker, point) ) );
     95        }
     96      }
    7997    }
    80   }
    8198
    8299  return outmap;
     
    85102/** Calculates the distance (pair) correlation between a given element and a surface.
    86103 * \param *out output stream for debugging
    87  * \param *mol molecule with atoms
     104 * \param *molecules list of molecules structure
    88105 * \param *type element or NULL (if any element)
    89106 * \param *Surface pointer to Tesselation class surface
     
    91108 * \return Map of doubles with values as pairs of atom and the BoundaryTriangleSet that's closest
    92109 */
    93 CorrelationToSurfaceMap *CorrelationToSurface( ofstream *out, const molecule * const mol, const element * const type, const Tesselation * const Surface, const LinkedCell *LC )
    94 {
    95 
     110CorrelationToSurfaceMap *CorrelationToSurface( ofstream * const out, MoleculeListClass * const &molecules, const element * const type, const Tesselation * const Surface, const LinkedCell *LC )
     111{
    96112  CorrelationToSurfaceMap *outmap = NULL;
    97113  double distance = 0.;
     
    99115  Vector centroid;
    100116
    101   if ((Surface == NULL) || (LC == NULL) || (mol == NULL)) {
    102     cout << "No Tesselation, no LinkedCell or no molecule given." << endl;
     117  if ((Surface == NULL) || (LC == NULL) || (molecules->ListOfMolecules.empty())) {
     118    *out << Verbose(1) <<"No Tesselation, no LinkedCell or no molecule given." << endl;
    103119    return outmap;
    104120  }
    105121  outmap = new CorrelationToSurfaceMap;
    106   atom *Walker = mol->start;
    107   while (Walker->next != mol->end) {
    108     Walker = Walker->next;
    109     if ((type == NULL) || (Walker->type == type)) {
    110       triangle = Surface->FindClosestTriangleToPoint(out, Walker->node, LC );
    111       if (triangle != NULL) {
    112         distance = DistanceToTrianglePlane(out, Walker->node, triangle);
    113         outmap->insert ( pair<double, pair<atom *, BoundaryTriangleSet*> >(distance, pair<atom *, BoundaryTriangleSet*> (Walker, triangle) ) );
     122  for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     123    if ((*MolWalker)->ActiveFlag) {
     124      *out << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
     125      atom *Walker = (*MolWalker)->start;
     126      while (Walker->next != (*MolWalker)->end) {
     127        Walker = Walker->next;
     128        *out << Verbose(3) << "Current atom is " << *Walker << "." << endl;
     129        if ((type == NULL) || (Walker->type == type)) {
     130          triangle = Surface->FindClosestTriangleToPoint(out, Walker->node, LC );
     131          if (triangle != NULL) {
     132            distance = DistanceToTrianglePlane(out, Walker->node, triangle);
     133            outmap->insert ( pair<double, pair<atom *, BoundaryTriangleSet*> >(distance, pair<atom *, BoundaryTriangleSet*> (Walker, triangle) ) );
     134          }
     135        }
    114136      }
    115137    }
    116   }
    117138
    118139  return outmap;
     
    135156 * \param *map map to write
    136157 */
    137 void OutputCorrelation( ofstream *file, const BinPairMap * const map )
     158void OutputCorrelation( ofstream * const file, const BinPairMap * const map )
    138159{
    139160  *file << "# BinStart\tCount" << endl;
     
    147168 * \param *map map to write
    148169 */
    149 void OutputPairCorrelation( ofstream *file, const PairCorrelationMap * const map )
     170void OutputPairCorrelation( ofstream * const file, const PairCorrelationMap * const map )
    150171{
    151172  *file << "# BinStart\tAtom1\tAtom2" << endl;
     
    159180 * \param *map map to write
    160181 */
    161 void OutputCorrelationToPoint( ofstream *file, const CorrelationToPointMap * const map )
     182void OutputCorrelationToPoint( ofstream * const file, const CorrelationToPointMap * const map )
    162183{
    163184  *file << "# BinStart\tAtom::x[i]-point.x[i]" << endl;
     
    174195 * \param *map map to write
    175196 */
    176 void OutputCorrelationToSurface( ofstream *file, const CorrelationToSurfaceMap * const map )
     197void OutputCorrelationToSurface( ofstream * const file, const CorrelationToSurfaceMap * const map )
    177198{
    178199  *file << "# BinStart\tTriangle" << endl;
Note: See TracChangeset for help on using the changeset viewer.