Example #1
0
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;
}
Example #2
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;
}