def get_data_and_trace_heads(self): if( self.f == None): raise Exception("File not open. Use open('path')") self.f.seek(3600,0) coef = self.check_coef() self.trace_bin_headers=None offset =self.bin_head.Samples*coef #print(offset) # all={}#pandas.DataFrame(index=np.arange(0,len(Heads.TraceBinHead().__dict__.keys())),columns=Heads.TraceBinHead().__dict__.keys()) all= np.zeros((self.count_trace, len(Heads.TraceBinHead().__dict__.keys())), dtype=np.int32) data = np.zeros((self.count_trace, self.bin_head.Samples), dtype=np.float32) trace_head = Heads.TraceBinHead() start_tp=time() for i in range(0,self.count_trace): # start=time() b=trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] all[i]=list(b.values()) step_count=self.bin_head.Samples datas = (self.f.read(coef*step_count)) sample= self.__get_sample(coef,datas) data[i]=sample # print(time()-start) self.data=data strat = time() self.trace_bin_headers = pandas.DataFrame(data=all,columns=Heads.TraceBinHead().__dict__.keys())#,orient='index') return self.data ,self.trace_bin_headers
def get_step_count(self): self.f.seek(3600, 0) trace_head = Heads.TraceBinHead() b = trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] self.f.seek(3600, 0) return step_count
def open(self, path): self.path = path self.f = open(self.path, "rb") self.f.seek(0, 0) self.line_header = self.f.read(3200) b_h = self.f.read(400) format = struct.unpack(b'>h', b_h[24:26:])[0] # Check if valid. if format in [1, 2, 3, 4, 5, 8]: self.order = "big" # Else test little endian. else: format = struct.unpack(b'<h', b_h[24:26:])[0] if format in [1, 2, 3, 4, 5, 8]: self.order = "little" else: msg = 'Unable to determine the endianness of the file. ' + \ 'Please specify it.' raise Exception(msg) # if (int.from_bytes(b_h[97:101:], "big") > 255): # self.order = "little" # else: # self.order = "big" # self.order="little" self.bin_head = Heads.BinHead(b_h, self.order) size_file = os.path.getsize(self.path) coef = self.check_coef() self.count_trace = (size_file - 3600) / (self.bin_head.Samples * coef + 240) self.count_trace = int(self.count_trace)
def __get_step_count(self): """ inner function don't call """ trace_head = Heads.TraceBinHead() b = trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] return step_count
def get_null_trace(): """ inner function """ ar = Heads.TraceBinHead() for i,k in ar.__dict__.items(): ar.__dict__[i]=0 return ar
def create_data_frame(self,series): """ create dataFrame with input series, where columns is Trace Heads input series with data for Trace Head return res = dataFrame """ res = pandas.DataFrame.from_dict(data=series,columns=Heads.TraceBinHead().__dict__.keys(),orient='index') return res
def read_bin_trace_specefic(self, param): self.f.seek(3600, 0) all=[] trace_head = Heads.TraceBinHead() for i in range(0, self.count_trace): cur = self.f.tell() all.append(trace_head.get_specific_trace(self.f,self.order,cur,param)) self.f.seek(cur+240,0) step_count = self.bin_head.Samples self.f.seek(step_count*self.check_coef(),1) return pandas.DataFrame(all)
def get_step_count(self): """ return sample count input - return: step count - Trace Sample Count """ self.f.seek(3600, 0) trace_head = Heads.TraceBinHead() b = trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] self.f.seek(3600, 0) return step_count
def get_data_and_trace_heads(self): if (self.f == None): raise Exception("File not open. Use open('path')") self.f.seek(3600, 0) coef = self.check_coef() self.trace_bin_headers = None offset = self.bin_head.Samples * coef #print(offset) all = { } #pandas.DataFrame(index=np.arange(0,len(Heads.TraceBinHead().__dict__.keys())),columns=Heads.TraceBinHead().__dict__.keys()) data = [] trace_head = Heads.TraceBinHead() start_tp = time() for i in range(0, self.count_trace): start = time() b = trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] all[i] = b.values() step_count = self.bin_head.Samples datas = (self.f.read(coef * step_count)) sample = self.__get_sample(coef, datas) data.append(sample) #print(time()-start_tp) self.data = np.array(data) # strat = time() self.trace_bin_headers = pandas.DataFrame.from_dict( data=all, columns=Heads.TraceBinHead().__dict__.keys(), orient='index') self.trace_bin_headers["IDX"] = np.arange(len(self.trace_bin_headers)) # print(time() -strat) self.trace_bin_headers = self.delete_rows_cols(self.trace_bin_headers) self.trace_bin_headers = self.trace_bin_headers.drop(["spare"], axis=1) return self.data, self.trace_bin_headers
def load_all_file(self,path): with open(path ,"r+b") as f: self.f = mmap(f.fileno(), 0) self.f.seek(0, 0) self.line_header = self.f.read(3200) b_h = self.f.read(400) if (int.from_bytes(b_h[24:26:], "big") > 255): self.order = "little" else: self.order = "big" self.bin_head = Heads.BinHead(b_h, self.order) print(self.bin_head.__sizeof__()) size_file = os.path.getsize(path) coef = self.check_coef() self.count_trace = (size_file - 3600) / (self.bin_head.Samples * coef + 240) self.count_trace = int(self.count_trace)
def write(filename, Data,SegyTraceHeaders=pandas.DataFrame(), SegyHeader=None, text_head=None,order="big",dt=1000,SampleFormat=3): print("START WRITE") if (isinstance(SegyTraceHeaders, dict)): SegyTraceHeaders = create_head_traces(SegyTraceHeaders) elif (isinstance(SegyTraceHeaders, pandas.DataFrame)): pass else: raise Exception("Not definde type") file = open(filename, "wb") if (SegyHeader == None): bin_head = Heads.BinHead(bytearray(400), order) else: bin_head = SegyHeader coef = retCoef(SampleFormat) bin_head.Interval = dt try: bh_s = bin_head.Samples except Exception as e: bin_head.Samples = len(Data[0]) bin_head.Format = SampleFormat if (text_head != None): file.write(text_head) else: file.write(bytearray(3200)) if (SegyTraceHeaders.empty): segyTraceHeaders = get_null_trace() else: segyTraceHeaders = SegyTraceHeaders # segyTraceHeaders.TRACE_SAMPLE_COUNT = len(Data[0]) Heads.writeBinHead(file, bin_head, order) all_c = bytearray() start = time() # df_dict = segyTraceHeaders.to_dict(orient='index') for i in range(0,len(Data)): if(i!=0 and i%1000000==0): file.write(all_c) all_c=bytearray() if(SegyTraceHeaders.empty): b = Heads.writeTraceHeadEmpty(file, segyTraceHeaders, order) else: b = Heads.writeTraceHead(file, segyTraceHeaders.iloc[i], order) a= Heads.writeData(file,Data[i],coef,order) try: all_c+=b+a except Exception as e: print(e) file.write(all_c) print(time() - start)
def get_null_trace(): ar = Heads.TraceBinHead() for i, k in ar.__dict__.items(): ar.__dict__[i] = 0 return ar
def create_data_frame(self, series): res = pandas.DataFrame.from_dict( data=series, columns=Heads.TraceBinHead().__dict__.keys(), orient='index') return res
def __get_step_count(self): trace_head = Heads.TraceBinHead() b = trace_head.get_all_trace(self.f.read(240), self.order) step_count = b["TRACE_SAMPLE_COUNT"] return step_count