From 26fe285d1509d35b5d5b4451e1e9d4a9d2404aea Mon Sep 17 00:00:00 2001 From: jchopard Date: Wed, 25 Jul 2018 16:11:56 +0200 Subject: [PATCH 1/5] pep8 --- src/alinea/pyratp/runratp.py | 108 +++++++++++++++++------------------ 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/src/alinea/pyratp/runratp.py b/src/alinea/pyratp/runratp.py index 2e0ac8a9..26638016 100644 --- a/src/alinea/pyratp/runratp.py +++ b/src/alinea/pyratp/runratp.py @@ -1,70 +1,71 @@ -# Header -# - -""" -""" - -from alinea.pyratp import pyratp -import numpy as np import os +import platform import shutil import tempfile + +import numpy as np + import grid -import platform +from alinea.pyratp import pyratp + class runRATP(object): """ """ + @staticmethod def DoAll(*args): ratp = pyratp.ratp pyratp.dir_interception.scattering = False - ratp.out_time_spatial = np.zeros(pyratp.micrometeo.nbli*pyratp.grid3d.nveg*22*pyratp.grid3d.nent).reshape(pyratp.micrometeo.nbli*pyratp.grid3d.nveg*pyratp.grid3d.nent,22) - ratp.out_time_tree = np.zeros(pyratp.micrometeo.nbli*8*pyratp.grid3d.nent).reshape(pyratp.micrometeo.nbli*pyratp.grid3d.nent ,8) + ratp.out_time_spatial = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, 22)) + ratp.out_time_tree = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nent, 8)) if platform.system() == 'Windows': path = 'c:/tmpRATP' if os.path.exists(os.path.normpath(path)): shutil.rmtree(os.path.normpath(path)) os.mkdir(path) - else : + else: path = tempfile.mkdtemp() - os.mkdir(path+"/Resul") - grid.gridToVGX(pyratp.grid3d,path+"/Resul/","VoxelsGrid.vgx") #Save grid in VGX format + os.mkdir(path + "/Resul") + grid.gridToVGX(pyratp.grid3d, path + "/Resul/", "VoxelsGrid.vgx") # Save grid in VGX format print "... grid written" ##print np.where(pyratp.vegetation_types.ismine==1) try: - numeroMin = (np.where(pyratp.vegetation_types.ismine==1))[0][0] + 1 - blMin=np.where(pyratp.grid3d.nume==numeroMin) - if len(blMin[0])>0: + numeroMin = (np.where(pyratp.vegetation_types.ismine == 1))[0][0] + 1 + blMin = np.where(pyratp.grid3d.nume == numeroMin) + if len(blMin[0]) > 0: pyratp.ratp.do_all_mine() else: pyratp.ratp.do_all() except: pyratp.ratp.do_all() - #print 'dz,', pyratp.grid3d.dz - fspatial = open(path+"/Resul"+'/spatial.txt','w') - fspatial.write('VegetationType ntime day hour AirTemperature VoxelId ShadedTemp SunlitTemp STARDirect STARSky ShadedPhoto SunlitPhoto ShadedTranspi SunlitTranspi') - fspatial.write(' ShadedArea SunlitArea ShadedGs SunlitGs ShadedAbsorbedPAR SunlitAbsorbedPAR ShadedAbsorbedNIR SunlitAbsorbedNIR') + # print 'dz,', pyratp.grid3d.dz + fspatial = open(path + "/Resul" + '/spatial.txt', 'w') + fspatial.write( + 'VegetationType ntime day hour AirTemperature VoxelId ShadedTemp SunlitTemp STARDirect STARSky ShadedPhoto SunlitPhoto ShadedTranspi SunlitTranspi') + fspatial.write( + ' ShadedArea SunlitArea ShadedGs SunlitGs ShadedAbsorbedPAR SunlitAbsorbedPAR ShadedAbsorbedNIR SunlitAbsorbedNIR') fspatial.write('\n') - np.savetxt(fspatial,ratp.out_time_spatial,'%.6e') + np.savetxt(fspatial, ratp.out_time_spatial, '%.6e') fspatial.close() - ftree = open(path+"/Resul"+'/tree.txt','w') - ftree.write('ntime day hour VegetationType TotalIrradiation AirTemperature TreePhotosynthesis TreeTranspiration') + ftree = open(path + "/Resul" + '/tree.txt', 'w') + ftree.write( + 'ntime day hour VegetationType TotalIrradiation AirTemperature TreePhotosynthesis TreeTranspiration') ftree.write('\n') - np.savetxt(ftree,ratp.out_time_tree,'%.6e') + np.savetxt(ftree, ratp.out_time_tree, '%.6e') ftree.close() # Ecriture parametres calcul_ - fichier = open(path+"/Resul"+"/data.txt", "a") - #ecriture des variable grille + fichier = open(path + "/Resul" + "/data.txt", "a") + # ecriture des variable grille fichier.write("GRILLE") fichier.write('\n') for d in pyratp.grid3d.__dict__: fichier.write(str(d)) fichier.write("\t" + str(pyratp.grid3d.__dict__[d])) fichier.write('\n') - fichier.write('dz'+'\t') + fichier.write('dz' + '\t') for i in pyratp.grid3d.dz: fichier.write(str(i) + ' ') fichier.write('\n') @@ -73,65 +74,64 @@ def DoAll(*args): fichier.write('\n') vegetation = pyratp.vegetation_types for jent in range(pyratp.grid3d.nent): - fichier.write('jent'+"\t") + fichier.write('jent' + "\t") fichier.write(str(jent)) fichier.write('\n') - fichier.write('mu'+"\t") + fichier.write('mu' + "\t") fichier.write(str(vegetation.mu[jent])) fichier.write('\n') - fichier.write('nbincli'+"\t") + fichier.write('nbincli' + "\t") fichier.write(str(vegetation.nbincli[jent])) fichier.write('\n') - fichier.write('distinc'+"\t") - fichier.write(str(vegetation.distinc )) + fichier.write('distinc' + "\t") + fichier.write(str(vegetation.distinc)) fichier.write('\n') - fichier.write('nblo'+"\t") + fichier.write('nblo' + "\t") fichier.write(str(vegetation.nblo[jent])) fichier.write('\n') - fichier.write('nblomin'+"\t") + fichier.write('nblomin' + "\t") fichier.write(str(vegetation.nblomin)) fichier.write('\n') - fichier.write('rf'+"\t") - fichier.write(str(vegetation.rf )) + fichier.write('rf' + "\t") + fichier.write(str(vegetation.rf)) fichier.write('\n') - fichier.write('i_gspar'+"\t") + fichier.write('i_gspar' + "\t") fichier.write(str(vegetation.i_gspar[jent])) fichier.write('\n') - fichier.write('agspar'+"\t") + fichier.write('agspar' + "\t") fichier.write(str(vegetation.agspar[jent])) fichier.write('\n') - fichier.write('i_gsca'+"\t") + fichier.write('i_gsca' + "\t") fichier.write(str(vegetation.i_gsca[jent])) fichier.write('\n') - fichier.write('agsca'+"\t") - fichier.write(str(vegetation.agsca[jent] )) + fichier.write('agsca' + "\t") + fichier.write(str(vegetation.agsca[jent])) fichier.write('\n') - fichier.write('i_gslt'+"\t") + fichier.write('i_gslt' + "\t") fichier.write(str(vegetation.i_gslt[jent])) fichier.write('\n') - fichier.write('agslt'+"\t") + fichier.write('agslt' + "\t") fichier.write(str(vegetation.agslt[jent])) fichier.write('\n') - fichier.write('agsvpd'+"\t") + fichier.write('agsvpd' + "\t") fichier.write(str(vegetation.agsvpd[jent])) fichier.write('\n') - fichier.write('avcmaxn'+"\t") + fichier.write('avcmaxn' + "\t") fichier.write(str(vegetation.avcmaxn[jent])) fichier.write('\n') - fichier.write('ajmaxn'+"\t") + fichier.write('ajmaxn' + "\t") fichier.write(str(vegetation.ajmaxn[jent])) fichier.write('\n') - fichier.write('ardn'+"\t") + fichier.write('ardn' + "\t") fichier.write(str(vegetation.ardn[jent])) fichier.write('\n') - fichier.write('ismine'+"\t") + fichier.write('ismine' + "\t") fichier.write(str(vegetation.ismine[jent])) fichier.write('\n') - fichier.write('epm'+"\t") + fichier.write('epm' + "\t") fichier.write(str(vegetation.epm[jent])) fichier.write('\n') - fichier.close() return ratp.out_time_spatial, ratp.out_time_tree @@ -139,9 +139,9 @@ def DoAll(*args): @staticmethod def DoIrradiation(*args): ratp = pyratp.ratp - ratp.out_rayt = np.zeros(pyratp.micrometeo.nbli*pyratp.grid3d.nveg*9*pyratp.grid3d.nent).reshape(pyratp.micrometeo.nbli*pyratp.grid3d.nveg*pyratp.grid3d.nent ,9) + ratp.out_rayt = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, 9)) pyratp.ratp.do_interception() - + # if platform.system() == 'Windows': # path = 'c:/tmpRATP' # if os.path.exists(os.path.normpath(path)): @@ -154,4 +154,4 @@ def DoIrradiation(*args): # np.savetxt(fspatial,ratp.out_rayt,'%.6e') # fspatial.close() - return ratp.out_rayt \ No newline at end of file + return ratp.out_rayt From 28f26a8b02b632178c73ee9398224b955c66dd96 Mon Sep 17 00:00:00 2001 From: jchopard Date: Wed, 25 Jul 2018 16:18:25 +0200 Subject: [PATCH 2/5] explicit columns names --- src/alinea/pyratp/runratp.py | 43 +++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/alinea/pyratp/runratp.py b/src/alinea/pyratp/runratp.py index 26638016..f4fa2eb1 100644 --- a/src/alinea/pyratp/runratp.py +++ b/src/alinea/pyratp/runratp.py @@ -8,6 +8,38 @@ import grid from alinea.pyratp import pyratp +columns = ('VegetationType', + 'ntime', + 'day', + 'hour', + 'AirTemperature', + 'VoxelId', + 'ShadedTemp', + 'SunlitTemp', + 'STARDirect', + 'STARSky', + 'ShadedPhoto', + 'SunlitPhoto', + 'ShadedTranspi', + 'SunlitTranspi', + 'ShadedArea', + 'SunlitArea', + 'ShadedGs', + 'SunlitGs', + 'ShadedAbsorbedPAR', + 'SunlitAbsorbedPAR', + 'ShadedAbsorbedNIR', + 'SunlitAbsorbedNIR') + +columns_tree = ('ntime', + 'day', + 'hour', + 'VegetationType', + 'TotalIrradiation', + 'AirTemperature', + 'TreePhotosynthesis', + 'TreeTranspiration') + class runRATP(object): """ @@ -42,16 +74,13 @@ def DoAll(*args): # print 'dz,', pyratp.grid3d.dz fspatial = open(path + "/Resul" + '/spatial.txt', 'w') - fspatial.write( - 'VegetationType ntime day hour AirTemperature VoxelId ShadedTemp SunlitTemp STARDirect STARSky ShadedPhoto SunlitPhoto ShadedTranspi SunlitTranspi') - fspatial.write( - ' ShadedArea SunlitArea ShadedGs SunlitGs ShadedAbsorbedPAR SunlitAbsorbedPAR ShadedAbsorbedNIR SunlitAbsorbedNIR') + fspatial.write(" ".join(columns)) fspatial.write('\n') np.savetxt(fspatial, ratp.out_time_spatial, '%.6e') fspatial.close() + ftree = open(path + "/Resul" + '/tree.txt', 'w') - ftree.write( - 'ntime day hour VegetationType TotalIrradiation AirTemperature TreePhotosynthesis TreeTranspiration') + ftree.write(" ".join(columns_tree)) ftree.write('\n') np.savetxt(ftree, ratp.out_time_tree, '%.6e') ftree.close() @@ -134,6 +163,8 @@ def DoAll(*args): fichier.close() + # convert matrices to dataframes + return ratp.out_time_spatial, ratp.out_time_tree @staticmethod From fe2120051c5ec0d07e6c970b44b990cb8a1dd5fc Mon Sep 17 00:00:00 2001 From: jchopard Date: Wed, 25 Jul 2018 16:27:26 +0200 Subject: [PATCH 3/5] doall returns dataframes --- src/alinea/pyratp/runratp.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/alinea/pyratp/runratp.py b/src/alinea/pyratp/runratp.py index f4fa2eb1..6bc74181 100644 --- a/src/alinea/pyratp/runratp.py +++ b/src/alinea/pyratp/runratp.py @@ -4,6 +4,7 @@ import tempfile import numpy as np +import pandas as pd import grid from alinea.pyratp import pyratp @@ -164,8 +165,24 @@ def DoAll(*args): fichier.close() # convert matrices to dataframes + df = pd.DataFrame(ratp.out_time_spatial, columns=columns) - return ratp.out_time_spatial, ratp.out_time_tree + df['vtyp'] = [int(t) for t in df['VegetationType']] + df['ntime'] = [int(t) for t in df['ntime']] + df['day'] = [int(t) for t in df['day']] + df['vid'] = [int(t) - 1 for t in df['VoxelId']] + + df_spatial = df.set_index(['vtyp', 'ntime', 'vid']) + + df = pd.DataFrame(ratp.out_time_tree, columns=columns_tree) + + df['vtyp'] = [int(t) for t in df['VegetationType']] + df['ntime'] = [int(t) for t in df['ntime']] + df['day'] = [int(t) for t in df['day']] + + df_tree = df.set_index(['vtyp', 'ntime']) + + return df_spatial, df_tree @staticmethod def DoIrradiation(*args): From 38b8620a671729d6e57689f4e628038f5b71d31c Mon Sep 17 00:00:00 2001 From: jchopard Date: Fri, 27 Jul 2018 08:21:51 +0200 Subject: [PATCH 4/5] DoIrradiation also returns dataframe --- src/alinea/pyratp/RatpScene.py | 42 ++++++++++---------- src/alinea/pyratp/interface/ratp_scene.py | 34 ++++++---------- src/alinea/pyratp/runratp.py | 48 +++++++++++++++++------ 3 files changed, 70 insertions(+), 54 deletions(-) diff --git a/src/alinea/pyratp/RatpScene.py b/src/alinea/pyratp/RatpScene.py index 7b2355d9..733f545d 100644 --- a/src/alinea/pyratp/RatpScene.py +++ b/src/alinea/pyratp/RatpScene.py @@ -431,7 +431,7 @@ def _dist(inc): return grid, vox_id, sh_id, s - def do_irradiation(self, rleaf=[0.1], rsoil=0.20, doy=1, hour=12, Rglob=1, Rdif=1, mu=None, sources=None): + def do_irradiation(self, rleaf=(0.1,), rsoil=0.20, doy=1, hour=12, Rglob=1, Rdif=1, mu=None, sources=None): """ Run a simulation of light interception for one wavelength Parameters: @@ -457,7 +457,7 @@ def do_irradiation(self, rleaf=[0.1], rsoil=0.20, doy=1, hour=12, Rglob=1, Rdif= vegetation = Vegetation.initialise(entities, nblomin=1) - if sources == None: + if sources is None: sky = Skyvault.initialise() else: el, az, w = sources @@ -474,31 +474,29 @@ def do_irradiation(self, rleaf=[0.1], rsoil=0.20, doy=1, hour=12, Rglob=1, Rdif= met = MicroMeteo.initialise(doy=doy, hour=hour, Rglob=Rglob, Rdif=Rdif) - res = runRATP.DoIrradiation(grid, vegetation, sky, met) + dfvox = runRATP.DoIrradiation(grid, vegetation, sky, met) - VegetationType,Iteration,day,hour,VoxelId,ShadedPAR,SunlitPAR,ShadedArea,SunlitArea= res.T - # 'PAR' is expected in Watt.m-2 in RATP input, whereas output is in micromol => convert back to W.m2 (cf shortwavebalance, line 306) - dfvox = pandas.DataFrame({'VegetationType':VegetationType, - 'Iteration':Iteration, - 'day':day, - 'hour':hour, - 'VoxelId':VoxelId, - 'ShadedPAR':ShadedPAR / 4.6, - 'SunlitPAR':SunlitPAR / 4.6, - 'ShadedArea':ShadedArea, - 'SunlitArea': SunlitArea, - 'Area': ShadedArea + SunlitArea, - 'PAR': (ShadedPAR * ShadedArea + SunlitPAR * SunlitArea) / (ShadedArea + SunlitArea) / 4.6, - }) - dfvox = dfvox[dfvox['VegetationType'] > 0] - dfvox = pandas.merge(dfvox, self.voxel_map.loc[:, - ('VoxelId', 'x', 'y', 'z', 'Volume')]) + # 'PAR' is expected in Watt.m-2 in RATP input, + # whereas output is in micromol + # => convert back to W.m2 (cf shortwavebalance, line 306) + dfvox['ShadedPAR'] /= 4.6 + dfvox['SunlitPAR'] /= 4.6 + + dfvox['Area'] = dfvox['ShadedArea'] + dfvox['SunlitArea'] + dfvox['PAR'] = (dfvox['ShadedPAR'] * dfvox['ShadedArea'] + + dfvox['SunlitPAR'] * dfvox['SunlitArea']) / dfvox['Area'] + + dfvox = dfvox.reset_index(drop=True) # for backward compatibility reasons + # TODO avoid and perform concat instead of merge + dfvox = pandas.merge(dfvox, self.voxel_map.loc[:, ('VoxelId', 'x', 'y', 'z', 'Volume')]) index = range(len(voxel_id)) dfmap = pandas.DataFrame( - {'primitive_index': index, 'shape_id': shape_id, + {'primitive_index': index, + 'shape_id': shape_id, 'VoxelId': voxel_id, 'VegetationType': [self.entity[sh_id] for sh_id in shape_id], - 'primitive_area': areas}) + 'primitive_area': areas} + ) return dfvox, dfmap diff --git a/src/alinea/pyratp/interface/ratp_scene.py b/src/alinea/pyratp/interface/ratp_scene.py index eee24d62..329d1859 100644 --- a/src/alinea/pyratp/interface/ratp_scene.py +++ b/src/alinea/pyratp/interface/ratp_scene.py @@ -368,28 +368,20 @@ def do_irradiation(self, sun_sources=None, sky_sources=None, azmoy = numpy.array(azmoy) - 180 + self.orientation sky = Skyvault.initialise(hmoy=hmoy, azmoy=azmoy, omega=omega, pc=pc) met = MicroMeteo.initialise(doy=1, hour=12, Rglob=ghi, Rdif=ghi) - res = runRATP.DoIrradiation(self.ratp_grid, vegetation, sky, met) - - VegetationType, Iteration, day, hour, VoxelId, ShadedPAR, SunlitPAR, \ - ShadedArea, SunlitArea = res.T - # 'PAR' is expected in Watt.m-2 in RATP input, whereas output is in - # micromol => convert back to W.m2 (cf shortwavebalance, line 306) - dfvox = pandas.DataFrame({'VegetationType': VegetationType, - 'Iteration': Iteration, - 'day': day, - 'hour': hour, - 'VoxelId': VoxelId, - 'ShadedPAR': ShadedPAR / 4.6, - 'SunlitPAR': SunlitPAR / 4.6, - 'ShadedArea': ShadedArea, - 'SunlitArea': SunlitArea, - 'Area': ShadedArea + SunlitArea, - 'PAR': ( - ShadedPAR * ShadedArea + SunlitPAR * - SunlitArea) / ( - ShadedArea + SunlitArea) / 4.6, - }) + dfvox = runRATP.DoIrradiation(self.ratp_grid, vegetation, sky, met) + # 'PAR' is expected in Watt.m-2 in RATP input, + # whereas output is in micromol + # => convert back to W.m2 (cf shortwavebalance, line 306) + dfvox['ShadedPAR'] /= 4.6 + dfvox['SunlitPAR'] /= 4.6 + + dfvox['Area'] = dfvox['ShadedArea'] + dfvox['SunlitArea'] + dfvox['PAR'] = (dfvox['ShadedPAR'] * dfvox['ShadedArea'] + + dfvox['SunlitPAR'] * dfvox['SunlitArea']) / dfvox['Area'] + + dfvox = dfvox.reset_index(drop=True) # for backward compatibility reasons + # TODO avoid and perform concat instead of merge return pandas.merge(dfvox, self.voxel_index()) def scene_lightmap(self, dfvox, spatial='point_id', temporal=True): diff --git a/src/alinea/pyratp/runratp.py b/src/alinea/pyratp/runratp.py index 6bc74181..2ce3fa59 100644 --- a/src/alinea/pyratp/runratp.py +++ b/src/alinea/pyratp/runratp.py @@ -10,7 +10,7 @@ from alinea.pyratp import pyratp columns = ('VegetationType', - 'ntime', + 'Iteration', 'day', 'hour', 'AirTemperature', @@ -32,7 +32,7 @@ 'ShadedAbsorbedNIR', 'SunlitAbsorbedNIR') -columns_tree = ('ntime', +columns_tree = ('Iteration', 'day', 'hour', 'VegetationType', @@ -41,6 +41,16 @@ 'TreePhotosynthesis', 'TreeTranspiration') +columns_irr = ('VegetationType', + 'Iteration', + 'day', + 'hour', + 'VoxelId', + 'ShadedPAR', + 'SunlitPAR', + 'ShadedArea', + 'SunlitArea') + class runRATP(object): """ @@ -50,8 +60,12 @@ class runRATP(object): def DoAll(*args): ratp = pyratp.ratp pyratp.dir_interception.scattering = False - ratp.out_time_spatial = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, 22)) - ratp.out_time_tree = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nent, 8)) + ratp.out_time_spatial = np.zeros( + (pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, len(columns)) + ) + ratp.out_time_tree = np.zeros( + (pyratp.micrometeo.nbli * pyratp.grid3d.nent, len(columns_tree)) + ) if platform.system() == 'Windows': path = 'c:/tmpRATP' if os.path.exists(os.path.normpath(path)): @@ -62,7 +76,7 @@ def DoAll(*args): os.mkdir(path + "/Resul") grid.gridToVGX(pyratp.grid3d, path + "/Resul/", "VoxelsGrid.vgx") # Save grid in VGX format print "... grid written" - ##print np.where(pyratp.vegetation_types.ismine==1) + # print np.where(pyratp.vegetation_types.ismine==1) try: numeroMin = (np.where(pyratp.vegetation_types.ismine == 1))[0][0] + 1 blMin = np.where(pyratp.grid3d.nume == numeroMin) @@ -168,26 +182,28 @@ def DoAll(*args): df = pd.DataFrame(ratp.out_time_spatial, columns=columns) df['vtyp'] = [int(t) for t in df['VegetationType']] - df['ntime'] = [int(t) for t in df['ntime']] + df['iteration'] = [int(t) for t in df['Iteration']] df['day'] = [int(t) for t in df['day']] df['vid'] = [int(t) - 1 for t in df['VoxelId']] - df_spatial = df.set_index(['vtyp', 'ntime', 'vid']) + df_spatial = df.set_index(['vtyp', 'iteration', 'vid']) df = pd.DataFrame(ratp.out_time_tree, columns=columns_tree) df['vtyp'] = [int(t) for t in df['VegetationType']] - df['ntime'] = [int(t) for t in df['ntime']] + df['iteration'] = [int(t) for t in df['Iteration']] df['day'] = [int(t) for t in df['day']] - df_tree = df.set_index(['vtyp', 'ntime']) + df_tree = df.set_index(['vtyp', 'iteration']) return df_spatial, df_tree @staticmethod def DoIrradiation(*args): ratp = pyratp.ratp - ratp.out_rayt = np.zeros((pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, 9)) + ratp.out_rayt = np.zeros( + (pyratp.micrometeo.nbli * pyratp.grid3d.nveg * pyratp.grid3d.nent, len(columns_irr)) + ) pyratp.ratp.do_interception() # if platform.system() == 'Windows': @@ -202,4 +218,14 @@ def DoIrradiation(*args): # np.savetxt(fspatial,ratp.out_rayt,'%.6e') # fspatial.close() - return ratp.out_rayt + # convert matrice to dataframe + df = pd.DataFrame(ratp.out_rayt, columns=columns_irr) + + df['vtyp'] = [int(t) for t in df['VegetationType']] + df['iteration'] = [int(t) for t in df['Iteration']] + df['day'] = [int(t) for t in df['day']] + df['vid'] = [int(t) - 1 for t in df['VoxelId']] + + df_rayt = df.set_index(['vtyp', 'iteration', 'vid']) + + return df_rayt From ce47cfba8bb21d30f6419c917d8b81e74a1cc65f Mon Sep 17 00:00:00 2001 From: jchopard Date: Fri, 27 Jul 2018 08:31:44 +0200 Subject: [PATCH 5/5] use DEBUG parameter to avoid writting unnecessary info in tempRATP if normal use --- src/alinea/pyratp/runratp.py | 210 ++++++++++++++++++----------------- 1 file changed, 110 insertions(+), 100 deletions(-) diff --git a/src/alinea/pyratp/runratp.py b/src/alinea/pyratp/runratp.py index 2ce3fa59..e48f69aa 100644 --- a/src/alinea/pyratp/runratp.py +++ b/src/alinea/pyratp/runratp.py @@ -9,6 +9,8 @@ import grid from alinea.pyratp import pyratp +DEBUG = False # used to debug program + columns = ('VegetationType', 'Iteration', 'day', @@ -66,16 +68,19 @@ def DoAll(*args): ratp.out_time_tree = np.zeros( (pyratp.micrometeo.nbli * pyratp.grid3d.nent, len(columns_tree)) ) - if platform.system() == 'Windows': - path = 'c:/tmpRATP' - if os.path.exists(os.path.normpath(path)): - shutil.rmtree(os.path.normpath(path)) - os.mkdir(path) - else: - path = tempfile.mkdtemp() - os.mkdir(path + "/Resul") - grid.gridToVGX(pyratp.grid3d, path + "/Resul/", "VoxelsGrid.vgx") # Save grid in VGX format - print "... grid written" + if DEBUG: + if platform.system() == 'Windows': + path = 'c:/tmpRATP' + if os.path.exists(os.path.normpath(path)): + shutil.rmtree(os.path.normpath(path)) + os.mkdir(path) + else: + path = tempfile.mkdtemp() + + os.mkdir(path + "/Resul") + grid.gridToVGX(pyratp.grid3d, path + "/Resul/", "VoxelsGrid.vgx") # Save grid in VGX format + print "... grid written" + # print np.where(pyratp.vegetation_types.ismine==1) try: numeroMin = (np.where(pyratp.vegetation_types.ismine == 1))[0][0] + 1 @@ -87,96 +92,8 @@ def DoAll(*args): except: pyratp.ratp.do_all() - # print 'dz,', pyratp.grid3d.dz - fspatial = open(path + "/Resul" + '/spatial.txt', 'w') - fspatial.write(" ".join(columns)) - fspatial.write('\n') - np.savetxt(fspatial, ratp.out_time_spatial, '%.6e') - fspatial.close() - - ftree = open(path + "/Resul" + '/tree.txt', 'w') - ftree.write(" ".join(columns_tree)) - ftree.write('\n') - np.savetxt(ftree, ratp.out_time_tree, '%.6e') - ftree.close() - - # Ecriture parametres calcul_ - fichier = open(path + "/Resul" + "/data.txt", "a") - # ecriture des variable grille - fichier.write("GRILLE") - fichier.write('\n') - for d in pyratp.grid3d.__dict__: - fichier.write(str(d)) - fichier.write("\t" + str(pyratp.grid3d.__dict__[d])) - fichier.write('\n') - fichier.write('dz' + '\t') - for i in pyratp.grid3d.dz: - fichier.write(str(i) + ' ') - fichier.write('\n') - - fichier.write("VEGETATION") - fichier.write('\n') - vegetation = pyratp.vegetation_types - for jent in range(pyratp.grid3d.nent): - fichier.write('jent' + "\t") - fichier.write(str(jent)) - fichier.write('\n') - fichier.write('mu' + "\t") - fichier.write(str(vegetation.mu[jent])) - fichier.write('\n') - fichier.write('nbincli' + "\t") - fichier.write(str(vegetation.nbincli[jent])) - fichier.write('\n') - fichier.write('distinc' + "\t") - fichier.write(str(vegetation.distinc)) - fichier.write('\n') - fichier.write('nblo' + "\t") - fichier.write(str(vegetation.nblo[jent])) - fichier.write('\n') - fichier.write('nblomin' + "\t") - fichier.write(str(vegetation.nblomin)) - fichier.write('\n') - fichier.write('rf' + "\t") - fichier.write(str(vegetation.rf)) - fichier.write('\n') - fichier.write('i_gspar' + "\t") - fichier.write(str(vegetation.i_gspar[jent])) - fichier.write('\n') - fichier.write('agspar' + "\t") - fichier.write(str(vegetation.agspar[jent])) - fichier.write('\n') - fichier.write('i_gsca' + "\t") - fichier.write(str(vegetation.i_gsca[jent])) - fichier.write('\n') - fichier.write('agsca' + "\t") - fichier.write(str(vegetation.agsca[jent])) - fichier.write('\n') - fichier.write('i_gslt' + "\t") - fichier.write(str(vegetation.i_gslt[jent])) - fichier.write('\n') - fichier.write('agslt' + "\t") - fichier.write(str(vegetation.agslt[jent])) - fichier.write('\n') - fichier.write('agsvpd' + "\t") - fichier.write(str(vegetation.agsvpd[jent])) - fichier.write('\n') - fichier.write('avcmaxn' + "\t") - fichier.write(str(vegetation.avcmaxn[jent])) - fichier.write('\n') - fichier.write('ajmaxn' + "\t") - fichier.write(str(vegetation.ajmaxn[jent])) - fichier.write('\n') - fichier.write('ardn' + "\t") - fichier.write(str(vegetation.ardn[jent])) - fichier.write('\n') - fichier.write('ismine' + "\t") - fichier.write(str(vegetation.ismine[jent])) - fichier.write('\n') - fichier.write('epm' + "\t") - fichier.write(str(vegetation.epm[jent])) - fichier.write('\n') - - fichier.close() + if DEBUG: + _write_result(path + "/Resul") # convert matrices to dataframes df = pd.DataFrame(ratp.out_time_spatial, columns=columns) @@ -229,3 +146,96 @@ def DoIrradiation(*args): df_rayt = df.set_index(['vtyp', 'iteration', 'vid']) return df_rayt + + +def _write_result(path): + # print 'dz,', pyratp.grid3d.dz + fspatial = open(path + '/spatial.txt', 'w') + fspatial.write(" ".join(columns)) + fspatial.write('\n') + np.savetxt(fspatial, pyratp.ratp.out_time_spatial, '%.6e') + fspatial.close() + + ftree = open(path + '/tree.txt', 'w') + ftree.write(" ".join(columns_tree)) + ftree.write('\n') + np.savetxt(ftree, pyratp.ratp.out_time_tree, '%.6e') + ftree.close() + + # Ecriture parametres calcul_ + fichier = open(path + "/data.txt", "a") + # ecriture des variable grille + fichier.write("GRILLE") + fichier.write('\n') + for d in pyratp.grid3d.__dict__: + fichier.write(str(d)) + fichier.write("\t" + str(pyratp.grid3d.__dict__[d])) + fichier.write('\n') + fichier.write('dz' + '\t') + for i in pyratp.grid3d.dz: + fichier.write(str(i) + ' ') + fichier.write('\n') + + fichier.write("VEGETATION") + fichier.write('\n') + vegetation = pyratp.vegetation_types + for jent in range(pyratp.grid3d.nent): + fichier.write('jent' + "\t") + fichier.write(str(jent)) + fichier.write('\n') + fichier.write('mu' + "\t") + fichier.write(str(vegetation.mu[jent])) + fichier.write('\n') + fichier.write('nbincli' + "\t") + fichier.write(str(vegetation.nbincli[jent])) + fichier.write('\n') + fichier.write('distinc' + "\t") + fichier.write(str(vegetation.distinc)) + fichier.write('\n') + fichier.write('nblo' + "\t") + fichier.write(str(vegetation.nblo[jent])) + fichier.write('\n') + fichier.write('nblomin' + "\t") + fichier.write(str(vegetation.nblomin)) + fichier.write('\n') + fichier.write('rf' + "\t") + fichier.write(str(vegetation.rf)) + fichier.write('\n') + fichier.write('i_gspar' + "\t") + fichier.write(str(vegetation.i_gspar[jent])) + fichier.write('\n') + fichier.write('agspar' + "\t") + fichier.write(str(vegetation.agspar[jent])) + fichier.write('\n') + fichier.write('i_gsca' + "\t") + fichier.write(str(vegetation.i_gsca[jent])) + fichier.write('\n') + fichier.write('agsca' + "\t") + fichier.write(str(vegetation.agsca[jent])) + fichier.write('\n') + fichier.write('i_gslt' + "\t") + fichier.write(str(vegetation.i_gslt[jent])) + fichier.write('\n') + fichier.write('agslt' + "\t") + fichier.write(str(vegetation.agslt[jent])) + fichier.write('\n') + fichier.write('agsvpd' + "\t") + fichier.write(str(vegetation.agsvpd[jent])) + fichier.write('\n') + fichier.write('avcmaxn' + "\t") + fichier.write(str(vegetation.avcmaxn[jent])) + fichier.write('\n') + fichier.write('ajmaxn' + "\t") + fichier.write(str(vegetation.ajmaxn[jent])) + fichier.write('\n') + fichier.write('ardn' + "\t") + fichier.write(str(vegetation.ardn[jent])) + fichier.write('\n') + fichier.write('ismine' + "\t") + fichier.write(str(vegetation.ismine[jent])) + fichier.write('\n') + fichier.write('epm' + "\t") + fichier.write(str(vegetation.epm[jent])) + fichier.write('\n') + + fichier.close()