void CrystalInfo::readQdfData(const DataTab &in) { LString val; if (in.containsKey("CrystalInfo.lena")) { val = in.get("CrystalInfo.lena"); val.toDouble(&m_cella); } if (in.containsKey("CrystalInfo.lenb")) { val = in.get("CrystalInfo.lenb"); val.toDouble(&m_cellb); } if (in.containsKey("CrystalInfo.lenc")) { val = in.get("CrystalInfo.lenc"); val.toDouble(&m_cellc); } if (in.containsKey("CrystalInfo.anga")) { val = in.get("CrystalInfo.anga"); val.toDouble(&m_alpha); } if (in.containsKey("CrystalInfo.angb")) { val = in.get("CrystalInfo.angb"); val.toDouble(&m_beta); } if (in.containsKey("CrystalInfo.angg")) { val = in.get("CrystalInfo.angg"); val.toDouble(&m_gamma); } if (in.containsKey("CrystalInfo.sgid")) { val = in.get("CrystalInfo.sgid"); val.toInt(&m_nSG); } }
void OpenDXPotReader::readHeader(qlib::LineStream &ins) { // skip the header remarks int nok=0; qlib::LRegExpr re_origin, re_object, re_delta; re_object.setPattern("object 1 class gridpositions counts\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)"); re_origin.setPattern("origin\\s+([e\\d\\.\\-\\+]+)\\s+([e\\d\\.\\-\\+]+)\\s+([e\\d\\.\\-\\+]+)"); re_delta.setPattern("delta\\s+([e\\d\\.\\-\\+]+)\\s+([e\\d\\.\\-\\+]+)\\s+([e\\d\\.\\-\\+]+)"); while (nok<7) { readRecord(ins); if (m_recbuf.startsWith("#")) { // comment continue; } if (m_recbuf.startsWith("object 2")) { ++nok; continue; } if (m_recbuf.startsWith("object 3")) { ++nok; continue; } if (re_object.match(m_recbuf)) { LString snx = re_object.getSubstr(1); LString sny = re_object.getSubstr(2); LString snz = re_object.getSubstr(3); if (!snx.toInt(&m_nx)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!sny.toInt(&m_ny)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!snz.toInt(&m_nz)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } ++nok; continue; } else if (re_origin.match(m_recbuf)) { LString snx = re_origin.getSubstr(1); LString sny = re_origin.getSubstr(2); LString snz = re_origin.getSubstr(3); if (!snx.toDouble(&m_xmin)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!sny.toDouble(&m_ymin)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!snz.toDouble(&m_zmin)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } ++nok; continue; } else if (re_delta.match(m_recbuf)) { LString snx = re_delta.getSubstr(1); LString sny = re_delta.getSubstr(2); LString snz = re_delta.getSubstr(3); double x,y,z; if (!snx.toDouble(&x)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!sny.toDouble(&y)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (!snz.toDouble(&z)) { MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } if (qlib::isNear(y, 0.0) && qlib::isNear(z, 0.0)) { m_hx = x; ++nok; continue; } if (qlib::isNear(x, 0.0) && qlib::isNear(z, 0.0)) { m_hy = y; ++nok; continue; } if (qlib::isNear(x, 0.0) && qlib::isNear(y, 0.0)) { m_hz = z; ++nok; continue; } MB_THROW(qlib::FileFormatException, "Invalid map format: "+m_recbuf); return; } } m_navail = 0; }
// read from stream void PsfReader::read(qlib::InStream &ins) { int i, ires; qlib::LineStream ls(ins); m_pls = &ls; // skip header line readLine(); readLine(); /////////////////// // read REMARK header line readLine(); removeComment(); int ncomment; if (!m_line.toInt(&ncomment)) { MB_THROW(qlib::FileFormatException, "Cannot read ncomment line"); return; } MB_DPRINTLN("ncomment=%d", ncomment); for (i=0; i<ncomment; ++i) { readLine(); m_line = m_line.trim("\r\n "); LOG_DPRINTLN("%s", m_line.c_str()); } readLine(); /////////////////// // read atoms readLine(); removeComment(); if (!m_line.toInt(&m_natom)) { MB_THROW(qlib::FileFormatException, "Cannot read natom line"); return; } MB_DPRINTLN("natoms=%d", m_natom); LString stmp; for (i=0; i<m_natom; ++i) { readLine(); // LOG_DPRINTLN("%s", m_line.c_str()); // chain name stmp = m_line.substr(9, 3); stmp = stmp.trim(" "); // stmp = stmp.toLowerCase(); LString chain(stmp.c_str()); // residue number stmp = m_line.substr(14, 4); int nresi; if (!stmp.toInt(&nresi)) { LString msg = LString::format("cannot convert resid number: %s", stmp.c_str()); MB_THROW(qlib::FileFormatException, msg); return; } ResidIndex residx(nresi); // residue name stmp = m_line.substr(19, 4); stmp = stmp.trim(" "); // stmp = stmp.toLowerCase(); LString resn(stmp.c_str()); // atom name stmp = m_line.substr(24, 4); stmp = stmp.trim(" "); // stmp = stmp.toLowerCase(); LString name(stmp.c_str()); // charge stmp = m_line.substr(34, 10); double charge; if (!stmp.toDouble(&charge)) { LString msg = LString::format("cannot convert charge %s", stmp.c_str()); MB_THROW(qlib::FileFormatException, msg); return; } // mass stmp = m_line.substr(50, 8); double mass; if (!stmp.toDouble(&mass)) { LString msg = LString::format("cannot convert mass <%s>", stmp.c_str()); MB_THROW(qlib::FileFormatException, msg); return; } ElemID eleid = convMassElem(mass); //LOG_DPRINTLN("ATOM %s %s %d %s", //(*pAtoms)[i].name.c_str(), //(*pAtoms)[i].resn.c_str(), //(*pAtoms)[i].resid, //(*pAtoms)[i].chain.c_str()); MolAtomPtr pAtom = MolAtomPtr(MB_NEW MolAtom()); pAtom->setParentUID(m_pMol->getUID()); pAtom->setName(name); pAtom->setElement(eleid); pAtom->setChainName(chain); pAtom->setResIndex(residx); pAtom->setResName(resn); if (m_pMol->appendAtom(pAtom)<0) { LString stmp = m_line; stmp = stmp.chomp(); // stmp = stmp.toUpperCase(); // m_nErrCount ++; // if (m_nErrCount<m_nErrMax) LOG_DPRINTLN("PsfReader> read ATOM line failed: %s", stmp.c_str()); } } readLine(); }