Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
ffca50979e
commit
ffabb56884
89
src/SimNDT/core/inspectionSetup.py
Normal file
89
src/SimNDT/core/inspectionSetup.py
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# encoding: utf-8
|
||||||
|
"""
|
||||||
|
inspection.py
|
||||||
|
|
||||||
|
Created by Miguel Molero on 2013-09-26.
|
||||||
|
Copyright (c) 2013 MMolero. All rights reserved.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def setEmisor(Theta, Size, x2, y2, X0, Y0):
|
||||||
|
Ntheta = np.size(Theta, 0)
|
||||||
|
NXL = int(2.0 * Size)
|
||||||
|
|
||||||
|
xL = np.zeros((NXL,), dtype=np.float32)
|
||||||
|
yL = np.zeros((NXL,), dtype=np.float32)
|
||||||
|
|
||||||
|
for m in range(0, Ntheta):
|
||||||
|
|
||||||
|
if np.abs(np.cos(Theta[m])) < 1e-5:
|
||||||
|
yL = np.arange(y2[m] - Size, y2[m] + Size)
|
||||||
|
xL[:] = x2[m] * np.ones((NXL,), dtype=np.float32)
|
||||||
|
|
||||||
|
elif np.abs(np.cos(Theta[m])) == 1:
|
||||||
|
xL[:] = np.arange(x2[m] - Size, x2[m] + Size)
|
||||||
|
yL[:] = y2[m] - ((x2[m] - X0) / (y2[m] - Y0)) * (xL[:] - x2[m])
|
||||||
|
|
||||||
|
else:
|
||||||
|
xL[:] = np.linspace(x2[m] - (Size * np.abs(np.cos(Theta[m]))), x2[m] + (Size * np.abs(np.cos(Theta[m]))),
|
||||||
|
num=NXL, endpoint=True)
|
||||||
|
yL = y2[m] - ((x2[m] - X0) / (y2[m] - Y0)) * (xL[0:NXL] - x2[m])
|
||||||
|
|
||||||
|
if m == 0:
|
||||||
|
XL = np.zeros((np.size(xL, 0), Ntheta), dtype=np.float32)
|
||||||
|
YL = np.zeros((np.size(xL, 0), Ntheta), dtype=np.float32)
|
||||||
|
|
||||||
|
XL[:, m] = np.int32((xL[0:np.size(xL, 0)]))
|
||||||
|
YL[:, m] = np.int32((yL[0:np.size(xL, 0)]))
|
||||||
|
|
||||||
|
return XL, YL
|
||||||
|
|
||||||
|
|
||||||
|
def centerOffset(XL, YL, Theta, Scenario, transducer, Ratio):
|
||||||
|
Ntheta = np.size(Theta, 0)
|
||||||
|
if transducer.Location == "Top":
|
||||||
|
YL += np.int32(transducer.CenterOffset * Scenario.Pixel_mm * Ratio)
|
||||||
|
elif transducer.Location == "Left":
|
||||||
|
XL += np.int32(transducer.CenterOffset * Scenario.Pixel_mm * Ratio)
|
||||||
|
|
||||||
|
IR = np.zeros((Ntheta, Ntheta), dtype=np.float32)
|
||||||
|
B = range(0, Ntheta)
|
||||||
|
IR[:, 0] = np.int32(B[:])
|
||||||
|
|
||||||
|
for i in range(1, Ntheta):
|
||||||
|
B = np.roll(B, -1)
|
||||||
|
IR[:, i] = np.int32(B)
|
||||||
|
|
||||||
|
return XL, YL, IR
|
||||||
|
|
||||||
|
|
||||||
|
def borderOffset(XL, YL, Scenario, transducer, Ratio):
|
||||||
|
if transducer.Location == "Top":
|
||||||
|
XL[:, 0] += (np.int32(transducer.BorderOffset * Scenario.Pixel_mm * Ratio))
|
||||||
|
XL[:, 1] -= (np.int32(transducer.BorderOffset * Scenario.Pixel_mm * Ratio))
|
||||||
|
elif transducer.Location == "Left":
|
||||||
|
YL[:, 0] += (np.int32(transducer.BorderOffset * Scenario.Pixel_mm * Ratio))
|
||||||
|
YL[:, 1] -= (np.int32(transducer.BorderOffset * Scenario.Pixel_mm * Ratio))
|
||||||
|
|
||||||
|
return XL, YL
|
||||||
|
|
||||||
|
|
||||||
|
def flip(XL):
|
||||||
|
return np.fliplr(XL)
|
||||||
|
|
||||||
|
|
||||||
|
def getReceivers(XL, YL, IR, T, Field):
|
||||||
|
ReceptorX = (XL)
|
||||||
|
ReceptorY = (YL)
|
||||||
|
M, N = np.shape(ReceptorX)
|
||||||
|
temp = np.zeros((M, N - 1), dtype=np.float32)
|
||||||
|
for mm in range(0, M):
|
||||||
|
for ir in range(0, N - 1):
|
||||||
|
temp[mm, ir] = T[int(ReceptorX[mm, int(IR[0, ir + 1])]), int(ReceptorY[mm, int(IR[0, ir + 1])])]
|
||||||
|
if Field:
|
||||||
|
return temp.transpose()
|
||||||
|
else:
|
||||||
|
return np.mean(temp, 0)
|
Loading…
Reference in New Issue
Block a user