Ignore:
Timestamp:
Nov 4, 2016, 9:37:49 AM (8 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, 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_ChronosMutex, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, GeometryObjects, Gui_displays_atomic_force_velocity, IndependentFragmentGrids_IntegrationTest, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, RotateToPrincipalAxisSystem_UndoRedo, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, ThirdParty_MPQC_rebuilt_buildsystem, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, Ubuntu_1604_changes, stable
Children:
16c6f7
Parents:
95304c
git-author:
Frederik Heber <heber@…> (10/02/16 13:24:41)
git-committer:
Frederik Heber <heber@…> (11/04/16 09:37:49)
Message:

MPQCData additionally stores the atomic number per nuclei.

  • in case of DoSampleValenceOnly the charge does not represent the atomic number and moreover it is no longer unique. However, we need this unique association for fitting potentials to the fragment results.
  • TESTFIX: set all tests to XFAIL that parse either fragmentation results or homologies.
  • TESTFIX: needed to adapt HomologyContainerUnitTest which uses FragmentStub.
  • TESTFIX: needed to adapt FragmentUnitTest.
Location:
src/Fragmentation/Summation/SetValues/unittests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp

    r95304c r6829d2  
    8181  pos[2] = 1.;
    8282  positions += pos;
     83  atomicnumbers += 1, 2, 3, 4;
    8384  charges += 1., 2., 3., 4.;
    8485  CPPUNIT_ASSERT_EQUAL( (size_t)3, pos.size() );
    8586  CPPUNIT_ASSERT( positions.size() == charges.size() );
    86 
    87   fragment = new Fragment(positions, charges);
     87  CPPUNIT_ASSERT( atomicnumbers.size() == charges.size() );
     88
     89  fragment = new Fragment(positions, atomicnumbers, charges);
    8890}
    8991
     
    110112}
    111113
     114static Fragment::nuclei_t createNucleiFromTriple(
     115    const Fragment::positions_t &_positions,
     116    const Fragment::atomicnumbers_t &_atomicnumbers,
     117    const Fragment::charges_t &_charges
     118    )
     119{
     120  Fragment::nuclei_t returnnuclei;
     121  Fragment::positions_t::const_iterator piter = _positions.begin();
     122  Fragment::atomicnumbers_t::const_iterator aiter = _atomicnumbers.begin();
     123  Fragment::charges_t::const_iterator citer = _charges.begin();
     124  for (;piter != _positions.end(); ++piter)
     125    returnnuclei.push_back( Fragment::createNucleus(*piter, *aiter, *citer) );
     126  return returnnuclei;
     127}
    112128
    113129/** UnitTest for containsNuclei()
     
    117133  {
    118134    // tests present ones for containment
    119     Fragment::nuclei_t validnuclei(positions.size());
    120     std::transform(positions.begin(), positions.end(),
    121         charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     135    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    122136    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    123137      CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    129143    Fragment::nuclei_t invalidnuclei;
    130144    Fragment::position_t pos(3, -1.);
    131     invalidnuclei += Fragment::createNucleus(pos, 1.);
     145    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    132146    pos[0] = 0.;
    133     invalidnuclei += Fragment::createNucleus(pos, 1.);
     147    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    134148    pos[1] = 0.;
    135     invalidnuclei += Fragment::createNucleus(pos, 1.);
     149    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    136150    pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
    137     invalidnuclei += Fragment::createNucleus(pos, 1.);
     151    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    138152    BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    139153      CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
     
    149163    // tests present ones for removal
    150164    size_t size = fragment->nuclei.size();
    151     Fragment::nuclei_t validnuclei(positions.size());
    152     std::transform(positions.begin(), positions.end(),
    153         charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     165    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    154166    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    155167      CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
     
    161173    Fragment::nuclei_t invalidnuclei;
    162174    Fragment::position_t pos(3, -1.);
    163     invalidnuclei += Fragment::createNucleus(pos, 1.);
     175    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    164176    pos[0] = 0;
    165     invalidnuclei += Fragment::createNucleus(pos, 1.);
     177    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    166178    pos[1] = 0;
    167     invalidnuclei += Fragment::createNucleus(pos, 1.);
     179    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    168180    pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
    169     invalidnuclei += Fragment::createNucleus(pos, 1.);
     181    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
    170182    BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    171183      CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
     
    178190void FragmentTest::equalityNucleus_Test()
    179191{
    180   Fragment::nuclei_t validnuclei(positions.size());
    181   std::transform(positions.begin(), positions.end(),
    182       charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     192  Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    183193  {
    184194    // create some nuclei
     
    191201    // create nucleus at other position
    192202    Fragment::position_t pos(3, 2.);
    193     Fragment::nucleus_t unequalposnucleus(pos, 1.);
     203    Fragment::nucleus_t unequalposnucleus( Fragment::createNucleus(pos, 1, 1.) );
    194204    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    195205      CPPUNIT_ASSERT( nucleus != unequalposnucleus );
     
    200210    // create nucleus with different charge
    201211    Fragment::position_t pos(3, 1.);
    202     Fragment::nucleus_t unequalchargenucleus(pos, 5.);
     212    Fragment::nucleus_t unequalchargenucleus( Fragment::createNucleus(pos, 5, 5.) );
    203213    BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    204214      CPPUNIT_ASSERT( nucleus != unequalchargenucleus );
     
    219229  otherpos[1] = 0.;
    220230  otherpositions += otherpos;
     231  Fragment::atomicnumbers_t otheratomicnumbers;
     232  otheratomicnumbers += 1, 2, 3;
    221233  Fragment::charges_t othercharges;
    222234  othercharges += 1., 2., 3.;
    223   Fragment otherfragment(otherpositions, othercharges);
     235  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    224236
    225237  CPPUNIT_ASSERT( !(*fragment == otherfragment) );
     
    253265  otherpos[1] = 0.;
    254266  otherpositions += otherpos;
     267  Fragment::atomicnumbers_t otheratomicnumbers;
     268  otheratomicnumbers += 1, 2, 3;
    255269  Fragment::charges_t othercharges;
    256270  othercharges += 1., 2., 3.;
    257   Fragment otherfragment(otherpositions, othercharges);
     271  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    258272
    259273  // check for inequality
     
    282296    otherpos[1] = 0.;
    283297    otherpositions += otherpos;
     298    Fragment::atomicnumbers_t otheratomicnumbers;
     299    otheratomicnumbers += 1, 2, 3;
    284300    Fragment::charges_t othercharges;
    285301    othercharges += 1., 2., 3.;
    286     Fragment otherfragment(otherpositions, othercharges);
     302    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    287303    const size_t othersize = otherfragment.nuclei.size();
    288304    const size_t size = fragment->nuclei.size();
     
    292308    {
    293309      // tests all for containment
    294       Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
    295       Fragment::nuclei_t::iterator iter =
    296           std::transform(positions.begin(), positions.end(),
    297           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
    298       std::transform(otherpositions.begin(), otherpositions.end(),
    299           othercharges.begin(), iter, Fragment::createNucleus);
     310      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     311      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
     312      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
    300313      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    301314        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    304317    {
    305318      // tests positions for no containment in otherfragment
    306       Fragment::nuclei_t invalidnuclei(positions.size());
    307       std::transform(positions.begin(), positions.end(),
    308           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     319      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    309320      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    310321        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    313324    {
    314325      // tests otherpositions for containment in otherfragment
    315       Fragment::nuclei_t validnuclei(otherpositions.size());
    316       std::transform(otherpositions.begin(), otherpositions.end(),
    317           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     326      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    318327      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    319328        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    336345    otherpos[1] = 2.;
    337346    otherpositions += otherpos;
     347    Fragment::atomicnumbers_t otheratomicnumbers;
     348    otheratomicnumbers += 1, 2, 3;
    338349    Fragment::charges_t othercharges;
    339350    othercharges += 1., 2., 3.;
    340     Fragment otherfragment(otherpositions, othercharges);
     351    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    341352    const size_t othersize = otherfragment.nuclei.size();
    342353    const size_t size = fragment->nuclei.size();
     
    346357    {
    347358      // tests all for containment
    348       Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
    349       Fragment::nuclei_t::iterator iter =
    350           std::transform(positions.begin(), positions.end(),
    351           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
    352       std::transform(otherpositions.begin(), otherpositions.end(),
    353           othercharges.begin(), iter, Fragment::createNucleus);
     359      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     360      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
     361      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
    354362      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    355363        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    358366    {
    359367      // tests positions for no containment in otherfragment (but last)
    360       Fragment::nuclei_t invalidnuclei(positions.size()-1);
    361       std::transform(positions.begin(), --positions.end(),
    362           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     368      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
     369      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
     370      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
     371      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
    363372      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    364373        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    367376    {
    368377      // tests otherpositions for containment in otherfragment
    369       Fragment::nuclei_t validnuclei(otherpositions.size());
    370       std::transform(otherpositions.begin(), otherpositions.end(),
    371           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     378      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    372379      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    373380        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    390397    otherpos[1] = 0.;
    391398    otherpositions += otherpos;
     399    Fragment::atomicnumbers_t otheratomicnumbers;
     400    otheratomicnumbers += 1, 2, 3;
    392401    Fragment::charges_t othercharges;
    393402    othercharges += 1., 2., 3.;
    394     Fragment otherfragment(otherpositions, othercharges);
     403    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    395404    const size_t othersize = otherfragment.nuclei.size();
    396405    const size_t size = fragment->nuclei.size();
     
    400409    {
    401410      // tests positions for containment
    402       Fragment::nuclei_t validnuclei(positions.size());
    403       std::transform(positions.begin(), positions.end(),
    404           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     411      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    405412      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    406413        CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
     
    409416    {
    410417      // tests otherpositions for no containment
    411       Fragment::nuclei_t invalidnuclei(otherpositions.size());
    412       std::transform(otherpositions.begin(), otherpositions.end(),
    413           othercharges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     418      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    414419      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    415420        CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
     
    418423    {
    419424      // tests positions for no containment in otherfragment
    420       Fragment::nuclei_t invalidnuclei(positions.size());
    421       std::transform(positions.begin(), positions.end(),
    422           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     425      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    423426      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    424427        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    427430    {
    428431      // tests otherpositions for containment in otherfragment
    429       Fragment::nuclei_t validnuclei(otherpositions.size());
    430       std::transform(otherpositions.begin(), otherpositions.end(),
    431           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     432      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    432433      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    433434        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
     
    450451    otherpos[1] = 2.;
    451452    otherpositions += otherpos;
     453    Fragment::atomicnumbers_t otheratomicnumbers;
     454    otheratomicnumbers += 1, 2, 3;
    452455    Fragment::charges_t othercharges;
    453456    othercharges += 1., 2., 3.;
    454     Fragment otherfragment(otherpositions, othercharges);
     457    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
    455458    const size_t othersize = otherfragment.nuclei.size();
    456459    const size_t size = fragment->nuclei.size();
     
    461464    {
    462465      // tests all but last for containment
    463       Fragment::nuclei_t validnuclei(positions.size());
    464       std::transform(positions.begin(), positions.end(),
    465           charges.begin(), validnuclei.begin(), Fragment::createNucleus);
     466      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
    466467      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    467468        if (Fragment::isPositionEqual(nucleus.first, otherpositions[0])) // only test position
     
    473474    {
    474475      // tests positions for no containment in otherfragment
    475       Fragment::nuclei_t invalidnuclei(positions.size()-1);
    476       std::transform(positions.begin(), --positions.end(),
    477           charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
     476      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
     477      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
     478      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
     479      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
    478480      BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
    479481        CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
     
    482484    {
    483485      // tests otherpositions for containment in otherfragment
    484       Fragment::nuclei_t validnuclei(otherpositions.size());
    485       std::transform(otherpositions.begin(), otherpositions.end(),
    486           othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
     486      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
    487487      BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
    488488        CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
  • src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp

    r95304c r6829d2  
    5555      Fragment *fragment;
    5656      Fragment::positions_t positions;
     57      Fragment::atomicnumbers_t atomicnumbers;
    5758      Fragment::charges_t charges;
    5859};
Note: See TracChangeset for help on using the changeset viewer.