int Zmatrix_Scan::scanInZmatrix(){ stringstream output; int numOfLines=0; ifstream zmatrixScanner(fileName.c_str()); if( !zmatrixScanner.is_open() ) return -1; else { string line; while( zmatrixScanner.good() ) { numOfLines++; getline(zmatrixScanner,line); Molecule workingMolecule; //check if it is a commented line, //or if it is a title line try{ if(line.at(0) != '#' && numOfLines > 1) parseLine(line,numOfLines); } catch(std::out_of_range& e){} if (startNewMolecule){ Atom* atomArray; Bond* bondArray; Angle* angleArray; Dihedral* dihedralArray; atomArray = (Atom*) malloc(sizeof(Atom) * atomVector.size()); bondArray = (Bond*) malloc(sizeof(Bond) * bondVector.size()); angleArray = (Angle*) malloc(sizeof(Angle) * angleVector.size()); dihedralArray = (Dihedral*) malloc(sizeof(Dihedral) * dihedralVector.size()); for (int i = 0; i < atomVector.size(); i++){ atomArray[i] = atomVector[i]; } for (int i = 0; i < bondVector.size(); i++){ bondArray[i] = bondVector[i]; } for (int i = 0; i < angleVector.size(); i++){ angleArray[i] = angleVector[i]; } for (int i = 0; i < dihedralVector.size(); i++){ dihedralArray[i] = dihedralVector[i]; } moleculePattern.push_back(createMolecule(-1, atomArray, angleArray, bondArray, dihedralArray, atomVector.size(), angleVector.size(), bondVector.size(), dihedralVector.size())); atomVector.clear(); bondVector.clear(); angleVector.clear(); dihedralVector.clear(); startNewMolecule = false; } } zmatrixScanner.close(); } return 0; }
bool ZmatrixScanner::readInZmatrix(string filename, OplsScanner* scanner) { fileName = filename; oplsScanner = scanner; startNewMolecule = false; if (fileName.empty()) { std::cerr << "Error: readInZmatrix(): Given filename is NULL" << std::endl; return false; } stringstream output; int numOfLines=0; ifstream zmatrixScanner(fileName.c_str()); if (!zmatrixScanner.is_open()) { std::cerr << "Error: Unable to open Z-Matrix file (" << fileName << ")" << std::endl; return false; } string line; int moleculeNum = -1; while (zmatrixScanner.good()) { numOfLines++; getline(zmatrixScanner, line); Molecule workingMolecule; workingMolecule.type = moleculeNum; try { if (line.at(0) != '#' && numOfLines > 1) { parseLine(line,numOfLines); } } catch (std::out_of_range& e) {} if (startNewMolecule) { Atom* atomArray; Bond* bondArray; Angle* angleArray; Dihedral* dihedralArray; moleculeNum++; workingMolecule.type = moleculeNum; double atomVectorSize = atomVector.size(); atomArray = (Atom*) malloc(sizeof(Atom) * atomVector.size()); bondArray = (Bond*) malloc(sizeof(Bond) * bondVector.size()); angleArray = (Angle*) malloc(sizeof(Angle) * angleVector.size()); dihedralArray = (Dihedral*) malloc(sizeof(Dihedral) * dihedralVector.size()); for (int i = 0; i < atomVector.size(); i++) { atomArray[i] = atomVector[i]; } for (int i = 0; i < bondVector.size(); i++) { bondArray[i] = bondVector[i]; } for (int i = 0; i < angleVector.size(); i++) { angleArray[i] = angleVector[i]; } for (int i = 0; i < dihedralVector.size(); i++) { dihedralArray[i] = dihedralVector[i]; } moleculePattern.push_back(createMolecule(-1, moleculeNum, atomArray, angleArray, bondArray, dihedralArray, atomVector.size(), angleVector.size(), bondVector.size(), dihedralVector.size())); atomVector.clear(); bondVector.clear(); angleVector.clear(); dihedralVector.clear(); startNewMolecule = false; } } zmatrixScanner.close(); return true; }