Changeset c1a9d6
- Timestamp:
- Feb 22, 2012, 11:29:05 AM (13 years ago)
- 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)
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/AnalysisAction/PairCorrelationAction.cpp
r8fc1a6 rc1a9d6 23 23 #include "CodePatterns/Verbose.hpp" 24 24 #include "CodePatterns/Log.hpp" 25 #include "Descriptors/AtomTypeDescriptor.hpp" 25 26 #include "Element/element.hpp" 26 27 #include "molecule.hpp" 27 28 #include "Element/periodentafel.hpp" 29 #include "LinearAlgebra/RealSpaceMatrix.hpp" 28 30 #include "LinearAlgebra/Vector.hpp" 29 31 #include "World.hpp" … … 55 57 binoutput.open(params.binoutputname.string().c_str()); 56 58 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); 62 73 OutputCorrelationMap<PairCorrelationMap>(&output, correlationmap, OutputPairCorrelation_Header, OutputPairCorrelation_Value); 63 74 binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd ); -
src/Analysis/analysis_correlation.cpp
r8fc1a6 rc1a9d6 20 20 #include "CodePatterns/MemDebug.hpp" 21 21 22 #include <algorithm> 22 23 #include <iostream> 23 24 #include <iomanip> … … 38 39 #include "LinearAlgebra/Vector.hpp" 39 40 #include "LinearAlgebra/RealSpaceMatrix.hpp" 41 #include "LinkedCell/LinkedCell_View.hpp" 40 42 #include "molecule.hpp" 41 43 #include "Tesselation/tesselation.hpp" … … 275 277 }; 276 278 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 282 288 * \return Map of doubles with values the pair of the two atoms. 283 289 */ 284 PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements) 290 PairCorrelationMap *PairCorrelation( 291 const World::AtomComposite &atoms_first, 292 const World::AtomComposite &atoms_second, 293 const double max_distance) 285 294 { 286 295 Info FunctionInfo(__func__); … … 289 298 Box &domain = World::getInstance().getDomain(); 290 299 291 if ( molecules.empty()) {292 ELOG(1, "No moleculegiven.");300 if (atoms_first.empty() || atoms_second.empty()) { 301 ELOG(1, "No atoms given."); 293 302 return outmap; 294 303 } 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 315 318 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; 338 360 } 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 ); 339 370 } 340 371 } 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 432 373 return outmap; 433 374 }; -
src/Analysis/analysis_correlation.hpp
r8fc1a6 rc1a9d6 34 34 #include "CodePatterns/Verbose.hpp" 35 35 #include "Helpers/helpers.hpp" 36 #include "World.hpp" 36 37 37 38 /****************************************** forward declarations *****************************/ … … 46 47 /********************************************** definitions *********************************/ 47 48 48 typedef multimap<double, pair<const atom *, const atom*> > PairCorrelationMap;49 typedef multimap<double, pair<const TesselPoint *, const TesselPoint *> > PairCorrelationMap; 49 50 typedef multimap<double, const atom * > DipoleAngularCorrelationMap; 50 51 typedef multimap<double, pair<const molecule *, const molecule *> > DipoleCorrelationMap; … … 65 66 DipoleAngularCorrelationMap *DipoleAngularCorrelation(const Formula &DipoleFormula, const size_t timestep, const std::map<atomId_t, Vector> &ZeroVector, const enum ResetWorldTime DoTimeReset = DontResetTime); 66 67 DipoleCorrelationMap *DipoleCorrelation(std::vector<molecule *> &molecules); 67 PairCorrelationMap *PairCorrelation(std::vector<molecule *> &molecules, const std::vector<const element *> &elements); 68 PairCorrelationMap *PairCorrelation( 69 const World::AtomComposite &atoms_first, 70 const World::AtomComposite &atoms_second, 71 const double max_distance); 68 72 CorrelationToPointMap *CorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point ); 69 73 CorrelationToSurfaceMap *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] );71 74 CorrelationToPointMap *PeriodicCorrelationToPoint(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Vector *point, const int ranges[NDIM] ); 72 75 CorrelationToSurfaceMap *PeriodicCorrelationToSurface(std::vector<molecule *> &molecules, const std::vector<const element *> &elements, const Tesselation * const Surface, const LinkedCell_deprecated *LC, const int ranges[NDIM] ); … … 158 161 if (!BinPairMapInserter.second) { // bin already present, increase 159 162 BinPairMapInserter.first->second += 1; 163 } else { // bin not present, then remove again 164 outmap->erase(BinPairMapInserter.first); 160 165 } 161 166 } -
src/Analysis/unittests/AnalysisPairCorrelationUnitTest.cpp
r8fc1a6 rc1a9d6 30 30 31 31 #include "Atom/atom.hpp" 32 #include "Descriptors/AtomTypeDescriptor.hpp" 32 33 #include "Element/element.hpp" 33 34 #include "Element/periodentafel.hpp" … … 61 62 hydrogen = World::getInstance().getPeriode()->FindElement(1); 62 63 CPPUNIT_ASSERT(hydrogen != NULL && "hydrogen element not found"); 63 elements.push_back(hydrogen);64 elements.push_back(hydrogen);65 64 66 65 // construct molecule (tetraeder of hydrogens) … … 87 86 88 87 // 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.); 93 91 binmap = NULL; 94 92 -
tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-10.csv
r8fc1a6 rc1a9d6 1 1 BinStart BinCenter BinEnd Count 2 0.5 1.25 2 623 2 2.25 2.5 244 2.5 2.75 3 635 3 3.25 3.5 576 3.5 3.75 4 1217 4 4.25 4.5 778 4.5 4.75 5 819 2 5 5.25 5.5 82 10 3 5.5 5.75 6 74 … … 17 10 9 9.25 9.5 97 18 11 9.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 12 10 0 0 0 -
tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-20.csv
r8fc1a6 rc1a9d6 1 1 BinStart BinCenter BinEnd Count 2 0.5 1.25 2 623 2 2.25 2.5 244 2.5 2.75 3 635 3 3.25 3.5 576 3.5 3.75 4 1217 4 4.25 4.5 778 4.5 4.75 5 819 5 5.25 5.5 8210 5.5 5.75 6 7411 6 6.25 6.5 12712 6.5 6.75 7 16813 7 7.25 7.5 15414 7.5 7.75 8 15215 8 8.25 8.5 9416 8.5 8.75 9 10517 9 9.25 9.5 9718 9.5 9.75 10 10019 2 10 10.25 10.5 98 20 3 10.5 10.75 11 64 -
tests/regression/Analysis/PairCorrelation-RangeTest/post/bin_output-5.csv
r8fc1a6 rc1a9d6 10 10 4 4.25 4.5 77 11 11 4.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 12 5 0 0 0
Note:
See TracChangeset
for help on using the changeset viewer.