Commit 66d7e4cf authored by Jørgen Lind's avatar Jørgen Lind
Browse files

Merge branch feature/morten.ofstad/HandleHeadwaveSEGYMetadata with...

Merge branch feature/morten.ofstad/HandleHeadwaveSEGYMetadata with refs/heads/master into refs/merge-requests/42/train
parents dd46f81e e132243f
Pipeline #688 passed with stages
in 8 minutes and 23 seconds
......@@ -154,18 +154,61 @@ main(int argc, char *argv[])
}
int segyTraceHeaderChannel = volumeDataLayout->GetChannelIndex("SEGYTraceHeader");
if(!volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "TextHeader") || !volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "BinaryHeader"))
if((!volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "TextHeader") && !volumeDataLayout->IsMetadataBLOBAvailable("", "SEGYTextHeader")) ||
(!volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "BinaryHeader") && !volumeDataLayout->IsMetadataBLOBAvailable("", "SEGYBinaryHeader")))
{
fmt::print(stderr, "SEG-Y Text/Binary headers not found");
return EXIT_FAILURE;
}
// Write headers
std::vector<uint8_t> textHeader;
std::vector<uint8_t> binaryHeader;
std::vector<uint8_t> textHeader(SEGY::TextualFileHeaderSize);
std::vector<uint8_t> binaryHeader(SEGY::BinaryFileHeaderSize);
volumeDataLayout->GetMetadataBLOB("SEGY", "TextHeader", textHeader);
volumeDataLayout->GetMetadataBLOB("SEGY", "BinaryHeader", binaryHeader);
if(volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "TextHeader"))
{
volumeDataLayout->GetMetadataBLOB("SEGY", "TextHeader", textHeader);
}
else if(volumeDataLayout->IsMetadataBLOBAvailable("", "SEGYTextHeader")) // This non-standard metadata is written by Bluware software that pre-dates the standardization of VDS
{
volumeDataLayout->GetMetadataBLOB("", "SEGYTextHeader", textHeader);
int a2e[] = { 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 37, 11, 12, 13, 14, 15,
16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31,
64, 79,127,123, 91,108, 80,125, 77, 93, 92, 78,107, 96, 75, 97,
240,241,242,243,244,245,246,247,248,249,122, 94, 76,126,110,111,
124,193,194,195,196,197,198,199,200,201,209,210,211,212,213,214,
215,216,217,226,227,228,229,230,231,232,233, 74,224, 90, 95,109,
121,129,130,131,132,133,134,135,136,137,145,146,147,148,149,150,
151,152,153,162,163,164,165,166,167,168,169,192,106,208,161, 7,
32, 33, 34, 35, 36, 21, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27,
48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62,225,
65, 66, 67, 68, 69, 70, 71, 72, 73, 81, 82, 83, 84, 85, 86, 87,
88, 89, 98, 99,100,101,102,103,104,105,112,113,114,115,116,117,
118,119,120,128,138,139,140,141,142,143,144,154,155,156,157,158,
159,160,170,171,172,173,174,175,176,177,178,179,180,181,182,183,
184,185,186,187,188,189,190,191,202,203,204,205,206,207,218,219,
220,221,222,223,234,235,236,237,238,239,250,251,252,253,254,255 };
// Convert to EBCDIC
for(int i = 0; i < textHeader.size(); i++) textHeader[i] = a2e[textHeader[i]];
}
if(volumeDataLayout->IsMetadataBLOBAvailable("SEGY", "BinaryHeader"))
{
volumeDataLayout->GetMetadataBLOB("SEGY", "BinaryHeader", binaryHeader);
}
else if(volumeDataLayout->IsMetadataBLOBAvailable("", "SEGYBinaryHeader")) // This non-standard metadata is written by Bluware software that pre-dates the standardization of VDS
{
std::vector<uint8_t> littleEndianBinaryHeader(SEGY::BinaryFileHeaderSize);
volumeDataLayout->GetMetadataBLOB("", "SEGYBinaryHeader", littleEndianBinaryHeader);
binaryHeader.resize(littleEndianBinaryHeader.size());
// Convert to big-endian
for(int i = 0; i < littleEndianBinaryHeader.size(); i++) binaryHeader[i] = littleEndianBinaryHeader[(i < 3 * 4) ? (i ^ 3) : (i ^ 1)];
}
if(textHeader.size() != SEGY::TextualFileHeaderSize || binaryHeader.size() != SEGY::BinaryFileHeaderSize)
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment