/// <summary> /// This method iterates through the provided FASTA files creating separate calculated outputs for each of them. /// </summary> /// <param name="fastaFiles">The FASTA files to process.</param> /// <param name="pdbFilesFolders">The locations where PDB files may be found.</param> /// <param name="spreadsheetSaveFilenameTemplate">A template filename to save the outputs.</param> /// <param name="saveTsv"></param> /// <param name="saveXl"></param> /// <param name="cancellationToken"></param> /// <param name="progressActionSet"></param> /// <param name="fileExistsOptions"></param> public static void MakeHomodimerStatisticsSpreadsheetsAndOutputFiles(decimal maxAtomInterationDistance, string[] fastaFiles, string[] pdbFilesFolders, string spreadsheetSaveFilenameTemplate, bool saveTsv, bool saveXl, CancellationToken cancellationToken, ProgressActionSet progressActionSet = null, FileExistsHandler.FileExistsOptions fileExistsOptions = FileExistsHandler.FileExistsOptions.AppendNumberToFilename) { if (fastaFiles == null || fastaFiles.Length == 0) { throw new ArgumentOutOfRangeException(nameof(fastaFiles)); } if (pdbFilesFolders == null || pdbFilesFolders.Length == 0) { throw new ArgumentOutOfRangeException(nameof(pdbFilesFolders)); } if (!saveTsv && !saveXl) { throw new ArgumentOutOfRangeException(nameof(saveTsv)); } for (int fastaFileNumber = 0; fastaFileNumber < fastaFiles.Length; fastaFileNumber++) { string fastaFilename = fastaFiles[fastaFileNumber]; if (string.IsNullOrWhiteSpace(fastaFilename)) { continue; } ProgressActionSet.Report("Attempting to open file: " + fastaFilename, progressActionSet); List <ISequence> sequences = SequenceFileHandler.LoadSequenceFile(fastaFilename, StaticValues.MolNameProteinAcceptedValues); var pdbIdChainIdList = ProteinDataBankFileOperations.PdbIdChainIdList(sequences); if ((sequences == null) || (sequences.Count == 0)) { ProgressActionSet.Report("Error could not load file: " + fastaFilename, progressActionSet); continue; } ProgressActionSet.Report("Loaded " + sequences.Count + " sequences from file: " + fastaFilename, progressActionSet); List <string> pdbIdList = FilterProteins.SequenceListToPdbIdList(sequences); string appendFilename = FileAndPathMethods.FullPathToFilename(fastaFilename); ProgressActionSet.Report("Creating spreadsheets...", progressActionSet); Stopwatch stopwatch = Stopwatch.StartNew(); var spreadsheetList = MakeHomodimerStatisticsSpreadsheetsList(cancellationToken, maxAtomInterationDistance, pdbFilesFolders, pdbIdList, pdbIdChainIdList, progressActionSet); stopwatch.Stop(); ProgressActionSet.Report("Finished calculating spreadsheet data [Elapsed: " + stopwatch.Elapsed.ToString(@"dd\:hh\:mm\:ss") + "]", progressActionSet); if (cancellationToken.IsCancellationRequested) { //UserProteinInterfaceOperations.ProgressBarReset(progressBar, 0, 100, 0); ////UserProteinInterfaceOperations.LabelEstimatedTimeRemainingUpdate(estimatedTimeRemaining, 0, 1, 1); ProgressActionSet.StartAction(100, progressActionSet); ProgressActionSet.ProgressAction(100, progressActionSet); ProgressActionSet.FinishAction(false, progressActionSet); ProgressActionSet.Report("Cancelled.", progressActionSet); break; } for (int spreadsheetIndex = 0; spreadsheetIndex < spreadsheetList.Count; spreadsheetIndex++) { var spreadsheet = spreadsheetList[spreadsheetIndex]; if (cancellationToken.IsCancellationRequested) { break; } // Remove the first row (which has the name for use in a worksheet title, not currently used) var sheetName = spreadsheet[0][0].CellData; var spreadsheetName = spreadsheet[1][0].CellData; spreadsheet.RemoveAt(0); // "c:/dResults/Results - %date% %time% - %fasta_filename% - %spreadsheet_name%.tsv" string saveFilename = spreadsheetSaveFilenameTemplate; saveFilename = saveFilename.Replace("%spreadsheet_name%", spreadsheetName); saveFilename = saveFilename.Replace("%fasta_filename%", appendFilename); saveFilename = saveFilename.Replace("%date%", DateTime.Now.ToString("yyyy-MM-dd")); saveFilename = saveFilename.Replace("%time%", DateTime.Now.ToString("HH.mm.ss")); saveFilename = saveFilename.Replace("%batch_number%", ""); //string.Empty + (fastaFileNumber + 1)); saveFilename = saveFilename.Replace("%batch_letter%", ""); //SpreadsheetFileHandler.AlphabetLetterRollOver(spreadsheetIndex)); sheetName = sheetName.Replace("%spreadsheet_name%", spreadsheetName); sheetName = sheetName.Replace("%fasta_filename%", appendFilename); sheetName = sheetName.Replace("%date%", DateTime.Now.ToString("yyyy-MM-dd")); sheetName = sheetName.Replace("%time%", DateTime.Now.ToString("HH.mm.ss")); sheetName = sheetName.Replace("%batch_number%", ""); //string.Empty + (fastaFileNumber + 1)); sheetName = sheetName.Replace("%batch_letter%", ""); //SpreadsheetFileHandler.AlphabetLetterRollOver(spreadsheetIndex)); //var tsvFilename = new FileInfo(FileAndPathMethods.RemoveFileExtension(saveFilename) + ".tsv"); var xlFilename = new FileInfo(FileAndPathMethods.RemoveFileExtension(saveFilename) + ".xlsx"); var savedFiles = SpreadsheetFileHandler.SaveSpreadsheet(xlFilename.FullName, new[] { sheetName }, spreadsheet, null, saveTsv, saveXl, fileExistsOptions); ProgressActionSet.ReportFilesSaved(savedFiles, progressActionSet); } } ProgressActionSet.Report("Finished processing files.", progressActionSet); }