-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
SConstruct
156 lines (130 loc) · 4.08 KB
/
SConstruct
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# SConstruct (Madagascar Script)
#
# Purpose: Build the interpolation process twice to improve CMP sampling
# and CRE stacking results.
#
# Site: http://www.dirackslounge.online
#
# Version 1.0
#
# Programer: Rodolfo A. C. Neves (Dirack) 04/03/2020
#
# Email: rodolfo_profissional@hotmail.com
#
# License: GPL-3.0 <https://www.gnu.org/licenses/gpl-3.0.txt>.
# Madagascar package
from rsf.proj import *
# Import glob python library
import glob
# Call SConscript to generate input: original and interpolated data cubes
# SConscript('SConscript')
# CRE stacking
# It uses Very Fast Simulated Aneeling and non hyperbolic CRS
# to get zero offset CRS parameters (RN, RNIP and BETA) from data cube
v0 = 1.5
ot0 = 1.0
dt0 = 0.004
nt0 = 500
om0 = 2+1.5
dm0 = 0.5
nm0 = 6
dataCube='multiLayerDataCube'
for i in range(nm0):
parametersCube = []
creGatherCube = []
creTimeCurveCube = []
creGatherCubeForM0List = []
creTimeCurveCubeForM0List = []
creGatherIndex = 0
m0 = om0 + (i * dm0)
for j in range(nt0):
t0 = ot0 + (dt0 * j)
crsParameters = 'crsParameters-m0-%g-t0-%g' % (i,j)
creMhCoordinates = 'creMhCoordinates-m0-%g-t0-%g' % (i,j)
creGather = 'creGather-m0-%g-t0-%g' % (i,j)
creMcoordinate = 'creMcoordinate-m0-%g-t0-%g' % (i,j)
creTimeCurve = 'creTimeCurve-m0-%g-t0-%g' % (i,j)
creGatherPlot = 'crePlot-m0-%g-t0-%g' % (i,j)
# Very Fast Simulated Aneelling Global Optimization (VFSA)
Flow(crsParameters,dataCube,
'''
vfsacrsnh m0=%g v0=%g t0=%g verb=y repeat=3
''' % (m0,v0,t0))
# Calculate CRE trajectory
Flow(creMhCoordinates,['interpolatedDataCube2',crsParameters],
'''
cretrajec verb=y m0=%g param=${SOURCES[1]} |
put unit1="Offset" label1="Km"
''' % (m0))
#Get CRE Gather from interpolated Data Cube
Flow([creGather,creMcoordinate],['interpolatedDataCube2',creMhCoordinates],
'''
getcregather verb=y cremh=${SOURCES[1]} m=${TARGETS[1]} |
put label1="Time" unit1="s" label2="Offset" unit2="km"
''')
# Calculate CRE traveltime curve t(m,h)
Flow(creTimeCurve,[creMcoordinate, crsParameters],
'''
getcretimecurve param=${SOURCES[1]} t0=%g m0=%g v0=%g verb=y |
put label1="Offset" unit1="Km"
''' % (t0,m0,v0))
parametersCube.append(crsParameters)
creGatherCube.append(creGather)
creTimeCurveCube.append(creTimeCurve)
creGatherIndex = creGatherIndex + 1
# Concatenate cre gathers for each m0
creGatherCubeForM0 = "creGatherCube-m0-%i" % i
creGatherCubeForM0List.append(creGatherCubeForM0)
Flow(creGatherCubeForM0,creGatherCube,
'''
rcat axis=3 ${SOURCES[1:%d]}
''' % nt0)
# Concatenate cre Time curves for each m0
creTimeCurveCubeForM0 = "creTimeCurveCube-m0-%i" % i
creTimeCurveCubeForM0List.append(creTimeCurveCubeForM0)
Flow(creTimeCurveCubeForM0,creTimeCurveCube,
'''
rcat axis=2 ${SOURCES[1:%d]}
'''% nt0)
# Stack one m0 per turn
creTimeCurveCube = []
creGatherCube = []
creGatherTrace = "creGatherTrace-m0-%i" % i
creTimeCurveTrace = "creTimeCurveTrace-m0-%i" % i
creStackedTrace = "creStackedTrace-m0-%i" % i
# Get cre Gathers organized by t0 and m0
Flow(creGatherTrace,creGatherCubeForM0List,
'''
put n4=1 d4=%g o4=%g d3=%g o3=%g label3=t0 unit3=s label4=m0 unit4=Km
''' % (dm0,m0,dt0,ot0))
# Get all the traveltime curves organized by t0 and m0
Flow(creTimeCurveTrace,creTimeCurveCubeForM0List,
'''
put label3="m0" unit3="Km" label2="t0" unit2="s" d2=%g o2=%g d3=%g o3=%g
''' % (dt0,ot0,dm0,m0))
# CRE stacking
Flow(creStackedTrace,[creGatherTrace,creTimeCurveTrace],
'''
crestack timeCurves=${SOURCES[1]} verb=y |
put label1=t0 unit1=s label2=m0 unit2=Km --out=stdout
''')
# Build the cre stacked section
# throughout cre stacked traces sorting
files = glob.glob('creStackedTrace-*.rsf')
length = len(files)
sortedFiles = []
for i in range(length):
string = 'creStackedTrace-m0-%i.rsf' % i
sortedFiles.append(string)
Flow('stackedSection',sortedFiles,
'''
rcat axis=2 ${SOURCES[1:%d]} --out=stdout
''' % len(files))
Flow('filtStackedSection','stackedSection',
'''
bandpass fhi=20 --out=stdout
''')
End()