From a4dcb46c123f78ae779a7c1c88bf831f7f1005d0 Mon Sep 17 00:00:00 2001 From: nmannall Date: Wed, 17 Apr 2024 12:06:10 +0100 Subject: [PATCH] Fix file not found when not run from repo root --- toolboxes/GPRAntennaModels/GSSI.py | 160 +++++++++++++++++++++++------ 1 file changed, 128 insertions(+), 32 deletions(-) diff --git a/toolboxes/GPRAntennaModels/GSSI.py b/toolboxes/GPRAntennaModels/GSSI.py index d6d8a8ee..1bbaa5f2 100644 --- a/toolboxes/GPRAntennaModels/GSSI.py +++ b/toolboxes/GPRAntennaModels/GSSI.py @@ -6,6 +6,7 @@ # Please use the attribution at http://dx.doi.org/10.1190/1.3548506 import logging +from pathlib import Path import gprMax @@ -64,7 +65,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): patchheight = 0.016 tx = x + 0.114, y + 0.052, z + skidthickness else: - logger.exception("This antenna module can only be used with a spatial discretisation of 1mm or 2mm") + logger.exception( + "This antenna module can only be used with a spatial discretisation of 1mm or 2mm" + ) raise ValueError # If using parameters from an optimisation @@ -98,7 +101,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): sourceresistance = 230 # Correction for old (< 123) GprMax3D bug (optimised to 4) rxres = 925 # Resistance at Rx bowtie absorber1 = gprMax.Material(er=1.58, se=0.428, mr=1, sm=0, id="absorber1") - absorber2 = gprMax.Material(er=3, se=0, mr=1, sm=0, id="absorber2") # Foam modelled as PCB material + absorber2 = gprMax.Material( + er=3, se=0, mr=1, sm=0, id="absorber2" + ) # Foam modelled as PCB material pcb = gprMax.Material(er=3, se=0, mr=1, sm=0, id="pcb") hdpe = gprMax.Material(er=2.35, se=0, mr=1, sm=0, id="hdpe") rxres = gprMax.Material(er=3, se=(1 / rxres) * (dy / (dx * dz)), mr=1, sm=0, id="rxres") @@ -117,7 +122,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): tau=[1.00723e-11, 1.55686e-10, 3.44129e-10], material_ids=["absorber1"], ) - absorber2 = gprMax.Material(er=3, se=0, mr=1, sm=0, id="absorber2") # Foam modelled as PCB material + absorber2 = gprMax.Material( + er=3, se=0, mr=1, sm=0, id="absorber2" + ) # Foam modelled as PCB material pcb = gprMax.Material(er=3, se=0, mr=1, sm=0, id="pcb") hdpe = gprMax.Material(er=2.35, se=0, mr=1, sm=0, id="hdpe") rxres = gprMax.Material(er=3, se=(1 / rxres) * (dy / (dx * dz)), mr=1, sm=0, id="rxres") @@ -299,12 +306,20 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): scene_objects.extend((p9, p10)) # Edges that represent wire between bowtie halves in 1mm model - e1 = gprMax.Edge(p1=(tx[0] - 0.059, tx[1] - dy, tx[2]), p2=(tx[0] - 0.059, tx[1], tx[2]), material_id="pec") + e1 = gprMax.Edge( + p1=(tx[0] - 0.059, tx[1] - dy, tx[2]), + p2=(tx[0] - 0.059, tx[1], tx[2]), + material_id="pec", + ) e2 = gprMax.Edge( - p1=(tx[0] - 0.059, tx[1] + dy, tx[2]), p2=(tx[0] - 0.059, tx[1] + 0.002, tx[2]), material_id="pec" + p1=(tx[0] - 0.059, tx[1] + dy, tx[2]), + p2=(tx[0] - 0.059, tx[1] + 0.002, tx[2]), + material_id="pec", ) e3 = gprMax.Edge(p1=(tx[0], tx[1] - dy, tx[2]), p2=(tx[0], tx[1], tx[2]), material_id="pec") - e4 = gprMax.Edge(p1=(tx[0], tx[1] + dz, tx[2]), p2=(tx[0], tx[1] + 0.002, tx[2]), material_id="pec") + e4 = gprMax.Edge( + p1=(tx[0], tx[1] + dz, tx[2]), p2=(tx[0], tx[1] + 0.002, tx[2]), material_id="pec" + ) scene_objects.extend((e1, e2, e3, e4)) elif resolution == 0.002: @@ -359,7 +374,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): scene_objects.extend((p11, p12)) # Skid - b10 = gprMax.Box(p1=(x, y, z), p2=(x + casesize[0], y + casesize[1], z + skidthickness), material_id="hdpe") + b10 = gprMax.Box( + p1=(x, y, z), p2=(x + casesize[0], y + casesize[1], z + skidthickness), material_id="hdpe" + ) scene_objects.append(b10) # Geometry views @@ -384,17 +401,25 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): # Gaussian pulse w1 = gprMax.Waveform(wave_type="gaussian", amp=1, freq=excitationfreq, id="my_gaussian") vs1 = gprMax.VoltageSource( - polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_gaussian" + polarisation="y", + p1=(tx[0], tx[1], tx[2]), + resistance=sourceresistance, + waveform_id="my_gaussian", ) scene_objects.extend((w1, vs1)) elif optstate == "GiannakisPaper": # Optimised custom pulse exc1 = gprMax.ExcitationFile( - filepath="toolboxes/GPRAntennaModels/GSSI_1500MHz_pulse.txt", kind="linear", fill_value="extrapolate" + filepath=Path(__file__).with_name("GSSI_1500MHz_pulse.txt"), + kind="linear", + fill_value="extrapolate", ) vs1 = gprMax.VoltageSource( - polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_pulse" + polarisation="y", + p1=(tx[0], tx[1], tx[2]), + resistance=sourceresistance, + waveform_id="my_pulse", ) scene_objects.extend((exc1, vs1)) @@ -402,7 +427,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): if resolution == 0.001: if optstate == "WarrenThesis" or optstate == "DebyeAbsorber": e1 = gprMax.Edge( - p1=(tx[0] - 0.059, tx[1], tx[2]), p2=(tx[0] - 0.059, tx[1] + dy, tx[2]), material_id="rxres" + p1=(tx[0] - 0.059, tx[1], tx[2]), + p2=(tx[0] - 0.059, tx[1] + dy, tx[2]), + material_id="rxres", ) scene_objects.append(e1) r1 = gprMax.Rx(p1=(tx[0] - 0.059, tx[1], tx[2]), id="rxbowtie", outputs="Ey") @@ -411,7 +438,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs): elif resolution == 0.002: if optstate == "WarrenThesis" or optstate == "DebyeAbsorber": e1 = gprMax.Edge( - p1=(tx[0] - 0.060, tx[1], tx[2]), p2=(tx[0] - 0.060, tx[1] + dy, tx[2]), material_id="rxres" + p1=(tx[0] - 0.060, tx[1], tx[2]), + p2=(tx[0] - 0.060, tx[1] + dy, tx[2]), + material_id="rxres", ) scene_objects.append(e1) r1 = gprMax.Rx(p1=(tx[0] - 0.060, tx[1], tx[2]), id="rxbowtie", outputs="Ey") @@ -492,7 +521,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): dz = 0.002 foamsurroundthickness = 0.002 metalboxheight = 0.088 - tx = x + 0.01 + 0.004 + 0.056, y + casethickness + 0.005 + 0.143 - 0.002, z + skidthickness - 0.002 + tx = ( + x + 0.01 + 0.004 + 0.056, + y + casethickness + 0.005 + 0.143 - 0.002, + z + skidthickness - 0.002, + ) # Material definitions absorber = gprMax.Material(er=absorberEr, se=absorbersig, mr=1, sm=0, id="absorber") @@ -510,13 +543,21 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): ) b2 = gprMax.Box( p1=(x + casethickness, y + casethickness, z + skidthickness - 0.002), - p2=(x + casesize[0] - casethickness, y + casesize[1] - casethickness, z + casesize[2] - casethickness), + p2=( + x + casesize[0] - casethickness, + y + casesize[1] - casethickness, + z + casesize[2] - casethickness, + ), material_id="free_space", ) # Metallic enclosure b3 = gprMax.Box( - p1=(x + casethickness, y + casethickness, z + skidthickness + (metalmiddleplateheight - metalboxheight)), + p1=( + x + casethickness, + y + casethickness, + z + skidthickness + (metalmiddleplateheight - metalboxheight), + ), p2=( x + casesize[0] - casethickness, y + casesize[1] - casethickness, @@ -552,7 +593,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): # PCB b6 = gprMax.Box( - p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002), + p1=( + x + 0.01 + 0.005 + 0.017, + y + casethickness + 0.005 + 0.021, + z + skidthickness - 0.002, + ), p2=( x + 0.01 + 0.005 + 0.033 + bowtiebase, y + casethickness + 0.006 + 0.202 + patchheight, @@ -561,7 +606,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): material_id="pcb", ) b7 = gprMax.Box( - p1=(x + 0.01 + 0.005 + 0.179, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002), + p1=( + x + 0.01 + 0.005 + 0.179, + y + casethickness + 0.005 + 0.021, + z + skidthickness - 0.002, + ), p2=( x + 0.01 + 0.005 + 0.195 + bowtiebase, y + casethickness + 0.006 + 0.202 + patchheight, @@ -581,14 +630,22 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): ) b9 = gprMax.Box( p1=(x + casethickness, y + casethickness, z + skidthickness - 0.002), - p2=(x + casesize[0] - casethickness, y + casesize[1] - casethickness, z + casesize[2] - casethickness), + p2=( + x + casesize[0] - casethickness, + y + casesize[1] - casethickness, + z + casesize[2] - casethickness, + ), material_id="free_space", averaging="n", ) # Metallic enclosure b10 = gprMax.Box( - p1=(x + casethickness, y + casethickness, z + skidthickness + (metalmiddleplateheight - metalboxheight)), + p1=( + x + casethickness, + y + casethickness, + z + skidthickness + (metalmiddleplateheight - metalboxheight), + ), p2=( x + casesize[0] - casethickness, y + casesize[1] - casethickness, @@ -626,7 +683,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): # PCB b13 = gprMax.Box( - p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002), + p1=( + x + 0.01 + 0.005 + 0.017, + y + casethickness + 0.005 + 0.021, + z + skidthickness - 0.002, + ), p2=( x + 0.01 + 0.005 + 0.033 + bowtiebase, y + casethickness + 0.006 + 0.202 + patchheight, @@ -672,7 +733,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): # triangles t1 = gprMax.Triangle( p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002), - p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002), + p2=( + x + 0.01 + 0.005 + 0.025 + bowtiebase, + y + casethickness + 0.005 + 0.081, + z + skidthickness - 0.002, + ), p3=( x + 0.01 + 0.005 + 0.025 + (bowtiebase / 2), y + casethickness + 0.005 + 0.081 + bowtieheight, @@ -683,7 +748,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): ) t2 = gprMax.Triangle( p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002), - p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002), + p2=( + x + 0.01 + 0.005 + 0.025 + bowtiebase, + y + casethickness + 0.005 + 0.203, + z + skidthickness - 0.002, + ), p3=( x + 0.01 + 0.005 + 0.025 + (bowtiebase / 2), y + casethickness + 0.005 + 0.203 - bowtieheight, @@ -714,7 +783,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): # triangles t3 = gprMax.Triangle( p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002), - p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002), + p2=( + x + 0.01 + 0.005 + 0.187 + bowtiebase, + y + casethickness + 0.005 + 0.081, + z + skidthickness - 0.002, + ), p3=( x + 0.01 + 0.005 + 0.187 + (bowtiebase / 2), y + casethickness + 0.005 + 0.081 + bowtieheight, @@ -725,7 +798,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): ) t4 = gprMax.Triangle( p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002), - p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002), + p2=( + x + 0.01 + 0.005 + 0.187 + bowtiebase, + y + casethickness + 0.005 + 0.203, + z + skidthickness - 0.002, + ), p3=( x + 0.01 + 0.005 + 0.187 + (bowtiebase / 2), y + casethickness + 0.005 + 0.203 - bowtieheight, @@ -736,12 +813,18 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): ) # Edges that represent wire between bowtie halves in 2mm model - e1 = gprMax.Edge(p1=(tx[0] + 0.162, tx[1] - dy, tx[2]), p2=(tx[0] + 0.162, tx[1], tx[2]), material_id="pec") + e1 = gprMax.Edge( + p1=(tx[0] + 0.162, tx[1] - dy, tx[2]), p2=(tx[0] + 0.162, tx[1], tx[2]), material_id="pec" + ) e2 = gprMax.Edge( - p1=(tx[0] + 0.162, tx[1] + dy, tx[2]), p2=(tx[0] + 0.162, tx[1] + 2 * dy, tx[2]), material_id="pec" + p1=(tx[0] + 0.162, tx[1] + dy, tx[2]), + p2=(tx[0] + 0.162, tx[1] + 2 * dy, tx[2]), + material_id="pec", ) e3 = gprMax.Edge(p1=(tx[0], tx[1] - dy, tx[2]), p2=(tx[0], tx[1], tx[2]), material_id="pec") - e4 = gprMax.Edge(p1=(tx[0], tx[1] + dy, tx[2]), p2=(tx[0], tx[1] + 2 * dy, tx[2]), material_id="pec") + e4 = gprMax.Edge( + p1=(tx[0], tx[1] + dy, tx[2]), p2=(tx[0], tx[1] + 2 * dy, tx[2]), material_id="pec" + ) scene_objects.extend((p1, p2, t1, t2, p3, p4, t3, t4, e1, e2, e3, e4)) # Metallic plate extension @@ -758,7 +841,9 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): # Skid if smooth_dec == "yes": b16 = gprMax.Box( - p1=(x, y, z), p2=(x + casesize[0], y + casesize[1], z + skidthickness - 0.002), material_id="hdpe" + p1=(x, y, z), + p2=(x + casesize[0], y + casesize[1], z + skidthickness - 0.002), + material_id="hdpe", ) elif smooth_dec == "no": b16 = gprMax.Box( @@ -773,22 +858,33 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs): if src_type == "voltage_source": w1 = gprMax.Waveform(wave_type="gaussian", amp=1, freq=excitationfreq, id="my_gaussian") vs1 = gprMax.VoltageSource( - polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_gaussian" + polarisation="y", + p1=(tx[0], tx[1], tx[2]), + resistance=sourceresistance, + waveform_id="my_gaussian", ) scene_objects.extend((w1, vs1)) elif src_type == "transmission_line": w1 = gprMax.Waveform(wave_type="gaussian", amp=1, freq=excitationfreq, id="my_gaussian") tl1 = gprMax.TransmissionLine( - polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_gaussian" + polarisation="y", + p1=(tx[0], tx[1], tx[2]), + resistance=sourceresistance, + waveform_id="my_gaussian", ) scene_objects.extend((w1, tl1)) else: # Optimised custom pulse exc1 = gprMax.ExcitationFile( - filepath="toolboxes/GPRAntennaModels/GSSI_400MHz_pulse.txt", kind="linear", fill_value="extrapolate" + filepath=Path(__file__).with_name("GSSI_400MHz_pulse.txt"), + kind="linear", + fill_value="extrapolate", ) vs1 = gprMax.VoltageSource( - polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_pulse" + polarisation="y", + p1=(tx[0], tx[1], tx[2]), + resistance=sourceresistance, + waveform_id="my_pulse", ) scene_objects.extend((exc1, vs1))