Changeset c1a9d6


Ignore:
Timestamp:
Feb 22, 2012, 11:29:05 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:
b49c5d
Parents:
8fc1a6
git-author:
Frederik Heber <heber@…> (01/13/12 12:39:04)
git-committer:
Frederik Heber <heber@…> (02/22/12 11:29:05)
Message:

Rewrote PairCorrelation() to make use of new LinkedCell construct.

Files:
7 edited

Legend:

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

    r8fc1a6 rc1a9d6  
    2323#include "CodePatterns/Verbose.hpp"
    2424#include "CodePatterns/Log.hpp"
     25#include "Descriptors/AtomTypeDescriptor.hpp"
    2526#include "Element/element.hpp"
    2627#include "molecule.hpp"
    2728#include "Element/periodentafel.hpp"
     29#include "LinearAlgebra/RealSpaceMatrix.hpp"
    2830#include "LinearAlgebra/Vector.hpp"
    2931#include "World.hpp"
     
    5557  binoutput.open(params.binoutputname.string().c_str());
    5658  PairCorrelationMap *correlationmap = NULL;
    57   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
    58   if (params.periodic)
    59     correlationmap = PeriodicPairCorrelation(molecules, params.elements, ranges);
    60   else
    61     correlationmap = PairCorrelation(molecules, params.elements);
     59  ASSERT(params.elements.size() == 2,
     60      "AnalysisPairCorrelationAction::performCall() - Exactly two elements are required for pair correlation.");
     61  std::vector<const element *>::const_iterator elemiter = params.elements.begin();
     62  const World::AtomComposite atoms_first = World::getInstance().getAllAtoms(AtomByType(*(elemiter++)));
     63  const World::AtomComposite atoms_second = World::getInstance().getAllAtoms(AtomByType(*(elemiter++)));
     64  ASSERT(elemiter == params.elements.end(),
     65      "AnalysisPairCorrelationAction::performCall() - Exactly two elements are required for pair correlation.");
     66  double max_distance = params.BinEnd;
     67  if (params.BinEnd <= 0.) {
     68    // find max distance within box from diagonal
     69    const RealSpaceMatrix &Minv = World::getInstance().getDomain().getMinv();
     70    max_distance = (Minv * Vector(1.,1.,1.)).NormSquared();
     71  }
     72  correlationmap = PairCorrelation(atoms_first, atoms_second, max_distance);
    6273  OutputCorrelationMap<PairCorrelationMap>(&output, correlationmap, OutputPairCorrelation_Header, OutputPairCorrelation_Value);
    6374  binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
  • src/Analysis/analysis_correlation.cpp

    r8fc1a6 rc1a9d6  
    2020#include "CodePatterns/MemDebug.hpp"
    2121
     22#include <algorithm>
    2223#include <iostream>
    2324#include <iomanip>
     
    3839#include "LinearAlgebra/Vector.hpp"
    3940#include "LinearAlgebra/RealSpaceMatrix.hpp"
     41#include "LinkedCell/LinkedCell_View.hpp"
    4042#include "molecule.hpp"
    4143#include "Tesselation/tesselation.hpp"
     
    275277};
    276278
    277 
    278 /** Calculates the pair correlation between given elements.
    279  * Note given element order is unimportant (i.e. g(Si, O) === g(O, Si))
    280  * \param *molecules vector of molecules
    281  * \param &elements vector of elements to correlate
     279/** Calculates the pair correlation between given atom sets.
     280 *
     281 * Note we correlate each of the \a &atomsfirst with each of the second set
     282 * \a &atoms_second. However, we are aware of double counting. If an atom is
     283 * in either set, the pair is counted only once.
     284 *
     285 * \param &atoms_first vector of atoms
     286 * \param &atoms_second vector of atoms
     287 * \param max_distance maximum distance for the correlation
    282288 * \return Map of doubles with values the pair of the two atoms.
    283289 */
    284 PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements)
     290PairCorrelationMap *PairCorrelation(
     291    const World::AtomComposite &atoms_first,
     292    const World::AtomComposite &atoms_second,
     293    const double max_distance)
    285294{
    286295  Info FunctionInfo(__func__);
     
    289298  Box &domain = World::getInstance().getDomain();
    290299
    291   if (molecules.empty()) {
    292     ELOG(1, "No molecule given.");
     300  if (atoms_first.empty() || atoms_second.empty()) {
     301    ELOG(1, "No atoms given.");
    293302    return outmap;
    294303  }
    295   for (std::vector<molecule *>::const_iterator MolWalker = molecules.begin(); MolWalker != molecules.end(); MolWalker++)
    296     (*MolWalker)->doCountAtoms();
    297 
    298   // create all possible pairs of elements
    299   set <pair<const element *,const element *> > PairsOfElements;
    300   if (elements.size() >= 2) {
    301     for (vector<const element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
    302       for (vector<const element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
    303         if (type1 != type2) {
    304           PairsOfElements.insert( make_pair(*type1,*type2) );
    305           LOG(1, "Creating element pair " << *(*type1) << " and " << *(*type2) << ".");
    306         }
    307   } else if (elements.size() == 1) { // one to all are valid
    308     const element *elemental = *elements.begin();
    309     PairsOfElements.insert( pair<const element *,const element*>(elemental,0) );
    310     PairsOfElements.insert( pair<const element *,const element*>(0,elemental) );
    311   } else { // all elements valid
    312     PairsOfElements.insert( pair<element *, element*>((element *)NULL, (element *)NULL) );
    313   }
    314 
     304
     305  //!> typedef for an unsorted container, (output) compatible with STL algorithms
     306  typedef std::vector<const TesselPoint *> LinkedVector;
     307
     308  // create intersection (to know when to check for double-counting)
     309  LinkedVector intersected_atoms(atoms_second.size(), NULL);
     310  LinkedVector::iterator intersected_atoms_end =
     311      std::set_intersection(
     312          atoms_first.begin(),atoms_first.end(),
     313          atoms_second.begin(), atoms_second.end(),
     314          intersected_atoms.begin());
     315  const LinkedCell::LinkedList intersected_atoms_set(intersected_atoms.begin(), intersected_atoms.end());
     316
     317  // create map
    315318  outmap = new PairCorrelationMap;
    316   for (std::vector<molecule *>::const_iterator MolWalker = molecules.begin(); MolWalker != molecules.end(); MolWalker++){
    317     LOG(2, "Current molecule is " << (*MolWalker)->getName() << ".");
    318     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
    319       LOG(3, "Current atom is " << **iter << ".");
    320       for (std::vector<molecule *>::const_iterator MolOtherWalker = MolWalker; MolOtherWalker != molecules.end(); MolOtherWalker++){
    321         LOG(2, "Current other molecule is " << (*MolOtherWalker)->getName() << ".");
    322         for (molecule::const_iterator runner = (*MolOtherWalker)->begin(); runner != (*MolOtherWalker)->end(); ++runner) {
    323           LOG(3, "Current otheratom is " << **runner << ".");
    324           if ((*iter)->getId() < (*runner)->getId()){
    325             for (set <pair<const element *, const element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
    326               if ((PairRunner->first == (**iter).getType()) && (PairRunner->second == (**runner).getType())) {
    327                 distance = domain.periodicDistance((*iter)->getPosition(),(*runner)->getPosition());
    328                 //LOG(1, "Inserting " << *(*iter) << " and " << *(*runner));
    329                 outmap->insert (
    330                     std::pair<double, std::pair <const atom *, const atom*> > (
    331                         distance,
    332                         std::pair<const atom *, const atom*> ((*iter), (*runner))
    333                         )
    334                     );
    335               }
    336           }
    337         }
     319
     320  // get linked cell view
     321  LinkedCell::LinkedCell_View LC = World::getInstance().getLinkedCell(max_distance);
     322
     323  // convert second to _sorted_ set
     324  LinkedCell::LinkedList atoms_second_set(atoms_second.begin(), atoms_second.end());
     325  LOG(2, "INFO: first set has " << atoms_first.size()
     326      << " and second set has " << atoms_second_set.size() << " atoms.");
     327
     328  // fill map
     329  for (World::AtomComposite::const_iterator iter = atoms_first.begin();
     330      iter != atoms_first.end();
     331      ++iter) {
     332    const TesselPoint * const Walker = *iter;
     333    LOG(3, "INFO: Current point is " << Walker->getName() << ".");
     334    // obtain all possible neighbors (that is a sorted set)
     335    LinkedCell::LinkedList ListOfNeighbors = LC.getPointsInsideSphere(
     336        max_distance,
     337        Walker->getPosition());
     338    LOG(2, "INFO: There are " << ListOfNeighbors.size() << " neighbors.");
     339
     340    // create intersection with second set
     341    // NOTE: STL algorithms do mostly not work on sorted container because reassignment
     342    // of a value may also require changing its position.
     343    LinkedVector intersected_set(atoms_second.size(), NULL);
     344    LinkedVector::iterator intersected_end =
     345        std::set_intersection(
     346            ListOfNeighbors.begin(),ListOfNeighbors.end(),
     347            atoms_second_set.begin(), atoms_second_set.end(),
     348            intersected_set.begin());
     349    // count remaining elements
     350    LOG(2, "INFO: Intersection with second set has " << int(intersected_end - intersected_set.begin()) << " elements.");
     351    // we have some possible candidates, go through each
     352    for (LinkedVector::const_iterator neighboriter = intersected_set.begin();
     353        neighboriter != intersected_end;
     354        ++neighboriter) {
     355      const TesselPoint * const OtherWalker = (*neighboriter);
     356      LinkedCell::LinkedList::const_iterator equaliter = intersected_atoms_set.find(OtherWalker);
     357      if ((equaliter !=  intersected_atoms_set.end()) && (OtherWalker <= Walker)) {
     358        // present in both sets, assure that we are larger
     359        continue;
    338360      }
     361      LOG(3, "INFO: Current other point is " << *OtherWalker << ".");
     362      const double distance = domain.periodicDistance(OtherWalker->getPosition(),Walker->getPosition());
     363      LOG(3, "INFO: Resulting distance is " << distance << ".");
     364      outmap->insert (
     365          std::pair<double, std::pair <const TesselPoint *, const TesselPoint*> > (
     366              distance,
     367              std::make_pair (Walker, OtherWalker)
     368              )
     369          );
    339370    }
    340371  }
    341   return outmap;
    342 };
    343 
    344 /** Calculates the pair correlation between given elements.
    345  * Note given element order is unimportant (i.e. g(Si, O) === g(O, Si))
    346  * \param *molecules list of molecules structure
    347  * \param &elements vector of elements to correlate
    348  * \param ranges[NDIM] interval boundaries for the periodic images to scan also
    349  * \return Map of doubles with values the pair of the two atoms.
    350  */
    351 PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const int ranges[NDIM] )
    352 {
    353   Info FunctionInfo(__func__);
    354   PairCorrelationMap *outmap = new PairCorrelationMap;
    355   double distance = 0.;
    356   int n[NDIM];
    357   Vector checkX;
    358   Vector periodicX;
    359   int Othern[NDIM];
    360   Vector checkOtherX;
    361   Vector periodicOtherX;
    362 
    363   if (molecules.empty()) {
    364     ELOG(1, "No molecule given.");
    365     return outmap;
    366   }
    367   for (std::vector<molecule *>::const_iterator MolWalker = molecules.begin(); MolWalker != molecules.end(); MolWalker++)
    368     (*MolWalker)->doCountAtoms();
    369 
    370   // create all possible pairs of elements
    371   set <pair<const element *,const element *> > PairsOfElements;
    372   if (elements.size() >= 2) {
    373     for (vector<const element *>::const_iterator type1 = elements.begin(); type1 != elements.end(); ++type1)
    374       for (vector<const element *>::const_iterator type2 = elements.begin(); type2 != elements.end(); ++type2)
    375         if (type1 != type2) {
    376           PairsOfElements.insert( make_pair(*type1,*type2) );
    377           LOG(1, "Creating element pair " << *(*type1) << " and " << *(*type2) << ".");
    378         }
    379   } else if (elements.size() == 1) { // one to all are valid
    380     const element *elemental = *elements.begin();
    381     PairsOfElements.insert( pair<const element *,const element*>(elemental,0) );
    382     PairsOfElements.insert( pair<const element *,const element*>(0,elemental) );
    383   } else { // all elements valid
    384     PairsOfElements.insert( pair<element *, element*>((element *)NULL, (element *)NULL) );
    385   }
    386 
    387   outmap = new PairCorrelationMap;
    388   for (std::vector<molecule *>::const_iterator MolWalker = molecules.begin(); MolWalker != molecules.end(); MolWalker++){
    389     RealSpaceMatrix FullMatrix = World::getInstance().getDomain().getM();
    390     RealSpaceMatrix FullInverseMatrix = World::getInstance().getDomain().getMinv();
    391     LOG(2, "Current molecule is " << *MolWalker << ".");
    392     for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
    393       LOG(3, "Current atom is " << **iter << ".");
    394       periodicX = FullInverseMatrix * ((*iter)->getPosition()); // x now in [0,1)^3
    395       // go through every range in xyz and get distance
    396       for (n[0]=-ranges[0]; n[0] <= ranges[0]; n[0]++)
    397         for (n[1]=-ranges[1]; n[1] <= ranges[1]; n[1]++)
    398           for (n[2]=-ranges[2]; n[2] <= ranges[2]; n[2]++) {
    399             checkX = FullMatrix * (Vector(n[0], n[1], n[2]) + periodicX);
    400             for (std::vector<molecule *>::const_iterator MolOtherWalker = MolWalker; MolOtherWalker != molecules.end(); MolOtherWalker++){
    401                 LOG(2, "Current other molecule is " << *MolOtherWalker << ".");
    402                 for (molecule::const_iterator runner = (*MolOtherWalker)->begin(); runner != (*MolOtherWalker)->end(); ++runner) {
    403                   LOG(3, "Current otheratom is " << **runner << ".");
    404                   if ((*iter)->getId() < (*runner)->getId()){
    405                     for (set <pair<const element *,const element *> >::iterator PairRunner = PairsOfElements.begin(); PairRunner != PairsOfElements.end(); ++PairRunner)
    406                       if ((PairRunner->first == (**iter).getType()) && (PairRunner->second == (**runner).getType())) {
    407                         periodicOtherX = FullInverseMatrix * ((*runner)->getPosition()); // x now in [0,1)^3
    408                         // go through every range in xyz and get distance
    409                         for (Othern[0]=-ranges[0]; Othern[0] <= ranges[0]; Othern[0]++)
    410                           for (Othern[1]=-ranges[1]; Othern[1] <= ranges[1]; Othern[1]++)
    411                             for (Othern[2]=-ranges[2]; Othern[2] <= ranges[2]; Othern[2]++) {
    412                               checkOtherX = FullMatrix * (Vector(Othern[0], Othern[1], Othern[2]) + periodicOtherX);
    413                               distance = checkX.distance(checkOtherX);
    414                               //LOG(1, "Inserting " << *(*iter) << " and " << *(*runner));
    415                               outmap->insert (
    416                                   std::pair<double, std::pair <const atom *, const atom*> > (
    417                                       distance,
    418                                       std::pair<const atom *, const atom*> (
    419                                           (*iter),
    420                                           (*runner))
    421                                       )
    422                                   );
    423                             }
    424                       }
    425                     }
    426                   }
    427                 }
    428       }
    429     }
    430   }
    431 
     372  // and return
    432373  return outmap;
    433374};
  • src/Analysis/analysis_correlation.hpp

    r8fc1a6 rc1a9d6  
    3434#include "CodePatterns/Verbose.hpp"
    3535#include "Helpers/helpers.hpp"
     36#include "World.hpp"
    3637
    3738/****************************************** forward declarations *****************************/
     
    4647/********************************************** definitions *********************************/
    4748
    48 typedef multimap<double, pair<const atom *, const atom *> > PairCorrelationMap;
     49typedef multimap<double, pair<const TesselPoint *, const TesselPoint *> > PairCorrelationMap;
    4950typedef multimap<double, const atom * > DipoleAngularCorrelationMap;
    5051typedef multimap<double, pair<const molecule *, const molecule *> > DipoleCorrelationMap;
     
    6566DipoleAngularCorrelationMap *DipoleAngularCorrelation(const Formula &DipoleFormula, const size_t timestep, const std::map<atomId_t, Vector> &ZeroVector, const enum ResetWorldTime DoTimeReset = DontResetTime);
    6667DipoleCorrelationMap *DipoleCorrelation(std::vector<molecule *> &molecules);
    67 PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements);
     68PairCorrelationMap *PairCorrelation(
     69    const World::AtomComposite &atoms_first,
     70    const World::AtomComposite &atoms_second,
     71    const double max_distance);
    6872CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point );
    6973CorrelationToSurfaceMap *CorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell_deprecated *LC );
    70 PairCorrelationMap *PeriodicPairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const int ranges[NDIM] );
    7174CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point, const int ranges[NDIM] );
    7275CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell_deprecated *LC, const int ranges[NDIM] );
     
    158161    if (!BinPairMapInserter.second) {  // bin already present, increase
    159162      BinPairMapInserter.first->second += 1;
     163    } else { // bin not present, then remove again
     164      outmap->erase(BinPairMapInserter.first);
    160165    }
    161166  }
  • src/Analysis/unittests/AnalysisPairCorrelationUnitTest.cpp

    r8fc1a6 rc1a9d6  
    3030
    3131#include "Atom/atom.hpp"
     32#include "Descriptors/AtomTypeDescriptor.hpp"
    3233#include "Element/element.hpp"
    3334#include "Element/periodentafel.hpp"
     
    6162  hydrogen = World::getInstance().getPeriode()->FindElement(1);
    6263  CPPUNIT_ASSERT(hydrogen != NULL && "hydrogen element not found");
    63   elements.push_back(hydrogen);
    64   elements.push_back(hydrogen);
    6564
    6665  // construct molecule (tetraeder of hydrogens)
     
    8786
    8887  // init maps
    89   World::getInstance().selectAllMolecules(AllMolecules());
    90   allMolecules = World::getInstance().getSelectedMolecules();
    91   CPPUNIT_ASSERT_EQUAL( (size_t) 1, allMolecules.size());
    92   correlationmap = PairCorrelation( allMolecules, elements);
     88  World::AtomComposite atoms_first = World::getInstance().getAllAtoms(AtomByType(hydrogen));
     89  CPPUNIT_ASSERT_EQUAL( (size_t) 4, atoms_first.size());
     90  correlationmap = PairCorrelation( atoms_first, atoms_first, 5.);
    9391  binmap = NULL;
    9492
  • tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-10.csv

    r8fc1a6 rc1a9d6  
    11BinStart        BinCenter       BinEnd  Count
    2 0.5     1.25    2       62
    3 2       2.25    2.5     24
    4 2.5     2.75    3       63
    5 3       3.25    3.5     57
    6 3.5     3.75    4       121
    7 4       4.25    4.5     77
    8 4.5     4.75    5       81
    925       5.25    5.5     82
    1035.5     5.75    6       74
     
    17109       9.25    9.5     97
    18119.5     9.75    10      100
    19 10      10.25   10.5    98
    20 10.5    10.75   11      64
    21 11      11.25   11.5    40
    22 11.5    11.75   12      47
    23 12      12.25   12.5    24
    24 12.5    12.75   13      6
    25 13      13.25   13.5    2
    26 13.5    0       0       3
     1210      0       0       0
  • tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-20.csv

    r8fc1a6 rc1a9d6  
    11BinStart        BinCenter       BinEnd  Count
    2 0.5     1.25    2       62
    3 2       2.25    2.5     24
    4 2.5     2.75    3       63
    5 3       3.25    3.5     57
    6 3.5     3.75    4       121
    7 4       4.25    4.5     77
    8 4.5     4.75    5       81
    9 5       5.25    5.5     82
    10 5.5     5.75    6       74
    11 6       6.25    6.5     127
    12 6.5     6.75    7       168
    13 7       7.25    7.5     154
    14 7.5     7.75    8       152
    15 8       8.25    8.5     94
    16 8.5     8.75    9       105
    17 9       9.25    9.5     97
    18 9.5     9.75    10      100
    19210      10.25   10.5    98
    20310.5    10.75   11      64
  • tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-5.csv

    r8fc1a6 rc1a9d6  
    10104       4.25    4.5     77
    11114.5     4.75    5       81
    12 5       5.25    5.5     82
    13 5.5     5.75    6       74
    14 6       6.25    6.5     127
    15 6.5     6.75    7       168
    16 7       7.25    7.5     154
    17 7.5     7.75    8       152
    18 8       8.25    8.5     94
    19 8.5     8.75    9       105
    20 9       9.25    9.5     97
    21 9.5     9.75    10      100
    22 10      10.25   10.5    98
    23 10.5    10.75   11      64
    24 11      11.25   11.5    40
    25 11.5    11.75   12      47
    26 12      12.25   12.5    24
    27 12.5    12.75   13      6
    28 13      13.25   13.5    2
    29 13.5    0       0       3
     125       0       0       0
Note: See TracChangeset for help on using the changeset viewer.