| 14 | 
  | 
***********************************************************************/ | 
| 15 | 
  | 
 | 
| 16 | 
  | 
#include "oopseformat.hpp" | 
| 17 | 
+ | 
#include <fstream> | 
| 18 | 
  | 
namespace OpenBabel | 
| 19 | 
  | 
{ | 
| 20 | 
  | 
 | 
| 66 | 
  | 
        numMols.push_back((*i).size()); | 
| 67 | 
  | 
    } | 
| 68 | 
  | 
 | 
| 69 | 
< | 
    WriteMDFile(mdMols, numMols);     | 
| 69 | 
> | 
    string OutputFileName = pConv->GetInFilename(); | 
| 70 | 
> | 
    unsigned int pos = OutputFileName.rfind("."); | 
| 71 | 
> | 
    if(pos==string::npos) | 
| 72 | 
> | 
        OutputFileName += ".md"; | 
| 73 | 
> | 
    else | 
| 74 | 
> | 
        OutputFileName = OutputFileName.substr(0, pos) + ".md";        | 
| 75 | 
> | 
    ofstream ofs(OutputFileName.c_str()); | 
| 76 | 
> | 
    if(!ofs) | 
| 77 | 
> | 
    { | 
| 78 | 
> | 
         cerr << "Cannot write to " << OutputFileName <<endl; | 
| 79 | 
> | 
         return false; | 
| 80 | 
> | 
    } | 
| 81 | 
> | 
                 | 
| 82 | 
> | 
    WriteMDFile(mdMols, numMols, ofs);     | 
| 83 | 
  | 
 | 
| 84 | 
  | 
    for(vector<OBMol*>::iterator  i = mdMols.begin(); i != mdMols.end(); ++i)  | 
| 85 | 
  | 
    { | 
| 177 | 
  | 
    newMol->FindTorsions(); | 
| 178 | 
  | 
    return newMol; | 
| 179 | 
  | 
} | 
| 180 | 
< | 
void OOPSEFormat::WriteMDFile(vector<OBMol*> mols, vector<int> numMols) | 
| 180 | 
> | 
void OOPSEFormat::WriteMDFile(vector<OBMol*> mols, vector<int> numMols, ostream& os) | 
| 181 | 
  | 
{ | 
| 182 | 
  | 
    std::string identLevel1("\t"); | 
| 183 | 
  | 
    std::string identLevel2("\t\t"); | 
| 184 | 
  | 
    std::string molPrefix("MolName"); | 
| 171 | 
– | 
    ostream& ofs = std::cout; | 
| 185 | 
  | 
    const int BUFFLEN = 1024; | 
| 186 | 
  | 
    char buffer[BUFFLEN]; | 
| 187 | 
  | 
     | 
| 189 | 
  | 
    { | 
| 190 | 
  | 
        OBMol* pmol = mols[i]; | 
| 191 | 
  | 
        map<OBAtom*, int> atomMap; | 
| 192 | 
< | 
        ofs << "molecule {\n"; | 
| 192 | 
> | 
        os << "molecule {\n"; | 
| 193 | 
  | 
        sprintf(buffer, "%d", i); | 
| 194 | 
< | 
        ofs << identLevel1 << "name = " << "\"" << molPrefix << buffer << "\"" << ";\n"; | 
| 194 | 
> | 
        os << identLevel1 << "name = " << "\"" << molPrefix << buffer << "\"" << ";\n"; | 
| 195 | 
  | 
 | 
| 196 | 
  | 
         | 
| 197 | 
  | 
        //atom | 
| 185 | 
– | 
        ofs << identLevel1 << "nAtoms = " << pmol->NumAtoms() << ";\n"; | 
| 198 | 
  | 
        int ai = 0; | 
| 199 | 
  | 
        FOR_ATOMS_OF_MOL(atom, *pmol ) { | 
| 200 | 
< | 
            ofs << identLevel1 << "atom[" << ai << "] {\n"; | 
| 201 | 
< | 
            ofs << identLevel2 << "type = " << "\"" << atom->GetType() << "\"" << ";\n"; | 
| 202 | 
< | 
            ofs << identLevel2 << "position(" << atom->GetX() << ", " << atom->GetY() << ", " << atom->GetZ() << ");\n"; | 
| 191 | 
< | 
            ofs << identLevel1 << "}\n"; | 
| 200 | 
> | 
            os << identLevel1 << "atom[" << ai << "] {\n"; | 
| 201 | 
> | 
            os << identLevel2 << "type = " << "\"" << atom->GetType() << "\"" << ";\n"; | 
| 202 | 
> | 
            os << identLevel1 << "}\n"; | 
| 203 | 
  | 
            atomMap[&(*atom)] = ai++; | 
| 204 | 
  | 
        }         | 
| 205 | 
+ | 
        os << "\n"; | 
| 206 | 
  | 
 | 
| 207 | 
  | 
        //bond | 
| 196 | 
– | 
        ofs << identLevel1 << "nBonds = " << pmol->NumBonds() << ";\n"; | 
| 197 | 
– | 
        int bi = 0; | 
| 208 | 
  | 
        FOR_BONDS_OF_MOL(bond, *pmol ) { | 
| 209 | 
< | 
            ofs << identLevel1 << "bond[" << bi++ << "] {\n"; | 
| 210 | 
< | 
            ofs << identLevel2 << "member(" << atomMap[bond->GetBeginAtom()] <<  ", " << atomMap[bond->GetEndAtom()] << ");\n"; | 
| 211 | 
< | 
            ofs << identLevel1 << "}\n"; | 
| 209 | 
> | 
            os << identLevel1 << "bond {\n"; | 
| 210 | 
> | 
            os << identLevel2 << "members(" << atomMap[bond->GetBeginAtom()] <<  ", " << atomMap[bond->GetEndAtom()] << ");\n"; | 
| 211 | 
> | 
            os << identLevel1 << "}\n"; | 
| 212 | 
  | 
        }   | 
| 213 | 
  | 
        /* | 
| 214 | 
  | 
        //bend | 
| 216 | 
  | 
        OBAngleData* pAngleData = dynamic_cast<OBAngleData*>(pGenericData); | 
| 217 | 
  | 
        vector<OBAngle> angles = pAngleData->GetData(); | 
| 218 | 
  | 
 | 
| 219 | 
< | 
        ofs << identLevel1 << "nBends = " << angles.size() << ";\n";         | 
| 219 | 
> | 
        os << identLevel1 << "nBends = " << angles.size() << ";\n";         | 
| 220 | 
  | 
        int bendIndex = 0; | 
| 221 | 
  | 
        for (vector<OBAngle>::iterator ti = angles.begin(); ti != angles.end(); ++ti) | 
| 222 | 
  | 
        { | 
| 223 | 
  | 
            triple<OBAtom*, OBAtom*, OBAtom*> bendAtoms = ti->getAtoms(); | 
| 224 | 
< | 
            ofs << identLevel1 << "bend[" << bendIndex++ << "] {\n"; | 
| 225 | 
< | 
            ofs << identLevel2 << "member(" << atomMap[bendAtoms.first] <<  ", " << atomMap[bendAtoms.second] << atomMap[bendAtoms.third] <<");\n"; | 
| 226 | 
< | 
            ofs << identLevel1 << "}\n";             | 
| 224 | 
> | 
            os << identLevel1 << "bend[" << bendIndex++ << "] {\n"; | 
| 225 | 
> | 
            os << identLevel2 << "member(" << atomMap[bendAtoms.first] <<  ", " << atomMap[bendAtoms.second] << atomMap[bendAtoms.third] <<");\n"; | 
| 226 | 
> | 
            os << identLevel1 << "}\n";             | 
| 227 | 
  | 
        } | 
| 228 | 
  | 
         | 
| 229 | 
  | 
        //torsion | 
| 237 | 
  | 
            torsionArray.insert(torsionArray.end(), tmpTorsions.begin(), tmpTorsions.end());             | 
| 238 | 
  | 
        } | 
| 239 | 
  | 
 | 
| 240 | 
< | 
        ofs << identLevel1 << "nTorsions = " << torsionArray.size() << ";\n"; | 
| 240 | 
> | 
        os << identLevel1 << "nTorsions = " << torsionArray.size() << ";\n"; | 
| 241 | 
  | 
        int torsionIndex = 0; | 
| 242 | 
  | 
        for (vector<quad<OBAtom*,OBAtom*,OBAtom*,OBAtom*> >::iterator ti = torsionArray.begin(); ti != torsionArray.end(); ++ti) | 
| 243 | 
  | 
        { | 
| 244 | 
< | 
            ofs << identLevel1 << "torsion[" << torsionIndex++ << "] {\n"; | 
| 245 | 
< | 
            ofs << identLevel2 << "member(" << atomMap[ti->first] <<  ", " << atomMap[ti->second] <<", " << atomMap[ti->third] <<", " << atomMap[ti->forth] << ");\n"; | 
| 246 | 
< | 
            ofs << identLevel1 << "}\n";           | 
| 244 | 
> | 
            os << identLevel1 << "torsion[" << torsionIndex++ << "] {\n"; | 
| 245 | 
> | 
            os << identLevel2 << "member(" << atomMap[ti->first] <<  ", " << atomMap[ti->second] <<", " << atomMap[ti->third] <<", " << atomMap[ti->forth] << ");\n"; | 
| 246 | 
> | 
            os << identLevel1 << "}\n";           | 
| 247 | 
  | 
        } | 
| 248 | 
  | 
        */ | 
| 249 | 
< | 
        ofs << "}\n"; | 
| 249 | 
> | 
        os << "}\n"; | 
| 250 | 
> | 
        os << "\n"; | 
| 251 | 
> | 
 | 
| 252 | 
  | 
    } | 
| 253 | 
  | 
 | 
| 254 | 
< | 
    ofs << "nComponents = " << mols.size() << ";\n"; | 
| 254 | 
> | 
    os << "\n"; | 
| 255 | 
> | 
    os << "nComponents = " << mols.size() << ";\n"; | 
| 256 | 
  | 
     | 
| 257 | 
  | 
    for(unsigned int i =0; i < mols.size(); ++i) | 
| 258 | 
  | 
    { | 
| 259 | 
< | 
        ofs << "component{\n"; | 
| 259 | 
> | 
        os << "component{\n"; | 
| 260 | 
  | 
        sprintf(buffer, "%d", i); | 
| 261 | 
< | 
        ofs << "type = " << molPrefix << buffer << ";\n"; | 
| 262 | 
< | 
        ofs << "nMol = " << numMols[i]<< ";\n"; | 
| 263 | 
< | 
        ofs << "}\n"; | 
| 261 | 
> | 
        os << "type = " << molPrefix << buffer << ";\n"; | 
| 262 | 
> | 
        os << "nMol = " << numMols[i]<< ";\n"; | 
| 263 | 
> | 
        os << "}\n"; | 
| 264 | 
  | 
    } | 
| 265 | 
  | 
} | 
| 266 | 
  | 
void OOPSEFormat::WriteINFile(OBMol& mol, ostream& ofs, vector<int>& indices) |