根据关系文件编制束线编排表

地震采集需要编制束线编排表,根据炮检点的增量,依靠关系文件,编制了束线编排表。该脚本只针对同一束接收线相同,并且炮检点要网格化编排。

###############适用于同一束线接收线相同的工区,同时要求炮检点编排网格化,##############
#######################适用于sps1.0及2.1格式,需要执行打开格式,见第29行##################
import pandas as pd
import time
import copy
from tkinter import filedialog, Tk
time_start=time.time()
################################观测系统参数############################
shotinter = 5       ###每束线炮点编号增量
rlineinter = 5       ##检波线编号间隔
#########################读取关系文件##############
root = Tk()
root.withdraw()

file_shot = (filedialog.askopenfilename(title='选择关系文件', filetypes=[('All Files', '.xps')]))##选择一个文件
print('读取关系文件......')
data = []
for line in open(file_shot,'r'):
    data.append(line)
############计算头卡行数########
i = 0
while data[i][0]=='H':
    i = i+1
ii=i              ##计算头卡行数
###########读取关系文件####
v = data[ii:]
xlenth = len(v)
temp=[]
for i in range(0,xlenth):
    ###sps1.0格式#####
    # sline=int(v[i][13:20])
    # spoint= int(v[i][33:37])
    # rline = int(v[i][47:54])
    # rpointfrom = int(v[i][67:73])
    # rpointo = int(v[i][75:79])
    #####sps2.1格式#############
    sline=int(float(v[i][17:24]))
    spoint= int(v[i][28:34])
    rline = int(v[i][49:54])
    rpointfrom = int(v[i][62:66])
    rpointo = int(v[i][72:76])
    #######################
    sw =0 
    temp.append([sw,sline,spoint,rline,rpointfrom,rpointo])
datall = pd.DataFrame(temp) 

datall.columns=['sw','sline','spoint','rline','rpointfrom','rpointo']

################计算束线###################
spointmin = datall['spoint'] .min()  ########计算束线用最小炮点号
datall['sw']=((datall['spoint']-spointmin)/shotinter+1).astype('int') #计算束线

##################计算束线分组##################
print('束线分组处理中......')
swfenzu=[]
swmax = datall['sw'].max()
swmin = datall['sw'].min()
for i in range(swmin-1,swmax):
    tempdd = datall.loc[datall['sw']==i+1]  #按束线抽取数据
    swnum = i+1  #当前束线
    minsline = tempdd['sline'].min() #当前束线起炮线
    maxsline = tempdd['sline'].max() #当前束线止炮线
    minspoint= tempdd['spoint'].min() #当前束线起炮点
    maxspoint = tempdd['spoint'].max()#当前束线止炮点
    
    minrline = tempdd['rline'].min() #当前束线起检波线
    maxrline = tempdd['rline'].max() #当前束线止检波线
    minrpoint = tempdd['rpointfrom'].min() #当前束线起检波点
    maxrpoint = tempdd['rpointo'].max() #当前束线止检波点
    
    tempdd2 = copy.deepcopy(tempdd) #按束线抽取数据用于计算炮排
    
    tempdd2.drop_duplicates(subset='sline',keep='first',inplace=True)##去重复炮线
    
    shotlines = len(tempdd2)###计算当前束线炮排
    rlines = (maxrline-minrline)/rlineinter+1 ##当前束线检波线数
    stotal = int(len(tempdd)/rlines)  ##计算当前束线炮点数量
    rtotal= rlines*(maxrpoint-minrpoint+1)  ##计算当前束线检波点数量
    rpointintersw=maxrpoint-minrpoint+1
    swfenzu.append([swnum,minsline,maxsline,minspoint,maxspoint,shotlines,
                    stotal,minrline,maxrline,minrpoint,maxrpoint,rtotal,rpointintersw])
swinfo = pd.DataFrame(swfenzu)
swinfo.columns=['束号','起炮线','止炮线','起炮点','止炮点','炮排','炮数',
                '起检波线','止检波线','起检波点','止检波点','检波点数','束内单条检波线道数']


swinfo.to_excel(file_shot[:-4]+'.xlsx',index=None,encoding='utf_8_sig')
time_end=time.time()
print('totally cost',str(round(time_end-time_start,4)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值