@@ -547,9 +547,13 @@ def read_segy_trace_header(trace_index: int) -> bytes:
547547        segy_trace_idx  =  0 
548548        flat_mask  =  trace_mask .ravel ()
549549        flat_raw_headers  =  raw_headers_data .ravel ()  # Flatten to 1D array of 240-byte header records 
550+         print (f"Flat mask shape: { flat_mask .shape }  " )
551+ 
552+         operation  =  'w' 
550553
551554        for  grid_idx  in  range (flat_mask .size ):
552555            if  not  flat_mask [grid_idx ]:
556+                 print (f"Skipping trace { grid_idx }   because it is masked" )
553557                continue 
554558
555559            # Get MDIO header as bytes - convert single header record to bytes 
@@ -561,5 +565,58 @@ def read_segy_trace_header(trace_index: int) -> bytes:
561565            segy_header_bytes  =  np .frombuffer (segy_raw_header_bytes , dtype = np .uint8 )
562566
563567            # Compare byte-by-byte 
564-             assert_array_equal (mdio_header_bytes , segy_header_bytes )
568+             # Write hexdumps to separate files for analysis 
569+             def  hexdump_to_string (data : bytes , title : str ) ->  str :
570+                 """Create hexdump string.""" 
571+                 lines  =  [f"{ title }  " , "="  *  len (title ), "" ]
572+                  
573+                 for  i  in  range (0 , len (data ), 16 ):
574+                     # Address 
575+                     addr  =  i 
576+                     hex_part  =  "" 
577+                     ascii_part  =  "" 
578+                      
579+                     # Process 16 bytes at a time 
580+                     for  j  in  range (16 ):
581+                         if  i  +  j  <  len (data ):
582+                             byte_val  =  data [i  +  j ]
583+                             hex_part  +=  f"{ byte_val :02x}   " 
584+                             ascii_part  +=  chr (byte_val ) if  32  <=  byte_val  <=  126  else  "." 
585+                         else :
586+                             hex_part  +=  "   " 
587+                             ascii_part  +=  " " 
588+                      
589+                     lines .append (f"{ addr :08x}  : { hex_part }   |{ ascii_part }  |" )
590+                  
591+                 return  "\n " .join (lines )
592+              
593+             # Generate filenames for this test case 
594+             segy_filename  =  f"segy_headers_{ grid_conf .name }  .txt" 
595+             mdio_filename  =  f"mdio_headers_{ grid_conf .name }  .txt" 
596+              
597+             # Append SEG-Y hexdump to file 
598+             with  open (segy_filename , operation ) as  f :
599+                 if  segy_trace_idx  ==  0 :
600+                     f .write ("" )  # Start fresh for first trace 
601+                 else :
602+                     f .write ("\n \n " )  # Add spacing between traces 
603+                 f .write (hexdump_to_string (segy_header_bytes , 
604+                                         f"SEG-Y Header - { grid_conf .name }   Trace { segy_trace_idx }   (240 bytes)" ))
605+              
606+             # Append MDIO hexdump to file   
607+             with  open (mdio_filename , operation ) as  f :
608+                 if  segy_trace_idx  ==  0 :
609+                     f .write ("" )  # Start fresh for first trace 
610+                 else :
611+                     f .write ("\n \n " )  # Add spacing between traces 
612+                 f .write (hexdump_to_string (mdio_header_bytes ,
613+                                         f"MDIO Raw Header - { grid_conf .name }   Trace { segy_trace_idx }   (240 bytes)" ))
614+             operation  =  'a' 
615+              
616+             if  segy_trace_idx  ==  0 :
617+                 print (f"\n Header hexdumps being written for { grid_conf .name }  :" )
618+                 print (f"  SEG-Y: { segy_filename }  " )
619+                 print (f"  MDIO:  { mdio_filename }  " )
620+                 
621+             
565622            segy_trace_idx  +=  1 
0 commit comments