@@ -149,7 +149,7 @@ def analyze_streamer_headers(
149149 return unique_cables , cable_chan_min , cable_chan_max , geom_type
150150
151151
152- def analyze_shotlines_for_guns (
152+ def analyze_saillines_for_guns (
153153 index_headers : HeaderArray ,
154154) -> tuple [NDArray , dict [str , list ], ShotGunGeometryType ]:
155155 """Check input headers for SEG-Y input to help determine geometry of shots and guns.
@@ -161,27 +161,27 @@ def analyze_shotlines_for_guns(
161161 index_headers: numpy array with index headers
162162
163163 Returns:
164- tuple of unique_shot_lines, unique_guns_in_shot_line , geom_type
164+ tuple of unique_sail_lines, unique_guns_in_sail_line , geom_type
165165 """
166166 # Find unique cable ids
167- unique_shot_lines = np .sort (np .unique (index_headers ["shot_line " ]))
167+ unique_sail_lines = np .sort (np .unique (index_headers ["sail_line " ]))
168168 unique_guns = np .sort (np .unique (index_headers ["gun" ]))
169- logger .info ("unique_shot_lines : %s" , unique_shot_lines )
169+ logger .info ("unique_sail_lines : %s" , unique_sail_lines )
170170 logger .info ("unique_guns: %s" , unique_guns )
171171
172172 # Find channel min and max values for each cable
173- unique_guns_in_shot_line = {}
173+ unique_guns_in_sail_line = {}
174174
175175 geom_type = ShotGunGeometryType .B
176176 # Check shot numbers are still unique if div/num_guns
177- for shot_line in unique_shot_lines :
178- shot_line_mask = index_headers ["shot_line " ] == shot_line
179- shot_current_sl = index_headers ["shot_point" ][shot_line_mask ]
180- gun_current_sl = index_headers ["gun" ][shot_line_mask ]
177+ for sail_line in unique_sail_lines :
178+ sail_line_mask = index_headers ["sail_line " ] == sail_line
179+ shot_current_sl = index_headers ["shot_point" ][sail_line_mask ]
180+ gun_current_sl = index_headers ["gun" ][sail_line_mask ]
181181
182182 unique_guns_sl = np .sort (np .unique (gun_current_sl ))
183183 num_guns_sl = unique_guns_sl .shape [0 ]
184- unique_guns_in_shot_line [str (shot_line )] = list (unique_guns_sl )
184+ unique_guns_in_sail_line [str (sail_line )] = list (unique_guns_sl )
185185
186186 for gun in unique_guns_sl :
187187 gun_mask = gun_current_sl == gun
@@ -190,10 +190,10 @@ def analyze_shotlines_for_guns(
190190 mod_shots = np .floor (shots_current_sl_gun / num_guns_sl )
191191 if len (np .unique (mod_shots )) != num_shots_sl :
192192 msg = "Shot line %s has %s when using div by %s %s has %s unique mod shots."
193- logger .info (msg , shot_line , num_shots_sl , num_guns_sl , np .unique (mod_shots ))
193+ logger .info (msg , sail_line , num_shots_sl , num_guns_sl , np .unique (mod_shots ))
194194 geom_type = ShotGunGeometryType .A
195- return unique_shot_lines , unique_guns_in_shot_line , geom_type
196- return unique_shot_lines , unique_guns_in_shot_line , geom_type
195+ return unique_sail_lines , unique_guns_in_sail_line , geom_type
196+ return unique_sail_lines , unique_guns_in_sail_line , geom_type
197197
198198
199199def create_counter (
@@ -459,7 +459,7 @@ def transform(
459459class AutoShotWrap (GridOverrideCommand ):
460460 """Automatically determine ShotGun acquisition type."""
461461
462- required_keys = {"shot_line " , "gun" , "shot_point" , "cable" , "channel" }
462+ required_keys = {"sail_line " , "gun" , "shot_point" , "cable" , "channel" }
463463 required_parameters = None
464464
465465 def validate (self , index_headers : HeaderArray , grid_overrides : dict [str , bool | int ]) -> None :
@@ -475,24 +475,28 @@ def transform(
475475 """Perform the grid transform."""
476476 self .validate (index_headers , grid_overrides )
477477
478- result = analyze_shotlines_for_guns (index_headers )
479- unique_shot_lines , unique_guns_in_shot_line , geom_type = result
478+ result = analyze_saillines_for_guns (index_headers )
479+ unique_sail_lines , unique_guns_in_sail_line , geom_type = result
480480 logger .info ("Ingesting dataset as shot type: %s" , geom_type .name )
481481
482482 max_num_guns = 1
483- for shot_line in unique_shot_lines :
484- logger .info ("shot_line : %s has guns: %s" , shot_line , unique_guns_in_shot_line [str (shot_line )])
485- num_guns = len (unique_guns_in_shot_line [str (shot_line )])
483+ for sail_line in unique_sail_lines :
484+ logger .info ("sail_line : %s has guns: %s" , sail_line , unique_guns_in_sail_line [str (sail_line )])
485+ num_guns = len (unique_guns_in_sail_line [str (sail_line )])
486486 max_num_guns = max (num_guns , max_num_guns )
487487
488488 # This might be slow and potentially could be improved with a rewrite
489489 # to prevent so many lookups
490490 if geom_type == ShotGunGeometryType .B :
491- for shot_line in unique_shot_lines :
492- shot_line_idxs = np .where (index_headers ["shot_line" ][:] == shot_line )
493- index_headers ["shot_point" ][shot_line_idxs ] = np .floor (
494- index_headers ["shot_point" ][shot_line_idxs ] / max_num_guns
491+ shot_index = np .empty (len (index_headers ), dtype = "uint32" )
492+ index_headers = rfn .append_fields (index_headers .base , "shot_index" , shot_index )
493+ for sail_line in unique_sail_lines :
494+ sail_line_idxs = np .where (index_headers ["sail_line" ][:] == sail_line )
495+ index_headers ["shot_index" ][sail_line_idxs ] = np .floor (
496+ index_headers ["shot_point" ][sail_line_idxs ] / max_num_guns
495497 )
498+ # Make shot index zero-based PER sail line
499+ index_headers ["shot_index" ][sail_line_idxs ] -= index_headers ["shot_index" ][sail_line_idxs ].min ()
496500 return index_headers
497501
498502
0 commit comments