コード例 #1
0
/*
 * 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;
}