Source code for oasislmf.pytools.converters.bintocsv.utils.footprint
importzlibimportnumpyasnpimportpandasaspdimportreimportsysfromoasislmf.pytools.common.dataimportresolve_file,write_ndarray_to_fmt_csvfromoasislmf.pytools.converters.dataimportTOOL_INFOfromoasislmf.pytools.getmodel.commonimportEvent,EventIndexBin,EventIndexBinZ,FootprintHeaderdef_check_event_from_to(event_from_to):from_event=-1to_event=-1ifevent_from_to==None:returnTrue,from_event,to_eventregex_match=re.fullmatch(r'(\d+)-(\d+)',event_from_to)ifnotregex_match:raiseValueError(f"Invalid format for event_from_to string: {event_from_to}. String must be of format \"[int1]-[int2]\"")from_event,to_event=map(int,regex_match.groups())iffrom_event>to_event:raiseValueError(f"Invalid event range: {from_event} > {to_event}")returnFalse,from_event,to_eventdef_read_footprint_zips(stack,file_in,idx_file_in):footprint_file=resolve_file(file_in,mode="rb",stack=stack)iffootprint_file==sys.stdin.buffer:footprint=np.frombuffer(footprint_file.read(),dtype="u1")else:footprint=np.fromfile(footprint_file,dtype="u1")footprint_header=np.frombuffer(footprint[:FootprintHeader.size].tobytes(),dtype=FootprintHeader)uncompressedMask=1<<1uncompressed_size=int(footprint_header['has_intensity_uncertainty']&uncompressedMask)ifuncompressed_size:index_dtype=EventIndexBinZelse:index_dtype=EventIndexBinfootprint_index_file=resolve_file(idx_file_in,mode="rb",stack=stack)footprint_mmap=np.memmap(footprint_index_file,dtype=index_dtype,mode='r')footprint_index=pd.DataFrame(footprint_mmap,columns=footprint_mmap.dtype.names).set_index('event_id').to_dict('index')returnfootprint,footprint_indexdef_read_footprint_bins(stack,file_in,idx_file_in):footprint_file=resolve_file(file_in,mode="rb",stack=stack)iffootprint_file==sys.stdin.buffer:footprint=np.frombuffer(footprint_file.read(),dtype="u1")else:footprint=np.fromfile(footprint_file,dtype="u1")footprint_index_file=resolve_file(idx_file_in,mode="rb",stack=stack)footprint_mmap=np.memmap(footprint_index_file,dtype=EventIndexBin,mode='r')footprint_index=pd.DataFrame(footprint_mmap,columns=footprint_mmap.dtype.names).set_index('event_id').to_dict('index')returnfootprint,footprint_index