public static void Run(bool removeNA, bool replaceNA, string missingValPercent, string missingValReplace, ProgressWindow progressWindow, Dictionary <string, Dictionary <string, string> > dataMap, IsotopeCalc isotopeCalc) { var excelPkg = new ExcelPackage(); FormatToColumns(excelPkg, dataMap); if (removeNA) { progressWindow.progressTextBox.AppendLine("Removing NA"); RemoveNA(excelPkg, missingValPercent, dataMap); } if (replaceNA) { progressWindow.progressTextBox.AppendLine($"Replacing NA with {missingValReplace}..."); ReplaceNA(excelPkg, "Compounds Detected", missingValReplace); } if (isotopeCalc.isotopeToCompound.Count > 0) { progressWindow.progressTextBox.AppendLine("Calculating ratios"); CalculateRatios(excelPkg, isotopeCalc, dataMap); } progressWindow.progressTextBox.AppendLine("Calculating concentrations"); Concentration(excelPkg, isotopeCalc); // More WriteOutputFile.... progressWindow.progressTextBox.AppendLine("Done"); progressWindow.UseWaitCursor = false; }
/// <summary> /// Calculates the ratio compound area / isotope area. /// </summary> /// <param name="excelPkg"></param> /// <param name="isotopeCalc"></param> /// <param name="detectedMap"></param> public static void CalculateRatios(ExcelPackage excelPkg, IsotopeCalc isotopeCalc, Dictionary <string, Dictionary <string, string> > detectedMap) { var compoundList = new List <string>(detectedMap.Keys); var sampleList = new List <string>(detectedMap[compoundList[0]].Keys); int numSamples = sampleList.Count; // Write data to new excel worksheet var isotopeRatioSheet = excelPkg.Workbook.Worksheets.Add("Isotope Ratio"); isotopeRatioSheet.Cells[1, 1].Value = "Sample"; // Fill in sample names for (int r = 2; r <= numSamples + 1; r++) { isotopeRatioSheet.Cells[r, 1].Value = sampleList[r - 2]; // Write sample name in first column } int col = 2; foreach (var isotope in isotopeCalc.isotopeToCompound.Keys) { foreach (var compound in isotopeCalc.isotopeToCompound[isotope].Where(compound => compoundList.Contains(compound))) { isotopeRatioSheet.Cells[1, col].Value = compound; // Put compound name in first row for (int row = 2; row <= numSamples + 1; row++) // Fill in sample ratios { // Get area value from map with compound/sample match var sampleName = isotopeRatioSheet.Cells[row, 1].Value.ToString(); detectedMap[compound].TryGetValue(sampleName, out var compoundArea); if (double.TryParse(compoundArea, out var compoundAreaNum)) { detectedMap[isotope].TryGetValue(sampleName, out var isotopeArea); if (double.TryParse(isotopeArea, out var isotopeAreaNum)) { isotopeRatioSheet.Cells[row, col].Value = compoundAreaNum / isotopeAreaNum; } else { isotopeRatioSheet.Cells[row, col].Value = "No Isotope"; } } else { isotopeRatioSheet.Cells[row, col].Value = 0.0; } } col++; } } isotopeRatioSheet.Cells[2, 2, numSamples + 1, col - 1].Style.Numberformat.Format = "0.000000"; isotopeRatioSheet.Cells.AutoFitColumns(); SaveFile(excelPkg, outputFileName); }
public static void Concentration(ExcelPackage excelPkg, IsotopeCalc isotopeCalc) { // Copy ratios data to new sheet to do calculation var concentrationSheet = excelPkg.Workbook.Worksheets.Copy("Isotope Ratio", "Concentrations"); var rows = concentrationSheet.Dimension.Rows; var cols = concentrationSheet.Dimension.Columns; // Iterate through compounds int col = 2; for (int c = 2; c <= cols; c++) { var compound = concentrationSheet.Cells[1, c].Text; // Get slope and intercept for compound var slopeIntercept = isotopeCalc.SlopeIntercept("filePath", compound); // Calculate for each sample for (int r = 2; r <= rows; r++) { var ratio = concentrationSheet.Cells[r, c].Text; if (double.TryParse(ratio, out var ratioNum)) { if (ratioNum == 0.0) { concentrationSheet.Cells[r, c].Value = 0.0; } else { concentrationSheet.Cells[r, c].Value = (ratioNum - slopeIntercept[1]) / slopeIntercept[0]; } } } } //isotopeRatioSheet.Cells[2, 2, numSamples + 1, numCompounds + 1].Style.Numberformat.Format = "0.000000"; concentrationSheet.Cells.AutoFitColumns(); SaveFile(excelPkg, outputFileName); }
private void submitButton_Click(object sender, EventArgs e) { if (filePath == string.Empty) { return; } var progressWindow = new ProgressWindow(); progressWindow.Show(); // Create isotope map Dictionary <string, List <string> > isotopeMap = null; IsotopeCalc isotopeCalc = new IsotopeCalc(); //isotopeMap = isotopeCalc.IsotopeMap(filePath); // Read data to map Dictionary <string, Dictionary <string, string> > dataMap = null; if (skylineRadioButton.Checked) { dataMap = ProcessSkyline.ReadDataToMap(filePath); if (dataMap.Count == 0) { return; } // Create isotope map isotopeMap = isotopeCalc.IsotopeMap(filePath); } else if (sciexRadioButton.Checked) { dataMap = ProcessSciex.ReadDataToMap(filePath); if (dataMap.Count == 0) { return; } } else if (NormQcRadioButton.Checked) { dataMap = ProcessSciex.ReadDataToMap(filePath); //Normalize.NormalizeToQC(filePath, dataMap); } else if (multiquantTxtRadioButton.Checked) { dataMap = ReadInput.ReadMultiQuantTxt(filePaths); var templatePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $"\\DataProcessor\\targeted_300_template-serum-mrm.xlsx"; WriteOutputFile.WriteMapToSheetCompoundsInRows(progressWindow, dataMap, templatePath, "Relative Quant Data", 1); //WriteOutputFile.WriteMapToSheetCompoundsInRows(progressWindow, dataMap, templatePath, "Data Reproducibility", 2); } if (dataMap == null) { progressWindow.progressTextBox.AppendLine("Error reading file."); return; } progressWindow.progressTextBox.AppendLine("Finished reading data.\r\nWriting data"); bool removeNA = removeMissingCheckBox.Checked; var missingValPercent = string.IsNullOrEmpty(missingValueBox.Text) ? missingValueBox.PlaceholderText : missingValueBox.Text; bool replaceNA = replaceMissingValueCheckBox.Checked; var missingValReplace = string.IsNullOrEmpty(replaceMissingValueTextBox.Text) ? replaceMissingValueTextBox.PlaceholderText : replaceMissingValueTextBox.Text; //WriteOutputFile.WriteSciex(replaceNA, missingValReplace, progressWindow, dataMap, Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $"\\DataProcessor\\targeted_300_template-tissue.xlsx"); WriteOutputFile.Run(removeNA, replaceNA, missingValPercent, missingValReplace, progressWindow, dataMap, isotopeCalc); }