Changes in / [244a84:04b6f9]


Ignore:
Files:
52 added
11 edited

Legend:

Unmodified
Added
Removed
  • Makefile.am

    r244a84 r04b6f9  
    33
    44EXTRA_DIST = autogen.sh
     5
     6.PHONY: doc
     7doc:
     8        cd doc && make doxygen-docs
  • doc/Doxyfile

    r244a84 r04b6f9  
    125125# configuration options related to source browsing
    126126#---------------------------------------------------------------------------
    127 SOURCE_BROWSER         = NO
     127SOURCE_BROWSER         = YES
    128128INLINE_SOURCES         = NO
    129129STRIP_CODE_COMMENTS    = YES
  • src/Makefile.am

    r244a84 r04b6f9  
    88ANALYSISHEADER = analysis_bonds.hpp analysis_correlation.hpp
    99
    10 SOURCE = ${ANALYSISSOURCE} ${ATOMSOURCE} bond.cpp bondgraph.cpp boundary.cpp config.cpp element.cpp ellipsoid.cpp errorlogger.cpp graph.cpp helpers.cpp info.cpp leastsquaremin.cpp linkedcell.cpp log.cpp logger.cpp memoryusageobserver.cpp moleculelist.cpp molecule.cpp molecule_dynamics.cpp molecule_fragmentation.cpp molecule_geometry.cpp molecule_graph.cpp molecule_pointcloud.cpp parser.cpp periodentafel.cpp tesselation.cpp tesselationhelpers.cpp vector.cpp verbose.cpp
    11 HEADER = ${ANALYSISHEADER} ${ATOMHEADER} bond.hpp bondgraph.hpp boundary.hpp config.hpp defs.hpp element.hpp ellipsoid.hpp errorlogger.hpp graph.hpp helpers.hpp info.hpp leastsquaremin.hpp linkedcell.hpp lists.hpp log.hpp logger.hpp memoryallocator.hpp memoryusageobserver.hpp molecule.hpp molecule_template.hpp parser.hpp periodentafel.hpp stackclass.hpp tesselation.hpp tesselationhelpers.hpp vector.hpp verbose.hpp
     10ACTIONSSOURCE = Actions/Action.cpp Actions/MethodAction.cpp Actions/ActionSequence.cpp Actions/MakroAction.cpp Actions/ErrorAction.cpp Actions/ActionRegistry.cpp
     11ACTIONSHEADER = Actions/Action.hpp Actions/MethodAction.hpp Actions/ActionSequence.hpp Actions/MakroAction.hpp Actions/ErrorAction.hpp Actions/ActionRegistry.hpp
     12
     13VIEWSOURCE = Views/View.cpp Views/StringView.cpp Views/MethodStringView.cpp Views/StreamStringView.cpp
     14VIEWHEADER = Views/View.hpp Views/StringView.hpp Views/MethodStringView.hpp Views/StreamStringView.hpp
     15
     16MENUSOURCE = Menu/Menu.cpp Menu/TextMenu.cpp Menu/MenuItem.cpp Menu/SubMenuItem.cpp Menu/ActionMenuItem.cpp Menu/SeperatorItem.cpp Menu/DisplayMenuItem.cpp
     17MENUHEADER = Menu/Menu.hpp Menu/TextMenu.hpp Menu/MenuItem.hpp Menu/SubMenuItem.hpp Menu/ActionMenuItem.hpp Menu/SeperatorItem.hpp Menu/DisplayMenuItem.hpp
     18
     19UISOURCE = ${ACTIONSSOURCE} ${VIEWSOURCE} ${MENUSOURCE} UIElements/UIFactory.cpp UIElements/TextUIFactory.cpp UIElements/MainWindow.cpp UIElements/TextWindow.cpp UIElements/Dialog.cpp UIElements/TextDialog.cpp
     20UIHEADER = ${ACTIONSHEADER} ${VIEWHEADER} ${MENUHEADER} UIElements/UIFactory.hpp UIElements/TextUIFactory.hpp UIElements/MainWindow.hpp UIElements/TextWindow.hpp UIElements/Dialog.hpp UIElements/TextDialog.hpp
     21
     22SOURCE = ${ANALYSISSOURCE} ${ATOMSOURCE} ${UISOURCE} bond.cpp bondgraph.cpp boundary.cpp config.cpp element.cpp ellipsoid.cpp errorlogger.cpp graph.cpp helpers.cpp info.cpp leastsquaremin.cpp linkedcell.cpp log.cpp logger.cpp memoryusageobserver.cpp moleculelist.cpp molecule.cpp molecule_dynamics.cpp molecule_fragmentation.cpp molecule_geometry.cpp molecule_graph.cpp molecule_pointcloud.cpp parser.cpp periodentafel.cpp tesselation.cpp tesselationhelpers.cpp vector.cpp verbose.cpp menu.cpp
     23HEADER = ${ANALYSISHEADER} ${ATOMHEADER} ${UIHEADER} bond.hpp bondgraph.hpp boundary.hpp config.hpp defs.hpp element.hpp ellipsoid.hpp errorlogger.hpp graph.hpp helpers.hpp info.hpp leastsquaremin.hpp linkedcell.hpp lists.hpp log.hpp logger.hpp memoryallocator.hpp memoryusageobserver.hpp molecule.hpp molecule_template.hpp parser.hpp periodentafel.hpp stackclass.hpp tesselation.hpp tesselationhelpers.hpp vector.hpp verbose.hpp menu.hpp
    1224
    1325BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB)
  • src/builder.cpp

    r244a84 r04b6f9  
    4848
    4949
     50#include <boost/bind.hpp>
     51
    5052using namespace std;
    5153
     
    6769#include "molecule.hpp"
    6870#include "periodentafel.hpp"
     71#include "UIElements/UIFactory.hpp"
     72#include "UIElements/MainWindow.hpp"
     73#include "UIElements/Dialog.hpp"
     74#include "Menu/ActionMenuItem.hpp"
     75#include "Actions/ActionRegistry.hpp"
     76#include "Actions/MethodAction.hpp"
    6977#include "version.h"
    7078
    7179/********************************************* Subsubmenu routine ************************************/
    72 
     80#if 0
    7381/** Submenu for adding atoms to the molecule.
    7482 * \param *periode periodentafel
     
    11551163};
    11561164
    1157 
    11581165/********************************************** Test routine **************************************/
    11591166
     
    12391246};
    12401247
    1241 /** Tries given filename or standard on saving the config file.
    1242  * \param *ConfigFileName name of file
    1243  * \param *configuration pointer to configuration structure with all the values
    1244  * \param *periode pointer to periodentafel structure with all the elements
    1245  * \param *molecules list of molecules structure with all the atoms and coordinates
    1246  */
    1247 static void SaveConfig(char *ConfigFileName, config *configuration, periodentafel *periode, MoleculeListClass *molecules)
    1248 {
    1249   char filename[MAXSTRINGSIZE];
    1250   ofstream output;
    1251   molecule *mol = new molecule(periode);
    1252   mol->SetNameFromFilename(ConfigFileName);
    1253 
    1254   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
    1255     eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
    1256   }
    1257 
    1258 
    1259   // first save as PDB data
    1260   if (ConfigFileName != NULL)
    1261     strcpy(filename, ConfigFileName);
    1262   if (output == NULL)
    1263     strcpy(filename,"main_pcp_linux");
    1264   Log() << Verbose(0) << "Saving as pdb input ";
    1265   if (configuration->SavePDB(filename, molecules))
    1266     Log() << Verbose(0) << "done." << endl;
    1267   else
    1268     Log() << Verbose(0) << "failed." << endl;
    1269 
    1270   // then save as tremolo data file
    1271   if (ConfigFileName != NULL)
    1272     strcpy(filename, ConfigFileName);
    1273   if (output == NULL)
    1274     strcpy(filename,"main_pcp_linux");
    1275   Log() << Verbose(0) << "Saving as tremolo data input ";
    1276   if (configuration->SaveTREMOLO(filename, molecules))
    1277     Log() << Verbose(0) << "done." << endl;
    1278   else
    1279     Log() << Verbose(0) << "failed." << endl;
    1280 
    1281   // translate each to its center and merge all molecules in MoleculeListClass into this molecule
    1282   int N = molecules->ListOfMolecules.size();
    1283   int *src = new int[N];
    1284   N=0;
    1285   for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) {
    1286     src[N++] = (*ListRunner)->IndexNr;
    1287     (*ListRunner)->Translate(&(*ListRunner)->Center);
    1288   }
    1289   molecules->SimpleMultiAdd(mol, src, N);
    1290   delete[](src);
    1291 
    1292   // ... and translate back
    1293   for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) {
    1294     (*ListRunner)->Center.Scale(-1.);
    1295     (*ListRunner)->Translate(&(*ListRunner)->Center);
    1296     (*ListRunner)->Center.Scale(-1.);
    1297   }
    1298 
    1299   Log() << Verbose(0) << "Storing configuration ... " << endl;
    1300   // get correct valence orbitals
    1301   mol->CalculateOrbitals(*configuration);
    1302   configuration->InitMaxMinStopStep = configuration->MaxMinStopStep = configuration->MaxPsiDouble;
    1303   if (ConfigFileName != NULL) { // test the file name
    1304     strcpy(filename, ConfigFileName);
    1305     output.open(filename, ios::trunc);
    1306   } else if (strlen(configuration->configname) != 0) {
    1307     strcpy(filename, configuration->configname);
    1308     output.open(configuration->configname, ios::trunc);
    1309     } else {
    1310       strcpy(filename, DEFAULTCONFIG);
    1311       output.open(DEFAULTCONFIG, ios::trunc);
    1312     }
    1313   output.close();
    1314   output.clear();
    1315   Log() << Verbose(0) << "Saving of config file ";
    1316   if (configuration->Save(filename, periode, mol))
    1317     Log() << Verbose(0) << "successful." << endl;
    1318   else
    1319     Log() << Verbose(0) << "failed." << endl;
    1320 
    1321   // and save to xyz file
    1322   if (ConfigFileName != NULL) {
    1323     strcpy(filename, ConfigFileName);
    1324     strcat(filename, ".xyz");
    1325     output.open(filename, ios::trunc);
    1326   }
    1327   if (output == NULL) {
    1328     strcpy(filename,"main_pcp_linux");
    1329     strcat(filename, ".xyz");
    1330     output.open(filename, ios::trunc);
    1331   }
    1332   Log() << Verbose(0) << "Saving of XYZ file ";
    1333   if (mol->MDSteps <= 1) {
    1334     if (mol->OutputXYZ(&output))
    1335       Log() << Verbose(0) << "successful." << endl;
    1336     else
    1337       Log() << Verbose(0) << "failed." << endl;
    1338   } else {
    1339     if (mol->OutputTrajectoriesXYZ(&output))
    1340       Log() << Verbose(0) << "successful." << endl;
    1341     else
    1342       Log() << Verbose(0) << "failed." << endl;
    1343   }
    1344   output.close();
    1345   output.clear();
    1346 
    1347   // and save as MPQC configuration
    1348   if (ConfigFileName != NULL)
    1349     strcpy(filename, ConfigFileName);
    1350   if (output == NULL)
    1351     strcpy(filename,"main_pcp_linux");
    1352   Log() << Verbose(0) << "Saving as mpqc input ";
    1353   if (configuration->SaveMPQC(filename, mol))
    1354     Log() << Verbose(0) << "done." << endl;
    1355   else
    1356     Log() << Verbose(0) << "failed." << endl;
    1357 
    1358   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
    1359     eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
    1360   }
    1361 
    1362   delete(mol);
    1363 };
     1248#endif
    13641249
    13651250/** Parses the command line options.
     
    13731258 * \return exit code (0 - successful, all else - something's wrong)
    13741259 */
    1375 static int ParseCommandLineOptions(int argc, char **argv, MoleculeListClass *&molecules, periodentafel *&periode, config& configuration, char *&ConfigFileName)
     1260static int ParseCommandLineOptions(int argc, char **argv, MoleculeListClass *&molecules, periodentafel *&periode,\
     1261                                   config& configuration, char *&ConfigFileName)
    13761262{
    13771263  Vector x,y,z,n;  // coordinates for absolute point in cell volume
     
    22102096    } while (argptr < argc);
    22112097    if (SaveFlag)
    2212       SaveConfig(ConfigFileName, &configuration, periode, molecules);
     2098      configuration.SaveAll(ConfigFileName, periode, molecules);
    22132099  } else {  // no arguments, hence scan the elements db
    22142100    if (periode->LoadPeriodentafel(configuration.databasepath))
     
    22212107};
    22222108
     2109/***************************************** Functions used to build all menus **********************/
     2110
     2111void populateEditMoleculesMenu(Menu* editMoleculesMenu,MoleculeListClass *molecules, config *configuration, periodentafel *periode){
     2112  // build the EditMoleculesMenu
     2113  Action *createMoleculeAction = new MethodAction("createMoleculeAction",boost::bind(&MoleculeListClass::createNewMolecule,molecules,periode));
     2114  new ActionMenuItem('c',"create new molecule",editMoleculesMenu,createMoleculeAction);
     2115
     2116  Action *loadMoleculeAction = new MethodAction("loadMoleculeAction",boost::bind(&MoleculeListClass::loadFromXYZ,molecules,periode));
     2117  new ActionMenuItem('l',"load molecule from xyz file",editMoleculesMenu,loadMoleculeAction);
     2118
     2119  Action *changeFilenameAction = new MethodAction("changeFilenameAction",boost::bind(&MoleculeListClass::changeName,molecules));
     2120  new ActionMenuItem('n',"change molecule's name",editMoleculesMenu,changeFilenameAction);
     2121
     2122  Action *giveFilenameAction = new MethodAction("giveFilenameAction",boost::bind(&MoleculeListClass::setMoleculeFilename,molecules));
     2123  new ActionMenuItem('N',"give molecules filename",editMoleculesMenu,giveFilenameAction);
     2124
     2125  Action *parseAtomsAction = new MethodAction("parseAtomsAction",boost::bind(&MoleculeListClass::parseXYZIntoMolecule,molecules));
     2126  new ActionMenuItem('p',"parse atoms in xyz file into molecule",editMoleculesMenu,parseAtomsAction);
     2127
     2128  Action *eraseMoleculeAction = new MethodAction("eraseMoleculeAction",boost::bind(&MoleculeListClass::eraseMolecule,molecules));
     2129  new ActionMenuItem('r',"remove a molecule",editMoleculesMenu,eraseMoleculeAction);
     2130}
     2131
     2132
    22232133/********************************************** Main routine **************************************/
    22242134
    22252135int main(int argc, char **argv)
    22262136{
    2227   periodentafel *periode = new periodentafel; // and a period table of all elements
    2228   MoleculeListClass *molecules = new MoleculeListClass;  // list of all molecules
    2229   molecule *mol = NULL;
    2230   config *configuration = new config;
    2231   char choice;  // menu choice char
    2232   Vector x,y,z,n;  // coordinates for absolute point in cell volume
    2233   ifstream test;
    2234   ofstream output;
    2235   string line;
    2236   char *ConfigFileName = NULL;
    2237   int j;
    2238 
    2239   cout << ESPACKVersion << endl;
    2240 
    2241   setVerbosity(0);
    2242 
    2243   // =========================== PARSE COMMAND LINE OPTIONS ====================================
    2244   j = ParseCommandLineOptions(argc, argv, molecules, periode, *configuration, ConfigFileName);
    2245   switch(j) {
    2246     case 255:  // something went wrong
    2247     case 2:  // just for -f option
    2248     case 1:  // just for -v and -h options
    2249       delete(molecules); // also free's all molecules contained
    2250       delete(periode);
    2251       delete(configuration);
    2252       Log() << Verbose(0) <<  "Maximum of allocated memory: "
    2253         << MemoryUsageObserver::getInstance()->getMaximumUsedMemory() << endl;
    2254       Log() << Verbose(0) <<  "Remaining non-freed memory: "
    2255         << MemoryUsageObserver::getInstance()->getUsedMemorySize() << endl;
    2256       MemoryUsageObserver::getInstance()->purgeInstance();
    2257       logger::purgeInstance();
    2258       errorLogger::purgeInstance();
    2259      return (j == 1 ? 0 : j);
    2260     default:
    2261       break;
    2262   }
    2263 
    2264   // General stuff
    2265   if (molecules->ListOfMolecules.size() == 0) {
    2266     mol = new molecule(periode);
    2267     if (mol->cell_size[0] == 0.) {
    2268       Log() << Verbose(0) << "enter lower tridiagonal form of basis matrix" << endl << endl;
    2269       for (int i=0;i<6;i++) {
    2270         Log() << Verbose(1) << "Cell size" << i << ": ";
    2271         cin >> mol->cell_size[i];
    2272       }
     2137  periodentafel *periode = new periodentafel;
     2138    MoleculeListClass *molecules = new MoleculeListClass;
     2139    molecule *mol = NULL;
     2140    config *configuration = new config;
     2141    Vector x, y, z, n;
     2142    ifstream test;
     2143    ofstream output;
     2144    string line;
     2145    char *ConfigFileName = NULL;
     2146    int j;
     2147    setVerbosity(0);
     2148    /* structure of ParseCommandLineOptions will be refactored later */
     2149    j = ParseCommandLineOptions(argc, argv, molecules, periode, *configuration, ConfigFileName);
     2150    switch (j){
     2151        case 255:
     2152        case 2:
     2153        case 1:
     2154            delete (molecules);
     2155            delete (periode);
     2156            delete (configuration);
     2157            Log() << Verbose(0) << "Maximum of allocated memory: " << MemoryUsageObserver::getInstance()->getMaximumUsedMemory() << endl;
     2158            Log() << Verbose(0) << "Remaining non-freed memory: " << MemoryUsageObserver::getInstance()->getUsedMemorySize() << endl;
     2159            MemoryUsageObserver::getInstance()->purgeInstance();
     2160            logger::purgeInstance();
     2161            errorLogger::purgeInstance();
     2162            return (j == 1 ? 0 : j);
     2163        default:
     2164            break;
    22732165    }
    2274     mol->ActiveFlag = true;
    2275     molecules->insert(mol);
    2276   }
    2277 
    2278   // =========================== START INTERACTIVE SESSION ====================================
    2279 
    2280   // now the main construction loop
    2281   Log() << Verbose(0) << endl << "Now comes the real construction..." << endl;
    2282   do {
    2283     Log() << Verbose(0) << endl << endl;
    2284     Log() << Verbose(0) << "============Molecule list=======================" << endl;
    2285     molecules->Enumerate((ofstream *)&cout);
    2286     Log() << Verbose(0) << "============Menu===============================" << endl;
    2287     Log() << Verbose(0) << "a - set molecule (in)active" << endl;
    2288     Log() << Verbose(0) << "e - edit molecules (load, parse, save)" << endl;
    2289     Log() << Verbose(0) << "g - globally manipulate atoms in molecule" << endl;
    2290     Log() << Verbose(0) << "M - Merge molecules" << endl;
    2291     Log() << Verbose(0) << "m - manipulate atoms" << endl;
    2292     Log() << Verbose(0) << "-----------------------------------------------" << endl;
    2293     Log() << Verbose(0) << "c - edit the current configuration" << endl;
    2294     Log() << Verbose(0) << "-----------------------------------------------" << endl;
    2295     Log() << Verbose(0) << "s - save current setup to config file" << endl;
    2296     Log() << Verbose(0) << "T - call the current test routine" << endl;
    2297     Log() << Verbose(0) << "q - quit" << endl;
    2298     Log() << Verbose(0) << "===============================================" << endl;
    2299     Log() << Verbose(0) << "Input: ";
    2300     cin >> choice;
    2301 
    2302     switch (choice) {
    2303       case 'a':  // (in)activate molecule
    2304         {
    2305           Log() << Verbose(0) << "Enter index of molecule: ";
    2306           cin >> j;
    2307           for(MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
    2308             if ((*ListRunner)->IndexNr == j)
    2309               (*ListRunner)->ActiveFlag = !(*ListRunner)->ActiveFlag;
     2166    if(molecules->ListOfMolecules.size() == 0){
     2167        mol = new molecule(periode);
     2168        if(mol->cell_size[0] == 0.){
     2169            Log() << Verbose(0) << "enter lower tridiagonal form of basis matrix" << endl << endl;
     2170            for(int i = 0;i < 6;i++){
     2171                Log() << Verbose(1) << "Cell size" << i << ": ";
     2172                cin >> mol->cell_size[i];
     2173            }
    23102174        }
    2311         break;
    2312 
    2313       case 'c': // edit each field of the configuration
    2314        configuration->Edit();
    2315        break;
    2316 
    2317       case 'e': // create molecule
    2318         EditMolecules(periode, molecules);
    2319         break;
    2320 
    2321       case 'g': // manipulate molecules
    2322         ManipulateMolecules(periode, molecules, configuration);
    2323         break;
    2324 
    2325       case 'M':  // merge molecules
    2326         MergeMolecules(periode, molecules);
    2327         break;
    2328 
    2329       case 'm': // manipulate atoms
    2330         ManipulateAtoms(periode, molecules, configuration);
    2331         break;
    2332 
    2333       case 'q': // quit
    2334         break;
    2335 
    2336       case 's': // save to config file
    2337         SaveConfig(ConfigFileName, configuration, periode, molecules);
    2338         break;
    2339 
    2340       case 'T':
    2341         testroutine(molecules);
    2342         break;
    2343 
    2344       default:
    2345         break;
    2346     };
    2347   } while (choice != 'q');
    2348 
    2349   // save element data base
    2350   if (periode->StorePeriodentafel(configuration->databasepath)) //ElementsFileName
    2351     Log() << Verbose(0) << "Saving of elements.db successful." << endl;
    2352   else
    2353     Log() << Verbose(0) << "Saving of elements.db failed." << endl;
    2354 
    2355   delete(molecules); // also free's all molecules contained
    2356   delete(periode);
     2175
     2176        mol->ActiveFlag = true;
     2177        molecules->insert(mol);
     2178    }
     2179
     2180    {
     2181      cout << ESPACKVersion << endl;
     2182
     2183      setVerbosity(0);
     2184
     2185      menuPopulaters populaters;
     2186      populaters.MakeEditMoleculesMenu = populateEditMoleculesMenu;
     2187
     2188      UIFactory::makeUserInterface(UIFactory::Text);
     2189      MainWindow *mainWindow = UIFactory::get()->makeMainWindow(populaters,molecules, configuration, periode, ConfigFileName);
     2190      mainWindow->display();
     2191      delete mainWindow;
     2192    }
     2193
     2194    if(periode->StorePeriodentafel(configuration->databasepath))
     2195        Log() << Verbose(0) << "Saving of elements.db successful." << endl;
     2196
     2197    else
     2198        Log() << Verbose(0) << "Saving of elements.db failed." << endl;
     2199
     2200    delete (molecules);
     2201    delete(periode);
    23572202  delete(configuration);
     2203
     2204
    23582205
    23592206  Log() << Verbose(0) <<  "Maximum of allocated memory: "
     
    23642211  logger::purgeInstance();
    23652212  errorLogger::purgeInstance();
    2366 
     2213  UIFactory::purgeInstance();
     2214  ActionRegistry::purgeRegistry();
    23672215  return (0);
    23682216}
  • src/config.cpp

    r244a84 r04b6f9  
    17771777};
    17781778
     1779
     1780/** Tries given filename or standard on saving the config file.
     1781 * \param *ConfigFileName name of file
     1782 * \param *periode pointer to periodentafel structure with all the elements
     1783 * \param *molecules list of molecules structure with all the atoms and coordinates
     1784 */
     1785void config::SaveAll(char *ConfigFileName, periodentafel *periode, MoleculeListClass *molecules)
     1786{
     1787  char filename[MAXSTRINGSIZE];
     1788  ofstream output;
     1789  molecule *mol = new molecule(periode);
     1790  mol->SetNameFromFilename(ConfigFileName);
     1791
     1792  if (!strcmp(configpath, GetDefaultPath())) {
     1793    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
     1794  }
     1795
     1796
     1797  // first save as PDB data
     1798  if (ConfigFileName != NULL)
     1799    strcpy(filename, ConfigFileName);
     1800  if (output == NULL)
     1801    strcpy(filename,"main_pcp_linux");
     1802  Log() << Verbose(0) << "Saving as pdb input ";
     1803  if (SavePDB(filename, molecules))
     1804    Log() << Verbose(0) << "done." << endl;
     1805  else
     1806    Log() << Verbose(0) << "failed." << endl;
     1807
     1808  // then save as tremolo data file
     1809  if (ConfigFileName != NULL)
     1810    strcpy(filename, ConfigFileName);
     1811  if (output == NULL)
     1812    strcpy(filename,"main_pcp_linux");
     1813  Log() << Verbose(0) << "Saving as tremolo data input ";
     1814  if (SaveTREMOLO(filename, molecules))
     1815    Log() << Verbose(0) << "done." << endl;
     1816  else
     1817    Log() << Verbose(0) << "failed." << endl;
     1818
     1819  // translate each to its center and merge all molecules in MoleculeListClass into this molecule
     1820  int N = molecules->ListOfMolecules.size();
     1821  int *src = new int[N];
     1822  N=0;
     1823  for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) {
     1824    src[N++] = (*ListRunner)->IndexNr;
     1825    (*ListRunner)->Translate(&(*ListRunner)->Center);
     1826  }
     1827  molecules->SimpleMultiAdd(mol, src, N);
     1828  delete[](src);
     1829
     1830  // ... and translate back
     1831  for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) {
     1832    (*ListRunner)->Center.Scale(-1.);
     1833    (*ListRunner)->Translate(&(*ListRunner)->Center);
     1834    (*ListRunner)->Center.Scale(-1.);
     1835  }
     1836
     1837  Log() << Verbose(0) << "Storing configuration ... " << endl;
     1838  // get correct valence orbitals
     1839  mol->CalculateOrbitals(*this);
     1840  InitMaxMinStopStep = MaxMinStopStep = MaxPsiDouble;
     1841  if (ConfigFileName != NULL) { // test the file name
     1842    strcpy(filename, ConfigFileName);
     1843    output.open(filename, ios::trunc);
     1844  } else if (strlen(configname) != 0) {
     1845    strcpy(filename, configname);
     1846    output.open(configname, ios::trunc);
     1847    } else {
     1848      strcpy(filename, DEFAULTCONFIG);
     1849      output.open(DEFAULTCONFIG, ios::trunc);
     1850    }
     1851  output.close();
     1852  output.clear();
     1853  Log() << Verbose(0) << "Saving of config file ";
     1854  if (Save(filename, periode, mol))
     1855    Log() << Verbose(0) << "successful." << endl;
     1856  else
     1857    Log() << Verbose(0) << "failed." << endl;
     1858
     1859  // and save to xyz file
     1860  if (ConfigFileName != NULL) {
     1861    strcpy(filename, ConfigFileName);
     1862    strcat(filename, ".xyz");
     1863    output.open(filename, ios::trunc);
     1864  }
     1865  if (output == NULL) {
     1866    strcpy(filename,"main_pcp_linux");
     1867    strcat(filename, ".xyz");
     1868    output.open(filename, ios::trunc);
     1869  }
     1870  Log() << Verbose(0) << "Saving of XYZ file ";
     1871  if (mol->MDSteps <= 1) {
     1872    if (mol->OutputXYZ(&output))
     1873      Log() << Verbose(0) << "successful." << endl;
     1874    else
     1875      Log() << Verbose(0) << "failed." << endl;
     1876  } else {
     1877    if (mol->OutputTrajectoriesXYZ(&output))
     1878      Log() << Verbose(0) << "successful." << endl;
     1879    else
     1880      Log() << Verbose(0) << "failed." << endl;
     1881  }
     1882  output.close();
     1883  output.clear();
     1884
     1885  // and save as MPQC configuration
     1886  if (ConfigFileName != NULL)
     1887    strcpy(filename, ConfigFileName);
     1888  if (output == NULL)
     1889    strcpy(filename,"main_pcp_linux");
     1890  Log() << Verbose(0) << "Saving as mpqc input ";
     1891  if (SaveMPQC(filename, mol))
     1892    Log() << Verbose(0) << "done." << endl;
     1893  else
     1894    Log() << Verbose(0) << "failed." << endl;
     1895
     1896  if (!strcmp(configpath, GetDefaultPath())) {
     1897    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
     1898  }
     1899
     1900  delete(mol);
     1901};
     1902
    17791903/** Reads parameter from a parsed file.
    17801904 * The file is either parsed for a certain keyword or if null is given for
  • src/config.hpp

    r244a84 r04b6f9  
    146146  bool SaveTREMOLO(const char * const filename, const MoleculeListClass * const MolList) const;
    147147
     148  void SaveAll(char *ConfigFileName, periodentafel *periode, MoleculeListClass *molecules);
     149
    148150  void Edit();
    149151  bool GetIsAngstroem() const;
  • src/defs.hpp

    r244a84 r04b6f9  
    7777#define UPDATECOUNT 10  //!< update ten sites per BOSSANOVA interval
    7878
     79#define STD_MENU_LENGTH 60
     80#define STD_MENU_TITLE_SPACER '='
     81#define STD_SEPERATOR_SPACER '-'
     82
    7983#endif /*DEFS_HPP_*/
  • src/molecule.cpp

    r244a84 r04b6f9  
    10831083  }
    10841084};
     1085
     1086void molecule::flipActiveFlag(){
     1087  ActiveFlag = !ActiveFlag;
     1088}
  • src/molecule.hpp

    r244a84 r04b6f9  
    298298  bool OutputTemperatureFromTrajectories(ofstream * const output, int startstep, int endstep);
    299299
     300  // Manipulation routines
     301  void flipActiveFlag();
     302
    300303  private:
    301304  int last_atom;      //!< number given to last atom
     
    326329  int CountAllAtoms() const;
    327330
     331  // Methods moved here from the menus
     332  // TODO: more refactoring needed on these methods
     333  void flipChosen();
     334  void createNewMolecule(periodentafel *periode);
     335  void loadFromXYZ(periodentafel *periode);
     336  void changeName();
     337  void setMoleculeFilename();
     338  void parseXYZIntoMolecule();
     339  void eraseMolecule();
     340
     341
    328342  // merging of molecules
    329343  bool SimpleMerge(molecule *mol, molecule *srcmol);
  • src/moleculelist.cpp

    r244a84 r04b6f9  
    144144
    145145  // header
    146   Log() << Verbose(0) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl;
    147   Log() << Verbose(0) << "-----------------------------------------------" << endl;
     146  (*out) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl;
     147  (*out) << "-----------------------------------------------" << endl;
    148148  if (ListOfMolecules.size() == 0)
    149     Log() << Verbose(0) << "\tNone" << endl;
     149    (*out) << "\tNone" << endl;
    150150  else {
    151151    Origin.Zero();
     
    164164      }
    165165      // output Index, Name, number of atoms, chemical formula
    166       Log() << Verbose(0) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t";
     166      (*out) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t";
    167167      Elemental = (*ListRunner)->elemente->end;
    168168      while(Elemental->previous != (*ListRunner)->elemente->start) {
    169169        Elemental = Elemental->previous;
    170170        if (Counts[Elemental->Z] != 0)
    171           Log() << Verbose(0) << Elemental->symbol << Counts[Elemental->Z];
     171          (*out) << Elemental->symbol << Counts[Elemental->Z];
    172172      }
    173173      // Center and size
    174       Log() << Verbose(0) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl;
     174      (*out) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl;
    175175    }
    176176  }
     
    875875}
    876876
     877/***********
     878 * Methods Moved here from the menus
     879 */
     880
     881void MoleculeListClass::flipChosen() {
     882  int j;
     883  Log() << Verbose(0) << "Enter index of molecule: ";
     884  cin >> j;
     885  for(MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++)
     886    if ((*ListRunner)->IndexNr == j)
     887      (*ListRunner)->ActiveFlag = !(*ListRunner)->ActiveFlag;
     888}
     889
     890void MoleculeListClass::createNewMolecule(periodentafel *periode) {
     891  molecule *mol = NULL;
     892  mol = new molecule(periode);
     893  insert(mol);
     894};
     895
     896void MoleculeListClass::loadFromXYZ(periodentafel *periode){
     897  molecule *mol = NULL;
     898  Vector center;
     899  char filename[MAXSTRINGSIZE];
     900  Log() << Verbose(0) << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;
     901  mol = new molecule(periode);
     902  do {
     903    Log() << Verbose(0) << "Enter file name: ";
     904    cin >> filename;
     905  } while (!mol->AddXYZFile(filename));
     906  mol->SetNameFromFilename(filename);
     907  // center at set box dimensions
     908  mol->CenterEdge(&center);
     909  mol->cell_size[0] = center.x[0];
     910  mol->cell_size[1] = 0;
     911  mol->cell_size[2] = center.x[1];
     912  mol->cell_size[3] = 0;
     913  mol->cell_size[4] = 0;
     914  mol->cell_size[5] = center.x[2];
     915  insert(mol);
     916}
     917
     918void MoleculeListClass::changeName(){
     919  char filename[MAXSTRINGSIZE];
     920  molecule *mol = NULL;
     921  int nr;
     922  do {
     923    Log() << Verbose(0) << "Enter index of molecule: ";
     924    cin >> nr;
     925    mol = ReturnIndex(nr);
     926  } while (mol == NULL);
     927  Log() << Verbose(0) << "Enter name: ";
     928  cin >> filename;
     929  strcpy(mol->name, filename);
     930}
     931
     932void MoleculeListClass::setMoleculeFilename() {
     933  char filename[MAXSTRINGSIZE];
     934  int nr;
     935  molecule *mol = NULL;
     936  do {
     937    Log() << Verbose(0) << "Enter index of molecule: ";
     938    cin >> nr;
     939    mol = ReturnIndex(nr);
     940  } while (mol == NULL);
     941  Log() << Verbose(0) << "Enter name: ";
     942  cin >> filename;
     943  mol->SetNameFromFilename(filename);
     944}
     945
     946void MoleculeListClass::parseXYZIntoMolecule(){
     947  char filename[MAXSTRINGSIZE];
     948  int nr;
     949  molecule *mol = NULL;
     950  mol = NULL;
     951  do {
     952   Log() << Verbose(0) << "Enter index of molecule: ";
     953   cin >> nr;
     954   mol = ReturnIndex(nr);
     955  } while (mol == NULL);
     956  Log() << Verbose(0) << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;
     957  do {
     958   Log() << Verbose(0) << "Enter file name: ";
     959   cin >> filename;
     960  } while (!mol->AddXYZFile(filename));
     961  mol->SetNameFromFilename(filename);
     962};
     963
     964void MoleculeListClass::eraseMolecule(){
     965  int nr;
     966  molecule *mol = NULL;
     967  Log() << Verbose(0) << "Enter index of molecule: ";
     968  cin >> nr;
     969  for(MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++)
     970    if (nr == (*ListRunner)->IndexNr) {
     971      mol = *ListRunner;
     972      ListOfMolecules.erase(ListRunner);
     973      delete(mol);
     974      break;
     975    }
     976};
     977
    877978
    878979/******************************************* Class MoleculeLeafClass ************************************************/
  • src/unittests/Makefile.am

    r244a84 r04b6f9  
    33AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
    44AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
     5
     6MENUTESTS = ActionSequenceTest
    57
    68TESTS = \
     
    2527  Tesselation_InOutsideUnitTest \
    2628  VectorUnitTest
     29   
    2730 
    28 check_PROGRAMS = $(TESTS)
    29 noinst_PROGRAMS = $(TESTS)
     31check_PROGRAMS = $(TESTS) ${MENUTESTS}
     32noinst_PROGRAMS = $(TESTS) ${MENUTESTS}
    3033
    3134ActOnAllUnitTest_SOURCES = ../test/ActOnAllTest.hpp ActOnAllUnitTest.cpp ActOnAllUnitTest.hpp
     
    8992VectorUnitTest_LDADD = ../libmolecuilder.a ../libgslwrapper.a
    9093
     94ActionSequenceTest_SOURCES = ActionSequenceTest.cpp ActionSequenceTest.hpp
     95ActionSequenceTest_LDADD = ../libmolecuilder.a
    9196
    9297#AUTOMAKE_OPTIONS = parallel-tests
Note: See TracChangeset for help on using the changeset viewer.