/** \return true if TRR/TRJ file. */ bool Traj_GmxTrX::ID_TrajFormat(CpptrajFile& infile) { // File must already be set up for read if (infile.OpenFile()) return false; bool istrx = IsTRX(infile); infile.CloseFile(); return istrx; }
bool Parm_CharmmPsf::ID_ParmFormat(CpptrajFile& fileIn) { // Assumes already set up if (fileIn.OpenFile()) return false; std::string nextLine = fileIn.GetLine(); if (nextLine.empty()) return false; bool isPSF = ( nextLine.compare(0, 3, "PSF") == 0 ); fileIn.CloseFile(); return isPSF; }
bool DataIO_OpenDx::ID_DataFormat( CpptrajFile& infile ) { bool isDX = false; if (!infile.OpenFile()) { std::string firstLine = infile.GetLine(); if (!firstLine.empty()) isDX = (firstLine.compare(0, 28, "object 1 class gridpositions") == 0); infile.CloseFile(); } return isDX; }
// PDBfile::ID_PDB() bool PDBfile::ID_PDB(CpptrajFile& fileIn) { // NOTE: ASSUME FILE SET UP FOR READ if (fileIn.OpenFile()) return false; std::string line1 = fileIn.GetLine(); std::string line2 = fileIn.GetLine(); fileIn.CloseFile(); if (!IsPDBkeyword( line1 )) return false; if (!IsPDBkeyword( line2 )) return false; return true; }
// DataIO_CCP4::ID_DataFormat() bool DataIO_CCP4::ID_DataFormat( CpptrajFile& infile ) { bool isCCP4 = false; if (!infile.OpenFile()) { unsigned char MAP[4]; if (infile.Seek(52 * wSize) == 0) { infile.Read( MAP, wSize ); isCCP4 = MapCharsValid( MAP ); } infile.CloseFile(); } return isCCP4; }
/** Determine if fileIn is a CIF file. Look for entries beginning with * an underscore (indicating data block), and a 'loop_' keyword or * '_entry.id' block. */ bool CIFfile::ID_CIF(CpptrajFile& fileIn) { // NOTE: ASSUME FILE SET UP FOR READ if (fileIn.OpenFile()) return false; int ndata = 0; // Number of '_XXX' entries seen bool foundLoop = false; bool foundEntryID = false; for (int i = 0; i < 10; i++) { std::string lineIn = fileIn.GetLine(); if (lineIn[0] == '_') ndata++; if (lineIn.compare(0,5,"loop_")==0) foundLoop = true; if (lineIn.compare(0,9,"_entry.id")==0) foundEntryID = true; } fileIn.CloseFile(); return ( ndata > 2 && (foundLoop || foundEntryID) ); }
// DataIO_Mdout::ID_DataFormat() bool DataIO_Mdout::ID_DataFormat(CpptrajFile& infile) { if (infile.OpenFile()) return false; bool isMdout = false; std::string line = infile.GetLine(); if (line[0] == '\n') { line = infile.GetLine(); if (line.compare(0, 15, " -----") == 0) { line = infile.GetLine(); if (line.compare(0, 15, " Amber") == 0) isMdout = true; } } infile.CloseFile(); return isMdout; }
bool SDFfile::ID_SDF(CpptrajFile& fileIn) { // NOTE: ASSUMES FILE IS ALREADY SETUP! if (fileIn.OpenFile()) return false; // Search for V2000 somewhere in line 4 const char* ptr = 0; for (int i = 0; i < 4; i++) if ( (ptr = fileIn.NextLine()) == 0 ) { fileIn.CloseFile(); return false; } fileIn.CloseFile(); std::string line( ptr ); // Line 4, Connection table if ( line.find( "V2000" ) != std::string::npos ) return true; return false; }
bool Traj_CharmmCor::ID_TrajFormat(CpptrajFile& fileIn) { // File must already be set up for read. if (fileIn.OpenFile()) return false; bool isCor = false; const char* ptr = fileIn.NextLine(); // Must be at least 1 title line denoted with '*' if (ptr != 0 && *ptr == '*') { // Scan past all title lines while (ptr != 0 && *ptr == '*') ptr = fileIn.NextLine(); if (ptr != 0) { // Next line must be # atoms ONLY int ibuf[2]; if (sscanf(ptr, "%i %i", ibuf, ibuf+1) == 1) // make sure it was a valid integer isCor = (ibuf[0] > 0); } } fileIn.CloseFile(); return isCor; }
// Traj_AmberCoord::ID_TrajFormat() bool Traj_AmberCoord::ID_TrajFormat(CpptrajFile& fileIn) { // File must already be set up for read if (fileIn.OpenFile()) return false; if (fileIn.NextLine()==0) return false; // Title std::string buffer2 = fileIn.GetLine(); // REMD header/coords fileIn.CloseFile(); // Check if second line contains REMD/HREMD, Amber Traj with REMD header if ( IsRemdHeader( buffer2.c_str() ) ) { if (debug_>0) mprintf(" AMBER TRAJECTORY with (H)REMD header.\n"); hasREMD_ = REMD_HEADER_SIZE + (size_t)fileIn.IsDos(); return true; } // Check if we can read at least 3 coords of width 8, Amber trajectory float TrajCoord[3]; if ( sscanf(buffer2.c_str(), "%8f%8f%8f", TrajCoord, TrajCoord+1, TrajCoord+2) == 3 ) { if (debug_>0) mprintf(" AMBER TRAJECTORY file\n"); return true; } return false; }
bool DataIO_XVG::ID_DataFormat(CpptrajFile& infile) { if (infile.OpenFile()) return false; const char* ptr = infile.NextLine(); while (ptr != 0 && ptr[0] == '#') { const char* cc = ptr; while (*cc != '\0') { if (*cc == 'G') { if ( cc[2] == 'R' && cc[4] == 'O' && cc[6] == 'M' && cc[8] == 'A' && cc[10] == 'A' && cc[12] == 'C' ) { infile.CloseFile(); mprintf("DEBUG:\tFound G R O M A C\n"); return true; } } ++cc; } ptr = infile.NextLine(); } infile.CloseFile(); return false; }
bool TinkerFile::ID_Tinker(CpptrajFile& fileIn) { // NOTE: ASSUME FILE SET UP FOR READ if (fileIn.OpenFile()) return false; ArgList firstLine( fileIn.NextLine() ); ArgList secondLine( fileIn.NextLine() ); ArgList thirdLine( fileIn.NextLine() ); fileIn.CloseFile(); // First line should have <natom> <title> only int natom = 0; std::string title; if ( SetNatomAndTitle(firstLine, natom, title) != 0 ) return false; //mprinterr("Past SetNatomAndTitle\n"); if (secondLine.Nargs() == 6) { bool isBoxLine = true; for (int i = 0; i < 6; i++) { // It is a box line if all 6 tokens are doubles try { convertToDouble( secondLine.GetStringNext() ); } catch (std::runtime_error e) { if (i != 1) return false; // We found a non-double on the second character -- it could be an atom // name. Check that the rest of the line matches an atom record isBoxLine = false; break; } } // If we are here it is not a box line, so make sure if (!isBoxLine) { return IsAtomLine(secondLine); } else { // our second line WAS a box, now check the 3rd line return IsAtomLine(thirdLine); } } // There is no box, check that the second line is an atom line return IsAtomLine(secondLine); }
/** Check for an integer (I5) followed by 0-2 scientific floats (E15.7) */ bool Traj_AmberRestart::ID_TrajFormat(CpptrajFile& fileIn) { // Assume file set up for read if (fileIn.OpenFile()) return false; bool isRestart = false; if ( fileIn.NextLine() !=0 ) { // Title const char* ptr = fileIn.NextLine(); // Natom [time [temp]] if (ptr != 0) { int i0; double D[3]; int nread = sscanf(ptr, "%5i%15lf%15lf%lf", &i0, D, D+1, D+2); if (nread > 0 && nread < 4) { // Read at least 3 12.7 coordinates from next line. ptr = fileIn.NextLine(); if (ptr != 0) { nread = sscanf(ptr, "%12lf%12lf%12lf", D, D+1, D+2); if (nread == 3) isRestart = true; } } } } fileIn.CloseFile(); return isRestart; }
bool Traj_Gro::ID_TrajFormat(CpptrajFile& infile) { // Title line, atoms line, then resnum, resname, atomname, atomnum, X, Y, Z if (infile.OpenFile()) return false; int nread = 0; if (infile.NextLine() != 0) { // Title const char* ptr = infile.NextLine(); // Natom if (ptr != 0) { // Ensure only a single value on # atoms line std::string natom_str( ptr ); RemoveTrailingWhitespace( natom_str ); if (validInteger(natom_str)) { ptr = infile.NextLine(); // First atom if (ptr != 0) { char resnum[6], resname[6], atname[6], atnum[6]; float XYZ[3]; nread = sscanf(ptr, "%5c%5c%5c%5c%f %f %f", resnum, resname, atname, atnum, XYZ, XYZ+1, XYZ+2); } } } } infile.CloseFile(); return (nread == 7); }
// Traj_AmberCoord::ID_TrajFormat() bool Traj_AmberCoord::ID_TrajFormat(CpptrajFile& fileIn) { // File must already be set up for read if (fileIn.OpenFile()) return false; if (fileIn.NextLine()==0) return false; // Title std::string buffer2 = fileIn.GetLine(); // REMD header/coords fileIn.CloseFile(); // Check if second line contains REMD/HREMD, Amber Traj with REMD header if ( IsRemdHeader( buffer2.c_str() ) ) { if (debug_>0) mprintf(" AMBER TRAJECTORY with (H)REMD header.\n"); headerSize_ = REMD_HEADER_SIZE + (size_t)fileIn.IsDos(); tStart_ = 33; // 42 - 8 - 1 tEnd_ = 41; // 42 - 1 return true; } // TODO: Read these in as indices instead of temperatures if ( IsRxsgldHeader( buffer2.c_str() ) ) { mprintf(" AMBER TRAJECTORY with RXSGLD header.\n"); headerSize_ = RXSGLD_HEADER_SIZE + (size_t)fileIn.IsDos(); tStart_ = 35; // 44 - 8 - 1 tEnd_ = 43; // 44 - 1 return true; } // Check if we can read 3, 6, 9, or 10 coords (corresponding to 1, 2, 3 or // > 3 atoms) of width 8; Amber trajectory. float TrajCoord[10]; int nscan = sscanf(buffer2.c_str(), "%8f%8f%8f%8f%8f%8f%8f%8f%8f%8f", TrajCoord, TrajCoord+1, TrajCoord+2, TrajCoord+3, TrajCoord+4, TrajCoord+5, TrajCoord+6, TrajCoord+7, TrajCoord+8, TrajCoord+9); if (nscan == 3 || nscan == 6 || nscan == 9 || nscan == 10) { if (debug_>0) mprintf(" AMBER TRAJECTORY file\n"); return true; } return false; }