wolfhece 2.1.17__py3-none-any.whl → 2.1.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
wolfhece/PyDraw.py CHANGED
@@ -882,7 +882,12 @@ class WolfMapViewer(wx.Frame):
882
882
 
883
883
 
884
884
  def get_canvas_bounds(self, gridsize:float = None):
885
- """ Retourne les limites de la zone d'affichage """
885
+ """
886
+ Retourne les limites de la zone d'affichage
887
+
888
+ :return: [xmin, ymin, xmax, ymax]
889
+
890
+ """
886
891
 
887
892
  if gridsize is None:
888
893
 
@@ -1261,7 +1266,7 @@ class WolfMapViewer(wx.Frame):
1261
1266
 
1262
1267
  outdir = dlg.GetPath()
1263
1268
 
1264
- names = ['danger_h.tif', 'danger_u.tif', 'danger_q.tif']
1269
+ names = ['danger_h.tif', 'danger_u.tif', 'danger_q.tif', 'danger_Z.tif']
1265
1270
  for name, danger_map in zip(names, danger_maps):
1266
1271
  danger_map.write_all(Path(outdir) / name)
1267
1272
 
@@ -2772,13 +2777,26 @@ class WolfMapViewer(wx.Frame):
2772
2777
  '2015': 'ORTHO_2015', '2016': 'ORTHO_2016', '2017': 'ORTHO_2017',
2773
2778
  '2018': 'ORTHO_2018', '2019': 'ORTHO_2019', '2020': 'ORTHO_2020',
2774
2779
  '2021': 'ORTHO_2021', '2022 printemps': 'ORTHO_2022_PRINTEMPS', '2022 été': 'ORTHO_2022_ETE',
2775
- '2023 été': 'ORTHO_2023_ETE'}}
2780
+ '2023 été': 'ORTHO_2023_ETE',
2781
+ }}
2782
+ data_2021 = {'EAU': {'IDW': 'ZONES_INONDEES_IDW',
2783
+ 'Emprise': 'ZONES_INONDEES',
2784
+ 'Emprise wo Alea': 'ZONES_INONDEES_wo_alea'}}
2785
+
2776
2786
  for idx, (k, item) in enumerate(orthos.items()):
2777
2787
  for kdx, (m, subitem) in enumerate(item.items()):
2778
2788
  self.add_object(which='wmsback',
2779
2789
  newobj=imagetexture('PPNC', m, k, subitem,
2780
2790
  self, xmin, xmax, ymin, ymax, -99999, 1024),
2781
2791
  ToCheck=False, id='PPNC ' + m)
2792
+
2793
+ for idx, (k, item) in enumerate(data_2021.items()):
2794
+ for kdx, (m, subitem) in enumerate(item.items()):
2795
+ self.add_object(which='wmsback',
2796
+ newobj=imagetexture('PPNC', m, k, subitem,
2797
+ self, xmin, xmax, ymin, ymax, -99999, 1024),
2798
+ ToCheck=False, id='Data 2021 ' + m)
2799
+
2782
2800
  self.add_object(which='wmsback',
2783
2801
  newobj=imagetexture('PPNC', 'Orthos France', 'OI.OrthoimageCoverage.HR', '',
2784
2802
  self, xmin, xmax, ymin, ymax, -99999, 1024, France=True, epsg='EPSG:27563'),
@@ -5594,7 +5612,7 @@ class WolfMapViewer(wx.Frame):
5594
5612
  Add object to current Frame/Drawing area
5595
5613
  """
5596
5614
 
5597
- filterArray = "bin (*.bin)|*.bin|Elevation WOLF2D (*.top)|*.top|Geotif (*.tif)|*.tif|Float ESRI (*.flt)|*.flt|Numpy (*.npy)|*.npy|Numpy named arrays(*.npz)|*.npz|all (*.*)|*.*"
5615
+ filterArray = "All supported formats|*.bin;*.tif;*.tiff;*.top;*.flt;*.npy;*.npz|bin (*.bin)|*.bin|Elevation WOLF2D (*.top)|*.top|Geotif (*.tif)|*.tif|Float ESRI (*.flt)|*.flt|Numpy (*.npy)|*.npy|Numpy named arrays(*.npz)|*.npz|all (*.*)|*.*"
5598
5616
  filterjson = "json (*.json)|*.json|all (*.*)|*.*"
5599
5617
  filterall = "all (*.*)|*.*"
5600
5618
  filterres2d = "all (*.*)|*.*"
@@ -5662,6 +5680,7 @@ class WolfMapViewer(wx.Frame):
5662
5680
 
5663
5681
  curtree = None
5664
5682
  if which.lower() == 'array' or which.lower() == 'array_crop':
5683
+
5665
5684
  curdict = self.myarrays
5666
5685
  curtree = self.myitemsarray
5667
5686
 
@@ -5860,7 +5879,7 @@ class WolfMapViewer(wx.Frame):
5860
5879
 
5861
5880
  with wx.lib.busy.BusyInfo(_('Importing files')):
5862
5881
  wait = wx.BusyCursor()
5863
- newobj = Tiles(filename, parent=self, linked_data_dir=dirname)
5882
+ newobj = Tiles(filename, parent=self, linked_data_dir=dirname, mapviewer=self)
5864
5883
  del wait
5865
5884
 
5866
5885
  if which.lower() == 'tilescomp':
@@ -5947,6 +5966,7 @@ class WolfMapViewer(wx.Frame):
5947
5966
  self._set_active_bc()
5948
5967
 
5949
5968
  elif which.lower() == 'array_lidar_first' or which.lower() == 'array_lidar_second':
5969
+
5950
5970
  curdict = self.myarrays
5951
5971
  curtree = self.myitemsarray
5952
5972
 
@@ -6001,6 +6021,7 @@ class WolfMapViewer(wx.Frame):
6001
6021
  id = 'lidar2002_secondecho'
6002
6022
 
6003
6023
  elif which.lower() == 'res2d':
6024
+
6004
6025
  curdict = self.myres2D
6005
6026
  curtree = self.myitemsres2d
6006
6027
 
@@ -6016,6 +6037,7 @@ class WolfMapViewer(wx.Frame):
6016
6037
  self.active_res2d = newobj
6017
6038
 
6018
6039
  elif which.lower() == 'res2d_gpu':
6040
+
6019
6041
  curdict = self.myres2D
6020
6042
  curtree = self.myitemsres2d
6021
6043
 
@@ -6042,6 +6064,7 @@ class WolfMapViewer(wx.Frame):
6042
6064
  self.myvectors.append(newobj)
6043
6065
 
6044
6066
  elif which.lower() == 'cross_sections':
6067
+
6045
6068
  curdict = self.myvectors
6046
6069
  curtree = self.myitemsvector
6047
6070
 
@@ -6107,7 +6130,7 @@ class WolfMapViewer(wx.Frame):
6107
6130
 
6108
6131
  with wx.lib.busy.BusyInfo(_('Importing cloud points')):
6109
6132
  wait = wx.BusyCursor()
6110
- newobj = cloud_vertices(filename, header=loadhead)
6133
+ newobj = cloud_vertices(filename, header=loadhead, mapviewer=self)
6111
6134
  del wait
6112
6135
 
6113
6136
  self.myclouds.append(newobj)
@@ -6116,12 +6139,13 @@ class WolfMapViewer(wx.Frame):
6116
6139
  self.create_cloud_menu()
6117
6140
 
6118
6141
  elif which.lower() == 'triangulation':
6142
+
6119
6143
  curdict = self.mytri
6120
6144
  curtree = self.myitemstri
6121
6145
  if newobj is None:
6122
6146
  with wx.lib.busy.BusyInfo(_('Importing triangulation')):
6123
6147
  wait = wx.BusyCursor()
6124
- newobj = Triangulation(filename,mapviewer=self)
6148
+ newobj = Triangulation(filename, mapviewer=self)
6125
6149
  del wait
6126
6150
 
6127
6151
  self.mytri.append(newobj)
@@ -6134,8 +6158,11 @@ class WolfMapViewer(wx.Frame):
6134
6158
  curtree = self.myitemsothers
6135
6159
  self.myothers.append(newobj)
6136
6160
  newobj.mapviewer = self
6161
+ else:
6162
+ logging.warning('No object to add in "Other" category -- Please provide an object to add or check your code')
6137
6163
 
6138
6164
  elif which.lower() == 'views':
6165
+
6139
6166
  if newobj is None:
6140
6167
  newobj = WolfViews(plotted=ToCheck, mapviewer=self)
6141
6168
  newobj.read_from_file(filename)
@@ -6145,22 +6172,29 @@ class WolfMapViewer(wx.Frame):
6145
6172
  self.myviews.append(newobj)
6146
6173
 
6147
6174
  elif which.lower() == 'wmsback':
6175
+
6148
6176
  if not newobj is None:
6149
6177
  curdict = self.mywmsback
6150
6178
  curtree = self.myitemswmsback
6151
6179
  self.mywmsback.append(newobj)
6180
+ else:
6181
+ logging.warning('No object to add in "WMS background" category -- Please provide an object to add or check your code')
6152
6182
 
6153
6183
  elif which.lower() == 'wmsfore':
6184
+
6154
6185
  if not newobj is None:
6155
6186
  curdict = self.mywmsfore
6156
6187
  curtree = self.myitemswmsfore
6157
6188
  self.mywmsfore.append(newobj)
6189
+ else:
6190
+ logging.warning('No object to add in "WMS foreground" category -- Please provide an object to add or check your code')
6158
6191
 
6159
6192
  elif which.lower() == 'particlesystem':
6193
+
6160
6194
  curdict = self.mypartsystems
6161
6195
  curtree = self.myitemsps
6162
6196
  if newobj is None:
6163
- newobj = Particle_system()
6197
+ newobj = Particle_system(mapviewer=self)
6164
6198
  newobj.load(filename)
6165
6199
 
6166
6200
  self.mypartsystems.append(newobj)
@@ -6546,6 +6580,7 @@ class WolfMapViewer(wx.Frame):
6546
6580
  elif text == _('Down'):
6547
6581
  self.downobj()
6548
6582
  elif text == _('Rename'):
6583
+
6549
6584
  #Modification du nom de l'objet sélectionné
6550
6585
  if self.selected_object is not None:
6551
6586
  #récupération de l'id courant
@@ -7341,8 +7376,9 @@ class WolfMapViewer(wx.Frame):
7341
7376
 
7342
7377
  #Print info in the status bar
7343
7378
  txt = 'Dx : {:4f} ; Dy : {:4f}'.format(self.active_array.dx, self.active_array.dy)
7344
- txt += ' ; Xmin : {:4f} ; Ymin : {:4f}'.format(self.active_array.xmin, self.active_array.ymin)
7345
- txt += ' ; Xmax : {:4f} ; Ymax : {:4f}'.format(self.active_array.xmax, self.active_array.ymax)
7379
+ txt += ' ; Xmin : {:4f} ; Ymin : {:4f}'.format(self.active_array.origx, self.active_array.origy)
7380
+ txt += ' ; Xmax : {:4f} ; Ymax : {:4f}'.format(self.active_array.origx + self.active_array.dx * float(self.active_array.nbx),
7381
+ self.active_array.origy + self.active_array.dy * float(self.active_array.nby))
7346
7382
  txt += ' ; Nx : {:d} ; Ny : {:d}'.format(self.active_array.nbx, self.active_array.nby)
7347
7383
 
7348
7384
  if self.active_array.nb_blocks > 0:
wolfhece/PyWMS.py CHANGED
@@ -12,7 +12,7 @@ from .PyTranslate import _
12
12
  def to_image(mybytes:BytesIO) -> Image:
13
13
  return Image.open(mybytes)
14
14
 
15
- def getWalonmap(cat:Literal['IMAGERIE/ORTHO_2021', 'ALEA', 'CADMAP', 'LIDAXES', '$IDW', 'ZONES_INONDEES'],
15
+ def getWalonmap(cat:Literal['IMAGERIE/ORTHO_2021', 'ALEA', 'CADMAP', 'LIDAXES', '$IDW', 'EAU/ZONES_INONDEES'],
16
16
  xl:float,
17
17
  yl:float,
18
18
  xr:float,
@@ -23,6 +23,8 @@ def getWalonmap(cat:Literal['IMAGERIE/ORTHO_2021', 'ALEA', 'CADMAP', 'LIDAXES',
23
23
 
24
24
  if cat.find('$')>0:
25
25
  catloc=cat[:cat.find('$')]
26
+ elif cat.find('_wo_alea')>0:
27
+ catloc=cat[:cat.find('_wo_alea')]
26
28
  else:
27
29
  catloc=cat
28
30
 
@@ -78,18 +80,17 @@ def getWalonmap(cat:Literal['IMAGERIE/ORTHO_2021', 'ALEA', 'CADMAP', 'LIDAXES',
78
80
  elif cat.find('LIDAXES')>0:
79
81
  curcont=['4,5,6,7,8,9,11,13']
80
82
  curstyles=['default,default,default,default,default,default,default,default']
81
- elif cat.find('$IDW')>0:
82
- curcont=[ul.quote('Zones inondées - Modélisation IDW')]
83
+ elif cat.find('IDW')>0:
84
+ curcont=['0']
83
85
  curstyles=['default']
84
86
  elif cat.find('ZONES_INONDEES')>0:
85
- layers=[
86
- ul.quote('Zones inondables'),
87
- ul.quote('Zones inondées - Satellites'),
88
- ul.quote('Zones indondées - Verviers'),
89
- ul.quote('Zones inondées - Enquêtes SPW'),
90
- ul.quote('Zones inondées - Digitalisations')]
91
- curcont=['{},{},{},{},{},{}'.format(layers[0],layers[1],layers[2],layers[3],layers[4])]
92
- curstyles=['default,default,default,default,default']
87
+
88
+ if 'wo_alea' in cat:
89
+ curcont = list(wms.contents)[1:]
90
+ curstyles=['default']*len(curcont)
91
+ else:
92
+ curcont = list(wms.contents)
93
+ curstyles=['default']*len(curcont)
93
94
 
94
95
  try:
95
96
  img=wms.getmap(layers=curcont,styles=curstyles,srs='EPSG:31370',bbox=(xl,yl,xr,yr),size=(w,h),format='image/png',transparent=True)
wolfhece/apps/version.py CHANGED
@@ -5,7 +5,7 @@ class WolfVersion():
5
5
 
6
6
  self.major = 2
7
7
  self.minor = 1
8
- self.patch = 17
8
+ self.patch = 19
9
9
 
10
10
  def __str__(self):
11
11
 
@@ -0,0 +1,9 @@
1
+ 2
2
+ 0.0
3
+ 255
4
+ 255
5
+ 255
6
+ 420.6319885253906
7
+ 0
8
+ 0
9
+ 0
wolfhece/wolf_array.py CHANGED
@@ -477,7 +477,7 @@ class header_wolf():
477
477
  logging.warning(_('get_xy_from_ij_array - ij is a tuple of 2 arrays, it is converted to a 2D array'))
478
478
  else:
479
479
  ij = np.array(ij)
480
-
480
+
481
481
  elif isinstance(ij,list):
482
482
  if len(ij) == 2:
483
483
  if (isinstance(ij[0],np.ndarray)) and (isinstance(ij[1],np.ndarray)):
@@ -486,7 +486,7 @@ class header_wolf():
486
486
  logging.warning(_('get_xy_from_ij_array - ij is a list of 2 arrays, it is converted to a 2D array'))
487
487
  else:
488
488
  ij = np.array(ij)
489
-
489
+
490
490
  if abs:
491
491
  tr_x = self.translx
492
492
  tr_y = self.transly
@@ -649,6 +649,49 @@ class header_wolf():
649
649
  filename = str(filename)
650
650
 
651
651
  if filename.endswith('.tif'):
652
+ from osgeo import gdal
653
+
654
+ raster:gdal.Dataset
655
+ raster = gdal.Open(filename)
656
+ geotr = raster.GetGeoTransform()
657
+ self.dx = geotr[1]
658
+ self.dy = abs(geotr[5])
659
+ self.origx = geotr[0]
660
+ self.origy = geotr[3]
661
+ self.nbx = raster.RasterXSize
662
+ self.nby = raster.RasterYSize
663
+
664
+ """
665
+ https://docs.qgis.org/3.34/en/docs/user_manual/processing_algs/gdal/rasterconversion.html
666
+
667
+ 0 — Use Input Layer Data Type
668
+ 1 — Byte (Eight bit unsigned integer (quint8))
669
+ 2 — Int16 (Sixteen bit signed integer (qint16))
670
+ 3 — UInt16 (Sixteen bit unsigned integer (quint16))
671
+ 4 — UInt32 (Thirty two bit unsigned integer (quint32))
672
+ 5 — Int32 (Thirty two bit signed integer (qint32))
673
+ 6 — Float32 (Thirty two bit floating point (float))
674
+ 7 — Float64 (Sixty four bit floating point (double))
675
+ 8 — CInt16 (Complex Int16)
676
+ 9 — CInt32 (Complex Int32)
677
+ 10 — CFloat32 (Complex Float32)
678
+ 11 — CFloat64 (Complex Float64)
679
+ 12 — Int8 (Eight bit signed integer (qint8))
680
+ """
681
+
682
+ dtype = raster.GetRasterBand(1).DataType
683
+
684
+ if dtype in [1, 4]:
685
+ self.wolftype = WOLF_ARRAY_FULL_INTEGER
686
+ elif dtype ==6:
687
+ self.wolftype = WOLF_ARRAY_FULL_SINGLE
688
+ elif dtype == 7:
689
+ self.wolftype = WOLF_ARRAY_FULL_DOUBLE
690
+ else:
691
+ logging.error(_('The datatype of the raster is not supported -- {}'.format(dtype)))
692
+ logging.error(_('Please convert the raster to a supported datatype - or upgrade the code to support this datatype'))
693
+ logging.error(_('See : read_txt_header and import_geotif in wolf_array.py'))
694
+ return
652
695
  return
653
696
 
654
697
  if filename.endswith('.flt'):
@@ -2162,7 +2205,7 @@ class Ops_Array(wx.Frame):
2162
2205
  self.myzones.showstructure()
2163
2206
  return
2164
2207
 
2165
- self.myzones.showstructure()
2208
+ self.myzones.showstructure()
2166
2209
 
2167
2210
  def OnLoadvec(self, event:wx.MouseEvent):
2168
2211
  """ Load vector file """
@@ -4666,9 +4709,76 @@ class WolfArray(Element_To_Draw, header_wolf):
4666
4709
 
4667
4710
  if crop is not None :
4668
4711
  if os.path.exists(fn):
4712
+
4713
+ tmpdx = self.dx
4714
+
4715
+ fn_crop = fn + '_crop.tif'
4716
+ if type(crop) is np.ndarray:
4717
+ pass
4718
+ elif type(crop) is list:
4719
+ pass
4720
+ else:
4721
+ if not self.wx_exists:
4722
+ logging.error(_('Crop must be a list or a numpy array with 4 values - xmin, xmax, ymin, ymax'))
4723
+ return
4724
+
4725
+ raster:gdal.Dataset
4726
+ raster = gdal.Open(fn)
4727
+ geotr = raster.GetGeoTransform()
4728
+ self.dx = geotr[1]
4729
+ self.dy = abs(geotr[5])
4730
+
4731
+
4732
+ newcrop = CropDialog(None)
4733
+
4734
+ if self.wx_exists:
4735
+ bounds = self.mapviewer.get_canvas_bounds()
4736
+
4737
+ newcrop.dx.Value = str(self.dx)
4738
+ newcrop.dy.Value = str(self.dy)
4739
+
4740
+ newcrop.dx.Enable(False)
4741
+ newcrop.dy.Enable(False)
4742
+
4743
+ newcrop.ox.Value = str(float((bounds[0] // 50.) * 50.))
4744
+ newcrop.ex.Value = str(float((bounds[2] // 50.) * 50.))
4745
+ newcrop.oy.Value = str(float((bounds[1] // 50.) * 50.))
4746
+ newcrop.ey.Value = str(float((bounds[3] // 50.) * 50.))
4747
+
4748
+ badvalues = True
4749
+ while badvalues:
4750
+ badvalues = False
4751
+
4752
+ ret = newcrop.ShowModal()
4753
+ if ret == wx.ID_CANCEL:
4754
+ newcrop.Destroy()
4755
+ return
4756
+ else:
4757
+ crop = [float(newcrop.ox.Value), float(newcrop.ex.Value),
4758
+ float(newcrop.oy.Value), float(newcrop.ey.Value)]
4759
+
4760
+ tmpdx = float(newcrop.dx.Value)
4761
+ tmpdy = float(newcrop.dy.Value)
4762
+
4763
+ if self.dx != tmpdx or self.dy != tmpdy:
4764
+ if tmpdx / self.dx != tmpdy / self.dy:
4765
+ badvalues = True
4766
+
4767
+ newcrop.Destroy()
4768
+
4669
4769
  xmin, xmax, ymin, ymax = crop
4670
- gdal.Translate(fn+'_crop.tif', fn, projWin=[xmin, ymax, xmax, ymin])
4671
- fn +='_crop.tif'
4770
+
4771
+ with wx.FileDialog(None, _('Save the cropped file for later'), wildcard="Tiff files (*.tif)|*.tif",
4772
+ style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:
4773
+
4774
+ if fileDialog.ShowModal() == wx.ID_CANCEL:
4775
+ return
4776
+
4777
+ fn_crop = fileDialog.GetPath()
4778
+
4779
+
4780
+ gdal.Translate(fn_crop, fn, projWin=[xmin, ymax, xmax, ymin])
4781
+ fn = fn_crop
4672
4782
 
4673
4783
  raster:gdal.Dataset
4674
4784
  raster = gdal.Open(fn)
@@ -6452,6 +6562,20 @@ class WolfArray(Element_To_Draw, header_wolf):
6452
6562
  else:
6453
6563
  newcrop = CropDialog(None)
6454
6564
 
6565
+ if self.mapviewer is not None:
6566
+ bounds = self.mapviewer.get_canvas_bounds()
6567
+
6568
+ newcrop.dx.Value = str(self.dx)
6569
+ newcrop.dy.Value = str(self.dy)
6570
+
6571
+ # newcrop.dx.Enable(False)
6572
+ # newcrop.dy.Enable(False)
6573
+
6574
+ newcrop.ox.Value = str(float((bounds[0] // 50.) * 50.))
6575
+ newcrop.ex.Value = str(float((bounds[2] // 50.) * 50.))
6576
+ newcrop.oy.Value = str(float((bounds[1] // 50.) * 50.))
6577
+ newcrop.ey.Value = str(float((bounds[3] // 50.) * 50.))
6578
+
6455
6579
  badvalues = True
6456
6580
  while badvalues:
6457
6581
  badvalues = False
@@ -3098,6 +3098,17 @@ class Wolfresults_2D(Element_To_Draw):
3098
3098
  else:
3099
3099
  return self.myblocks[getkeyblock(block,False)].waterdepth
3100
3100
 
3101
+ def get_top_for_block(self, block: Union[int, str]) -> WolfArray:
3102
+ """
3103
+ Retourne la matrice de topographie pour un bloc spécifique
3104
+
3105
+ block : numéro du bloc; 1-based;
3106
+ """
3107
+ if isinstance(block,str):
3108
+ return self.myblocks[block].top
3109
+ else:
3110
+ return self.myblocks[getkeyblock(block,False)].top
3111
+
3101
3112
  def get_qx_for_block(self, block: Union[int, str]) -> WolfArray:
3102
3113
  """
3103
3114
  Retourne la matrice de débit selon X pour un bloc spécifique
@@ -4116,7 +4127,7 @@ class Wolfresults_2D(Element_To_Draw):
4116
4127
  self.get_working_array()
4117
4128
  self.updatepalette(whichpal)
4118
4129
 
4119
- def danger_map(self, start:int=0, end:int=-1, every:int=1) -> Union[tuple[WolfArray, WolfArray, WolfArray], tuple[WolfArrayMB, WolfArrayMB, WolfArrayMB]]:
4130
+ def danger_map(self, start:int=0, end:int=-1, every:int=1) -> Union[tuple[WolfArray, WolfArray, WolfArray, WolfArray], tuple[WolfArrayMB, WolfArrayMB, WolfArrayMB, WolfArrayMB]]:
4120
4131
  """
4121
4132
  Create Danger Maps
4122
4133
 
@@ -4124,7 +4135,7 @@ class Wolfresults_2D(Element_To_Draw):
4124
4135
  :param end: end time step - 0-based
4125
4136
  :param every: step interval
4126
4137
 
4127
- :return : tuple of WolfArray or WolfArrayMB - H, U_norm, Q_norm
4138
+ :return : tuple of WolfArray or WolfArrayMB - H, U_norm, Q_norm, Z
4128
4139
  """
4129
4140
 
4130
4141
  # Number of time steps
@@ -4135,11 +4146,12 @@ class Wolfresults_2D(Element_To_Draw):
4135
4146
  # Init Danger Maps basde on results type
4136
4147
  # If only one block --> WolfArray
4137
4148
  # If only multiple blocks --> WolfArrayMB
4138
- danger_map_matrix_h = self.as_WolfArray(copyarray=True)
4139
- danger_map_matrix_v = self.as_WolfArray(copyarray=True)
4149
+ danger_map_matrix_h = self.as_WolfArray(copyarray=True)
4150
+ danger_map_matrix_v = self.as_WolfArray(copyarray=True)
4140
4151
  danger_map_matrix_mom = self.as_WolfArray(copyarray=True)
4152
+ danger_map_matrix_z = self.as_WolfArray(copyarray=True)
4141
4153
 
4142
- danger = [danger_map_matrix_h, danger_map_matrix_v, danger_map_matrix_mom]
4154
+ danger = [danger_map_matrix_h, danger_map_matrix_v, danger_map_matrix_mom, danger_map_matrix_z]
4143
4155
 
4144
4156
  for curdanger in danger:
4145
4157
  curdanger.nullvalue = 0.
@@ -4157,17 +4169,21 @@ class Wolfresults_2D(Element_To_Draw):
4157
4169
  wd = self.get_h_for_block(curblock)
4158
4170
  qx = self.get_qx_for_block(curblock)
4159
4171
  qy = self.get_qy_for_block(curblock)
4172
+ top = self.get_top_for_block(curblock)
4160
4173
 
4161
4174
  ij = np.where(~wd.array.mask)
4162
4175
 
4163
4176
  #
4164
4177
  mom = np.zeros_like(wd.array)
4165
4178
  v = np.zeros_like(wd.array)
4179
+ z = np.zeros_like(wd.array)
4180
+
4166
4181
  mom[ij] = (qx.array[ij]**2.+qy.array[ij]**2.)**.5
4167
4182
  v[ij] = mom[ij]/wd.array[ij]
4183
+ z[ij] = wd.array[ij] + top.array[ij]
4168
4184
 
4169
4185
  # Comparison
4170
- for curdanger, curcomp in zip(danger, [wd.array, v, mom]):
4186
+ for curdanger, curcomp in zip(danger, [wd.array, v, mom, z]):
4171
4187
  ij = np.where((curdanger.array < curcomp) & (~wd.array.mask))
4172
4188
  curdanger.array.data[ij] = curcomp[ij]
4173
4189
  curdanger.array.mask[ij] = False
@@ -4177,17 +4193,21 @@ class Wolfresults_2D(Element_To_Draw):
4177
4193
  wd = self.get_h_for_block(curblock)
4178
4194
  qx = self.get_qx_for_block(curblock)
4179
4195
  qy = self.get_qy_for_block(curblock)
4196
+ top = self.get_top_for_block(curblock)
4180
4197
 
4181
4198
  ij = np.where(~wd.array.mask)
4182
4199
 
4183
4200
  #
4184
4201
  mom = np.zeros_like(wd.array)
4185
4202
  v = np.zeros_like(wd.array)
4203
+ z = np.zeros_like(wd.array)
4204
+
4186
4205
  mom[ij] = (qx.array[ij]**2.+qy.array[ij]**2.)**.5
4187
4206
  v[ij] = mom[ij]/wd.array[ij]
4207
+ z[ij] = wd.array[ij] + top.array[ij]
4188
4208
 
4189
4209
  # Comparison
4190
- for curdanger, curcomp in zip(danger, [wd.array, v, mom]):
4210
+ for curdanger, curcomp in zip(danger, [wd.array, v, mom, z]):
4191
4211
  ij = np.where((curdanger.array < curcomp) & (~wd.array.mask))
4192
4212
  curdanger.array.data[ij] = curcomp[ij]
4193
4213
  curdanger.array.mask[ij] = False
@@ -4196,14 +4216,15 @@ class Wolfresults_2D(Element_To_Draw):
4196
4216
 
4197
4217
  if self.nb_blocks>1:
4198
4218
  for i in range(self.nb_blocks):
4199
- danger_map_matrix_v[i].array.mask[:,:] = danger_map_matrix_h[i].array.mask[:,:]
4219
+ danger_map_matrix_v[i].array.mask[:,:] = danger_map_matrix_h[i].array.mask[:,:]
4200
4220
  danger_map_matrix_mom[i].array.mask[:,:] = danger_map_matrix_h[i].array.mask[:,:]
4221
+ danger_map_matrix_z[i].array.mask[:,:] = danger_map_matrix_h[i].array.mask[:,:]
4201
4222
  else:
4202
- danger_map_matrix_v.array.mask[:,:] = danger_map_matrix_h.array.mask[:,:]
4223
+ danger_map_matrix_v.array.mask[:,:] = danger_map_matrix_h.array.mask[:,:]
4203
4224
  danger_map_matrix_mom.array.mask[:,:] = danger_map_matrix_h.array.mask[:,:]
4225
+ danger_map_matrix_z.array.mask[:,:] = danger_map_matrix_h.array.mask[:,:]
4204
4226
 
4205
-
4206
- return (danger_map_matrix_h, danger_map_matrix_v, danger_map_matrix_mom)
4227
+ return (danger_map_matrix_h, danger_map_matrix_v, danger_map_matrix_mom, danger_map_matrix_z)
4207
4228
 
4208
4229
  def danger_map_only_h(self, start:int=0, end:int=-1, every:int=1) -> WolfArray:
4209
4230
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.17
3
+ Version: 2.1.19
4
4
  Author-email: Pierre Archambeau <pierre.archambeau@uliege.be>
5
5
  License: AGPL-v3 License
6
6
  Project-URL: Homepage, https://uee.uliege.be/hece
@@ -6,7 +6,7 @@ wolfhece/ManageParams.py,sha256=Wgt5Zh7QBtyiwTAltPHunSLqt4XuVuRH76GTUrXabS4,219
6
6
  wolfhece/Model1D.py,sha256=-cMz-ePSYzrKVVDidiDOz6cojEZ3y6u9gIb7RPwT6Y8,476593
7
7
  wolfhece/PyConfig.py,sha256=oGSL1WsLM9uinlNP4zGBLK3uHPmBfduUi7R-VtWuRFA,8034
8
8
  wolfhece/PyCrosssections.py,sha256=f4dNYRUGZKePruaaBiTcn5vlrw8TFTj9XwTDrdiF_uU,112450
9
- wolfhece/PyDraw.py,sha256=ayK8YWZGOj79auURpkHaDCUreOlaAtMVq2ZpuzL3s_Q,383008
9
+ wolfhece/PyDraw.py,sha256=YlgDQm0xiJP0uWLCpLVFhjH9YPl3O7JyO-2tLYlqxqw,384535
10
10
  wolfhece/PyGui.py,sha256=fqy8f3tLt7myJskVvspTQ_ZO7kaiSNKmcfFLrfr4w7M,103174
11
11
  wolfhece/PyGuiHydrology.py,sha256=r8kcY2eGAQzSwVtLpyMUiBL5xBpMBsi7ovs0PgStGWw,14648
12
12
  wolfhece/PyHydrographs.py,sha256=GKK8U0byI45H9O_e4LAOOi7Aw0Tg7Q0Lx322stPg5IQ,3453
@@ -16,7 +16,7 @@ wolfhece/PyPictures.py,sha256=-mJB0JL2YYiEK3D7_ssDkvYiMWK4ve9kXhozQXNeSx8,2216
16
16
  wolfhece/PyTranslate.py,sha256=4appkmNeHHZLFmUtaA_k5_5QL-5ymxnbVN4R2OblmtE,622
17
17
  wolfhece/PyVertex.py,sha256=dHTjyYYTn0F_NWerlAOBKHV79RUzEEtMJMldQtVc1Cs,40092
18
18
  wolfhece/PyVertexvectors.py,sha256=4K0T74MUH-ycX79hFa2618vKVTu9qOSh49hlbKrydMg,224123
19
- wolfhece/PyWMS.py,sha256=t6jVZpTxTNSLJxABk8A79cEMWTKoRM_S_SXRipsHLzw,4493
19
+ wolfhece/PyWMS.py,sha256=pV7JdzbreQGXCg3E6PwllchEUYu2YiPZEIua2ppJorA,4304
20
20
  wolfhece/RatingCurve.py,sha256=f6IGLS5aJBJD_t_k903m_yRZ60MzKNKanzD6njXZxa8,22200
21
21
  wolfhece/RatingCurveData.py,sha256=5UvnIm89BwqjnEbLCcY3CA8WoFd_xHJbooNy62fX5iY,57660
22
22
  wolfhece/RatingCurve_xml.py,sha256=vbLxSWwHPsCAsR13KaG5WVmVn_cha7-6cF4zj7Diiz8,33593
@@ -48,13 +48,13 @@ wolfhece/rain_SPWMI.py,sha256=YqsF-yFro3y_a6MfVRFfr-Rxi7NR1gl_i8VX7scmzes,13548
48
48
  wolfhece/test_Results2DGPU.py,sha256=NOJ_hFXrcLSQXS1dtsqXRQltqIZtDSHMz_EgAJ2_FHU,307
49
49
  wolfhece/textpillow.py,sha256=zEfLrKhfCDyMaVuQOUjHqz6MGKeQ4aewMxOsWi5-wKI,13832
50
50
  wolfhece/tools_mpl.py,sha256=q8Yc4aukPPiUcEzREvZRM_em67XqXaahdoaNt0DETfE,266
51
- wolfhece/wolf_array.py,sha256=tYzkVd4Zrvr6FotO571IfW6Kkvx9Kli9QnzbiXVwZEo,337760
51
+ wolfhece/wolf_array.py,sha256=8cYHIwul4VVkSXwGqPMLaEv8n3c5cC0Ozp5xdfupUsI,342928
52
52
  wolfhece/wolf_hist.py,sha256=JpRXvzJLUP-RkSkvth3DQWglgTMFI2ZEUDb4RYOfeeI,3284
53
53
  wolfhece/wolf_texture.py,sha256=llQ7aV8scWXIkhpri9XjaPejzoBJsGfsln2ZnlRbFkU,16270
54
54
  wolfhece/wolf_tiles.py,sha256=F2JsJHdAP8fIffNJdG_J26bonCIRtIwMmxKFqdSCRDA,10088
55
55
  wolfhece/wolf_vrt.py,sha256=un5CKzAUmzSsjLXK7YLnQEWz8FLoafXJs8oqUvS_-h0,10271
56
56
  wolfhece/wolf_zi_db.py,sha256=Ok0MxQYZMMLRJN1QY-HSplLhUzzb6gkXgBQ3ihhLQHk,12669
57
- wolfhece/wolfresults_2D.py,sha256=6CkXD_X4pOBFce0nFZjR6VjKzLKSYqqY4UhXKzzrKuM,164515
57
+ wolfhece/wolfresults_2D.py,sha256=U42Rz8fWQ6Zb2nvzPGvj6eHz_i_RNkmK056AuLDSYgs,165557
58
58
  wolfhece/xyz_file.py,sha256=aQOcTHkHRhXHxL_WxTHwzygp6e47San7SHSpxKQU0dw,5457
59
59
  wolfhece/apps/ManageParams.py,sha256=heg5L4fMn0ettR7Bad_Q680o_JWnTbe3WFkL_9IziAk,312
60
60
  wolfhece/apps/Optimisation_hydro.py,sha256=mHazBazTUGyxPbHPXhaQim8vqIeOOuKPjH0B48VWduA,374
@@ -66,7 +66,7 @@ wolfhece/apps/check_install.py,sha256=jrKR-njqnpIh6ZJqvP6KbDUPVCfwTNQj4glQhcyzs9
66
66
  wolfhece/apps/curvedigitizer.py,sha256=avWERHuVxPnJBOD_ibczwW_XG4vAenqWS8W1zjhBox8,4898
67
67
  wolfhece/apps/isocurrent.py,sha256=4XnNWPa8mYUK7V4zdDRFrHFIXNG2AN2og3TqWKKcqjY,3811
68
68
  wolfhece/apps/splashscreen.py,sha256=LkEVMK0eCc84NeCWD3CGja7fuQ_k1PrZdyqD3GQk_8c,2118
69
- wolfhece/apps/version.py,sha256=YX9tmGcv0oDZgHzLyJ-fs3F4ENyIBZMuarvn4elQtAo,388
69
+ wolfhece/apps/version.py,sha256=pxI-blXjVWz8Af7dvteh6caxvhN-mCRsq-_4uSmye8s,388
70
70
  wolfhece/apps/wolf.py,sha256=gqfm-ZaUJqNsfCzmdtemSeqLw-GVdSVix-evg5WArJI,293
71
71
  wolfhece/apps/wolf2D.py,sha256=gWD9ee2-1pw_nUxjgRaJMuSe4kUT-RWhOeoTt_Lh1mM,267
72
72
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -228,6 +228,7 @@ wolfhece/models/shields_cst.pal,sha256=zUGFI6HiL0bsHeOzcWNih3F9cxXKXLLZYA5rtqRbz
228
228
  wolfhece/models/walous_niv1.pal,sha256=mHMjCB-ja47mV3ZsvDOhS2CEK8YN6ewOkf1W7l7JQ8k,138
229
229
  wolfhece/models/walous_niv2.pal,sha256=B5wt5-O88dpaiA6yR4uriOy0tfDVU_cms0Xr6Dw9ZGg,377
230
230
  wolfhece/models/waterdepths.pal,sha256=8rcQfuZOeLKzYv5sARPkhpvZYc1OToj3ZukcbuRUgIY,136
231
+ wolfhece/models/white_black.pal,sha256=BKjVN1kuk1OtJB9S3uM5fxteWbggI3Pb8p9WdDptT4c,51
231
232
  wolfhece/opengl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
233
  wolfhece/opengl/gl_utils.py,sha256=-eH2WAWdLFr6mzEwN8XdfJfM8U2rgvRryCAqjH-zeys,66136
233
234
  wolfhece/opengl/py3d.py,sha256=Ws2VM8TNHR4Tx_Ud14c38FEco3LZWevH7UvtSUt6osw,66451
@@ -267,8 +268,8 @@ wolfhece/sounds/sonsw2.wav,sha256=pFLVt6By0_EPQNt_3KfEZ9a1uSuYTgQSX1I_Zurv9Rc,11
267
268
  wolfhece/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
269
  wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=yGbU_JsF56jsmms0gh7mxa7tbNQ_SxqhpAZxhm-mTy4,14860
269
270
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=wCxGRnE3kzEkWlWA6-3X8ADOFux_B0a5QWJ2GnXTgJw,4709
270
- wolfhece-2.1.17.dist-info/METADATA,sha256=jWnXOeve-xUr_A3ZHX9uCTDFNr8GVLlUTepoSZN0HD0,2282
271
- wolfhece-2.1.17.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
272
- wolfhece-2.1.17.dist-info/entry_points.txt,sha256=AIu1KMswrdsqNq_2jPtrRIU4tLjuTnj2dCY-pxIlshw,276
273
- wolfhece-2.1.17.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
274
- wolfhece-2.1.17.dist-info/RECORD,,
271
+ wolfhece-2.1.19.dist-info/METADATA,sha256=nBRFLNjydXPkETNSMpS4ccjkMxDi8kgcghfRBWX9Vmg,2282
272
+ wolfhece-2.1.19.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
273
+ wolfhece-2.1.19.dist-info/entry_points.txt,sha256=AIu1KMswrdsqNq_2jPtrRIU4tLjuTnj2dCY-pxIlshw,276
274
+ wolfhece-2.1.19.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
275
+ wolfhece-2.1.19.dist-info/RECORD,,