void FileHeaderWriter::WriteGenericDataHdr(std::ofstream &os, FileHeader &g) { GenericDataHeaderWriter writer; // Check if a file ID has been assign, if not assign one. if (g.GetGenericDataHdr()->GetFileId().length() == 0) g.GetGenericDataHdr()->SetFileId(AffymetrixGuid::GenerateNewGuid()); writer.Write(os, *(g.GetGenericDataHdr())); }
// Uses a mix of the GenericFileWriter and raw commands void TestFileGenerator::WriteOutGenericDATDataFile1UsingGenericWriter() { GenericDataHeader gdh; AddStandardGenericDataHeader(gdh); // Fill the DataSetHeader DataSetHeader dph; dph.SetName(L"acquired data"); ParameterNameValueType nvt; nvt.SetName(L"Scanner"); nvt.SetValueText(L"M10"); dph.AddNameValParam(nvt); nvt.SetName(L"Pixel Size"); nvt.SetValueFloat(0.051f); dph.AddNameValParam(nvt); dph.AddColumn(UShortColumn(L"Pixel")); int32_t rows = 100; dph.SetRowCnt(rows); // Open the file. ofstream fileStream; fileStream.open( "test.file.data_dat", ios_base::out | ios_base::binary | ios_base::trunc); // Write the file header using raw methods until the writer is available. // magic number FileOutput::WriteUInt8(fileStream, 59); // version FileOutput::WriteInt8(fileStream, 1); // Number of data cubes - confirm this FileOutput::WriteUInt32(fileStream, 1); // offset to the data cube byte offset array int offsetLocation = fileStream.tellp(); FileOutput::WriteUInt32(fileStream, 1); //???? // Write the GenericDataHeader to the file GenericDataHeaderWriter gdhWriter; gdhWriter.Write(fileStream, gdh); // // Data Cube // int offset = fileStream.tellp(); // Write the DataSetHeader DataSetWriter dphWriter(&fileStream, &dph); dphWriter.WriteHeader(); // Write out the data for( int32_t i=0; i < rows; ++i ) { u_int16_t value = (u_int16_t)(i*10+i); FileOutput::WriteUInt16(fileStream, value); } // write the offset fileStream.seekp(offsetLocation); FileOutput::WriteUInt32(fileStream, offset); fileStream.close(); }