CelFileWriter::CelFileWriter(CelFileData &p) { p.SetVersion(CurrentCelFileVersion); writer = new GenericFileWriter(p.GetFileHeader()); intensityPos = 0; stdDevPos = 0; pixelPos = 0; outlierPos = 0; maskPos = 0; WriteHeaders(); }
/* * Get the DAT header from the DAT file header object. */ string CELConversionUtilities::GetDatHeader(CelFileData &inFile) { std::wstring datHeader; GenDataHdrVectorIt begin, end; inFile.GetFileHeader()->GetGenericDataHdr()->GetParentIterators(begin, end); // Find the DAT generic header for (GenDataHdrVectorIt ii = begin; ii != end; ++ii) { std::string s = ii->GetFileTypeId(); if (ii->GetFileTypeId() == SCAN_ACQUISITION_DATA_TYPE) { // found the right header, now look for the parameter ParameterNameValueType nvt; if (ii->FindNameValParam(DAT_HEADER_PARAM_NAME, nvt)) { if (nvt.GetParameterType() == ParameterNameValueType::TextType) datHeader = nvt.GetValueText(); } else if (ii->FindNameValParam(PARTIAL_DAT_HEADER_PARAM_NAME, nvt)) { if (nvt.GetParameterType() == ParameterNameValueType::TextType) { std::wstring partialDatHeader = nvt.GetValueText(); u_int16_t min = 0; u_int16_t max = 0; // Find the max and min parameters and append to the string. if (ii->FindNameValParam(MAX_PIXEL_INTENSITY_PARAM_NAME, nvt)) { if (nvt.GetParameterType() == ParameterNameValueType::UInt16Type) max = nvt.GetValueUInt16(); } if (ii->FindNameValParam(MIN_PIXEL_INTENSITY_PARAM_NAME, nvt)) { if (nvt.GetParameterType() == ParameterNameValueType::UInt16Type) min = nvt.GetValueUInt16(); } wchar_t buf[30]; FormatString2(buf, 30, L"[%d..%d]", min, max); datHeader = buf; datHeader += partialDatHeader; } } break; } } return StringUtils::ConvertWCSToMBS(datHeader); }
void CELConversionUtilities::FindAndAddAlgorithmParameter(string name, string defaultValue, CelFileData &inFile, CCELFileData &outFile) { ParameterNameValueType nvt; if (inFile.FindAlgorithmParameter(StringUtils::ConvertMBSToWCS(name), nvt)) { outFile.AddAlgorithmParameter(name.c_str(), StringUtils::ConvertWCSToMBS(nvt.ToString()).c_str()); } else { outFile.AddAlgorithmParameter(name.c_str(), defaultValue.c_str()); } }
void CELConversionUtilities::SetCellMargin(CelFileData &inFile, CCELFileData &outFile, int defaultValue) { ParameterNameValueType nvt; if (inFile.FindAlgorithmParameter(L"CellMargin", nvt)) { if (nvt.GetParameterType() == ParameterNameValueType::Int32Type) { outFile.GetHeader().SetMargin(nvt.GetValueInt32()); } else if(nvt.GetParameterType() == ParameterNameValueType::AsciiType) { outFile.GetHeader().SetMargin(atoi(nvt.GetValueAscii().c_str())); } } else { outFile.GetHeader().SetMargin(defaultValue); } }
/* * Get the grid from the parameters. */ GridCoordinatesType CELConversionUtilities::GetGrid(CelFileData &inFile) { GridCoordinatesType grid; ParameterNameValueType nvt; grid.lowerleft.x = grid.lowerleft.y = 0; grid.upperleft.x = grid.upperleft.y = 0; grid.lowerright.x = grid.lowerright.y = 0; grid.upperright.x = grid.upperright.y = 0; if (inFile.FindAlgorithmParameter(GRIDULX_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.upperleft.x = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDULY_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.upperleft.y = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDURX_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.upperright.x = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDURY_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.upperright.y = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDLRX_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.lowerright.x = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDLRY_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.lowerright.y = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDLLX_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.lowerleft.x = (int) nvt.GetValueFloat(); if (inFile.FindAlgorithmParameter(GRIDLLY_PARAM_NAME, nvt) && nvt.GetParameterType() == ParameterNameValueType::FloatType) grid.lowerleft.y = (int) nvt.GetValueFloat(); return grid; }
/* * Copy the file contents. */ bool CELConversionUtilities::Copy(CelFileData &inFile, CCELFileData &outFile, CELFileConversionOptions *options) { // Set the dimensions outFile.SetDimensions(inFile.GetRows(), inFile.GetCols()); // Set the intensities, stdv and pixels FloatVector values; int n = inFile.GetNumCells(); inFile.GetIntensities(0, n, values); for (int i=0; i<n; i++) { outFile.SetIntensity(i, values[i]); } values.clear(); inFile.GetStdev(0, n, values); for (int i=0; i<n; i++) { outFile.SetStdv(i, values[i]); } Int16Vector pixels; inFile.GetNumPixels(0, n, pixels); for (int i=0; i<n; i++) { outFile.SetPixels(i, pixels[i]); } // Set the outliers and masks. XYCoordVector xy; inFile.GetOutlierCoords(xy); n = (int) xy.size(); for (int i=0; i<n; i++) { outFile.SetOutlier(xy[i].xCoord, xy[i].yCoord, true); } xy.clear(); inFile.GetMaskedCoords(xy); n = (int) xy.size(); for (int i=0; i<n; i++) { outFile.SetMask(xy[i].xCoord, xy[i].yCoord, true); } // Set the header. outFile.SetGridCorners(GetGrid(inFile)); if((options != NULL)&&(options->m_ChipType != NULL)) { outFile.SetChipType(options->m_ChipType); } else { outFile.SetChipType(StringUtils::ConvertWCSToMBS(inFile.GetArrayType()).c_str()); } // Make sure the algorithm name is "Percentile" so it can import into GCOS. outFile.SetAlgorithmName("Percentile"); //outFile.SetAlgorithmName(StringUtils::ConvertWCSToMBS(inFile.GetAlgorithmName()).c_str()); // Add the first four algorithm parameters required by GCOS. FindAndAddAlgorithmParameter("Percentile", "75", inFile, outFile); FindAndAddAlgorithmParameter("CellMargin", "2", inFile, outFile); FindAndAddAlgorithmParameter("OutlierHigh", "1.500", inFile, outFile); FindAndAddAlgorithmParameter("OutlierLow", "1.004", inFile, outFile); // Set the CellMargin SetCellMargin(inFile, outFile, 2); ParameterNameValueTypeVector algParams; inFile.GetAlgorithmParameters(algParams); n = (int) algParams.size(); string tag; string value; for (int i=0; i<n; i++) { tag = StringUtils::ConvertWCSToMBS(algParams[i].GetName()); value = StringUtils::ConvertWCSToMBS(algParams[i].ToString()); // Filter the first four required GCOS algorithm parameters. if (tag == "Percentile" || tag == "CellMargin" || tag == "OutlierHigh" || tag == "OutlierLow") { continue; } // Don't include the grid parameters added by the converter. if (tag.length() > strlen("Grid") && strncmp(tag.c_str(), "Grid", strlen("Grid")) == 0) continue; // Add the parameter; outFile.AddAlgorithmParameter(tag.c_str(), value.c_str()); } if((options != NULL)&&(options->m_DATFileName != NULL)) { std::string datHeader = CELFileConversionOptions::newDatName(GetDatHeader(inFile).c_str(), options->m_DATFileName); if(datHeader == "") { return false; } else { outFile.GetHeader().SetDatHeader(datHeader.c_str()); } } else { outFile.GetHeader().SetDatHeader(GetDatHeader(inFile).c_str()); } outFile.GetHeader().SetHeader(outFile.GetHeader().GetHeader().c_str()); return true; }
void TestFileGenerator::WriteRemaingSmallCelFileWithGridParameters(CelFileData& data) { data.SetIntensityCount(25); data.SetStdDevCount(25); data.SetPixelCount(25); data.SetOutlierCount(2); data.SetMaskCount(3); data.SetRows(5); data.SetCols(5); data.SetArrayType(L"Hg-small"); data.SetLibraryPackageName(L"Hg-small-lib-package"); data.SetMasterFileName(L"Hg-small-master-file"); data.SetAlgorithmName(L"Feature Extraction"); ParameterNameValueType nvt; nvt.SetName(L"percentile"); nvt.SetValueFloat(0.75f); data.AddAlgorithmParameter(nvt); nvt.SetName(L"outlierlow"); nvt.SetValueFloat(1.004f); data.AddAlgorithmParameter(nvt); nvt.SetName(L"CellMargin"); nvt.SetValueInt32(2); data.AddAlgorithmParameter(nvt); // Add grid wchar_t* gridParams[] = {L"GridULX", L"GridULY", L"GridURX", L"GridURY", L"GridLRX", L"GridLRY", L"GridLLX", L"GridLLY" }; for (int32_t i = 0; i < 8; ++i) { nvt.SetName(gridParams[i]); nvt.SetValueFloat(2.0f + (float)i); data.AddAlgorithmParameter(nvt); } CelFileWriter* writer = new CelFileWriter(data); FloatVector vInten; FloatVector vStdev; Int16Vector vPixels; for (int i=0; i<25; ++i) { vInten.push_back(100.0f*i); vStdev.push_back(.5*i); vPixels.push_back(25); } // Do some writing writer->WriteIntensities(vInten); writer->WriteStdDevs(vStdev); writer->WritePixels(vPixels); // XYCoordVector XYCoordVector outlier; XYCoord xy(0,0); outlier.push_back(xy); xy.xCoord = 1; xy.yCoord = 2; outlier.push_back(xy); writer->WriteOutlierCoords(outlier); XYCoordVector masked; xy.xCoord = 1; xy.yCoord = 0; masked.push_back(xy); xy.xCoord = 2; xy.yCoord = 1; masked.push_back(xy); xy.xCoord = 3; xy.yCoord = 2; masked.push_back(xy); writer->WriteMaskCoords(masked); delete writer; }