@@ -318,7 +318,7 @@ def get_ldm(recnum):
318318 dec .decompress (compressed ), dtype = np .uint8
319319 )
320320
321- # rectrieve wanted record and put into self.rh
321+ # retrieve wanted record and put into self.rh
322322 if recnum < 134 :
323323 start = recnum * RECORD_BYTES
324324 if not self .is_compressed :
@@ -540,8 +540,8 @@ def get_metadata_header(self):
540540 meta_headers = defaultdict (list )
541541 rec = 0
542542 # iterate over alle messages until type outside [2, 3, 5, 13, 15, 18, 32]
543- while True :
544- self .init_record (rec )
543+
544+ while self .init_record (rec ):
545545 rec += 1
546546 filepos = self .filepos
547547 message_header = self .get_message_header ()
@@ -559,7 +559,11 @@ def get_metadata_header(self):
559559 def get_msg_5_data (self ):
560560 """Get MSG5 data."""
561561 # get the record number from the meta header
562- recnum = self .meta_header ["msg_5" ][0 ]["record_number" ]
562+ # return False, if no msg_5 data is available
563+ if self .meta_header ["msg_5" ]:
564+ recnum = self .meta_header ["msg_5" ][0 ]["record_number" ]
565+ else :
566+ return False
563567 self .init_record (recnum )
564568 # skip header
565569 self .rh .pos += LEN_MSG_HEADER + 12
@@ -630,7 +634,11 @@ def get_data_header(self):
630634 # get the record number from the meta header
631635 # message 2 is the last meta header, after which the
632636 # data records are located
633- recnum = self .meta_header ["msg_2" ][0 ]["record_number" ]
637+ if self .is_compressed :
638+ recnum = self .meta_header ["msg_2" ][0 ]["record_number" ]
639+ else :
640+ # iterate over all records to retrieve data
641+ recnum = 0
634642 self .init_record (recnum )
635643 current_sweep = - 1
636644 current_header = - 1
@@ -1480,7 +1488,10 @@ def open_store_coordinates(self):
14801488 prt_mode = "not_set"
14811489 follow_mode = "not_set"
14821490
1483- elev_data = self .root .msg_5 ["elevation_data" ]
1491+ if self .root .msg_5 :
1492+ elev_data = self .root .msg_5 ["elevation_data" ]
1493+ else :
1494+ elev_data = False
14841495 # in some cases msg_5 doesn't contain meaningful data
14851496 # we extract the needed values from the data header instead
14861497 if elev_data :
@@ -1523,8 +1534,11 @@ def get_variables(self):
15231534 def get_attrs (self ):
15241535 _attributes = [
15251536 ("instrument_name" , self .root .volume_header ["icao" ].decode ()),
1526- ("scan_name" , f"VCP-{ self .root .msg_5 ['pattern_number' ]} " ),
15271537 ]
1538+ if self .root .msg_5 :
1539+ _attributes .append (
1540+ ("scan_name" , f"VCP-{ self .root .msg_5 ['pattern_number' ]} " )
1541+ )
15281542
15291543 return FrozenDict (_attributes )
15301544
@@ -1721,7 +1735,10 @@ def open_nexradlevel2_datatree(
17211735 else :
17221736 with NEXRADLevel2File (filename_or_obj , loaddata = False ) as nex :
17231737 # Expected number of elevation cuts from the VCP definition
1724- exp_sweeps = nex .msg_5 ["number_elevation_cuts" ]
1738+ if nex .msg_5 :
1739+ exp_sweeps = nex .msg_5 ["number_elevation_cuts" ]
1740+ else :
1741+ exp_sweeps = 0
17251742 # Actual number of sweeps recorded in the file
17261743 act_sweeps = len (nex .msg_31_data_header )
17271744 # Check for AVSET mode: If AVSET was active, the actual number of sweeps (act_sweeps)
0 commit comments