/// <summary> /// create crystal XML files /// </summary> public void CreateCrystalXmlFiles() { AsymUnitBuilder asuBuilder = new AsymUnitBuilder(); // bool asuChanged = false; ProtCidSettings.LoadDirSettings(); AppSettings.LoadParameters(); ProtCidSettings.pdbfamDbConnection = new DbConnect("DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=fbmonkeyox;DATABASE=" + ProtCidSettings.dirSettings.pdbfamDbPath); ProtCidSettings.progressInfo.Reset(); SetFilePaths(); string atomType = ""; if (AppSettings.parameters.contactParams.atomType == "CA") { atomType = "CA"; } else if (AppSettings.parameters.contactParams.atomType == "CB") { atomType = "CB"; } else { atomType = "ALL"; } // save the file list for those just created List <string> parsedCoordXmlFiles = new List <string> (); XmlAtomParser xmlParser = new XmlAtomParser(); if (!Directory.Exists(destFilePath.Trim('\\'))) { Directory.CreateDirectory(destFilePath.Trim('\\')); } modifyType = "update"; // temporary directory if (!Directory.Exists(ProtCidSettings.tempDir)) { Directory.CreateDirectory(ProtCidSettings.tempDir); } // get the common list of XML files, ent files and BU symmetry matrix files ProtCidSettings.progressInfo.progStrQueue.Enqueue("Retrieving file list. Please wait..."); string [] pdbCodes = GetFileNames(); /* string[] pdbCodes = { "4p6d"}; * string[] pdbCodes = GetMissingEntries();*/ ProtCidSettings.progressInfo.progStrQueue.Enqueue("Done!"); ProtCidSettings.progressInfo.currentOperationLabel = "PDB Processing"; ProtCidSettings.progressInfo.totalStepNum = pdbCodes.Length; ProtCidSettings.progressInfo.totalOperationNum = pdbCodes.Length; ProtCidSettings.progressInfo.progressInterval = 1; ProtCidSettings.progressInfo.progStrQueue.Enqueue("Building Coordinate XML files. Please wait..."); string crystalXmlFile = ""; foreach (string pdbCode in pdbCodes) { ///////////////////////////////////////// // display progress information // get just the fileName ProtCidSettings.progressInfo.currentFileName = pdbCode; ProtCidSettings.progressInfo.currentOperationNum++; ProtCidSettings.progressInfo.currentStepNum++; crystalXmlFile = destFilePath + pdbCode + ".xml"; FileInfo fileInfo = new FileInfo(crystalXmlFile + ".gz"); if (fileInfo.LastWriteTime.Day == DateTime.Today.Day) { continue; } string zippedXmlFile = xmlFilePath + pdbCode + xmlExtName; if (!File.Exists(zippedXmlFile)) { webClient.DownloadFile(pdbWebAddress + pdbCode + ".xml.gz", pdbCode + ".xml.gz"); File.Move(pdbCode + ".xml.gz", zippedXmlFile); } string xmlFile = ParseHelper.UnZipFile(zippedXmlFile, ProtCidSettings.tempDir); EntryCrystal thisEntryCrystal = new EntryCrystal(pdbCode); try { xmlParser.ParseXmlFile(xmlFile, ref thisEntryCrystal, atomType); /*if (thisEntryCrystal != null) * { * if (thisEntryCrystal.ncsCat.NcsOperatorList.Length > 0) * { * asuBuilder.BuildAsymUnitFromNcs (ref thisEntryCrystal, out asuChanged); * if (asuChanged) * { * UpdateAsymUnitDbTable (thisEntryCrystal); * } * } * }*/ } catch (Exception ex) { // record the error, continue to the next file string errorMsg = string.Format("Processing {0} file errors: {1}. Skip it.", pdbCode, ex.Message); ProtCidSettings.progressInfo.progStrQueue.Enqueue(errorMsg); } finally { // delete this processed file File.Delete(xmlFile); } // save entry crystal data into a XML file try { if (thisEntryCrystal != null) { XmlSerializer xmlSerializer = new XmlSerializer(thisEntryCrystal.GetType()); TextWriter crystalWriter = new StreamWriter(crystalXmlFile); xmlSerializer.Serialize(crystalWriter, thisEntryCrystal); crystalWriter.Close(); ParseHelper.ZipPdbFile(crystalXmlFile); parsedCoordXmlFiles.Add(pdbCode + ".xml.gz"); WriteXmlFileToPdbFile(pdbCode, thisEntryCrystal); // CopyPdbFileToLinux(pdbCode); } } catch (Exception ex) { ProtCidSettings.progressInfo.progStrQueue.Enqueue(ex.Message); } } try { Directory.Delete(ProtCidSettings.tempDir, true); } catch {} SaveFileList(parsedCoordXmlFiles); /* progressInfo.progStrQueue.Enqueue("Copy PDB files to Linux server."); * CopyPdbFilesToLinux(pdbCodes); * progressInfo.progStrQueue.Enqueue ("Done!"); */ ProtCidSettings.progressInfo.progStrQueue.Enqueue("Copy updated files to new directory"); string updateFilePath = pdbTextPath.Replace("regular", "updateRegular"); if (Directory.Exists(updateFilePath)) { Directory.Delete(updateFilePath, true); } Directory.CreateDirectory(updateFilePath); DateTime dtTime = DateTime.Today; ParseHelper.CopyNewFiles(pdbTextPath, updateFilePath, dtTime); ProtCidSettings.progressInfo.progStrQueue.Enqueue("Done!"); ProtCidSettings.progressInfo.threadFinished = true; }