diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index ac5e4c52..e6b10e5d 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false # don't cancel other matrix jobs when one fails matrix: - python-version: ["3.8"] + python-version: ["3.8","3.11"] # Test two environments: # 1) dependencies with pinned versions from requirements.txt # 2) 'pip install --upgrade --upgrade-strategy=eager .' to install upgraded diff --git a/bifacial_radiance/gui.py b/bifacial_radiance/gui.py index ece84e4f..48bb59e8 100644 --- a/bifacial_radiance/gui.py +++ b/bifacial_radiance/gui.py @@ -389,7 +389,7 @@ def runBifacialRadiance(): analysisParamsDict, cellModuleDict, inputvariablefile = read_valuesfromGUI() #get a return out of runModelChain and pass it back out of the GUI. - self.data, self.analysis = bifacial_radiance.modelchain.runModelChain(simulationParamsDict=simulationParamsDict, + self.data, analysis = bifacial_radiance.modelchain.runModelChain(simulationParamsDict=simulationParamsDict, sceneParamsDict=sceneParamsDict, timeControlParamsDict=timeControlParamsDict, moduleParamsDict=moduleParamsDict, diff --git a/bifacial_radiance/load.py b/bifacial_radiance/load.py index f1ea9458..36bea761 100644 --- a/bifacial_radiance/load.py +++ b/bifacial_radiance/load.py @@ -256,7 +256,6 @@ def loadTrackerDict(trackerdict, fileprefix=None): import re, os import numpy as np - # get list of filenames in \results\ filelist = sorted(os.listdir('results')) @@ -297,8 +296,57 @@ def loadTrackerDict(trackerdict, fileprefix=None): return(trackerdict, totaldict) #end loadTrackerDict subroutine. set demo.Wm2Front = totaldict.Wm2Front. demo.Wm2Back = totaldict.Wm2Back +def getResults(trackerdict, cumulativesky=False): + """ + Iterate over trackerdict and return irradiance results + following analysis1axis runs + + Parameters + ---------- + trackerdict : dict + trackerdict, after analysis1axis has been run + + cumulativesky : Bool + determines whether trackerdict index is labeled 'timestamp' or 'angle' + + Returns + ------- + results : Pandas.DataFrame + dataframe containing irradiance scan results. -def _exportTrackerDict(trackerdict, savefile, reindex=False, monthlyyearly=False): + """ + import pandas as pd + from pandas import DataFrame as df + + results = pd.DataFrame(None) + + def _printRow(analysisobj, key): + if cumulativesky: + keyname = 'theta' + else: + keyname = 'timestamp' + return pd.concat([pd.DataFrame({keyname:key},index=[0]), + analysisobj.getResults(), + analysisobj.power_data + ], axis=1) + + for key in trackerdict: + try: + extra_columns = ['surf_azm','surf_tilt','theta','temp_air'] + data_extra = df(dict([(col,trackerdict[key][col]) \ + for col in extra_columns if col in trackerdict[key]]), + index=[0]) + + for analysis in trackerdict[key]['AnalysisObj']: + results = pd.concat([results, + pd.concat([_printRow(analysis, key),data_extra], axis=1) + ], ignore_index=True) + except KeyError: + pass + + return results.loc[:,~results.columns.duplicated()] + +def _exportTrackerDict(trackerdict, savefile, cumulativesky=False, reindex=False, monthlyyearly=False): """ Save a TrackerDict output as a ``.csv`` file. @@ -320,32 +368,31 @@ def _exportTrackerDict(trackerdict, savefile, reindex=False, monthlyyearly=False print("Exporting TrackerDict") - # convert trackerdict into dataframe - d = df.from_dict(trackerdict,orient='index',columns=['dni','dhi','ghi', 'temp_air', - 'wind_speed', 'theta','surf_tilt','surf_azm', - # Not including the whole distribution because these are not clean.. - 'POA_eff', 'Gfront_mean', - 'Grear_mean', - 'Pout_raw', 'Mismatch', 'Pout', 'Pout_Gfront']) - d['measdatetime'] = d.index - - - # add trackerdict Results (not all simulations will have results) - try: - results = pd.concat([df(data=value['Results'],index=[key]*len(value['Results'])) for (key,value) in trackerdict.items()]) - results = results[['rowWanted','modWanted','sceneNum','Wm2Front','Wm2Back']] - d = results.join(d) - except KeyError: - pass + d0 = getResults(trackerdict, cumulativesky) + + + d0.rename(columns={'Wind Speed':'wind_speed'}, inplace=True) + + columnlist = ['timestamp', 'rowNum', 'modNum', 'sceneNum', 'name', 'Wm2Front', 'Wm2Back','DNI','DHI','GHI', + 'temp_air', 'wind_speed','theta','surf_tilt','surf_azm', 'POA_eff','Gfront_mean', + 'Grear_mean', 'Pout_raw', 'Mismatch', 'Pout', 'Pout_Gfront'] + d = df.from_dict(d0).loc[:, d0.columns.isin(columnlist)] + d = d.reindex(columns=[k for k in columnlist]) + + + # TODO: Continue work from here... + if reindex is True: # change to proper timestamp and interpolate to get 8760 output - d['measdatetime'] = d.index - d=d.set_index(pd.to_datetime(d['measdatetime'], format='%Y-%m-%d_%H%M')) + + d=d.set_index(pd.to_datetime(d['timestamp'], format='%Y-%m-%d_%H%M')) try: d=d.resample('H').asfreq() except ValueError: - print('Warning: Unable to reindex - possibly duplicate entries in trackerdict') + temp = d.groupby(d.index).mean(numeric_only=True) + d=temp.resample('H').asfreq() + #print('Warning: Unable to reindex - possibly duplicate entries in trackerdict') # Add tabs: d.to_csv(savefile) @@ -355,14 +402,14 @@ def _exportTrackerDict(trackerdict, savefile, reindex=False, monthlyyearly=False D2join = pd.DataFrame() D3join = pd.DataFrame() D4join = pd.DataFrame() - for rownum in d['rowWanted'].unique(): - for modnum in d['modWanted'].unique(): + for rownum in d['rowNum'].unique(): + for modnum in d['modNum'].unique(): for sceneNum in d['sceneNum'].unique():#TODO: is sceneNum iteration required here? - mask = (d['rowWanted']==rownum) & (d['modWanted']==modnum) & (d['sceneNum']==sceneNum) + mask = (d['rowNum']==rownum) & (d['modNum']==modnum) & (d['sceneNum']==sceneNum) print(modnum) # Gfront_mean.append(filledFront[mask].sum(axis=0).mean()) D2 = d[mask].copy() - D2['timestamp'] = pd.to_datetime(D2['measdatetime'], format="%Y-%m-%d_%H%M") + D2['timestamp'] = pd.to_datetime(D2['timestamp'], format="%Y-%m-%d_%H%M") D2 = D2.set_index('timestamp') # D2 = D2.set_index(D2['timestamp']) @@ -377,30 +424,30 @@ def _exportTrackerDict(trackerdict, savefile, reindex=False, monthlyyearly=False D2b['BGG'] = D2b['Grear_mean']*100/D2b['Gfront_mean'] D2b['BGE'] = (D2b['Pout']-D2b['Pout_Gfront'])*100/D2b['Pout'] D2b['Mismatch'] = (D2b['Pout_raw']-D2b['Pout'])*100/D2b['Pout_raw'] - D2b['rowWanted'] = rownum - D2b['modWanted'] = modnum + D2b['rowNum'] = rownum + D2b['modNum'] = modnum D2b.drop(columns=['theta', 'surf_tilt', 'surf_azm'], inplace=True) D2b=D2b.reset_index() D2join = pd.concat([D2join, D2b], ignore_index=True, sort=False) - D3 = D2.groupby(pd.PeriodIndex(D2.index, freq="M")).sum().reset_index() + D3 = D2.groupby(pd.PeriodIndex(D2.index, freq="M")).sum(numeric_only=True).reset_index() D3['BGG'] = D3['Grear_mean']*100/D3['Gfront_mean'] D3['BGE'] = (D3['Pout']-D3['Pout_Gfront'])*100/D3['Pout'] D3['Mismatch'] = (D3['Pout_raw']-D3['Pout'])*100/D3['Pout_raw'] - D3['rowWanted'] = rownum - D3['modWanted'] = modnum + D3['rowNum'] = rownum + D3['modNum'] = modnum D3m = D2.groupby(pd.PeriodIndex(D2.index, freq="M")).mean(numeric_only=True).reset_index() D3['temp_air'] = D3m['temp_air'] D3['wind_speed'] = D3m['wind_speed'] D3.drop(columns=['theta', 'surf_tilt', 'surf_azm'], inplace=True) - D4 = D2.groupby(pd.PeriodIndex(D2.index, freq="Y")).sum().reset_index() + D4 = D2.groupby(pd.PeriodIndex(D2.index, freq="Y")).sum(numeric_only=True).reset_index() D4['BGG'] = D4['Grear_mean']*100/D4['Gfront_mean'] D4['BGE'] = (D4['Pout']-D4['Pout_Gfront'])*100/D4['Pout'] D4['Mismatch'] = (D4['Pout_raw']-D4['Pout'])*100/D4['Pout_raw'] - D4['rowWanted'] = rownum - D4['modWanted'] = modnum - D4m = D2.groupby(pd.PeriodIndex(D2.index, freq="Y")).mean().reset_index() + D4['rowNum'] = rownum + D4['modNum'] = modnum + D4m = D2.groupby(pd.PeriodIndex(D2.index, freq="Y")).mean(numeric_only=True).reset_index() D4['temp_air'] = D4m['temp_air'] D4['wind_speed'] = D4m['wind_speed'] D4.drop(columns=['theta', 'surf_tilt', 'surf_azm'], inplace=True) diff --git a/bifacial_radiance/main.py b/bifacial_radiance/main.py index b75a1e31..11c314ca 100644 --- a/bifacial_radiance/main.py +++ b/bifacial_radiance/main.py @@ -264,9 +264,9 @@ def _subhourlydatatoGencumskyformat(gencumskydata, label='right'): #Resample to hourly. Gencumsky wants right-labeled data. try: - gencumskydata = gencumskydata.resample('60T', closed='right', label='right').mean() + gencumskydata = gencumskydata.resample('60min', closed='right', label='right').mean() except TypeError: # Pandas 2.0 error - gencumskydata = gencumskydata.resample('60T', closed='right', label='right').mean(numeric_only=True) + gencumskydata = gencumskydata.resample('60min', closed='right', label='right').mean(numeric_only=True) if label == 'left': #switch from left to right labeled by adding an hour gencumskydata.index = gencumskydata.index + pd.to_timedelta('1H') @@ -293,7 +293,7 @@ def _subhourlydatatoGencumskyformat(gencumskydata, label='right'): gencumskydata.loc[padend]=0 gencumskydata=gencumskydata.sort_index() # Fill empty timestamps with zeros - gencumskydata = gencumskydata.resample('60T').asfreq().fillna(0) + gencumskydata = gencumskydata.resample('60min').asfreq().fillna(0) # Mask leap year leapmask = ~(_is_leap_and_29Feb(gencumskydata)) gencumskydata = gencumskydata[leapmask] @@ -358,7 +358,7 @@ def __init__(self, name=None, path=None, hpc=False): #self.nMods = None # number of modules per row #self.nRows = None # number of rows per scene self.hpc = hpc # HPC simulation is being run. Some read/write functions are modified - self.CompiledResults = None + self.CompiledResults = None # DataFrame of cumulative results, output from self.calculateResults() now = datetime.datetime.now() self.nowstr = str(now.date())+'_'+str(now.hour)+str(now.minute)+str(now.second) @@ -614,11 +614,12 @@ def exportTrackerDict(self, trackerdict=None, if self.cumulativesky is True: monthlyyearly = False - bifacial_radiance.load._exportTrackerDict(trackerdict, - savefile, - reindex, monthlyyearly=monthlyyearly) - + bifacial_radiance.load._exportTrackerDict(trackerdict, savefile, + cumulativesky=self.cumulativesky, + reindex=reindex, monthlyyearly=monthlyyearly) + + # loadtrackerdict not updated to match new trackerdict configuration def loadtrackerdict(self, trackerdict=None, fileprefix=None): """ Use :py:class:`bifacial_radiance.load._loadtrackerdict` @@ -636,7 +637,7 @@ def loadtrackerdict(self, trackerdict=None, fileprefix=None): (trackerdict, totaldict) = loadTrackerDict(trackerdict, fileprefix) self.Wm2Front = totaldict['Wm2Front'] self.Wm2Back = totaldict['Wm2Back'] - + def returnOctFiles(self): """ Return files in the root directory with `.oct` extension @@ -679,6 +680,31 @@ def returnMaterialFiles(self, material_path=None): self.materialfiles = materialfilelist return materialfilelist + + def getResults(self, trackerdict=None): + """ + Iterate over trackerdict and return irradiance results + following analysis1axis runs + + Parameters + ---------- + trackerdict : dict, optional + trackerdict, after analysis1axis has been run + + Returns + ------- + results : Pandas.DataFrame + dataframe containing irradiance scan results. + + """ + from bifacial_radiance.load import getResults + + if trackerdict is None: + trackerdict = self.trackerdict + + return getResults(trackerdict, self.cumulativesky) + + def sceneNames(self, scenes=None): if scenes is None: scenes = self.scenes return [scene.name for scene in scenes] @@ -2224,7 +2250,8 @@ def makeOct1axis(self, trackerdict=None, singleindex=None, customname=None): trackerdict[index]['octfile'] = self.makeOct(filelist, octname) except KeyError as e: print('Trackerdict key error: {}'.format(e)) - + + self.trackerdict = trackerdict return trackerdict @@ -2527,7 +2554,7 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None, Appends to each scene a custom text pointing to a custom object created by the user; format of the text should start with the rad file path and name, and then any other geometry transformations - native to Radiance necessary. + native to Radiance necessary. e.g '!xform -rz 90 '+self.makeCustomObject() append : bool, default False If multiple scenes exist (makeScene called multiple times), either overwrite the existing scene (default) or append a new SceneObj to @@ -2670,6 +2697,9 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None, try: name=f"Scene{trackerdict[theta]['scenes'].__len__()}" scene.name = name + if customtext is not None: + scene.appendtoScene(customObject = customtext) + if append: trackerdict[theta]['scenes'].append(scene) else: @@ -2730,6 +2760,8 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None, try: name=f"Scene{trackerdict[time]['scenes'].__len__()}" scene.name = name + if customtext is not None: + scene.appendtoScene(customObject = customtext) if append: trackerdict[time]['scenes'].append(scene) else: @@ -2740,10 +2772,7 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None, print('{} Radfiles created in /objects/'.format(count)) - if customtext is not None: - for key in trackerdict: - #TODO: test if this actually works - self.appendtoScene(trackerdict[key]['scenes'][0].radfiles, customObject = customtext) + self.trackerdict = trackerdict self.hub_height = hubheight @@ -2809,17 +2838,20 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low', Activates internal printing of the function to help debugging. sceneNum : int Index of the scene number in the list of scenes per trackerdict. default 0 - Append : Bool (default Truee) - Append trackerdict['Results'] dictionary if exists. Otherwise over-writes + Append : Bool (default True) + Append trackerdict['AnalysisObj'] to list. Otherwise over-write any + AnalysisObj's and start 1axis analysis from scratch Returns ------- - trackerdict is returned with 'Results' dictionary for each timestamp: - + trackerdict is returned with 'AnalysisObj' for each timestamp: + 'AnalysisObj' : analysis object for this tracker theta - 'Wm2Front' : list of front Wm-2 irradiances, len=sensorsy_back - 'Wm2Back' : list of rear Wm-2 irradiances, len=sensorsy_back - 'backRatio' : list of rear irradiance ratios, len=sensorsy_back + to get a dictionary of results, run AnalysisObj.getResults() + Results dict has the following keys: + 'Wm2Front' : list of front Wm-2 irradiances, len=sensorsy_back + 'Wm2Back' : list of rear Wm-2 irradiances, len=sensorsy_back + 'backRatio' : list of rear irradiance ratios, len=sensorsy_back """ @@ -2835,43 +2867,43 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low', print('No trackerdict value passed or available in self') if not append: - warnings.warn('Append=False. Over-writing any existing `Results` in trackerdict.') + warnings.warn('Append=False. Over-writing any existing `AnalysisObj` in trackerdict.') for key in trackerdict: - trackerdict[key]['Results'] = [] - + trackerdict[key]['AnalysisObj'] = [] + if singleindex is None: # run over all values in trackerdict trackerkeys = sorted(trackerdict.keys()) else: # run in single index mode. trackerkeys = [singleindex] - + if modWanted == None: modWanted = round(trackerdict[trackerkeys[0]]['scenes'][sceneNum].sceneDict['nMods'] / 1.99) if rowWanted == None: rowWanted = round(trackerdict[trackerkeys[0]]['scenes'][sceneNum].sceneDict['nRows'] / 1.99) - - + + #frontWm2 = 0 # container for tracking front irradiance across module chord. Dynamically size based on first analysis run #backWm2 = 0 # container for tracking rear irradiance across module chord. - for index in trackerkeys: # either full list of trackerdict keys, or single index octfile = trackerdict[index]['octfile'] scene = trackerdict[index]['scenes'][sceneNum] name = '1axis_%s%s_%s'%(index, customname, scene.name) - if not trackerdict[index].get('Results'): - trackerdict[index]['Results'] = [] + if not trackerdict[index].get('AnalysisObj'): + trackerdict[index]['AnalysisObj'] = [] if octfile is None: continue # don't run analysis if the octfile is none # loop over rowWanted and modWanted. Need to listify it first if type(rowWanted)!=list: rowWanted = [rowWanted] if type(modWanted)!=list: modWanted = [modWanted] - + row_mod_pairs = list(itertools.product(rowWanted,modWanted)) for (r,m) in row_mod_pairs: - Results = {'rowWanted':r,'modWanted':m, 'sceneNum':sceneNum} - if customname: Results['customname'] = customname + #Results = {'rowWanted':r,'modWanted':m, 'sceneNum':sceneNum} + #if customname: Results['customname'] = customname try: # look for missing data analysis = AnalysisObj(octfile,name) - name = '1axis_%s%s_%s'%(index, customname, scene.name) + analysis.sceneNum = sceneNum + #name = '1axis_%s%s_%s'%(index, customname, scene.name) #defined above frontscanind, backscanind = analysis.moduleAnalysis(scene=scene, modWanted=m, rowWanted=r, sensorsy=sensorsy, @@ -2879,13 +2911,13 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low', modscanfront=modscanfront, modscanback=modscanback, relative=relative, debug=debug) analysis.analysis(octfile=octfile,name=name,frontscan=frontscanind,backscan=backscanind,accuracy=accuracy) - Results['AnalysisObj']=analysis + trackerdict[index]['AnalysisObj'].append(analysis) except Exception as e: # problem with file. TODO: only catch specific error types here. warnings.warn('Index: {}. Problem with file. Error: {}. Skipping'.format(index,e), Warning) return - + #combine cumulative front and back irradiance for each tracker angle - + """ try: #on error, trackerdict[index] is returned empty Results['Wm2Front'] = analysis.Wm2Front Results['Wm2Back'] = analysis.Wm2Back @@ -2894,171 +2926,162 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low', warnings.warn('Index: {}. Trackerdict key not found: {}. Skipping'.format(index,e), Warning) return trackerdict[index]['Results'].append(Results) - - print('Index: {}. Wm2Front: {}. Wm2Back: {}'.format(index, - np.mean(analysis.Wm2Front), np.mean(analysis.Wm2Back))) - + """ + try: + print('Index: {}. Wm2Front: {}. Wm2Back: {}'.format(index, + np.mean(analysis.Wm2Front), np.mean(analysis.Wm2Back))) + except AttributeError: #no Wm2Front + warnings.warn('AnalysisObj not successful.') + + self.trackerdict = trackerdict return trackerdict - def calculateResults(self, CECMod=None, glassglass=False, bifacialityfactor=None, - CECMod2=None, agriPV=False): - ''' - Loops through all results in trackerdict and calculates performance, - considering electrical mismatch, using - PVLib. Cell temperature is calculated - TODO: move into AnalysisObj so it works on a specific scene!!! Or - alternatively run multiple times, enabling to select a specific sceneNum... + def calculateResults(self, CECMod=None, glassglass=False, bifacialityfactor=None, + CECMod2=None, agriPV=False): + ''' + Loops through all results in trackerdict and calculates performance, + considering electrical mismatch, using + PVLib. Cell temperature is calculated + + + Parameters + ---------- + CECMod : Dict + Dictionary with CEC Module PArameters for the module selected. Must + contain at minimum alpha_sc, a_ref, I_L_ref, I_o_ref, R_sh_ref, + R_s, Adjust. If 'None' passed, a default module type is selected + glassglass : boolean, optional + If True, module packaging is set to glass-glass for thermal + coefficients for module temperature calculation. Else it is + assumes it is a glass-polymer package. + bifacialityfactor : float, optional + bifaciality factor to be used on calculations, range 0 to 1. If + not passed, it uses the module object's stored bifaciality factor. + CEcMod2 : Dict + Dictionary with CEC Module Parameters for a Monofacial module. If None, + same module as CECMod is used for the BGE calculations, but just + using the front irradiance (Gfront). + + Returns + ------- + trackerdict + Trackerdict with new entries for each key of irradiance and Power + Output for the module. + POA_eff: mean of [(mean of clean Gfront) + clean Grear * bifaciality factor] + Gfront_mean: mean of clean Gfront + Grear_mean: mean of clean Grear + Mismatch: mismatch calculated from the MAD distribution of + POA_total + Pout_raw: power output calculated from POA_total, considers + wind speed and temp_amb if in trackerdict. + Pout: power output considering electrical mismatch + ''' + + from bifacial_radiance import performance + import pandas as pd + + trackerdict = self.trackerdict - Parameters - ---------- - CECMod : Dict - Dictionary with CEC Module PArameters for the module selected. Must - contain at minimum alpha_sc, a_ref, I_L_ref, I_o_ref, R_sh_ref, - R_s, Adjust. If 'None' passed, a default module type is selected - glassglass : boolean, optional - If True, module packaging is set to glass-glass for thermal - coefficients for module temperature calculation. Else it is - assumes it is a glass-polymer package. - bifacialityfactor : float, optional - bifaciality factor to be used on calculations, range 0 to 1. If - not passed, it uses the module object's stored bifaciality factor. - CEcMod2 : Dict - Dictionary with CEC Module Parameters for a Monofacial module. If None, - same module as CECMod is used for the BGE calculations, but just - using the front irradiance (Gfront). + keys = list(trackerdict.keys()) - Returns - ------- - trackerdict - Trackerdict with new entries for each key of irradiance and Power - Output for the module. - POA_eff: mean of [(mean of clean Gfront) + clean Grear * bifaciality factor] - Gfront_mean: mean of clean Gfront - Grear_mean: mean of clean Grear - Mismatch: mismatch calculated from the MAD distribution of - POA_total - Pout_raw: power output calculated from POA_total, considers - wind speed and temp_amb if in trackerdict. - Pout: power output considering electrical mismatch - ''' - - from bifacial_radiance import performance + def _trackerMeteo(tracker_item): + keylist = ['dni', 'ghi', 'dhi', 'temp_air', 'wind_speed' ] + return {k: v for k, v in tracker_item.items() if k in keylist} + + def _printRow(analysisobj, key): + if self.cumulativesky: + keyname = 'theta' + else: + keyname = 'timestamp' + return pd.concat([pd.DataFrame({keyname:key},index=[0]), + analysisobj.getResults(), + analysisobj.power_data + ], axis=1) - trackerdict = self.trackerdict - - keys = list(trackerdict.keys()) - - - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1``34 - # TODO IMPORTANT: ADD CUMULATIVE CHEck AND WHOLE OTHER PROCESSING OPTION - # TO EMULATE WHAT HAPPENED BEFORE WITH GENCUMSKY1AXIS when trackerdict = cumulative = True - # if cumulative: - # print("Add HERE gencusky1axis results for each tracekr angle") - - #else: - # loop over module and row values in 'Results' - temp_air = [] - wind_speed = [] - Wm2Front = [] - Wm2Back = [] - rearMat = [] - frontMat = [] - rowWanted = [] - modWanted = [] - sceneNum = [] - keys_all = [] - dni = [] - dhi = [] - ghi = [] - - for key in keys: - try: - for row_mod in trackerdict[key]['Results']: # loop over multiple row & module in trackerDict['Results'] - keys_all.append(key) - Wm2Front.append(row_mod['AnalysisObj'].Wm2Front) - Wm2Back.append(row_mod['AnalysisObj'].Wm2Back) - frontMat.append(row_mod['AnalysisObj'].mattype) - rearMat.append(row_mod['AnalysisObj'].rearMat) - rowWanted.append(row_mod['AnalysisObj'].rowWanted) - modWanted.append(row_mod['AnalysisObj'].modWanted) - sceneNum.append(row_mod['sceneNum']) - if self.cumulativesky is False: - temp_air.append(trackerdict[key]['temp_air']) - wind_speed.append(trackerdict[key]['wind_speed']) - dni.append(trackerdict[key]['dni']) - dhi.append(trackerdict[key]['dhi']) - ghi.append(trackerdict[key]['ghi']) - except KeyError: - pass + - # trackerdict[key]['effective_irradiance'] = eff_irrad - - data= pd.DataFrame(zip(keys_all, rowWanted, modWanted, sceneNum, - Wm2Front, Wm2Back, frontMat, rearMat), - columns=('timestamp', 'rowNum','ModNumber', 'sceneNum', - 'Wm2Front', 'Wm2Back', 'mattype', - 'rearMat')) - - if self.cumulativesky is False: - data['temp_air'] = temp_air - data['wind_speed'] = wind_speed - # If CECMod details aren't passed, use a default Prism Solar value. - if CECMod is None: - print("No CECModule data passed; using default for Prism Solar BHC72-400") - #url = 'https://raw.githubusercontent.com/NREL/SAM/patch/deploy/libraries/CEC%20Modules.csv' - url = os.path.join(DATA_PATH,'CEC Modules.csv') - db = pd.read_csv(url, index_col=0) # Reading this might take 1 min or so, the database is big. - modfilter2 = db.index.str.startswith('Pr') & db.index.str.endswith('BHC72-400') - CECMod = db[modfilter2] + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1``34 + # TODO IMPORTANT: ADD CUMULATIVE CHEck AND WHOLE OTHER PROCESSING OPTION + # TO EMULATE WHAT HAPPENED BEFORE WITH GENCUMSKY1AXIS when trackerdict = cumulative = True + # if cumulative: + # print("Add HERE gencusky1axis results for each tracekr angle") - kwargs = {'dni': dni, 'dhi': dhi, 'ghi': ghi} - - # Search for module object bifaciality - # TODO: move into analysisObj so it works on a specific scene and can iterate over them. - if bifacialityfactor is None: - bifacialityfactor = trackerdict[data.timestamp.iloc[0]]['scenes'][data.sceneNum.iloc[0]].module.bifi - print("Bifaciality factor of module stored is ", bifacialityfactor) - - results = performance.calculateResults(CECMod=CECMod, results=data, - wind_speed = data['wind_speed'], - temp_air=data['temp_air'], - bifacialityfactor=bifacialityfactor, - CECMod2=CECMod2, agriPV=agriPV, - **kwargs) - - #ii = 0 - # Update tracker dict now! - # TODO: match results index to trackerdict index. consider multiple results per index - for key in list(results.timestamp.unique()): - results_sub = results[results.timestamp==key] - #if results_sub.__len__()>1: - # raise Exception('Multiple results per timestamp. Investigate the cause and ' - # 'submit an issue to cdeline') - # TODO: WHAT TO DO WITH MULTIPLE RESULTS PER TIMESTAMP - trackerdict[key]['POA_eff'] = np.mean(results_sub['POA_eff']) - trackerdict[key]['Gfront_mean'] = np.mean(results_sub['Gfront_mean']) - trackerdict[key]['Grear_mean'] = np.mean(results_sub['Grear_mean']) - trackerdict[key]['Pout_raw'] = np.mean(results_sub['Pout_raw']) - trackerdict[key]['Pout_Gfront'] = np.mean(results_sub['Pout_Gfront']) - trackerdict[key]['Mismatch'] = np.mean(results_sub['Mismatch']) - trackerdict[key]['Pout'] = np.mean(results_sub['Pout']) + #else: + # loop over module and row values in 'Results' + keys_all = [] + self.CompiledResults = pd.DataFrame(None) + bifi_factor_internal = None + + if not self.cumulativesky: - #ii +=1 - - else: - # TODO HERE: SUM all keys for rows that have the same rowWanted/modWanted - - results = performance.calculateResultsGencumsky1axis(results=data, - agriPV=agriPV) - results.to_csv(os.path.join('results', 'Cumulative_Results.csv')) + if CECMod is None: + print("No CECModule data passed; using default for Prism Solar BHC72-400") + #url = 'https://raw.githubusercontent.com/NREL/SAM/patch/deploy/libraries/CEC%20Modules.csv' + url = os.path.join(DATA_PATH,'CEC Modules.csv') + db = pd.read_csv(url, index_col=0) # Reading this might take 1 min or so, the database is big. + modfilter2 = db.index.str.startswith('Pr') & db.index.str.endswith('BHC72-400') + CECMod = db[modfilter2] + + for key in keys: - self.CompiledResults = results - self.trackerdict = trackerdict + meteo_data = _trackerMeteo(trackerdict[key]) + + + + + try: + for analysis in trackerdict[key]['AnalysisObj']: # loop over multiple row & module in trackerDict['AnalysisObj'] + keys_all.append(key) + # Search for module object bifaciality + if (bifacialityfactor is None) & (bifi_factor_internal is None): + try: + bifi_factor_internal = trackerdict[key]['scenes'][analysis.sceneNum].module.bifi + print("Bifaciality factor of module stored is ", bifi_factor_internal) + except(TypeError, KeyError): + bifi_factor_internal = 1 + elif (bifacialityfactor is None) : + try: + bifi_factor_internal = trackerdict[key]['scenes'][analysis.sceneNum].module.bifi + except(TypeError, KeyError): + bifi_factor_internal = 1 + else: + bifi_factor_internal = bifacialityfactor + power_data = analysis.calc_performance(meteo_data=meteo_data, CECMod=CECMod, + cumulativesky=self.cumulativesky, glassglass=glassglass, + bifacialityfactor=bifi_factor_internal, CECMod2=CECMod2, + agriPV=agriPV) + self.CompiledResults = pd.concat([self.CompiledResults, + _printRow(analysis, key)], ignore_index=True) + except KeyError: + pass + + + + + else: + # TODO HERE: SUM all keys for rows that have the same rowWanted/modWanted + for key in keys: + try: + for analysis in trackerdict[key]['AnalysisObj']: # loop over multiple row & module in trackerDict['AnalysisObj'] + keys_all.append(key) + self.CompiledResults = pd.concat([self.CompiledResults, + _printRow(analysis, key)], ignore_index=True) + except KeyError: + pass + + + self.CompiledResults = performance.calculateResultsGencumsky1axis(results=self.CompiledResults, + bifacialityfactor=1.0, + fillcleanedSensors=True, agriPV=False) + + self.CompiledResults.to_csv(os.path.join('results', 'Cumulative_Results.csv')) + + self.trackerdict = trackerdict + return self.CompiledResults + - return results - def generate_spectra(self, metdata=None, simulation_path=None, ground_material=None, scale_spectra=False, scale_albedo=False, scale_albedo_nonspectral_sim=False, scale_upper_bound=2500): ''' @@ -4284,6 +4307,7 @@ def __init__(self, octfile=None, name=None, hpc=False): longer time if parallel processing. modWanted : Module used for analysis rowWanted : Row used for analysis + sceneNum : Which scene number (in case of multiple scenes) """ self.octfile = octfile @@ -4291,7 +4315,32 @@ def __init__(self, octfile=None, name=None, hpc=False): self.hpc = hpc self.modWanted = None self.rowWanted = None + self.sceneNum = 0 # should this be 0 or None by default?? + self.power_data = None # results from self.calc_performance() stored here + + + + # store list of columns and methods for convenience / introspection + # TODO: abstract this by making a super class that this inherits + self.columns = [attr for attr in dir(self) if not (attr.startswith('_') or callable(getattr(self,attr)))] + self.methods = [attr for attr in dir(self) if (not attr.startswith('_') and callable(getattr(self,attr)))] + + def getResults(self): + """ + go through the AnalysisObj and return a dict of irraidance result keys, + This can be passed into CompileResults + Returns + ------- + Results : dict. irradiance scan results + """ + keylist = ['rowWanted', 'modWanted', 'sceneNum', 'name', + 'Wm2Front', 'Wm2Back', 'backRatio', 'mattype', 'rearMat' ] + resultdict = {k: v for k, v in self.__dict__.items() if k in keylist} + return pd.DataFrame.from_dict(resultdict, orient='index').T.rename(columns={'modWanted':'modNum', 'rowWanted':'rowNum'}) + + + def makeImage(self, viewfile, octfile=None, name=None): """ Makes a visible image (rendering) of octfile, viewfile @@ -5228,6 +5277,81 @@ def analysis(self, octfile, name, frontscan, backscan, return frontDict, backDict + def calc_performance(self, meteo_data, CECMod, cumulativesky, glassglass=False, bifacialityfactor=1, + CECMod2=None, agriPV=False): + """ + For a given AnalysisObj, use performance.calculateResults to calculate performance, + considering electrical mismatch, using PVLib. Cell temperature is calculated + + Parameters + ---------- + meteo_data : Dict + Dictionary with meteorological data needed to run CEC model. Keys: + 'temp_air', 'wind_speed', 'dni', 'dhi', 'ghi' + CECMod : Dict + Dictionary with CEC Module PArameters for the module selected. Must + contain at minimum alpha_sc, a_ref, I_L_ref, I_o_ref, R_sh_ref, + R_s, Adjust. If 'None' passed, a default module type is selected + glassglass : boolean, optional + If True, module packaging is set to glass-glass for thermal + coefficients for module temperature calculation. Else it is + assumes it is a glass-polymer package. + bifacialityfactor : float, optional + bifaciality factor to be used on calculations, range 0 to 1. If + not passed, it uses the module object's stored bifaciality factor. + CEcMod2 : Dict + Dictionary with CEC Module Parameters for a Monofacial module. If None, + same module as CECMod is used for the BGE calculations, but just + using the front irradiance (Gfront). + + Returns + ------- + performance : dict + New dictionary with performance results for that simulation. Keys: + POA_eff: mean of [(mean of clean Gfront) + clean Grear * bifaciality factor] + Gfront_mean: mean of clean Gfront + Grear_mean: mean of clean Grear + Mismatch: mismatch calculated from the MAD distribution of + POA_total + Pout_raw: power output calculated from POA_total, considers + wind speed and temp_amb if in trackerdict. + Pout: power output considering electrical mismatch + """ + + from bifacial_radiance import performance + + #TODO: Check that meteo_data only includes correct kwargs + # 'dni', 'ghi', 'dhi', 'temp_air', 'wind_speed' + + if cumulativesky is False: + + # If CECMod details aren't passed, use a default Prism Solar value. + if CECMod is None: + print("No CECModule data passed; using default for Prism Solar BHC72-400") + #url = 'https://raw.githubusercontent.com/NREL/SAM/patch/deploy/libraries/CEC%20Modules.csv' + url = os.path.join(DATA_PATH,'CEC Modules.csv') + db = pd.read_csv(url, index_col=0) # Reading this might take 1 min or so, the database is big. + modfilter2 = db.index.str.startswith('Pr') & db.index.str.endswith('BHC72-400') + CECMod = db[modfilter2] + + # Search for module object bifaciality + + + self.power_data = performance.calculateResults(CECMod=CECMod, results=self.getResults(), + bifacialityfactor=bifacialityfactor, + CECMod2=CECMod2, agriPV=agriPV, + **meteo_data) + + else: + # TODO HERE: SUM all keys for rows that have the same rowWanted/modWanted + + self.power_data = performance.calculateResultsGencumsky1axis(results=self.getResults(), + agriPV=agriPV) + #results.to_csv(os.path.join('results', 'Cumulative_Results.csv')) + + #CompiledResults = results + #trackerdict = trackerdict + def quickExample(testfolder=None): """ Example of how to run a Radiance routine for a simple rooftop bifacial system diff --git a/bifacial_radiance/modelchain.py b/bifacial_radiance/modelchain.py index 236832f2..c5414657 100644 --- a/bifacial_radiance/modelchain.py +++ b/bifacial_radiance/modelchain.py @@ -224,8 +224,9 @@ def runModelChain(simulationParamsDict, sceneParamsDict, timeControlParamsDict=N # What was before: # analysis = trackerdict[time]['AnalysisObj'] - - analysis = demo.trackerdict[list(demo.trackerdict.keys())[-1]]['Results'][0]['AnalysisObj'] + # TODO: this is only returning the first AnalysisObj for the trackerdict entry. + # check this for more complicated scenarios with multiple AnalysisObjs... + # analysis = demo.trackerdict[list(demo.trackerdict.keys())[-1]]['AnalysisObj'][0] diff --git a/bifacial_radiance/performance.py b/bifacial_radiance/performance.py index 629213b4..01783372 100644 --- a/bifacial_radiance/performance.py +++ b/bifacial_radiance/performance.py @@ -322,8 +322,8 @@ def calculateResults(CECMod, csvfile=None, results=None, if 'timestamp' in data: dfst['timestamp'] = data['timestamp'] - if 'ModNumber' in data: - dfst['Module'] = data['ModNumber'] + if 'modNum' in data: + dfst['Module'] = data['modNum'] if 'rowNum' in data: dfst['Row'] = data['rowNum'] if 'sceneNum' in data: @@ -341,8 +341,8 @@ def calculateResults(CECMod, csvfile=None, results=None, if 'timestamp' in results: dfst['timestamp'] = results['timestamp'] - if 'ModNumber' in results: - dfst['module'] = results['ModNumber'] + if 'modNum' in results: + dfst['module'] = results['modNum'] if 'rowNum' in results: dfst['row'] = results['rowNum'] if 'sceneNum' in results: @@ -440,8 +440,8 @@ def calculateResultsGencumsky1axis(csvfile=None, results=None, ].str.strip('[]').str.split(',', expand=True) - if 'ModNumber' in data: - dfst['module'] = data['ModNumber'] + if 'modNum' in data: + dfst['module'] = data['modNum'] if 'rowNum' in data: dfst['row'] = data['rowNum'] if 'sceneNum' in data: @@ -457,12 +457,12 @@ def calculateResultsGencumsky1axis(csvfile=None, results=None, rearMat = pd.DataFrame.from_dict(dict(zip( results.index, results['rearMat']))).T - if 'ModNumber' in results: - dfst['module'] = results['ModNumber'] + if 'modNum' in results: + dfst['module'] = results['modNum'] if 'rowNum' in results: dfst['row'] = results['rowNum'] - if 'sceneNum' in data: - dfst['sceneNum'] = data['sceneNum'] + if 'sceneNum' in results: + dfst['sceneNum'] = results['sceneNum'] else: @@ -483,10 +483,11 @@ def calculateResultsGencumsky1axis(csvfile=None, results=None, POA_eff = [] # NOTE change 26.07.22 'row' -> 'rowNum' and 'mod' -> 'ModNumber + # NOTE change March 13 2024 ModNumber -> modNum for rownum in results['rowNum'].unique(): - for modnum in results['ModNumber'].unique(): + for modnum in results['modNum'].unique(): mask = (results['rowNum'] == rownum) & ( - results['ModNumber'] == modnum) + results['modNum'] == modnum) cumBack.append(list(filledBack[mask].sum(axis=0))) cumFront.append(filledFront[mask].sum(axis=0)) cumRow.append(rownum) diff --git a/docs/development/(development) Trackerdict multi-object test.ipynb b/docs/development/(development) Trackerdict multi-object test.ipynb new file mode 100644 index 00000000..a4404b04 --- /dev/null +++ b/docs/development/(development) Trackerdict multi-object test.ipynb @@ -0,0 +1,1295 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multi-scene, custom object agri-PV functionality test \n", + "## 1-up and 2-up tracker rows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Initial setup" + ] + }, + { + "attachments": { + "image-4.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAKtCAYAAADy0rAMAAAgAElEQVR4Aey9WxIkuc2lqR38m+jH3oHMeqX9PIuZTWnsSPOVTqJId179FgizEEAQd4IgKjKr9I9//vOf/+r5/p//83+K/E7/X//rf/3FA91pNVx+aG/k+69//esvOcfdVi1O8WM78sh/vvBFnho98mlNPthDN+tRiB5gSU+0XeL5BVrMAzmLdOXC60f7rI/O3PU53prbkh812aifdY1fdNevOPKTGcgMZAYyA/sz8I+jxsyeD0Bq1r4exaOeki1/3JQKZMSrj6A/Hugo0djrhdLFt1e2lb+k32NwvKYTHS28NR2/Qo81q7hF04eaA2pPOaXeWnLkZ+F4i2wvT6t+Yha/bHi8/w4u/yczkBnIDGQGtmbgj4HLm7fjI49Ar8zX+WM+Wc/EjQ7Bmp4WnprsSvqRjyvtuC6P3fEaj9PfgnteGRKBZzG47NYuk8ozA5mBzEBm4F9bBq6zRv+L+/HBZz2TC3T4wxn1tfBEmSvWrUPBjC8eu+Ous0Z3nifj8j/6V6JFHl+LPz+ZgcxAZiAzsDcD0wMXD5Y3cOE1euT7lTX5EFwVc4vOFp5V/rgeBirB+FVJiybf2HPZVbjH7rjrP6I7XwmXbIn+ZtredpPaMwOZgczA72ZgeuA6e1xqD9qZXNyv6anRo/zd6yf4KR9W5MH16OpIpwYnPuAMU86/wn6rDs+54y5fozvPDE4OBGt6dvjgOh2v+QCdM0yYGcgMZAYyA2szkANX57+lycPUC3sevV7dLfw8+PJD/D4IsNeiRzzoKPH7nuMl3t002S993a7vO70HJ3/k1GWhweN74Ct8QBfQdTrOfg2ubS+pLTOQGcgMZAbIQA5cLx649JDycArncXdcBw1dOPwUwNEgAO8RdB9KfGf7JZlVNNkufV2/7zvdcc9RzCe5FT+6oqzz+B44coLQZqHrdLxHLzWSMDOQGcgMZAbmM/DHwNXTjK/mHX00Zvxc+QDO+MGDXfKHPekX7nZUHr5O/D//zTmvJcffkp+rfJ5vL6khM5AZyAxkBshADlwHv3CVBpw7HmUd1lN8uSP+1TZ9YHF8tZ1V+vzs3V+nr7IV9dAoEmYGMgOZgczAXAZ+euCqPVj8UuQQPD5IV61rvl5lv2bnyC/tHe3XdPbSe88GvyLstXsFv2LTl88VNrERbeNDwsxAZiAzkBnoz8BrBi4egVnII9IKZ+31yPsA0CMn3hnZXltub0R2VMZj1PmhB1zlD+0Iuh7Hj2S+vqc8cCcUq/CYz/72khKZgcxAZiAzQAY+MXDxUPDw+hqcB0WBQ9PDwgech1X8+rC+As48/jOyI7Fhb0R2VAabgpw1ukQDP4Oux/EzuS/uU/9e6zGXvnb+xDMDmYHMQGagPQOvHLgYmBQmuKB/4oPMY+mPB7Qa7OGt6eihyx7fHjnxInelzy22aufQG9/KGD1Xjo/49GUZcuMx+h1LPDOQGcgMZAbaM/DHwEWDjdAbruORj7XzXInL/pX27rBFjntiRWaHvzU/GIQpxR22v66Tc6vleFf8bjfispmfzEBmIDOQGejPwKcGLj0GVz9Oux69ml5/AGs8kY5MpPesGaAE0adygy6aPiWdNXqJN2n/+U9XKA/kWfDKvLjdiOu85Ut+MgOZgcxAZqAvA58buK58mO6w5Q/grH0ezxE9KjPJMQzgV0kXPKW91bQrba32Peojp8Tk58WgG2VWrN2u4667r80kd2YgM5AZyAzkwHXw3+HyB2YnXnvUSjadV3iJh8e4BFXyTtfadbh+p1+J1+Kq+QA/sMb3JDp5rvkUY9Fa5xb50RP5I19p7e3P912n484D7joSzwxkBjIDmYF6BnLgevnAxSMchyg9lKLpo8cRPh7K2gN99sAivxPWfDuyOSJzpG/3nvvL2XCGPbZnzsvbgtt0nY47j3BicD2JZwYyA5mBzEA5AzlwPWDgig8Zax5gh/4A8uBpXx/kWiHyzu/6nd6Ll3T36mjl9/yAt8rexaf8+Ed+lHLGebifzse+05z3CI/24XWdjrNfgq4r8cxAZiAzkBn4ewb+GLhKjfROmjd7x1f5tFqn9LX4pqEAPgYEoHQI10e4PvAewVbbRzp27cm3s2/JdmtM4uNT0rOLVoup115rnL16d/OTc2rU14lnBjIDmYHMwJ8ZyIFr8f/9jD+eR4MVQ5XzcDQjD6XbHZHfKVMbTJzu9pUTvsqJ75Vw6eFT2t9Fc/8d77Un2V6ZJ/DHnPs5sJcwM5AZyAxkBv6TgZ8euI4erdIj6DQflBgOBPXxNXxA7R/ZXbUnX93fVXpH9ODLEVRe2CePWl+Vr5VxjejqkVFeeviv5v33oeX/ZAYyA5mBzMAfGXj0wLXqoeAhjw8VQ5DsRFxr+IXHr7KIf85LdtkDoov1KKzFMqrvCjn32fErbO+04bE4vtMmur3msM3eGezlL+lDh2Bpn3uQMDOQGcgMZAb+k4GfH7jiIMVa6XFcj4o+wPjQxHXpERKtle9IXjpm9dT076Djb4Q7bF2pM8bDeqUPPlgJpwbdRq/dXn63BY4OQWjAfzuZ/5MZyAxkBjIDf2QgBy779YoHowWWHhrJ1egtOlt4jh66Fvk7eNxnx3f4sjv/7rPH4rjzzOK6rbM6dsiX4qWzuD1oCTMDmYHMwK9nYGjgotl6Y53Bj/RpD936J3zh/PLEmv1VEH/cdqvuFtkWnlZ7X+GLOWFdi0/7tb0zul/6M96n7I/E6zLg/EqmHHhs2ufrdMfZj9B5SrjnO/HMQGYgM/CrGXjEwKUm7cMTAxXNWw0eWoTwrIT+oPTqbZFt4em1+3b+mBPWtbi0X9uD7jUlmtbxA+/TYUu8tRjIA7GX+Mj3kR3ncbykz2nYTZgZyAxkBn45A0MDlzfTGl5r3Gr+7AnnKxq4oH+0xo7ozgd9Jex5TEbs9uonX0e2WniO5O/eizmJ61b/qBXqxCE6vLagfQ3uiNHPxPHW3LlPiWcGMgOZgV/LwNKBi0FIDVi4mjI0oNOUbHhJvNbiaW3ib+RbEZ90uB7h5Jgc+vrpefJY3NcjOvFF6LXkuhL/57/vlXJayis0YMwXchFGvrM155MwM5AZyAz8UgaaBy49ajRSHjitab7QBPnUcPTUGjv7X4Ur4vZ8O67ck3flT/gb8hhzEtceC/VV4hGf6HzfEPvVPp7lpiWv6KjxHsXE+SXMDGQGMgO/lIGmgYvmGh92EuUPfKnRIl/aO6KNNPMjfU/aa4kt5i3mX/sMVDoL4mvRDe8ToccJfubn22M+i++Kfe5zzRb1GGGN3+nxfLCVMDOQGcgM/EoG/hi4YiNl7Y1TifF1D46+CGs6Ih/rVfw1Pavo8vdI11E8DFKS14d1S/7Re2b/yLeRPbfbgtdsKFbJx1hrOmt6foHuOZmJl1xLn+uJa9+bxf99wPk/mYHMQGbgRzKQA9c///P3WmYfj5J86bHyX2wYLEqyDFja06ekqyQnmnj51nh20LHZCnt9qOnt1fMlfs/Jjrikf4de1Xd+MgOZgczAL2Wge+Dy5ltrxkd0fyDAXafj7EfoPI5HPtbOczXOgAWUT3zkiz6rfCJeh6t0t+hxuy14TadkS3s1nSXeX6F5Tt4Ss//DhHzOT2YgM5AZ+IUMTA1cvQ3eHwfHa3qcx/FV/DU9Tm+xG/lZ87AI8tGePvDsgL0+r/LB7bbgbtf5nb4T53x22viCbs5GsfBpiQvelnp33sQzA5mBzMAXM5ADV/gjRT0u/pjw2ES68zjeyucyq/Fen1fZd7stuNt1fqfvwDVo5bDV/kfpnI0aYM95eMNskXP+xDMDmYHMwNcykANXGLj0MOiB4VHmsRFseTR6eXbo3e1zLUa324K7Hud3+gwunchznlxg0fVhP+HfBzByNpobch3z7OfiuPMnnhnIDGQGvpaB6sA12mSvkvMHGhzb3sShRcgvHOLlYQFGeQ496jhbux7hfM/kvrZP3J4PxVij+97KXOgcV+p7ii7qUzDmuNVH7oP4hZOrUX2tduHzGBLPDGQGMgNfzMAnBy6auEM9IjzwDFbQgDpglxE+8+C4LLadFm19dV2LvUYn77+Yq54aUN2WarZHB7zSBT4CdVYjviD3b+H8n8xAZiAz8OEMvHbg4lGIj7YejtrXzxH5Frji4Y9+ttj9Ck8t9ho9xr0i/1Hnm9fU8coYpNP1cTZOq+EMfj0y0sUHvazxxdeJZwYyA5mBt2fgj4GLxrcC9jbfM5tq6uhkoJKMPqyBop3pO9rHjqDz1ejO43gvv8v+Ck6OjuLlHDhfwSP+0h52IizxPoXmzeUpPrkf5HLkvknmf//v//23c4y6PAeJZwYyA5mBN2fgtQOXJ52HmIfZH4URnIck6qvRazZ6+Wt6vkwnR6UYOVfOmnUOXH//C+6l/O2mHZ1dyTbnKKhhqzRwncm5jsQzA5mBzMCbMrBt4Co1zhmaJ7W30ffaRb+gy9bozuN4L7/L/hLug5TjOnPPg+85vQX3s3C8RfYuHq/5Xh8Uo8uQO6fN4PFsyGnUiR8zsbhs4pmBzEBm4K0ZuGTgqjVjmjP7EbIfofP5ntMdr/E4fRUuuyVdNXqJN9I8lhY8yj91rVg0COgj2JMjz8Nd8bkPjt/lD3Y9j96Y2L8Suv3WX7TkHzEI5iczkBnIDHwhA9sGLv6JmoeUBlpq9torfUu8NGP4nQdahDUep6/CZbukq0Yv8UZajOdsHeWfsKYedGmE8xE+4p/nYER+hYz74PgK3TM65As5ntEzK6sz1pAFHNH3//4///ev4YuaAWpPnwjZdwjPGc33wV3Wcd8v0bV/RNdeab9Ec13sOwR3PnDfE631Izm+rTLO1yLb41vUdyR7tIePLTzwJswMrMjA0MDF40kDZe1QztH0hcNbgv5YOV7iFa3G43THXU+N7jwzuPSX5Gv0Em+kuc8teJS/e01dULBn/rTkyvNQ09eipybbQncfHG+R3cGjPOsR2aH7SGfMs3zgG3/V+p//+Z8u/0rxoDvhf/Ocufh2LuidEdbO3fnEo49Dl4PX950Gr+uIOGt40YUeYI3O/tfh3wau2DzVaNXIgTyeDpUkGjIJY90C/bFyvEX2Sp5Sbmr2a7wxl8oXuTzS5Xk5w2t6nO46nD6DE4egLha6HIe2GhLPkV5y7zzICTq9BXdZx1tkv8qjPOi8NWjFYUsx9+S5VDfIay+/mYOsgd+uAb2f1EAN1z4feB2W9iLN1+AO3YbTI/4Pf4T8wSzhCKtx8lnxcPhj5fgK3St10OxbdJI/8YJLnoMWnUNiv6bXc9KC1/Q43fU4vRWXvHjxXVDxiOYxao2tVt0jfNFG9A+f8BEbyMEPvQW6rOMtsjM8I77O2GuR5fyV3zho9f6qJXtnMfp5Jv7bj26ef57/W2rg3wOXP5pqdKwVhDdbDVm+PmqMPECRv7SGN8IS7900+VjygZxpDxxIHoEl+SNazMvZ+kgXe64DWgskJsFSkbfowHYL7yiP/JMdyctP8KgPX2r7kd/XLuu48+zAyf2Iz6v8IV7p49esOGj12uJ+nMVVqruk5aObNZA18PQa+GvgckdplN5Uob0dnjVzj6/GqwdPfIJ8yR+PIWvX9wa8FDMxEpvHUeL3/atw/MBH5V+2oQvyvcqnaAf7EUa+K9bygRwd2XNfIx81zsAV93vXstUiE/3Gj4T54GYNZA08uQb+cdTkaLYtTfAtPEfx1mKQjA8d/qjrcKNczUaNHuXvXsd4KWD8ekIc8Tzwzc/D/RTOF96rIfYjvNoP6ld25cuRffcVPuRXDVroPfIlnit+IUuNJswHN2sga+CpNfDvvzR/1OhoaLHBQQey36ILmZ3wyJ8jH+NDroOLtJ1+36E7xqeY7/ADm7Wzi35qHX2tnW1NJzavgO6D4yO2kT+SFY/2gd6EkHM9jrPvEHkGrdk/QnTdZ3g8Z/hLseFnwnx4swayBp5UA3/7txRpZA5pxDQ337sbd996/NNj7fw85hyO1mexYfuM72n7xCqoeFv9O4uXfc9rq+7Ihw73D7+dBl+Uf+La8+P4Tl+VM9mirkdtUSue+1FdrXLkSLaRgSYYacSYMB/ZrIGsgSfWwM8NXDzaatjgOhia9xksNfozmafsy3fF6o9nb+wef4xLe3zjXs9a/kkPfvbIPpmX3ES4w2fZoOFgb8QOOu74VavkNzRB4pGPrPE3YT64WQNZA0+rgVcNXDRbGq0gNCB7eqyFx8dba3/IdSDIREgTd3q043tPwYkRSIzAET9LuYh6yE3kjesoxxp/OZ8jf1t1ovsJ0PPj+CrfyInyxle6offa0TkwaPXKzvLL9qgOYk/43zrIXGQusgbur4HqwLXjQRhtoGdyNGdB/6rAtBaUDmI609eyj67Rx+zMxoxev1hndu7c93OTH5zTKp88h46v0v9GPcoD35r/1M/KYQubO88BG4qLGBLe/8jkGeQZZA38pwZeOXDpoaZx+4DFcAWsPSgr6DR3/Fih03XM6PXidp1PwP288BO/ZmJGh0PX57jz/BquPPCNsYuuM2HQEow8o2tsCo7qOJPDhviorYT52GcNZA08pQYePXDpcabJxoeaNYmErwV6Y27hL/GgY8UDgq6SHdGIFXgWM/uCNZ1X09132ca3s9hX+bninFb5cqce8u35EK7z8UErDlsj/7V4j7Nk1/dHcfRGeerL70Li+fBmDWQN3FkD1YErNrCda5o/jzKQZsqaRLkv8KDD91bjvbZq/CVf4fVYwdkrya2O0fWtsEsM0uvnF2NZYQvfS7rZi3Cl3aj76WudjXzUufiwdaXfq/IvPV5figHdxMh+wnx0swayBu6ogVsHLho+j3KEJITmWXoIaKqCpf2VtF5bNf6Sr4pddHKg2IUL1vSsjK2ka8Yuvrtej9tx8czYchsRxw/lMe7ttFuy9TSacsKgVfJt9letks5IW3Xu0qN4+EY70BP+N0eZi8xF1sC1NXD5wMVAAdSB8yiqSWodmyXr+EhDB57twzcKVz0Osk/8EZZ8W2m3pL9Gu9LuSlue06N6Utwr7dby+CQ6d41Ge/ZHh8rPTv9X5p+Yav6yn/DaRybznfnOGvhPDXQPXC0NGB4ePpJda4Q1em8z7uWv2d1JJyfylbwA3X/Hd/pzlW7imbGHjgiPdMJ7xPPkPdWL/FONjPpJfbXouOJXLeJp8ecoZs42wpqM5yHxHAKyBrIGrq6B7oFLzYwGR2PjUWCYACoY4QQFfyvEjmCLTC9/i85ZHnLhUPlAL7kRdP8dh/fNkHhmYkBHhDWdzlfjeSpdvlMbsz6iR/BMl+ye8czsE9eMDmT9fB1nP0Li93wkno9u1kDWwFU18LeBi8YVmxVrDQ7CfYAAj04jMwrxRbBFRy9/i07nOfOD3EhGuOdDNK1dX8Tdf8cj36+uPSeOfykfiovaWRVXrMNVekf04AvnN6IDGXREyD4Qm6wFoSXMxzZrIGvgqhr428DlTUmNTGsGKqCc80dBa5f7Ak4Tb4mFvJATDk+y5LBFDzYjbJH9BZ6YF9a12NmPsMZ/F13+UTM77hJ/MT7+fa0d8XquXb/uhvacNou7Lcdb9XrOE89HN2sga2B3DfwxcKkp0qx8iACPzoh3dRPF/t2QBl7yg3wIKidA4SX+1hxhM8KSzl+kxbywruWC/Qhr/HfQ5Rv3apf9uweu2r2YjTeeK+tWveQ9YT60WQNZA1fUwD98eAAvGT5rYmp2Zzxv2/eYarmJMblM3Dtb82BEeCb3K/sxL6xr8bMfYY3/ajqDOnblp3D8hT4Lrxy4oq/qJZG2ak2eIjzTL378KvW6pOXjmzWQNbCjBv4auFCuZiX8rGmN7MfGyHpEFzLoiJB9IPusjyDDlWTAd+XkyI837JFXwVl/yfVKnSWfdusv2RSNOzZaS/gd9TO4rfojw3iW0h9ttq5HYz3Sv0unn0/i+eBmDWQNrK6Bf0hhbLBHzW5mjwcjwit0YrNmS/s8+Dxgyk2NP+n//HduyKvgbE6oxZU6Sz7t1l+yKZpf3hrPER2/ncd17hi40O8278Tlzy77xJowH9qsgayBHTXwx9/hank0W3hqDZEHI8Iafws96mJdk9U+/8TOgAWNQasmm/T/DFmeB/It6PQznNxT1M4/qtN1HOG79ddsE6tgjadGL+UXffyRYU12hD5yF0o+jtg+ktltg5wmzAc3ayBrYHUN/DFwHTW6FXv+0Dm+QnfUERuzHhDxiK4k+oN/Jhv3W9ceo+Ot8l/i4zx4yHUGvfGtyqFfol4fzviJ84yvdR99QMnh/45BC79Gzge/0LEDeh526CeGhPnYZg1kDayugc8OXAxUDj15aty15l2j9zZ4bETYq+fN/Mq//FfuGbZG4/E89uqQbcl7DQjv1XMnv/u+6o8PYzxuI+4drZE74und03lFmRIt8qxYE0/CfHSzBrIGVtXAJwYuHnVB/8YkrWjEPTp8QHC8R8ebeIlRPpfOYTYW9Aue6Yo8qgVkvC6grYDoXaHLdaBXkF+1dgxc2MF2zCF0IPslOfbgHYXS7bI1vdEHlxnBZQedCfPBzRrIGlhRA9sHLjWu0jc2QXginbX2wXnMtQYXVEKAJEc8Z7rRewbRE6HL+Z7TfwWP+dc57IqdXLt+0bT2umAf/hqErwfKjvipt9l48V86icGHrJFBa1W87pvnqDdm98f1OI6tFt3k3uV7cPcHu8ijO2E+uFkDWQOzNfCagUsNkAcI6MFrX2sa5Q4YGzNrtwUtNm7n+Soez2N3nORadmo14T7AX4PO24LL5uqYqRvXy8DV4lOJZ1W8+Fay0UNzf47klIMzm+Lh/3D7jLdmy/1xHcL9HBLPBzdrIGtgpgYeM3DRDNXk9JCx5iGFTrDaFw4f0BsmtFVQuktf1+/7Tv8SzpkAOZPSeeyM289aOH6UbEZePyfwklyJ5nGX9ntp+AYkDgatkV+13Afii9B5Ig5vpGut+Ev0Vhq6BaMMtNZaauWLdnxd88d1cyYJ88HNGsgaGK2Bf9SajTekK3H5w4Pm0ANs8bnG00v32F3Wcef5FZz4Y7xOdzzyHa2RE4x8TlN9eF1EXl+7zhru/CVc9rAvuyWeGRqxaMASPjto4ctovJInXnThI+sR6P70yrs/fgZO79XZyk/sCfPBzRrIGhipgUcMXLXBSo1QQcWG2NKwazy9dLftso47z6/gxB/jdbrjke9ojZxg5CvVSokvyrnOGh5lWPcMdsj0QNfPr1o98me8vfG6vpjb0n10/hbc/WnhL/FEP6KfJZkVtJEmmzL5OGcNZA2oBh4zcKkZUpQ0xpkmWmvqvXR8EXRZxyOPr9+MaxCQ/zqX3jiUn14Z+Gu51b4PJ/ALIuM0x9k/gs4vXLb4juQg6vO1/NBakLrfMWxhoxS3+9OD43uPjPO6L05/A85ZJcwHNGsga6C3Bv76v/ahCa5uejxYEbqd2QaOLmKI+mp05I5g1HXE63tn8bpP4C6/A8dOhNgSXbh8j4UEzxXQc+f28AkacWjtOPurILrJz6xexScdxLPqjw5n/ULe43Wc/TuhcsZfkr/LD84tYT64WQNZAz018O+BC4FVDwqNUPrQ7Y8oD47zgc/A2uNQo7fYas1JjE9xiyYY7bg/jke+1Wu35Th28Jczg3419FxG2/IbGjFo7Tj7qyC63faobs/xrl+0Rn1DzuN1nP07Yek+3eEPdyRhPrhZA1kDrTXwx8AlIRpsSxMTrz+O4NE4utgXhCaITUGn9+I1PTV6q37kS/weUy3uKIe+CCPf6nW0xzr6LXq0XaJFnlVrz+kqnXfqIXfkmUELeKdvJdvURYQl3lkaOTnTE/nI6Znc7n38SpiPbtZA1sBZDfxt4JLAUaP1xxAcI1qD7250O/WXmnmkEftIzDG/rHfGJN3YiXC33V/Sr9x6vKoP0bgXO4YsztPtzuDoi9B1+p7Te3DpUF5cBr2R5uun4ZxtwnxwswayBo5qoDhwSYDGJ+jDBbgrVQNkDf60ptjjj2J2fmIWVJysPeYo4/IR99w6HvlWr92W46vt/Ko+5ZTYhVMvqhMGLUF4VkHOcrU+9AJdPzRBp/fgfn+QQy9rQdHEO2PL9a3EiSFhPrRZA1kDZzVQHbgkSPNjwPAHZGXTeqIuj1m4crEqfvIa4e48RHus3a5ovk78n835UO5UI8qZXzyGrbfkkrqI0P33PafXcPGzp9wIdxp7EcIb6U9b+3knng9v1kDWQKkGDgcuCfiQQZN9WrNb5U/psYy6n5SD0oPFeUW/v7bmHEo5WB1rqy3xkX/dHQat0q9arTqJpcQvmvaxCe9KWLK7Uv+ZrqN/I9F9c/xM5679UoNNWj68WQNZA9TA6cAFoyBNbVfDukOvHiv/erzCo09PyoF8cf+Io+S3830B5xxiDnbE1mJLPF47R8OWfGzR6bHU+LHpvCvxmt2VNmq6zurYfXO8pu8KOueRMB/ZrIGsgVgDzQOXNzTwKxrYChslfzWciC4Yk+LrFfZ36iC26DP0nbbv1E18gu5HXPveKF6zJX0+5OoMfNCKv2zxa43rG/EXGc58NK4WOfe1hX+Wx2MDr+l03xyv8V9F51wS5oObNZA14DXQPHBJyJsazRDaVc2sZKfFBx5GBiyg4irpfDoN/4nrrXH05vnsrGfygW7B6Bd7TveLdDRoIcPAxXoUYlfyJV9H9T5FzuM78okzifBI5oo9zoQ4EuajmzWQNaAa6Bq4JKBmAlTzotld0chqNmo+8Pg69MKv6XsyXbF4DMQm2pP9XuVb7axFj7nptYluwTNZPwPh8deskvzswDUbX8mnJ9Jaa9nPy/E7Y4pnHOsk1/nwZg38bg10D1wUize4lgfqqiaIX/Fxkt/48CR/8ekIlmIpxUDsR7q+tqfc8PUzVpylHB3FT/6AkdftyJb/qhV5V6+5dzHG1Xbu1qf4GFpq54CP7EfI/hOgn1viv/vQ5tnn2asGhgcuCig2O61rjY66fAMAACAASURBVM55azwj9PgQyrcRPatlRuNVPPJFcQgn16v9u0rfaB7k31E9kaMd5x3t+jnIHsNWLYcaGvSNemr8TidfTpPNEV3Sgb4IXX8Nd5kaj9NHfZSOHecYffN4wJ1nBnf/PQ+i5zdzkDWQNTA1cKmpqIhoXMBa02JfsMbTQpc8QxYwFnOLnt08vfF6XMQjH4Xv9nWn/t48uC+S9TU4AxDrHRAbnAWQYav2x4j8QjPqE/kalY9y6Isw8pXWLlPajzTxR1rrenedeyyOt/p3xufnTh6omYT52GYNZA1MDVwUkDcvGk2pOTlfad9p8DqN4Up7/hjCgz+C0O6ExCDofkAXjTiIrea7y7iu3Xj0fcQevs/q8hzV8jTiX5SRn9GWD1lHg5Y/ulFv63o2T9GO59/xyFda9/JLh2RGzkdyJR9W0TwWx1fpL5298pDfzEHWQNaAamDJwCVF3sBWNs748MnWqgY5o2cmXsUkeUEuovuCbqftxms25R9+lnxATrC0L1oLT00W+hV58hiwJ8iwhS8roOfE7aIb+6xnYLTF+kineEZ9kNyRbvRGPvwSPJIf3XP9jo/qk5zrKfntsSaej27WwG/XwLKBi0KiAc00MYYsILqBM7pXyRInsFUvwwuxCJZkS827xLeK5nHIR+k981E8yB3528JTikNyMV9uB70l2RFarDcGrdovWiM2kMF3oNOpCSB7oxAbEdb0iU+2BWs8NXqLz+Lh63rcP6evwl2/4zP6XY/wqIs4E/73zDMXmYtfrYHlA5cS6U0oNqC4hpfHzmE8lCh75xq/S002+lWKKfKU1tgo7a2mlXxU/s/s4ONRHlp43I580drP3/d34G5L+M5hq+S/coQPpf0Zmuff8ZrOXj+kU7okV9PpdPRH/hbfXE8v7vod79Xj/DU9oovPY008B42sgd+uge0DF43HmxS4HlbtC6oQgRQlfK3Qm5/jLfK9/Gc6FQtfj0d4TXaVD7168O/It5rPNXrNB9GRcVw0/KAO4NsN5Qe2BRm2zux6jI6fycV94m3Nv9tyPOo9W7us42dypf0z32f1l2w+neY1lfhvP7R5/nn+qoEtAxfFVWqyDCHxkZHMbAN1e4636O3lr+mUnhgbvNoDL8GVPqCrZCfSOK8VZ4Bu7MeY41r8ypcgfqBjJ8QWkCGr548PPUbHe/zGvmCrnNtyvFUePpd1vMcX6RJ/6S+MY0fQ9Tv9y7ifbeL54GYNZA1cNnAxaKnojh5YNebRJuxN3fEWfb38rpPYgFws5wHHDmuH7Ak6vRc/0sOe68RfQafP4NgpxcIe+t1+9KEkj9wolA2dFXZ92Lpy4MJ+bxzkL8K79MQzK/nhvpb2v0jjfBPmQ5s1kDWgGtg6cNWK7Ki5zjRml3W8Zq+FpyYbhytidX7p9/XduA8ZV/pCnqNNciYY93asFb98cbs9A1b0ibgijHysxScc+9Adui6nO+48jjtPC+6yjrfItvDs0Nli9y4exeu2OeeE+dhmDWQNqAYuH7hiU/IGJXymSbus49EG6xYeeAUZsoB+iZwPXPrB74I+ZOHv1b54HmLurvKF2IH+q9aoD14/jtf0iQf7RzzoauGBV7DGX6O7rOM1/l76Dp29PlzJ72fAOSfMhzZrIGuAGrhl4PLGFBviTJN2WcejDdbOIxy6Qw0I2ouDghIIX01W+9iA9yoof2WLg3Z/r/Ih5gVf3P7u/CgP2BVcMWjhP75HyH6E+BLpWkcdWpf4arxH/Dv0tNSTx1Tz4at0r7nE88HNGsgaUA3cNnCNPBCjzbml8dd4lCQeSi7NqB9ncjUfzuR8Xzqu8tft1nD54v6Iz+Ms4TVdrfRoU+e2ctBq9SPyyY9Ie9uaO0AsOr9VMZRqoaa/Rl/ly6ge/PI8JZ6PbdZA1oBq4PKBi8KjMY02th452eJ7JAcPAwLQZXb6jf0eG/AyZJR8dv+vxPGFM8e2x1nC4RuF0e4Thi3FwlmNxnW3HOcouCOWUi0c2ZEfd+ekZN/zlHg+tFkDWQPUwG0DlxygwZaa1koadmrNm2FF+yRGsOQDukp7szR01/ws6RdvHDDwvUdPSfcojXzih/SUfBGt9B2162cn3Act4aN6f1mOc/Pc7spHqRawH23Kn7P/FEWUuXLt+Uo8H9ysgawB1cCtA5cciE32qqYouz4Y+IWQD/h1lT9us/bIQD/yO/pLHMjG/dm163W/nF6z4b45XuM/ovv5+aB1JJN7/zwdQpXXq/LkNeB4tM9ZR/oT1viWMB/YrIGsgVgDPzlwMRgIekK8YdPwnbYbx6ZgzdaZz1GuRWeU6VnLH9kgjz2y7pvjrTrcLvZz2DofolrzKz7ltYd/htdrwPGo80qfou2WNbWYMB/crIGsAa+B2wcunDlqsC1NrpXnaGAp6ZBfJfoOWi0H8pkv+Wq1X9PZKn/Ed5ZLbNd0sB/hET97MR/KC8MWPFdD4rja7hPt6Tx6/SJ/EbqeqBde57kT534mzIc2ayBrINbAzw1cdzbjkm09GCW6aHGoqPFFOo/Qke4ow9plHWdf0IvI6TV+55nF45AnXxi0BGf1j8qTk1H5L8mtzgV1vFpvKefYGv37YfiYMB/brIGsgVgDjxm4cIyGV2qGX6SV4tVQIfpoTiTLtzdnyEWInjjwQBd0GaevwOPwqdzcPWgpXs5IcEWcb9dBPlbGoTxL3xU5poZz4MrHklpOmLWwqgYeN3ApMJoejXZl867pusOm+yL7cZhRLpynFZ+JxWUdj77JF+23+jTDF237oAU+o/9MthRnvIBnOn5hn5yU8rUi/qP7sNImdkZ0koOE+UhnDWQNxBp45MAlJ9Xs/OsNWw+wr9+MKxa+fji9MdVyVdNz9Jgc7dX07aDHQUv5YcAC7rArnUc50N7MWe3yebdexc032iIfkb5iTb6jLtGdJh/4Zarmp/PXcOkZ3SMPCfOxzRrIGog18NiBS47SNGNjZUARrDXGJ9Pd/3ggWo/4XstVTVfMaeS7O7fKg3zw/DBkCUZ/V69r+cEf2avxrPblKfqOamy0bltiq+n2/AuPZ+P7LXZaeGSjpBfbCfORzRrIGqjVwKMHLjmt5saXQcWDaWmST+IhBh8mVvhHjkqPQY/+1X712Bav2/dzZtjq1beK3/1apfNtes5qbLb2SvmQTtVBaS/S4JvxAx1Rt9ba4xe02r548ps5yBrIGijVwOMHLpz2B0+0UsPzB8HxEu/VNPkfY6jFMetbLfajhyj6NutDi3z0J/rAkHXFL1pH/uJX5PE8Ox75Rteu0/FRfa1ybsvxVvnVfPLhTOequ+S2emOnVyXMxzZrIGugVAOvGbhwniZYasDsRVjivYImP3is8V/QbYvH1ytwj9/1RVvyTfs131x2B46f8sPz5IMW+A77rTqVn5g7yeJ/hK16z/iiXtZncrP72IlwVu9uefk7a8N1ePxnev0OJZ6PbdZA1kCpBl47cNEMvRFCi9B5duGyie44QCjxvg/fLujxl2zIP/H4kCMfxbvbz6i/VJRPGLJKeYs0z7PjkW907TodH9XXKue2HG+Vv5KP+lnpp+sCP4sJPxLmQ5s1kDVQq4HXDVwKhCYo6I3Q6Y47zy5c9kqDltvDJ6fdgXsxHNnHX8EjPvZ6+N0HcAYtQXReCfFDsCUW53F8lc+u0/FV+mt63JbjNf5fp3vdJJ6PbdZA1kCtBl45cCkYHgJv9tAidJ4d+NmghU38Yn0VlN3Sr1myr72aH/h7xOOyLfziib7cPWgRg1+S1licDxx9sxB9Ec7qPZOP9lifyb15X2c/6r/XTeL52GYNZA3UauC1A5cC4iE4g6ON9EyuNmjJnyPZs/0j2aM98lDi8SGntF+ioa/V3zN+90HnFwetu37ZIna/JGexSMZ5HEffLHSdjs/qPZN3W46fyb15X2cv/xVvbxxeN4nnY5s1kDVQq4FXD1wKyh+EkWbZ21x7+O/wx23GAUf56vF/FW/0wwetO4asWDOsV8W7Ww/+RrjTrmxJv2ro6D+NsNOHlbqJRzp743FZclJrsEnPxzdrIGuAGnj9wEUgPD4rm/KsrtiYZ/WdyWuwkc044ChHZ7I79uVHyRcGrh02W3RSKxG2yD6BJ/rNeqdv3DPZkL2dtq7Q7THkwJUPIvWdMGthZw18ZuBSknh4vJle0bzvshHj9AHnLp+w64MWAxYQnrug14njd/nTa9d9drxXTw+/7lcrv3xq5X0CX+/A5T7vbM6pOx//rIFv1cCnBi4V58oHSEODN9en4j5oKQd3+MkjG31hyHJ4h39u02vEced5Mu4+O77LZ5r+kX78gKdFBt4RODMkRXvyPdJa18SZ8FsPY55nnueOGvjcwKUkxebf2jzFx8AgKF09slfyRj8pjit9iLbwAfikIct9pT4idJ4n49Fv1jt85izPdLsPwiV3JjO6v0r3Cj/JT8J8oLMGsgbOauCTA5eC5gEQPGvs4mHAImFnMnft46v7K19a4lzlc8kWeXPIwLXK7io98r/0XaV/t56S76UzWeGHzvNMT7RNDZzJjey3+NOiVz7rV7LZX8qINWE+tlkDWQNnNfDZgUuB+8MUm7AGFtHE58OL1pH3yvWRz/JD+xzqlX6VbClvMXfy7amDVimGFbTZ89CZuh/k1GlX4tTgSFwjMj2xSX+NH79r+5FeGrbQEc/EZdkj1oT50GYNZA201MBPDlw+KMTHjWbqDfZKvNTw8dEP9E4/PX/yiQHL4ZU5u8uWn8eMD36Wq3TO+CNZ/OjVIzlquFf2jB/dNT7siq/G4/QSHzr8TFwGXLL5zRxkDWQN9NTApwcuEuFNNA4vNFDgWaOF7wooX9xf2VRMV9gu2XBfyK3gLwxa1BBn4PGvOhN0lnJ/JW3Uj5iH1Xcp6q/lpMYX/Rn9hQu75ClhPrpZA1kDLTXwEwPXUSJong55XGODdp7duHyWfcGarav99DxqyNL6acPWypygK+a/NHjCKxj5S+vIR25LvLto0QfZGfVjVK41NtdPrmuy4i3FBr/2wUch/iTMhzZrIGugtQZ+cuA6asZqwDT0M77RZh3l3E48uMjr66v8LA0YPmgJd7/uxFfmBF0eTzwf1vAKOn8Nj3zoqfHvoK/0Ybf//msUuY45EV1+iDfG5rzi8fUITrwJ87HNGsgaaK2Bnxu4aNbAUrNl76hpl+RmaHGoadG120/pj371Dlp6/PyxbIlrhmdHTqgDLpX8E421YItd9BCf60CevTug4sBujz/kYUQWmQg9V+5X5PP1aj7X7TjxJsyHNmsga6CnBn5u4PLkeFP3hroLLz1icaAp8ezyB70xD/Ip+tUyaDFc7RywSvnBV8XDfoyJWFuhy1MzkhWOjlZb8CHnUPrclu/twPEl2vQYe+32nrds9ch4znt928FPrhLmY5s1kDXQUwM5cP3zn389oDuas+vksRONIYHDEk2487jslTg+CWrQAp790eGVAxcDg/uqHJE/9mfz5vqFu95WW/C5L+jFZ9/bieOLx4EvTtvlA7Z26T/TK/tnPGf7xJAwH9usgayBnhr46YFLieIBOmuyq/ZlLx7QKt2jejT8STb61fKrltu8YuDCnvsKTZDzXDU8yI70AmdtlQZt17kbL+VHsfX84jTjYymPM/rukFUM+c0cZA1kDfTWwM8PXEqYP0KrHur4EOihvfuxjT6xjkUTB62zX7bQswr6eZR0Rn9LPKM0zt9tQBvR6bLSKR3o9r0R3bMy+NEzbMnnVr8jH/ZqfqM7ytXoNT276cSRMB/crIGsgZ4ayIHr//+n1V1N/amDluItFYoPW7sfrpr+2llEn5EXHXwFdDuz+tw38u06fd/pV+Alf87syt9WnyOf7EWa20N35KnRXfYKXH6Qs4T50GYNZA301kAOXPbHAzT2Vc3bD0M6tY664+MS92fXJf3xlzb89GHr6l+1PE7OwX3HR2Dk9/UMjn7BGT0uqzjQK7rH5XxX4qPxeRw9/rbIlc6dfLHXY3M1LzEkzIc2ayBrYKQGcuCygUsJpLGXYKmBi8/ppV+0Io/zr8Ld35JOfCgNW08ZtNxv4hHNCxse4mG9AmLnSBd+Rfs1unS16MXmkR50wSt4xu+8yMsf6MizLkHnkWz8I0j2I3Rd/P0+p83i0R7rWb01ec4xYT62WQNZAyM1MDxw0UAFZRg44sTTZGjcEZYasXigx2EG+hXQfS3Zi76Rcx+2SnJ30YhH9vHVffG8O30UJz9n8vgV7ZfoornvUaZkq6QHPtcF7YgfHofoEBQdeeeJuPMg5zzsRyge7GnPZVbg0R7rFbpLOoglYT62WQNZAyM10DVw+ZDVg484drcMzdthqQnroRY9+lvi3Umr+Sn/GCbw0YesO//o8Cwf+HvGN7PvuWnRU8tzpOO7oOuFz2mOsy/odOHodPoRf+Sr6XC+iLsfMRZ4j3yQDDqAyM1Ct+v4rN6aPPlPmI9t1kDWwEgNNA1cPcNV5JVTkcZ6xOGrZWjksQmXBpnVD0q02bP2QcJz5sNWqz6dVytvD18tX+57j74z3niWnpcz2d59dPfKRX5yJH1xr3c949OoLH4TR6/PR/ycZ4SSgXYk37MnfeQgYT62WQNZAyM1cDhwMRithnK0ptP3RgJaLUPjFvQGHe34XuT1vSvw6JvWPmi1/qrFGe3yuZSnXcOWYuAshXuOVsa3Wu8qfegZiXVUVnIj9lplOM8IJQ+tVVcLH3lImI9t1kDWwEgN/DFw8cDeBQmgZF97ojuE/wpIAy/Zis0a3khfvZadqNMHFnwdGbai3p1r4sBfQdmDvtp2tLNCP76iW2too/rRRT5m9YzIK4aa/VqMNfqI/SMZ7ER4JNO7J92S8bNIPB/brIGsgZEa+GvgKg05b6DFoBnKIn31urdx7+LXg6Ahi2+M04etFh84c/Hy2LTItfKUdIomv1t1jPBh1/MzoqdVRvaw2SojPpfB1x75Em9LbvH3CJZ0Rxo+C6qW4v4Va8/hrD10eVyJ52ObNZA1MFID/+CBfSJUQDN+kRDpAF8BeZRmm/kK+ZZBq/WPEKM/PDaRPrN2nfHXON+bsVGT9bOv8ayij9YIOcDXGX96dODvEWzxBZuCLfw7eVb64HElno9t1kDWwEgNPHrgmhm2zmRHkoVMfJR2Pho13bVBSz76r1otw5ZyVbNDrLX9Ubr89IFrVE9NTn77HmfntKfiK3xV/OiJuSjFzTkfwZJcpGFTMO5dtSZe1TV4q+0Sv8eUeD60WQNZA6M18O+BS8JnA8qX9o/iZe8sofFham3oR3ylZu/82vchBR81VAn3QcvljvCjYetIbmYPv4EzuiRby5vo2BA84o0+SJZv3Nu5xt8VNoi5VxdxR9ir527+GL/iiT6Jp0SHj/NImI9s1kDWwGwN/OwvXHGAJJGRzpp9h/4g0aBn4FHjR29t4PJhq/VXrauHrfirnGJqiZnYa7CkI+apJlujrz7bmh2nU1tOG8WlS7Kl3Jzp9NgdP5N70r7ij7HX1pEe4+BcEuaDmzWQNTBTA58fuJQchqZReKTDH6Szxh0beW1d0hMHCA69d9CSzasHLdlUTPgsSOzkj/Uq6Pka0YlfpbMgjhG9NRl0em5qvEd09BzxnO157I6fyT1p32ucGKJ/ojtfaV80cpowH9uzGsh6yRo5qpHPDlwKenTAapUjsTR0wdi0S+sWfnT54IA9wThotfyq5b60+OD8szhxENesvpq850h4ja+Xjt/EsVK3fFmtryW+Ug0c+eH8jrfYauFZpVMxHA1S+CI+2WRdguLJb+agtQaooVb+5Put2vrkwKUibh2aVvHxWHDhjiC8tWavR51vvJAjgxYxuk9nPjjvCE5s7v+Inl4Ztye8V/6IXzGh/4ivd2+1n632Yw2c+eH8jrfaO+NbpfMsDvxoHco484S/9TiOnLfX1oh8yny7xj45cDFg7IBciJJufzCEc/kidL64p7WGLfRjb2TQki7pKdk486Ek00Pb9UtQzQe3p5wRX42/l47+o3Pt1cnZCiK7Uj86a5AcCeJLjVd053f8SKZnb4fOmn3PeY1HdPKS8NsP4arzjf12ld7U8436+4mBi2JliNkJZx+Nkm8+bOkRYH30UPgePjltF85gQs4Fd9lCr9tye8QtCG8vRNb19uoo8bvPpf2VtJY84A/xluy7HsdLvKK18NRke+n4zTlhu6YHvtq+6OQk4Tceu6vO0WtK/fwqu2nn+XX6EwNXaYhZTaPYpfes2fuFFK4hha/7JZ0MV8Ao27Lu9adFZ43HB64az0r6kT3iFhy1ybkCR/VEOfQJxr3V67M84MuZXdfjeE2uhacm20uXLcmQT2zX9MBX20cXuUn4/MfsSWdEH6e+nuRb+nJfLf/swEXRcTF2QJo+jwGXD6hhQXsl2wxYQGSeCImTnApGP+GJ9Jl1yZ7nGptO67WHjV65M370lnJ1Jtu7f5QH/GjR6Xocr8m28NRkRe/xDX7dpSOdPXvYT3jfA/Xm3HutqS7fHEv6vuYO/NzApcIpDTg9tB4d/ugIj5cw2mXAAjr/U/F4GXf76b9qyfYOex5Tr/545qx79ezgjzW4K3/4XopdNc/+GZR/0eeazMpY/PwTX/PY/FoeS3X6aznIeP+8Oz8zcOng43Azuu7RJV4eHR6Okl0GLIelC/skmgYfH36u8s0v8S6b2BjR7+ft+Iiu1TL4I73U8Wobrm/WXu9w1sPvfkac80/454OR+ejLR6wrrTOHfTn8Ur4+P3BxWKUh50oaD0+0Kf/eNGR5AyG3gk4XrngjbXYtO1cMeMQ16i9nHeGovh1yszG2+BRroFQnNT2S7eGPesh9pLeuyU/C330cV5y9/wMA92GF3tTxzrr8/MAVBxxfU7ROW4VL95kuH7TAWx+EO/k09BCb4tzhiz+YPmSV7MFLQxv1h3oo2ejR6f443qNjJy9xuo0r/FTNuM0zvPUc5Dv1eKazZZ/8JHzno/a0c6vV3NP8TH/21/vPDlwUF436Sshw5bB2KZ9C16MmX3zY6n1Ae2JhAMAm5yUY9cCLj3G/Ze36Z/TIlvvjeIsfV/DsyuGR79hszS38Rzp9b2Utei0kvv8R+nqOvU4j/vXYM74/789PDlwqgisHLLflQxZ4vIRPXGvQYti6yj89zn5h3a4/3LNDDTZc/wzu/jg+o3NWlnwp1pKu3X76QIQvNT9Er/lZkhHN9dd4WunUQ8I/H4vMx1g+6P+l+tNe5nUsr2/M22cGLiWfwr4ScuhnNhmuHJYu4N20+Bj6oEWM8pEHeqe/5FZwl50rbOzyvVevzsxzGc+6V98ufvmoWtulP+qNefCaSPx3HsOdZ31Uz9rbaTt1P6eGPzNwMQxcCSnkM5s+ZAmPDf9J6/j48KuWYsRP8fCFthqSU/RGv6DPQM5PcIf+Gd92yBIvup8as/zExyug54EcJXzOI/WVs/AeWqrrr8SZcdTvzmsHLh0qj3IJnu2XZFbT4qD19GGLJlD7VYv9XZCHz89hly1vCrtsPEkv9yH6pJyT97h3x7rm51W+eF0kXn84Mjf9uTmr4cxpf07flrNXDVxKrj/GT8X1gMVh6+yyXb3PQ1t6bD2vV/rldoWvsE2crks0LqrTv4o/IVbOoVRvnnf56mvhLut45FuxJlcJv//43XHGZ33tDp/S5nW1/pmBi6KJj/Yda38Uzh4YfyTOLqPzzuLuo+uK+fK9nTh/dLnaBnFKr2xQJ4KrbT1Vn2K9srZKeeAcju4DfkYel3W8ZGeW5vWR+HUP0S/lulaj3NFfysWvxfqqgSsOA77Wwfn6LtwfhPhwHF00/EW+xruKjh18ZOCRH6tstOiRfWKPtvGtRc8Zj3T55T7j/8o+9+LueJR/vjVf3Fc/e+QirOkZpXt9JJ7D1q4aiH0u1qvqfJft1HtvXX9m4PJH+05cl0X2eRziZSqto7/IAksyorEf4RF/aU/y+FDa30WTzbNBz2NzP2p053E8NhrfW427b4632sHX3jqq6ZcPtT3oJR75wX4PxP+aTC0nircmU6L38pd0OA2/E977KH09/611+/U8/GJ8OXD9z//8NWzoIuirQgAfgbUHxZs7eE1/iw7ncRzdEYon0nzgQUfk2bX22Eu+yS4+xf0aveSrX+zS/mqa++Z4ix18JTfIt8jO8MiOy2stX5zWguPvkSw8blP8irnFhnh6+Vv0Smd+MwdX1AC1DqzV5xW+pI3raj4HrsLAxWM3Av0xcVwXSsMNNL9gNTslXpdjP0LnOcLdrvOhz2mrcOl2u8LRXbILTRA+wRo98tBMnL4bd98cb7Erf1v4dvB4juWHzsZpRzaJEzk/1ygHL7p7z6iXP9qvrdGb8LoH6FdzfXQ/Yn3+ao6+GHcOXB0DlwpAF+Xo649JxHsHLuxEPWfreGHjGr3AuL9zjU3BlXbIiev0C+v03Ti+RHhmF39X58btuk9Od7yFx/kd545Ih9Mjjg3RkXEe9oG+J3x1jsh9why2rqoB1fHZPaHur/Ip7eyt/xy4TgYoBgQKkXUJ8ji0QC4Sj0dJH7QWfc7juh33Pz6Ubt+7AieeHbaJX3EoTs5L8IrY3Aa+ROg8josPf8mNaM6zCnefSjrlxxlPSU40yeJ/jQc6NrSWTIyXfSBygjvOlPwn3PvgZH7/zK/X9Rmeufszd2/MRw5cjQOXHoWjLw9DK+RyRZ1eRHGvVzc2NIAId33sXQVrtolppR+ew5V6W3URU4Q1efyt7a+ku081vS08JVnFoXMu7TlN+llLBtxhzYcav8uO4JxBwvc/am86w5b74vX8ptjS17/fpRy4KoMUxeKDQgkXnz8OjmvQ0ddpwqELlnQe0aIuv4w13PXVeHbSa/ZjLKzdF2iCTq/hnJtgjadXZ4ueEZ3IRF+h1+zupONLyQdogtEH8h7pK9bYE8S/I73up+NHMvif8O+PROZkb07UH49qM+7leew9j535zYGrMHAp1EcoLAAAIABJREFU4T4klHDn8aYe8drAVdLZQpNdtxEvY1y7zrh31brmg8fhuPtVozsPuF8UaCXYo7MkD831OM7+GUQm8tXokW/1mvxJb8kHaILRNvch0les3Z7snOl0Px2vyRF3wvc+ZG8+O/VH6tRrVHStI4TnzTH/qu85cBUGLh8QWnAuSwsc+VWr5AO2uHwl6LZK+1fRaBjRHjFE6Hy+5/SIK1YucdyL61adUS6uXY/jka+2xl/BGs+V9No54cNRjFfFIB/wpwbdT8dr/H4OiefQdUcNxLvXUud3+Jk25+5HDlwLBi5dFm/swn3Y0RoewVVft8ljIrtuG/oTofvveK+vNIFWuRlbLlvDW/14Et9IDvFfssoF611Q96ZFd++5EHvCucck8zeeP96Elvp2nsz5eM7vyF0OXAsHIF0aH3a4RLshD0zJtl/Op+H4HWGPn1wayUhPi6zba+F3Hpet4c7/ZVzxe/53xio7ukctNnrOBf8Tvuvh+uJ51eq7RucufDEXX40pB66FA5eKZPdwVdLPAxP3uJBPhfgd4Zm/4hePX8ozGd93e06POPqd7rI13PmfjhPjWVOvxSF5zqPGM0uXftlp9bF2LiU/iT9hDlxPqAHdFdWp17rj7AtCf4Lf6UPb/cmBa+HApQtw9KUoj3hW7JUeltlH72ny5FLQffPH1umOt/CIHxsuO4Jjb0R2t8yqGFf4SZ4Eo74SLfL0rqWT+BO2PRiZp715Uv8/q2PeCOfLc9l7LqvymwPXyZBEcb8J8nD5hfwKHgs/xkXsRw/0GQ82ou7RNfZG5XfJrY5z1k/yFM9OfkbarC3JE3/CdzxWv3BOemd6al383IVfyM/bY8yB68MDV8/F5dI+GervqHHh5KfiizFCi3SP64gH/d7IXHYUl95R2V1yxIp+8sL6aoj9eHbyc/V5KDbivxIqDr5X2k1b7xkqqY/S/Yt3QzzxbuRZP/esc+CyBkihvx3qwvnjBV66wD20VXp6bMIr295IoAvil6DTe/Ga/l497hOy6Ga9ymf0tUJyJH9io27VcQUffu60xZlcBVv7Cv6IHzzhcx/RHWfjda+7ULurJfoOf1LnmvrLgetjA5cuBo3dH/UVDxj6vBlcgcfLHm3i12yMbifa6F3jk+TQ6zrYn/XZdbbi+FNq1q06dvORH/m6y0/ycCXkbh5BYi7xXOlr2lrzyI7kcbbmR2ymzP7zzoHrYwNXbNI8XKse9lV6jh5st+F/jKiGUJKbjdEbjetHr9N6cNcbGyi6PdYe3TO88iv6M6Nvp2yrn8ojtd/ij5/NlTg+HkHO54hHe5HvyjjS1v7HWWdMLff0C3jzjPafUW+Oc+D6+MBF0+YSArnIrRA9wFE9LfbQ7cNWi9wRDzoFnc8vjOjwOU8NhzfqFH9Jb03P1XT5JptH/pd8cn7HS7yztFJOz3QqrjM57fvZXI1zf66ExCib4Amf9xjHM9F5qebPajreC+Sivlzff+Z/G7h0KGfNgIM74/uF/ZZ8PSEPurT+jZf0aB39pwn0NoIjG76Hn9SZ743i6Iw+Y0NQuuFrsQNv1ClZ9LbouZLH/Tryv+ST8zte4l1B40xadfXwk4crYbxHT1grfvlxZR7SVvvDr7NprX/4okzmuz3fu3P118AlQ2cNoIXnTMfX9t+Uk95HUvzxvLjUu6EXvvyYtRdj19ptjOiPOtGBXtZPgdGvmv81f53f8Rr/DF2+Unszemqy5OJKSDxXQ2Jsset5Fz+yCe95tDmzWh2X6JJxuu5qnt895xfz/tfAxcHWoARre0n/77/qXcrF03LHY+mXsoTHWEo8q2jyCV1epKK1+os8EDnXzZ4gdpzmMuC+34KX9LbI7eaRX7VcEGttX745j+Nnfsuuy5/xax+ZFl74j3x3PZzP1TDepyvXinWlvatz98v2dG6q3wi9pms4Muz/ch6fEPvpwCUnV17UX9J1d+5q9nksuYQl6OfU+pCV9LTS8IlL4XLsOa0FRy76jw3BuOcy4C22xON6hbfKPYGPWGM+3Dfncdx5SjhNH5kSj9PIo9OOcPhl58h/dMB/NfQ7dTWuWK+wiZ2rc/t1ezo71W+E1LTD0h1A7ut5enp8pwPXFZc0bRz/QtabH4ruTK72ALocF7l0idlbBfFbcIVO4gNKZ8mG72MXmiC0M1jSfSZzxX5LPlvidR7Hj2IgJ0c8vie9klENiq617zvue+L3tfM5jn78uhL6vXo7Tt5a4uA8kUnY/8dbXt/CvaZ7cMlm/vvzvypn1YFLBlouU/KsHZauzqceIL76twL1xQe/yPAIOr0Xr8l7QffqbOVfbcNz4nirP2d8rtPxM7m4z12O9B1r+el6VUtaR7rzRLxUf5FndO01cCVOTG+HMWct8VB/NV72o+5c/zkYUPPKI/gIlHzm9s/cXpWP6sBVuxxJv27AoghW51x6XaceQx+0tBcv8syD77riw0uMgs63A19ty3Pi+CrfXafjrfolI17PLbRWHb18rp98t+pAtlR/rTrO+PDpauj37c14zNuOWLAh3eAJ/zMgqL65J9S68gTeAzOn1w9dOXA9+L/DxYVY3dSk90hn6dLqkvMt7Y/QiE9wRL5Vxu0Ijw2rVc8RH7lZqdt1On7kR9zbFW+0w5r4yTn0Vig5eImZdQ1i82wfn+6AR/ftTXueu11+y0aLbvflV3DlRXXuNe80p9fuA/y/krMnxZkD10MHLhVJS9NZycMD13Jpa5e5le7/UVPF2io3wucXDnliZd0KY27QTROLerAT5SJfae2yjpd4Iw2/yC3ykW/XWnZrOTmyib9HPL7Xa0f8d3xX3tO36SLfrX5zpi38zhtx7H4JkhO/A0f4Wd/5Um7eEEsOXA8buCgaLtbVkIf57KIeXfKzPWIUFO+VtvCNOFm3Qvc1xlHSgR2XK/GVaC7reIk30sSv2oGOPOvdkLPdbcdjPLPl53U1fvU9fpo95XuHT616rz7vnfZizce13wPde1+X8J2+pu4//wEvB64HDVwqzh1NqUcnPux6oP0Cli7/StpOW8qP9J/5Sx5bGl/U5bKOR77SWr6N2Czp6qXJtmqu1z5yPfZazgB94r3j23P/krfv78hSMy15O+K9oy5mbKqme3uCZMgTd0Jwxo+U7espOXA9YOBS0eoiALkUd0O/0L2Pp19ocOnggkLbBbEj2GrD4z2TQX+Jz/U4XuJ1Wo+vLhdx6VHtyHbc87X75rjzXInXfKjRW/MlecXBmV0N777HX7ZPra+O0fVeXS8t9oi3dD9V79pnTzh3yOnsA1vsJk/fgBXzlQPXzQOXDoTL8zTIJQVyMUegF96IfKuMfMVWqwx8xCkIrQQ5M8ESr+txvKQL2qjPyAPRc9RY4XXfHGf/aljzoUZXrK0+kpc74NPu9df80ZneERN276gp2dS9OKr/s/0oe1ccv2Q3B64bBy4K7Y5m0Wqz9tjFy3q0Jk7BI74VezO2jmKlebXodz2O1+JDp86kxtNK78mx++Z4q60SX4/9KF/zoUZvsSVZ2SHHd8DWuyY++dfD/+u8nOfqPMzqjfKsV0JijvdIa+2V6Ge0lf6lrr//GpYD140DFxfm6dAfPPCzi6v9eOFaZGZ4VtrjoXZ/0H/WzMhRhK4LXDrBW6HrbZUp8bkex0u8T6FxBr15c7mr8db7Lb9aeZPvv3/X6015W117qgPdXUHuqNbgQN+HVoKr/Ut9fw5dOXDlwHXa5Lk0PY+yeJEDli74Shp2BGf1xqbVo9vz5HjJpxFfazp7dbkex0t+PoXWcw747DJ34K3DkXxr5U2+Pweut+VuVR0ySOn+Uu/QWPsetBpc5Vfq+XPQIh85cD104NIBPaGpUiiC/iiD1y6u/3e2ajwr6fi5UieNCt2CLfrJTYQu26vTZV2v6DVd8Lms4+xH6DxPw2uxHvnpMnfgrfdYvrXyJt+7By7Ob0U9SpfqH1i7C2f7klMvEFzhV+r4+9CVA9fgwEUxcXFWQ+lfrXNEH3E6bHmg4ecCl5pA1MO6xHtEw5bgEV/vnvxx3cpfr47ITz7QG3WSA/ii/BPXnqen+Ece5Q+5vgP23Dn518OfvP8dut6Yi1X1SOwr7h73ZpVvqefPoSsHroGBiyKi0L8IibEGuZiC8aIjE+lx7Tocj3y1NXYEdQbiK/lTk2+hu40W/haeI50jeWixuZvHz2C3rRb95FG8nu878Nb+QA5b+ZMvBy7qmf7XcjdaedCd8M+haSYfOXB1Dlwke0ezk+4dent1EuMZ5FFjyIn8Zxfb5R0/k2Pf7UHDF9Yz0PWv0ovOWoMcycNMjCtkFVMtnhX6Z3SQ77tg7917Aj/n+QRfvu7DyrqcuScl2ZW+pa7/DG05cJ0MXN58HD9rBLt4z+zO7I9cCgaEKFu6wKLBfwRrstAl6/agr4Q1/e73iD30Ss+I/BNlFNMT/ZJP5PsuOHMf75JVru6y/VS7u3Kyqi7J2+w9jH1plX+p56aBa1fhUnCrYa+/FFarHz36e3hb7Tsfvs/AeGFjA/CBpYZHmbh2/+LeirX8wkbU5z7HvZa19CrnLbxv4HlqPJwT53gX9Pv1FpwzfYu/u/2kdnbZQf8KKB9n+obujcuv8Cl1/PePJP/6hUtJ2VVQu/U+xXcKa1e8O+PE91nIQ+eX1nH2j6DzR9z9Q0fkmV27jagLm4Jxr7Z2feA13rfRFY/qvScfV8ZIvu+Crb2APLby7+R7ki8743yS7lX1qZhW3S90rfIt9fzff/3j7Zfr7f4/4dKvugg+jLQ8wM7f0iSin5JpsXOkO8pj40iGvR7/e/Si/y7YExdN+S5fS3Y5U3J+J2y93/KxlXc3305fduremZfdfkv/qi95iHfD77Xjka+0XuXbr+t57cClg6OwEo792zo7i59Hr3R5obVeenS5v+iYhfggPb36kcW/mi+9emt6rqL3xnWVX612OA/P+114a2+Sf628u/l2+sI57I7hbfrJywpI7PG++L12PPJp7TqedJ9W5OdOHX/9kSIJfjokWU/38+n+kcedkEtdutCisc+FrvFFH2t8M3S30aqnx3/VQ6veu/mO4mKPfN3ta80+/t0Jn94D7vCP87jD9pNtkpdVkFj9fnB3I3Qe4ZIVj3BBrYWv8u2X9bxq4OKgKKaEz/tlizMCcrnjpY5r+Ljovo8up63Gd9nYpXd1/K7v6CzgU1zgT4Tk/U7Y05/kZw//Tt6dvnAeO/1/q25yswoqD7qbfp9LeOn+Iut7kl3l26/qec3ApQN660V6kt9XFzoX3C9uCYdP0PfdX9HjvvPO4LIzI1+Sjb6XeJ5Iq52F+7ojX65/Fvfc34n33H352cO/i5d87dS/S/fb9ZL7FVC50D3y+1zCj+6a5xO+Fb79qo7XDFx+8CtxHfxKfU/WdVeR+yXn0h5B8Wvf/YUfXaxnYcnGrE7k0c36LZAccw7R76fHhX93wyf3giPfyNsRz8ye9M/If12W/M9C5cnvrt9rx52nhruuWb9+WX5q4FLi3lz8b/e/J/d3F7lfcPDa5da++1vjm6XvsoH/3qTkK3ELzvp+p7zydqf9M9t+rnfiPffzSbzk7Ek+tfryZt8VI/6vgtJ51m9q+/Qr3bfIs8q/X9MzNHCRpNZLkHxjf9dqRd44q6dALnG8wP6Iuq9OX41j5yq9LbGv9mWlPvm/K2er/HQf8fUuuOL+3qVDObvL9oxdP+sZPXfKegyzuO6DYjm6X+KJ+8TPXtQx69evyncPXEoUh5HwvkGqNfdPLGxdYi5yvOjur/ZqfFGud40dbKy047rdL+Jeacv1X4ErtivszNgg/3fD1jv6RD7l7ol+/YJPq+tWOeu5T+pPyABLPWu1n7+gr3vg+oWC/1KMTy3i0vDhvvY0iF5e7HgzcX9KzaXVBrpb+ZPvn12PwVm+yP8T4Jv7iPKX/t/3D9Sr65dep/vj+Nl9Otpf7eMv6Fs+cL39or65ybjvTy9eH3B0qd3fo0s+u1ey476Aj9hB94jsG2QU31v85CzuhH4f34Yrb2/z2f19u/+KZXXttt5d2RYvsCTHP5Su9vHr+pYOXCTLC/9t+NtjwP+3QF1c97V0uVfSsFXSybBFMynxHNGOdB/JvWVP8T3dV87gCfBtvc/9Vf58/Tac83+b3+4vMayC0q37q/4GHu9zqfdFXnigr/LvF/RUBy4Fr4S+9cvhvdX/Eb+J+a2QixybwIq1ciL9u2yQ8xW+Sof0uS58b/Xf+UZkkcEX8uc+PRHnHJ4AR+7wLhnlo0c3+euReRpvb8xP9J9zWAUV49m91d2HD+j9hDyhZ5Vvv6CnOHApcJL6Njji+4jME/Py9oL1R57LvAoqNzv0e85X+Epjk17Xh+/s+14Jd74RWWSkW76o3l1nyebdND+Lu/Gn9QfOsNWvXv5WvVfyfSWGlbWs/I/cU+Q4v6hjpY9f1lUcuEjqGXxiQXNYZ76z/7QYRv0h7jdDHvmVDzs6lRdvEtCdNoKTb9XTiHyUIfaav+xHuaM1sbbKRn75siq+Iz9n9ziLJ0D6y1MgZ9jqTy9/q94r+aiDK22utkUMq6D8O7pntR5Ro7uuVT5+Wc/QwOUJWV1go/rwqVdecr0yu/hnYkD27dAf+4j75W7FpYOctMpEPvfD99BLPfjeKI7OUXmXW6FLOhS/630qTrxPgNREC5S/LXwzPOSkVccVPrX6MsrXG/Oond1yxLEKyl/d4aN7DQ+w9c6v8vGreoYGrt0Flvrb/+7cFwvTBxzHWy89fJ6bo+YCfw3WfEA/9VqT76Gjc8Zft9fbMF1WuPyJtKeuyd0TIDXRAuVvC98MT6+NXv4Z33bKfikOxbLiS751j4/6zNFerQes8O/LOroGLiWCw1oNR3WPyq32/0p9Xy5Ij80HndnLPyJPU3E/oAnK1xm96JIOjxv6DJS+WXl8mtFzlSy+PgX29AP53MM/wttro5d/xKcrZL4Uh2JZ+W25m35GJX7vf+ArffyarurAFQP1xK/G3VaL7l7+Fp1v4vH4v4zrAnOJS5e9RvOc1HhG6fiDjZIe/I6wxAsNfYLQRuEqXegZ9SPGz3pU35Ecvj4F9vQT+dzDP8J7hY0Rv3bLPDHuEZ8ks/JL3uOd0h0VTfulPfbjnsus9PNrupoGLg7nKdAP4Sk+XemHx/91/OiCly59zEeJZ5bmNkq6GCwiLPFCQ6fqCNoMlL7e3Lk9/HFaLx7jZ92rp4Uff58Ae3uBfO6V6eW/wkavT+J/ql8jsfTIUKetMvCvhLqPsu/366hnnN1f17XSzy/pWjZwkZTWAprhw5bgjJ63yXrcv4Rz0Y+aAU3D8wJtJWzR7/46fuQHeltiPNKjPXSd8R3to0N3RHwjfnnsjh/ZHdnD16fAnr4in3v4R3mvstPjH+fVIzPC+5XYyddKqHxyv7nj0Ebuosus9PMruv4YuDyokcJOmfa/7N6bKz+bX8RbH2xy402ERuLNYBRv0e++Ol6z6TprPK30kq4WH6J+6ZltvG7X8Whrdk3MT4Ejd7tXppef8+yV281/hV9X2BjJE/XaI4vMKijb8f5xV0VnHxh5z9ar/PyKnssHLhLXU2S/zEu+Ev737zCoIZQuOjlij8ZR44evFbbqd7uORzv4Jb2jDS3qjD5q/8iHKK91SUeJ74zmdh0/k+vdx9+nwN5+Jb97ZXr5r7DR65P4r/CLuujx78l+Ec8qqLz4nfO7Ss58vwdf5eNX9Fw2cClhHF7Ctl/CvlJkq+PwhsDlx4Y3jxIf/D1Qenr0u13Ho03XyZ2IPD1r6SvpOfKhpF96SvRemtt1vFfPEb/0ksenQM6gBfqZtfAnT1vvjHnqzTO1FPWsXo/6hX8rIDEd3bPRvRX+fUnHHwMXiX8CVJKf4MddPnypyHbE4g+46x9tDJJzna7H9asefK8Hl37nR29NZ80f1+G49NV0OV8Jx5b2pKfE00tDZ4Q1PZGPdY1fdHL4FHhXvzizS22c8V29f5VfvXaop9356PVL/uDbSii9uk+6c6X7xl2s7UcZ6YN3pZ9v1/XIgUtJ3V3oT9b/9qK6yn9daLdF04iXv3VdayrY0P6MDRoQ/kjvkb6aP8hHKH2R1rMmziOfevS5/47XdDiP4zV+0fH5SVD56/nK9x7+Ed4rbIz6dYVvIzZGZHpzIBu9dpBZDeW77l3pvrXex5KsaJJf7e8b9T1u4FISe4v2S/xvLKIn+FxrFLUGUKKXmgqxwT9rB/moF/0OS/74Prj4WvTBD8QX1oLcJaeN4u6/4zV9zuN4jV904n4SJIctEL9beGd4ZGdG/hdln5wz6mYl1Bnr3pXuW+t9rMk+9a6uzF+Lri0DlxvuuaiS6+H/Iq/nLvH//kX5o1x4M3C8dPlbaTQe2XWZFv1nPMTientwfEMGfboP0M58cD5w6XEd0Eeh++B4TZ/zOF7jJ+6nwZ6+hO89MiO8nO2I7G6Zp/p2lV8jdiSz+ss5l+5by30syYkmWcHV/r5R3yMGLiWOw/5l+MYCepLP3hS45LUm0EInNud1G053/IgHnapzl+nBY2zodB1HPpT40CHo+zO4++B4TafzOF7jd5+fgvf2L/ndKzPCf5Wd9K3vj5PJ18j57Kp53b1451ruY5SJa+nY5fNb9D5i4KLofhW+pVje4GepWcSL37Im1sjb0nicJ/qDXtV61N26dp3S57qibeet6RcPftV4RuglX4786eXH5yfB3h7G+fXIXSXT49MM70g8M/Z6ZK/0rdeW+Hd9ue/kyu8me0dQcuw7Ltoun9+gd8vAxSH9EtRhj8T7hiJ5m4/eHMC5/CUYeTxe7Ukm8pT01GguK901vhG69MWG1qsHHbN6ol3ijjDyja79nJ6C9/YAz32r7FUyrf7M8o3EM2uzR/4K/0ZtSG7HV/kZvZdncjv8fYvOHLg6/42i0kXlsEt7NRoyCfc0jJ5HHl4aBWfCWjDy+N4Z7rIrG5n8pL7OfDjbdx/PeFv30Rlhq/wZH+f0JMh5tED8buF1Hj93px/hIzJH+lbujeZhpQ9Hut6QO3K4CiofZ/dvZn+Vn2/TkwPX5MClAz+6rLW9txXKW/3lsW9tDsQZ+Xv1RHmtqZXSXi/N/ZRvvfLiRy76BX1Ep8uQswidZxQn/qfB2n2v0cl9bb9Ev0qmZHsXbSSmXb5EvdRYpK9ej9pBbjVUfLqfwNG7WpNb7e8b9OXANTlwjVy6NxTGV3z0x7528aGLl7ihRdijD1l0Ckoe+gyUrqNG2OonvrkvrbIuU8Jdj+Ml3l4afj8N9vYDzrFHbkSmR/8dvE+OiRrbnZdRO8jtgIr56G7O3usdPj9ZZw5cEwOXDrbnEj65EL7sG03hqHFojxyIv8aLriOeKIves+YV5Wpr9NX2RW/1U7qiX62yR/ajD6t0YpMcPAn29IJRXuLtleece+VG+EdsjciM+DYqc5V/sjNiC7nV8KzPzd7r1f4+XV8OXBMDV+/lfXoxfNm/o8bgcfOg1xrNkR5kI6ROIn10jb9H8q1+Spf0eLytskf20em6wM/k4r77pj3ifxrknFsh/rfywyc58FY4ItOqO/KN2BqRiXZ3rq/0b8SWZHZ8yWm8k6y50/GOst8Cd/j9VJ05cF0wcD318H/Rr9ggYg5aGgQ8rstx9luhyzpek5fPaoS1/TO6bIhHes54r9z32B2PPsQze8qax6kV4ncrP3ySA38iHPFvNBdXxj8S14h/o3bI4WpIDLqH9I54J1vXpXu92t8n68uBa/PA9eTD/0Xf/MIL9xy0Ng34oi7W7LdC5CIsyeNvaa+VJjvila5WmSv4Yvyso21y8DTIw9QK8b+VHz7JgT8RPt2/0Zw9PS7qaTUkX/SNeB971tzpqGu1z0/VlwPXxoHrqYeefv3nL6/r0pMLNZWexiFebx6O79Iz42vJJ+kr0e+ieQ4dj/6QhydBHqUeKP97+MVLzL1yV/J/Oa6R2K7OPTWyEiqGeA9H1n6vhbuOlf4+VdftA5cSc2VBXmHrqYedfv337znospOPePG9CRzhsXmwPpIp7SEXYeTlrkT62dr1wtuqqySLjtXQbTnudjizJ8Le3sIZ9MiNyPToX8E76uOo3Aqfv6JDOdzxJT9+FyNeu7ORr7be4ffTdN42cJEIDvJLkNgS7rn8q/NKo6g1ghoduQhr/DV6lGft/MSsPae34OhzWd23UdkWuREe99Nx6cJ38vA0ONK/FEOvHHH3yl3JP+rjSD6ujEu2nu4jud8BFf/RvY53Fl7kgNBLcIffT9J5y8BFAnQAX/oSV8J3DFqckzcK8FIziDR4I4x8Z+soz9rl3Fent+DoExR/qfGxF/VF2bi/cu22HJcNrcnBU2FvL1McvTLiH5UbsTUq8wYfR2N7utzO+6HYa3fe76zwGl+NLt07fX+C7lsGrqcX7Kh/TzjQ9GFs2JttFrUmMkOnaXGmR82u1Q66jvhjLlgfyVyxh+9PhL09gxhG5Hpl7uBXfL12R3PSa2eG/00+4utKqNz13nXyfSbnulf6/CRdOXAt+pXtSYeavswPXWfN4Yp9H7i8Gc3YVm2c6WLAinDG7grZJ9c1j0oP5Cx2y/ToX8U7GtuI3CqfW/W8xUf5ueOrPI3c5yjna3KP3h1+P0Fn18CFwyQn4X/+SJS8JNxzwa/MK0MGF/9uSOzenEZ9QteZPDmIELkVvqCrFeL7U+GVvVA56LU3ItNrw/lH7HG2rueJ+EhsV8dBLndAxdJ6b8/41GNcH/gOv5+gs3ngkrNXF80b7D3hENOHtYNebdA4ax6j+24v6tDZaj/Se9fUCA2tVx5+6ZnVga4j6DELx/+nwpFeRS57ZIm/R0a8o3K9duAfiQ0/0fFUeHUuR/OAnzugfIr31+9s3BtZ7/D7bp1NA5ecHD30r8rdfXBpf+2QFfOp5sF3pFn0yGAnNix8KjW3Hv3iXaFrhY5Wv2u5wIenwav6nOIesTUqN2JLMlfbG/V1X15+AAAgAElEQVRzVO4N8cnHXV/lLd7leGfjfs8a/bv8v0tv08A1WpRflbvrsNLuvgZSy60PQysbijefaMN9ofE4/wgunbO6Vuho9T3m2nPyRPyqXkfsvfY4u165Uf5Re6Pxjfo5Kjca36i9UTnyuQNyRwXlX+vd7uXb4ftdOnPg6vhL83cdUtq9ftDynPtAFJsFfKI7XwmPsqU1cq63xNdDQ5d098iJF3+ES89MY3VdPX7g/1Ph6GM4IkcOemU5u165Uf5RP2Xval9HYnyDj8TFWayG6KdPaH12r+kBPb1otd936suBKweubT8731nYK22fNQnZouk4b8TPmhH77ju0GYi+ER3EIFnpaWmqNTuuq8ZTouP/UyEPzxWQHPTa4ux65Ub5R/2Uvat9nYlxVPZKOc5iB1QcpTtbo9EDBGs8kb7D77t05sDVMHDddThp995ftkr5j40CHm8S3lQcd54jHJ29zcx1yu4KPeiULvkT42e/Bnv5S3qI46nwysdz1BbnNyrfK8dZjcj1ytzFf3VOR+PkLHZA+lvp3pZo8Me+ENeK1eV3+H6Hzhy4cuD662G+owDfZtMbBr57YxDuPI5HvtIanWo4sQmV+I9o6BI84mvZkw58GvFrxgeP44n46EM4Isc5XC07Ym9UhjMelb9SbuY8rvaTvK6GiqOlh4jH+6Hjvocu9rVe7fNd+nLgOhm47jqYtPu8X7dKZ1JqNjSKCGkkNej6azw9dPT1yJR4Z/WskkfP0+AdD+eITeVtRO5qGc73arsj9t6SU8VGXndA9bpS74i02BNZi89x5Fyv8B2+X6kzB66DgevKg0hb7xiw/JzUxLwheJOgeThkvwTRg/4STy/NdeFHrw7xS49ibZElDudFfsQHYngqHHmkZ2TIZa+OUbleO7/G/6a87rxDnLvf+xJOD4jQeekh0ul08J1x7NadA1dh4Nqd9NT/vuGqdGZHTYPm0AOxUWs0PbpW8SpG+TXjk8vTTFv8Ix9Phzw2V0By0WtrVK7XTvL/5/995Il5oAZ2QcXMve6558i0wl3+X6H3soFLwTyxCEs+XZH4tPGNoUvnyODV2jBKfNSDN60S39U0+SWfRhvobFzIPxWW+sdOGucxYmNGdsReyjxr+LriDtEngDP9qqZD9Cti2WFj+8D1pku+I8Gp8zuD1dFZqgnUGkRL0+GetPBeyeN+jcTn8i1+ex6P8v2UvZGhAt9HZUflOIsR+ZR51vA0cx7U32roPrXc9Vme1f5foW/bwIXzfghPxvE34W8MSKvPmUEB2NNM8EX3o0duJ6/iWOGXdCgu6evx1+3jxxPhSE8jjlHZUTnOYkR+ROZqeyM+/qIM9bcLKqc9d72X9y29oZTfLQMXht5UzPicMAeumRpQM2gdLuDF3u5G1dPY5Bv3t0cu8io20Vpz4vLk5cmQHPVCxdQrI/6r5UZ8dJlRf11H4mt/Xdt9nzivkTvv9/8M3x3HDv3bBi6S/nS4I6mpM4c2hqnWpqF7csZ79b7qeMavGfm33KGR/kZeRmRHZcjnqPyo3B2xjvr6S3LUwy6oXKpf7Rq60L/L/116/zZwydBo4eHkqPzVcvibMAeklTXAsBVhaWDCbmnvSlqpMco39yHGw9p5HJc8jVH0M/4oS26eDEd6Fnl5iyz5v9rfEXsp0/ZrGGe6C3IOfqd34bti2KH3j4FLBkhUDxyV67GxkndHIlNnDm2xBhgwgKWGw90p7V1Jk49ur+QXcUTocuBH8vAcwZjLp65H+hKxjMqOyEmGM+mVv8vfXj+Tv23YIk+c6w6IjdhXju58755sSGaH/7t0/jFwkaReKOd6Ze7k35XM1JtDV6wBH05iQ+HeRPpda5ojfumOui8ei+POA04e0Am9BSL7BjjSxzy/vfIzsr224OccWPfAO/yVf3fZ7cnN3byc6y5IfCM94KxPoFtQvLtiWK13auDCGQ/+yTj+JvzmYPSvf/1r6cUr6RNNH9UQH3CHjvtwQvNBBw3jrMFcuS/fS37FOFiXfJOOEr2VRn48x9LpeQWHl/0avcQHbwlCi3L4dNTr4BGMfNILjf0jfngFoyxyzlPCo1yJB198TzTJIu88jkuGtUPkXOdu3P3ttXWHv70+ruInTzuhfOXOOw7NIb2RvsLaeSIunfDtjGOV7umBa9XhX6FnVdJSzzMGtn93+Bf8jxqCPjQSdzk2kLvX8q3WGPE/wugz8UV66xr5hN/OwK6eT38e1S/5Udm3yZGrnVA5ab374vP+ciaHbsmId2ccK3QPDVwYfktx4W/CZwxKK87hrU+RGoM+NIqzhnL1Pnmlgbl9b4SOO4/w2fjwIeG3M7Dz/aDHjNiQ7IjcG2XI006ovMQeUVuL96i3uBy8ooHvjGOF7u6BS0YV3Ju+KxKVOp41rH3hKfLmMYqrOfEZ1eFyK3RJh/qD623BPRb8SPjdDOx+Q974Vu3OSUn/7rcNm0c9QDxH+9prHcR2xzOj//MD10xyUvZZQxbn8YUnSM3jrMG07isfrbw1Ph92ajytdPlDc2yVge8LZ5sxtGeAx3g1pFeM6J2RHbF3twzx7oSKkTtegvRDYI3nrK9of2ccs7q7B667i6PV/mxiUj6HrfZnY4zzrHmUmk6kueWjZhXl4lqyfM6aY0nWab3yLosPCb+fgdZePsqnHj4q+4tyu9885fSoR2mfXlDqjdCOdCC/O5ZR/YcDF0rfWHz4nvCZg9PIuXzxCfIm0tJIaChA5QTcdUHrga6rRw5ezscbJ3s1GGNGR8LfyMDOt0U9Zqf+r+ke6ck9MsoX9x1Y6wtn9NjrWEtOeI9fV/KeDlxvKqorE5e2rh/kvvoE0SwEzxpN3FdOdEdpNOiKfGdrcjsqj336xZk99j1mfEj4OxmgXhLe//eir3jTvFfRA0YgfYr+wdp1XRFPr43qwCVFb7sEvcEn//VD02jOv/4ElRqGN4+Ikw8amPbRQROKMrV1SVeN94zu/pzx+r58zs9vZWD3+0Kv2W3nK/rJ125Y6xE1uvcJ8NZetzuWXv3VgettRdQbePK/Z9jSWf3KxxvJ0eBEPlqalOukYTmUrhY9LlPCpadEb6URU8LfyUDLO6P738IXeejxkf719Wy+yNsuSP5b+8IIn2wgtyuOEb2vH7hGgk6ZHLae+qT5cHQ2cLU2LtdJE3JILpzWi0uHN7leefHn5/cyQA0fQfXro/3aHn2+tr+bPur3rF8zdsnZTqh+pBiPeoT26X9nvFEPctB3xtKrOweu////tqI3ccl/3dD2e8/Q8X9WwfMRmwtNxqF4+DpdOJ9I711LT29jdBv4kfC3MqCaOfrSZ494jvYkf7S/c++Ntsn3bqi8+/2Pa+2VaC5TwmM/lI7dsfTof/XA1RNo8l43IK3K9W89PX9Gy4AE9OYCp9Na8diQJKdPS3PDlxkd0U90EVPC38qA6u6rX/XBO2Kj/47aRn43xL/YE3x91HOc7wzfHUur/lcOXK3BJd/7hizO7LeenXK0pWYDp5rVWZMp7TPgsCd9LY1P/CV/0CMdUTd7Z5CYEv5mBqi/r0H1srtimrFND94N6Sf0h7gWHdpIb1Hu0aFYhO+O6Uz/6waus4By/71Dlp/dbz49f4/aG45wfWgkNKoeGBtXjz73xW3itWhRv/PVcOQT/mYGdg8l6iu7bZT0089Ke1fQZuLG991QeaAvOA6t1nPYL0Fk4t7uWFr058CVf4fr9qk/FupvPjvHUauJ8Ck1pthcjtY+FEnnEW9tL+rAJ5qd79d0QCeuhL+ZAdXO0Zf+cMRztCf5o/2de2+1Tc53Q3JPL9AaPELvKSN9Bn27YzrS/5qB6yiI3PvGr1qc428+O+1Re+OhifRCrB01uCOd7oN0OS/N0GlHOL4k/M0M8OjWIH2htn9Gl/wZz679Wd9n/ZqJHd93QuI76g/sec+hxzgNviMo/p3xnOl+xcB1FkTuf2Pg+s3npi9qGs1RU2nZw2oLb40HX9Q0azwtdHxJ+JsZ4NGtQfp7bf/JdPn+ZP+OfCPvV0DvE7Uhin4TocvW8KjziphKNh4/cJWcTto3Bqx4jr/53IxF7U2n1mSO6LIam9ARv/ZKNqVHTftMtrY/Fn1KfSkDR48+e+oV4L2QPtMrt4L/Ttsr/SeOXVC+0iNqfcl54B2Fu+I40/vogevM+dz/1uD1pUdkdyyl4ae1+ci3keYVbaKn1iBb/Nmdp9T//Ay0DAbq9S18JR7eidLebtqdtlfFRgy7IX0EWOsfZ/s1uUjfHU9J/2MHrpKzSfvWgOXn+fxn4ZkeqvnwjQ2ltqYR1/ZrdOzQ8FwPezXZGv2ZWU2vrs4AtVSD3itqPDU6srX9pLf9SwvkcRfkHLxX0Guc1oqfye6K40jvIweuI4dz73tD19XN/Uv2GHTOmoualHj4qLm1Ni7nczvSNaoHnfiT8LczwGNbg/T92v4ZXfJnPEf7K+RndRz5t3uP/O+ExECv8l5DvwAe7SEPr/SCA6HtjKek+3EDV8nJpH1vyOJMf/uZWRe9GtBZE1Kz0YdmQ/MZgXg+IosMOhJmBnhsj6B6xtH+0d6MrPSukJ/VcRTf7j35fsVXcdDLYj/THr0j7kF36PxOj/gVcWHjUQMXTr0V6oDdd18LZ+0QOlDypX3X6zhyQOTRUVpHmsv6ntNdn3jgcwg9QtcT9/KpWZeBWqPyBiNr8Dm9F5cenWuvnPhlPz+ZAc8APWInpFeN2piVH7UruRnb3nNHfXAdu/HaMCXfR/pNlIn6d8fj+h8zcLlTb8RHC/lX5bzZJr4mAwxSwNhotNZnpnHhKXUbm1fJZomGnoSZAWWAeqpB3oTafgtdOlr4ajwr5Ed1EP+ovGKakUXe/diJyx59w3FoDlt7UInPaTvjQfcjBi6ceStUQeS3Pwf51KzPgBoIX29KwnnYIr1n7R73yEVe15N4ZkAZOOqhehu0Dzzire3xvtT2z+hfkD+L8Wif+K+A8sN7Rlz7ng9NTm/BXfaKuG4fuK4IcqeNowLNvfoQlk/M3gwwdHlD4VFraURnPLO69kaf2t+YgbN+SR8/49u1L/szumf9n5WX76tiwJddkDyrD3kPO+tLZ/vS6zxR96540HvbwIUDb4cURsL6cBVz88bH4I0+x6FLMXizcTzy+h64ePThPKG3QmyIPz+ZgZgB6qoG9VbU9q6iz/rwdnnl+ao3mzOlv2jtPUR0rR3CW4PIA51PtN2x3TJw7Q7qCv0UQ8L2QYtcxUab670ZUCPRR/n3BuM4DUjQ6Y67niNdLuM4NkTLT2bAM0BvOIL09SOesz3pOOM52n+C/IwPszlE/grIOcQe4mvh4ou0ozV9qNTrdsd1+cC1O6Ar9FMICfuHLeUsP/dkgEZTakbslZpQiX+Gdk/0afXpGTjrp/T2M77SPrKCpf1W2qy87MzqWCE/o0OyV369J9Gn1H+Uy6M+5HLOh47avnh3xXfpwLUriKv1tl7O5CsPZE9v/F/0r6XJeFOq4crNWaOryUL/Yn4zprkMXNUr9VbM2JqVl+1ZHbx3o3HMyhMDenZCYqR30MdY74K7Yrps4NoVwJV6OfyE5UGqNS9zrTmlRzMw26ywO9vk0JMwM0AGWnvHCj69GTN67paX7zM+8GbO5gA9u6H8pOfM9jD0lCB2gDviumTg2uH41TpnijNl/z6g0WgTXp+B0aYlT6llNawRPddHmxbfkAHq6g1Qb8+Mn7Pysj2rY4W8dFz1VcylIemMhpx6VY231sd2xLZ94Nrh9NU6Zy5Xyv592FJO8nNfBmgwDluakTymgdX4j+j3RZyW35CBll6p3t/C93SeL8Rx9TvM0ASk18R1C917HzhyguhcHePWgWu1s3fpe/rlfaN/b3gAvuwjTQbozcZx9gX18b0eXPLiz09moJaB1j6md6CV96l8vGVP9a/FL2K4Cson7zla05+cDk7PYQ1EJkL2BV12ZXxbBq6VDt6tq6Xwkqf8K9ZRXmpNN+nXZcAbjjebiOMRDS7ut67RkzAzEDNw1Ct8j/fAaW/FFcvdvq/wgTO5AipfDEPC6T30MtZHEN4IazIr48qBq/Ln0HdfhK/bjw031/dl4Kzx4FmtIbXS0ZMwMxAz0NPvZoYEfzx7bEbeFXpm4oj+jK6JY1Recui4AuJnqedoz3tZiUc056nhUXZVbMsHrlWO3a2Hg03Y/+tVS85iw831vRnwxhObjdb6lOg9tHsjTOtPzkBLz4CHt4F1D0RWsEcu8s7qQT7qvXq9wg90XAE9P/Qe0YQLnvUx8TlPDUe3wxXxLRu4VjjzFB1+qInnwPXkh2qlb958vNHIBk3N6We49MGz0s/U9b0M9PRZvRM9/M7rb4zTe/EVetDRa3s1/0w+8YVYroCyqb5Cf2ENjT5G74mQ/SPoutC/IrZ/D1yzCV/hyFN0UEAJ9wxantfvPRvfiIhGpKbDh6YTm9fRWnrYR0/CzEAtA94bzvDZN+tM/xX7vHlX2Nptg1iugoqH3nI1nInxHxKeOYwZ40+TnclDyvYNaLWmm/T7M8DAJagPtd3b2HLguv8s3+QBdXYGeTfO+J6+TxyCT/f1zD+P5Qocf3p70gr+mfiG/0hxxuhTZTnEhH3D00i+3vQQ/KKvDF2KnfMdbVa/mL+MuT8D1FkL1BvSwpc8+3s5Ob76XcfuaF9qlZMd552JMweuvLi3NK7+dpwSd2RAzYbhy3+x8gbUgt/he9p8VwZ4QFvglwau2VgYAFrytpMHP66CxNLSf1by0AdH4hwauEYMPVWGQ0t43T8JKdf5eUcGfNii0fQ2r3dEml7emYHe/qv3pFfmqfwrYuF9vTtG/LgKKt7efrSCX71wJMbugWvEyFNl7i7OX7Z/Z3NP230ZmB26+qwl969m4Ff7od7H2dh5Y2f1rJDHl6vg6D8Ijgxe3gsl3xtj18DVq/zJ/CsKK3WM/yr2q4/K2+OODaelab095vT/mgz09lO9L70yT+TnnZzxbYWOGfvI4seVENtnvYjedcbXs98bZ/PA1av4qfwcTsLxYWlV7q5p42lldQZaG5f48pMZaM1Ab1/RG9Mr81T+FbGs0LEiP3e8/fJb/eZoWGrtW0c64l5vrE0DV6/SN/CvKKzUMTe0tTbi5HteBs6amxpTDlzPO7enejTSS/XOjMg9VeZL8Vw9A+hM4zC0e43NnlhPB64eZW/jferF+xW/ntr806/zDPBPi8BaczvXlByZgf9k4Ff6XilO3s7S3htpxHMlVC9SrviHPe9JsU/FtfOO4K1xVgeuVgVf4HtjQX/B53xo3p+Bo8b1/ugygqsy8IV+NhMD7+iMjifJEs+VkPhLA5P6lNOP+pbzteKtcRYHrlbhr/FxYAnn/qiwNX9XNfO0szcDNK/Y1NSs8pMZaMlAa89wPt4fp70ZVzwr/F+lZ9YXzudKiM8+KNGXtOf01XhLnH8buFqEvszDgSXMoavloUie/2TAhy4aXOYmM9CagdF+q7doVFZyvGUzOlbJrvJlNier4vH8EttuiO8MU1qD74aKTTaOYvxj4Dpi/MU9Di/hnuGrtRkn3zsy4EOXGk9+MgOtGRjpsbxJI7Ius0qP6xzF5cuoLHIrdKBrFpLbK6F89uEqrn1vB34U618D1xHTL+/NFlzKHw9rrQ05+Z6fAR+4nu9tevikDIz0Sd6lEVmXkR5fj+Bf9GUkD1GGvFwN5QfDlPoSayB7O+BRrP8euI4Ycu///vsnwlhIuT4epFrz86Smn75kBjID92SgtV9EPt6nSO9Zr9Ahe9LTY7fEiw5giaeFNivfYqOVR75c/ZVvPkz5Pww6fRdei/cftY2k/1kkrcWVfO2D2D2tPa1mBjIDT8vAaN/UOzUq63JP0rPCF95vj/EuHF+uhoqXgSoHrhum3pUHflfxfs3u0xp/+pMZyAxcn4HRvkZPH5VHTnrAZ+AKPSt0KIZVembygax8ufor2wxcd8EYc/7CNVgIFFLC9l+0Srm6vrWnxcxAZuBpGSj1hhYaD1oL7xmPdJ3xHO2v8uVpeo5ibt0jpquh/NOvWzMDl/865niLzhhvDlyDA5cnsrXoku/vw9nTGn/6kxnIDFyfgdHeSB8elUdOesBn4Ao9xLRK10w8K2U9rqtw/G8Zjmo8PmQ5XuN3eowzB64FA9eKi0Fh/Bq8vrWnxcxAZuBpGZjpe6v67wo9PLAz8Uh2hS/oWaVrRUzk50qI3xqWfBhqxX3IcrxV3mPNgWvRwEVSOdyEf/81q5STpzX+9CczkBm4PgOl3tBCW9V3n6pHfrXkocYzK1/TO0onz1dCfG0dkCKfD1mORz5fwyeax5oD1+KB62kFTrE9GV7f3tNiZiAz8IQMrOhLq3ruCj08rrNx/X/tnQ3SrDiuRJcw+9/tC72J/FrN1I8pMg2YMxE3RFEmLcsHO123u8elU3k4xnV0PHpe45od1X83RaPXMk/b+Ol5te1taswYroDhEkyaZOL7X7uusOiTAxWgAnMr4FwTa7116Dl1HFqOfUQajnwcNS6NntOsa+XeDdDotczTNo48X/1Wu3q2xorhChouwaTJJv6v8Zq7zNMbFaACZ1YgtQbWWntU26GhHBxarv3DkYvG5Yga1+yo3LtRKiPUP7uvpY/hmmC0OlCabOK/TdeZiz99UwEqMKcCyXVP6+zRPlw6lUdpHc3nijqOMWlcqvesqNy7qZIh6vfc170PfuHCeFkWBsG8N85Z7umFClCBMyqwdz04u73DKMlAOMbiyKfycOm4xqQanRFrDG5T9Umv94fhmmy4BJgD3FU0ztgI6JMKUIFMBWavS641VToVj47BoXE0h/68xtbvnX2tnGbGPuZPJunId/0XrdKpPqWH4TrJcAmyDsBTrzPLPqpUgAqcUYEz1rFaTx39utZll45jTNJw1Uh6R6NqNDsqb5kgd5Thqlh9ddOF4TrZcF3tJRCMM+MZmwJ9UgEq4KvAzPXiVV9XW0dlIl7leta9q9Wo6qA6zY6aA7fZ2upVP/0ehusChqvDJhCeFH3LPkpUgArMqsCKa5TWYsfYSsuh49K46tiU18yomnYzVPf0uV/r3misX7b0Z/sMhutihutqL6nATMZZGwT9UAEq4KlAcj04W9u1Brt0nPVw5VQ6Di3pnBFV160pqs/1XUX99eCrNu/uyWz1Z+u6NDFcFzRcgk9ArB49WwAqVIAKpCuw+lpU43MYia7j0rta7V3j0n43O/Z6yjzVvVfXujcSt4arGy8M14UNlwDsYKx6nd4o0KcCVOC3Cqy65nwal9NMfOrnjO+uODbtdbOj6l9GSr9CjZiqX9tguG5guFwviOC6YvxtK+ApKkAFUhW44joxIydt+o6+rrh2X3F8yumMWPPcDVT/Rarf//W662O4bmK4BKJjEbiaRmrDQJcKUIHfKnC1NWJmPlprKx7tV1pHdZzPO3Ny1EhjU15nRP01oExV5aRrV6w+MFw3M1xOwAX62fG3LYGnqAAVcFbg7HXgSv1r0z+ak0vnaB79eWdOCS1pzoxVn62x2pqw7ffvPr/6hUz6GK4bGq4Csb9AK1w7Nw60qAAV2FeBFdYQ5xhca6xMgzM3h5YzL1etalzK64xY/XcT5TBcW00M100Nl4B0vHxX0Ni3PdCaClCBoxVwvffbPFy6Z+q4TYRrLK683PuHOy/lNzPWHHXDpTnr945eY7hubrg6kALkjnG7aPOZClABfwWca0Nl59DTGubQcmpUXg495/iuqJXISZqzY833q78SlNHSr17bqO+/RQzXQoar4HQsEGdo+LcWFKkAFdhWwPVul65Lq3S0sTo1j2q51lP32Fx5Ha1Pf941RumcFctI1bjeGaet0dLnd+239zFcixmuDmp/Ia5+vd0Y+EwFqICnAu53v7JyaUqr1i2XpktHa6lDzzk+l5Z7fK68qt7KbXbUXG+Nkj7LYG2jvv8WMVwLGy7nCyAQU9GztaBCBaiAKpB6V126lae0rrhWabNXjkfilbWOjKs/65pD1eqsqDF9M0/b72XCPt3HcD3AcLleBIGYiNokiFSAChyrQOL9dGn2kUlT65Oi7p8dteG78nCNz5mXKyfVyKmncZ4RazzdOJWZ6p/7tdp2w6V71a7fx3AtbrgEq16Iq8a+EHNNBajA/gpc9d2uvPS/dzk6N+p3ffxy35WX1mGn3i/j2T6jvLb3f/3sGl/1r9zOiBr/K2NV9+p7fdevdW/bRvcxXA8xXB1awXSlqAWZSAWowL4KXOk9fpWLRvPqu7qntend96vcv+o4Ky9XjZ1jlNYZsX6VUk1klraxvt/e65+l0e9huB5ouJwvmKA8GrUoE6kAFfhegaPv26znayQjfWlTHWl71zZXXHfdtXTOo7TOiqpNGaYyT9041XV9v723/aw2eh7D9VDD1SEWWGfH79sMLagAFTj7PU30r/UooX0VzauO0Z1X6blqrtzOijWOrYk68hnDheGyvRxHXzK2UipABd5X4Oj7ped7D7p3dtSGenYeyf6vPEZnbk6tmg/pnRHFwxGT1Z/FcGG4/oAWXGfEvglwTQWowD9/FVe1cL2TTi1XTqVTm6lT76paVx2nzIyrbs5xKrezomrSjdOv1xguDNef4epAC7KZkU2WClCBfyrgevek6NJL6GjtSWhfSfPK43TmltCS5uwofn41Wf05DBeG66XhKqgF2qyojYFIBZ5aAee71mvo1E1oaRNNaF9N84y1daQGzjmQlmusXe+Ma9Wvm6e61j8Mv72vz/W9/tQ9DBeG663hcr0sgvVb7BsE11TgSRX49m7s+b7qtqf9FdpqE71CLukcrjxW55rv1Ko5Ud3OiJ0Jmake6/v+WdcyWzJmGC4M1zDIHbrU9ZM2WcZKBZzmyKmVer/f6WoTfff9Svc11oorjevVWJxj7HU747rGJyM1GjFcGKxhg7WF+tUL5bzH9ksFnlKBxHvj1HRr3dkMumuhddWt69Bz51Z6jnL7W9YAACAASURBVLxKQ7mdGfVL1dZw6X7luf2uf+YXLgzYbpBdL9ArnadsuIzzmRV4xfzq9zTTq49zdHwyDKPtZ7ZTbhVd/bq1eo6zr1WTbqL6dX3fP2+vMVwYrt2GS5ALPmfU4kykAitVwPWOqCYuvYTOHXJMjHuPpnsNLb09/X9qe4fclOMZUbXbmil9ru9fXdc9DBeG62fDJdgFoCNqsSZSgbtXwPE+SKPXQveuHJXvlXM8O7daP105uLXuoKf9Z3bscyZjNRoxXBiuw4ZLwHcQf73WQk2kAnevwK/vQH+ualCfFft3V77W3F05x7Nzc5sa53icuVVeCT3tO2dE1XrUaKkdhgvDheHS7kCkAgcroIWY+B/brzcr1lImwTW2p+pp3LOj5k3/sLwM1beI4cJw2QxXh15A7o0H9zsepwKnVGAv57T/x5DVhKketYboevXoHmtCz6VZOi6t4kJ6Z0bxKZOl/wREfe7X+r4ihgvDFYNXQO6Jp+yWdEoFfqzAHrZp+4/J6rWo0uuzNlB9Jr6u2au6uGtXeq/6+fVeQk9jPiuqFluTheHCWMWM1QjsAvNb/HHf4zEqMLUC3zjm+3Gj0Gvl3pS79hWvnePVOuwc5x3y07jPiL3W/Zesd9f8woURm2bEOpyfrqfunHRGBXZU4BO3fPebyep1c27wXfeK1zIIrtyk56qh9Fz5lY4rN+WkHM+MyuWVydIvXRXrewwXhmua4Rp52XbsfTSlAlMqoAWVeNxQfauhNs5v7Vb5fmRN3DNWd/3ukJ/GfFbU/GC4MFNTzdQe4AXpqzhlF6UTKjBYgVeMci9jvrSGXLW+7vyurlfzUDk658Opp/qdHesXrKrR1nTxCxcm7FImbPsiD+6BNKMCsQpsmbzi5xr8FfM6mpNzM1YuTk1t7NI+GqV39RyPjrM/7xxr6fYannWt8emvDmW8MFwYrksA+urFELSxnRRhKvChAuLvqrFSv2purry0Lrj0Sqc0XXrKz63pys89Xum5x+vU6zn2+Zl9rTmU2aqI4cJwXdpw1Uui//Xrurf9vG3Xvy/4P/2vt/2mvW3bdes7/dF9td/G/r2e6W36Pd3f5tbb9O96e/XTv99eq80rPWnpu3dtu6ae0b3++dXz2+97X/277XVvt+1LbRW3/W4/VztxosXyaKw+jmr05zWWfm/l6xqv5sU1zoSeU9M9ZrdezYNzvNJzamrMZ8caG4arbYpnTwj9/2NQqAW1uAIDzo29xuPSS2xMztxSWlevoZh1jj8xZnd+zhxVQ5dm1zvzWjXXL1vdfNU1/5YiZuzvF5ozQaVvzNcZDGiBdETl79AqDbeeK6+kTmLMpenMOZWjM89Ujleuo8Z8dpTZqojhwmD9LeRng0n/mKyzGbjyBlK5VX2cOd5BS0y4ck3U0K2ZGLMzR+WX0HTOc8/zrGuNZ2u2+IUL84X5goFHM6DF0RGdm1Hlow3DkdtdNDRmZy2dWqqj8tTno/HqekfH9+5599yojmdGjRXDxeb6t4ifCSR988vWlRjQAnk01piOavTnVaN+7wnXd6ijO8eaV7emWy/BnjvH0rvKn6rX1nTxz3BdaIKuAgp5XOelZS6yc+HaRPo8uTVdegkdjdup7dZ069VYnZrSqkgdPf9B3V7Ts641l910YbgwXH+Lx1lg0m/WVFDf1/XVguiKqvNV9Vx5dR33mEvbrenWS+QozV5bx3Vi7I68ukbl2D8fvdaYrxBrLBguTNbfonYFKMnhtSGgLvm6HF3c9bzmSp8dMaHpyKtrJHIszd6H49qdp/ScuUrTMV5pJDSl7YqJHKV5dlSNZLr4hQvzhfmCgccyoAXREWtxd+hIQ5uFPl8xJnK8g+YdcixeEnm6OUzkKM0rRNWrTBeGi83276W8ApzkkP9Vhxr/U2Mtho5YdXXodI2EZtd3XIsnh5Y0EuN2aqbG7MwxWUtpu2KyntI+K6pGGC7MFmYLBh7LgBZCV3ziZtk3MVcdS8ddS+XpzvGpeTrrqPlO1VJzf1ZUrTBcbLaP3WzPevno959fl86uhRZCV6zxuLSkk9CUtitqHt16zrErR6dmjTehl9B0zU1Sxz1uzU/pnv1HdeOvFC8wGWfDQP/nv5DMwfw50CLoiJo/h9bdNBJjd2u69WqOpFnRNWdJTVeOKZ3k2Lv2WddVNwwXhutfC8dZMNLvfMPx5Jq7N42qpVvzLnriyJlvop6pPN253iVP53xLKzl2aZ8Va4wYLgwXhgsGHseAFnhX1CLu0rubTo3fmXOinnfTdNfUOT8preQcSfvMiOFis33cZnvmC0ff1/glz7lhaE6dmimtVK6l687ZrenWq/EmNFO6qVzd857Qq7Ff4Q+G6yITcQUYyOEaLyXzkJ8H56Ku+XJqprRSuZauO2e3ZmLsCc2qY0I3oeme85Sexn52xHBhuP5e7rNhpP+80aDG/62xc2FXTZ2apVW6bs2krjtX9/g1Twld59iVp1PzTvPuHrf0VNczI4YLw4XhgoHHMaBF2BH7Au7Qk0bp6toVlatLr3TuopnM1VlPabnnPzFPyvUOUeM/M2K42Gz/FswzQaRvft2ayYBzg1DeV9es/CpXZ57SdOsmaqpcnzr+VE3d9UzqqQZnRQwXhgvDBQOPY8C9qNcCfgfNytGdqzavxPjvkGty/KmauuvqzjOlp7k6K2K42Gwft9me9bLR73V+xXMu6JpXp2ZpJXRL052ncnXrpsafqEEq1zvU1J1jWk9zdUbEcGG4/hb2MwCkz+uYkKfMhXtBV90SugnNyjehm9B8cq4JrhKa7nlP66kGZ0QMF4YLwwUDj2LAvaBr4U7oJjQr34RuQvPJuSa5StTVPf8pPdX1jIjhYrN91GZ7xktGn9f6Fc+9kGt+E7oJzcrXrZvQS9RVmu4aSNddh4RuQtM97rSeajA7YrgwXBguGHgUA+7FXIu2U1eaFZ26pZXQdOeoPBO5qrbunO+WayJfd01TemJgdsRwsdk+arOd/YLR37V+3ar5cC/iCc3K8W667rqqBu46lN5dNFUDd23d43fnN0NPHMyMGC4MF4YLBh7FgHsx14Lt1E1qlrYz15SWauDOV7ruvFO67jyl566rdO8SNV8zI4aLzfZRm+3Ml4u+rvfrVs2Jc0PQHDs1pZXK1a2rfN3xTrXV2Kntf6zvl+qaimJsVsRwYbgwXDDwKAbci7cWa6duQtOZ3wytZA1K2z2GZL7uXEvvbvkma6BapCOGi83278VLw4b+NX/xedq8uBfuqp9bUxvinXTvkqt4d+eb0nXnKb275au8nVE1mBUxXBguDBcMPIYB52ItrVqsde2Md9N1jl1a2gj12RUTuglN13jf6aQYe9ffFe9r3mZEDBeb7WM22xkvFH1c+1e8xIJfc+7WFUdu3dJL5JvIU7km8k3VN5FrqrbJ+iZzTmiLh3TEcGG4MFww8BgG3Iu1Fmi3buklNu9kvqkapOqQyPdumnfjIVlf1SIZMVxsto/ZbJMvEtrX/mWr5iexWGve3dp303WPX3rUIftv/aXqq/m7S1Qd0hHDheHCcMHAYxhwbwBaoJ+u6x6/9FL1Lf2ktvK/Q6QO/zW1qkMyYrjYbP8WniRoaF//F6AnzJF7A1TNnq7rHr/00vUtffX11Jiq8d3qqTokI4YLw4XhgoFHMJDYAFIbthZ9d84pXXeeXS9Z497PU6/vyERqrlSLVMRwsdk+YrNNvUDo3ueXu8QiXfPv1u1MObVTusoxUYvSVt7qxxVTuq78ZumoDsn5mzUWRz+9Hu5rDBeG629Bc8OF3n3MyBPmyrEYbzVUt+39o59TupVXaR/Nb/u88k1pb/tzfFbODq27ayRrkWAiWW/VIhExXBguDBcMPIKBxCKd2kySukntu9U4VYtEHZKaVYdELaSb0E7Vo+fsvsZwsdk+YrN1vzjo3e/Xu8QCXRy4dcWWW1d6iZxLO5G3NJM5qy5Pjsk6p+YuOV+9Hs5rDBeG62+hdIKF1v0Myepz5l6gVS+3bumVtlNXuSo6tZWvO2flmMpZeaufJ0fVWNFZC2lWdOomtXrOzmsMF4YLwwUDyzOQWJy1ELu1E7rSVHTnXHqlndBNaidzTtUioSsuUvVI6SZqIc1eE9c1hovNdvnN1vWyoHPfX+20iLpjMZHQFGsubelto0u/dBK1kO4dtZ21naVFnf/5L/tv3xXHZwwXhgvDBQPLMzBrw3L1o8XdpVc60lR0and9t660U7pVj4T2HTVTbGgO71Zr1cMVMVxstv+zELvgQue+vwitNneJzU81cmundZP67lr0jbryduunauHOc5ae6kGtM/93PxguDBeGCwaWZyCxYWlzSmkndEszsZkq15R2UjelrZrcKVYt9Medd0rXnedWT3k7IoarAeYoKBr/vLDUglpchYHtIur4rLE5tLpGSld9lL6unTGZd1rbWYe7a92x1umcpX80YrgwXH8nmqMw8TwG66oMJDbBGmtCtzRVx4R+Ku90znfMOzF/aU3NY6LeCc3+vszQ7/XZe43hwnD9Le574aE9BusODKQ2KI09oV/aCV1tTgntO9cjWe9ErZOayXkUf6l6J3VVlyMRw4XhwnDBwNIMJDanvui69aXt1k1vdtK/W97JeidqMUMzWZOUtnQrumvUtY9cY7jYbJfebI+8HDy7xi947sVXeuJDn10xpav8kvqlrX6cMZlz5ZnK21mDmVp3rXcyb2kfiRguDBeGCwaWZiCxUfVF160vbbeu9FL6Kd2et65dUTlXdGmuoqPauMeT0q08Z2irj18ihovN9g/SXwDimTV+BVp5HlMbRtXMrS09zYc+O2M6b2euXeuuefcx3Ok6zWBqPmfkrT72RgwXhgvDBQNLM5DY5LTQJrRLs/QT2nfPO1mXRL3vrJlkRdrJ+Uxo97x/ucZwsdkuvdn+8lLwzFq/2iU2PTGC9j//33NVi6pLoibSTumndFO1mKErxlO1SemKlWSNem32XGO4MFwYLhhYmoHEwqtF9m7a2oxSm126Lol6p2uSynmGbno+0xwm9FWTXyKGi8126c32l5eCZ9b5hSu1KYmRhL60K6b0E7qlqdwT+nfVTtRiluaMmic5T2urPqMRw4Xh+lskR6Gh3TqGZPW5TG1MqltSP6ld+Sf0qcu//4o1UePZmilW0uMQi4n8u/aeawwXhgvDBQPLMpBa1LXIJvRnaFcf7tyTeVeud9d313uWXoKVnntKfxYv6mckYrjYbP8WshFgaMOvW3dioC/srus+fpdm15F+v+e8Ln2nnrSUd1pf/bmj8nfr3l0vXZcUL1X3Gbmrj5GI4cJw/UE5AgxtMFx3YiC12akGCf0Z2tVHIndtcnfVTtYlVZOkruqhmOirtFP6Se2qhfRHI4YLw7UbmlG4aIc5O5uBO28QVbs75a+5TuTcN7e76qfynqGbYnHWvKZqJOZHI4YLw4XhgoElGUgtstokUvpavBP6SW3VpfpI5J7WT9cmVZMZuunapJlJ1ki1GYkYLjbbJTfbEfhps/YvcKlFtnOT6EP6Ce3SLP2kNvrn/JuKM+qe6KM0+58Umyndnvu3awzXZrK/FYzv//1yUA/qcWUGEotsH29SP6Fdmso/qZ/UrvxT+nfWvfO83rnulbtq/y1iuDBcw7B8g4nvMV9XYyC1kNc476jdN4dk/qn6iK9U7qrPHfVXqE2y7mlt1f9TxHBhuDBcMLAkA6kFVgvqnfVTuZdu1eeu+um5TdcnnX9aP8lNWlu1+RQxXGy2S262n6Dnu2f8EpdaYIuflHbpis9UH6n8lbfi3fJXvso/WSf15YzpvCtX9eHMeyUt1eddxHBhuP5eoneQcP8ZBmW1eU4t5FWnpHZSv/LWPLvHIF1Ft770ZtUn1U9KNzm3vfbJ/NXPXWPV5tMfDNeXAn0qHt99hov6UJ+zGEgu2H1MiX6kn9AuzRn6qdyVf1o/WaOkdrI+yrtisv531+512l5juDBcfwvwFg4+Y5juzMBdF27VPJX/DP1U7qU7I/9kH6Wdqo/yntFHagx31+1zsL3GcGG4/hawLRx8xnDdmYE7Lty93qn81ced9VO5l67qUzHRj/QT2j3/u+qn8p6pqzneRgwXhutfC8wWED5juu7OwMyF1tFX1duh805jhn6yj87juzEeuT9D/0h+356dkX9yfr+N7+rf9/pvrzFcGC4MFww8hgHHYq1F1KH1SiO9mZH/Of8l+D7X6TnufSWu755/oiZdU+/YNmK42Gwfs9lu4efzM3+96wvj3msxs/e50faz9Kuf0Zz2tps1hr15XaV9uj4zxrnCGJJ1Un22EcOF4cJwwcCjGRhdePviOfrML+3Uzy/PjjyD/rm/cKn+FUfm65c26uOXZ0eeSeuP5HD1NqpRjxguNttHb7b9ZeD6mb94ad5HFnC1rTjSfm8b6e99bk/7VO7KYYUxaCypOKtGqbnu+af6SNV+lq5q1COGC8OF4YIBGGgM1IL8bhPR4plctNN9JPWlXfHONUrmLr7uXiPNdbpWd9ZXjRQxXG2hVVGIz/6lg/ln/jsDfcHX/X7PeZ3Wr1yrD2fOW61ZY0iPYzsu52fVKDkG9eHMu2ul9Xtfd75WnSpiuDBc/LoBAzCwk4HkBlALc0q/L/7pPtL6yTqlcpeu5kGfEzHdR1o/UZMzNFWnihiunQttLx7X/BICA89lILV4F1Mp7dIVs6k+pJ8aR1o/VZetrsaxve/6nNavPGf04arHWTqqUUUMF4br76XpYHD9XCPB3I/PvTYd12Lea+/S3Oqoj+195+d0H2l9Zy1eaSn/iq++d91TPy69rU5af9vfXT+rThguDBeGCwZgwMTA0Q1BC/NRnXfPS7/iuzaO+zP003046vBJQ3Pxqc3R71bp42gdvj2frpP0MVymhVYFJY7/OkCtqNXKDHxb5F99r3q8+s51L92H9Cu6ct7qqI/t/bt9To9jln5yrmfMabpONYbqA8OF4eLXDRiAgTADo5vGrIU/vUHO0E/3MTpnR9ql51v6yVqpjyN1uMKzyRrV+EofwxVeaAUjkV9zYAAGvm0sYuRbu1+/l37FXzVGnkvrVw4ay0g+V20zq07J8WseZoxlxjiSfWC4MFx/C1d/cbjGHMBAloFXC7tq/uo7170V+tAYKrrqcoaOxpHse5U+kjWSdponDBeGC8MFAzBwEgNa6HtML/qzNuA+Jvf1jDG4c36nlx6L9Cu+y+HoffVxVOfM5zWGZJ0wXCcttH1yuc7+kkB9qe/dGEhtPL0OqT5KV/3cvY9k/r1OVa9UXzPmQmNJjWGmbnIuMFwYrr/FUS8mEYMCA+czkNpkNLcp/dJdpY9kjaSdrlVav49D13eNqlXFxBgwXBiuv8Wxw8b1+Rsuc8AcaOFXdGwC4sqh9Uojrd/7dNal6866Vq3uPo6ql8Yyq3aJfjSG1HxguDBcfy9Kh41rNnsYuC4Dv242mtNfnx99bkY/M/oYHe+RdhpHxSM6Zz/LOP7zdf4wXBguDBcMwMBNGfhlk9XG+Muzo8+s0sfoeI+0m1GrI/nteXaVsdQ49ox7tC2G66YLrcAmXvdXCOaGuZnFwOiCX+2U055n9rZdpY+94/61fdXr12ev8pzmfKWxuGuL4cJw/S3A/YXhGrMAA/dk4NsmMWNDFDvfcjn6/YyxHM1x5PlZ9RrJ5UgbxvH5rxUxXBguDBcMwMCiDLzaPGdsijP6qLFVP6/GeLd7s+o1oy6rzEmCLwzXogutXmDiPX+lYN6YNycDfaOVbr/nvp7RhzbE6sud/2y9WfWaMS7G8v5XLgwXhotfN2AABh7IQHrznWGE2Nzfb+7p+X2lv9J81Pjc48FwPXChFUREfkWBgWcz8GrTdNwTVw6tTxqz+vmUg+u7Fcaywhj6fLrHg+HCcP25eMFFfPYmzPw/a/77BuO6FkMuvXc6s/p517/z/kpjcdblbC3nvGC4MFwYLhiAARj4fwZqc6sN5ugmp03KofUpF/Xzqc1dvtNY0jW7Sz2ukqfmxZEPhouFls0WBmAABl4ycGSTcW5U7/KY0ce7vt33NZaKbm30jv2zbpqbo3XEcLHQvlxoBRjxWX+9xHwz3+8Y2LvZlM7eZ/a277nuffaK7WfU7IrjvnpO4uxonhguDBeGCwZgAAZ2MTCy8cwwD9oIk33N6KPqOaOf3keyZrPGM8Kho02v2xE9DBcL7b9e9A4W1/zaAQMw8I2BdxuQnnv3vet+uh/pV3Tl/E5Hfb37/uh96Sse1fv0vPqo+KndXb7TeI7ki+HCcGG4YAAGYOAQA682IccG9Up3e29mP9u+3Z81lopu7a43ox/10fu9+/XRMWG4WGgPLbQCkMgvITAAA8VAbaqdhfQmq75m9JPuo9cu2ZdqpvlK95XUn6XtqBmGC8P1r8WxQ8U1GygMwICDgdSm2HNL9SFd9aXPiTijD+Vdfek6GWf1kxyDtDU/v44Jw4XhwnDBAAzAQJSB2rB+3aS02b2L2gTffe+6Tz+//acVUvPumte9Okc4wHCx0EYXWsFJ5JcSGIABMbB3k/vWvnS/tXF8P6OfVI2241+tn+34Up+P1A3DheHCcMEADMDAKQw4NsUjG+Ce/mf3U/3tyW9v29nj2ZvfVdsfqRuGi4X2lIVW0BL51QMGYKAY+HWDFT+/Pr/nuRl9qY8jNRkZ06x+Khf1NZLXHdr8Oh4MF4br72UQREQ2QBiAgTMZ2LvpVq57n/ml/cx+ZvQ1o4+qc/Uzq69f5vWXZzSmPePCcGG4/l6GDhDXbLgwAANXYODbZqgcv7VzfD+jL/VR0ZHzJw319amN67sZ43HlOqKj2u0ZF4YLw4XhggEYgIHLM/BpE9Tm96mN4zv1s2eT/aVf9fPLs3uemd1Pum57xn60rWq3Z0wYLhbayy+0HWyu+dUFBmCgb3Kdh6Ob6Lfn1de3do7v+xgdeu80Zo1pVj/vxnmF+xguDBeGCwZgAAZuy0BtpLM281n9rDymKxifs3LAcLHQ/i1WWkyI/IIAAzBwVwbSm6nqkuxHfVRM9lPas/tKj0f6M2qnvkYjhgvD9a8Xrr98XLPpwgAM3JWB0U1wbzvVY+9ze9vP7qf625vj3vYaU6qvrq/rvTkm22O4MFwYLhiAARhYmgHnJjprI1c/FZ35b7Vm9VP9pvvq+rrejvfMzxguFtp/vQSClMgvGzAAAysycHTDVU2O6ow8X32NtDvaRmOa0V+yjz6Ofn20Pq7nMVwYLgwXDMAADDyGAW2ev278Mzdy9aWck3FWX7P7qf6SdSvt0TFhuFho/2ARNER+2YABGHgKA3s3416Xvc/uba++9j63t/2sfiqvM/qqPvfWZG/7kT4wXBiuvxdALwKRzRYGYOCJDIxssqrLSNujbVbu62htRp5X/SqOtD/SRn190sBwYbgwXDAAAzAAA42BT5umNtaZm/iqfX2qs+M7zZVDa0Tj2zxhuNpLpskhcrqHARiAARgoBrYbbedi+53788y+KvdX43WPSXqz+lIN1W8qqp9P48JwYbg42cIADMAADPzAQGrz7rrayPu9xLX6+WQYnP2qP6fmOy31NWNsn/rAcP3wkvXJ45pTMAzAAAw8l4F3m7zrvthy6X3Soa///M8vmp/qtf1O9au4/a4+Y7gwXJxsYQAGYAAGDjDwanN13nu3gTv7KK1vhsHZn/pyar7TukpfGK4DL5kmkfjc0y1zz9zDAAx0Bt5t+kful/6R50ef1ThG2x9pd0ZfM+qocb3qC8OF4frXqabDwjUbCQzAAAzsZ6CMSNXtiCHRs73+upeM6i/Zh7Sf1heGC8OF4YIBGIABGAgxIHNxJK5uTGp8R+oz8qxqOKOvyudVPxiu0EvWJ5fr/SdEakbNYAAGVmRgxBxs26gO2/uJz6v2pVrV+HSdjK/qiOHCcHGyhQEYgAEYmMhAbfR7Nv5Xm3faLCT1u/bMsamvPbXvue65ftUXhmviS9YngGtO7zAAAzAAA8XAyEY+2m5E61ubzuW3tke/f1JfGC4MFydbGIABGICBCzDwzbzMNl3f8nF9L9Pl0vukc2ZfGK4LvGQCgMhpFwZgAAZgoBjYmgZxsb2f+Ky+XuWR7C+hvdU8Y2zKAcOF4eJkCwMwAAMwcGEGtGHPMkDVn4yJ+k7H2WNLj0f6qmNFDNeFX7I+UVxz6oUBGIABGCgGtJkno1hL9iHtmX1VnzP7U18VMVwYrj/4Ohhcs7DDAAzAwLUZkGFJxZr/lPZWd3ZfZ/SH4cJwYbhgAAZgAAZuzMDWvDg+d7Pt0Pumof6+tXN8r75mmS71h+G68UumSSRe+xTK/DA/MAADMxgoM1L9OE2JQ2tEQ/UZaetoc0Z/GC4MFydbGIABGICBRRk4Yk5mmhL1VfFIzqPPntEfhmvRl6zDxDWnaxiAARh4LgOjJmTbTsxs76c+r9xfjQ3DheHiZAsDMAADMPAgBkYN02wDVHlVn6P5HW2n8c3qE8P1oJesw8X1c0+7zD1zDwMwUAyMGJbRdiNaI23E5khbR5uZ/WG4MFycbGEABmAABh7MwCfjIkMyy3id1d+nGri+w3A9+CXrYHPNiRcGYAAGYKAY2BoMcbG9n/g8s6/Kf2Z/GC4M1x9wAo/IogsDMAADMLBlIGGwtpq9z+13yc/Vb1K/tDFcGC4MFwzAAAzAAAwMMZA2JaUv0zWjL/Uxo08MFy/ZH9wCjsjJFgZgAAZg4BUDMijJqH6TfWy11WfF7XeuzxguDBeGCwZgAAZgAAZ+YsBlRrY6MkDb+6nPM/rDcPGS/fSSCU4ip2AYgAEYeDYDbhPUeXJrv9NTn+++d9zHcGG4MFwwAAMwAAMwYGXgqEGRAap4VGvk+Rn9Ybh4yawvWYeW62efepl/5h8GYGDE7Lxqs2XnVRv3PfXp1pUehgvDheGCARiAARiAgTgDMh6jMW2Atnmk+8Nw8ZLFXzJBTOS0CwMwAAPPZmBrcj598JncFwAACzBJREFU7qx8auf6Tv259LY6GC4MF4YLBmAABmAABk5jYGtM+ucyQf1z8lqGK9UnhouX7LSXrMPN9bNPvcw/8w8DMPDKTImLV9+576kvRbc+hgvDheGCARiAARiAgcsw0I1Oyvz0PnStvhR13xUxXLxkl3nJBDmRky4MwAAMwMCWAZfx+abT+/3Wds/3GC4MF4YLBmAABmAABm7BwB6D82tbGa5fn3/3HIaLl+wWL5leACKnXhiAARiAgXemxnVfjLn0SgfDheHCcMEADMAADMDALRlwGqKuheHihbjlCyFwiZxKYQAGYAAG3AyUUZJmN01Hrt16lQu/cGHi/kAVYEQWRBiAARiAgbsyIAN2xHBJQzU4qlXPY7gwXBguGIABGIABGFiSgSNGyWm2MFy8YEu+YHpJiJzQYQAGYAAGxMBe8/Xrc+/64RcuTBemCwZgAAZgAAYexcA7U7S97zRdGC5eske9ZHp5iJx6YQAGYAAGioGtyeqfxUi/9+s1hgvDheGCARiAARiAgcczUEZqa8BkuLb3fzFdGC5esse/ZP2F4poTLwzAAAzAQDEgUyUe9PnXiOHCcGG4YAAGYAAGYAAGBhj41WzVcxiugQLL3RI59cAADMAADMDAcxnAcGGaOJnAAAzAAAzAAAxMZGCv+eIXromTw6nouaci5p65hwEYgIF1GRgxXxguDBcnIhiAARiAARiAARMD78wXhstUYE4u655cmFvmFgZgAAZgYA8Dr0wXhgvDxakGBmAABmAABmAgxIDMF4YrVOA9Tpi2nJxgAAZgAAZgYG0GMFwYLk41MAADMAADMAADYQYwXOECc2JZ+8TC/DK/MAADMAADIwxguDBcnGpgAAZgAAZgAAbCDGC4wgUecb204XQEAzAAAzAAA2szgOHCcHGqgQEYgAEYgAEYCDOA4QoXmBPL2icW5pf5hQEYgAEYGGEAw4Xh4lQDAzAAAzAAAzAQZgDDFS7wiOulDacjGIABGIABGFibAQwXhotTDQzAAAzAAAzAQJgBDFe4wJxY1j6xML/MLwzAAAzAwAgDGC4MF6caGIABGIABGICBMAMYrnCBR1wvbTgdwQAMwAAMwMDaDGC4MFycamAABmAABmAABsIMYLjCBebEsvaJhfllfmEABmAABkYYwHBhuDjVwAAMwAAMwAAMhBnAcIULPOJ6acPpCAZgAAZgAAbWZgDDheHiVAMDMAADMAADMBBmAMMVLjAnlrVPLMwv8wsDMAADMDDCAIYLw8WpBgZgAAZgAAZgIMwAhitc4BHXSxtORzAAAzAAAzCwNgMYLgwXpxoYgAEYgAEYgIEwAxiucIE5sax9YmF+mV8YgAEYgIERBjBcGC5ONTAAAzAAAzAAA2EGMFzhAo+4XtpwOoIBGIABGICBtRnAcGG4ONXAAAzAAAzAAAyEGcBwhQvMiWXtEwvzy/zCAAzAAAyMMIDhwnBxqoEBGIABGIABGAgzgOEKF3jE9dKG0xEMwAAMwAAMrM0AhgvDxakGBmAABmAABmAgzACGK1xgTixrn1iYX+YXBmAABmBghAEMF4aLUw0MwAAMwAAMwECYAQxXuMAjrpc2nI5gAAZgAAZgYG0GMFwYLk41MAADMAADMAADYQYwXOECc2JZ+8TC/DK/MAADMAADIwxguDBcnGpgAAZgAAZgAAbCDGC4wgUecb204XQEAzAAAzAAA2szgOHCcHGqgQEYgAEYgAEYCDOA4QoXmBPL2icW5pf5hQEYgAEYGGEAw4Xh4lQDAzAAAzAAAzAQZgDDFS7wiOulDacjGIABGIABGFibAQwXhotTDQzAAAzAAAzAQJgBDFe4wJxY1j6xML/MLwzAAAzAwAgDGC4MF6caGIABGIABGICBMAMYrnCBR1wvbTgdwQAMwAAMwMDaDGC4MFycamAABmAABmAABsIMYLjCBebEsvaJhfllfmEABmAABkYYwHBhuDjVwAAMwAAMwAAMhBnAcIULPOJ6acPpCAZgAAZgAAbWZgDDheHiVAMDMAADMAADMBBmAMMVLjAnlrVPLMwv8wsDMAADMDDCAIYLw8WpBgZgAAZgAAZgIMwAhitc4BHXSxtORzAAAzAAAzCwNgMYLgwXpxoYgAEYgAEYgIEwAxiucIE5sax9YmF+mV8YgAEYgIERBjBcGC5ONTAAAzAAAzAAA2EGMFzhAo+4XtpwOoIBGIABGICBtRnAcGG4ONXAAAzAAAzAAAyEGcBwhQvMiWXtEwvzy/zCAAzAAAyMMIDhwnBxqoEBGIABGIABGAgzgOEKF3jE9dKG0xEMwAAMwAAMrM0AhgvDxakGBmAABmAABmAgzACGK1xgTixrn1iYX+YXBmAABmBghAEMF4aLUw0MwAAMwAAMwECYAQxXuMAjrpc2nI5gAAZgAAZgYG0GMFwYLk41MAADMAADMAADYQYwXOECc2JZ+8TC/DK/MAADMAADIwxguDBcnGpgAAZgAAZgAAbCDGC4wgUecb204XQEAzAAAzAAA2szgOHCcHGqgQEYgAEYgAEYCDOA4QoXmBPL2icW5pf5hQEYgAEYGGEAw4Xh4lQDAzAAAzAAAzAQZgDDFS7wiOulDacjGIABGIABGFibAQwXhotTDQzAAAzAAAzAQJgBDFe4wJxY1j6xML/MLwzAAAzAwAgDGC4MF6caGIABGIABGICBMAMYrnCBR1wvbTgdwQAMwAAMwMDaDGC4MFycamAABmAABmAABsIMYLjCBebEsvaJhfllfmEABmAABkYYwHBhuDjVwAAMwAAMwAAMhBnAcIULPOJ6acPpCAZgAAZgAAbWZgDDheHiVAMDMAADMAADMBBmAMMVLjAnlrVPLMwv8wsDMAADMDDCAIYLw8WpBgZgAAZgAAZgIMwAhitc4BHXSxtORzAAAzAAAzCwNgMYLgwXpxoYgAEYgAEYgIEwAxiucIE5sax9YmF+mV8YgAEYgIERBjBcGC5ONTAAAzAAAzAAA2EGMFzhAo+4XtpwOoIBGIABGICBtRnAcGG4ONXAAAzAAAzAAAyEGcBwhQvMiWXtEwvzy/zCAAzAAAyMMIDhwnBxqoEBGIABGIABGAgzgOEKF3jE9dKG0xEMwAAMwAAMrM0AhgvDxakGBmAABmAABmAgzACGK1xgTixrn1iYX+YXBmAABmBghAEMF4aLUw0MwAAMwAAMwECYAQxXuMAjrpc2nI5gAAZgAAZgYG0GMFwYLk41MAADMAADMAADYQYwXOECc2JZ+8TC/DK/MAADMAADIwxguDBcnGpgAAZgAAZgAAbCDGC4wgUecb204XQEAzAAAzAAA2szgOHCcHGqgQEYgAEYgAEYCDOA4QoXmBPL2icW5pf5hQEYgAEYGGEAw4Xh4lQDAzAAAzAAAzAQZgDDFS7wiOulDacjGIABGIABGFibAQwXhotTDQzAAAzAAAzAQJgBDFe4wJxY1j6xML/MLwzAAAzAwAgDGC4MF6caGIABGIABGICBMAMYrnCBR1wvbTgdwQAMwAAMwMDaDGC4MFycamAABmAABmAABsIMYLjCBebEsvaJhfllfmEABmAABkYYwHBhuDjVwAAMwAAMwAAMhBnAcIULPOJ6acPpCAZgAAZgAAbWZgDDheHiVAMDMAADMAADMBBmAMMVLjAnlrVPLMwv8wsDMAADMDDCAIYLw8WpBgZgAAZgAAZgIMwAhitc4BHXSxtORzAAAzAAAzCwNgMYLgwXpxoYgAEYgAEYgIEwAxiucIE5sax9YmF+mV8YgAEYgIERBjBcGC5ONTAAAzAAAzAAA2EGMFzhAo+4XtpwOoIBGIABGICBtRn4P6gVCAtwCQyUAAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image-4.png](attachment:image-4.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your simulation will be stored in C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\docs\\TEMP\\multiTracker\n" + ] + } + ], + "source": [ + "import os\n", + "from pathlib import Path\n", + "\n", + "testfolder = str(Path().resolve().parent / 'TEMP' / 'multiTracker')\n", + "\n", + "if not os.path.exists(testfolder):\n", + " os.makedirs(testfolder)\n", + " \n", + "print (\"Your simulation will be stored in %s\" % testfolder)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import bifacial_radiance as br\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Working on a Windows 10\n", + "Python version 3.9.13 (main, Aug 25 2022, 23:51:50) [MSC v.1916 64 bit (AMD64)]\n", + "Pandas version 1.5.3\n", + "bifacial_radiance version 0.4.2+275.gda43807.dirty\n" + ] + } + ], + "source": [ + "# This information helps with debugging and getting support :)\n", + "import sys, platform\n", + "print(\"Working on a \", platform.system(), platform.release())\n", + "print(\"Python version \", sys.version)\n", + "print(\"Pandas version \", pd.__version__)\n", + "print(\"bifacial_radiance version \", br.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Initial variables and definition of RadObj." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "simulationName = 'tutorial_03' # For adding a simulation name when defning RadianceObj. This is optional.\n", + "moduletype = 'test-module' # We will define the parameters for this below in Step 4.\n", + "albedo = \"litesoil\" # this is one of the options on ground.rad\n", + "lat = 37.5 \n", + "lon = -77.6\n", + "\n", + "# Scene 1 variables\n", + "nMods = 20\n", + "nRows = 1\n", + "hub_height = 5 # meters\n", + "GCR = 0.4 # meters # We will be using GCR for this example.\n", + "\n", + "# Traking parameters\n", + "cumulativesky = False\n", + "limit_angle = 45 # tracker rotation limit angle\n", + "angledelta = 0.01 # we will be doing hourly simulation, we want the angle to be as close to real tracking as possible.\n", + "backtrack = True \n", + "\n", + "#makeModule parameters\n", + "# x and y will be defined later on Step 4 for this tutorial!!\n", + "xgap = 0.01\n", + "ygap = 0.10\n", + "zgap = 0.05\n", + "numpanels = 2\n", + "axisofrotation = True # the scene will rotate around the torque tube, and not the middle of the bottom surface of the module\n", + "diameter = 0.1\n", + "tubetype = 'Oct' # This will make an octagonal torque tube.\n", + "material = 'black' # Torque tube of this material (0% reflectivity)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\docs\\TEMP\\multiTracker\n", + "Loading albedo, 1 value(s), 0.213 avg\n", + "1 nonzero albedo values.\n", + "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", + " ... OK!\n", + "8760 line in WeatherFile. Assuming this is a standard hourly WeatherFile for the year for purposes of saving Gencumulativesky temporary weather files in EPW folder.\n", + "Coercing year to 2021\n", + "Filtering dates\n", + "Saving file EPWs\\metdata_temp.csv, # points: 8760\n", + "Calculating Sun position for Metdata that is right-labeled with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n" + ] + } + ], + "source": [ + "demo = br.RadianceObj(simulationName, path = str(testfolder)) # Adding a simulation name. This is optional.\n", + "demo.setGround(albedo) \n", + "epwfile = demo.getEPW(lat=lat, lon=lon) \n", + "\n", + "starttime = '01_13'; endtime = '01_14'\n", + "metdata = demo.readWeatherFile(weatherFile=epwfile, starttime=starttime, endtime=endtime) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Make a module, one with a torque tube (module1) and without (module2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Module Name: module1\n", + "Module module1 updated in module.json\n", + "Pre-existing .rad file objects\\module1.rad will be overwritten\n", + "\n", + "Module module1 updated in module.json\n", + "Pre-existing .rad file objects\\module1.rad will be overwritten\n", + "\n", + "Module was shifted by 0.078 in X to avoid sensors on air\n", + "This is a Cell-Level detailed module with Packaging Factor of 0.81 \n", + "Module module1 updated in module.json\n", + "Pre-existing .rad file objects\\module1.rad will be overwritten\n", + "\n", + "New module created. x=1.036m, y=2.092m\n", + "Cell-module parameters: {'numcellsx': 6, 'numcellsy': 12, 'xcell': 0.156, 'ycell': 0.156, 'xcellgap': 0.02, 'ycellgap': 0.02, 'centerJB': None}\n", + "\n", + "Module Name: module2\n", + "Module module2 updated in module.json\n", + "Pre-existing .rad file objects\\module2.rad will be overwritten\n", + "\n", + "Module was shifted by 0.078 in X to avoid sensors on air\n", + "This is a Cell-Level detailed module with Packaging Factor of 0.81 \n", + "Module module2 updated in module.json\n", + "Pre-existing .rad file objects\\module2.rad will be overwritten\n", + "\n", + "New module created. x=1.036m, y=2.092m\n", + "Cell-module parameters: {'numcellsx': 6, 'numcellsy': 12, 'xcell': 0.156, 'ycell': 0.156, 'xcellgap': 0.02, 'ycellgap': 0.02, 'centerJB': None}\n" + ] + } + ], + "source": [ + "numcellsx = 6\n", + "numcellsy = 12\n", + "xcell = 0.156\n", + "ycell = 0.156\n", + "xcellgap = 0.02\n", + "ycellgap = 0.02\n", + "\n", + "\n", + "module1 = demo.makeModule(name='module1', x=1, y=1, xgap=xgap, ygap=ygap, \n", + " zgap=zgap, numpanels=numpanels) \n", + "module1.addTorquetube(diameter=diameter, material=material,\n", + " axisofrotation=axisofrotation, tubetype=tubetype)\n", + "module1.addCellModule(numcellsx=numcellsx, numcellsy=numcellsy,\n", + " xcell=xcell, ycell=ycell, xcellgap=xcellgap, ycellgap=ycellgap)\n", + "\n", + "print(f'New module created. x={module1.x}m, y={module1.y}m')\n", + "print(f'Cell-module parameters: {module1.cellModule}')\n", + "\n", + "module2 = demo.makeModule(name='module2', x=1, y=1, xgap=xgap, ygap=ygap, \n", + " zgap=zgap, numpanels=1) \n", + "module2.addCellModule(numcellsx=numcellsx, numcellsy=numcellsy,\n", + " xcell=xcell, ycell=ycell, xcellgap=xcellgap, ycellgap=ycellgap)\n", + "print(f'New module created. x={module2.x}m, y={module2.y}m')\n", + "print(f'Cell-module parameters: {module2.cellModule}')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "module1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "module2\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### set tracking angles. Here we assume GCR is the same for each scene so tracking angles work out to be equal.\n", + "#### different scene GCR's not currently supported!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "trackerdict = demo.set1axis(metdata=metdata, limit_angle=limit_angle, backtrack=backtrack, \n", + " gcr=GCR, cumulativesky=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trackerdict created by set1axis: 20 \n" + ] + } + ], + "source": [ + "print (\"Trackerdict created by set1axis: %s \" % (len(demo.trackerdict))) " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating ~20 skyfiles. \n", + "Created 19 skyfiles in /skies/\n" + ] + } + ], + "source": [ + "trackerdict = demo.gendaylit1axis() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. First scene configuration (based on tutorial 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Making ~19 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n", + "19 Radfiles created in /objects/\n" + ] + } + ], + "source": [ + "# Scene 1 variables\n", + "nMods = 20\n", + "nRows = 1\n", + "hub_height = 5 # meters\n", + "sceneDict = {'gcr': GCR,'hub_height':hub_height, 'nMods':nMods, 'nRows': nRows} \n", + "\n", + "# making the different scenes for the 1-axis tracking for the dates in trackerdict2.\n", + "trackerdict = demo.makeScene1axis(trackerdict=trackerdict, module=module1, sceneDict=sceneDict) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second scene configuration - 1 up portrait.\n", + "#### Make sure to use append=True, and change the originx" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Making ~19 .rad files for gendaylit 1-axis workflow (this takes a minute..)\n", + "19 Radfiles created in /objects/\n" + ] + } + ], + "source": [ + "# Scene 2 variables\n", + "nMods = 20\n", + "nRows = 1\n", + "hub_height = 1.2 # meters\n", + "sceneDict = {'gcr': GCR,'hub_height':hub_height, 'nMods':nMods, 'nRows': nRows, 'originx' : 6} \n", + "\n", + "# making the different scenes for the 1-axis tracking for the dates in trackerdict2.\n", + "trackerdict = demo.makeScene1axis(trackerdict=trackerdict, module=module2, sceneDict=sceneDict, append=True) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to check one of the tracker elements to ensure we have an array of 2 scenes " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trackerdict['2021-01-13_1000']['scenes'].__len__()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_3.55609_rtr_10.71000_tilt_45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trackerdict['2021-01-13_1000']['scenes'][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_0.46037_rtr_5.23000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trackerdict['2021-01-13_1000']['scenes'][1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### try out appendtoScene functionality. If you pass this customObject text into makeScene1axis above as `customtext`, it will automatically append to each scene in the trackerdict." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Custom Object Name objects\\Car_1.rad\n" + ] + } + ], + "source": [ + "# There are two ways to do this, by calling SceneObj.appendtoScene directly, or by passing into makeScene1axis as 'customtext'. \n", + "\n", + "name='Car_1'\n", + "carpositionx=-2\n", + "carpositiony=-1\n", + "text='! genbox white_EPDM HondaFit 1.6 4.5 1.5 | xform -t -0.8 -2.25 0 -t {} {} 0'.format(carpositionx, carpositiony)\n", + "customObject = demo.makeCustomObject(name,text)\n", + "for key in trackerdict:\n", + " trackerdict[key]['scenes'][0].appendtoScene(customObject='!xform -rz 90 '+ customObject)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Open the .radfile listed in our sceneObj to make sure our Car_1.rad file is appended.." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\module1.rad\n", + " !xform -rz 90 objects\\Car_1.rad\n" + ] + } + ], + "source": [ + "fname = trackerdict[key]['scenes'][0].radfiles\n", + "with open(fname, 'r') as f:\n", + " print(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\module1.rad\n", + "!xform -rz 90 objects\\Car_1.rad\n" + ] + } + ], + "source": [ + "fname = trackerdict[key]['scenes'][0].radfiles\n", + "with open(fname, 'r') as f:\n", + " print(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Making 1 octfiles in root directory.\n", + "Created 1axis_2021-01-13_1000.oct\n" + ] + } + ], + "source": [ + "# Make the octfile\n", + "trackerdict = demo.makeOct1axis(trackerdict, singleindex='2021-01-13_1000')\n", + "## Sanity check: #!rvu -vf views\\front.vp -e 16 -pe 0.02 -vp -2 -12 14.5 1axis_2021-01-13_1000.oct" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linescan in process: 1axis_2021-01-13_1000cdeline_Scene0_Row1_Module7_Front\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\cdeline\\documents\\python scripts\\bifacial_radiance\\bifacial_radiance\\main.py:2887: UserWarning: Append=False. Over-writing any existing `AnalysisObj` in trackerdict.\n", + " warnings.warn('Append=False. Over-writing any existing `AnalysisObj` in trackerdict.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linescan in process: 1axis_2021-01-13_1000cdeline_Scene0_Row1_Module7_Back\n", + "Saved: results\\irr_1axis_2021-01-13_1000cdeline_Scene0_Row1_Module7.csv\n", + "Index: 2021-01-13_1000. Wm2Front: 333.5731333333333. Wm2Back: 57.15362833333333\n" + ] + }, + { + "data": { + "text/plain": [ + "{'2021-01-13_0800': {'surf_azm': 90.0,\n", + " 'surf_tilt': 4.2,\n", + " 'theta': -4.2,\n", + " 'dni': 13,\n", + " 'ghi': 23,\n", + " 'dhi': 22,\n", + " 'temp_air': 0.2,\n", + " 'wind_speed': 2.6,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_0800.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 4.2 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_4.85045_rtr_10.71000_tilt_4.20000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 4.2, 'clearance_height': 4.850447601465376, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 4.2 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_1.12339_rtr_5.23000_tilt_4.20000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 4.2, 'clearance_height': 1.1233928458044973, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_0900': {'surf_azm': 90.0,\n", + " 'surf_tilt': 21.19,\n", + " 'theta': -21.19,\n", + " 'dni': 103,\n", + " 'ghi': 67,\n", + " 'dhi': 49,\n", + " 'temp_air': 1.5,\n", + " 'wind_speed': 3.1,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_0900.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.19 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0900__C_4.26189_rtr_10.71000_tilt_21.19000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 21.19, 'clearance_height': 4.261894915828654, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.19 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0900__C_0.82191_rtr_5.23000_tilt_21.19000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.19, 'clearance_height': 0.821910911829957, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1000': {'surf_azm': 90.0,\n", + " 'surf_tilt': 45.0,\n", + " 'theta': -45.0,\n", + " 'dni': 228,\n", + " 'ghi': 219,\n", + " 'dhi': 144,\n", + " 'temp_air': 2.8,\n", + " 'wind_speed': 3.6,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1000.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_3.55609_rtr_10.71000_tilt_45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_0.46037_rtr_5.23000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'octfile': '1axis_2021-01-13_1000.oct',\n", + " 'AnalysisObj': [{'octfile': '1axis_2021-01-13_1000.oct', 'name': '1axis_2021-01-13_1000cdeline_Scene0', 'hpc': False, 'modWanted': 7, 'rowWanted': 1, 'sceneNum': 0, 'power_data': None, 'columns': ['hpc', 'modWanted', 'name', 'octfile', 'power_data', 'rowWanted', 'sceneNum'], 'methods': ['analysis', 'analyzeField', 'analyzeRow', 'calc_performance', 'getResults', 'makeFalseColor', 'makeImage', 'moduleAnalysis'], 'x': [0.5904342, -0.4193143], 'y': [-3.138, -3.138], 'z': [4.580686, 5.590434], 'rearZ': [4.565129, 5.574878], 'mattype': ['a6.0.a2.8.0.cellPVmodule.6457', 'a6.0.a2.3.1.cellPVmodule.6457'], 'rearMat': ['a6.0.a2.8.0.cellPVmodule.2310', 'a6.0.a2.3.1.cellPVmodule.2310'], 'Wm2Front': [333.1322333333333, 334.0140333333333], 'Wm2Back': [59.59274, 54.71451666666667], 'Back/FrontRatio': [0.17888560502869874, 0.16380854514432536], 'backRatio': [0.17888560502869874, 0.16380854514432536], 'rearX': [0.5748778, -0.4348707], 'rearY': [-3.138, -3.138]}]},\n", + " '2021-01-13_1100': {'surf_azm': 90.0,\n", + " 'surf_tilt': 44.14,\n", + " 'theta': -44.14,\n", + " 'dni': 144,\n", + " 'ghi': 211,\n", + " 'dhi': 149,\n", + " 'temp_air': 4.6,\n", + " 'wind_speed': 3.8,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1100.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 44.14 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1100__C_3.57792_rtr_10.71000_tilt_44.14000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 44.14, 'clearance_height': 3.5779226657137633, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 44.14 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1100__C_0.47155_rtr_5.23000_tilt_44.14000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 44.14, 'clearance_height': 0.47155098351449365, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1200': {'surf_azm': 90.0,\n", + " 'surf_tilt': 21.2,\n", + " 'theta': -21.2,\n", + " 'dni': 97,\n", + " 'ghi': 249,\n", + " 'dhi': 200,\n", + " 'temp_air': 6.5,\n", + " 'wind_speed': 3.9,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1200.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.2 -t 0 0 5.000000000000001 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1200__C_4.26156_rtr_10.71000_tilt_21.20000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 21.2, 'clearance_height': 4.261562627892368, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.2 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1200__C_0.82174_rtr_5.23000_tilt_21.20000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.2, 'clearance_height': 0.8217406996941314, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1300': {'surf_azm': 90.0,\n", + " 'surf_tilt': -5.31,\n", + " 'theta': 5.31,\n", + " 'dni': 1,\n", + " 'ghi': 222,\n", + " 'dhi': 221,\n", + " 'temp_air': 8.3,\n", + " 'wind_speed': 4.1,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1300.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -5.31 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1300__C_4.81102_rtr_10.71000_tilt_-5.31000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -5.31, 'clearance_height': 4.811024390776987, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -5.31 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1300__C_1.10320_rtr_5.23000_tilt_-5.31000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -5.31, 'clearance_height': 1.1031985860689169, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1400': {'surf_azm': 90.0,\n", + " 'surf_tilt': -30.81,\n", + " 'theta': 30.81,\n", + " 'dni': 5,\n", + " 'ghi': 244,\n", + " 'dhi': 242,\n", + " 'temp_air': 8.9,\n", + " 'wind_speed': 3.9,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1400.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -30.81 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1400__C_3.95410_rtr_10.71000_tilt_-30.81000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -30.81, 'clearance_height': 3.9541023557893316, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -30.81 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1400__C_0.66425_rtr_5.23000_tilt_-30.81000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -30.81, 'clearance_height': 0.664246358548306, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1500': {'surf_azm': 90.0,\n", + " 'surf_tilt': -45.0,\n", + " 'theta': 45.0,\n", + " 'dni': 8,\n", + " 'ghi': 172,\n", + " 'dhi': 168,\n", + " 'temp_air': 9.4,\n", + " 'wind_speed': 3.8,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1500.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1500__C_3.55609_rtr_10.71000_tilt_-45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1500__C_0.46037_rtr_5.23000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1600': {'surf_azm': 90.0,\n", + " 'surf_tilt': -45.0,\n", + " 'theta': 45.0,\n", + " 'dni': 3,\n", + " 'ghi': 88,\n", + " 'dhi': 88,\n", + " 'temp_air': 10.0,\n", + " 'wind_speed': 3.6,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1600.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1600__C_3.55609_rtr_10.71000_tilt_-45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1600__C_0.46037_rtr_5.23000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-13_1700': {'surf_azm': 90.0,\n", + " 'surf_tilt': -12.17,\n", + " 'theta': 12.17,\n", + " 'dni': 3,\n", + " 'ghi': 31,\n", + " 'dhi': 31,\n", + " 'temp_air': 9.3,\n", + " 'wind_speed': 3.4,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_1700.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -12.17 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1700__C_4.56952_rtr_10.71000_tilt_-12.17000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -12.17, 'clearance_height': 4.569519866772039, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -12.17 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1700__C_0.97949_rtr_5.23000_tilt_-12.17000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -12.17, 'clearance_height': 0.9794896085423862, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_0800': {'surf_azm': 90.0,\n", + " 'surf_tilt': 4.29,\n", + " 'theta': -4.29,\n", + " 'dni': 177,\n", + " 'ghi': 30,\n", + " 'dhi': 12,\n", + " 'temp_air': 1.1,\n", + " 'wind_speed': 4.3,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_0800.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 4.29 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0800__C_4.84725_rtr_10.71000_tilt_4.29000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 4.29, 'clearance_height': 4.847248835176229, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 4.29 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0800__C_1.12175_rtr_5.23000_tilt_4.29000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 4.29, 'clearance_height': 1.1217543004869421, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_0900': {'surf_azm': 90.0,\n", + " 'surf_tilt': 21.3,\n", + " 'theta': -21.3,\n", + " 'dni': 645,\n", + " 'ghi': 146,\n", + " 'dhi': 28,\n", + " 'temp_air': 1.7,\n", + " 'wind_speed': 5.0,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_0900.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.3 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0900__C_4.25824_rtr_10.71000_tilt_21.30000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 21.3, 'clearance_height': 4.258240987374178, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.3 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0900__C_0.82004_rtr_5.23000_tilt_21.30000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.3, 'clearance_height': 0.8200392129252646, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1000': {'surf_azm': 90.0,\n", + " 'surf_tilt': 45.0,\n", + " 'theta': -45.0,\n", + " 'dni': 818,\n", + " 'ghi': 308,\n", + " 'dhi': 40,\n", + " 'temp_air': 2.2,\n", + " 'wind_speed': 5.7,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1000.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1000__C_3.55609_rtr_10.71000_tilt_45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1000__C_0.46037_rtr_5.23000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1100': {'surf_azm': 90.0,\n", + " 'surf_tilt': 44.13,\n", + " 'theta': -44.13,\n", + " 'dni': 897,\n", + " 'ghi': 440,\n", + " 'dhi': 49,\n", + " 'temp_air': 2.6,\n", + " 'wind_speed': 5.7,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1100.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 44.13 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1100__C_3.57818_rtr_10.71000_tilt_44.13000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 44.13, 'clearance_height': 3.5781784516659974, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 44.13 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1100__C_0.47168_rtr_5.23000_tilt_44.13000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 44.13, 'clearance_height': 0.47168200805221994, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1200': {'surf_azm': 90.0,\n", + " 'surf_tilt': 21.27,\n", + " 'theta': -21.27,\n", + " 'dni': 935,\n", + " 'ghi': 523,\n", + " 'dhi': 54,\n", + " 'temp_air': 2.9,\n", + " 'wind_speed': 5.7,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1200.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.27 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1200__C_4.25924_rtr_10.71000_tilt_21.27000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': 21.27, 'clearance_height': 4.259237242739593, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx 21.27 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1200__C_0.82055_rtr_5.23000_tilt_21.27000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.27, 'clearance_height': 0.8205495376619067, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1300': {'surf_azm': 90.0,\n", + " 'surf_tilt': -5.13,\n", + " 'theta': 5.13,\n", + " 'dni': 948,\n", + " 'ghi': 544,\n", + " 'dhi': 56,\n", + " 'temp_air': 3.3,\n", + " 'wind_speed': 5.7,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1300.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -5.13 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1300__C_4.81741_rtr_10.71000_tilt_-5.13000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -5.13, 'clearance_height': 4.817412914878406, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -5.13 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1300__C_1.10647_rtr_5.23000_tilt_-5.13000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -5.13, 'clearance_height': 1.106471062175716, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1400': {'surf_azm': 90.0,\n", + " 'surf_tilt': -30.56,\n", + " 'theta': 30.56,\n", + " 'dni': 837,\n", + " 'ghi': 460,\n", + " 'dhi': 59,\n", + " 'temp_air': 3.3,\n", + " 'wind_speed': 5.2,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1400.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -30.56 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1400__C_3.96176_rtr_10.71000_tilt_-30.56000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -30.56, 'clearance_height': 3.961764743113702, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -30.56 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1400__C_0.66817_rtr_5.23000_tilt_-30.56000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -30.56, 'clearance_height': 0.6681713620455105, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1500': {'surf_azm': 90.0,\n", + " 'surf_tilt': -45.0,\n", + " 'theta': 45.0,\n", + " 'dni': 505,\n", + " 'ghi': 303,\n", + " 'dhi': 103,\n", + " 'temp_air': 3.3,\n", + " 'wind_speed': 4.6,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1500.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1500__C_3.55609_rtr_10.71000_tilt_-45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1500__C_0.46037_rtr_5.23000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []},\n", + " '2021-01-14_1600': {'surf_azm': 90.0,\n", + " 'surf_tilt': -45.0,\n", + " 'theta': 45.0,\n", + " 'dni': 338,\n", + " 'ghi': 188,\n", + " 'dhi': 96,\n", + " 'temp_air': 3.3,\n", + " 'wind_speed': 4.1,\n", + " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-14_1600.rad',\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\module1.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module1.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 5.0 -a 20 -t 1.046 0 0 -a 1 -t 0 10.71 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 0 0 0 objects\\\\module1.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1600__C_3.55609_rtr_10.71000_tilt_-45.00000_20modsx1rows_origin0,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'tilt': -45.0, 'clearance_height': 3.5560879528170695, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 2.092, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -1.046 0 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 1 -t 0 2.192 0', 'modulefile': 'objects\\\\module2.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\module2.rad', 'hpc': False, 'name': 'Scene1', 'gcr': 0.39999999999999997, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.046 0 0 -a 1 -t 0 5.23 0 -i 1 -t -9.414 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1600__C_0.46037_rtr_5.23000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.46036630687887115, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n", + " 'AnalysisObj': []}}" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# run the analysis. We need to specify the scene number now - scene 0 is 2-up tracker. Scene 1 is 1-up tracker.\n", + "# \n", + "demo.analysis1axis(singleindex='2021-01-13_1000', modWanted=7, rowWanted=1, sensorsy=2, sceneNum=0, customname='cdeline', append=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No CECModule data passed; using default for Prism Solar BHC72-400\n", + "Bifaciality factor of module stored is 1\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampnamemodNumrowNumsceneNummattyperearMatWm2FrontWm2BackbackRatio...Pout_rawPout_GfrontBGGBGEMismatchPoutWind SpeedDNIDHIGHI
02021-01-13_10001axis_2021-01-13_1000cdeline_Scene0710[a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce...[a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce...[333.1322333333333, 334.0140333333333][59.59274, 54.71451666666667][0.17888560502869874, 0.16380854514432536]...163.832664140.21264617.13376216.8458540.00034163.8321083.6228144219
\n", + "

1 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " timestamp name modNum rowNum \\\n", + "0 2021-01-13_1000 1axis_2021-01-13_1000cdeline_Scene0 7 1 \n", + "\n", + " sceneNum mattype \\\n", + "0 0 [a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce... \n", + "\n", + " rearMat \\\n", + "0 [a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce... \n", + "\n", + " Wm2Front Wm2Back \\\n", + "0 [333.1322333333333, 334.0140333333333] [59.59274, 54.71451666666667] \n", + "\n", + " backRatio ... Pout_raw Pout_Gfront \\\n", + "0 [0.17888560502869874, 0.16380854514432536] ... 163.832664 140.212646 \n", + "\n", + " BGG BGE Mismatch Pout Wind Speed DNI DHI GHI \n", + "0 17.133762 16.845854 0.00034 163.832108 3.6 228 144 219 \n", + "\n", + "[1 rows x 26 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# run calculateResults. This returns the results dataframe.\n", + "\n", + "results_2up = demo.calculateResults()\n", + "display(results_2up)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### let's run the analysis now for Scene[1]. (1-up tracker). Trackerdict ['Results'] should get over-written, so set `overwrite=True`\n", + "#### This is because by default, re-running analysis1axis will just append results to the trackerdict. So you'll be averaging \n", + "#### results from different scenes. To start your results fresh, pass `overwrite=True` into `analysis1axis`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linescan in process: 1axis_2021-01-13_1000_Scene1_Row1_Module3_Front\n", + "Linescan in process: 1axis_2021-01-13_1000_Scene1_Row1_Module3_Back\n", + "Saved: results\\irr_1axis_2021-01-13_1000_Scene1_Row1_Module3.csv\n", + "Index: 2021-01-13_1000. Wm2Front: 79.28446833333334. Wm2Back: 44.73472\n", + "Linescan in process: 1axis_2021-01-13_1000_Scene1_Row1_Module7_Front\n", + "Linescan in process: 1axis_2021-01-13_1000_Scene1_Row1_Module7_Back\n", + "Saved: results\\irr_1axis_2021-01-13_1000_Scene1_Row1_Module7.csv\n", + "Index: 2021-01-13_1000. Wm2Front: 71.10902666666667. Wm2Back: 44.73472\n" + ] + } + ], + "source": [ + "\n", + "results_1up = demo.analysis1axis(singleindex='2021-01-13_1000', modWanted=[3,7], rowWanted=1, sensorsy=2, sceneNum=1, append=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x,y,z,rearZ,mattype,rearMat,Wm2Front,Wm2Back,Back/FrontRatio\n", + "0.5904342,-3.138,4.580686,4.565129,a6.0.a2.8.0.cellPVmodule.6457,a6.0.a2.8.0.cellPVmodule.2310,333.6278,59.720819999999996,0.1790037910396225\n", + "-0.4193143,-3.138,5.590434,5.574878,a6.0.a2.3.1.cellPVmodule.6457,a6.0.a2.3.1.cellPVmodule.2310,333.8760333333333,54.73158333333333,0.16392736806994115\n", + "\n" + ] + } + ], + "source": [ + "fname = r'results\\irr_1axis_2021-01-13_1000_Scene0_Row1_Module7.csv'\n", + "with open(fname, 'r') as f:\n", + " print(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x,y,z,rearZ,mattype,rearMat,Wm2Front,Wm2Back,Back/FrontRatio\n", + "6.261394,-7.322,0.9683047,0.9527483,groundplane,sky,68.58062666666667,44.73472,0.6522843241591236\n", + "5.768305,-7.322,1.461394,1.445837,groundplane,sky,89.98831,44.73472,0.4971114902425633\n", + "\n" + ] + } + ], + "source": [ + "fname = r'results\\irr_1axis_2021-01-13_1000_Scene1_Row1_Module3.csv'\n", + "with open(fname, 'r') as f:\n", + " print(f.read())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### The scan location appears to be off on Scene1... viewpoint is smack in between cells in the cellModule?" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image.png](attachment:image.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No CECModule data passed; using default for Prism Solar BHC72-400\n", + "Bifaciality factor of module stored is 1\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampnamemodNumrowNumsceneNummattyperearMatWm2FrontWm2BackbackRatio...Pout_rawPout_GfrontBGGBGEMismatchPoutWind SpeedDNIDHIGHI
02021-01-13_10001axis_2021-01-13_1000cdeline_Scene0710[a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce...[a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce...[333.1322333333333, 334.0140333333333][59.59274, 54.71451666666667][0.17888560502869874, 0.16380854514432536]...163.832664140.21264617.13376216.8458540.00034163.8321083.6228144219
12021-01-13_10001axis_2021-01-13_1000_Scene1311[groundplane, groundplane][sky, sky][68.58062666666667, 89.98831][44.73472, 44.73472][0.6522843241591236, 0.4971114902425633]...NaNNaNNaNNaNNaNNaN3.6228144219
22021-01-13_10001axis_2021-01-13_1000_Scene1711[groundplane, groundplane][sky, sky][60.72608, 81.49197333333332][44.73472, 44.73472][0.7366519187156703, 0.5489395977370974]...NaNNaNNaNNaNNaNNaN3.6228144219
\n", + "

3 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " timestamp name modNum rowNum \\\n", + "0 2021-01-13_1000 1axis_2021-01-13_1000cdeline_Scene0 7 1 \n", + "1 2021-01-13_1000 1axis_2021-01-13_1000_Scene1 3 1 \n", + "2 2021-01-13_1000 1axis_2021-01-13_1000_Scene1 7 1 \n", + "\n", + " sceneNum mattype \\\n", + "0 0 [a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce... \n", + "1 1 [groundplane, groundplane] \n", + "2 1 [groundplane, groundplane] \n", + "\n", + " rearMat \\\n", + "0 [a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce... \n", + "1 [sky, sky] \n", + "2 [sky, sky] \n", + "\n", + " Wm2Front Wm2Back \\\n", + "0 [333.1322333333333, 334.0140333333333] [59.59274, 54.71451666666667] \n", + "1 [68.58062666666667, 89.98831] [44.73472, 44.73472] \n", + "2 [60.72608, 81.49197333333332] [44.73472, 44.73472] \n", + "\n", + " backRatio ... Pout_raw Pout_Gfront \\\n", + "0 [0.17888560502869874, 0.16380854514432536] ... 163.832664 140.212646 \n", + "1 [0.6522843241591236, 0.4971114902425633] ... NaN NaN \n", + "2 [0.7366519187156703, 0.5489395977370974] ... NaN NaN \n", + "\n", + " BGG BGE Mismatch Pout Wind Speed DNI DHI GHI \n", + "0 17.133762 16.845854 0.00034 163.832108 3.6 228 144 219 \n", + "1 NaN NaN NaN NaN 3.6 228 144 219 \n", + "2 NaN NaN NaN NaN 3.6 228 144 219 \n", + "\n", + "[3 rows x 26 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# run calculateResult - \n", + "results_1up = demo.calculateResults()\n", + "display(results_1up)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Now test out AgriPV functions..\n", + "### do analysis1axis " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'xstart': 0.0, 'ystart': 0.0, 'zstart': 0.05, 'xinc': 1.558534183543639, 'yinc': 0.7811416707851865, 'zinc': 0.14792673862422576, 'sx_xinc': 0.0, 'sx_yinc': 0.0, 'sx_zinc': 0.0, 'Nx': 1, 'Ny': 4, 'Nz': 1, 'orient': '0 0 -1'}\n" + ] + } + ], + "source": [ + "# do a ground scan underneath scene 1 at 10:00A\n", + "analysis = br.AnalysisObj()\n", + "scene1 = demo.trackerdict['2021-01-13_1000']['scenes'][1]\n", + "(frontscanind, backscanind, groundscan) = analysis.moduleAnalysis(scene=scene1, sensorsground = 4)\n", + "print(groundscan)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This looks wrong...." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/sphinx/source/whatsnew/pending.rst b/docs/sphinx/source/whatsnew/pending.rst index c56a37d5..92634cc1 100644 --- a/docs/sphinx/source/whatsnew/pending.rst +++ b/docs/sphinx/source/whatsnew/pending.rst @@ -9,7 +9,7 @@ Deprecations * :py:class:`~bifacial_radiance.RadianceObj.appendtoScene` is deprecated in favor of :py:class:`~bifacial_radiance.SceneObj.appendtoScene` * :py:class:`~bifacial_radiance.RadianceObj.makeScene`.`appendtoScene` is deprecated in favor of :py:class:`~bifacial_radiance.makeScene`.`customtext` * :py:class:`~bifacial_radiance.RadianceObj.makeScene1axis`.`appendtoScene` is deprecated in favor of :py:class:`~bifacial_radiance.makeScene1axis`.`customtext` - +* Results `Wm2Front` and `Wm2Back` no longer tracked in top-level :py:class:`~bifacial_radiance.RadianceObj` object. Results are now tracked in :py:class:`~bifacial_radiance.AnalysisObj` API Changes ~~~~~~~~~~~~ @@ -21,15 +21,17 @@ API Changes * NSRDB weather data can now be loaded using :py:class:`~bifacial_radiance.RadianceObj.NSRDBWeatherData`. * :py:class:`~bifacial_radiance.makeScene`.`append` added to allow multiple scenes to be attached to a single RadianceObj. Default: False (over-write the scene) * :py:class:`~bifacial_radiance.makeScene1axis`.`append` added to allow multiple scenes to be attached to a single RadianceObj. Default: False (over-write the scene) -* ``scene.appendtoscene`` functionality added (add more detail here, fix hyperlinks) - +* `scene.appendtoscene` functionality added (add more detail here, fix hyperlinks) +* trackerdict stores list of :py:class:`~bifacial_radiance.AnalysisObj` objects in trackerdict['key']['AnalysisObj'] +* :py:class:`~modelchain.runModelChain` returns only `RadianceObj` value, not `AnalysisObj` as well. Enhancements ~~~~~~~~~~~~ * :py:class:`~bifacial_radiance.RadianceObj` and :py:class:`~bifacial_radiance.GroundObj` and :py:class:`~bifacial_radiance.MetObj` now have `self.columns` and `self.methods` introspection to list data columsn and methods available * multiple sceneObjects are tracked by the RadianceObj now. New function :py:class:`~bifacial_radiance.RadianceObj.sceneNames` will return the list of scenes being tracked. - - +* New function :py:class:`~bifacial_radiance.AnalysisObj.calc_performance` to call CEC performance calculation from within the AnalysisObj +* :py:class:`~bifacial_radiance.AnalysisObj` has new attribute `power_data` to store CEC performance data +* :py:class:`~bifacial_radiance.AnalysisObj` has new function `getResults` to bundle and return irradiance scan results in dataframe form Bug fixes ~~~~~~~~~ diff --git a/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.ipynb b/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.ipynb index f0b4d713..8032c388 100644 --- a/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.ipynb +++ b/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.ipynb @@ -62,7 +62,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Your simulation will be stored in C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n" + "Your simulation will be stored in C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n" ] } ], @@ -123,7 +123,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "path = C:\\Users\\mbrown2\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n", + "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n", "Loading albedo, 1 value(s), 0.250 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", @@ -437,18 +437,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "Linescan in process: 1axis_-5.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-5.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-5.0_Row2_Module9.csv\n", - "Index: -5.0. Wm2Front: 753009.8222222222. Wm2Back: 104733.29185185184\n", - "Linescan in process: 1axis_0.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_0.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_0.0_Row2_Module9.csv\n", - "Index: 0.0. Wm2Front: 1135.0014444444448. Wm2Back: 171.02631481481478\n", - "Linescan in process: 1axis_5.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_5.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_5.0_Row2_Module9.csv\n", - "Index: 5.0. Wm2Front: 843605.862962963. Wm2Back: 115990.78148148149\n" + "Linescan in process: 1axis_-5.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-5.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-5.0_Scene0_Row2_Module9.csv\n", + "Index: -5.0. Wm2Front: 756438.0814814814. Wm2Back: 104747.92592592591\n", + "Linescan in process: 1axis_0.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_0.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_0.0_Scene0_Row2_Module9.csv\n", + "Index: 0.0. Wm2Front: 1162.6084444444446. Wm2Back: 167.88767407407406\n", + "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_5.0_Scene0_Row2_Module9.csv\n", + "Index: 5.0. Wm2Front: 840157.1333333334. Wm2Back: 116622.17037037038\n" ] } ], @@ -467,19 +467,11 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Bifaciality factor of module stored is 1\n" - ] - } - ], + "outputs": [], "source": [ - "trackerdict = demo.calculateResults()" + "results = demo.calculateResults()" ] }, { @@ -491,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -529,28 +521,28 @@ " 0\n", " 2\n", " 9\n", - " 12.46076\n", - " 1.597535e+06\n", - " 199064.935793\n", - " [1827920.5291916667, 1822498.1192583335, 18181...\n", - " [230386.02506666665, 224963.61513333334, 22059...\n", + " 12.499875\n", + " 1.597679e+06\n", + " 199707.820115\n", + " [1830064.783375, 1822984.2250083336, 1818858.5...\n", + " [232386.26733333335, 225305.70896666663, 22118...\n", " \n", " \n", "\n", "" ], "text/plain": [ - " row module BGG Gfront_mean Grear_mean \\\n", - "0 2 9 12.46076 1.597535e+06 199064.935793 \n", + " row module BGG Gfront_mean Grear_mean \\\n", + "0 2 9 12.499875 1.597679e+06 199707.820115 \n", "\n", " POA_eff \\\n", - "0 [1827920.5291916667, 1822498.1192583335, 18181... \n", + "0 [1830064.783375, 1822984.2250083336, 1818858.5... \n", "\n", " Wm2Back \n", - "0 [230386.02506666665, 224963.61513333334, 22059... " + "0 [232386.26733333335, 225305.70896666663, 22118... " ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -561,7 +553,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -599,28 +591,28 @@ " 0\n", " 2\n", " 9\n", - " 12.46076\n", - " 1.597535e+06\n", - " 199064.935793\n", - " [1827920.5291916667, 1822498.1192583335, 18181...\n", - " [230386.02506666665, 224963.61513333334, 22059...\n", + " 12.499875\n", + " 1.597679e+06\n", + " 199707.820115\n", + " [1830064.783375, 1822984.2250083336, 1818858.5...\n", + " [232386.26733333335, 225305.70896666663, 22118...\n", " \n", " \n", "\n", "" ], "text/plain": [ - " row module BGG Gfront_mean Grear_mean \\\n", - "0 2 9 12.46076 1.597535e+06 199064.935793 \n", + " row module BGG Gfront_mean Grear_mean \\\n", + "0 2 9 12.499875 1.597679e+06 199707.820115 \n", "\n", " POA_eff \\\n", - "0 [1827920.5291916667, 1822498.1192583335, 18181... \n", + "0 [1830064.783375, 1822984.2250083336, 1818858.5... \n", "\n", " Wm2Back \n", - "0 [230386.02506666665, 224963.61513333334, 22059... " + "0 [232386.26733333335, 225305.70896666663, 22118... " ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -640,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -684,9 +676,9 @@ " 2.276605\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752540.066667\n", - " 121214.366667\n", - " 0.161074\n", + " 755845.200000\n", + " 121267.533333\n", + " 0.160440\n", " \n", " \n", " 1\n", @@ -696,9 +688,9 @@ " 2.307110\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752456.566667\n", - " 115861.666667\n", - " 0.153978\n", + " 755894.200000\n", + " 115769.133333\n", + " 0.153155\n", " \n", " \n", " 2\n", @@ -708,9 +700,9 @@ " 2.337614\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752351.366667\n", - " 110508.733333\n", - " 0.146884\n", + " 755954.500000\n", + " 110270.233333\n", + " 0.145869\n", " \n", " \n", " 3\n", @@ -720,9 +712,9 @@ " 2.368119\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752246.166667\n", - " 102652.933333\n", - " 0.136462\n", + " 756014.733333\n", + " 103706.033333\n", + " 0.137175\n", " \n", " \n", " 4\n", @@ -732,9 +724,9 @@ " 2.398623\n", " a8.1.tube1.16\n", " sky\n", - " 753053.400000\n", + " 757065.000000\n", " 96092.410000\n", - " 0.127604\n", + " 0.126928\n", " \n", " \n", " 5\n", @@ -744,9 +736,9 @@ " 2.429128\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753757.300000\n", - " 98375.906667\n", - " 0.130514\n", + " 756898.400000\n", + " 97647.053333\n", + " 0.129009\n", " \n", " \n", " 6\n", @@ -756,9 +748,9 @@ " 2.459632\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753670.433333\n", - " 98988.386667\n", - " 0.131342\n", + " 756822.600000\n", + " 98924.630000\n", + " 0.130710\n", " \n", " \n", " 7\n", @@ -768,9 +760,9 @@ " 2.490137\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753561.200000\n", - " 98590.556667\n", - " 0.130833\n", + " 756756.900000\n", + " 99018.040000\n", + " 0.130845\n", " \n", " \n", " 8\n", @@ -780,9 +772,9 @@ " 2.520641\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753451.900000\n", - " 100314.666667\n", - " 0.133140\n", + " 756691.200000\n", + " 100036.266667\n", + " 0.132202\n", " \n", " \n", "\n", @@ -801,24 +793,24 @@ "8 19.82799 -1.004 2.542558 2.520641 a8.1.a1.test-module.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio \n", - "0 a8.1.a0.test-module.2310 752540.066667 121214.366667 0.161074 \n", - "1 a8.1.a0.test-module.2310 752456.566667 115861.666667 0.153978 \n", - "2 a8.1.a0.test-module.2310 752351.366667 110508.733333 0.146884 \n", - "3 a8.1.a0.test-module.2310 752246.166667 102652.933333 0.136462 \n", - "4 sky 753053.400000 96092.410000 0.127604 \n", - "5 a8.1.a1.test-module.2310 753757.300000 98375.906667 0.130514 \n", - "6 a8.1.a1.test-module.2310 753670.433333 98988.386667 0.131342 \n", - "7 a8.1.a1.test-module.2310 753561.200000 98590.556667 0.130833 \n", - "8 a8.1.a1.test-module.2310 753451.900000 100314.666667 0.133140 " + "0 a8.1.a0.test-module.2310 755845.200000 121267.533333 0.160440 \n", + "1 a8.1.a0.test-module.2310 755894.200000 115769.133333 0.153155 \n", + "2 a8.1.a0.test-module.2310 755954.500000 110270.233333 0.145869 \n", + "3 a8.1.a0.test-module.2310 756014.733333 103706.033333 0.137175 \n", + "4 sky 757065.000000 96092.410000 0.126928 \n", + "5 a8.1.a1.test-module.2310 756898.400000 97647.053333 0.129009 \n", + "6 a8.1.a1.test-module.2310 756822.600000 98924.630000 0.130710 \n", + "7 a8.1.a1.test-module.2310 756756.900000 99018.040000 0.130845 \n", + "8 a8.1.a1.test-module.2310 756691.200000 100036.266667 0.132202 " ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "resultPath = os.path.join('results','irr_1axis_-5.0_Row2_Module9.csv')\n", + "resultPath = os.path.join('results','irr_1axis_-5.0_Scene0_Row2_Module9.csv')\n", "results = load.read1Result(resultPath)\n", "results" ] @@ -869,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -913,9 +905,9 @@ " 2.276605\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752540.066667\n", - " 121214.366667\n", - " 0.161074\n", + " 755845.200000\n", + " 121267.533333\n", + " 0.160440\n", " \n", " \n", " 1\n", @@ -925,9 +917,9 @@ " 2.307110\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752456.566667\n", - " 115861.666667\n", - " 0.153978\n", + " 755894.200000\n", + " 115769.133333\n", + " 0.153155\n", " \n", " \n", " 2\n", @@ -937,9 +929,9 @@ " 2.337614\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752351.366667\n", - " 110508.733333\n", - " 0.146884\n", + " 755954.500000\n", + " 110270.233333\n", + " 0.145869\n", " \n", " \n", " 3\n", @@ -949,9 +941,9 @@ " 2.368119\n", " a8.1.a0.test-module.6457\n", " a8.1.a0.test-module.2310\n", - " 752246.166667\n", - " 102652.933333\n", - " 0.136462\n", + " 756014.733333\n", + " 103706.033333\n", + " 0.137175\n", " \n", " \n", " 4\n", @@ -963,7 +955,7 @@ " sky\n", " NaN\n", " NaN\n", - " 0.127604\n", + " 0.126928\n", " \n", " \n", " 5\n", @@ -973,9 +965,9 @@ " 2.429128\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753757.300000\n", - " 98375.906667\n", - " 0.130514\n", + " 756898.400000\n", + " 97647.053333\n", + " 0.129009\n", " \n", " \n", " 6\n", @@ -985,9 +977,9 @@ " 2.459632\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753670.433333\n", - " 98988.386667\n", - " 0.131342\n", + " 756822.600000\n", + " 98924.630000\n", + " 0.130710\n", " \n", " \n", " 7\n", @@ -997,9 +989,9 @@ " 2.490137\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753561.200000\n", - " 98590.556667\n", - " 0.130833\n", + " 756756.900000\n", + " 99018.040000\n", + " 0.130845\n", " \n", " \n", " 8\n", @@ -1009,9 +1001,9 @@ " 2.520641\n", " a8.1.a1.test-module.6457\n", " a8.1.a1.test-module.2310\n", - " 753451.900000\n", - " 100314.666667\n", - " 0.133140\n", + " 756691.200000\n", + " 100036.266667\n", + " 0.132202\n", " \n", " \n", "\n", @@ -1030,25 +1022,25 @@ "8 19.82799 -1.004 2.542558 2.520641 a8.1.a1.test-module.6457 \n", "\n", " rearMat Wm2Front Wm2Back Back/FrontRatio \n", - "0 a8.1.a0.test-module.2310 752540.066667 121214.366667 0.161074 \n", - "1 a8.1.a0.test-module.2310 752456.566667 115861.666667 0.153978 \n", - "2 a8.1.a0.test-module.2310 752351.366667 110508.733333 0.146884 \n", - "3 a8.1.a0.test-module.2310 752246.166667 102652.933333 0.136462 \n", - "4 sky NaN NaN 0.127604 \n", - "5 a8.1.a1.test-module.2310 753757.300000 98375.906667 0.130514 \n", - "6 a8.1.a1.test-module.2310 753670.433333 98988.386667 0.131342 \n", - "7 a8.1.a1.test-module.2310 753561.200000 98590.556667 0.130833 \n", - "8 a8.1.a1.test-module.2310 753451.900000 100314.666667 0.133140 " + "0 a8.1.a0.test-module.2310 755845.200000 121267.533333 0.160440 \n", + "1 a8.1.a0.test-module.2310 755894.200000 115769.133333 0.153155 \n", + "2 a8.1.a0.test-module.2310 755954.500000 110270.233333 0.145869 \n", + "3 a8.1.a0.test-module.2310 756014.733333 103706.033333 0.137175 \n", + "4 sky NaN NaN 0.126928 \n", + "5 a8.1.a1.test-module.2310 756898.400000 97647.053333 0.129009 \n", + "6 a8.1.a1.test-module.2310 756822.600000 98924.630000 0.130710 \n", + "7 a8.1.a1.test-module.2310 756756.900000 99018.040000 0.130845 \n", + "8 a8.1.a1.test-module.2310 756691.200000 100036.266667 0.132202 " ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results_clean = load.cleanResult(results)\n", - "results_clean\n" + "results_clean" ] }, { @@ -1064,7 +1056,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1097,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -1114,16 +1106,14 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "scrolled": true - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "path = C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\docs\\tutorials\n", + "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_02\n", "Loading albedo, 1 value(s), 0.250 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", @@ -1208,62 +1198,62 @@ "Created 1axis_35.0.oct\n", "Created 1axis_45.0.oct\n", "Created 1axis_50.0.oct\n", - "Linescan in process: 1axis_-50.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-50.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-50.0_Row2_Module9.csv\n", - "Index: -50.0. Wm2Front: 27517.084714814817. Wm2Back: 2826.930932222222\n", - "Linescan in process: 1axis_-45.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-45.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-45.0_Row2_Module9.csv\n", - "Index: -45.0. Wm2Front: 1731.6319987407405. Wm2Back: 133.31039248148147\n", - "Linescan in process: 1axis_-40.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-40.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-40.0_Row2_Module9.csv\n", - "Index: -40.0. Wm2Front: 8889.726928703703. Wm2Back: 879.6606937037037\n", - "Linescan in process: 1axis_-35.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-35.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-35.0_Row2_Module9.csv\n", - "Index: -35.0. Wm2Front: 10845.10608074074. Wm2Back: 1156.813395925926\n", - "Linescan in process: 1axis_-25.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-25.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-25.0_Row2_Module9.csv\n", - "Index: -25.0. Wm2Front: 18399.76553688889. Wm2Back: 2199.2048133333333\n", - "Linescan in process: 1axis_-15.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-15.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-15.0_Row2_Module9.csv\n", - "Index: -15.0. Wm2Front: 242.22281503703704. Wm2Back: 32.28069451481482\n", - "Linescan in process: 1axis_-10.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_-10.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_-10.0_Row2_Module9.csv\n", - "Index: -10.0. Wm2Front: 18715.446807037035. Wm2Back: 2381.9418274074073\n", - "Linescan in process: 1axis_5.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_5.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_5.0_Row2_Module9.csv\n", - "Index: 5.0. Wm2Front: 19061.03714637037. Wm2Back: 2263.7957174074077\n", - "Linescan in process: 1axis_10.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_10.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_10.0_Row2_Module9.csv\n", - "Index: 10.0. Wm2Front: 479.18399271481474. Wm2Back: 28.480026422222224\n", - "Linescan in process: 1axis_15.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_15.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_15.0_Row2_Module9.csv\n", - "Index: 15.0. Wm2Front: 826.463565. Wm2Back: 66.72499407407406\n", - "Linescan in process: 1axis_20.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_20.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_20.0_Row2_Module9.csv\n", - "Index: 20.0. Wm2Front: 20060.8926242963. Wm2Back: 2241.101145925926\n", - "Linescan in process: 1axis_35.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_35.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_35.0_Row2_Module9.csv\n", - "Index: 35.0. Wm2Front: 18507.62126888889. Wm2Back: 1924.670081111111\n", - "Linescan in process: 1axis_45.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_45.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_45.0_Row2_Module9.csv\n", - "Index: 45.0. Wm2Front: 9566.065326925927. Wm2Back: 825.9953966666667\n", - "Linescan in process: 1axis_50.0_Row2_Module9_Front\n", - "Linescan in process: 1axis_50.0_Row2_Module9_Back\n", - "Saved: results\\irr_1axis_50.0_Row2_Module9.csv\n", - "Index: 50.0. Wm2Front: 31832.450419259258. Wm2Back: 2820.5362711111106\n" + "Linescan in process: 1axis_-50.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-50.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-50.0_Scene0_Row2_Module9.csv\n", + "Index: -50.0. Wm2Front: 30598.525185185186. Wm2Back: 7069.0363333333335\n", + "Linescan in process: 1axis_-45.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-45.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-45.0_Scene0_Row2_Module9.csv\n", + "Index: -45.0. Wm2Front: 1924.6771481481483. Wm2Back: 182.09474074074075\n", + "Linescan in process: 1axis_-40.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-40.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-40.0_Scene0_Row2_Module9.csv\n", + "Index: -40.0. Wm2Front: 10017.671888888888. Wm2Back: 1120.4236703703705\n", + "Linescan in process: 1axis_-35.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-35.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-35.0_Scene0_Row2_Module9.csv\n", + "Index: -35.0. Wm2Front: 11937.552592592592. Wm2Back: 4776.787407407407\n", + "Linescan in process: 1axis_-25.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-25.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-25.0_Scene0_Row2_Module9.csv\n", + "Index: -25.0. Wm2Front: 21090.204444444447. Wm2Back: 2789.4267777777777\n", + "Linescan in process: 1axis_-15.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-15.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-15.0_Scene0_Row2_Module9.csv\n", + "Index: -15.0. Wm2Front: 256.5185925925926. Wm2Back: 40.77242777777778\n", + "Linescan in process: 1axis_-10.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_-10.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_-10.0_Scene0_Row2_Module9.csv\n", + "Index: -10.0. Wm2Front: 21620.033333333333. Wm2Back: 3103.2792592592596\n", + "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_5.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_5.0_Scene0_Row2_Module9.csv\n", + "Index: 5.0. Wm2Front: 21323.01888888889. Wm2Back: 2875.540555555556\n", + "Linescan in process: 1axis_10.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_10.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_10.0_Scene0_Row2_Module9.csv\n", + "Index: 10.0. Wm2Front: 512.347625925926. Wm2Back: 32.35189148148148\n", + "Linescan in process: 1axis_15.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_15.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_15.0_Scene0_Row2_Module9.csv\n", + "Index: 15.0. Wm2Front: 908.5102333333334. Wm2Back: 80.54242111111111\n", + "Linescan in process: 1axis_20.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_20.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_20.0_Scene0_Row2_Module9.csv\n", + "Index: 20.0. Wm2Front: 22589.655925925927. Wm2Back: 2953.0396296296294\n", + "Linescan in process: 1axis_35.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_35.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_35.0_Scene0_Row2_Module9.csv\n", + "Index: 35.0. Wm2Front: 20845.17740740741. Wm2Back: 2517.33062962963\n", + "Linescan in process: 1axis_45.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_45.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_45.0_Scene0_Row2_Module9.csv\n", + "Index: 45.0. Wm2Front: 10461.607666666669. Wm2Back: 14251.835918518518\n", + "Linescan in process: 1axis_50.0_Scene0_Row2_Module9_Front\n", + "Linescan in process: 1axis_50.0_Scene0_Row2_Module9_Back\n", + "Saved: results\\irr_1axis_50.0_Scene0_Row2_Module9.csv\n", + "Index: 50.0. Wm2Front: 35363.36962962963. Wm2Back: 14600.103962962965\n" ] } ], @@ -1295,12 +1285,12 @@ "sceneDict = {'gcr': gcr,'hub_height':hub_height, 'nMods': nMods, 'nRows': nRows} # orientation deprecated on v.0.2.4.\n", "demo.makeScene1axis(module=moduletype, sceneDict=sceneDict)\n", "demo.makeOct1axis()\n", - "demo.analysis1axis(modWanted=modWanted, rowWanted=rowWanted);\n" + "demo.analysis1axis(modWanted=modWanted, rowWanted=rowWanted);" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -1309,705 +1299,66 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rowmoduleBGGGfront_meanGrear_meanPOA_effWm2Back
0299.732236210385.18713320475.182191[234479.62299000003, 233179.63291333336, 23242...[24094.435856666663, 22794.445780000002, 22040...
\n", + "
" + ], "text/plain": [ - "{-10.0: {'csvfile': 'EPWs\\\\1axis_-10.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 10.0,\n", - " 'datetime': Index(['2021-05-01 06:00:00', '2021-05-01 12:00:00', '2021-05-02 06:00:00',\n", - " '2021-05-02 12:00:00', '2021-05-03 06:00:00', '2021-05-03 12:00:00',\n", - " '2021-05-04 06:00:00', '2021-05-04 12:00:00', '2021-05-05 06:00:00',\n", - " '2021-05-05 12:00:00', '2021-05-06 06:00:00', '2021-05-06 12:00:00',\n", - " '2021-05-07 06:00:00', '2021-05-07 12:00:00', '2021-05-08 06:00:00',\n", - " '2021-05-08 12:00:00', '2021-05-09 06:00:00', '2021-05-09 12:00:00',\n", - " '2021-05-10 06:00:00', '2021-05-10 12:00:00', '2021-05-11 06:00:00',\n", - " '2021-05-11 12:00:00', '2021-05-12 06:00:00', '2021-05-12 12:00:00',\n", - " '2021-05-13 06:00:00', '2021-05-13 12:00:00', '2021-05-14 06:00:00',\n", - " '2021-05-14 12:00:00', '2021-05-15 06:00:00', '2021-05-15 12:00:00',\n", - " '2021-05-16 06:00:00', '2021-05-16 12:00:00', '2021-05-17 06:00:00',\n", - " '2021-05-17 12:00:00', '2021-05-18 06:00:00', '2021-05-18 12:00:00',\n", - " '2021-05-19 06:00:00', '2021-05-19 12:00:00', '2021-05-20 06:00:00',\n", - " '2021-05-20 12:00:00', '2021-05-21 06:00:00', '2021-05-21 12:00:00',\n", - " '2021-05-22 06:00:00', '2021-05-22 12:00:00', '2021-05-23 12:00:00',\n", - " '2021-05-24 12:00:00', '2021-05-25 12:00:00', '2021-05-26 12:00:00',\n", - " '2021-05-27 12:00:00', '2021-05-28 12:00:00', '2021-05-29 12:00:00',\n", - " '2021-05-30 12:00:00'],\n", - " dtype='object'),\n", - " 'count': 52,\n", - " 'skyfile': 'skies\\\\1axis_-10.0.rad',\n", - " 'radfile': 'objects\\\\1axis-10.0__C_2.01088_rtr_10.09100_tilt_10.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 10.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-10.0__C_2.01088_rtr_10.09100_tilt_10.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 10.0, 'gcr': 0.33, 'clearance_height': 2.010875784184561, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-10.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-10.0.oct', 'name': '1axis_-10.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.49723, 21.16929, 20.84135, 20.51341, 20.18546, 19.85752, 19.52958, 19.20164, 18.8737], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [2.089382, 2.147206, 2.205031, 2.262856, 2.320681, 2.378506, 2.436331, 2.494155, 2.55198], 'rearZ': [2.067716, 2.125541, 2.183366, 2.24119, 2.299015, 2.35684, 2.414665, 2.47249, 2.530315], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [20851.396666666667, 20851.93, 20852.256666666664, 20852.58, 15.914596666666668, 20853.226666666666, 20853.55, 21654.933333333334, 21653.233333333334], 'Wm2Back': [2947.0113333333334, 2729.266666666667, 2566.1883333333335, 1855.9883333333335, 15.665446666666668, 2159.4060000000004, 2826.259666666667, 3064.673666666667, 3273.017], 'Back/FrontRatio': [0.14133399498895302, 0.13088795789064653, 0.12306525146365847, 0.08900520915532391, 0.9842827130368346, 0.10355260272018964, 0.1355289402110301, 0.14152311059882688, 0.1511560328408521], 'backRatio': [0.14133399498895302, 0.13088795789064653, 0.12306525146365847, 0.08900520915532391, 0.9842827130368346, 0.10355260272018964, 0.1355289402110301, 0.14152311059882688, 0.1511560328408521], 'rearX': [21.49341, 21.16547, 20.83753, 20.50959, 20.18164, 19.8537, 19.52576, 19.19782, 18.86988], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [20851.396666666667,\n", - " 20851.93,\n", - " 20852.256666666664,\n", - " 20852.58,\n", - " 15.914596666666668,\n", - " 20853.226666666666,\n", - " 20853.55,\n", - " 21654.933333333334,\n", - " 21653.233333333334],\n", - " 'Wm2Back': [2947.0113333333334,\n", - " 2729.266666666667,\n", - " 2566.1883333333335,\n", - " 1855.9883333333335,\n", - " 15.665446666666668,\n", - " 2159.4060000000004,\n", - " 2826.259666666667,\n", - " 3064.673666666667,\n", - " 3273.017],\n", - " 'backRatio': [0.14133399498895302,\n", - " 0.13088795789064653,\n", - " 0.12306525146365847,\n", - " 0.08900520915532391,\n", - " 0.9842827130368346,\n", - " 0.10355260272018964,\n", - " 0.1355289402110301,\n", - " 0.14152311059882688,\n", - " 0.1511560328408521]}]},\n", - " -35.0: {'csvfile': 'EPWs\\\\1axis_-35.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 35.0,\n", - " 'datetime': Index(['2021-05-01 07:00:00', '2021-05-02 07:00:00', '2021-05-03 07:00:00',\n", - " '2021-05-04 07:00:00', '2021-05-05 07:00:00', '2021-05-06 07:00:00',\n", - " '2021-05-07 07:00:00', '2021-05-13 10:00:00', '2021-05-14 10:00:00',\n", - " '2021-05-15 10:00:00', '2021-05-16 10:00:00', '2021-05-17 10:00:00',\n", - " '2021-05-18 10:00:00', '2021-05-19 10:00:00', '2021-05-20 10:00:00',\n", - " '2021-05-21 10:00:00', '2021-05-22 10:00:00', '2021-05-23 10:00:00',\n", - " '2021-05-24 10:00:00', '2021-05-25 10:00:00', '2021-05-26 10:00:00',\n", - " '2021-05-27 10:00:00', '2021-05-28 10:00:00', '2021-05-29 10:00:00',\n", - " '2021-05-30 10:00:00'],\n", - " dtype='object'),\n", - " 'count': 25,\n", - " 'skyfile': 'skies\\\\1axis_-35.0.rad',\n", - " 'radfile': 'objects\\\\1axis-35.0__C_1.34500_rtr_10.09100_tilt_35.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 35.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-35.0__C_1.34500_rtr_10.09100_tilt_35.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 35.0, 'gcr': 0.33, 'clearance_height': 1.3449952334755082, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-35.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-35.0.oct', 'name': '1axis_-35.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.28497, 21.0122, 20.73942, 20.46664, 20.19386, 19.92109, 19.64831, 19.37553, 19.10275], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.553198, 1.744199, 1.9352, 2.126201, 2.317202, 2.508203, 2.699204, 2.890205, 3.081206], 'rearZ': [1.535177, 1.726178, 1.917179, 2.10818, 2.299181, 2.490182, 2.681183, 2.872184, 3.063185], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [11747.996666666666, 11928.036666666667, 12198.963333333333, 12259.003333333332, 12.831393333333333, 12160.699999999999, 12190.596666666666, 12544.94, 12562.886666666665], 'Wm2Back': [1493.4070000000002, 1369.0273333333334, 1258.7173333333333, 970.8318666666668, 18.37303, 1189.49, 1318.3293333333334, 1370.825, 1422.3196666666665], 'Back/FrontRatio': [0.1271201307978923, 0.1147738942138932, 0.10318231113225923, 0.0791933700542782, 1.431769547795449, 0.09781426251660987, 0.1081431254956518, 0.10927313249221339, 0.1132159822172519], 'backRatio': [0.1271201307978923, 0.1147738942138932, 0.10318231113225923, 0.0791933700542782, 1.431769547795449, 0.09781426251660987, 0.1081431254956518, 0.10927313249221339, 0.1132159822172519], 'rearX': [21.27236, 20.99958, 20.7268, 20.45402, 20.18124, 19.90847, 19.63569, 19.36291, 19.09013], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [11747.996666666666,\n", - " 11928.036666666667,\n", - " 12198.963333333333,\n", - " 12259.003333333332,\n", - " 12.831393333333333,\n", - " 12160.699999999999,\n", - " 12190.596666666666,\n", - " 12544.94,\n", - " 12562.886666666665],\n", - " 'Wm2Back': [1493.4070000000002,\n", - " 1369.0273333333334,\n", - " 1258.7173333333333,\n", - " 970.8318666666668,\n", - " 18.37303,\n", - " 1189.49,\n", - " 1318.3293333333334,\n", - " 1370.825,\n", - " 1422.3196666666665],\n", - " 'backRatio': [0.1271201307978923,\n", - " 0.1147738942138932,\n", - " 0.10318231113225923,\n", - " 0.0791933700542782,\n", - " 1.431769547795449,\n", - " 0.09781426251660987,\n", - " 0.1081431254956518,\n", - " 0.10927313249221339,\n", - " 0.1132159822172519]}]},\n", - " -50.0: {'csvfile': 'EPWs\\\\1axis_-50.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 50.0,\n", - " 'datetime': Index(['2021-05-01 08:00:00', '2021-05-01 09:00:00', '2021-05-02 08:00:00',\n", - " '2021-05-02 09:00:00', '2021-05-03 08:00:00', '2021-05-03 09:00:00',\n", - " '2021-05-04 08:00:00', '2021-05-04 09:00:00', '2021-05-05 08:00:00',\n", - " '2021-05-05 09:00:00', '2021-05-06 08:00:00', '2021-05-06 09:00:00',\n", - " '2021-05-07 08:00:00', '2021-05-07 09:00:00', '2021-05-08 08:00:00',\n", - " '2021-05-08 09:00:00', '2021-05-09 08:00:00', '2021-05-09 09:00:00',\n", - " '2021-05-10 08:00:00', '2021-05-10 09:00:00', '2021-05-11 08:00:00',\n", - " '2021-05-11 09:00:00', '2021-05-12 08:00:00', '2021-05-12 09:00:00',\n", - " '2021-05-13 08:00:00', '2021-05-13 09:00:00', '2021-05-14 08:00:00',\n", - " '2021-05-14 09:00:00', '2021-05-15 08:00:00', '2021-05-15 09:00:00',\n", - " '2021-05-16 08:00:00', '2021-05-16 09:00:00', '2021-05-17 08:00:00',\n", - " '2021-05-17 09:00:00', '2021-05-18 08:00:00', '2021-05-18 09:00:00',\n", - " '2021-05-19 08:00:00', '2021-05-19 09:00:00', '2021-05-20 08:00:00',\n", - " '2021-05-20 09:00:00', '2021-05-21 08:00:00', '2021-05-21 09:00:00',\n", - " '2021-05-22 08:00:00', '2021-05-22 09:00:00', '2021-05-23 07:00:00',\n", - " '2021-05-23 08:00:00', '2021-05-23 09:00:00', '2021-05-24 07:00:00',\n", - " '2021-05-24 08:00:00', '2021-05-24 09:00:00', '2021-05-25 07:00:00',\n", - " '2021-05-25 08:00:00', '2021-05-25 09:00:00', '2021-05-26 07:00:00',\n", - " '2021-05-26 08:00:00', '2021-05-26 09:00:00', '2021-05-27 07:00:00',\n", - " '2021-05-27 08:00:00', '2021-05-27 09:00:00', '2021-05-28 07:00:00',\n", - " '2021-05-28 08:00:00', '2021-05-28 09:00:00', '2021-05-29 07:00:00',\n", - " '2021-05-29 08:00:00', '2021-05-29 09:00:00', '2021-05-30 07:00:00',\n", - " '2021-05-30 08:00:00', '2021-05-30 09:00:00'],\n", - " dtype='object'),\n", - " 'count': 68,\n", - " 'skyfile': 'skies\\\\1axis_-50.0.rad',\n", - " 'radfile': 'objects\\\\1axis-50.0__C_1.02454_rtr_10.09100_tilt_50.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 50.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-50.0__C_1.02454_rtr_10.09100_tilt_50.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 50.0, 'gcr': 0.33, 'clearance_height': 1.0245360022069014, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-50.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-50.0.oct', 'name': '1axis_-50.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.0541, 20.84005, 20.626, 20.41195, 20.19791, 19.98386, 19.76981, 19.55576, 19.34171], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.293127, 1.54822, 1.803313, 2.058406, 2.313499, 2.568591, 2.823684, 3.078777, 3.33387], 'rearZ': [1.278986, 1.534079, 1.789172, 2.044264, 2.299357, 2.55445, 2.809543, 3.064636, 3.319728], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [30687.713333333333, 31004.02, 30060.876666666667, 30326.58666666667, 30.5491, 31219.25333333333, 31384.05, 31398.666666666668, 31542.046666666665], 'Wm2Back': [3649.286, 3434.2053333333333, 3160.543, 2247.4966666666664, 60.40372333333334, 3000.6223333333332, 3194.967, 3305.717666666667, 3389.1366666666668], 'Back/FrontRatio': [0.1189168395000375, 0.1107664497238385, 0.10513808129775941, 0.07410977757767954, 1.9772021477289219, 0.09611447798512976, 0.10180224981153645, 0.10528209992094888, 0.10744821333360276], 'backRatio': [0.1189168395000375, 0.1107664497238385, 0.10513808129775941, 0.07410977757767954, 1.9772021477289219, 0.09611447798512976, 0.10180224981153645, 0.10528209992094888, 0.10744821333360276], 'rearX': [21.03725, 20.8232, 20.60915, 20.3951, 20.18105, 19.967, 19.75296, 19.53891, 19.32486], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [30687.713333333333,\n", - " 31004.02,\n", - " 30060.876666666667,\n", - " 30326.58666666667,\n", - " 30.5491,\n", - " 31219.25333333333,\n", - " 31384.05,\n", - " 31398.666666666668,\n", - " 31542.046666666665],\n", - " 'Wm2Back': [3649.286,\n", - " 3434.2053333333333,\n", - " 3160.543,\n", - " 2247.4966666666664,\n", - " 60.40372333333334,\n", - " 3000.6223333333332,\n", - " 3194.967,\n", - " 3305.717666666667,\n", - " 3389.1366666666668],\n", - " 'backRatio': [0.1189168395000375,\n", - " 0.1107664497238385,\n", - " 0.10513808129775941,\n", - " 0.07410977757767954,\n", - " 1.9772021477289219,\n", - " 0.09611447798512976,\n", - " 0.10180224981153645,\n", - " 0.10528209992094888,\n", - " 0.10744821333360276]}]},\n", - " -40.0: {'csvfile': 'EPWs\\\\1axis_-40.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 40.0,\n", - " 'datetime': Index(['2021-05-01 10:00:00', '2021-05-02 10:00:00', '2021-05-03 10:00:00',\n", - " '2021-05-04 10:00:00', '2021-05-05 10:00:00', '2021-05-06 10:00:00',\n", - " '2021-05-07 10:00:00', '2021-05-08 07:00:00', '2021-05-08 10:00:00',\n", - " '2021-05-09 07:00:00', '2021-05-09 10:00:00', '2021-05-10 07:00:00',\n", - " '2021-05-10 10:00:00', '2021-05-11 07:00:00', '2021-05-11 10:00:00',\n", - " '2021-05-12 07:00:00', '2021-05-12 10:00:00', '2021-05-13 07:00:00',\n", - " '2021-05-14 07:00:00'],\n", - " dtype='object'),\n", - " 'count': 19,\n", - " 'skyfile': 'skies\\\\1axis_-40.0.rad',\n", - " 'radfile': 'objects\\\\1axis-40.0__C_1.22976_rtr_10.09100_tilt_40.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 40.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-40.0__C_1.22976_rtr_10.09100_tilt_40.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 40.0, 'gcr': 0.33, 'clearance_height': 1.2297586298719119, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-40.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-40.0.oct', 'name': '1axis_-40.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.21569, 20.9606, 20.7055, 20.45041, 20.19532, 19.94022, 19.68513, 19.43004, 19.17495], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.459894, 1.673942, 1.88799, 2.102039, 2.316087, 2.530135, 2.744183, 2.958232, 3.17228], 'rearZ': [1.443041, 1.657089, 1.871137, 2.085186, 2.299234, 2.513282, 2.727331, 2.941379, 3.155427], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [9335.118333333332, 9524.916666666666, 9580.956333333334, 9739.918333333335, 6.232691666666668, 10868.933333333334, 10898.046666666667, 10017.526666666667, 10035.893333333333], 'Wm2Back': [1152.2076666666667, 1039.17, 947.9985, 746.8396666666667, 15.654076666666668, 874.7520666666666, 1000.3402666666667, 1046.372, 1093.612], 'Back/FrontRatio': [0.12342720275170203, 0.1091001556513892, 0.09894611436184944, 0.07667821889558428, 2.5112048371550832, 0.08048186140787858, 0.0917907773266912, 0.10445411630674142, 0.10897005923703927], 'backRatio': [0.12342720275170203, 0.1091001556513892, 0.09894611436184944, 0.07667821889558428, 2.5112048371550832, 0.08048186140787858, 0.0917907773266912, 0.10445411630674142, 0.10897005923703927], 'rearX': [21.20155, 20.94645, 20.69136, 20.43627, 20.18118, 19.92608, 19.67099, 19.4159, 19.1608], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [9335.118333333332,\n", - " 9524.916666666666,\n", - " 9580.956333333334,\n", - " 9739.918333333335,\n", - " 6.232691666666668,\n", - " 10868.933333333334,\n", - " 10898.046666666667,\n", - " 10017.526666666667,\n", - " 10035.893333333333],\n", - " 'Wm2Back': [1152.2076666666667,\n", - " 1039.17,\n", - " 947.9985,\n", - " 746.8396666666667,\n", - " 15.654076666666668,\n", - " 874.7520666666666,\n", - " 1000.3402666666667,\n", - " 1046.372,\n", - " 1093.612],\n", - " 'backRatio': [0.12342720275170203,\n", - " 0.1091001556513892,\n", - " 0.09894611436184944,\n", - " 0.07667821889558428,\n", - " 2.5112048371550832,\n", - " 0.08048186140787858,\n", - " 0.0917907773266912,\n", - " 0.10445411630674142,\n", - " 0.10897005923703927]}]},\n", - " -25.0: {'csvfile': 'EPWs\\\\1axis_-25.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 25.0,\n", - " 'datetime': Index(['2021-05-01 11:00:00', '2021-05-02 11:00:00', '2021-05-03 11:00:00',\n", - " '2021-05-04 11:00:00', '2021-05-05 11:00:00', '2021-05-06 11:00:00',\n", - " '2021-05-07 11:00:00', '2021-05-08 11:00:00', '2021-05-09 11:00:00',\n", - " '2021-05-10 11:00:00', '2021-05-11 11:00:00', '2021-05-12 11:00:00',\n", - " '2021-05-13 11:00:00', '2021-05-14 11:00:00', '2021-05-15 11:00:00',\n", - " '2021-05-16 11:00:00', '2021-05-17 11:00:00', '2021-05-18 11:00:00',\n", - " '2021-05-19 11:00:00', '2021-05-20 11:00:00', '2021-05-21 11:00:00',\n", - " '2021-05-22 11:00:00', '2021-05-23 11:00:00', '2021-05-24 11:00:00',\n", - " '2021-05-25 11:00:00', '2021-05-26 11:00:00', '2021-05-27 11:00:00',\n", - " '2021-05-28 11:00:00', '2021-05-29 11:00:00', '2021-05-30 11:00:00'],\n", - " dtype='object'),\n", - " 'count': 30,\n", - " 'skyfile': 'skies\\\\1axis_-25.0.rad',\n", - " 'radfile': 'objects\\\\1axis-25.0__C_1.59634_rtr_10.09100_tilt_25.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 25.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-25.0__C_1.59634_rtr_10.09100_tilt_25.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 25.0, 'gcr': 0.33, 'clearance_height': 1.5963405942017352, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-25.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-25.0.oct', 'name': '1axis_-25.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.3979, 21.09609, 20.79429, 20.49249, 20.19069, 19.88889, 19.58709, 19.28529, 18.98349], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.756105, 1.896837, 2.037569, 2.178301, 2.319032, 2.459764, 2.600496, 2.741228, 2.88196], 'rearZ': [1.736166, 1.876898, 2.01763, 2.158362, 2.299094, 2.439826, 2.580557, 2.721289, 2.862021], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [20530.493333333336, 20551.54333333333, 20572.313333333335, 20751.946666666667, 10.276498666666667, 21006.033333333336, 21029.850000000002, 20569.26, 20576.173333333336], 'Wm2Back': [2808.692333333334, 2561.448, 2358.377, 1852.8793333333333, 39.780319999999996, 2096.947666666667, 2507.895666666667, 2707.3313333333335, 2859.491666666667], 'Back/FrontRatio': [0.13680587947525147, 0.12463530518460794, 0.1146383903039397, 0.08928700877120883, 3.8706227351817377, 0.09982596588158167, 0.1192540863302677, 0.13162025282937165, 0.13897100696869094], 'backRatio': [0.13680587947525147, 0.12463530518460794, 0.1146383903039397, 0.08928700877120883, 3.8706227351817377, 0.09982596588158167, 0.1192540863302677, 0.13162025282937165, 0.13897100696869094], 'rearX': [21.3886, 21.0868, 20.785, 20.4832, 20.1814, 19.8796, 19.57779, 19.27599, 18.97419], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [20530.493333333336,\n", - " 20551.54333333333,\n", - " 20572.313333333335,\n", - " 20751.946666666667,\n", - " 10.276498666666667,\n", - " 21006.033333333336,\n", - " 21029.850000000002,\n", - " 20569.26,\n", - " 20576.173333333336],\n", - " 'Wm2Back': [2808.692333333334,\n", - " 2561.448,\n", - " 2358.377,\n", - " 1852.8793333333333,\n", - " 39.780319999999996,\n", - " 2096.947666666667,\n", - " 2507.895666666667,\n", - " 2707.3313333333335,\n", - " 2859.491666666667],\n", - " 'backRatio': [0.13680587947525147,\n", - " 0.12463530518460794,\n", - " 0.1146383903039397,\n", - " 0.08928700877120883,\n", - " 3.8706227351817377,\n", - " 0.09982596588158167,\n", - " 0.1192540863302677,\n", - " 0.13162025282937165,\n", - " 0.13897100696869094]}]},\n", - " 5.0: {'csvfile': 'EPWs\\\\1axis_5.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -5.0,\n", - " 'datetime': Index(['2021-05-01 13:00:00', '2021-05-02 13:00:00', '2021-05-03 13:00:00',\n", - " '2021-05-04 13:00:00', '2021-05-05 13:00:00', '2021-05-06 13:00:00',\n", - " '2021-05-07 13:00:00', '2021-05-08 13:00:00', '2021-05-09 13:00:00',\n", - " '2021-05-10 13:00:00', '2021-05-11 13:00:00', '2021-05-12 13:00:00',\n", - " '2021-05-13 13:00:00', '2021-05-14 13:00:00', '2021-05-15 13:00:00',\n", - " '2021-05-16 13:00:00', '2021-05-17 13:00:00', '2021-05-18 13:00:00',\n", - " '2021-05-19 13:00:00', '2021-05-20 13:00:00', '2021-05-21 13:00:00',\n", - " '2021-05-22 13:00:00', '2021-05-23 13:00:00', '2021-05-24 13:00:00',\n", - " '2021-05-25 13:00:00', '2021-05-26 13:00:00', '2021-05-27 13:00:00',\n", - " '2021-05-28 13:00:00', '2021-05-29 13:00:00', '2021-05-30 13:00:00'],\n", - " dtype='object'),\n", - " 'count': 30,\n", - " 'skyfile': 'skies\\\\1axis_5.0.rad',\n", - " 'radfile': 'objects\\\\1axis5.0__C_2.15489_rtr_10.09100_tilt_-5.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -5.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis5.0__C_2.15489_rtr_10.09100_tilt_-5.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -5.0, 'gcr': 0.33, 'clearance_height': 2.154885688325149, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_5.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_5.0.oct', 'name': '1axis_5.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.50692, 21.17519, 20.84345, 20.51172, 20.17999, 19.84826, 19.51652, 19.18479, 18.85306], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [2.437012, 2.407989, 2.378966, 2.349943, 2.32092, 2.291897, 2.262874, 2.233852, 2.204829], 'rearZ': [2.415095, 2.386072, 2.35705, 2.328027, 2.299004, 2.269981, 2.240958, 2.211935, 2.182912], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [21480.373333333333, 21481.166666666668, 21481.66, 21482.149999999998, 4.8043173333333336, 21483.13333333333, 21483.63, 21484.12, 21168.29666666667], 'Wm2Back': [2829.3816666666667, 2655.5813333333335, 2473.2309999999998, 1798.7023333333334, 47.43945666666667, 1876.689, 2665.655666666666, 2889.7063333333335, 3137.7746666666667], 'Back/FrontRatio': [0.13171938359919644, 0.12362369562685008, 0.11513220509345157, 0.08373008519181034, 9.87228384223255, 0.08735638714915638, 0.1240784514808817, 0.1345042849709017, 0.14822990096211955], 'backRatio': [0.13171938359919644, 0.12362369562685008, 0.11513220509345157, 0.08373008519181034, 9.87228384223255, 0.08735638714915638, 0.1240784514808817, 0.1345042849709017, 0.14822990096211955], 'rearX': [21.50884, 21.1771, 20.84537, 20.51364, 20.18191, 19.85017, 19.51844, 19.18671, 18.85497], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [21480.373333333333,\n", - " 21481.166666666668,\n", - " 21481.66,\n", - " 21482.149999999998,\n", - " 4.8043173333333336,\n", - " 21483.13333333333,\n", - " 21483.63,\n", - " 21484.12,\n", - " 21168.29666666667],\n", - " 'Wm2Back': [2829.3816666666667,\n", - " 2655.5813333333335,\n", - " 2473.2309999999998,\n", - " 1798.7023333333334,\n", - " 47.43945666666667,\n", - " 1876.689,\n", - " 2665.655666666666,\n", - " 2889.7063333333335,\n", - " 3137.7746666666667],\n", - " 'backRatio': [0.13171938359919644,\n", - " 0.12362369562685008,\n", - " 0.11513220509345157,\n", - " 0.08373008519181034,\n", - " 9.87228384223255,\n", - " 0.08735638714915638,\n", - " 0.1240784514808817,\n", - " 0.1345042849709017,\n", - " 0.14822990096211955]}]},\n", - " 20.0: {'csvfile': 'EPWs\\\\1axis_20.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -20.0,\n", - " 'datetime': Index(['2021-05-01 14:00:00', '2021-05-02 14:00:00', '2021-05-03 14:00:00',\n", - " '2021-05-04 14:00:00', '2021-05-05 14:00:00', '2021-05-06 14:00:00',\n", - " '2021-05-07 14:00:00', '2021-05-08 14:00:00', '2021-05-09 14:00:00',\n", - " '2021-05-10 14:00:00', '2021-05-11 14:00:00', '2021-05-12 14:00:00',\n", - " '2021-05-13 14:00:00', '2021-05-14 14:00:00', '2021-05-15 14:00:00',\n", - " '2021-05-16 14:00:00', '2021-05-17 14:00:00', '2021-05-18 14:00:00',\n", - " '2021-05-19 14:00:00', '2021-05-20 14:00:00', '2021-05-21 14:00:00',\n", - " '2021-05-22 14:00:00', '2021-05-22 19:00:00', '2021-05-23 14:00:00',\n", - " '2021-05-23 19:00:00', '2021-05-24 14:00:00', '2021-05-24 19:00:00',\n", - " '2021-05-25 14:00:00', '2021-05-25 19:00:00', '2021-05-26 14:00:00',\n", - " '2021-05-26 19:00:00', '2021-05-27 14:00:00', '2021-05-27 19:00:00',\n", - " '2021-05-28 14:00:00', '2021-05-28 19:00:00', '2021-05-29 14:00:00',\n", - " '2021-05-29 19:00:00', '2021-05-30 14:00:00', '2021-05-30 19:00:00'],\n", - " dtype='object'),\n", - " 'count': 39,\n", - " 'skyfile': 'skies\\\\1axis_20.0.rad',\n", - " 'radfile': 'objects\\\\1axis20.0__C_1.73054_rtr_10.09100_tilt_-20.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -20.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis20.0__C_1.73054_rtr_10.09100_tilt_-20.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -20.0, 'gcr': 0.33, 'clearance_height': 1.7305364613627614, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_20.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_20.0.oct', 'name': '1axis_20.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.42631, 21.11339, 20.80047, 20.48755, 20.17464, 19.86172, 19.5488, 19.23588, 18.92297], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [2.775304, 2.661412, 2.547519, 2.433626, 2.319734, 2.205841, 2.091948, 1.978055, 1.864163], 'rearZ': [2.754631, 2.640738, 2.526846, 2.412953, 2.29906, 2.185168, 2.071275, 1.957382, 1.843489], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [23098.753333333338, 23089.38333333333, 23079.843333333334, 23070.306666666667, 10.213618666666667, 22728.41, 22719.053333333333, 21393.32, 21358.75], 'Wm2Back': [2722.1833333333334, 2594.1073333333334, 2440.3963333333336, 1882.118333333333, 51.19131333333333, 1876.9663333333335, 2623.6453333333334, 2861.109, 3118.1929999999998], 'Back/FrontRatio': [0.1178497893890757, 0.11235064980006036, 0.10573712275038019, 0.08158184799818374, 5.01157360875211, 0.082582382610616, 0.11548215409141957, 0.13373842237958286, 0.1459913550188398], 'backRatio': [0.1178497893890757, 0.11235064980006036, 0.10573712275038019, 0.08158184799818374, 5.01157360875211, 0.082582382610616, 0.11548215409141957, 0.13373842237958286, 0.1459913550188398], 'rearX': [21.43383, 21.12091, 20.808, 20.49508, 20.18216, 19.86924, 19.55632, 19.24341, 18.93049], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [23098.753333333338,\n", - " 23089.38333333333,\n", - " 23079.843333333334,\n", - " 23070.306666666667,\n", - " 10.213618666666667,\n", - " 22728.41,\n", - " 22719.053333333333,\n", - " 21393.32,\n", - " 21358.75],\n", - " 'Wm2Back': [2722.1833333333334,\n", - " 2594.1073333333334,\n", - " 2440.3963333333336,\n", - " 1882.118333333333,\n", - " 51.19131333333333,\n", - " 1876.9663333333335,\n", - " 2623.6453333333334,\n", - " 2861.109,\n", - " 3118.1929999999998],\n", - " 'backRatio': [0.1178497893890757,\n", - " 0.11235064980006036,\n", - " 0.10573712275038019,\n", - " 0.08158184799818374,\n", - " 5.01157360875211,\n", - " 0.082582382610616,\n", - " 0.11548215409141957,\n", - " 0.13373842237958286,\n", - " 0.1459913550188398]}]},\n", - " 35.0: {'csvfile': 'EPWs\\\\1axis_35.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -35.0,\n", - " 'datetime': Index(['2021-05-01 15:00:00', '2021-05-02 15:00:00', '2021-05-03 15:00:00',\n", - " '2021-05-04 15:00:00', '2021-05-05 15:00:00', '2021-05-06 15:00:00',\n", - " '2021-05-07 15:00:00', '2021-05-08 15:00:00', '2021-05-09 15:00:00',\n", - " '2021-05-10 15:00:00', '2021-05-11 15:00:00', '2021-05-12 15:00:00',\n", - " '2021-05-13 15:00:00', '2021-05-14 15:00:00', '2021-05-15 15:00:00',\n", - " '2021-05-16 15:00:00', '2021-05-17 15:00:00', '2021-05-18 15:00:00',\n", - " '2021-05-19 15:00:00', '2021-05-20 15:00:00', '2021-05-21 15:00:00',\n", - " '2021-05-22 15:00:00', '2021-05-23 15:00:00', '2021-05-24 15:00:00',\n", - " '2021-05-25 15:00:00', '2021-05-26 15:00:00', '2021-05-27 15:00:00',\n", - " '2021-05-28 15:00:00', '2021-05-29 15:00:00', '2021-05-30 15:00:00'],\n", - " dtype='object'),\n", - " 'count': 30,\n", - " 'skyfile': 'skies\\\\1axis_35.0.rad',\n", - " 'radfile': 'objects\\\\1axis35.0__C_1.34500_rtr_10.09100_tilt_-35.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -35.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis35.0__C_1.34500_rtr_10.09100_tilt_-35.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -35.0, 'gcr': 0.33, 'clearance_height': 1.3449952334755082, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_35.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_35.0.oct', 'name': '1axis_35.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.26088, 20.98811, 20.71533, 20.44255, 20.16977, 19.897, 19.62422, 19.35144, 19.07866], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [3.081206, 2.890205, 2.699204, 2.508203, 2.317202, 2.126201, 1.9352, 1.744199, 1.553198], 'rearZ': [3.063185, 2.872184, 2.681183, 2.490182, 2.299181, 2.10818, 1.917179, 1.726178, 1.535177], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [20707.286666666667, 20683.843333333334, 20660.23, 20806.976666666666, 20.05142, 21190.966666666667, 21146.983333333334, 20707.806666666667, 20644.446666666667], 'Wm2Back': [2233.467666666667, 2163.2566666666667, 2075.302, 1797.946, 44.96373, 1713.1133333333335, 2207.521, 2437.7016666666664, 2648.7586666666666], 'Back/FrontRatio': [0.10785901575424421, 0.10458677950792931, 0.10044911888932898, 0.08641072378716287, 2.242309407044137, 0.08084167557992436, 0.10438939969896102, 0.11771896406931728, 0.12830368288048005], 'backRatio': [0.10785901575424421, 0.10458677950792931, 0.10044911888932898, 0.08641072378716287, 2.242309407044137, 0.08084167557992436, 0.10438939969896102, 0.11771896406931728, 0.12830368288048005], 'rearX': [21.2735, 21.00072, 20.72795, 20.45517, 20.18239, 19.90961, 19.63684, 19.36406, 19.09128], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [20707.286666666667,\n", - " 20683.843333333334,\n", - " 20660.23,\n", - " 20806.976666666666,\n", - " 20.05142,\n", - " 21190.966666666667,\n", - " 21146.983333333334,\n", - " 20707.806666666667,\n", - " 20644.446666666667],\n", - " 'Wm2Back': [2233.467666666667,\n", - " 2163.2566666666667,\n", - " 2075.302,\n", - " 1797.946,\n", - " 44.96373,\n", - " 1713.1133333333335,\n", - " 2207.521,\n", - " 2437.7016666666664,\n", - " 2648.7586666666666],\n", - " 'backRatio': [0.10785901575424421,\n", - " 0.10458677950792931,\n", - " 0.10044911888932898,\n", - " 0.08641072378716287,\n", - " 2.242309407044137,\n", - " 0.08084167557992436,\n", - " 0.10438939969896102,\n", - " 0.11771896406931728,\n", - " 0.12830368288048005]}]},\n", - " 50.0: {'csvfile': 'EPWs\\\\1axis_50.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -50.0,\n", - " 'datetime': Index(['2021-05-01 16:00:00', '2021-05-01 17:00:00', '2021-05-02 16:00:00',\n", - " '2021-05-02 17:00:00', '2021-05-03 16:00:00', '2021-05-03 17:00:00',\n", - " '2021-05-04 16:00:00', '2021-05-04 17:00:00', '2021-05-05 16:00:00',\n", - " '2021-05-05 17:00:00', '2021-05-06 16:00:00', '2021-05-06 17:00:00',\n", - " '2021-05-07 16:00:00', '2021-05-07 17:00:00', '2021-05-07 18:00:00',\n", - " '2021-05-08 16:00:00', '2021-05-08 17:00:00', '2021-05-08 18:00:00',\n", - " '2021-05-09 16:00:00', '2021-05-09 17:00:00', '2021-05-09 18:00:00',\n", - " '2021-05-10 16:00:00', '2021-05-10 17:00:00', '2021-05-10 18:00:00',\n", - " '2021-05-11 16:00:00', '2021-05-11 17:00:00', '2021-05-11 18:00:00',\n", - " '2021-05-12 16:00:00', '2021-05-12 17:00:00', '2021-05-12 18:00:00',\n", - " '2021-05-13 16:00:00', '2021-05-13 17:00:00', '2021-05-13 18:00:00',\n", - " '2021-05-14 16:00:00', '2021-05-14 17:00:00', '2021-05-14 18:00:00',\n", - " '2021-05-15 16:00:00', '2021-05-15 17:00:00', '2021-05-15 18:00:00',\n", - " '2021-05-16 16:00:00', '2021-05-16 17:00:00', '2021-05-16 18:00:00',\n", - " '2021-05-17 17:00:00', '2021-05-17 18:00:00', '2021-05-18 17:00:00',\n", - " '2021-05-18 18:00:00', '2021-05-19 17:00:00', '2021-05-19 18:00:00',\n", - " '2021-05-20 17:00:00', '2021-05-20 18:00:00', '2021-05-21 17:00:00',\n", - " '2021-05-21 18:00:00', '2021-05-22 17:00:00', '2021-05-22 18:00:00',\n", - " '2021-05-23 17:00:00', '2021-05-23 18:00:00', '2021-05-24 17:00:00',\n", - " '2021-05-24 18:00:00', '2021-05-25 17:00:00', '2021-05-25 18:00:00',\n", - " '2021-05-26 17:00:00', '2021-05-26 18:00:00', '2021-05-27 17:00:00',\n", - " '2021-05-27 18:00:00', '2021-05-28 17:00:00', '2021-05-28 18:00:00',\n", - " '2021-05-29 17:00:00', '2021-05-29 18:00:00', '2021-05-30 17:00:00',\n", - " '2021-05-30 18:00:00'],\n", - " dtype='object'),\n", - " 'count': 70,\n", - " 'skyfile': 'skies\\\\1axis_50.0.rad',\n", - " 'radfile': 'objects\\\\1axis50.0__C_1.02454_rtr_10.09100_tilt_-50.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -50.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis50.0__C_1.02454_rtr_10.09100_tilt_-50.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -50.0, 'gcr': 0.33, 'clearance_height': 1.0245360022069014, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_50.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_50.0.oct', 'name': '1axis_50.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.02192, 20.80788, 20.59383, 20.37978, 20.16573, 19.95168, 19.73763, 19.52359, 19.30954], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [3.33387, 3.078777, 2.823684, 2.568591, 2.313499, 2.058406, 1.803313, 1.54822, 1.293127], 'rearZ': [3.319728, 3.064636, 2.809543, 2.55445, 2.299357, 2.044264, 1.789172, 1.534079, 1.278986], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [36566.950000000004, 36372.939999999995, 37429.18, 37202.29666666667, 53.727106666666664, 34958.1, 34489.01666666666, 35242.47, 34177.37333333333], 'Wm2Back': [3322.5229999999997, 3243.905666666667, 3202.3306666666667, 2900.2043333333336, 62.269106666666666, 2326.8373333333334, 3175.1873333333333, 3480.3963333333336, 3671.172666666667], 'Back/FrontRatio': [0.09086136276442626, 0.08918458550455592, 0.08555705952173163, 0.07795766700538828, 1.158967075705627, 0.0665607474883528, 0.09206372196567734, 0.09875574085975225, 0.10741529266881564], 'backRatio': [0.09086136276442626, 0.08918458550455592, 0.08555705952173163, 0.07795766700538828, 1.158967075705627, 0.0665607474883528, 0.09206372196567734, 0.09875574085975225, 0.10741529266881564], 'rearX': [21.03878, 20.82473, 20.61068, 20.39663, 20.18258, 19.96854, 19.75449, 19.54044, 19.32639], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [36566.950000000004,\n", - " 36372.939999999995,\n", - " 37429.18,\n", - " 37202.29666666667,\n", - " 53.727106666666664,\n", - " 34958.1,\n", - " 34489.01666666666,\n", - " 35242.47,\n", - " 34177.37333333333],\n", - " 'Wm2Back': [3322.5229999999997,\n", - " 3243.905666666667,\n", - " 3202.3306666666667,\n", - " 2900.2043333333336,\n", - " 62.269106666666666,\n", - " 2326.8373333333334,\n", - " 3175.1873333333333,\n", - " 3480.3963333333336,\n", - " 3671.172666666667],\n", - " 'backRatio': [0.09086136276442626,\n", - " 0.08918458550455592,\n", - " 0.08555705952173163,\n", - " 0.07795766700538828,\n", - " 1.158967075705627,\n", - " 0.0665607474883528,\n", - " 0.09206372196567734,\n", - " 0.09875574085975225,\n", - " 0.10741529266881564]}]},\n", - " 45.0: {'csvfile': 'EPWs\\\\1axis_45.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -45.0,\n", - " 'datetime': Index(['2021-05-01 18:00:00', '2021-05-02 18:00:00', '2021-05-03 18:00:00',\n", - " '2021-05-04 18:00:00', '2021-05-05 18:00:00', '2021-05-06 18:00:00',\n", - " '2021-05-17 16:00:00', '2021-05-18 16:00:00', '2021-05-19 16:00:00',\n", - " '2021-05-20 16:00:00', '2021-05-21 16:00:00', '2021-05-22 16:00:00',\n", - " '2021-05-23 16:00:00', '2021-05-24 16:00:00', '2021-05-25 16:00:00',\n", - " '2021-05-26 16:00:00', '2021-05-27 16:00:00', '2021-05-28 16:00:00',\n", - " '2021-05-29 16:00:00', '2021-05-30 16:00:00'],\n", - " dtype='object'),\n", - " 'count': 20,\n", - " 'skyfile': 'skies\\\\1axis_45.0.rad',\n", - " 'radfile': 'objects\\\\1axis45.0__C_1.12267_rtr_10.09100_tilt_-45.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -45.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis45.0__C_1.12267_rtr_10.09100_tilt_-45.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -45.0, 'gcr': 0.33, 'clearance_height': 1.1226672093243981, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_45.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_45.0.oct', 'name': '1axis_45.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.10884, 20.87337, 20.6379, 20.40244, 20.16697, 19.9315, 19.69604, 19.46057, 19.2251], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [3.256715, 3.021249, 2.785782, 2.550316, 2.314849, 2.079383, 1.843916, 1.60845, 1.372983], 'rearZ': [3.241159, 3.005693, 2.770226, 2.534759, 2.299293, 2.063826, 1.82836, 1.592893, 1.357427], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [11095.576666666666, 11059.476666666667, 10807.62, 10762.953333333333, 7.127942333333333, 10729.216666666667, 10668.903333333334, 10544.753333333334, 10418.96], 'Wm2Back': [970.4978666666666, 946.2393333333333, 913.8964666666667, 817.5165333333334, 12.202736666666667, 678.0835, 961.5448, 1033.1653333333334, 1100.812], 'Back/FrontRatio': [0.08746708786350406, 0.08555913415199566, 0.08456037333902314, 0.07595651788667815, 1.7117176849095006, 0.06319971512057744, 0.09012591827220745, 0.09797908046727688, 0.1056546809225987], 'backRatio': [0.08746708786350406, 0.08555913415199566, 0.08456037333902314, 0.07595651788667815, 1.7117176849095006, 0.06319971512057744, 0.09012591827220745, 0.09797908046727688, 0.1056546809225987], 'rearX': [21.12439, 20.88892, 20.65346, 20.41799, 20.18253, 19.94706, 19.71159, 19.47613, 19.24066], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [11095.576666666666,\n", - " 11059.476666666667,\n", - " 10807.62,\n", - " 10762.953333333333,\n", - " 7.127942333333333,\n", - " 10729.216666666667,\n", - " 10668.903333333334,\n", - " 10544.753333333334,\n", - " 10418.96],\n", - " 'Wm2Back': [970.4978666666666,\n", - " 946.2393333333333,\n", - " 913.8964666666667,\n", - " 817.5165333333334,\n", - " 12.202736666666667,\n", - " 678.0835,\n", - " 961.5448,\n", - " 1033.1653333333334,\n", - " 1100.812],\n", - " 'backRatio': [0.08746708786350406,\n", - " 0.08555913415199566,\n", - " 0.08456037333902314,\n", - " 0.07595651788667815,\n", - " 1.7117176849095006,\n", - " 0.06319971512057744,\n", - " 0.09012591827220745,\n", - " 0.09797908046727688,\n", - " 0.1056546809225987]}]},\n", - " 10.0: {'csvfile': 'EPWs\\\\1axis_10.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -10.0,\n", - " 'datetime': Index(['2021-05-02 19:00:00', '2021-05-03 19:00:00', '2021-05-04 19:00:00',\n", - " '2021-05-05 19:00:00', '2021-05-06 19:00:00', '2021-05-07 19:00:00'],\n", - " dtype='object'),\n", - " 'count': 6,\n", - " 'skyfile': 'skies\\\\1axis_10.0.rad',\n", - " 'radfile': 'objects\\\\1axis10.0__C_2.01088_rtr_10.09100_tilt_-10.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -10.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis10.0__C_2.01088_rtr_10.09100_tilt_-10.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -10.0, 'gcr': 0.33, 'clearance_height': 2.010875784184561, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_10.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_10.0.oct', 'name': '1axis_10.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.48994, 21.16199, 20.83405, 20.50611, 20.17817, 19.85023, 19.52229, 19.19435, 18.86641], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [2.55198, 2.494155, 2.436331, 2.378506, 2.320681, 2.262856, 2.205031, 2.147206, 2.089382], 'rearZ': [2.530315, 2.47249, 2.414665, 2.35684, 2.299015, 2.24119, 2.183366, 2.125541, 2.067716], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [562.7256333333333, 564.7414333333332, 566.7461333333332, 568.9970000000001, 0.5665011, 539.4918333333334, 538.8447333333332, 485.12533333333334, 485.4173333333333], 'Wm2Back': [33.79249333333333, 33.07703, 33.0786, 29.830923333333335, 0.3724578, 27.908503333333332, 32.60285666666667, 32.79472, 32.862653333333334], 'Back/FrontRatio': [0.060051348792862655, 0.058570116300215455, 0.05836571206888624, 0.052427114565136136, 0.6563120318180882, 0.05173099920697123, 0.060504991781197504, 0.0676003707625299, 0.06769965425011416], 'backRatio': [0.060051348792862655, 0.058570116300215455, 0.05836571206888624, 0.052427114565136136, 0.6563120318180882, 0.05173099920697123, 0.060504991781197504, 0.0676003707625299, 0.06769965425011416], 'rearX': [21.49376, 21.16581, 20.83787, 20.50993, 20.18199, 19.85405, 19.52611, 19.19817, 18.87023], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [562.7256333333333,\n", - " 564.7414333333332,\n", - " 566.7461333333332,\n", - " 568.9970000000001,\n", - " 0.5665011,\n", - " 539.4918333333334,\n", - " 538.8447333333332,\n", - " 485.12533333333334,\n", - " 485.4173333333333],\n", - " 'Wm2Back': [33.79249333333333,\n", - " 33.07703,\n", - " 33.0786,\n", - " 29.830923333333335,\n", - " 0.3724578,\n", - " 27.908503333333332,\n", - " 32.60285666666667,\n", - " 32.79472,\n", - " 32.862653333333334],\n", - " 'backRatio': [0.060051348792862655,\n", - " 0.058570116300215455,\n", - " 0.05836571206888624,\n", - " 0.052427114565136136,\n", - " 0.6563120318180882,\n", - " 0.05173099920697123,\n", - " 0.060504991781197504,\n", - " 0.0676003707625299,\n", - " 0.06769965425011416]}]},\n", - " 15.0: {'csvfile': 'EPWs\\\\1axis_15.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': -15.0,\n", - " 'datetime': Index(['2021-05-08 19:00:00', '2021-05-09 19:00:00', '2021-05-10 19:00:00',\n", - " '2021-05-11 19:00:00', '2021-05-12 19:00:00', '2021-05-13 19:00:00',\n", - " '2021-05-14 19:00:00', '2021-05-15 19:00:00', '2021-05-16 19:00:00',\n", - " '2021-05-17 19:00:00', '2021-05-18 19:00:00', '2021-05-19 19:00:00',\n", - " '2021-05-20 19:00:00', '2021-05-21 19:00:00'],\n", - " dtype='object'),\n", - " 'count': 14,\n", - " 'skyfile': 'skies\\\\1axis_15.0.rad',\n", - " 'radfile': 'objects\\\\1axis15.0__C_1.86907_rtr_10.09100_tilt_-15.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx -15.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis15.0__C_1.86907_rtr_10.09100_tilt_-15.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': -15.0, 'gcr': 0.33, 'clearance_height': 1.869066289904303, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_15.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_15.0.oct', 'name': '1axis_15.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.463, 21.14134, 20.81969, 20.49804, 20.17638, 19.85473, 19.53308, 19.21142, 18.88977], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [2.665031, 2.578845, 2.492658, 2.406471, 2.320284, 2.234098, 2.147911, 2.061724, 1.975537], 'rearZ': [2.643781, 2.557594, 2.471408, 2.385221, 2.299034, 2.212847, 2.126661, 2.040474, 1.954287], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [1083.0416666666667, 1085.689, 959.0094333333333, 944.5213333333332, 1.1060516666666667, 908.4444333333334, 906.8478, 775.5269666666667, 773.9854], 'Wm2Back': [80.25064333333333, 79.27283666666666, 78.44835666666667, 70.97169333333333, 1.1493266666666664, 60.343469999999996, 73.75593333333333, 76.41439666666666, 79.91829], 'Back/FrontRatio': [0.07409739782489332, 0.07301608807916317, 0.08180135892160785, 0.07514030195862671, 1.0381870162639202, 0.0664249802859192, 0.08133211769518064, 0.09853209677931665, 0.10325541895826593], 'backRatio': [0.07409739782489332, 0.07301608807916317, 0.08180135892160785, 0.07514030195862671, 1.0381870162639202, 0.0664249802859192, 0.08133211769518064, 0.09853209677931665, 0.10325541895826593], 'rearX': [21.46869, 21.14704, 20.82538, 20.50373, 20.18208, 19.86042, 19.53877, 19.21712, 18.89546], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [1083.0416666666667,\n", - " 1085.689,\n", - " 959.0094333333333,\n", - " 944.5213333333332,\n", - " 1.1060516666666667,\n", - " 908.4444333333334,\n", - " 906.8478,\n", - " 775.5269666666667,\n", - " 773.9854],\n", - " 'Wm2Back': [80.25064333333333,\n", - " 79.27283666666666,\n", - " 78.44835666666667,\n", - " 70.97169333333333,\n", - " 1.1493266666666664,\n", - " 60.343469999999996,\n", - " 73.75593333333333,\n", - " 76.41439666666666,\n", - " 79.91829],\n", - " 'backRatio': [0.07409739782489332,\n", - " 0.07301608807916317,\n", - " 0.08180135892160785,\n", - " 0.07514030195862671,\n", - " 1.0381870162639202,\n", - " 0.0664249802859192,\n", - " 0.08133211769518064,\n", - " 0.09853209677931665,\n", - " 0.10325541895826593]}]},\n", - " -45.0: {'csvfile': 'EPWs\\\\1axis_-45.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 45.0,\n", - " 'datetime': Index(['2021-05-15 07:00:00', '2021-05-16 07:00:00', '2021-05-17 07:00:00',\n", - " '2021-05-18 07:00:00', '2021-05-19 07:00:00', '2021-05-20 07:00:00',\n", - " '2021-05-21 07:00:00', '2021-05-22 07:00:00'],\n", - " dtype='object'),\n", - " 'count': 8,\n", - " 'skyfile': 'skies\\\\1axis_-45.0.rad',\n", - " 'radfile': 'objects\\\\1axis-45.0__C_1.12267_rtr_10.09100_tilt_45.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 45.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-45.0__C_1.12267_rtr_10.09100_tilt_45.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 45.0, 'gcr': 0.33, 'clearance_height': 1.1226672093243981, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-45.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-45.0.oct', 'name': '1axis_-45.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.13853, 20.90307, 20.6676, 20.43213, 20.19667, 19.9612, 19.72573, 19.49027, 19.2548], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.372983, 1.60845, 1.843916, 2.079383, 2.314849, 2.550316, 2.785782, 3.021249, 3.256715], 'rearZ': [1.357427, 1.592893, 1.82836, 2.063826, 2.299293, 2.534759, 2.770226, 3.005693, 3.241159], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [1443.4093333333333, 1956.3326666666665, 2008.4436666666668, 2046.6146666666666, 2.0179886666666667, 2025.361, 2041.8626666666667, 2022.6586666666665, 2037.9873333333335], 'Wm2Back': [154.7415, 157.84713333333335, 147.35456666666667, 88.08065999999998, 2.000605666666667, 156.8592, 161.33876666666666, 163.696, 167.8751], 'Back/FrontRatio': [0.10720548164751488, 0.08068517964130524, 0.07336750128706558, 0.04303722552044049, 0.9908949464137657, 0.07744748839960461, 0.07901544520357301, 0.08093106452741515, 0.0823729445621622], 'backRatio': [0.10720548164751488, 0.08068517964130524, 0.07336750128706558, 0.04303722552044049, 0.9908949464137657, 0.07744748839960461, 0.07901544520357301, 0.08093106452741515, 0.0823729445621622], 'rearX': [21.12298, 20.88751, 20.65204, 20.41658, 20.18111, 19.94564, 19.71018, 19.47471, 19.23924], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [1443.4093333333333,\n", - " 1956.3326666666665,\n", - " 2008.4436666666668,\n", - " 2046.6146666666666,\n", - " 2.0179886666666667,\n", - " 2025.361,\n", - " 2041.8626666666667,\n", - " 2022.6586666666665,\n", - " 2037.9873333333335],\n", - " 'Wm2Back': [154.7415,\n", - " 157.84713333333335,\n", - " 147.35456666666667,\n", - " 88.08065999999998,\n", - " 2.000605666666667,\n", - " 156.8592,\n", - " 161.33876666666666,\n", - " 163.696,\n", - " 167.8751],\n", - " 'backRatio': [0.10720548164751488,\n", - " 0.08068517964130524,\n", - " 0.07336750128706558,\n", - " 0.04303722552044049,\n", - " 0.9908949464137657,\n", - " 0.07744748839960461,\n", - " 0.07901544520357301,\n", - " 0.08093106452741515,\n", - " 0.0823729445621622]}]},\n", - " -15.0: {'csvfile': 'EPWs\\\\1axis_-15.0.csv',\n", - " 'surf_azm': 90.0,\n", - " 'surf_tilt': 15.0,\n", - " 'datetime': Index(['2021-05-23 06:00:00', '2021-05-24 06:00:00', '2021-05-25 06:00:00',\n", - " '2021-05-26 06:00:00', '2021-05-27 06:00:00', '2021-05-28 06:00:00',\n", - " '2021-05-29 06:00:00', '2021-05-30 06:00:00', '2021-05-31 06:00:00'],\n", - " dtype='object'),\n", - " 'count': 9,\n", - " 'skyfile': 'skies\\\\1axis_-15.0.rad',\n", - " 'radfile': 'objects\\\\1axis-15.0__C_1.86907_rtr_10.09100_tilt_15.00000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.0, 'y': 1.59, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.05, 'sceney': 3.33, 'scenez': 0.0, 'numpanels': 2, 'bifi': 0.9, 'text': '! genbox black test-module 1.0 1.59 0.02 | xform -t -0.5 -1.665 0 -a 2 -t 0 1.74 0\\n!xform -rz 0 C:\\\\Users\\\\sayala\\\\Documents\\\\GitHub\\\\bifacial_radiance\\\\tests\\\\customTT.rad | xform -rz 90 -t 0.5 0 -0.15', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0, 'xgap': 0.05, 'ygap': 0.15, 'zgap': 0.0}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.32999702705381034, 'text': '!xform -rx 15.0 -t 0 0 2.3 -a 20 -t 1.05 0 0 -a 7 -t 0 10.091 0 -i 1 -t -9.450000000000001 -30.272999999999996 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis-15.0__C_1.86907_rtr_10.09100_tilt_15.00000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 15.0, 'gcr': 0.33, 'clearance_height': 1.869066289904303, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", - " 'octfile': '1axis_-15.0.oct',\n", - " 'Results': [{'rowWanted': 2,\n", - " 'modWanted': 9,\n", - " 'AnalysisObj': {'octfile': '1axis_-15.0.oct', 'name': '1axis_-15.0', 'hpc': False, 'modWanted': 9, 'rowWanted': 2, 'x': [21.47387, 21.15221, 20.83056, 20.50891, 20.18725, 19.8656, 19.54395, 19.22229, 18.90064], 'y': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05], 'z': [1.975537, 2.061724, 2.147911, 2.234098, 2.320284, 2.406471, 2.492658, 2.578845, 2.665031], 'rearZ': [1.954287, 2.040474, 2.126661, 2.212847, 2.299034, 2.385221, 2.471408, 2.557594, 2.643781], 'mattype': ['a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.a0.test-module.6457', 'a8.1.triangle_3', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457', 'a8.1.a1.test-module.6457'], 'rearMat': ['a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.a0.test-module.2310', 'a8.1.triangle_2', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310', 'a8.1.a1.test-module.2310'], 'Wm2Front': [264.48873333333336, 266.5425, 262.04519999999997, 262.3268666666666, 0.5987686666666666, 278.683, 281.45250000000004, 282.1493666666667, 281.71840000000003], 'Wm2Back': [37.9955, 36.95895333333333, 35.468806666666666, 28.992590000000003, 0.44985729999999996, 34.19477333333334, 37.31231, 39.20162333333334, 39.95183666666667], 'Back/FrontRatio': [0.14365585960992563, 0.1386601186422979, 0.135353257046531, 0.11052043524159848, 0.750051353132819, 0.12270088463397016, 0.13257006930096799, 0.1389387644484129, 0.14181428991637307], 'backRatio': [0.14365585960992563, 0.1386601186422979, 0.135353257046531, 0.11052043524159848, 0.750051353132819, 0.12270088463397016, 0.13257006930096799, 0.1389387644484129, 0.14181428991637307], 'rearX': [21.46817, 21.14652, 20.82487, 20.50321, 20.18156, 19.85991, 19.53825, 19.2166, 18.89495], 'rearY': [-1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05, -1.05]},\n", - " 'Wm2Front': [264.48873333333336,\n", - " 266.5425,\n", - " 262.04519999999997,\n", - " 262.3268666666666,\n", - " 0.5987686666666666,\n", - " 278.683,\n", - " 281.45250000000004,\n", - " 282.1493666666667,\n", - " 281.71840000000003],\n", - " 'Wm2Back': [37.9955,\n", - " 36.95895333333333,\n", - " 35.468806666666666,\n", - " 28.992590000000003,\n", - " 0.44985729999999996,\n", - " 34.19477333333334,\n", - " 37.31231,\n", - " 39.20162333333334,\n", - " 39.95183666666667],\n", - " 'backRatio': [0.14365585960992563,\n", - " 0.1386601186422979,\n", - " 0.135353257046531,\n", - " 0.11052043524159848,\n", - " 0.750051353132819,\n", - " 0.12270088463397016,\n", - " 0.13257006930096799,\n", - " 0.1389387644484129,\n", - " 0.14181428991637307]}]}}" + " row module BGG Gfront_mean Grear_mean \\\n", + "0 2 9 9.732236 210385.187133 20475.182191 \n", + "\n", + " POA_eff \\\n", + "0 [234479.62299000003, 233179.63291333336, 23242... \n", + "\n", + " Wm2Back \n", + "0 [24094.435856666663, 22794.445780000002, 22040... " ] }, - "execution_count": 24, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.py b/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.py index c9a1431e..155786b6 100644 --- a/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.py +++ b/docs/tutorials/2 - Single Axis Tracking Yearly Simulation.py @@ -213,21 +213,21 @@ # Let's look at the results with more detail. The analysis1axis routine created individual result .csv files for each angle. To get a single cumulative result .csv where the irradiance is added by sensor, we need to run `calculateResults()`. This function will save a file named "results/Cumulative_Results.csv" and add a dataframe called "CompiledResults" to the radiance object. # -# In[11]: +# In[12]: -trackerdict = demo.calculateResults() +results = demo.calculateResults() # We can view the cumlative results in two ways. The first is acess them directly from the RadianceObject. -# In[12]: +# In[13]: demo.CompiledResults -# In[13]: +# In[14]: resultPath = os.path.join('results','Cumulative_Results.csv') @@ -237,10 +237,10 @@ # Lets take a closer look at a single result file. -# In[17]: +# In[16]: -resultPath = os.path.join('results','irr_1axis_-5.0_Row2_Module9.csv') +resultPath = os.path.join('results','irr_1axis_-5.0_Scene0_Row2_Module9.csv') results = load.read1Result(resultPath) results @@ -275,7 +275,7 @@ # # cleanResults will find materials that should not have values and set them to NaN. -# In[18]: +# In[17]: results_clean = load.cleanResult(results) @@ -288,7 +288,7 @@ # # Assuming that our module from Prism Solar has a bifaciality factor (rear to front performance) of 90%, our bifacial gain is of: -# In[19]: +# In[18]: bifacialityfactor = 0.9 @@ -300,7 +300,7 @@ # ## CONDENSED VERSION # Everything we've done so far in super short condensed version: -# In[21]: +# In[19]: import pandas as pd @@ -314,7 +314,7 @@ # pd.to_datetime('2021-06-30 20:0:0'), # June -# In[22]: +# In[20]: albedo = 0.25 @@ -347,13 +347,13 @@ demo.analysis1axis(modWanted=modWanted, rowWanted=rowWanted); -# In[23]: +# In[21]: res = demo.calculateResults(bifacialityfactor=1.0) -# In[24]: +# In[22]: res diff --git a/docs/tutorials/3 - Single Axis Tracking Hourly.ipynb b/docs/tutorials/3 - Single Axis Tracking Hourly.ipynb index c20aac5c..9f68631d 100644 --- a/docs/tutorials/3 - Single Axis Tracking Hourly.ipynb +++ b/docs/tutorials/3 - Single Axis Tracking Hourly.ipynb @@ -156,13 +156,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "path = C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_03\n", - "Making path: images\n", - "Making path: objects\n", - "Making path: results\n", - "Making path: skies\n", - "Making path: EPWs\n", - "Making path: materials\n", + "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_03\n", "Loading albedo, 1 value(s), 0.213 avg\n", "1 nonzero albedo values.\n", "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n", @@ -218,11 +212,13 @@ "\n", "Module Name: test-module\n", "Module test-module updated in module.json\n", + "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", + "\n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n", "Module was shifted by 0.078 in X to avoid sensors on air\n", - "This is a Cell-Level detailed module with Packaging Factor of 0.81 %\n", + "This is a Cell-Level detailed module with Packaging Factor of 0.81 \n", "Module test-module updated in module.json\n", "Pre-existing .rad file objects\\test-module.rad will be overwritten\n", "\n", @@ -363,7 +359,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'dhi': 200, 'ghi': 249, 'surf_azm': 90.0, 'surf_tilt': 21.2, 'theta': -21.2}\n" + "{'dhi': 200,\n", + " 'dni': 97,\n", + " 'ghi': 249,\n", + " 'surf_azm': 90.0,\n", + " 'surf_tilt': 21.2,\n", + " 'temp_air': 6.5,\n", + " 'theta': -21.2,\n", + " 'wind_speed': 3.9}\n" ] } ], @@ -436,11 +439,14 @@ "\n", "Contents of trackerdict for sample hour:\n", "{'dhi': 22,\n", + " 'dni': 13,\n", " 'ghi': 23,\n", " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_0800.rad',\n", " 'surf_azm': 90.0,\n", " 'surf_tilt': 3.74,\n", - " 'theta': -3.74}\n" + " 'temp_air': 0.2,\n", + " 'theta': -3.74,\n", + " 'wind_speed': 2.6}\n" ] } ], @@ -507,15 +513,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'clearance_height': 2.166802445305938,\n", - " 'dhi': 22,\n", + "{'dhi': 22,\n", + " 'dni': 13,\n", " 'ghi': 23,\n", - " 'radfile': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'gcr': 0.4284, 'text': '!xform -rx 3.74 -t 0 0 2.3 -a 20 -t 1.046 0 0 -a 7 -t 0 10 0 -i 1 -t -9.414 -30.0 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 3.74, 'pitch': 10, 'clearance_height': 2.166802445305938, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.4284, 'text': '!xform -rx 3.74 -t 0 0 2.3 -a 20 -t 1.046 0 0 -a 7 -t 0 10 0 -i 1 -t -9.414 -30.0 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad', 'sceneDict': {'pitch': 10, 'nMods': 20, 'nRows': 7, 'tilt': 3.74, 'clearance_height': 2.166802445305938, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}}],\n", " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_0800.rad',\n", " 'surf_azm': 90.0,\n", " 'surf_tilt': 3.74,\n", - " 'theta': -3.74}\n" + " 'temp_air': 0.2,\n", + " 'theta': -3.74,\n", + " 'wind_speed': 2.6}\n" ] } ], @@ -536,6 +543,7 @@ " 'hpc': False,\n", " 'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05},\n", " 'modulefile': 'objects\\\\test-module.rad',\n", + " 'name': 'Scene0',\n", " 'radfiles': 'objects\\\\1axis2021-01-13_1300__C_2.11102_rtr_10.00000_tilt_-5.31000_20modsx7rows_origin0,0.rad',\n", " 'sceneDict': {'axis_tilt': 0,\n", " 'azimuth': 90.0,\n", @@ -553,7 +561,7 @@ } ], "source": [ - "pprint.pprint(demo.trackerdict[trackerkeys[5]]['scene'].__dict__)" + "pprint.pprint(demo.trackerdict[trackerkeys[5]]['scenes'][0].__dict__)" ] }, { @@ -623,20 +631,21 @@ "\n", "Making 1 octfiles in root directory.\n", "Created 1axis_2021-01-13_0800.oct\n", - "Linescan in process: 1axis_2021-01-13_0800_Front\n", - "Linescan in process: 1axis_2021-01-13_0800_Back\n", - "Saved: results\\irr_1axis_2021-01-13_0800.csv\n", - "Index: 2021-01-13_0800. Wm2Front: 23.57971333333333. Wm2Back: 2.8340437777777776\n", + "Linescan in process: 1axis_2021-01-13_0800_Scene0_Row4_Module10_Front\n", + "Linescan in process: 1axis_2021-01-13_0800_Scene0_Row4_Module10_Back\n", + "Saved: results\\irr_1axis_2021-01-13_0800_Scene0_Row4_Module10.csv\n", + "Index: 2021-01-13_0800. Wm2Front: 23.57104407407407. Wm2Back: 2.8536707777777774\n", "\n", "\n", - "Hourly bifi gain: 0.12\n" + "Hourly bifi gain: 0.121\n" ] } ], "source": [ "demo.makeOct1axis(singleindex='2021-01-13_0800')\n", "results = demo.analysis1axis(singleindex='2021-01-13_0800')\n", - "print('\\n\\nHourly bifi gain: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front)))" + "temp = results['2021-01-13_0800']['AnalysisObj'][0].getResults()\n", + "print('\\n\\nHourly bifi gain: {:0.3}'.format(sum(temp['Wm2Back'][0]) / sum(temp['Wm2Front'][0])))" ] }, { @@ -657,44 +666,18 @@ "text": [ "\n", " Contents of trackerdict for sample hour after analysis1axis: \n", - "{'AnalysisObj': {'octfile': '1axis_2021-01-13_0800.oct', 'name': '1axis_2021-01-13_0800', 'hpc': False, 'x': [1.717843, 1.290356, 0.862868, 0.4353804, 0.007892705, -0.4195949, -0.8470826, -1.27457, -1.702058], 'y': [1.051876e-16, 7.90115e-17, 5.283543e-17, 2.665936e-17, 4.832888e-19, -2.569278e-17, -5.186885e-17, -7.804492e-17, -1.04221e-16], 'z': [2.308966, 2.33691, 2.364854, 2.392798, 2.420742, 2.448686, 2.47663, 2.504575, 2.532519], 'rearZ': [2.287013, 2.314957, 2.342901, 2.370845, 2.398789, 2.426733, 2.454677, 2.482621, 2.510566], 'mattype': ['a9.3.a2.2.0.cellPVmodule.6457', 'a9.3.a2.4.0.cellPVmodule.6457', 'a9.3.a2.7.0.cellPVmodule.6457', 'a9.3.a2.9.0.cellPVmodule.6457', 'a9.3.octtube1a.6457', 'a9.3.a2.2.1.cellPVmodule.6457', 'a9.3.a2.4.1.cellPVmodule.6457', 'a9.3.a2.7.1.cellPVmodule.6457', 'a9.3.a2.9.1.cellPVmodule.6457'], 'rearMat': ['a9.3.a2.2.0.cellPVmodule.2310', 'a9.3.a2.4.0.cellPVmodule.2310', 'a9.3.a2.7.0.cellPVmodule.2310', 'a9.3.a2.9.0.cellPVmodule.2310', 'sky', 'a9.3.a2.2.1.cellPVmodule.2310', 'a9.3.a2.4.1.cellPVmodule.2310', 'a9.3.a2.7.1.cellPVmodule.2310', 'a9.3.a2.9.1.cellPVmodule.2310'], 'Wm2Front': [23.725776666666665, 23.73493666666667, 23.743613333333332, 23.761876666666666, 22.463893333333335, 23.74101333333333, 23.68344, 23.68229, 23.680580000000003], 'Wm2Back': [2.9397776666666666, 2.89124, 2.837168333333333, 2.7395723333333333, 2.990579, 2.6973613333333333, 2.7764156666666664, 2.804555, 2.829724666666667], 'Back/FrontRatio': [0.12390126598176772, 0.12180854880946343, 0.11948681974746833, 0.11528790776313137, 0.1331223325045834, 0.11361131406435063, 0.11722530347631889, 0.11841914700195792, 0.1194905351191376], 'backRatio': [0.12390126598176772, 0.12180854880946343, 0.11948681974746833, 0.11528790776313137, 0.1331223325045834, 0.11361131406435063, 0.11722530347631889, 0.11841914700195792, 0.1194905351191376], 'rearX': [1.716408, 1.288921, 0.861433, 0.4339453, 0.006457668, -0.42103, -0.8485176, -1.276005, -1.703493], 'rearY': [1.050997e-16, 7.892362e-17, 5.274756e-17, 2.657149e-17, 3.954181e-19, -2.578065e-17, -5.195672e-17, -7.813279e-17, -1.043089e-16]},\n", - " 'Wm2Back': [2.9397776666666666,\n", - " 2.89124,\n", - " 2.837168333333333,\n", - " 2.7395723333333333,\n", - " 2.990579,\n", - " 2.6973613333333333,\n", - " 2.7764156666666664,\n", - " 2.804555,\n", - " 2.829724666666667],\n", - " 'Wm2Front': [23.725776666666665,\n", - " 23.73493666666667,\n", - " 23.743613333333332,\n", - " 23.761876666666666,\n", - " 22.463893333333335,\n", - " 23.74101333333333,\n", - " 23.68344,\n", - " 23.68229,\n", - " 23.680580000000003],\n", - " 'backRatio': [0.12390126598176772,\n", - " 0.12180854880946343,\n", - " 0.11948681974746833,\n", - " 0.11528790776313137,\n", - " 0.1331223325045834,\n", - " 0.11361131406435063,\n", - " 0.11722530347631889,\n", - " 0.11841914700195792,\n", - " 0.1194905351191376],\n", - " 'clearance_height': 2.166802445305938,\n", + "{'AnalysisObj': [{'octfile': '1axis_2021-01-13_0800.oct', 'name': '1axis_2021-01-13_0800_Scene0', 'hpc': False, 'modWanted': 10, 'rowWanted': 4, 'sceneNum': 0, 'power_data': None, 'columns': ['hpc', 'modWanted', 'name', 'octfile', 'power_data', 'rowWanted', 'sceneNum'], 'methods': ['analysis', 'analyzeField', 'analyzeRow', 'calc_performance', 'getResults', 'makeFalseColor', 'makeImage', 'moduleAnalysis'], 'x': [1.717843, 1.290356, 0.862868, 0.4353804, 0.007892705, -0.4195949, -0.8470826, -1.27457, -1.702058], 'y': [1.051876e-16, 7.90115e-17, 5.283543e-17, 2.665936e-17, 4.832888e-19, -2.569278e-17, -5.186885e-17, -7.804492e-17, -1.04221e-16], 'z': [2.308966, 2.33691, 2.364854, 2.392798, 2.420742, 2.448686, 2.47663, 2.504575, 2.532519], 'rearZ': [2.287013, 2.314957, 2.342901, 2.370845, 2.398789, 2.426733, 2.454677, 2.482621, 2.510566], 'mattype': ['a9.3.a2.2.0.cellPVmodule.6457', 'a9.3.a2.4.0.cellPVmodule.6457', 'a9.3.a2.7.0.cellPVmodule.6457', 'a9.3.a2.9.0.cellPVmodule.6457', 'a9.3.octtube1a.6457', 'a9.3.a2.2.1.cellPVmodule.6457', 'a9.3.a2.4.1.cellPVmodule.6457', 'a9.3.a2.7.1.cellPVmodule.6457', 'a9.3.a2.9.1.cellPVmodule.6457'], 'rearMat': ['a9.3.a2.2.0.cellPVmodule.2310', 'a9.3.a2.4.0.cellPVmodule.2310', 'a9.3.a2.7.0.cellPVmodule.2310', 'a9.3.a2.9.0.cellPVmodule.2310', 'sky', 'a9.3.a2.2.1.cellPVmodule.2310', 'a9.3.a2.4.1.cellPVmodule.2310', 'a9.3.a2.7.1.cellPVmodule.2310', 'a9.3.a2.9.1.cellPVmodule.2310'], 'Wm2Front': [23.718860000000003, 23.69696, 23.675516666666667, 23.729776666666666, 22.438763333333338, 23.723913333333332, 23.72122333333333, 23.718536666666665, 23.715846666666664], 'Wm2Back': [2.966707, 2.914698, 2.8558486666666667, 2.806420333333333, 2.990579, 2.7223469999999996, 2.7830696666666666, 2.805665666666666, 2.8377016666666663], 'Back/FrontRatio': [0.12507270278998273, 0.12299362476770151, 0.12061946049214728, 0.11826078736290832, 0.13327141447867316, 0.11474634118789895, 0.11731909052369599, 0.1182850114694483, 0.11964919732162257], 'backRatio': [0.12507270278998273, 0.12299362476770151, 0.12061946049214728, 0.11826078736290832, 0.13327141447867316, 0.11474634118789895, 0.11731909052369599, 0.1182850114694483, 0.11964919732162257], 'rearX': [1.716408, 1.288921, 0.861433, 0.4339453, 0.006457668, -0.42103, -0.8485176, -1.276005, -1.703493], 'rearY': [1.050997e-16, 7.892362e-17, 5.274756e-17, 2.657149e-17, 3.954181e-19, -2.578065e-17, -5.195672e-17, -7.813279e-17, -1.043089e-16]}],\n", " 'dhi': 22,\n", + " 'dni': 13,\n", " 'ghi': 23,\n", " 'octfile': '1axis_2021-01-13_0800.oct',\n", - " 'radfile': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad',\n", - " 'scene': {'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'gcr': 0.4284, 'text': '!xform -rx 3.74 -t 0 0 2.3 -a 20 -t 1.046 0 0 -a 7 -t 0 10 0 -i 1 -t -9.414 -30.0 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad', 'sceneDict': {'tilt': 3.74, 'pitch': 10, 'clearance_height': 2.166802445305938, 'azimuth': 90.0, 'nMods': 20, 'nRows': 7, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}},\n", + " 'scenes': [{'module': {'x': 1.036, 'y': 2.092, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.046, 'sceney': 4.284, 'scenez': 0.1, 'numpanels': 2, 'bifi': 1, 'text': '! genbox black cellPVmodule 0.156 0.156 0.02 | xform -t -0.44 -2.142 0.1 -a 6 -t 0.176 0 0 -a 12 -t 0 0.176 0 -a 2 -t 0 2.192 0\\r\\n! genbox black octtube1a 1.046 0.04142135623730951 0.1 | xform -t -0.523 -0.020710678118654756 -0.05\\r\\n! genbox black octtube1b 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 45 -t 0 0 0\\r\\n! genbox black octtube1c 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 90 -t 0 0 0\\r\\n! genbox black octtube1d 1.046 0.04142135623730951 0.1 | xform -t -0.445 -0.020710678118654756 -0.05 -rx 135 -t 0 0 0 ', 'modulefile': 'objects\\\\test-module.rad', 'glass': False, 'offsetfromaxis': 0.1, 'xgap': 0.01, 'ygap': 0.1, 'zgap': 0.05}, 'modulefile': 'objects\\\\test-module.rad', 'hpc': False, 'name': 'Scene0', 'gcr': 0.4284, 'text': '!xform -rx 3.74 -t 0 0 2.3 -a 20 -t 1.046 0 0 -a 7 -t 0 10 0 -i 1 -t -9.414 -30.0 0 -rz 90.0 -t 0 0 0 objects\\\\test-module.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_2.16680_rtr_10.00000_tilt_3.74000_20modsx7rows_origin0,0.rad', 'sceneDict': {'pitch': 10, 'nMods': 20, 'nRows': 7, 'tilt': 3.74, 'clearance_height': 2.166802445305938, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originx': 0, 'originy': 0}}],\n", " 'skyfile': 'skies\\\\sky2_37.5_-77.33_2021-01-13_0800.rad',\n", " 'surf_azm': 90.0,\n", " 'surf_tilt': 3.74,\n", - " 'theta': -3.74}\n" + " 'temp_air': 0.2,\n", + " 'theta': -3.74,\n", + " 'wind_speed': 2.6}\n" ] } ], @@ -712,42 +695,49 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'Back/FrontRatio': [0.12390126598176772,\n", - " 0.12180854880946343,\n", - " 0.11948681974746833,\n", - " 0.11528790776313137,\n", - " 0.1331223325045834,\n", - " 0.11361131406435063,\n", - " 0.11722530347631889,\n", - " 0.11841914700195792,\n", - " 0.1194905351191376],\n", - " 'Wm2Back': [2.9397776666666666,\n", - " 2.89124,\n", - " 2.837168333333333,\n", - " 2.7395723333333333,\n", + "{'Back/FrontRatio': [0.12507270278998273,\n", + " 0.12299362476770151,\n", + " 0.12061946049214728,\n", + " 0.11826078736290832,\n", + " 0.13327141447867316,\n", + " 0.11474634118789895,\n", + " 0.11731909052369599,\n", + " 0.1182850114694483,\n", + " 0.11964919732162257],\n", + " 'Wm2Back': [2.966707,\n", + " 2.914698,\n", + " 2.8558486666666667,\n", + " 2.806420333333333,\n", " 2.990579,\n", - " 2.6973613333333333,\n", - " 2.7764156666666664,\n", - " 2.804555,\n", - " 2.829724666666667],\n", - " 'Wm2Front': [23.725776666666665,\n", - " 23.73493666666667,\n", - " 23.743613333333332,\n", - " 23.761876666666666,\n", - " 22.463893333333335,\n", - " 23.74101333333333,\n", - " 23.68344,\n", - " 23.68229,\n", - " 23.680580000000003],\n", - " 'backRatio': [0.12390126598176772,\n", - " 0.12180854880946343,\n", - " 0.11948681974746833,\n", - " 0.11528790776313137,\n", - " 0.1331223325045834,\n", - " 0.11361131406435063,\n", - " 0.11722530347631889,\n", - " 0.11841914700195792,\n", - " 0.1194905351191376],\n", + " 2.7223469999999996,\n", + " 2.7830696666666666,\n", + " 2.805665666666666,\n", + " 2.8377016666666663],\n", + " 'Wm2Front': [23.718860000000003,\n", + " 23.69696,\n", + " 23.675516666666667,\n", + " 23.729776666666666,\n", + " 22.438763333333338,\n", + " 23.723913333333332,\n", + " 23.72122333333333,\n", + " 23.718536666666665,\n", + " 23.715846666666664],\n", + " 'backRatio': [0.12507270278998273,\n", + " 0.12299362476770151,\n", + " 0.12061946049214728,\n", + " 0.11826078736290832,\n", + " 0.13327141447867316,\n", + " 0.11474634118789895,\n", + " 0.11731909052369599,\n", + " 0.1182850114694483,\n", + " 0.11964919732162257],\n", + " 'columns': ['hpc',\n", + " 'modWanted',\n", + " 'name',\n", + " 'octfile',\n", + " 'power_data',\n", + " 'rowWanted',\n", + " 'sceneNum'],\n", " 'hpc': False,\n", " 'mattype': ['a9.3.a2.2.0.cellPVmodule.6457',\n", " 'a9.3.a2.4.0.cellPVmodule.6457',\n", @@ -758,8 +748,18 @@ " 'a9.3.a2.4.1.cellPVmodule.6457',\n", " 'a9.3.a2.7.1.cellPVmodule.6457',\n", " 'a9.3.a2.9.1.cellPVmodule.6457'],\n", - " 'name': '1axis_2021-01-13_0800',\n", + " 'methods': ['analysis',\n", + " 'analyzeField',\n", + " 'analyzeRow',\n", + " 'calc_performance',\n", + " 'getResults',\n", + " 'makeFalseColor',\n", + " 'makeImage',\n", + " 'moduleAnalysis'],\n", + " 'modWanted': 10,\n", + " 'name': '1axis_2021-01-13_0800_Scene0',\n", " 'octfile': '1axis_2021-01-13_0800.oct',\n", + " 'power_data': None,\n", " 'rearMat': ['a9.3.a2.2.0.cellPVmodule.2310',\n", " 'a9.3.a2.4.0.cellPVmodule.2310',\n", " 'a9.3.a2.7.0.cellPVmodule.2310',\n", @@ -796,6 +796,8 @@ " 2.454677,\n", " 2.482621,\n", " 2.510566],\n", + " 'rowWanted': 4,\n", + " 'sceneNum': 0,\n", " 'x': [1.717843,\n", " 1.290356,\n", " 0.862868,\n", @@ -827,7 +829,7 @@ } ], "source": [ - "pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'].__dict__)" + "pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'][0].__dict__)" ] }, { @@ -863,83 +865,209 @@ "\n", "Making 1 octfiles in root directory.\n", "Created 1axis_2021-01-13_0900.oct\n", - "Linescan in process: 1axis_2021-01-13_0900_Front\n", - "Linescan in process: 1axis_2021-01-13_0900_Back\n", - "Saved: results\\irr_1axis_2021-01-13_0900.csv\n", - "Index: 2021-01-13_0900. Wm2Front: 94.6692262962963. Wm2Back: 7.361564111111111\n", + "Linescan in process: 1axis_2021-01-13_0900_Scene0_Row4_Module10_Front\n", + "Linescan in process: 1axis_2021-01-13_0900_Scene0_Row4_Module10_Back\n", + "Saved: results\\irr_1axis_2021-01-13_0900_Scene0_Row4_Module10.csv\n", + "Index: 2021-01-13_0900. Wm2Front: 94.49464296296296. Wm2Back: 7.260071703703703\n", "\n", "Making 1 octfiles in root directory.\n", "Created 1axis_2021-01-13_1300.oct\n", - "Linescan in process: 1axis_2021-01-13_1300_Front\n", - "Linescan in process: 1axis_2021-01-13_1300_Back\n", - "Saved: results\\irr_1axis_2021-01-13_1300.csv\n", - "Index: 2021-01-13_1300. Wm2Front: 218.49475185185187. Wm2Back: 31.17798148148148\n", - "Accumulated hourly bifi gain: 0.123\n" + "Linescan in process: 1axis_2021-01-13_1300_Scene0_Row4_Module10_Front\n", + "Linescan in process: 1axis_2021-01-13_1300_Scene0_Row4_Module10_Back\n", + "Saved: results\\irr_1axis_2021-01-13_1300_Scene0_Row4_Module10.csv\n", + "Index: 2021-01-13_1300. Wm2Front: 218.45375185185185. Wm2Back: 31.194317407407407\n" ] } ], "source": [ "for time in ['2021-01-13_0900','2021-01-13_1300']: \n", " demo.makeOct1axis(singleindex=time)\n", - " results=demo.analysis1axis(singleindex=time)\n", - "\n", - "print('Accumulated hourly bifi gain: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front)))" + " trackerdict=demo.analysis1axis(singleindex=time)\n", + "\n" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 19, "metadata": {}, + "outputs": [], "source": [ - "Note that the bifacial gain printed above is for the accumulated irradiance between the hours modeled so far. \n", - "That is, demo.Wm2Back and demo.Wm2Front are for January 13, 8AM, 9AM and 1 PM. Compare demo.Wm2back below with what we had before:" + "results = demo.getResults()" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accumulated hourly bifi gain: 0.123\n" + ] + } + ], + "source": [ + "print('Accumulated hourly bifi gain: {:0.3}'.format(np.sum(np.sum(np.array(results.Wm2Back))) / np.sum(np.sum(np.array(results.Wm2Front)))))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampnamemodNumrowNumsceneNummattyperearMatWm2FrontWm2BackbackRatio
02021-01-13_08001axis_2021-01-13_0800_Scene01040[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...[23.718860000000003, 23.69696, 23.675516666666...[2.966707, 2.914698, 2.8558486666666667, 2.806...[0.12507270278998273, 0.12299362476770151, 0.1...
12021-01-13_09001axis_2021-01-13_0900_Scene01040[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...[95.28960000000001, 96.7806, 97.31289666666667...[7.143708666666666, 6.949691333333334, 6.68095...[0.0749676113558595, 0.0718079814069341, 0.068...
22021-01-13_13001axis_2021-01-13_1300_Scene01040[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...[218.4759333333333, 218.4736, 218.471233333333...[28.006213333333335, 26.89838, 25.730456666666...[0.1281884220271614, 0.12311902619343391, 0.11...
\n", + "
" + ], "text/plain": [ - "array([38.12009667, 36.835678 , 35.30221533, 33.89088167, 84.072514 ,\n", - " 34.04756533, 35.405451 , 36.69546633, 37.992436 ])" + " timestamp name modNum rowNum sceneNum \\\n", + "0 2021-01-13_0800 1axis_2021-01-13_0800_Scene0 10 4 0 \n", + "1 2021-01-13_0900 1axis_2021-01-13_0900_Scene0 10 4 0 \n", + "2 2021-01-13_1300 1axis_2021-01-13_1300_Scene0 10 4 0 \n", + "\n", + " mattype \\\n", + "0 [a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce... \n", + "1 [a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce... \n", + "2 [a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce... \n", + "\n", + " rearMat \\\n", + "0 [a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce... \n", + "1 [a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce... \n", + "2 [a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce... \n", + "\n", + " Wm2Front \\\n", + "0 [23.718860000000003, 23.69696, 23.675516666666... \n", + "1 [95.28960000000001, 96.7806, 97.31289666666667... \n", + "2 [218.4759333333333, 218.4736, 218.471233333333... \n", + "\n", + " Wm2Back \\\n", + "0 [2.966707, 2.914698, 2.8558486666666667, 2.806... \n", + "1 [7.143708666666666, 6.949691333333334, 6.68095... \n", + "2 [28.006213333333335, 26.89838, 25.730456666666... \n", + "\n", + " backRatio \n", + "0 [0.12507270278998273, 0.12299362476770151, 0.1... \n", + "1 [0.0749676113558595, 0.0718079814069341, 0.068... \n", + "2 [0.1281884220271614, 0.12311902619343391, 0.11... " ] }, - "execution_count": 19, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "demo.Wm2Back" + "display(results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To print the specific bifacial gain for a specific hour, you can use the following:" + "Note that the bifacial gain printed above is for the accumulated irradiance between the hours modeled so far. \n", + "That is, demo.Wm2Back and demo.Wm2Front are for January 13, 8AM, 9AM and 1 PM. Compare demo.Wm2back below with what we had before:" ] }, { - "cell_type": "code", - "execution_count": 20, + "cell_type": "markdown", "metadata": {}, + "source": [ + "To print the specific bifacial gain for a specific hour, you can use the following: (for results index 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "scrolled": true + }, "outputs": [ { - "data": { - "text/plain": [ - "0.14269441813696923" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Gain for timestamp 2021-01-13_0800: 0.121\n" + ] } ], "source": [ - "sum(trackerdict['2021-01-13_1300']['AnalysisObj'].Wm2Back) / sum(trackerdict['2021-01-13_1300']['AnalysisObj'].Wm2Front)" + "index = 0\n", + "print(f\"Gain for timestamp {results.loc[index,'timestamp']}: \" + \\\n", + " f\"{sum(results.loc[index,'Wm2Back']) / sum(results.loc[index,'Wm2Front']):0.3}\")\n" ] }, { @@ -984,7 +1112,8 @@ "source": [ "demo.makeOct1axis()\n", "results = demo.analysis1axis()\n", - "print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front)))\n" + "print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(\n", + " np.sum(np.sum(results.loc[:,'Wm2Back'])) / np.sum(np.sum(results.loc[:,'Wm2Front'])))\n" ] }, { diff --git a/docs/tutorials/3 - Single Axis Tracking Hourly.py b/docs/tutorials/3 - Single Axis Tracking Hourly.py index 091bb360..e79d833b 100644 --- a/docs/tutorials/3 - Single Axis Tracking Hourly.py +++ b/docs/tutorials/3 - Single Axis Tracking Hourly.py @@ -264,7 +264,7 @@ # In[13]: -pprint.pprint(demo.trackerdict[trackerkeys[5]]['scene'].__dict__) +pprint.pprint(demo.trackerdict[trackerkeys[5]]['scenes'][0].__dict__) # @@ -288,7 +288,8 @@ demo.makeOct1axis(singleindex='2021-01-13_0800') results = demo.analysis1axis(singleindex='2021-01-13_0800') -print('\n\nHourly bifi gain: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front))) +temp = results['2021-01-13_0800']['AnalysisObj'][0].getResults() +print('\n\nHourly bifi gain: {:0.3}'.format(sum(temp['Wm2Back'][0]) / sum(temp['Wm2Front'][0]))) # The trackerdict now contains information about the octfile, as well as the Analysis Object results @@ -303,7 +304,7 @@ # In[17]: -pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'].__dict__) +pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'][0].__dict__) # @@ -317,26 +318,37 @@ for time in ['2021-01-13_0900','2021-01-13_1300']: demo.makeOct1axis(singleindex=time) - results=demo.analysis1axis(singleindex=time) + trackerdict=demo.analysis1axis(singleindex=time) -print('Accumulated hourly bifi gain: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front))) +# In[19]: -# Note that the bifacial gain printed above is for the accumulated irradiance between the hours modeled so far. -# That is, demo.Wm2Back and demo.Wm2Front are for January 13, 8AM, 9AM and 1 PM. Compare demo.Wm2back below with what we had before: -# In[19]: +results = demo.getResults() -demo.Wm2Back +# In[20]: -# To print the specific bifacial gain for a specific hour, you can use the following: +print('Accumulated hourly bifi gain: {:0.3}'.format(np.sum(np.sum(np.array(results.Wm2Back))) / np.sum(np.sum(np.array(results.Wm2Front))))) -# In[20]: + +# In[26]: + + +display(results) + + +# Note that the bifacial gain printed above is for the accumulated irradiance between the hours modeled so far. +# That is, demo.Wm2Back and demo.Wm2Front are for January 13, 8AM, 9AM and 1 PM. Compare demo.Wm2back below with what we had before: + +# To print the specific bifacial gain for a specific hour, you can use the following: (for results index 0) + +# In[37]: -sum(trackerdict['2021-01-13_1300']['AnalysisObj'].Wm2Back) / sum(trackerdict['2021-01-13_1300']['AnalysisObj'].Wm2Front) +index = 0 +print(f"Gain for timestamp {results.loc[index,'timestamp']}: " + f"{sum(results.loc[index,'Wm2Back']) / sum(results.loc[index,'Wm2Front']):0.3}") # @@ -351,7 +363,8 @@ demo.makeOct1axis() results = demo.analysis1axis() -print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front))) +print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format( + np.sum(np.sum(results.loc[:,'Wm2Back'])) / np.sum(np.sum(results.loc[:,'Wm2Front']))) #
diff --git a/setup.py b/setup.py index cbdce705..50ff0ed7 100644 --- a/setup.py +++ b/setup.py @@ -78,6 +78,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', ], # What does your project relate to? diff --git a/tests/test_bifacial_radiance.py b/tests/test_bifacial_radiance.py index 3705d7ef..2444ce18 100644 --- a/tests/test_bifacial_radiance.py +++ b/tests/test_bifacial_radiance.py @@ -97,9 +97,10 @@ def test_Radiance_high_azimuth_modelchains(): Params[0]['testfolder'] = TESTDIR # unpack the Params tuple with *Params demo2, analysis = bifacial_radiance.modelchain.runModelChain(*Params ) + results = demo2.getResults() #assert np.round(np.mean(analysis.backRatio),2) == 0.20 # bifi ratio was == 0.22 in v0.2.2 - assert np.mean(analysis.Wm2Front) == pytest.approx(899, rel = 0.005) # was 912 in v0.2.3 - assert np.mean(analysis.Wm2Back) == pytest.approx(189, rel = 0.03) # was 182 in v0.2.2 + assert np.mean(results.Wm2Front[0]) == pytest.approx(899, rel = 0.005) # was 912 in v0.2.3 + assert np.mean(results.Wm2Back[0]) == pytest.approx(189, rel = 0.03) # was 182 in v0.2.2 # assert that .hdr image files were created in the last 5 minutes mtime_module = os.path.getmtime(os.path.join('images','test-module_XYZ.hdr')) @@ -223,7 +224,7 @@ def test_1axis_gencumSky(): assert trackerdict[-5.0]['scenes'][0].sceneDict['tilt'] == 5 sceneDict = {'pitch': pitch,'clearance_height':hub_height, 'nMods':10, 'nRows':3} # testing height filter too - trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', append=True) + trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', append=False) # assert trackerdict[-5.0]['radfile'] == 'objects\\1axis-5.0_1.825_11.42_5.0_10x3_origin0,0.rad' sceneDict = {'pitch': pitch,'height':hub_height, 'nMods':10, 'nRows':3} # testing height filter too trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', append=True) @@ -232,24 +233,30 @@ def test_1axis_gencumSky(): trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', append=True) # assert trackerdict[-5.0]['radfile'] == 'objects\\1axis-5.0_1.825_11.42_5.0_10x3_origin0,0.rad' sceneDict = {'pitch': pitch,'height':hub_height, 'hub_height':hub_height, 'nMods':10, 'nRows':3} # testing height filter too - trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', append=True) - assert trackerdict[-5.0]['scenes'].__len__() == 5 + customObject = demo.makeCustomObject('whiteblock','! genbox white_EPDM whiteblock 1.6 4.5 0.5 | xform -t -0.8 -2.25 0') + #demo.appendtoScene(scene.radfiles, customObject, '!xform -rz 0') + trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module', customtext='!xform -rz 90 '+customObject, append=True)# + assert trackerdict[-5.0]['scenes'].__len__() == 4 + fname = trackerdict[-5.0]['scenes'][3].radfiles + with open(fname, 'r') as f: + assert f.readline().__len__() == 131 + assert f.readline()[-14:] == 'whiteblock.rad' - demo.exportTrackerDict(trackerdict, savefile = 'results\exportedTrackerDict2.csv') - assert trackerdict[-5.0]['scenes'][4].radfiles[0:7] == 'objects' - assert trackerdict[-5.0]['scenes'][4].sceneDict['tilt'] == 5 + assert trackerdict[-5.0]['scenes'][3].radfiles[0:7] == 'objects' + assert trackerdict[-5.0]['scenes'][3].sceneDict['tilt'] == 5 #assert trackerdict[-5.0]['radfile'] == 'objects\\1axis-5.0_1.825_11.42_5.0_10x3_origin0,0.rad' minitrackerdict = {} minitrackerdict[list(trackerdict)[0]] = trackerdict[list(trackerdict.keys())[0]] - minitrackerdict[list(trackerdict)[0]]['scenes'] = [trackerdict[list(trackerdict)[0]]['scenes'][4]] + minitrackerdict[list(trackerdict)[0]]['scenes'] = [trackerdict[list(trackerdict)[0]]['scenes'][3]] - trackerdict = demo.makeOct1axis(trackerdict=minitrackerdict) # just run this for one timestep: Jan 1 11am - trackerdict = demo.analysis1axis(trackerdict=trackerdict, modWanted=7, rowWanted=3, sensorsy=2, sceneNum=0) - assert trackerdict[-5.0]['Results'][0]['AnalysisObj'].x[0] == -10.76304 + trackerdict = demo.makeOct1axis(trackerdict=minitrackerdict, singleindex=-5) # just run this for one timestep: Jan 1 11am + trackerdict = demo.analysis1axis( modWanted=7, rowWanted=3, sensorsy=2, sceneNum=0) + assert trackerdict[-5.0]['AnalysisObj'][0].x[0] == -10.76304 modscanfront = {} modscanfront = {'xstart': -5} - trackerdict = demo.analysis1axis(trackerdict=trackerdict, modWanted=7, rowWanted=3, sensorsy=2, modscanfront=modscanfront, sceneNum=0) - assert trackerdict[-5.0]['Results'][1]['AnalysisObj'].x[0] == -5 + trackerdict = demo.analysis1axis( sensorsy=2, modscanfront=modscanfront, sceneNum=0, customname='_test2') + assert trackerdict[-5.0]['AnalysisObj'][1].x[0] == -5 + demo.exportTrackerDict(trackerdict, savefile = 'results\exportedTrackerDict2.csv') @@ -521,7 +528,7 @@ def test_tiltandazimuthModuleTest(): sceneDict = {'gcr': 0.35,'hub_height':2.3, 'tilt': 45, 'azimuth': 135, 'nMods':1, 'nRows': 1} scene = demo.makeScene('test-module',sceneDict) - octfile = demo.makeOct(demo.getfilelist()) + octfile = demo.makeOct() analysis = bifacial_radiance.AnalysisObj(octfile, demo.basename) frontscan, backscan = analysis.moduleAnalysis(scene, sensorsy = [4,4]) results = analysis.analysis(octfile, demo.basename, frontscan, backscan) @@ -627,6 +634,7 @@ def test_customObj(): sceneDict = {'tilt':10,'pitch':1.5,'hub_height':.5, 'azimuth':180, 'nMods': 10, 'nRows': 3} scene = demo.makeScene(module=module, sceneDict=sceneDict) + assert demo.sceneNames() == ['Scene0'] objname='Marker' text='! genbox white_EPDM mymarker 0.02 0.02 2.5 | xform -t -.01 -.01 0'