Exemple #1
0
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;
}
Exemple #7
0
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;
}