New python file with grid utilities
This commit is contained in:
parent
ae2b20aac9
commit
383c967731
183
workflows/Util/gridUtil.py
Normal file
183
workflows/Util/gridUtil.py
Normal file
|
@ -0,0 +1,183 @@
|
|||
#!/bin/env python
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
####################################################################
|
||||
|
||||
|
||||
import numpy as np
|
||||
|
||||
def segmentGrid32bit(inputFileName, outputFileName):
|
||||
inputFile=inputFileName
|
||||
value=np.fromfile(inputFile,dtype=np.float32)
|
||||
value_new = np.copy(value)
|
||||
|
||||
value_new[value < 0.1] = 1
|
||||
value_new[value > -0.01 and value < 0.01] = 0
|
||||
value_new[value > 0.1] = 2
|
||||
|
||||
|
||||
value_new.tofile(outputFileName)
|
||||
|
||||
def segmentGrid8bit(inputFileName, outputFileName):
|
||||
inputFile=inputFileName
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
value_new = np.copy(value)
|
||||
|
||||
value_new[value == 0] = 0
|
||||
value_new[value == 127] = 1
|
||||
value_new[value == 255] = 0
|
||||
|
||||
value_new.tofile(outputFileName)
|
||||
|
||||
|
||||
def segmentGrid8bitRedPhase(path):
|
||||
import os
|
||||
for inputFile in os.listdir(path):
|
||||
if os.path.isfile(inputFile) and inputFile.endswith('.raw') and inputFile.startswith('id_t'):
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
value_new = np.copy(value)
|
||||
|
||||
value_new[value == 0] = 0
|
||||
value_new[value == 1] = 255
|
||||
value_new[value >= 2] = 0
|
||||
|
||||
value_new.tofile('Red_'+inputFile)
|
||||
|
||||
def segmentGrid8bitRockPhase(inputFileName):
|
||||
inputFile=inputFileName
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
value_new = np.copy(value)
|
||||
|
||||
value_new[value == 0] = 255
|
||||
value_new[value == 1] = 0
|
||||
value_new[value >= 2] = 0
|
||||
|
||||
value_new.tofile('Rock_'+inputFile)
|
||||
|
||||
|
||||
|
||||
def unSegmentGrid8bit(inputFileName, outputFileName):
|
||||
inputFile=inputFileName
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
value_new = np.copy(value)
|
||||
|
||||
value_new[value == 0] = 0
|
||||
value_new[value == 1] = 127
|
||||
value_new[value == 2] = 255
|
||||
|
||||
value_new.tofile(outputFileName)
|
||||
|
||||
|
||||
|
||||
def segmentGrid32to8bit(inputFileName, outputFileName):
|
||||
## Something wrong with this...
|
||||
inputFile=inputFileName
|
||||
value=np.fromfile(inputFile,dtype=np.float32)
|
||||
value_new = np.copy(value)
|
||||
value_new.astype(np.uint8)
|
||||
|
||||
|
||||
value_new[value < -0.2] = 1
|
||||
value_new[value > -0.1, value < 0.1] = 0
|
||||
value_new[value > 0.1] = 2
|
||||
|
||||
value_new.tofile(outputFileName)
|
||||
|
||||
def addVoidLayers(inputFileName, outputFileName, nx, ny, nz, layers):
|
||||
inputFile=open(inputFileName, 'r')
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
inputFile.close()
|
||||
value_3D = np.reshape(value, (nz,ny,nx))
|
||||
value_3D = np.pad(value_3D, ((0,0), (0,0), (layers,layers)),
|
||||
'constant', constant_values=((1,1)))
|
||||
|
||||
value_3D = np.pad(value_3D, ((1,1), (1,1), (0,0)),
|
||||
'constant', constant_values=((0,0)))
|
||||
|
||||
value_3D.tofile(outputFileName)
|
||||
|
||||
|
||||
def crop(inputFileName, outputFileName, nx, ny, nz, x1, x2, y1, y2, z1, z2):
|
||||
inputFile=open(inputFileName, 'r')
|
||||
value=np.fromfile(inputFile,dtype=np.uint8)
|
||||
inputFile.close()
|
||||
value_3D = np.reshape(value, (nz,ny,nx))
|
||||
value_3D_crop = value_3D[z1-1:z2, y1-1:y2, x1-1:x2]
|
||||
value_3D_crop.tofile(outputFileName)
|
||||
|
||||
|
||||
def circleTube(outputFileName,nx,ny,nz):
|
||||
|
||||
tube_3D_new = np.zeros((nz, ny, nx), dtype=np.uint8)
|
||||
centerZ = nz/2
|
||||
centerY = ny/2
|
||||
radius = ny/2
|
||||
|
||||
|
||||
# outer loop to handle number of rows
|
||||
for i in range(0, nx):
|
||||
|
||||
# inner loop to handle number spaces
|
||||
# values changing acc. to requirement
|
||||
for j in range(0, ny):
|
||||
for k in range(0, nz):
|
||||
if (((j-centerY)**2 + (k-centerZ)**2) < radius**2):
|
||||
tube_3D_new[k,j,i] = tube_3D_new[k,j,i] + 1
|
||||
|
||||
tube_3D_new.tofile(outputFileName)
|
||||
|
||||
def squareTube(outputFileName,nx,ny,nz):
|
||||
|
||||
tube_3D_new = np.zeros((nz, ny, nx), dtype=np.uint8) + 1
|
||||
tube_3D_new = np.pad(tube_3D_new, ((1,1), (1,1), (0,0)),
|
||||
'constant', constant_values=((0,0)))
|
||||
|
||||
|
||||
tube_3D_new.tofile(outputFileName)
|
||||
|
||||
def makeVtk(headerVTK, path) :
|
||||
import os
|
||||
for f in os.listdir(path):
|
||||
if os.path.isfile(f) and f.endswith('.raw') and f.startswith('Red_id_t'):
|
||||
infile = open(f, 'rb')
|
||||
header = open(headerVTK, 'r')
|
||||
outFileName = f.split('.')[0]+'.vtk'
|
||||
outFile = open( outFileName, 'w')
|
||||
outFile.write(header.read())
|
||||
outFile.write(infile.read())
|
||||
outFile.close()
|
||||
infile.close()
|
||||
header.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Driver Code
|
||||
#segmentGrid8bitRedPhase('path')
|
||||
#segmentGrid8bitRockPhase('id_t100008.raw')
|
||||
|
||||
|
||||
#makeVtk('headerVTK.txt', 'path')
|
||||
|
||||
#circleTube('Tube.raw',100,101,101)
|
||||
|
||||
#squareTube('SquareTube.raw',100,100,100)
|
||||
|
||||
#crop('BentheimerSegmWW8bit2.raw', 'Outout2.raw', 1432, 461, 457, 100, 699, 5, 404, 5, 404)
|
||||
#addVoidLayers('Outout2.raw', 'BentheimerSegmWW8bit2CropCoated600x400x400.raw', 600, 400, 400, 0)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user