1 /*========================================================================= 2 3 Program: Visualization Toolkit 4 5 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 6 All rights reserved. 7 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 8 9 This software is distributed WITHOUT ANY WARRANTY; without even 10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 11 PURPOSE. See the above copyright notice for more information. 12 13 =========================================================================*/ 14 15 #include "vtkAbstractElectronicData.h" 16 #include "vtkDataSetCollection.h" 17 #include "vtkImageData.h" 18 #include "vtkMolecule.h" 19 #include "vtkNew.h" 20 #include "vtkOpenQubeElectronicData.h" 21 #include "vtkOpenQubeMoleculeSource.h" 22 #include "vtkTestUtilities.h" 23 #include "vtkWeakPointer.h" 24 25 #include <openqube/basissetloader.h> 26 TestOpenQubeElectronicData(int argc,char * argv[])27int TestOpenQubeElectronicData(int argc, char *argv[]) 28 { 29 char* fname = vtkTestUtilities::ExpandDataFileName( 30 argc, argv, "Data/2h2o.out"); 31 32 vtkNew<vtkOpenQubeMoleculeSource> oq; 33 oq->SetFileName(fname); 34 oq->Update(); 35 36 vtkWeakPointer<vtkOpenQubeElectronicData> oqed; 37 oqed = vtkOpenQubeElectronicData::SafeDownCast( 38 oq->GetOutput()->GetElectronicData()); 39 40 if (!oqed) 41 { 42 cerr << "Molecule's electronic data is not from OpenQube.\n"; 43 return EXIT_FAILURE; 44 } 45 46 // Set parameters to generate fast, low-res cubes 47 const float lowResSpacing1 = 1.0; 48 const float lowResSpacing2 = 1.5; 49 const float lowResPadding1 = 1.0; 50 const float lowResPadding2 = 1.5; 51 vtkIdType expectedNumberOfImages = 0; 52 53 // Calculate 4 cubes using all combinations of the above parameters. 54 // Test that the number of cached images increases accordingly, and that 55 // when a cached image is returned, it is the correct one. 56 oqed->SetSpacing(lowResSpacing1); 57 oqed->SetPadding(lowResPadding1); 58 vtkImageData *testImage11 = oqed->GetHOMO(); 59 ++expectedNumberOfImages; 60 if (oqed->GetImages()->GetNumberOfItems() != expectedNumberOfImages) 61 { 62 cerr << "Number of cached images (" 63 << oqed->GetImages()->GetNumberOfItems() << ") not equal to the " 64 "number of expected images (" << expectedNumberOfImages << ")\n"; 65 return EXIT_FAILURE; 66 } 67 if (oqed->GetHOMO() != testImage11) 68 { 69 cerr << "(Test11) New orbital calculated when cached image is " 70 "available\n"; 71 return EXIT_FAILURE; 72 } 73 74 oqed->SetSpacing(lowResSpacing1); 75 oqed->SetPadding(lowResPadding2); 76 vtkImageData *testImage12 = oqed->GetHOMO(); 77 ++expectedNumberOfImages; 78 if (oqed->GetImages()->GetNumberOfItems() != expectedNumberOfImages) 79 { 80 cerr << "Number of cached images (" 81 << oqed->GetImages()->GetNumberOfItems() << ") not equal to the " 82 "number of expected images (" << expectedNumberOfImages << ")\n"; 83 return EXIT_FAILURE; 84 } 85 if (oqed->GetHOMO() != testImage12) 86 { 87 cerr << "(Test12) New orbital calculated when cached image is " 88 "available\n"; 89 return EXIT_FAILURE; 90 } 91 92 oqed->SetSpacing(lowResSpacing2); 93 oqed->SetPadding(lowResPadding1); 94 vtkImageData *testImage21 = oqed->GetHOMO(); 95 ++expectedNumberOfImages; 96 if (oqed->GetImages()->GetNumberOfItems() != expectedNumberOfImages) 97 { 98 cerr << "Number of cached images (" 99 << oqed->GetImages()->GetNumberOfItems() << ") not equal to the " 100 "number of expected images (" << expectedNumberOfImages << ")\n"; 101 return EXIT_FAILURE; 102 } 103 if (oqed->GetHOMO() != testImage21) 104 { 105 cerr << "(Test21) New orbital calculated when cached image is " 106 "available\n"; 107 return EXIT_FAILURE; 108 } 109 110 oqed->SetSpacing(lowResSpacing2); 111 oqed->SetPadding(lowResPadding2); 112 vtkImageData *testImage22 = oqed->GetHOMO(); 113 ++expectedNumberOfImages; 114 if (oqed->GetImages()->GetNumberOfItems() != expectedNumberOfImages) 115 { 116 cerr << "Number of cached images (" 117 << oqed->GetImages()->GetNumberOfItems() << ") not equal to the " 118 "number of expected images (" << expectedNumberOfImages << ")\n"; 119 return EXIT_FAILURE; 120 } 121 if (oqed->GetHOMO() != testImage22) 122 { 123 cerr << "(Test22) New orbital calculated when cached image is " 124 "available\n"; 125 return EXIT_FAILURE; 126 } 127 128 129 return EXIT_SUCCESS; 130 } 131