BdsApi  2.2.2
This is the Blacknest BDS API.
BdsDataFileBds.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * BdsDataFileBds.h Bds internal data file format
3  * T.Barnaby, BEAM Ltd, 2008-05-06
4  *******************************************************************************
5  *
6  * Supported sub-formats:
7  * BDS, BDS-SM BDS Sample Multiplexed
8  * BDS-CM BDS Channel Multiplexed
9  * BDS-SM-CC BDS Sample Multiplexed, Canadian Compression
10  *
11  * A BDS data file contains multiple streams. Each stream, numbered from 0 upwards, contains information blocks or
12  * data blocks for a specic data channel or set of channels if the channel data is sample multiplexed into a block.
13  * Data streams are split into segments at time discontinuities when using the getInfo() function..
14  * Each segment consists of a set of data blocks and each data block can be for one channel or a number of sample multiplexed channels.
15  * The siesmic channel to stream mapping is stored in the Information blocks. An information block is located at the start of the
16  * file and at each append point. You can only append data channels that the files was originally created for (ie. the first setInfo() API call).
17  *
18  * If the ReadOptionReorder option is used the data segments and blocks are sorted into time order.
19  *
20  * The file can be appended to. When opened for appending
21  */
22 #ifndef BdsDataFileBds_H
23 #define BdsDataFileBds_H 1
24 
25 #include <BdsDataFile.h>
26 #include <BBuffer.h>
27 
28 namespace Bds {
29 
31 enum BdsDataType { BdsDataTypeBlock = 0x42534442, BdsDataTypeInfo = 0x30534442, BdsDataTypeData = 0x31534442, BdsDataTypeInfoExtra = 0x32534442 };
32 
38 };
39 
41 struct BdsDataBlock {
43  char data[4];
44 };
45 
55 };
56 
58 class BdsDataPacket : public BBufferStore {
59 public:
60  BdsDataPacket();
62 
63  void clear();
64  void reset();
65 
66  void setChecksumAndLength();
68 
69  BError setHeader(const BdsDataPacketHeader& header);
71 
72  void dump();
73 };
74 
77 public:
80  int operator<(const BdsDataBlockPos& b) const { return startTime < b.startTime; }
81 
89 };
90 
93 public:
95  int operator<(const BdsDataSegment& b) const { return startTime < b.startTime; }
96 
101  double sampleRate;
102  BArray<BdsDataBlockPos> blocks; // The list of blocks in the segment
103 };
104 
107 public:
109 
112  BUInt32 channel; // The base channel number of data in this streamlet
113  BUInt32 numChannels; // The number of channels of data in this streamlet
114  BArray<BdsDataBlockPos> blocks; // All blocks in this streamlet
115  BArray<BdsDataSegment> segments; // Segments of data
116 };
117 
118 
120 class DataFileBds : public DataFile {
121 public:
122  enum { StreamsMax = 256 };
123  enum { DefaultBlockSize = 65536 };
125 
126  // Generic access
127  DataFileBds();
128  ~DataFileBds();
129 
130  BError open(BString fileName, BString mode);
131  BError flush();
132  BError close();
133 
134  // Write routines
135  BError setFormat(BString format);
136  BError setInfo(const DataInfo& dataInfo, const ChannelInfos& channelInfos, WriteOptionsList options = WriteOptionSensorData);
137  BError writeData(const DataBlock& data);
138 
139  // Read routines
141  BError getInfo(DataInfo& dataInfo, DataFileOptions options, BList<DataError>& errors);
142  BError seekBlock(BUInt32 channel, BUInt segment, BTimeStamp time, BUInt32& blockNumber, BUInt64& sampleNumber, DataBlock& dataBlock);
143  BError readData(BUInt32 channel, BUInt segment, BUInt32 blockNumber, DataBlock& dataBlock);
144 
145  static DataFormat getFormats();
146 
147  BError setDiskBlockSize(BUInt32 blockSize);
149 
150 private:
151  void clear();
152 
153  // DataBlock exists checks
154  BError dataBlockAdd(BUInt32 streamlet, BTimeStamp startTime, BTimeStamp endTime);
155  Bool dataBlockCheckIfExists(BUInt32 streamlet, BTimeStamp startTime, BTimeStamp endTime);
156 
157  // Low level file access
158  BError setInfoRepeat(BUInt32 repeat);
159  BError infoSet(BUInt32 streamlet, BTimeStamp startTime, BTimeStamp endTime, BDictString& info);
160  BError infoGet(BdsDataPacket& packet, BDictString& info);
161  BError readInfoPacket();
162  BError addInfoPacket();
163  BError addInfoExtraPacket();
164  BError streamletFromChannel(BUInt channel, BUInt& streamlet);
165 
166  BError dataAppend(const DataBlock& data);
167  BError dataGet(BUInt channel, BdsDataPacket& packet, DataBlock& data);
168 
169  // Low Level Packet I/O
170  BError setWritePositionForAppend();
171  BError packetRead(BdsDataPacket& packet);
172  BError packetWrite(BdsDataPacket& packet);
173 
174  // Low level Disk Block access functions
175  BError diskBlockWrite(void* data, BUInt32 numBytes, int header = 0);
176  BError diskBlockWriteFlush();
177  BError diskBlockRead(void* data, BUInt32 numBytes, int header = 0);
178  BError diskBlockSeek(BUInt64 position);
179 
180  BString omode;
181  BString oformat;
182  PackFormat opackFormat;
183  DataInfo odataInfo;
184  ChannelInfos ochannelInfos;
185 
186  BUInt32 oinfoRepeat;
187  BDictString oinfo;
188  BdsDataPacketHeader oinfoHeader;
189 
190  // Disk Block access data
191  BUInt32 odiskBlockSize;
192  BdsDataBlock* odiskBlockRead;
193  BUInt64 odiskPositionRead;
194  BdsDataBlock* odiskBlockWrite;
195  BUInt64 odiskPositionWrite;
196 
197  BArray<BdsDataStreamlet> ostreamlets;
198  BdsDataPacket opacket;
199 };
200 }
201 #endif
WriteOptionsList
Definition: BdsDataFile.h:45
BdsDataFileBds: internal fixed size BDS Data Block.
Definition: BdsDataFileBds.h:41
DataOrder
Definition: BdsDataFile.h:43
BError close()
Close file.
Definition: BdsDataFileBds.cpp:202
BUInt32 getDiskBlockSize()
Returns the data block size in bytes.
Definition: BdsDataFileBds.cpp:973
BUInt64 position
Definition: BdsDataFileBds.h:87
BArray< BdsDataBlockPos > blocks
Definition: BdsDataFileBds.h:114
BUInt32 checksum
Checksum of packet.
Definition: BdsDataFileBds.h:52
BdsDataType
BdsDataFileBds: internal file block type field.
Definition: BdsDataFileBds.h:31
static DataFormat getFormats()
Get the names of the supported formats.
Definition: BdsDataFileBds.cpp:53
BUInt32 type
Packets type.
Definition: BdsDataFileBds.h:48
BTimeStamp startTime
Definition: BdsDataFileBds.h:97
BdsDataFileBds: internal file storage data streamlet.
Definition: BdsDataFileBds.h:106
Definition: BdsDataFileBds.h:122
BUInt32 streamlet
The streamlet id.
Definition: BdsDataFileBds.h:50
BUInt32 packetNumber
Definition: BdsDataFileBds.h:110
BArray< BdsDataSegment > segments
Definition: BdsDataFileBds.h:115
BdsDataStreamlet()
Definition: BdsDataFileBds.h:108
BUInt32 numChannels
Definition: BdsDataFileBds.h:113
BTimeStamp endTime
The time of the last sample + 1.
Definition: BdsDataFileBds.h:54
~DataFileBds()
Definition: BdsDataFileBds.cpp:192
BError validateChecksum()
Definition: BdsDataFileBds.cpp:114
Definition: BdsDataFileBds.h:123
BUInt32 length
Length in bytes of packet.
Definition: BdsDataFileBds.h:49
bool Bool
Definition: BdsDataFileBds.h:31
Definition: BdsDataFileBds.h:124
PackFormat
Definition: BdsDataFileBds.h:124
BTimeStamp endTime
Definition: BdsDataFileBds.h:98
uint64_t BUInt64
BError setHeader(const BdsDataPacketHeader &header)
Definition: BdsDataFileBds.cpp:139
BdsDataFileBds internal file storage packet header.
Definition: BdsDataFileBds.h:47
BError setFormat(BString format)
Sets the sub-format.
Definition: BdsDataFileBds.cpp:356
Definition: BdsDataFileBds.h:124
This class defines information on a set of data.
Definition: BdsD.h:570
BError setDiskBlockSize(BUInt32 blockSize)
Sets up file/stream block size.
Definition: BdsDataFileBds.cpp:977
BdsDataPacket()
Definition: BdsDataFileBds.cpp:79
~BdsDataPacket()
Definition: BdsDataFileBds.cpp:83
This holds information on a seismic data format.
Definition: BdsD.h:826
This class provides the acual seismic data values contained within a single data block.
Definition: BdsD.h:637
void clear()
Definition: BdsDataFileBds.cpp:86
BdsDataBlockHeader header
Definition: BdsDataFileBds.h:42
BError getInfo(DataInfo &dataInfo, DataFileOptions options, BList< DataError > &errors)
Get information on open file.
Definition: BdsDataFileBds.cpp:539
Definition: BdsC.cc:8
BTimeStamp endTime
Definition: BdsDataFileBds.h:83
DataFileBds()
Definition: BdsDataFileBds.cpp:186
int operator<(const BdsDataBlockPos &b) const
Definition: BdsDataFileBds.h:80
This class provides metadata information on a set of channels.
Definition: BdsD.h:496
BdsDataFileBds: internal file storage packet.
Definition: BdsDataFileBds.h:58
Definition: BdsDataFileBds.h:124
This class defines the interface for generic data file access that all of the BDS data conterors shar...
Definition: BdsDataFile.h:41
BdsDataFileBds: internal fixed size BDS Data Block header.
Definition: BdsDataFileBds.h:34
Definition: BdsDataFile.h:45
BError flush()
Flush any data to disk even if blocks are not full.
Definition: BdsDataFileBds.cpp:211
BUInt32 channel
Definition: BdsDataFileBds.h:84
BUInt32 numBlocks
Definition: BdsDataFileBds.h:99
DataOrder getDataOrder()
Get the expected order of writing data, by sample or by channel.
Definition: BdsDataFileBds.cpp:483
BUInt32 BUInt
uint32_t BUInt32
BUInt32 sequence
The streamlet packet sequence number.
Definition: BdsDataFileBds.h:51
BUInt32 segment
Definition: BdsDataFileBds.h:86
Definition: BdsDataFileBds.h:31
BError setInfo(const DataInfo &dataInfo, const ChannelInfos &channelInfos, WriteOptionsList options=WriteOptionSensorData)
Sets the information.
Definition: BdsDataFileBds.cpp:377
void dump()
Definition: BdsDataFileBds.cpp:163
BError open(BString fileName, BString mode)
Open the file for reading or writing.
Definition: BdsDataFileBds.cpp:283
void setChecksumAndLength()
Definition: BdsDataFileBds.cpp:96
BArray< BdsDataBlockPos > blocks
Definition: BdsDataFileBds.h:102
BUInt32 channel
Definition: BdsDataFileBds.h:112
BdsDataSegment()
Definition: BdsDataFileBds.h:94
BUInt32 numSamples
Definition: BdsDataFileBds.h:100
Definition: BdsDataFileBds.h:124
void reset()
Definition: BdsDataFileBds.cpp:91
BdsDataFileBds: internal file storage data segment.
Definition: BdsDataFileBds.h:92
BdsDataBlockPos(BTimeStamp startTime=0, BTimeStamp endTime=0, BUInt32 channel=0, BUInt32 numChannels=0, BUInt32 segment=0, BUInt64 position=0, BUInt64 numSamples=0)
Definition: BdsDataFileBds.h:78
BUInt32 packetOffset
Offset to first packet header within block or 0 if no packet header within block.
Definition: BdsDataFileBds.h:37
This class implements the BDS Data File/Stream access system.
Definition: BdsDataFileBds.h:120
Definition: BdsDataFileBds.h:31
BError seekBlock(BUInt32 channel, BUInt segment, BTimeStamp time, BUInt32 &blockNumber, BUInt64 &sampleNumber, DataBlock &dataBlock)
Find the block that contains the samples for the time requested.
Definition: BdsDataFileBds.cpp:826
BError readData(BUInt32 channel, BUInt segment, BUInt32 blockNumber, DataBlock &dataBlock)
Read the data block for the given channel or all channels if blockNumber is 0.
Definition: BdsDataFileBds.cpp:874
BError writeData(const DataBlock &data)
Writes a data block to the file.
Definition: BdsDataFileBds.cpp:468
BUInt64 position
Definition: BdsDataFileBds.h:111
Definition: BdsDataFileBds.h:31
BUInt32 numChannels
Definition: BdsDataFileBds.h:85
BTimeStamp startTime
The time of the first sample.
Definition: BdsDataFileBds.h:53
BdsDataFileBds: internal file storage data block position.
Definition: BdsDataFileBds.h:76
BUInt32 length
Packet length.
Definition: BdsDataFileBds.h:36
char data[4]
The packet data.
Definition: BdsDataFileBds.h:43
BUInt64 numSamples
Definition: BdsDataFileBds.h:88
This defines a list of BDS data convtor options.
Definition: BdsDataFile.h:30
BUInt32 type
Blocks type, contains magic number for synchronisation.
Definition: BdsDataFileBds.h:35
double sampleRate
Definition: BdsDataFileBds.h:101
BTimeStamp startTime
Definition: BdsDataFileBds.h:82
BError getHeader(BdsDataPacketHeader &header)
Definition: BdsDataFileBds.cpp:151
int operator<(const BdsDataSegment &b) const
Definition: BdsDataFileBds.h:95