/// <summary> /// This routine gets the full list of Image Data for an MS Scan /// Populate dataList with data from GetMassSpectrum() /// Routine Requires sampleDataPos[][] to be populated /// </summary> private void PopulateListByScan() { AppContext.ProgressStart("Populating Imagelist..."); try { if (this.binsize == 1) { // Origianal working routine - works for no binning for (int pointOnXAxis = 0; pointOnXAxis < this.numPointsOnXAxis; pointOnXAxis++) { for (int pointOnYAxis = 0; pointOnYAxis < this.numPointsOnYAxis; pointOnYAxis++) { int currspecPoint = this.sampleDataPos[pointOnXAxis][pointOnYAxis]; MassSpectrum spec = this.msexperiment.GetMassSpectrum(currspecPoint); int specDataPoints = spec.NumDataPoints; for (int specDataPoint = 0; specDataPoint < specDataPoints; specDataPoint++) { var specIndex = (int)((spec.GetXValue(specDataPoint) - this.minMass) / this.massStepSize); this.dataList[specIndex][pointOnXAxis][pointOnYAxis] = (float)spec.GetYValue(specDataPoint); } } AppContext.ProgressSetValue(100.0 * pointOnXAxis / this.numPointsOnXAxis); } } else { for (int pointOnXAxis = 0; pointOnXAxis < this.numPointsOnXAxis; pointOnXAxis++) { for (int pointOnYAxis = 0; pointOnYAxis < this.numPointsOnYAxis; pointOnYAxis++) { // 1) Declare local array var fullArray = new float[this.massSpecDataPoints]; var binnedArray = new float[this.binnedmassSpecDataPoints]; int currspecPoint = this.sampleDataPos[pointOnXAxis][pointOnYAxis]; MassSpectrum spec = this.msexperiment.GetMassSpectrum(currspecPoint); int specDataPoints = spec.NumDataPoints; // 1) Fill out a full array for (int specDataPoint = 0; specDataPoint < specDataPoints; specDataPoint++) { var specIndex = (int)((spec.GetXValue(specDataPoint) - this.minMass) / this.massStepSize); fullArray[specIndex] = (float)spec.GetYValue(specDataPoint); } // 2) Bin the full array for (int binspecDataPoint = 0; binspecDataPoint < this.binnedmassSpecDataPoints; binspecDataPoint++) { float sumofIntensities = 0.0f; for (int binindex = 0; binindex < this.binsize; binindex++) { sumofIntensities += fullArray[(2 * binspecDataPoint) + binindex]; } binnedArray[binspecDataPoint] = sumofIntensities / this.binsize; } // 3) Fill in contents of this.dataList[] for (int binspecDataPoint = 0; binspecDataPoint < this.binnedmassSpecDataPoints; binspecDataPoint++) { this.dataList[binspecDataPoint][pointOnXAxis][pointOnYAxis] = binnedArray[binspecDataPoint]; } } AppContext.ProgressSetValue(100.0 * pointOnXAxis / this.numPointsOnXAxis); } } } finally { AppContext.ProgressClear(); } }