Repository: NREL/bifacial_radiance (language: python)

Issue:
Performance analysis with multiple scenes
At the moment, performance is run on the entire RadianceObject, which means that a single module type is passed, even if you have multiple scenes with different module types.

Solution:
- Make CECModule an optional property of the ModuleObj.  When you run calculatePerformance, loop through sceneNums and check for defined CECModule if it’s not passed into calculatePerformance.  Default to Prism.  
addPiles for makeScene1axis
At the moment addPiles is a function in the SceneObj.  It works for fixed-tilt systems.  But a top-level function in RadianceObj is needed to loop through entries in TrackerDict to addPiles to each scene.  (or users can do this on their own...)

for key in trackerdict:
    trackerdict[key]['scenes'][sceneNum].addPiles()

This may or may not be included in v0.5
Results refactor
Refactor calculateResults and analysis1axis to push some of the functionality into the AnalysisObject.


Discussion / hints:

Fix patch:
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 82287fad..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.
+
+    """
+    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, reindex=False, monthlyyearly=False):
+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','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,59 +402,60 @@ 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():
-                mask = (d['rowWanted']==rownum) & (d['modWanted']==modnum)
-                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 = D2.set_index('timestamp')
-             #   D2 = D2.set_index(D2['timestamp'])
-
-                # Determine if data is sub-hourly
-                if len(D2) > 1: 
-                    if (D2.index[1]-D2.index[0]).total_seconds() / 60 < 60.0:
-                        # Subhourly to hourly data averages, doesn't sum
-                        # So we get average hourly irradiance as well as Wh on 
-                        # results of power.
-                        D2b = D2.copy()
-                        D2b = D2b.groupby(pd.PeriodIndex(D2b.index, freq="H")).mean(numeric_only=True).reset_index()
-                        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.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['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
-                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['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(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)
-
-                D3=D3.reset_index()                
-                D4=D4.reset_index()
-                D3join = pd.concat([D3join, D3], ignore_index=True, sort=False)
-                D4join = pd.concat([D4join, D4], ignore_index=True, sort=False)
+        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['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['timestamp'], format="%Y-%m-%d_%H%M")
+                    D2 = D2.set_index('timestamp')
+                 #   D2 = D2.set_index(D2['timestamp'])
+    
+                    # Determine if data is sub-hourly
+                    if len(D2) > 1: 
+                        if (D2.index[1]-D2.index[0]).total_seconds() / 60 < 60.0:
+                            # Subhourly to hourly data averages, doesn't sum
+                            # So we get average hourly irradiance as well as Wh on 
+                            # results of power.
+                            D2b = D2.copy()
+                            D2b = D2b.groupby(pd.PeriodIndex(D2b.index, freq="H")).mean(numeric_only=True).reset_index()
+                            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['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(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['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(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['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)
+    
+                    D3=D3.reset_index()                
+                    D4=D4.reset_index()
+                    D3join = pd.concat([D3join, D3], ignore_index=True, sort=False)
+                    D4join = pd.concat([D4join, D4], ignore_index=True, sort=False)
                 
         savefile2 = savefile[:-4]+'_Hourly.csv'        
         savefile3 = savefile[:-4]+'_Monthly.csv'
diff --git a/bifacial_radiance/main.py b/bifacial_radiance/main.py
index c57f7bc9..63f26fdc 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]
@@ -349,7 +349,8 @@ def __init__(self, name=None, path=None, hpc=False):
         #self.filelist = []         # list of files to include in the oconv
         self.materialfiles = []    # material files for oconv
         self.skyfiles = []          # skyfiles for oconv
-        self.radfiles = []      # scene rad files for oconv
+        #self.radfiles = []      # scene rad files for oconv, compiled from self.scenes
+        self.scenes = []        # array of scenefiles to be compiled
         self.octfile = []       #octfile name for analysis
         self.Wm2Front = 0       # cumulative tabulation of front W/m2
         self.Wm2Back = 0        # cumulative tabulation of rear W/m2
@@ -357,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)
@@ -433,8 +434,28 @@ def getfilelist(self):
         Return concat of matfiles, radfiles and skyfiles
         """
 
-        return self.materialfiles + self.skyfiles + self.radfiles
+        return self.materialfiles + self.skyfiles + self._getradfiles()
+    
+    def _getradfiles(self, scenelist=None):
+        """
+        iterate over self.scenes to get the radfiles
 
+        Returns
+        -------
+        None.
+
+        """
+        if scenelist is None:
+            scenelist = self.scenes
+        a = []
+        for scene in scenelist:
+            if type(scene.radfiles) == list:
+                for f in scene.radfiles:
+                    a.append(f) 
+            else:
+                a.append(scene.radfiles)
+        return a
+        
     def save(self, savefile=None):
         """
         Pickle the radiance object for further use.
@@ -593,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` 
@@ -615,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
@@ -658,6 +680,35 @@ 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]
+    
     def setGround(self, material=None, material_file=None):
         """ 
         Use GroundObj constructor class and return a ground object
@@ -831,7 +882,7 @@ def readWeatherFile(self, weatherFile=None, starttime=None,
             (negative values indicating West of UTC.)
         """
         #from datetime import datetime
-        import warnings
+        #import warnings
         
         if weatherFile is None:
             if hasattr(self,'epwfile'):
@@ -1610,7 +1661,7 @@ def gendaylit(self, timeindex, metdata=None, debug=False):
             If errors exist, such as DNI = 0 or sun below horizon, this skyname is None
 
         """
-        import warnings
+        #import warnings
  
         if metdata is None:
             try:
@@ -1939,7 +1990,7 @@ def set1axis(self, metdata=None, azimuth=180, limit_angle=45,
         # metdata.surface_azimuth list of tracker azimuth data
         # metdata.surface_tilt    list of tracker surface tilt data
         # metdata.tracker_theta   list of tracker tilt angle
-        import warnings
+        #import warnings
         
         if metdata == None:
             metdata = self.metdata
@@ -2193,13 +2244,14 @@ def makeOct1axis(self, trackerdict=None, singleindex=None, customname=None):
 
         print('\nMaking {} octfiles in root directory.'.format(indexlist.__len__()))
         for index in sorted(indexlist):  # run through either entire key list of trackerdict, or just a single value
-            try:
-                filelist = self.materialfiles + [trackerdict[index]['skyfile'], trackerdict[index]['radfile']]
+            try:  #TODO: check if this works
+                filelist = self.materialfiles + [trackerdict[index]['skyfile']] + self._getradfiles(trackerdict[index]['scenes'])
                 octname = '1axis_%s%s'%(index, customname)
                 trackerdict[index]['octfile'] = self.makeOct(filelist, octname)
             except KeyError as e:
                 print('Trackerdict key error: {}'.format(e))
-
+                
+        self.trackerdict = trackerdict
         return trackerdict
 
     
@@ -2309,7 +2361,7 @@ def makeCustomObject(self, name=None, text=None):
             f.write(text.encode('ascii'))
 
         print("\nCustom Object Name", customradfile)
-        self.customradfile = customradfile
+        #self.customradfile = customradfile
         return customradfile
 
 
@@ -2320,103 +2372,14 @@ def printModules(self):
         print('Available module names: {}'.format([str(x) for x in modulenames]))
         return modulenames
     
-    
-    def addPiles(self, spacingPiles=6, pile_lenx=0.2, pile_leny=0.2, pile_height=None):
-        '''
-        Function to add support piles at determined intervals throughout the rows.
-        TODO: enable functionality or check for scenes using 'clearance_height' ?
-        
-        Parameters
-        ----------
-        spacingPiles : float
-            Distance between support piles.
-        pile_lenx : float
-            Dimension of the pile on the row-x direction, in meters. Default is 0.2
-        pile_leny: float
-            Dimension of the pile on the row-y direction, in meters. Defualt is 0.2
-        pile_height : float
-            Dimension of the pile on the z-direction, from the ground up. If None,
-            value of hub_height is used. Default: None.
-            
-        Returns
-        -------
-        None
-        
-        '''
-        
-        nMods = self.scene.sceneDict['nMods'] 
-        nRows = self.scene.sceneDict['nRows']           
-        module = self.module
-
-        if pile_height is None:
-            pile_height = self.scene.sceneDict['hub_height']
-            print("pile_height!", pile_height)
-            
-        rowlength = nMods * module.scenex
-        nPiles = np.floor(rowlength/spacingPiles) + 1
-        pitch = self.scene.sceneDict['pitch']
-        azimuth=self.scene.sceneDict['azimuth']
-        originx = self.scene.sceneDict['originx']
-        originy = self.scene.sceneDict['originy']
-    
-        text='! genbox black post {} {} {} '.format(pile_lenx, pile_leny, pile_height)
-        text+='| xform -t {} {} 0 '.format(pile_lenx/2.0, pile_leny/2.0)
-
-        if self.hpc:
-            radfilePiles = os.path.join(os.getcwd(), 'objects', 'Piles.rad')
-        else:
-            radfilePiles = os.path.join('objects','post.rad')
-
-        # py2 and 3 compatible: binary write, encode text first
-        with open(radfilePiles, 'wb') as f:
-            f.write(text.encode('ascii'))
-                    
-        
-        # create nPiles -element array along x, nRows along y. 1cm module gap.
-        text = '!xform -rx 0 -a %s -t %s 0 0 -a %s -t 0 %s 0 ' %(nPiles, spacingPiles, nRows, pitch)
-
-        # azimuth rotation of the entire shebang. Select the row to scan here based on y-translation.
-        # Modifying so center row is centered in the array. (i.e. 3 rows, row 2. 4 rows, row 2 too)
-        # Since the array is already centered on row 1, module 1, we need to increment by Nrows/2-1 and Nmods/2-1
-
-        text += (f'-i 1 -t {-self.module.scenex*(round(nMods/1.999)*1.0-1)} '
-                 f'{-pitch*(round(nRows / 1.999)*1.0-1)} 0 -rz {180-azimuth} '
-                 f'-t {originx} {originy} 0 ' )
-
-        filename = (f'Piles_{spacingPiles}_{pile_lenx}_{pile_leny}_{pile_height}.rad')
-
-        if self.hpc:
-            text += f'"{os.path.join(os.getcwd(), radfilePiles)}"'
-            scenePilesRad = os.path.join(os.getcwd(), 'objects', filename) 
-        else:
-            text += os.path.join(radfilePiles)
-            scenePilesRad = os.path.join('objects',filename ) 
-
-        # py2 and 3 compatible: binary write, encode text first
-        with open(scenePilesRad, 'wb') as f:
-            f.write(text.encode('ascii'))
-
-        try:
-            self.radfiles.append(scenePilesRad)
-            print( "Piles Radfile Appended")
-        except:
-            #TODO: Manage situation where radfile was created with
-            #appendRadfile to False first..
-            self.radfiles=[]
-            self.radfiles.append(scenePilesRad)
-            
-
-        print("Piles Created and Appended Successfully.")
-
-
-        return
-        
         
     def makeScene(self, module=None, sceneDict=None, radname=None,
+                  customtext=None, append=False, 
                   moduletype=None, appendtoScene=None):
         """
         Create a SceneObj which contains details of the PV system configuration including
-        tilt, row pitch, height, nMods per row, nRows in the system...
+        tilt, row pitch, height, nMods per row, nRows in the system. Append to
+        self.scenes list
 
         Parameters
         ----------
@@ -2431,12 +2394,18 @@ def makeScene(self, module=None, sceneDict=None, radname=None,
             `hub_height` can also be passed as a possibility.
         radname : str
             Gives a custom name to the scene file. Useful when parallelizing.
-        moduletype: DEPRECATED. use the `module` kwarg instead.
-        appendtoScene : str
+        customtext : str
             Appends to the 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.
+        append : bool, default False
+            If multiple scenes exist (makeScene called multiple times), either 
+            overwrite the existing scene (default) or append a new SceneObj to
+            self.scenes
+        moduletype: DEPRECATED. use the `module` kwarg instead.
+        appendtoScene : DEPRECATED.  use the `customtext` kwarg instead.
+
         
         Returns
         -------
@@ -2444,6 +2413,10 @@ def makeScene(self, module=None, sceneDict=None, radname=None,
             'scene' with configuration details
             
         """
+        if appendtoScene is not None:
+            customtext = appendtoScene
+            print("Warning:  input `appendtoScene` is deprecated. Use kwarg "
+                  "`customtext` instead")
         if moduletype is not None:
             module = moduletype
             print("Warning:  input `moduletype` is deprecated. Use kwarg "
@@ -2457,13 +2430,15 @@ def makeScene(self, module=None, sceneDict=None, radname=None,
                           'Available moduletypes: ' )
                 self.printModules() #print available module types
                 return
-        self.scene = SceneObj(module)
-        self.scene.hpc = self.hpc  #pass HPC mode from parent
+        scene = SceneObj(module, hpc=self.hpc, name=f'Scene{self.scenes.__len__()}')
+        if self.scenes.__len__() >=1:
+            print(f"Additional scene {scene.name} created! See list of names with RadianceObj.scenes and sceneNames")
 
         if sceneDict is None:
             print('makeScene(moduletype, sceneDict, nMods, nRows).  '+\
                   'sceneDict inputs: .tilt .clearance_height .pitch .azimuth')
-            return self.scene
+            self.scenes.append(scene)
+            return scene
 
         if 'azimuth' not in sceneDict:
             sceneDict['azimuth'] = 180
@@ -2484,9 +2459,12 @@ def makeScene(self, module=None, sceneDict=None, radname=None,
         
         #self.nMods = sceneDict['nMods']
         #self.nRows = sceneDict['nRows']
-        sceneRAD = self.scene._makeSceneNxR(sceneDict=sceneDict,
+        sceneRAD = scene._makeSceneNxR(sceneDict=sceneDict,
                                                  radname=radname)
 
+        # TODO: deprecate this section in favor of multiple sceneObjs?
+        # This functionality allows additional radfiles to be added to the same
+        # sceneObj, so it's somewhat distinct from making new sceneObjs...        
         if 'appendRadfile' not in sceneDict:
             appendRadfile = False
         else:
@@ -2495,29 +2473,36 @@ def makeScene(self, module=None, sceneDict=None, radname=None,
         if appendRadfile:
             debug = False
             try:
-                self.radfiles.append(sceneRAD)
+                scene.radfiles.append(sceneRAD)
                 if debug:
                     print( "Radfile APPENDED!")
             except:
                 #TODO: Manage situation where radfile was created with
                 #appendRadfile to False first..
-                self.radfiles=[]
-                self.radfiles.append(sceneRAD)
+                scene.radfiles=[]
+                scene.radfiles.append(sceneRAD)
                 if debug:
                     print( "Radfile APPENDAGE created!")
         else:
-            self.radfiles = [sceneRAD]
-        
-        if appendtoScene is not None:
-            self.appendtoScene(self.radfiles[0], customObject = appendtoScene)
-
-        return self.scene
+            scene.radfiles = [sceneRAD]
+        #
+        if customtext is not None:
+            self.appendtoScene(radfile=scene.radfiles[0], customObject = customtext)
+            
+        # default behavior: overwrite. (backwards compatible behavior.)
+        if append:
+            self.scenes.append(scene)
+        else:
+            self.scenes = [scene]
+        return scene
 
-    def appendtoScene(self, radfile=None, customObject=None):
+    def appendtoScene(self, radfile=None, customObject=None, text=''):
         """
         Appends to the `Scene radfile` in folder `\objects` the text command in Radiance
         lingo created by the user.
         Useful when using addCustomObject to the scene.
+        
+        DEPRECATED: use the identical version in SceneObj instead
 
         Parameters
         ----------
@@ -2526,18 +2511,19 @@ def appendtoScene(self, radfile=None, customObject=None):
         customObject : str
             Directory and name of custom object .rad file is stored, and any geometry
             modifications needed for it.
-
+        text : str 
+            Command to be appended to the radfile which specifies its position 
+            in the scene. Do not leave empty spaces at the end.
 
         Returns
         -------
         Nothing, the radfile must already be created and assigned when running this.
         
-        """
-        
-        #TODO: Add a custom name and replace radfile name
-        
+        """        
+        warnings.warn('RadObj.appendtoScene is deprecated.  Use the equivalent'
+              ' functionality in SceneObj.appendtoScene.', DeprecationWarning)
         # py2 and 3 compatible: binary write, encode text first
-        text2 = '\n!xform -rx 0 ' + customObject
+        text2 = '\n!xform -rx 0 ' + text + ' ' + customObject
         
         debug = False
         if debug:
@@ -2547,10 +2533,10 @@ def appendtoScene(self, radfile=None, customObject=None):
             f.write(text2)
 
 
-
     
     def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
-                       cumulativesky=None, moduletype=None, appendtoScene=None):
+                       cumulativesky=None, customtext=None, append=False, 
+                       moduletype=None, appendtoScene=None):
         """
         Creates a SceneObj for each tracking angle which contains details of the PV
         system configuration including row pitch, hub_height, nMods per row, nRows in the system...
@@ -2565,19 +2551,22 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
             Dictionary with keys:`tilt`, `hub_height`, `pitch`, `azimuth`
         cumulativesky : bool
             Defines if sky will be generated with cumulativesky or gendaylit.
-        moduletype: DEPRECATED. use the `module` kwarg instead.
-        appendtoScene : str
+        customtext : str
             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
+            self.scenes
+        moduletype: DEPRECATED. use the `module` kwarg instead.
+        appendtoScene : DEPRECATED. use the `customtext` kwarg instead
             
         Returns
         --------
         trackerdict 
             Append the following keys
-                'radfile'
-                    directory where .rad scene file is stored
                 'scene'
                     SceneObj for each tracker theta
                 'clearance_height'
@@ -2586,14 +2575,18 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
                 
         """
         
-        import math
+        import math, copy
 
         if sceneDict is None:
             print('usage: makeScene1axis(module, sceneDict, nMods, nRows).'+
                   'sceneDict inputs: .hub_height .azimuth .nMods .nRows'+
                   'and .pitch or .gcr')
             return
-
+        
+        if appendtoScene is not None: #kwarg is deprecated.
+            customtext = appendtoScene
+            warnings.warn("Warning:  input `appendtoScene` is deprecated. Use kwarg "
+                  "`customtext` instead", DeprecationWarning)
         # If no nRows or nMods assigned on deprecated variable or dictionary,
         # assign default.
         if 'nRows' not in sceneDict:
@@ -2654,10 +2647,12 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
             hubheight = sceneDict['hub_height']
             simplefix = 1
 
+        # we no longer need sceneDict['hub_height'] - it'll be replaced by 'clearance_height' below
+        sceneDict.pop('hub_height',None)
         if cumulativesky is True:        # cumulativesky workflow
             print('\nMaking .rad files for cumulativesky 1-axis workflow')
             for theta in trackerdict:
-                scene = SceneObj(module)
+                scene = SceneObj(module, hpc=self.hpc)
                 if trackerdict[theta]['surf_azm'] >= 180:
                     trackerdict[theta]['surf_azm'] = trackerdict[theta]['surf_azm']-180
                     trackerdict[theta]['surf_tilt'] = trackerdict[theta]['surf_tilt']*-1
@@ -2670,28 +2665,48 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
                 # Calculate the ground clearance height based on the hub height. Add abs(theta) to avoid negative tilt angle errors
                 #trackerdict[theta]['clearance_height'] = height
 
+
                 try:
-                    sceneDict2 = {'tilt':trackerdict[theta]['surf_tilt'],
-                                  'pitch':sceneDict['pitch'],
-                                  'clearance_height':height,
-                                  'azimuth':trackerdict[theta]['surf_azm'],
-                                  'nMods': sceneDict['nMods'],
-                                  'nRows': sceneDict['nRows'],
-                                  'modulez': scene.module.z}
-                except KeyError:
+                    sceneDict.update({'tilt' : trackerdict[theta]['surf_tilt'],
+                                     'clearance_height' :  height,
+                                     'azimuth' : trackerdict[theta]['surf_azm'],
+                                     'modulez' :  scene.module.z})
+                    
+                    # sceneDict2 = {'tilt':trackerdict[theta]['surf_tilt'],
+                    #                'pitch':sceneDict['pitch'],
+                    #                'clearance_height':height,
+                    #                'azimuth':trackerdict[theta]['surf_azm'],
+                    #                'nMods': sceneDict['nMods'],
+                    #                'nRows': sceneDict['nRows'],
+                    #                'modulez': scene.module.z}
+                except KeyError as err:
                     #maybe gcr is passed, not pitch
-                    sceneDict2 = {'tilt':trackerdict[theta]['surf_tilt'],
-                                  'gcr':sceneDict['gcr'],
-                                  'clearance_height':height,
-                                  'azimuth':trackerdict[theta]['surf_azm'],
-                                  'nMods': sceneDict['nMods'],
-                                  'nRows': sceneDict['nRows'],
-                                  'modulez': scene.module.z}
-
-                radfile = scene._makeSceneNxR(sceneDict=sceneDict2,
+                    # sceneDict2 = {'tilt':trackerdict[theta]['surf_tilt'],
+                    #               'gcr':sceneDict['gcr'],
+                    #               'clearance_height':height,
+                    #               'azimuth':trackerdict[theta]['surf_azm'],
+                    #               'nMods': sceneDict['nMods'],
+                    #               'nRows': sceneDict['nRows'],
+                    #               'modulez': scene.module.z}
+                    raise err
+
+                # if sceneDict isn't copied, it will change inside the SceneObj since dicts are mutable!
+                radfile = scene._makeSceneNxR(sceneDict=(sceneDict),
                                              radname=radname)
-                trackerdict[theta]['radfile'] = radfile
-                trackerdict[theta]['scene'] = scene
+                #trackerdict[theta]['radfile'] = radfile
+                # TODO: determine radfiles dynamically from scenes
+                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:
+                        trackerdict[theta]['scenes'] = [scene]
+                except KeyError: #either KeyError or maybe IndexError?  
+                    trackerdict[theta]['scenes'] = [scene]
 
             print('{} Radfiles created in /objects/'.format(trackerdict.__len__()))
 
@@ -2699,7 +2714,7 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
             print('\nMaking ~%s .rad files for gendaylit 1-axis workflow (this takes a minute..)' % (len(trackerdict)))
             count = 0
             for time in trackerdict:
-                scene = SceneObj(module)
+                scene = SceneObj(module, hpc=self.hpc)
 
                 if trackerdict[time]['surf_azm'] >= 180:
                     trackerdict[time]['surf_azm'] = trackerdict[time]['surf_azm']-180
@@ -2713,40 +2728,52 @@ def makeScene1axis(self, trackerdict=None, module=None, sceneDict=None,
                         * math.sin(abs(theta)*math.pi/180)
 
                 if trackerdict[time]['ghi'] > 0:
-                    #trackerdict[time]['clearance_height'] = height
+
                     try:
-                        sceneDict2 = {'tilt':trackerdict[time]['surf_tilt'],
-                                      'pitch':sceneDict['pitch'],
-                                      'clearance_height': height,
-                                      'azimuth':trackerdict[time]['surf_azm'],
-                                      'nMods': sceneDict['nMods'],
-                                      'nRows': sceneDict['nRows'],
-                                      'modulez': scene.module.z}
-                    except KeyError:
+                        sceneDict.update({'tilt' : trackerdict[time]['surf_tilt'],
+                                         'clearance_height' :  height,
+                                         'azimuth' : trackerdict[time]['surf_azm'],
+                                         'modulez' :  scene.module.z})
+                        # sceneDict2 = {'tilt':trackerdict[time]['surf_tilt'],
+                        #               'pitch':sceneDict['pitch'],
+                        #               'clearance_height': height,
+                        #               'azimuth':trackerdict[time]['surf_azm'],
+                        #               'nMods': sceneDict['nMods'],
+                        #               'nRows': sceneDict['nRows'],
+                        #               'modulez': scene.module.z}
+                        
+                    except KeyError as err:
                         #maybe gcr is passed instead of pitch
-                        sceneDict2 = {'tilt':trackerdict[time]['surf_tilt'],
-                                      'gcr':sceneDict['gcr'],
-                                      'clearance_height': height,
-                                      'azimuth':trackerdict[time]['surf_azm'],
-                                      'nMods': sceneDict['nMods'],
-                                      'nRows': sceneDict['nRows'],
-                                      'modulez': scene.module.z}
-
-                    radfile = scene._makeSceneNxR(sceneDict=sceneDict2,
+                        # sceneDict2 = {'tilt':trackerdict[time]['surf_tilt'],
+                        #               'gcr':sceneDict['gcr'],
+                        #               'clearance_height': height,
+                        #               'azimuth':trackerdict[time]['surf_azm'],
+                        #               'nMods': sceneDict['nMods'],
+                        #               'nRows': sceneDict['nRows'],
+                        #               'modulez': scene.module.z}
+                        raise err
+                    # if sceneDict isn't copied, it will change inside the SceneObj since dicts are mutable!
+                    radfile = scene._makeSceneNxR(sceneDict=(sceneDict),
                                                  radname=radname)
-                    trackerdict[time]['radfile'] = radfile
-                    trackerdict[time]['scene'] = scene
+                    
+                    #try:
+                    if customtext is not None:
+                        scene.appendtoScene(customObject = customtext)
+                        
+                    if ('scenes' in trackerdict[time]) and append:
+                        scene.name=f"Scene{trackerdict[time]['scenes'].__len__()}"
+                        trackerdict[time]['scenes'].append(scene)
+                    else:
+                        scene.name="Scene0"
+                        trackerdict[time]['scenes'] = [scene]
+                    
                     count+=1
             print('{} Radfiles created in /objects/'.format(count))
 
 
-        if appendtoScene is not None:
-            for key in trackerdict:
-                self.appendtoScene(trackerdict[key]['radfile'], customObject = appendtoScene)
+
 
         self.trackerdict = trackerdict
-        #self.nMods = sceneDict['nMods']  #assign nMods and nRows to RadianceObj
-        #self.nRows = sceneDict['nRows']
         self.hub_height = hubheight
         
         return trackerdict
@@ -2756,9 +2783,12 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low',
                       customname=None, modWanted=None, rowWanted=None, 
                       sensorsy=9, sensorsx=1,  
                       modscanfront = None, modscanback = None, relative=False, 
-                      debug=False ):
+                      debug=False, sceneNum=0, append=True ):
         """
         Loop through trackerdict and runs linescans for each scene and scan in there.
+        If multiple scenes exist in the trackerdict, only ONE scene can be analyzed at a 
+        time.  
+        Todo: how to run calculateResults with array of multiple results
 
         Parameters
         ----------------
@@ -2805,20 +2835,24 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low',
             Default is absolute value (relative=False)
         debug : Bool
             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 True)
+            Append trackerdict['AnalysisObj'] to list.  Otherwise over-write any
+            AnalysisObj's and start 1axis analysis from scratch
 
         Returns
         -------
-        trackerdict with new keys:
-            
-            '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
-        RadianceObj with new appended values: 
-            'Wm2Front'     : np Array with front irradiance cumulative
-            'Wm2Back'      : np Array with rear irradiance cumulative
-            'backRatio'    : np Array with rear irradiance ratios
+        trackerdict is returned with :py:class:`bifacial_radiance.AnalysisObj`  
+            for each timestamp:
+    
+        trackerdict.key.'AnalysisObj'  : analysis object for this tracker theta
+            to get a dictionary of results, run :py:class:`bifacial_radiance.AnalysisObj`.getResults
+        :py:class:`bifacial_radiance.AnalysisObj`.getResults returns the following keys:
+            'Wm2Front'     : np.array of front Wm-2 irradiances, len=sensorsy_back
+            'Wm2Back'      : np.array of rear Wm-2 irradiances, len=sensorsy_back
+            'backRatio'    : np.array of rear irradiance ratios, len=sensorsy_back
+
         """
         
         import warnings, itertools
@@ -2831,40 +2865,45 @@ def analysis1axis(self, trackerdict=None, singleindex=None, accuracy='low',
                 trackerdict = self.trackerdict
             except AttributeError:
                 print('No trackerdict value passed or available in self')
-
+        
+        if not append:
+            warnings.warn('Append=False. Over-writing any existing `AnalysisObj` in trackerdict.')
+            for key in trackerdict:
+                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]]['scene'].sceneDict['nMods'] / 1.99)
+            modWanted = round(trackerdict[trackerkeys[0]]['scenes'][sceneNum].sceneDict['nMods'] / 1.99)
         if rowWanted == None:
-            rowWanted = round(trackerdict[trackerkeys[0]]['scene'].sceneDict['nRows'] / 1.99)
-
-       
+            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
-            name = '1axis_%s%s'%(index,customname)
             octfile = trackerdict[index]['octfile']
-            scene = trackerdict[index]['scene']
-            if not trackerdict[index].get('Results'):
-                trackerdict[index]['Results'] = []
+            scene = trackerdict[index]['scenes'][sceneNum]
+            name = '1axis_%s%s_%s'%(index, customname, scene.name)
+            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}
-                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'%(index,customname,)
+                    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, 
@@ -2872,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
@@ -2887,156 +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?
-
-        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). 
+    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
+            '''
             
-        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
-        
-        trackerdict = self.trackerdict
-
-        keys = list(trackerdict.keys())
-        
-        # Search for module object bifaciality
-        if bifacialityfactor is None:
-            bifacialityfactor = trackerdict[keys[0]]['scene'].module.bifi
-            print("Bifaciality factor of module stored is ", bifacialityfactor)
-    # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!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 = []
-        keys_all = []
-        dni = []
-        dhi = []
-        ghi = []
-        
-        for key in keys:
-            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)     
-                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'])
-
-        # trackerdict[key]['effective_irradiance'] = eff_irrad
+            from bifacial_radiance import performance
+            import pandas as pd
             
-        data= pd.DataFrame(zip(keys_all, rowWanted, modWanted, 
-                               Wm2Front, Wm2Back, frontMat, rearMat), 
-                                         columns=('timestamp', 'rowNum','ModNumber',
-                                                  '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]
+            trackerdict = self.trackerdict
 
-            kwargs = {'dni': dni, 'dhi': dhi, 'ghi': ghi}
+            keys = list(trackerdict.keys())
             
-            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!
-            for key in keys:        
-                trackerdict[key]['POA_eff'] = results['POA_eff'][ii]
-                trackerdict[key]['Gfront_mean'] = results['Gfront_mean'][ii]
-                trackerdict[key]['Grear_mean'] = results['Grear_mean'][ii]
-                trackerdict[key]['Pout_raw'] = results['Pout_raw'][ii]
-                trackerdict[key]['Pout_Gfront'] = results['Pout_Gfront'][ii]
-                trackerdict[key]['Mismatch'] = results['Mismatch'][ii]
-                trackerdict[key]['Pout'] = results['Pout'][ii]
+            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}
                 
-                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'))
+            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)
+        
+                
+
+            # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!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'
+            keys_all = []
+            self.CompiledResults = pd.DataFrame(None)
+            bifi_factor_internal = None
+
+            if not self.cumulativesky:
+                
+                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 trackerdict
-    
     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):
         '''
@@ -3172,7 +3217,7 @@ class GroundObj:
     def __repr__(self):
         return str(self.__dict__)   
     def __init__(self, materialOrAlbedo=None, material_file=None, silent=False):
-        import warnings
+        #import warnings
         from numbers import Number
         
         self.normval = None
@@ -3262,7 +3307,7 @@ def printGroundMaterials(self, materialString=None):
         of the material type selected.
         """
         
-        import warnings
+        #import warnings
         material_path = 'materials'
         
         f = open(os.path.join(material_path, self.material_file))
@@ -3361,14 +3406,11 @@ class SceneObj:
     name : str
            Identifier of scene in case of multiple scenes. Default `Scene0'.
            Automatically increments if makeScene is run multiple times.
-
-    Returns
-    -------
     
     '''
     def __repr__(self):
         return str(self.__dict__)
-    def __init__(self, module=None, name=None):
+    def __init__(self, module=None, name=None, hpc=False):
         ''' initialize SceneObj
         '''
         from bifacial_radiance import ModuleObj
@@ -3388,7 +3430,7 @@ def __init__(self, module=None, name=None):
         #self.offsetfromaxis = self.moduleDict['offsetfromaxis']
         
         self.modulefile = self.module.modulefile
-        self.hpc = False  #default False.  Set True by makeScene after sceneobj created.
+        self.hpc = hpc  #default False.  Set True by makeScene after sceneobj created.
         if name is None:
             self.name = 'Scene0'
         else:
@@ -3438,7 +3480,8 @@ def _makeSceneNxR(self, modulename=None, sceneDict=None, radname=None):
              Returns a `SceneObject` 'scene' with configuration details
 
         """
-
+        import copy
+        
         if modulename is None:
             modulename = self.module.name
 
@@ -3446,6 +3489,8 @@ def _makeSceneNxR(self, modulename=None, sceneDict=None, radname=None):
             print('makeScene(modulename, sceneDict, nMods, nRows).  sceneDict'
                   ' inputs: .tilt .azimuth .nMods .nRows' 
                   ' AND .tilt or .gcr ; AND .hub_height or .clearance_height')
+        else: sceneDict = copy.deepcopy(sceneDict)
+            
 
 
         if 'orientation' in sceneDict:
@@ -3469,8 +3514,8 @@ def _makeSceneNxR(self, modulename=None, sceneDict=None, radname=None):
             radname =  str(self.module.name).strip().replace(' ', '_')
 
         # loading variables
-        tilt = sceneDict['tilt']
-        azimuth = sceneDict['azimuth']
+        tilt = round(sceneDict['tilt'], 2)
+        azimuth = round(sceneDict['azimuth'], 2)
         nMods = sceneDict['nMods']
         nRows = sceneDict['nRows']
         axis_tilt = sceneDict['axis_tilt']
@@ -3563,6 +3608,50 @@ def _makeSceneNxR(self, modulename=None, sceneDict=None, radname=None):
 #        self.hub_height = hubheight
         return radfile
     
+    def appendtoScene(self, radfile=None, customObject=None,  text=''):
+        """
+        Appends to the `Scene radfile` in folder `\objects` the text command in Radiance
+        lingo created by the user.
+        Useful when using addCustomObject to the scene.
+
+        Parameters
+        ----------
+        radfile: str, optional
+            Directory and name of where .rad scene file is stored. Default: self.radfiles
+        customObject : str
+            Directory and name of custom object .rad file is stored, and any geometry
+            modifications needed for it.
+        text : str, optional 
+            Command to be appended to the radfile which specifies its position 
+            in the scene. Do not leave empty spaces at the end.
+
+
+        Returns
+        -------
+        Nothing, the radfile must already be created and assigned when running this.
+        
+        """
+        
+        # py2 and 3 compatible: binary write, encode text first
+
+        if not radfile: #by default, append to the first radfile in the list
+            if type(self.radfiles) == list:
+                radfile = self.radfiles[0]
+            elif type(self.radfiles) == str:
+                radfile = self.radfiles
+            else:
+                raise Exception('SceneObj.radfiles set improperly')
+
+        if customObject:
+            text2 = '\n!xform -rx 0 ' + text + ' ' + customObject
+            
+            debug = False
+            if debug:
+                print (text2)
+    
+            with open(radfile, 'a+') as f:
+                f.write(text2)
+    
    
     def showScene(self):
         """ 
@@ -3631,6 +3720,97 @@ def saveImage(self, filename=None, view=None):
         
         temp_dir.cleanup()
 
+    def addPiles(self, spacingPiles=6, pile_lenx=0.2, pile_leny=0.2, pile_height=None, debug=True):
+        '''
+        Function to add support piles at determined intervals throughout the rows.
+        TODO: enable functionality or check for scenes using 'clearance_height' ?
+        TODO: enable functionality with makeScene1axis (append radfile to each trackerdict entry)
+        
+        Parameters
+        ----------
+        spacingPiles : float
+            Distance between support piles.
+        pile_lenx : float
+            Dimension of the pile on the row-x direction, in meters. Default is 0.2
+        pile_leny: float
+            Dimension of the pile on the row-y direction, in meters. Defualt is 0.2
+        pile_height : float
+            Dimension of the pile on the z-direction, from the ground up. If None,
+            value of hub_height is used. Default: None.
+            
+        Returns
+        -------
+        None
+        
+        '''
+
+        nMods = self.sceneDict['nMods'] 
+        nRows = self.sceneDict['nRows']           
+        module = self.module
+
+        if pile_height is None:
+            pile_height = self.sceneDict['hub_height']
+            print("pile_height!", pile_height)
+            
+        rowlength = nMods * module.scenex
+        nPiles = np.floor(rowlength/spacingPiles) + 1
+        pitch = self.sceneDict['pitch']
+        azimuth=self.sceneDict['azimuth']
+        originx = self.sceneDict['originx']
+        originy = self.sceneDict['originy']
+    
+        text='! genbox black post {} {} {} '.format(pile_lenx, pile_leny, pile_height)
+        text+='| xform -t {} {} 0 '.format(pile_lenx/2.0, pile_leny/2.0)
+
+        if self.hpc:
+            radfilePiles = os.path.join(os.getcwd(), 'objects', 'Piles.rad')
+        else:
+            radfilePiles = os.path.join('objects','post.rad')
+
+        # py2 and 3 compatible: binary write, encode text first
+        with open(radfilePiles, 'wb') as f:
+            f.write(text.encode('ascii'))
+                    
+        
+        # create nPiles -element array along x, nRows along y. 1cm module gap.
+        text = '!xform -rx 0 -a %s -t %s 0 0 -a %s -t 0 %s 0 ' %(nPiles, spacingPiles, nRows, pitch)
+
+        # azimuth rotation of the entire shebang. Select the row to scan here based on y-translation.
+        # Modifying so center row is centered in the array. (i.e. 3 rows, row 2. 4 rows, row 2 too)
+        # Since the array is already centered on row 1, module 1, we need to increment by Nrows/2-1 and Nmods/2-1
+
+        text += (f'-i 1 -t {-self.module.scenex*(round(nMods/1.999)*1.0-1)} '
+                 f'{-pitch*(round(nRows / 1.999)*1.0-1)} 0 -rz {180-azimuth} '
+                 f'-t {originx} {originy} 0 ' )
+
+        filename = (f'Piles_{spacingPiles}_{pile_lenx}_{pile_leny}_{pile_height}.rad')
+
+        if self.hpc:
+            text += f'"{os.path.join(os.getcwd(), radfilePiles)}"'
+            scenePilesRad = os.path.join(os.getcwd(), 'objects', filename) 
+        else:
+            text += os.path.join(radfilePiles)
+            scenePilesRad = os.path.join('objects',filename ) 
+
+        # py2 and 3 compatible: binary write, encode text first
+        with open(scenePilesRad, 'wb') as f:
+            f.write(text.encode('ascii'))
+
+        try:
+            self.radfiles.append(scenePilesRad)
+            if debug:
+                print( "Piles Radfile Appended")
+        except:
+            #TODO: Manage situation where radfile was created with
+            #appendRadfile to False first..
+            self.radfiles=[]
+            self.radfiles.append(scenePilesRad)
+            
+        if debug:   
+            print("Piles Created and Appended Successfully.")
+
+        return
+
 # end of SceneObj
 
 
@@ -3952,7 +4132,7 @@ def _getTrackingAngles(self, azimuth=180, limit_angle=45,
             If no angledelta is specified, it is rounded to the nearest degree.
         '''
         import pvlib
-        import warnings
+        #import warnings
         from pvlib.irradiance import aoi 
         #import numpy as np
         #import pandas as pd
@@ -4124,6 +4304,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
@@ -4131,7 +4312,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
@@ -4304,7 +4510,7 @@ def _irrPlot(self, octfile, linepts, mytitle=None, plotflag=None,
         
         if mytitle is None:
             #mytitle = octfile[:-4]
-            mytitle = f'{octfile[:-4]}_Row{self.rowWanted}_Module{self.modWanted}'
+            mytitle = f'{octfile[:-4]}_{self.name}_Row{self.rowWanted}_Module{self.modWanted}'
 
         if plotflag is None:
             plotflag = False
@@ -4326,7 +4532,7 @@ def _irrPlot(self, octfile, linepts, mytitle=None, plotflag=None,
             return None
 
         keys = ['Wm2','x','y','z','r','g','b','mattype']
-        out = {key: [] for key in keys}
+        out = {key: np.empty(0) for key in keys}
         #out = dict.fromkeys(['Wm2','x','y','z','r','g','b','mattype','title'])
         out['title'] = mytitle
         print ('Linescan in process: %s' %(mytitle))
@@ -4356,14 +4562,14 @@ def _irrPlot(self, octfile, linepts, mytitle=None, plotflag=None,
         if temp_out is not None:
             for line in temp_out.splitlines():
                 temp = line.split('\t')
-                out['x'].append(float(temp[0]))
-                out['y'].append(float(temp[1]))
-                out['z'].append(float(temp[2]))
-                out['r'].append(float(temp[3]))
-                out['g'].append(float(temp[4]))
-                out['b'].append(float(temp[5]))
-                out['mattype'].append(temp[6])
-                out['Wm2'].append(sum([float(i) for i in temp[3:6]])/3.0)
+                out['x'] = np.append(out['x'],float(temp[0]))
+                out['y'] = np.append(out['y'],float(temp[1]))
+                out['z'] = np.append(out['z'],float(temp[2]))
+                out['r'] = np.append(out['r'],float(temp[3]))
+                out['g'] = np.append(out['g'],float(temp[4]))
+                out['b'] = np.append(out['b'],float(temp[5]))
+                out['mattype'] = np.append(out['mattype'],temp[6])
+                out['Wm2'] = np.append(out['Wm2'], sum([float(i) for i in temp[3:6]])/3.0)
 
 
             if plotflag is True:
@@ -4431,7 +4637,7 @@ def _saveResults(self, data=None, reardata=None, savefile=None, RGB = False):
             df = df.rename(columns={'Wm2Front':'Wm2Back','mattype':'rearMat'})
         # set attributes of analysis to equal columns of df
         for col in df.columns:
-            setattr(self, col, list(df[col]))    
+            setattr(self, col, np.array(df[col])) #cdeline: changed from list to np.array on 3/16/24   
         # only save a subset
         df = df.drop(columns=['rearX','rearY','backRatio'], errors='ignore')
         df.to_csv(os.path.join("results", savefile), sep = ',',
@@ -4593,10 +4799,10 @@ def _checkSensors(sensors):
         dtor = np.pi/180.0
 
         # Internal scene parameters are stored in scene.sceneDict. Load these into local variables
-        sceneDict = scene.sceneDict
-
-        azimuth = sceneDict['azimuth']
-        tilt = sceneDict['tilt']
+        sceneDict = scene.sceneDict      
+        
+        azimuth = round(sceneDict['azimuth'], 2)
+        tilt = round(sceneDict['tilt'], 2)
         nMods = sceneDict['nMods']
         nRows = sceneDict['nRows']
         originx = sceneDict['originx']
@@ -4721,15 +4927,24 @@ def _checkSensors(sensors):
     
         #IF cellmodule:
         #TODO: Add check for sensorsx_back
-        #temp = scene.moduleDict.get('cellModule') #error-free way to query it
-        #if ((temp is not None) and
+        
+        #if (getattr(scene.module, 'cellModule', None)):  #1/2 cell x and y offset to hit the center of a cell
+        #    xcell = scene.module.cellModule.xcell
+        #    ycell = scene.module.cellModule.ycell
+        #    xstartfront = xstartfront - xcell/2 * np.cos((azimuth)*dtor) + ycell/2 * np.sin((azimuth)*dtor) * np.cos((tilt)*dtor)
+        #    xstartback = xstartback  - xcell/2 * np.cos((azimuth)*dtor) + ycell/2 * np.sin((azimuth)*dtor) * np.cos((tilt)*dtor)
+        #    ystartfront = ystartfront - xcell/2 * np.sin((azimuth)*dtor) + ycell/2 * np.cos((azimuth)*dtor) * np.cos((tilt)*dtor)
+        #    ystartback = ystartback  - xcell/2 * np.sin((azimuth)*dtor) + ycell/2 * np.cos((azimuth)*dtor) * np.cos((tilt)*dtor)
+        #    zstartfront = zstartfront +xcell/2*np.sin((tilt)*dtor)
+        #    zstartback = zstartback +xcell/2*np.sin((tilt)*dtor)
+            
         if ((getattr(scene.module, 'cellModule', None)) and
             (sensorsy_back == scene.module.cellModule.numcellsy)):
             ycell = scene.module.cellModule.ycell
             xinc_back = -((sceney - ycell ) / (scene.module.cellModule.numcellsy-1)) * np.cos((tilt)*dtor) * np.sin((azimuth)*dtor)
             yinc_back = -((sceney - ycell) / (scene.module.cellModule.numcellsy-1)) * np.cos((tilt)*dtor) * np.cos((azimuth)*dtor)
             zinc_back = ((sceney - ycell) / (scene.module.cellModule.numcellsy-1)) * np.sin(tilt*dtor)
-            firstsensorxstartfront = xstartfront - scene.module.cellModule.ycell/2 * np.cos((tilt)*dtor) * np.sin((azimuth)*dtor)
+            firstsensorxstartfront = xstartfront - ycell/2 * np.cos((tilt)*dtor) * np.sin((azimuth)*dtor)
             firstsensorxstartback = xstartback  - ycell/2 * np.cos((tilt)*dtor) * np.sin((azimuth)*dtor)
             firstsensorystartfront = ystartfront - ycell/2 * np.cos((tilt)*dtor) * np.cos((azimuth)*dtor)
             firstsensorystartback = ystartback - ycell/2 * np.cos((tilt)*dtor) * np.cos((azimuth)*dtor)
@@ -4750,6 +4965,7 @@ def _checkSensors(sensors):
                 print("Warning: Cell-level module analysis for sensorsx > 1 not "+
                       "fine-tuned yet. Use at own risk, some of the x positions "+
                       "might fall in spacing between cells.")
+              
         else:        
             xinc_back = -(sceney/(sensorsy_back + 1.0)) * np.cos((tilt)*dtor) * np.sin((azimuth)*dtor)
             yinc_back = -(sceney/(sensorsy_back + 1.0)) * np.cos((tilt)*dtor) * np.cos((azimuth)*dtor)
@@ -4946,7 +5162,7 @@ def _checkPath(rowpath):  # create the file structure if it doesn't exist
     def analyzeField(self, octfile, scene, name=None, 
                    sensorsy=None, sensorsx=None ):
         '''
-        Function to Analyze every module in a field
+        Function to Analyze every module in a scene
 
         Parameters
         ----------
@@ -5068,6 +5284,80 @@ 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 : 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 afbf1f2d..36fbc12f 100644
--- a/bifacial_radiance/modelchain.py
+++ b/bifacial_radiance/modelchain.py
@@ -162,7 +162,7 @@ def runModelChain(simulationParamsDict, sceneParamsDict, timeControlParamsDict=N
     if simulationParamsDict['tracking'] == False and simulationParamsDict['cumulativeSky'] == True:
     # Fixed gencumsky condition
         scene = demo.makeScene(module=simulationParamsDict['moduletype'], 
-                               sceneDict=sceneParamsDict, appendtoScene=customObject)
+                               sceneDict=sceneParamsDict, customtext=customObject)
         demo.genCumSky(demo.gencumsky_metfile)  
         
         if pilesParamsDict:
@@ -207,7 +207,7 @@ def runModelChain(simulationParamsDict, sceneParamsDict, timeControlParamsDict=N
         trackerdict = demo.makeScene1axis(trackerdict=trackerdict,
                                           module=simulationParamsDict['moduletype'],
                                           sceneDict=sceneParamsDict,
-                                          cumulativesky=simulationParamsDict['cumulativeSky'], appendtoScene=customObject)
+                                          cumulativesky=simulationParamsDict['cumulativeSky'], customtext=customObject)
 
         trackerdict = demo.makeOct1axis(trackerdict=trackerdict)
 
@@ -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]
         
 
 
@@ -250,11 +251,11 @@ def runModelChain(simulationParamsDict, sceneParamsDict, timeControlParamsDict=N
     if simulationParamsDict.get('saveImage'):
         if hasattr(demo, 'trackerdict'):
             bestkey = _getDesiredIndex(demo.trackerdict)
-            scene = demo.trackerdict[bestkey]['scene']
+            scene = demo.trackerdict[bestkey]['scenes'][0] #TODO: select which sceneNum chosen?
             imagefilename = f'scene_{bestkey}'
             viewfile = None # just use default value for now. Improve later..
-        elif hasattr(demo, 'scene'):
-            scene = demo.scene
+        elif hasattr(demo, 'scenes'):
+            scene = demo.scenes[0]
             viewfile = None # just use default value for now. Improve later..
             imagefilename = 'scene0'
         try:
@@ -287,7 +288,7 @@ def _getDesiredIndex(trackerdict):
     
     df = pd.DataFrame.from_dict(trackerdict, orient='index')
     try:
-        df = df[df['scene'].notna()]
+        df = df[df['scenes'].notna()] 
     except KeyError:
         print('Error in _getDesiredIndex - trackerdict has no scene defined.')
         return df.index[-1]
diff --git a/bifacial_radiance/module.py b/bifacial_radiance/module.py
index db1857db..3e480067 100644
--- a/bifacial_radiance/module.py
+++ b/bifacial_radiance/module.py
@@ -16,6 +16,7 @@ def __repr__(self):
     def getDataDict(self):
         """
         return dictionary values from self.  Originally stored as self.data
+    
         """
         return dict(zip(self.keys,[getattr(self,k) for k in self.keys]))   
 
@@ -25,6 +26,7 @@ class ModuleObj(SuperClass):
     Does the heavy lifting of demo.makeModule()
     Module details are passed in and stored in module.json.
     Pass this object into makeScene or makeScene1axis.
+    
     """
 
     
@@ -35,8 +37,7 @@ def __init__(self, name=None, x=None, y=None, z=None, bifi=1, modulefile=None,
                  frameParams=None, omegaParams=None, hpc=False, Efficiency=None,
                  Temp_coeff=None, Peak_Power=None, Module_name=None):
         """
-        Add module details to the .JSON module config file module.json
-
+        Add module details to the .JSON module config file module.json.
         Module definitions assume that the module .rad file is defined
         with zero tilt, centered along the x-axis and y-axis for the center
         of rotation of the module (+X/2, -X/2, +Y/2, -Y/2 on each side).
@@ -63,11 +64,11 @@ def __init__(self, name=None, x=None, y=None, z=None, bifi=1, modulefile=None,
             extra details in the racking/module. Does not overwrite
             generated module (unlike "text"), but adds to it at the end.
         customObject : str
-                Append to the module object file a pre-genereated radfile. This 
-                must start with the file path\name. Does not overwrite
-                generated module (unlike "text"), but adds to it at the end.
-                It automatically inserts radiance's text before the object name so
-                its inserted into scene properly ('!xform -rz 0')
+            Append to the module object file a pre-genereated radfile. This 
+            must start with the file path\name. Does not overwrite
+            generated module (unlike "text"), but adds to it at the end.
+            It automatically inserts radiance's text before the object name so
+            its inserted into scene properly ('!xform -rz 0')
         rewriteModulefile : bool
             Default True. Will rewrite module file each time makeModule is run.
         numpanels : int
@@ -81,8 +82,8 @@ def __init__(self, name=None, x=None, y=None, z=None, bifi=1, modulefile=None,
             Distance behind the modules in the z-direction to the edge of the tube (m)
         glass : bool
             Add 5mm front and back glass to the module (glass/glass). Warning:
-                glass increases the analysis variability.  Recommend setting
-                accuracy='high' in AnalysisObj.analysis()
+            glass increases the analysis variability.  Recommend setting
+            accuracy='high' in AnalysisObj.analysis()
         cellModule : dict
             Dictionary with input parameters for creating a cell-level module.
             Shortcut for ModuleObj.addCellModule()
@@ -112,6 +113,7 @@ def __init__(self, name=None, x=None, y=None, z=None, bifi=1, modulefile=None,
             calculate performance.            
         Module name : string (default None) 
             Information about module's name.  
+            
         '"""
 
         self.keys = ['x', 'y', 'z', 'modulematerial', 'scenex','sceney',
@@ -204,6 +206,7 @@ def compileText(self, rewriteModulefile=True, json=True):
             Overwrite the .rad file for the module
         json : bool  (default True)
             Update the module.json file with ModuleObj attributes
+            
         """
         saveDict = self.getDataDict()
 
diff --git a/bifacial_radiance/performance.py b/bifacial_radiance/performance.py
index cf9f141d..01783372 100644
--- a/bifacial_radiance/performance.py
+++ b/bifacial_radiance/performance.py
@@ -322,10 +322,12 @@ 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:
+            dfst['sceneNum'] = data['sceneNum']
     else:
         if results is not None:
             Wm2Front = pd.DataFrame.from_dict(dict(zip(
@@ -339,10 +341,12 @@ 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:
+                dfst['sceneNum'] = results['sceneNum']
 
         else:
             print("Data or file not passed. Ending arrayResults")
@@ -436,10 +440,12 @@ 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:
+            dfst['sceneNum'] = data['sceneNum']
     else:
         if results is not None:
             Wm2Front = pd.DataFrame.from_dict(dict(zip(
@@ -451,10 +457,13 @@ 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 results:
+                dfst['sceneNum'] = results['sceneNum']
+                
 
         else:
             print("Data or file not passed. Ending calculateResults")
@@ -474,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/sphinx/source/manualapi.rst b/docs/sphinx/source/manualapi.rst
index d50e9397..b63fd288 100644
--- a/docs/sphinx/source/manualapi.rst
+++ b/docs/sphinx/source/manualapi.rst
@@ -108,6 +108,7 @@ Support methods for scene
    SceneObj.showScene
    RadianceObj.makeCustomObject
    RadianceObj.appendtoScene
+   SceneObj.appendtoScene
 
 Analysis
 ==========
@@ -122,15 +123,16 @@ Methods for irradiance calculations
    AnalysisObj.moduleAnalysis
    AnalysisObj.analysis
    RadianceObj.analysis1axis
-   RadianceObj.compileResults
+   RadianceObj.getResults
 
-Mismatch
---------
+Power and Mismatch
+------------------
 
 .. autosummary::
    :toctree: generated/
-   :caption: Mismatch Analysis
+   :caption: Power and Mismatch Analysis
    
+   AnalysisObj.calc_performance
    mismatch.analysisIrradianceandPowerMismatch
 
 Support
@@ -146,7 +148,7 @@ Input / Output
    load
    load.loadRadianceObj
    load.loadTrackerDict
-   RadianceObj.loadtrackerdict
+   RadianceObj.loadtrackerdict 
    load.read1Result
    load.cleanResult
    load.deepcleanResult
diff --git a/docs/sphinx/source/whatsnew/pending.rst b/docs/sphinx/source/whatsnew/pending.rst
index 7cacfeca..92634cc1 100644
--- a/docs/sphinx/source/whatsnew/pending.rst
+++ b/docs/sphinx/source/whatsnew/pending.rst
@@ -1,9 +1,15 @@
-.. _whatsnew_0430:
+.. _whatsnew_050:
 
-v0.4.3 (XX / XX / 2023)
+v0.5.0 (4 / XX / 2024)
 ------------------------
 Release of new version including ...
 
+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
 ~~~~~~~~~~~~
@@ -13,12 +19,19 @@ API Changes
 * To support multiple modules and row scans for 1axis simulations, outputs like Wm2Front are now stored in ``trackerdict``.``Results``  (:issue:`405`)(:pull:`408`)
 * ``mismatch.mad_fn`` has new functionality and input parameter `axis`. If a 2D matrix or dataframe is passed in as data, MAD is calculated along the row (default) or along the columns by passing 'axis=1' (:issue:`449`)(:pull:`485`)
 * 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)
+* 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/19 - East & West Facing Sheds.ipynb b/docs/tutorials/19 - East & West Facing Sheds.ipynb
index 0da7096a..3e5cff2d 100644
--- a/docs/tutorials/19 - East & West Facing Sheds.ipynb
+++ b/docs/tutorials/19 - East & West Facing Sheds.ipynb
@@ -40,7 +40,7 @@
     {
      "data": {
       "text/plain": [
-       "'0.3.4+406.g49eb243.dirty'"
+       "'0.4.2+191.g35f6f6b.dirty'"
       ]
      },
      "execution_count": 2,
@@ -62,7 +62,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "path = C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\Tutorial_01\n",
+      "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\Tutorial_01\n",
       "Making path: images\n",
       "Making path: objects\n",
       "Making path: results\n",
@@ -200,7 +200,15 @@
    "execution_count": 7,
    "id": "baefeae4",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Additional scene Scene1 created! See list of names with RadianceObj.scenes and sceneNames\n"
+     ]
+    }
+   ],
    "source": [
     "sceneDict = {'tilt':tilt,'pitch':pitch,'clearance_height':clearance_height,'azimuth':90, 'nMods': nMods, 'nRows': nRows, \n",
     "             'appendRadfile':True} \n",
@@ -253,12 +261,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 12,
    "id": "30db75b0",
    "metadata": {},
    "outputs": [],
    "source": [
-    "#!rvu -vf views\\front.vp -e .01 -pe 0.3 -vp 1 -45 40 -vd 0 0.7 -0.7 MultipleObj.oct"
+    "#!rvu -vf views\\front.vp -e .01 -pe 0.3 -vp 1 -45 40 -vd 0 0.7 -0.7 tutorial_19.oct"
    ]
   },
   {
@@ -271,12 +279,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 11,
    "id": "e8f92da0",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# !rvu -vf views\\front.vp -e .01 -pe 0.3 -vp -4 -29 3.5 -vd 0 1 0 MultipleObj.oct"
+    "# !rvu -vf views\\front.vp -e .01 -pe 0.3 -vp -4 -29 3.5 -vd 0 1 0 tutorial_19.oct"
    ]
   },
   {
@@ -291,7 +299,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 13,
    "id": "b07a3e03",
    "metadata": {},
    "outputs": [
@@ -299,12 +307,12 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Linescan in process: EastFacingShed_Front\n",
-      "Linescan in process: EastFacingShed_Back\n",
-      "Saved: results\\irr_EastFacingShed.csv\n",
-      "Linescan in process: WestFacingShed_Front\n",
-      "Linescan in process: WestFacingShed_Back\n",
-      "Saved: results\\irr_WestFacingShed.csv\n"
+      "Linescan in process: EastFacingShed_Row4_Module11_Front\n",
+      "Linescan in process: EastFacingShed_Row4_Module11_Back\n",
+      "Saved: results\\irr_EastFacingShed_Row4_Module11.csv\n",
+      "Linescan in process: WestFacingShed_Row4_Module11_Front\n",
+      "Linescan in process: WestFacingShed_Row4_Module11_Back\n",
+      "Saved: results\\irr_WestFacingShed_Row4_Module11.csv\n"
      ]
     }
    ],
diff --git a/docs/tutorials/19 - East & West Facing Sheds.py b/docs/tutorials/19 - East & West Facing Sheds.py
index 47c9f777..9d3e200d 100644
--- a/docs/tutorials/19 - East & West Facing Sheds.py
+++ b/docs/tutorials/19 - East & West Facing Sheds.py
@@ -116,25 +116,25 @@
 # 
 # Top view:
 
-# In[9]:
+# In[12]:
 
 
-#!rvu -vf views\front.vp -e .01 -pe 0.3 -vp 1 -45 40 -vd 0 0.7 -0.7 MultipleObj.oct
+#!rvu -vf views\front.vp -e .01 -pe 0.3 -vp 1 -45 40 -vd 0 0.7 -0.7 tutorial_19.oct
 
 
 # another view, close up:
 
-# In[10]:
+# In[11]:
 
 
-# !rvu -vf views\front.vp -e .01 -pe 0.3 -vp -4 -29 3.5 -vd 0 1 0 MultipleObj.oct
+# !rvu -vf views\front.vp -e .01 -pe 0.3 -vp -4 -29 3.5 -vd 0 1 0 tutorial_19.oct
 
 
 # ## Analysis
 # 
 # We have to analyze the East and the West shed independently. 
 
-# In[11]:
+# In[13]:
 
 
 sensorsy=4  # 1 per module. consider increasing the number but be careful with sensors in the space between modules.
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 @@
        "      <th>0</th>\n",
        "      <td>2</td>\n",
        "      <td>9</td>\n",
-       "      <td>12.46076</td>\n",
-       "      <td>1.597535e+06</td>\n",
-       "      <td>199064.935793</td>\n",
-       "      <td>[1827920.5291916667, 1822498.1192583335, 18181...</td>\n",
-       "      <td>[230386.02506666665, 224963.61513333334, 22059...</td>\n",
+       "      <td>12.499875</td>\n",
+       "      <td>1.597679e+06</td>\n",
+       "      <td>199707.820115</td>\n",
+       "      <td>[1830064.783375, 1822984.2250083336, 1818858.5...</td>\n",
+       "      <td>[232386.26733333335, 225305.70896666663, 22118...</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "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 @@
        "      <th>0</th>\n",
        "      <td>2</td>\n",
        "      <td>9</td>\n",
-       "      <td>12.46076</td>\n",
-       "      <td>1.597535e+06</td>\n",
-       "      <td>199064.935793</td>\n",
-       "      <td>[1827920.5291916667, 1822498.1192583335, 18181...</td>\n",
-       "      <td>[230386.02506666665, 224963.61513333334, 22059...</td>\n",
+       "      <td>12.499875</td>\n",
+       "      <td>1.597679e+06</td>\n",
+       "      <td>199707.820115</td>\n",
+       "      <td>[1830064.783375, 1822984.2250083336, 1818858.5...</td>\n",
+       "      <td>[232386.26733333335, 225305.70896666663, 22118...</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "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 @@
        "      <td>2.276605</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752540.066667</td>\n",
-       "      <td>121214.366667</td>\n",
-       "      <td>0.161074</td>\n",
+       "      <td>755845.200000</td>\n",
+       "      <td>121267.533333</td>\n",
+       "      <td>0.160440</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
@@ -696,9 +688,9 @@
        "      <td>2.307110</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752456.566667</td>\n",
-       "      <td>115861.666667</td>\n",
-       "      <td>0.153978</td>\n",
+       "      <td>755894.200000</td>\n",
+       "      <td>115769.133333</td>\n",
+       "      <td>0.153155</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
@@ -708,9 +700,9 @@
        "      <td>2.337614</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752351.366667</td>\n",
-       "      <td>110508.733333</td>\n",
-       "      <td>0.146884</td>\n",
+       "      <td>755954.500000</td>\n",
+       "      <td>110270.233333</td>\n",
+       "      <td>0.145869</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
@@ -720,9 +712,9 @@
        "      <td>2.368119</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752246.166667</td>\n",
-       "      <td>102652.933333</td>\n",
-       "      <td>0.136462</td>\n",
+       "      <td>756014.733333</td>\n",
+       "      <td>103706.033333</td>\n",
+       "      <td>0.137175</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
@@ -732,9 +724,9 @@
        "      <td>2.398623</td>\n",
        "      <td>a8.1.tube1.16</td>\n",
        "      <td>sky</td>\n",
-       "      <td>753053.400000</td>\n",
+       "      <td>757065.000000</td>\n",
        "      <td>96092.410000</td>\n",
-       "      <td>0.127604</td>\n",
+       "      <td>0.126928</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>5</th>\n",
@@ -744,9 +736,9 @@
        "      <td>2.429128</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753757.300000</td>\n",
-       "      <td>98375.906667</td>\n",
-       "      <td>0.130514</td>\n",
+       "      <td>756898.400000</td>\n",
+       "      <td>97647.053333</td>\n",
+       "      <td>0.129009</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>6</th>\n",
@@ -756,9 +748,9 @@
        "      <td>2.459632</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753670.433333</td>\n",
-       "      <td>98988.386667</td>\n",
-       "      <td>0.131342</td>\n",
+       "      <td>756822.600000</td>\n",
+       "      <td>98924.630000</td>\n",
+       "      <td>0.130710</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>7</th>\n",
@@ -768,9 +760,9 @@
        "      <td>2.490137</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753561.200000</td>\n",
-       "      <td>98590.556667</td>\n",
-       "      <td>0.130833</td>\n",
+       "      <td>756756.900000</td>\n",
+       "      <td>99018.040000</td>\n",
+       "      <td>0.130845</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>8</th>\n",
@@ -780,9 +772,9 @@
        "      <td>2.520641</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753451.900000</td>\n",
-       "      <td>100314.666667</td>\n",
-       "      <td>0.133140</td>\n",
+       "      <td>756691.200000</td>\n",
+       "      <td>100036.266667</td>\n",
+       "      <td>0.132202</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\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 @@
        "      <td>2.276605</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752540.066667</td>\n",
-       "      <td>121214.366667</td>\n",
-       "      <td>0.161074</td>\n",
+       "      <td>755845.200000</td>\n",
+       "      <td>121267.533333</td>\n",
+       "      <td>0.160440</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
@@ -925,9 +917,9 @@
        "      <td>2.307110</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752456.566667</td>\n",
-       "      <td>115861.666667</td>\n",
-       "      <td>0.153978</td>\n",
+       "      <td>755894.200000</td>\n",
+       "      <td>115769.133333</td>\n",
+       "      <td>0.153155</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
@@ -937,9 +929,9 @@
        "      <td>2.337614</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752351.366667</td>\n",
-       "      <td>110508.733333</td>\n",
-       "      <td>0.146884</td>\n",
+       "      <td>755954.500000</td>\n",
+       "      <td>110270.233333</td>\n",
+       "      <td>0.145869</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
@@ -949,9 +941,9 @@
        "      <td>2.368119</td>\n",
        "      <td>a8.1.a0.test-module.6457</td>\n",
        "      <td>a8.1.a0.test-module.2310</td>\n",
-       "      <td>752246.166667</td>\n",
-       "      <td>102652.933333</td>\n",
-       "      <td>0.136462</td>\n",
+       "      <td>756014.733333</td>\n",
+       "      <td>103706.033333</td>\n",
+       "      <td>0.137175</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
@@ -963,7 +955,7 @@
        "      <td>sky</td>\n",
        "      <td>NaN</td>\n",
        "      <td>NaN</td>\n",
-       "      <td>0.127604</td>\n",
+       "      <td>0.126928</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>5</th>\n",
@@ -973,9 +965,9 @@
        "      <td>2.429128</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753757.300000</td>\n",
-       "      <td>98375.906667</td>\n",
-       "      <td>0.130514</td>\n",
+       "      <td>756898.400000</td>\n",
+       "      <td>97647.053333</td>\n",
+       "      <td>0.129009</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>6</th>\n",
@@ -985,9 +977,9 @@
        "      <td>2.459632</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753670.433333</td>\n",
-       "      <td>98988.386667</td>\n",
-       "      <td>0.131342</td>\n",
+       "      <td>756822.600000</td>\n",
+       "      <td>98924.630000</td>\n",
+       "      <td>0.130710</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>7</th>\n",
@@ -997,9 +989,9 @@
        "      <td>2.490137</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753561.200000</td>\n",
-       "      <td>98590.556667</td>\n",
-       "      <td>0.130833</td>\n",
+       "      <td>756756.900000</td>\n",
+       "      <td>99018.040000</td>\n",
+       "      <td>0.130845</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>8</th>\n",
@@ -1009,9 +1001,9 @@
        "      <td>2.520641</td>\n",
        "      <td>a8.1.a1.test-module.6457</td>\n",
        "      <td>a8.1.a1.test-module.2310</td>\n",
-       "      <td>753451.900000</td>\n",
-       "      <td>100314.666667</td>\n",
-       "      <td>0.133140</td>\n",
+       "      <td>756691.200000</td>\n",
+       "      <td>100036.266667</td>\n",
+       "      <td>0.132202</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\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": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>row</th>\n",
+       "      <th>module</th>\n",
+       "      <th>BGG</th>\n",
+       "      <th>Gfront_mean</th>\n",
+       "      <th>Grear_mean</th>\n",
+       "      <th>POA_eff</th>\n",
+       "      <th>Wm2Back</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2</td>\n",
+       "      <td>9</td>\n",
+       "      <td>9.732236</td>\n",
+       "      <td>210385.187133</td>\n",
+       "      <td>20475.182191</td>\n",
+       "      <td>[234479.62299000003, 233179.63291333336, 23242...</td>\n",
+       "      <td>[24094.435856666663, 22794.445780000002, 22040...</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
       "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 <u> bifacial gain </u> 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..f21d49ba 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",
@@ -178,7 +172,7 @@
    "source": [
     "demo = bifacial_radiance.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",
+    "epwfile = demo.getEPW(lat=lat, lon=lon) #r'EPWs\\USA_VA_Richmond.724010_TMY2.epw'#\n",
     "\n",
     "starttime = '01_13';  endtime = '01_14'\n",
     "metdata = demo.readWeatherFile(weatherFile=epwfile, starttime=starttime, endtime=endtime) \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",
@@ -360,15 +356,24 @@
    "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "{'dhi': 200, 'ghi': 249, 'surf_azm': 90.0, 'surf_tilt': 21.2, 'theta': -21.2}\n"
-     ]
+     "data": {
+      "text/plain": [
+       "{'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}"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "pprint.pprint(trackerdict['2021-01-13_1200'])\n"
+    "display(trackerdict['2021-01-13_1200'])\n"
    ]
   },
   {
@@ -434,14 +439,25 @@
      "text": [
       "Trackerdict option of hours are:  ['2021-01-13_0800', '2021-01-13_0900', '2021-01-13_1000', '2021-01-13_1100', '2021-01-13_1200', '2021-01-13_1300', '2021-01-13_1400', '2021-01-13_1500', '2021-01-13_1600', '2021-01-13_1700', '2021-01-14_0800', '2021-01-14_0900', '2021-01-14_1000', '2021-01-14_1100', '2021-01-14_1200', '2021-01-14_1300', '2021-01-14_1400', '2021-01-14_1500', '2021-01-14_1600']\n",
       "\n",
-      "Contents of trackerdict for sample hour:\n",
-      "{'dhi': 22,\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"
+      "Contents of trackerdict for sample hour:\n"
      ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "{'surf_azm': 90.0,\n",
+       " 'surf_tilt': 3.74,\n",
+       " 'theta': -3.74,\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'}"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
     }
    ],
    "source": [
@@ -449,7 +465,7 @@
     "print (\"Trackerdict option of hours are: \", trackerkeys)\n",
     "print (\"\")\n",
     "print (\"Contents of trackerdict for sample hour:\")\n",
-    "pprint.pprint(trackerdict[trackerkeys[0]])"
+    "display(trackerdict[trackerkeys[0]])"
    ]
   },
   {
@@ -504,23 +520,26 @@
    "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "{'clearance_height': 2.166802445305938,\n",
-      " 'dhi': 22,\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",
-      " '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"
-     ]
+     "data": {
+      "text/plain": [
+       "{'surf_azm': 90.0,\n",
+       " 'surf_tilt': 3.74,\n",
+       " 'theta': -3.74,\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\\\\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}}]}"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "pprint.pprint(trackerdict[trackerkeys[0]])"
+    "display(trackerdict[trackerkeys[0]])"
    ]
   },
   {
@@ -536,6 +555,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 +573,7 @@
     }
    ],
    "source": [
-    "pprint.pprint(demo.trackerdict[trackerkeys[5]]['scene'].__dict__)"
+    "pprint.pprint(demo.trackerdict[trackerkeys[5]]['scenes'][0].__dict__)"
    ]
   },
   {
@@ -585,30 +605,12 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "['2021-01-13_0800',\n",
-      " '2021-01-13_0900',\n",
-      " '2021-01-13_1000',\n",
-      " '2021-01-13_1100',\n",
-      " '2021-01-13_1200',\n",
-      " '2021-01-13_1300',\n",
-      " '2021-01-13_1400',\n",
-      " '2021-01-13_1500',\n",
-      " '2021-01-13_1600',\n",
-      " '2021-01-13_1700',\n",
-      " '2021-01-14_0800',\n",
-      " '2021-01-14_0900',\n",
-      " '2021-01-14_1000',\n",
-      " '2021-01-14_1100',\n",
-      " '2021-01-14_1200',\n",
-      " '2021-01-14_1300',\n",
-      " '2021-01-14_1400',\n",
-      " '2021-01-14_1500',\n",
-      " '2021-01-14_1600']\n"
+      "['2021-01-13_0800', '2021-01-13_0900', '2021-01-13_1000', '2021-01-13_1100', '2021-01-13_1200', '2021-01-13_1300', '2021-01-13_1400', '2021-01-13_1500', '2021-01-13_1600', '2021-01-13_1700', '2021-01-14_0800', '2021-01-14_0900', '2021-01-14_1000', '2021-01-14_1100', '2021-01-14_1200', '2021-01-14_1300', '2021-01-14_1400', '2021-01-14_1500', '2021-01-14_1600']\n"
      ]
     }
    ],
    "source": [
-    "pprint.pprint(trackerkeys)"
+    "print(trackerkeys)"
    ]
   },
   {
@@ -623,20 +625,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: 22.067053518518517. Wm2Back: 2.840680814814815\n",
       "\n",
       "\n",
-      "Hourly bifi gain: 0.12\n"
+      "Hourly bifi gain: 0.129\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])))"
    ]
   },
   {
@@ -656,51 +659,53 @@
      "output_type": "stream",
      "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",
-      " 'dhi': 22,\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",
-      " '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"
+      " Contents of trackerdict for sample hour after analysis1axis: \n"
      ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "{'surf_azm': 90.0,\n",
+       " 'surf_tilt': 3.74,\n",
+       " 'theta': -3.74,\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\\\\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",
+       " 'octfile': '1axis_2021-01-13_0800.oct',\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': array([ 1.717843 ,  1.290356 ,  0.862868 ,  0.4353804,  0.0078927,\n",
+       "         -0.4195949, -0.8470826, -1.27457  , -1.702058 ]), 'y': array([ 1.051876e-16,  7.901150e-17,  5.283543e-17,  2.665936e-17,\n",
+       "          4.832888e-19, -2.569278e-17, -5.186885e-17, -7.804492e-17,\n",
+       "         -1.042210e-16]), 'z': array([2.308966, 2.33691 , 2.364854, 2.392798, 2.420742, 2.448686,\n",
+       "         2.47663 , 2.504575, 2.532519]), 'rearZ': array([2.287013, 2.314957, 2.342901, 2.370845, 2.398789, 2.426733,\n",
+       "         2.454677, 2.482621, 2.510566]), 'mattype': array(['a9.3.a2.2.0.cellPVmodule.6457', 'a9.3.a2.4.0.cellPVmodule.6457',\n",
+       "         'a9.3.a2.7.0.cellPVmodule.6457', 'a9.3.a2.9.0.cellPVmodule.6457',\n",
+       "         'a9.3.octtube1a.6457', 'a9.3.a2.2.1.cellPVmodule.6457',\n",
+       "         'a9.3.a2.4.1.cellPVmodule.6457', 'a9.3.a2.7.1.cellPVmodule.6457',\n",
+       "         'a9.3.a2.9.1.cellPVmodule.6457'], dtype=object), 'rearMat': array(['a9.3.a2.2.0.cellPVmodule.2310', 'a9.3.a2.4.0.cellPVmodule.2310',\n",
+       "         'a9.3.a2.7.0.cellPVmodule.2310', 'a9.3.a2.9.0.cellPVmodule.2310',\n",
+       "         'sky', 'a9.3.a2.2.1.cellPVmodule.2310',\n",
+       "         'a9.3.a2.4.1.cellPVmodule.2310', 'a9.3.a2.7.1.cellPVmodule.2310',\n",
+       "         'a9.3.a2.9.1.cellPVmodule.2310'], dtype=object), 'Wm2Front': array([23.67997   , 23.67861   , 23.67765   , 23.67669   ,  8.765825  ,\n",
+       "         23.78095333, 23.78089333, 23.78126333, 23.78162667]), 'Wm2Back': array([2.939871  , 2.891747  , 2.83848   , 2.79775867, 2.990579  ,\n",
+       "         2.70512667, 2.76626867, 2.80034967, 2.83594667]), 'Back/FrontRatio': array([0.12414487, 0.12211971, 0.11987508, 0.11816012, 0.34112452,\n",
+       "         0.11374703, 0.11631827, 0.1177495 , 0.11924447]), 'backRatio': array([0.12414487, 0.12211971, 0.11987508, 0.11816012, 0.34112452,\n",
+       "         0.11374703, 0.11631827, 0.1177495 , 0.11924447]), 'rearX': array([ 1.716408  ,  1.288921  ,  0.861433  ,  0.4339453 ,  0.00645767,\n",
+       "         -0.42103   , -0.8485176 , -1.276005  , -1.703493  ]), 'rearY': array([ 1.050997e-16,  7.892362e-17,  5.274756e-17,  2.657149e-17,\n",
+       "          3.954181e-19, -2.578065e-17, -5.195672e-17, -7.813279e-17,\n",
+       "         -1.043089e-16])}]}"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
     }
    ],
    "source": [
     "print (\"\\n Contents of trackerdict for sample hour after analysis1axis: \")\n",
-    "pprint.pprint(trackerdict[trackerkeys[0]])\n"
+    "display(trackerdict[trackerkeys[0]])\n"
    ]
   },
   {
@@ -712,122 +717,65 @@
      "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",
-      "             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",
+      "{'Back/FrontRatio': array([0.12414487, 0.12211971, 0.11987508, 0.11816012, 0.34112452,\n",
+      "       0.11374703, 0.11631827, 0.1177495 , 0.11924447]),\n",
+      " 'Wm2Back': array([2.939871  , 2.891747  , 2.83848   , 2.79775867, 2.990579  ,\n",
+      "       2.70512667, 2.76626867, 2.80034967, 2.83594667]),\n",
+      " 'Wm2Front': array([23.67997   , 23.67861   , 23.67765   , 23.67669   ,  8.765825  ,\n",
+      "       23.78095333, 23.78089333, 23.78126333, 23.78162667]),\n",
+      " 'backRatio': array([0.12414487, 0.12211971, 0.11987508, 0.11816012, 0.34112452,\n",
+      "       0.11374703, 0.11631827, 0.1177495 , 0.11924447]),\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",
-      "             'a9.3.a2.7.0.cellPVmodule.6457',\n",
-      "             'a9.3.a2.9.0.cellPVmodule.6457',\n",
-      "             'a9.3.octtube1a.6457',\n",
-      "             'a9.3.a2.2.1.cellPVmodule.6457',\n",
-      "             '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",
+      " 'mattype': array(['a9.3.a2.2.0.cellPVmodule.6457', 'a9.3.a2.4.0.cellPVmodule.6457',\n",
+      "       'a9.3.a2.7.0.cellPVmodule.6457', 'a9.3.a2.9.0.cellPVmodule.6457',\n",
+      "       'a9.3.octtube1a.6457', 'a9.3.a2.2.1.cellPVmodule.6457',\n",
+      "       'a9.3.a2.4.1.cellPVmodule.6457', 'a9.3.a2.7.1.cellPVmodule.6457',\n",
+      "       'a9.3.a2.9.1.cellPVmodule.6457'], dtype=object),\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",
-      " '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",
-      "             'a9.3.a2.9.0.cellPVmodule.2310',\n",
-      "             'sky',\n",
-      "             'a9.3.a2.2.1.cellPVmodule.2310',\n",
-      "             'a9.3.a2.4.1.cellPVmodule.2310',\n",
-      "             'a9.3.a2.7.1.cellPVmodule.2310',\n",
-      "             'a9.3.a2.9.1.cellPVmodule.2310'],\n",
-      " 'rearX': [1.716408,\n",
-      "           1.288921,\n",
-      "           0.861433,\n",
-      "           0.4339453,\n",
-      "           0.006457668,\n",
-      "           -0.42103,\n",
-      "           -0.8485176,\n",
-      "           -1.276005,\n",
-      "           -1.703493],\n",
-      " 'rearY': [1.050997e-16,\n",
-      "           7.892362e-17,\n",
-      "           5.274756e-17,\n",
-      "           2.657149e-17,\n",
-      "           3.954181e-19,\n",
-      "           -2.578065e-17,\n",
-      "           -5.195672e-17,\n",
-      "           -7.813279e-17,\n",
-      "           -1.043089e-16],\n",
-      " 'rearZ': [2.287013,\n",
-      "           2.314957,\n",
-      "           2.342901,\n",
-      "           2.370845,\n",
-      "           2.398789,\n",
-      "           2.426733,\n",
-      "           2.454677,\n",
-      "           2.482621,\n",
-      "           2.510566],\n",
-      " 'x': [1.717843,\n",
-      "       1.290356,\n",
-      "       0.862868,\n",
-      "       0.4353804,\n",
-      "       0.007892705,\n",
-      "       -0.4195949,\n",
-      "       -0.8470826,\n",
-      "       -1.27457,\n",
-      "       -1.702058],\n",
-      " 'y': [1.051876e-16,\n",
-      "       7.90115e-17,\n",
-      "       5.283543e-17,\n",
-      "       2.665936e-17,\n",
-      "       4.832888e-19,\n",
-      "       -2.569278e-17,\n",
-      "       -5.186885e-17,\n",
-      "       -7.804492e-17,\n",
-      "       -1.04221e-16],\n",
-      " 'z': [2.308966,\n",
-      "       2.33691,\n",
-      "       2.364854,\n",
-      "       2.392798,\n",
-      "       2.420742,\n",
-      "       2.448686,\n",
-      "       2.47663,\n",
-      "       2.504575,\n",
-      "       2.532519]}\n"
+      " 'power_data': None,\n",
+      " 'rearMat': array(['a9.3.a2.2.0.cellPVmodule.2310', 'a9.3.a2.4.0.cellPVmodule.2310',\n",
+      "       'a9.3.a2.7.0.cellPVmodule.2310', 'a9.3.a2.9.0.cellPVmodule.2310',\n",
+      "       'sky', 'a9.3.a2.2.1.cellPVmodule.2310',\n",
+      "       'a9.3.a2.4.1.cellPVmodule.2310', 'a9.3.a2.7.1.cellPVmodule.2310',\n",
+      "       'a9.3.a2.9.1.cellPVmodule.2310'], dtype=object),\n",
+      " 'rearX': array([ 1.716408  ,  1.288921  ,  0.861433  ,  0.4339453 ,  0.00645767,\n",
+      "       -0.42103   , -0.8485176 , -1.276005  , -1.703493  ]),\n",
+      " 'rearY': array([ 1.050997e-16,  7.892362e-17,  5.274756e-17,  2.657149e-17,\n",
+      "        3.954181e-19, -2.578065e-17, -5.195672e-17, -7.813279e-17,\n",
+      "       -1.043089e-16]),\n",
+      " 'rearZ': array([2.287013, 2.314957, 2.342901, 2.370845, 2.398789, 2.426733,\n",
+      "       2.454677, 2.482621, 2.510566]),\n",
+      " 'rowWanted': 4,\n",
+      " 'sceneNum': 0,\n",
+      " 'x': array([ 1.717843 ,  1.290356 ,  0.862868 ,  0.4353804,  0.0078927,\n",
+      "       -0.4195949, -0.8470826, -1.27457  , -1.702058 ]),\n",
+      " 'y': array([ 1.051876e-16,  7.901150e-17,  5.283543e-17,  2.665936e-17,\n",
+      "        4.832888e-19, -2.569278e-17, -5.186885e-17, -7.804492e-17,\n",
+      "       -1.042210e-16]),\n",
+      " 'z': array([2.308966, 2.33691 , 2.364854, 2.392798, 2.420742, 2.448686,\n",
+      "       2.47663 , 2.504575, 2.532519])}\n"
      ]
     }
    ],
    "source": [
-    "pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'].__dict__)"
+    "pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'][0].__dict__)"
    ]
   },
   {
@@ -863,83 +811,230 @@
       "\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.51641629629631. Wm2Back: 7.291871296296296\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.58739259259258. Wm2Back: 31.099514814814817\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(results.Wm2Back.sum().sum() / results.Wm2Front.sum().sum()))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
      "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>name</th>\n",
+       "      <th>modNum</th>\n",
+       "      <th>rowNum</th>\n",
+       "      <th>sceneNum</th>\n",
+       "      <th>mattype</th>\n",
+       "      <th>rearMat</th>\n",
+       "      <th>Wm2Front</th>\n",
+       "      <th>Wm2Back</th>\n",
+       "      <th>backRatio</th>\n",
+       "      <th>surf_azm</th>\n",
+       "      <th>surf_tilt</th>\n",
+       "      <th>theta</th>\n",
+       "      <th>temp_air</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2021-01-13_0800</td>\n",
+       "      <td>1axis_2021-01-13_0800_Scene0</td>\n",
+       "      <td>10</td>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[23.679969999999997, 23.678610000000003, 23.67...</td>\n",
+       "      <td>[2.939871, 2.891747, 2.83848, 2.79775866666666...</td>\n",
+       "      <td>[0.12414487244399196, 0.12211970551879865, 0.1...</td>\n",
+       "      <td>90.0</td>\n",
+       "      <td>3.74</td>\n",
+       "      <td>-3.74</td>\n",
+       "      <td>0.2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2021-01-13_0900</td>\n",
+       "      <td>1axis_2021-01-13_0900_Scene0</td>\n",
+       "      <td>10</td>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[95.78907666666667, 96.84124333333334, 97.4501...</td>\n",
+       "      <td>[7.184324, 6.991456333333333, 6.79992966666666...</td>\n",
+       "      <td>[0.07500071249551492, 0.07219428312155649, 0.0...</td>\n",
+       "      <td>90.0</td>\n",
+       "      <td>18.64</td>\n",
+       "      <td>-18.64</td>\n",
+       "      <td>1.5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2021-01-13_1300</td>\n",
+       "      <td>1axis_2021-01-13_1300_Scene0</td>\n",
+       "      <td>10</td>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.6457, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[a9.3.a2.2.0.cellPVmodule.2310, a9.3.a2.4.0.ce...</td>\n",
+       "      <td>[218.63139999999999, 218.62869999999998, 218.6...</td>\n",
+       "      <td>[27.857256666666668, 26.70738333333333, 25.788...</td>\n",
+       "      <td>[0.12741595786656812, 0.12215807519899323, 0.1...</td>\n",
+       "      <td>90.0</td>\n",
+       "      <td>-5.31</td>\n",
+       "      <td>5.31</td>\n",
+       "      <td>8.3</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
       "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.679969999999997, 23.678610000000003, 23.67...   \n",
+       "1  [95.78907666666667, 96.84124333333334, 97.4501...   \n",
+       "2  [218.63139999999999, 218.62869999999998, 218.6...   \n",
+       "\n",
+       "                                             Wm2Back  \\\n",
+       "0  [2.939871, 2.891747, 2.83848, 2.79775866666666...   \n",
+       "1  [7.184324, 6.991456333333333, 6.79992966666666...   \n",
+       "2  [27.857256666666668, 26.70738333333333, 25.788...   \n",
+       "\n",
+       "                                           backRatio  surf_azm  surf_tilt  \\\n",
+       "0  [0.12414487244399196, 0.12211970551879865, 0.1...      90.0       3.74   \n",
+       "1  [0.07500071249551492, 0.07219428312155649, 0.0...      90.0      18.64   \n",
+       "2  [0.12741595786656812, 0.12215807519899323, 0.1...      90.0      -5.31   \n",
+       "\n",
+       "   theta  temp_air  \n",
+       "0  -3.74       0.2  \n",
+       "1 -18.64       1.5  \n",
+       "2   5.31       8.3  "
       ]
      },
-     "execution_count": 19,
      "metadata": {},
-     "output_type": "execute_result"
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "demo.Wm2Back"
+    "display(results)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "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:"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "To print the specific bifacial gain for a specific hour, you can use the following:"
+    "To print the specific bifacial gain for a specific hour, you can use the following: (for results index 0)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
+   "execution_count": 22,
+   "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.129\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"
    ]
   },
   {
@@ -960,7 +1055,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -977,14 +1072,117 @@
       "Created 1axis_2021-01-13_1300.oct\n",
       "Created 1axis_2021-01-13_1400.oct\n",
       "Created 1axis_2021-01-13_1500.oct\n",
-      "Created 1axis_2021-01-13_1600.oct\n"
+      "Created 1axis_2021-01-13_1600.oct\n",
+      "Created 1axis_2021-01-13_1700.oct\n",
+      "Created 1axis_2021-01-14_0800.oct\n",
+      "Created 1axis_2021-01-14_0900.oct\n",
+      "Created 1axis_2021-01-14_1000.oct\n",
+      "Created 1axis_2021-01-14_1100.oct\n",
+      "Created 1axis_2021-01-14_1200.oct\n",
+      "Created 1axis_2021-01-14_1300.oct\n",
+      "Created 1axis_2021-01-14_1400.oct\n",
+      "Created 1axis_2021-01-14_1500.oct\n",
+      "Created 1axis_2021-01-14_1600.oct\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: 22.078515185185186. Wm2Back: 2.844403518518519\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.54943925925926. Wm2Back: 7.2513077407407405\n",
+      "Linescan in process: 1axis_2021-01-13_1000_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1000_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1000_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1000. Wm2Front: 313.0645037037037. Wm2Back: 31.475854814814813\n",
+      "Linescan in process: 1axis_2021-01-13_1100_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1100_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1100_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1100. Wm2Front: 236.5036814814815. Wm2Back: 31.601739259259254\n",
+      "Linescan in process: 1axis_2021-01-13_1200_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1200_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1200_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1200. Wm2Front: 241.5027740740741. Wm2Back: 30.836978518518517\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.56771481481485. Wm2Back: 31.07875740740741\n",
+      "Linescan in process: 1axis_2021-01-13_1400_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1400_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1400_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1400. Wm2Front: 218.81344444444443. Wm2Back: 38.38157222222222\n",
+      "Linescan in process: 1axis_2021-01-13_1500_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1500_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1500_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1500. Wm2Front: 144.91132962962965. Wm2Back: 32.36866777777777\n",
+      "Linescan in process: 1axis_2021-01-13_1600_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1600_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1600_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1600. Wm2Front: 77.87218. Wm2Back: 15.592371629629632\n",
+      "Linescan in process: 1axis_2021-01-13_1700_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-13_1700_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-13_1700_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-13_1700. Wm2Front: 30.10186666666667. Wm2Back: 4.477147666666666\n",
+      "Linescan in process: 1axis_2021-01-14_0800_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_0800_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_0800_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_0800. Wm2Front: 28.093931481481476. Wm2Back: 2.91312337037037\n",
+      "Linescan in process: 1axis_2021-01-14_0900_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_0900_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_0900_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_0900. Wm2Front: 271.72558296296296. Wm2Back: 9.266965407407408\n",
+      "Linescan in process: 1axis_2021-01-14_1000_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1000_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1000_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1000. Wm2Front: 597.4815333333332. Wm2Back: 24.50305074074074\n",
+      "Linescan in process: 1axis_2021-01-14_1100_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1100_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1100_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1100. Wm2Front: 602.843025925926. Wm2Back: 33.20144777777778\n",
+      "Linescan in process: 1axis_2021-01-14_1200_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1200_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1200_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1200. Wm2Front: 557.5128925925926. Wm2Back: 43.70417485185185\n",
+      "Linescan in process: 1axis_2021-01-14_1300_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1300_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1300_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1300. Wm2Front: 548.5335037037037. Wm2Back: 47.97507240740741\n",
+      "Linescan in process: 1axis_2021-01-14_1400_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1400_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1400_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1400. Wm2Front: 530.5721074074074. Wm2Back: 38.06890296296296\n",
+      "Linescan in process: 1axis_2021-01-14_1500_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1500_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1500_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1500. Wm2Front: 437.71434074074074. Wm2Back: 31.79298037037037\n",
+      "Linescan in process: 1axis_2021-01-14_1600_Scene0_Row4_Module10_Front\n",
+      "Linescan in process: 1axis_2021-01-14_1600_Scene0_Row4_Module10_Back\n",
+      "Saved: results\\irr_1axis_2021-01-14_1600_Scene0_Row4_Module10.csv\n",
+      "Index: 2021-01-14_1600. Wm2Front: 327.05903333333333. Wm2Back: 19.64573\n"
      ]
     }
    ],
    "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"
+    "results = demo.analysis1axis()\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Accumulated hourly bifi gain for all the trackerdict: 0.0888\n"
+     ]
+    }
+   ],
+   "source": [
+    "print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(\n",
+    "    demo.getResults().loc[:,'Wm2Back'].sum().sum() / demo.getResults().loc[:,'Wm2Front'].sum().sum()))"
    ]
   },
   {
@@ -1079,7 +1277,8 @@
     "demo.gendaylit1axis()\n",
     "demo.makeScene1axis(module=mymodule,sceneDict=sceneDict) #makeScene creates a .rad file with 20 modules per row, 7 rows.\n",
     "demo.makeOct1axis()\n",
-    "demo.analysis1axis()"
+    "demo.analysis1axis()\n",
+    "demo.getResults()"
    ]
   }
  ],
diff --git a/docs/tutorials/3 - Single Axis Tracking Hourly.py b/docs/tutorials/3 - Single Axis Tracking Hourly.py
index 091bb360..0210e729 100644
--- a/docs/tutorials/3 - Single Axis Tracking Hourly.py
+++ b/docs/tutorials/3 - Single Axis Tracking Hourly.py
@@ -111,7 +111,7 @@
 
 demo = bifacial_radiance.RadianceObj(simulationName, path = str(testfolder))  # Adding a simulation name. This is optional.
 demo.setGround(albedo) 
-epwfile = demo.getEPW(lat=lat, lon=lon) 
+epwfile = demo.getEPW(lat=lat, lon=lon) #r'EPWs\USA_VA_Richmond.724010_TMY2.epw'#
 
 starttime = '01_13';  endtime = '01_14'
 metdata = demo.readWeatherFile(weatherFile=epwfile, starttime=starttime, endtime=endtime) 
@@ -204,7 +204,7 @@
 # In[8]:
 
 
-pprint.pprint(trackerdict['2021-01-13_1200'])
+display(trackerdict['2021-01-13_1200'])
 
 
 # All of the following functions add up elements to trackerdictionary to keep track (ba-dum tupzz) of the Scene and simulation parameters. In advanced journals we will explore the inner structure of trackerdict. For now, just now it exists :)
@@ -234,7 +234,7 @@
 print ("Trackerdict option of hours are: ", trackerkeys)
 print ("")
 print ("Contents of trackerdict for sample hour:")
-pprint.pprint(trackerdict[trackerkeys[0]])
+display(trackerdict[trackerkeys[0]])
 
 
 # <a id='step8'></a>
@@ -258,13 +258,13 @@
 # In[12]:
 
 
-pprint.pprint(trackerdict[trackerkeys[0]])
+display(trackerdict[trackerkeys[0]])
 
 
 # In[13]:
 
 
-pprint.pprint(demo.trackerdict[trackerkeys[5]]['scene'].__dict__)
+pprint.pprint(demo.trackerdict[trackerkeys[5]]['scenes'][0].__dict__)
 
 
 # <a id='step9a'></a>
@@ -280,7 +280,7 @@
 # In[14]:
 
 
-pprint.pprint(trackerkeys)
+print(trackerkeys)
 
 
 # In[15]:
@@ -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
@@ -297,13 +298,13 @@
 
 
 print ("\n Contents of trackerdict for sample hour after analysis1axis: ")
-pprint.pprint(trackerdict[trackerkeys[0]])
+display(trackerdict[trackerkeys[0]])
 
 
 # In[17]:
 
 
-pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'].__dict__)
+pprint.pprint(trackerdict[trackerkeys[0]]['AnalysisObj'][0].__dict__)
 
 
 # <a id='step9b'></a>
@@ -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()
+
 
+# In[20]:
 
-demo.Wm2Back
 
+print('Accumulated hourly bifi gain: {:0.3}'.format(results.Wm2Back.sum().sum() / results.Wm2Front.sum().sum()))
 
-# To print the specific bifacial gain for a specific hour, you can use the following:
 
-# In[20]:
+# In[21]:
+
+
+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[22]:
 
 
-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}")
 
 
 # <a id='step9c'></a>
@@ -346,12 +358,18 @@
 # This takes considerably more time, depending on the number of entries on the trackerdictionary. If no **starttime** and **endtime** were specified on STEP **readWeatherFile, this will run ALL of the hours in the year (~4000 hours).**
 # 
 
-# In[ ]:
+# In[25]:
 
 
 demo.makeOct1axis()
 results = demo.analysis1axis()
-print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(sum(demo.Wm2Back) / sum(demo.Wm2Front)))
+
+
+# In[30]:
+
+
+print('Accumulated hourly bifi gain for all the trackerdict: {:0.3}'.format(
+    demo.getResults().loc[:,'Wm2Back'].sum().sum() / demo.getResults().loc[:,'Wm2Front'].sum().sum()))
 
 
 # <div class="alert alert-warning">
@@ -429,4 +447,5 @@
 demo.makeScene1axis(module=mymodule,sceneDict=sceneDict) #makeScene creates a .rad file with 20 modules per row, 7 rows.
 demo.makeOct1axis()
 demo.analysis1axis()
+demo.getResults()
 
diff --git a/docs/tutorials/7 - Multiple Scene Objects.ipynb b/docs/tutorials/7 - Multiple Scene Objects.ipynb
index 4af5739c..980f1c22 100644
--- a/docs/tutorials/7 - Multiple Scene Objects.ipynb
+++ b/docs/tutorials/7 - Multiple Scene Objects.ipynb
@@ -50,7 +50,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Your simulation will be stored in C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_07\n"
+      "Your simulation will be stored in C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_07\n"
      ]
     }
    ],
@@ -96,7 +96,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "path = C:\\Users\\sayala\\Documents\\GitHub\\bifacial_radiance\\bifacial_radiance\\TEMP\\Tutorial_07\n",
+      "path = C:\\Users\\cdeline\\Documents\\Python Scripts\\Bifacial_Radiance\\bifacial_radiance\\TEMP\\Tutorial_07\n",
       "Loading albedo, 1 value(s), 0.620 avg\n",
       "1 nonzero albedo values.\n",
       "Getting weather file: USA_VA_Richmond.724010_TMY2.epw\n",
@@ -107,7 +107,9 @@
       "Calculating Sun position for Metdata that is right-labeled  with a delta of -30 mins. i.e. 12 is 11:30 sunpos\n",
       "\n",
       "Module Name: test-moduleA\n",
-      "Module test-moduleA updated in module.json\n"
+      "Module test-moduleA updated in module.json\n",
+      "Pre-existing .rad file objects\\test-moduleA.rad will be overwritten\n",
+      "\n"
      ]
     }
    ],
@@ -121,7 +123,7 @@
     "demo.gendaylit(timestamp)  \n",
     "module_type = 'test-moduleA' \n",
     "mymodule = demo.makeModule(name=module_type,y=1,x=1.7)\n",
-    "sceneDict = {'tilt':10,'pitch':1.5,'clearance_height':0.2,'azimuth':180, 'nMods': 5, 'nRows': 2, 'appendRadfile':True} \n",
+    "sceneDict = {'tilt':10,'pitch':1.5,'clearance_height':0.2,'azimuth':180, 'nMods': 5, 'nRows': 2} \n",
     "sceneObj1 = demo.makeScene(mymodule, sceneDict)  "
    ]
   },
@@ -142,7 +144,7 @@
      "output_type": "stream",
      "text": [
       "SceneObj1 modulefile: objects\\test-moduleA.rad\n",
-      "SceneObj1 SceneFile: objects\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad\n",
+      "SceneObj1 SceneFile: ['objects\\\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad']\n",
       "SceneObj1 GCR: 0.67\n",
       "FileLists: \n",
       " ['materials\\\\ground.rad', 'skies\\\\sky2_37.5_-77.33_2001-06-17_1300.rad', 'objects\\\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad']\n"
@@ -184,8 +186,21 @@
      "text": [
       "\n",
       "Module Name: test-moduleB\n",
-      "Module test-moduleB updated in module.json\n"
+      "Module test-moduleB updated in module.json\n",
+      "Pre-existing .rad file objects\\test-moduleB.rad will be overwritten\n",
+      "\n",
+      "Additional scene Scene1 created! See list of names with RadianceObj.scenes and sceneNames\n"
      ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "['Scene0', 'Scene1']"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
@@ -193,7 +208,9 @@
     "              'nMods': 5, 'nRows': 1, 'originx': 0, 'originy': 3.5, 'appendRadfile':True} \n",
     "module_type2='test-moduleB'\n",
     "mymodule2 = demo.makeModule(name=module_type2,x=1,y=1.6, numpanels=2, ygap=0.15)\n",
-    "sceneObj2 = demo.makeScene(mymodule2, sceneDict2)  \n"
+    "sceneObj2 = demo.makeScene(mymodule2, sceneDict2)  \n",
+    "\n",
+    "demo.sceneNames()"
    ]
   },
   {
@@ -206,11 +223,11 @@
      "output_type": "stream",
      "text": [
       "SceneObj1 modulefile: objects\\test-moduleA.rad\n",
-      "SceneObj1 SceneFile: objects\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad\n",
+      "SceneObj1 SceneFile: ['objects\\\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad']\n",
       "SceneObj1 GCR: 0.67\n",
       "\n",
       "SceneObj2 modulefile: objects\\test-moduleB.rad\n",
-      "SceneObj2 SceneFile: objects\\test-moduleB_C_1.00000_rtr_5.00000_tilt_30.00000_5modsx1rows_origin0,3.5.rad\n",
+      "SceneObj2 SceneFile: ['objects\\\\test-moduleB_C_1.00000_rtr_5.00000_tilt_30.00000_5modsx1rows_origin0,3.5.rad']\n",
       "SceneObj2 GCR: 0.67\n",
       "NEW FileLists: \n",
       " ['materials\\\\ground.rad', 'skies\\\\sky2_37.5_-77.33_2001-06-17_1300.rad', 'objects\\\\test-moduleA_C_0.20000_rtr_1.50000_tilt_10.00000_5modsx2rows_origin0,0.rad', 'objects\\\\test-moduleB_C_1.00000_rtr_5.00000_tilt_30.00000_5modsx1rows_origin0,3.5.rad']\n"
@@ -271,8 +288,8 @@
     "# NOTE: offsetting translation by 0.1 so the center of the marker (with sides of 0.2) is at the desired coordinate.\n",
     "name='Post1'\n",
     "text='! genbox black originMarker 0.2 0.2 1 | xform -t -0.1 -0.1 0'\n",
-    "customObject = demo.makeCustomObject(name,text)\n",
-    "demo.appendtoScene(sceneObj1.radfiles, customObject, '!xform -rz 0')"
+    "customRadfile = demo.makeCustomObject(name,text)\n",
+    "sceneObj1.appendtoScene(customRadfile)"
    ]
   },
   {
@@ -370,7 +387,6 @@
        " 'azimuth': 180,\n",
        " 'nMods': 5,\n",
        " 'nRows': 2,\n",
-       " 'appendRadfile': True,\n",
        " 'axis_tilt': 0,\n",
        " 'originx': 0,\n",
        " 'originy': 0}"
@@ -423,10 +439,10 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Linescan in process: FirstObj_Front\n",
-      "Linescan in process: FirstObj_Back\n",
-      "Saved: results\\irr_FirstObj.csv\n",
-      "Annual bifacial ratio First Set of Panels: 0.129 \n"
+      "Linescan in process: FirstObj_Row1_Module3_Front\n",
+      "Linescan in process: FirstObj_Row1_Module3_Back\n",
+      "Saved: results\\irr_FirstObj_Row1_Module3.csv\n",
+      "Annual bifacial ratio First Set of Panels: 0.130 \n"
      ]
     }
    ],
@@ -486,10 +502,10 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Linescan in process: SecondObj_Front\n",
-      "Linescan in process: SecondObj_Back\n",
-      "Saved: results\\irr_SecondObj.csv\n",
-      "Annual bifacial ratio Second Set of Panels: 0.292 \n"
+      "Linescan in process: SecondObj_Row1_Module4_Front\n",
+      "Linescan in process: SecondObj_Row1_Module4_Back\n",
+      "Saved: results\\irr_SecondObj_Row1_Module4.csv\n",
+      "Annual bifacial ratio Second Set of Panels: 0.293 \n"
      ]
     }
    ],
diff --git a/docs/tutorials/7 - Multiple Scene Objects.py b/docs/tutorials/7 - Multiple Scene Objects.py
index 93ef8d62..1698f9a3 100644
--- a/docs/tutorials/7 - Multiple Scene Objects.py
+++ b/docs/tutorials/7 - Multiple Scene Objects.py
@@ -64,7 +64,7 @@
 demo.gendaylit(timestamp)  
 module_type = 'test-moduleA' 
 mymodule = demo.makeModule(name=module_type,y=1,x=1.7)
-sceneDict = {'tilt':10,'pitch':1.5,'clearance_height':0.2,'azimuth':180, 'nMods': 5, 'nRows': 2, 'appendRadfile':True} 
+sceneDict = {'tilt':10,'pitch':1.5,'clearance_height':0.2,'azimuth':180, 'nMods': 5, 'nRows': 2} 
 sceneObj1 = demo.makeScene(mymodule, sceneDict)  
 
 
@@ -96,6 +96,8 @@
 mymodule2 = demo.makeModule(name=module_type2,x=1,y=1.6, numpanels=2, ygap=0.15)
 sceneObj2 = demo.makeScene(mymodule2, sceneDict2)  
 
+demo.sceneNames()
+
 
 # In[5]:
 
@@ -130,8 +132,8 @@
 # NOTE: offsetting translation by 0.1 so the center of the marker (with sides of 0.2) is at the desired coordinate.
 name='Post1'
 text='! genbox black originMarker 0.2 0.2 1 | xform -t -0.1 -0.1 0'
-customObject = demo.makeCustomObject(name,text)
-demo.appendtoScene(sceneObj1.radfiles, customObject, '!xform -rz 0')
+customRadfile = demo.makeCustomObject(name,text)
+sceneObj1.appendtoScene(customRadfile)
 
 
 # <a id='step3'></a>
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?


Test patch:
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index ac5e4c52..e84ca817 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
@@ -69,6 +69,7 @@ jobs:
         SMARTSPATH: /home/runner/work/bifacial_radiance/bifacial_radiance/SMARTS_295_Linux
 
     - name: Coveralls
+      if: matrix.python-version == 3.11 && ${{ matrix.env }} == '-r requirements.txt .[all]'
       run: |
         coveralls --service=github
       env: 
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..a822bc8b
--- /dev/null
+++ b/docs/development/(development) Trackerdict multi-object test.ipynb
@@ -0,0 +1,1189 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Multi-scene, custom object functionality test \n",
+    "## 1-up and 2-up tracker rows"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1. Initial setup"
+   ]
+  },
+  {
+   "attachments": {
+    "image-4.png": {
+     "image/png": "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"
+    }
+   },
+   "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",
+    "simfolder = str(Path().resolve().parent / 'TEMP' /  'multiTracker')\n",
+    "TESTDIR = str(Path().resolve().parent.parent / 'tests' )\n",
+    "\n",
+    "if not os.path.exists(simfolder):\n",
+    "    os.makedirs(simfolder)\n",
+    "    \n",
+    "print (\"Your simulation will be stored in %s\" % simfolder)\n"
+   ]
+  },
+  {
+   "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+287.g9b05e18.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(simfolder))  # 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 and cell-Module (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",
+      "New module created. x=1m,  y=2m\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=2, xgap=xgap, ygap=ygap, \n",
+    "                           zgap=zgap, numpanels=1) \n",
+    "print(f'New module created. x={module2.x}m,  y={module2.y}m')\n"
+   ]
+  },
+  {
+   "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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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": "markdown",
+   "metadata": {},
+   "source": [
+    "The first scene object:"
+   ]
+  },
+  {
+   "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": "markdown",
+   "metadata": {},
+   "source": [
+    "The second scene object:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'module': {'x': 1, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_0.49289_rtr_5.00000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.4928932188134524, '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": 17,
+   "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",
+    "# Here we add an extra 90 degree rotation, just to demonstrate how it works.\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='-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": 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 -rx 0   -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": 19,
+   "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": 20,
+   "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:2869: 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.3357166666667. Wm2Back: 57.21226833333334\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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 4.2 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0800__C_1.12676_rtr_5.00000_tilt_4.20000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 4.2, 'clearance_height': 1.1267618028723683, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 21.19 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_0900__C_0.83854_rtr_5.00000_tilt_21.19000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.19, 'clearance_height': 0.8385381566251979, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1000__C_0.49289_rtr_5.00000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.4928932188134524, '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': array([ 0.5904342, -0.4193143]), 'y': array([-3.138, -3.138]), 'z': array([4.580686, 5.590434]), 'rearZ': array([4.565129, 5.574878]), 'mattype': array(['a6.0.a2.8.0.cellPVmodule.6457', 'a6.0.a2.3.1.cellPVmodule.6457'],\n",
+       "         dtype=object), 'rearMat': array(['a6.0.a2.8.0.cellPVmodule.2310', 'a6.0.a2.3.1.cellPVmodule.2310'],\n",
+       "         dtype=object), 'Wm2Front': array([332.8122    , 333.85923333]), 'Wm2Back': array([59.78191   , 54.64262667]), 'Back/FrontRatio': array([0.17962602, 0.16366917]), 'backRatio': array([0.17962602, 0.16366917]), 'rearX': array([ 0.5748778, -0.4348707]), 'rearY': array([-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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 44.14 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1100__C_0.50359_rtr_5.00000_tilt_44.14000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 44.14, 'clearance_height': 0.5035860263044872, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 21.2 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1200__C_0.83838_rtr_5.00000_tilt_21.20000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.2, 'clearance_height': 0.8383754299179077, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -5.31 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1300__C_1.10746_rtr_5.00000_tilt_-5.31000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -5.31, 'clearance_height': 1.1074556272169378, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -30.81 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1400__C_0.68781_rtr_5.00000_tilt_-30.81000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -30.81, 'clearance_height': 0.6878072261456081, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1500__C_0.49289_rtr_5.00000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.4928932188134524, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1600__C_0.49289_rtr_5.00000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.4928932188134524, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -12.17 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-13_1700__C_0.98919_rtr_5.00000_tilt_-12.17000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -12.17, 'clearance_height': 0.9891870062546713, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 4.29 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0800__C_1.12520_rtr_5.00000_tilt_4.29000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 4.29, 'clearance_height': 1.1251953159530994, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 21.3 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_0900__C_0.83675_rtr_5.00000_tilt_21.30000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.3, 'clearance_height': 0.8367487695270216, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1000__C_0.49289_rtr_5.00000_tilt_45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 45.0, 'clearance_height': 0.4928932188134524, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 44.13 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1100__C_0.50371_rtr_5.00000_tilt_44.13000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 44.13, 'clearance_height': 0.5037112887688527, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx 21.27 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1200__C_0.83724_rtr_5.00000_tilt_21.27000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': 21.27, 'clearance_height': 0.8372366516844232, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -5.13 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1300__C_1.11058_rtr_5.00000_tilt_-5.13000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -5.13, 'clearance_height': 1.1105841894605315, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -30.56 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1400__C_0.69156_rtr_5.00000_tilt_-30.56000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -30.56, 'clearance_height': 0.6915596195463772, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1500__C_0.49289_rtr_5.00000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.4928932188134524, '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, 'y': 2, 'z': 0.02, 'modulematerial': 'black', 'scenex': 1.01, 'sceney': 2.0, 'scenez': 0.05, 'numpanels': 1, 'bifi': 1, 'text': '! genbox black module2 1 2 0.02 | xform -t -0.5 -1.0 0 -a 1 -t 0 2.1 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.4, 'text': '!xform -rx -45.0 -t 0 0 1.2 -a 20 -t 1.01 0 0 -a 1 -t 0 5.0 0 -i 1 -t -9.09 -0.0 0 -rz 90.0 -t 6 0 0 objects\\\\module2.rad', 'radfiles': 'objects\\\\1axis2021-01-14_1600__C_0.49289_rtr_5.00000_tilt_-45.00000_20modsx1rows_origin6,0.rad', 'sceneDict': {'gcr': 0.4, 'nMods': 20, 'nRows': 1, 'originx': 6, 'tilt': -45.0, 'clearance_height': 0.4928932188134524, 'azimuth': 90.0, 'modulez': 0.02, 'axis_tilt': 0, 'originy': 0}}],\n",
+       "  'AnalysisObj': []}}"
+      ]
+     },
+     "execution_count": 20,
+     "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",
+    "# Use append=False to overwrite any existing scans that get saved in the trackerdict.\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": 21,
+   "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": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>name</th>\n",
+       "      <th>modNum</th>\n",
+       "      <th>rowNum</th>\n",
+       "      <th>sceneNum</th>\n",
+       "      <th>mattype</th>\n",
+       "      <th>rearMat</th>\n",
+       "      <th>Wm2Front</th>\n",
+       "      <th>Wm2Back</th>\n",
+       "      <th>backRatio</th>\n",
+       "      <th>...</th>\n",
+       "      <th>Pout_raw</th>\n",
+       "      <th>Pout_Gfront</th>\n",
+       "      <th>BGG</th>\n",
+       "      <th>BGE</th>\n",
+       "      <th>Mismatch</th>\n",
+       "      <th>Pout</th>\n",
+       "      <th>Wind Speed</th>\n",
+       "      <th>DNI</th>\n",
+       "      <th>DHI</th>\n",
+       "      <th>GHI</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2021-01-13_1000</td>\n",
+       "      <td>1axis_2021-01-13_1000cdeline_Scene0</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>[a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce...</td>\n",
+       "      <td>[a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce...</td>\n",
+       "      <td>[332.8122, 333.85923333333335]</td>\n",
+       "      <td>[59.78191, 54.64262666666667]</td>\n",
+       "      <td>[0.1796260184391725, 0.1636691681459118]</td>\n",
+       "      <td>...</td>\n",
+       "      <td>163.759198</td>\n",
+       "      <td>140.113985</td>\n",
+       "      <td>17.163558</td>\n",
+       "      <td>16.875698</td>\n",
+       "      <td>0.000358</td>\n",
+       "      <td>163.758612</td>\n",
+       "      <td>3.6</td>\n",
+       "      <td>228</td>\n",
+       "      <td>144</td>\n",
+       "      <td>219</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>1 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "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  [332.8122, 333.85923333333335]  [59.78191, 54.64262666666667]   \n",
+       "\n",
+       "                                  backRatio  ...    Pout_raw Pout_Gfront  \\\n",
+       "0  [0.1796260184391725, 0.1636691681459118]  ...  163.759198  140.113985   \n",
+       "\n",
+       "         BGG        BGE  Mismatch        Pout  Wind Speed  DNI  DHI  GHI  \n",
+       "0  17.163558  16.875698  0.000358  163.758612         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 be appended to, so set `append=True`\n",
+    "#### This is because by default, re-running analysis1axis will just over-write results to the trackerdict.  So you'll be losing \n",
+    "#### results from previous analysis.  To start your results fresh, pass `append=False` into `analysis1axis`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "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: 332.8296666666667. Wm2Back: 42.90085500000001\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: 332.04395. Wm2Back: 39.13814333333333\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": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>name</th>\n",
+       "      <th>modNum</th>\n",
+       "      <th>rowNum</th>\n",
+       "      <th>sceneNum</th>\n",
+       "      <th>mattype</th>\n",
+       "      <th>rearMat</th>\n",
+       "      <th>Wm2Front</th>\n",
+       "      <th>Wm2Back</th>\n",
+       "      <th>backRatio</th>\n",
+       "      <th>...</th>\n",
+       "      <th>Pout_raw</th>\n",
+       "      <th>Pout_Gfront</th>\n",
+       "      <th>BGG</th>\n",
+       "      <th>BGE</th>\n",
+       "      <th>Mismatch</th>\n",
+       "      <th>Pout</th>\n",
+       "      <th>Wind Speed</th>\n",
+       "      <th>DNI</th>\n",
+       "      <th>DHI</th>\n",
+       "      <th>GHI</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2021-01-13_1000</td>\n",
+       "      <td>1axis_2021-01-13_1000cdeline_Scene0</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>[a6.0.a2.8.0.cellPVmodule.6457, a6.0.a2.3.1.ce...</td>\n",
+       "      <td>[a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce...</td>\n",
+       "      <td>[332.8122, 333.85923333333335]</td>\n",
+       "      <td>[59.78191, 54.64262666666667]</td>\n",
+       "      <td>[0.1796260184391725, 0.1636691681459118]</td>\n",
+       "      <td>...</td>\n",
+       "      <td>89.085974</td>\n",
+       "      <td>79.175260</td>\n",
+       "      <td>12.872668</td>\n",
+       "      <td>12.517439</td>\n",
+       "      <td>0.000278</td>\n",
+       "      <td>89.085726</td>\n",
+       "      <td>3.6</td>\n",
+       "      <td>228</td>\n",
+       "      <td>144</td>\n",
+       "      <td>219</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2021-01-13_1000</td>\n",
+       "      <td>1axis_2021-01-13_1000_Scene1</td>\n",
+       "      <td>3</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>[a2.0.a0.module2.6457, a2.0.a0.module2.6457]</td>\n",
+       "      <td>[a2.0.a0.module2.2310, a2.0.a0.module2.2310]</td>\n",
+       "      <td>[332.44620000000003, 333.21313333333336]</td>\n",
+       "      <td>[42.530750000000005, 43.27096]</td>\n",
+       "      <td>[0.12793234534687012, 0.12985931769200668]</td>\n",
+       "      <td>...</td>\n",
+       "      <td>86.501710</td>\n",
+       "      <td>79.057663</td>\n",
+       "      <td>9.667300</td>\n",
+       "      <td>9.415971</td>\n",
+       "      <td>0.000041</td>\n",
+       "      <td>86.501674</td>\n",
+       "      <td>3.6</td>\n",
+       "      <td>228</td>\n",
+       "      <td>144</td>\n",
+       "      <td>219</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2021-01-13_1000</td>\n",
+       "      <td>1axis_2021-01-13_1000_Scene1</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>[a6.0.a0.module2.6457, a6.0.a0.module2.6457]</td>\n",
+       "      <td>[a6.0.a0.module2.2310, a6.0.a0.module2.2310]</td>\n",
+       "      <td>[331.9835666666667, 332.10433333333333]</td>\n",
+       "      <td>[38.679293333333334, 39.59699333333333]</td>\n",
+       "      <td>[0.1165093116276389, 0.11923022414575296]</td>\n",
+       "      <td>...</td>\n",
+       "      <td>85.670410</td>\n",
+       "      <td>78.875046</td>\n",
+       "      <td>8.840278</td>\n",
+       "      <td>8.615354</td>\n",
+       "      <td>0.000051</td>\n",
+       "      <td>85.670366</td>\n",
+       "      <td>3.6</td>\n",
+       "      <td>228</td>\n",
+       "      <td>144</td>\n",
+       "      <td>219</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>3 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "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       [a2.0.a0.module2.6457, a2.0.a0.module2.6457]   \n",
+       "2        1       [a6.0.a0.module2.6457, a6.0.a0.module2.6457]   \n",
+       "\n",
+       "                                             rearMat  \\\n",
+       "0  [a6.0.a2.8.0.cellPVmodule.2310, a6.0.a2.3.1.ce...   \n",
+       "1       [a2.0.a0.module2.2310, a2.0.a0.module2.2310]   \n",
+       "2       [a6.0.a0.module2.2310, a6.0.a0.module2.2310]   \n",
+       "\n",
+       "                                   Wm2Front  \\\n",
+       "0            [332.8122, 333.85923333333335]   \n",
+       "1  [332.44620000000003, 333.21313333333336]   \n",
+       "2   [331.9835666666667, 332.10433333333333]   \n",
+       "\n",
+       "                                   Wm2Back  \\\n",
+       "0            [59.78191, 54.64262666666667]   \n",
+       "1           [42.530750000000005, 43.27096]   \n",
+       "2  [38.679293333333334, 39.59699333333333]   \n",
+       "\n",
+       "                                    backRatio  ...   Pout_raw Pout_Gfront  \\\n",
+       "0    [0.1796260184391725, 0.1636691681459118]  ...  89.085974   79.175260   \n",
+       "1  [0.12793234534687012, 0.12985931769200668]  ...  86.501710   79.057663   \n",
+       "2   [0.1165093116276389, 0.11923022414575296]  ...  85.670410   78.875046   \n",
+       "\n",
+       "         BGG        BGE  Mismatch       Pout  Wind Speed  DNI  DHI  GHI  \n",
+       "0  12.872668  12.517439  0.000278  89.085726         3.6  228  144  219  \n",
+       "1   9.667300   9.415971  0.000041  86.501674         3.6  228  144  219  \n",
+       "2   8.840278   8.615354  0.000051  85.670366         3.6  228  144  219  \n",
+       "\n",
+       "[3 rows x 26 columns]"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# re-run calculateResult with a different module type.  \n",
+    "# At the moment, using different module parameters for different scenes is not supported.\n",
+    "# The first analysis1axis was a single module for Scene0, and the \n",
+    "# second appended analysis1axis was for a 2-module scan of Scene 1.\n",
+    "\n",
+    "\n",
+    "CECMod = pd.read_csv(os.path.join(TESTDIR, 'Canadian_Solar_Inc__CS5P_220M.csv'),\n",
+    "                     index_col=0).iloc[:,0]\n",
+    "\n",
+    "results_1up = demo.calculateResults(CECMod=CECMod, bifacialityfactor = 0.75)\n",
+    "display(results_1up)"
+   ]
+  }
+ ],
+ "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/tests/test_bifacial_radiance.py b/tests/test_bifacial_radiance.py
index e83510f2..e2f21b15 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'))
@@ -149,8 +150,8 @@ def test_Radiance_1axis_gendaylit_modelchains():
     #V 0.2.5 fixed the gcr passed to set1axis. (since gcr was not being passd to set1axis, gcr was default 0.33 default). 
     assert(demo2.CompiledResults.Gfront_mean[0] == pytest.approx(205.0, 0.01) ) # was 214 in v0.2.3  # was 205 in early v0.2.4  
     assert(demo2.CompiledResults.Grear_mean[0] == pytest.approx(43.0, 0.1) )
-    assert demo2.trackerdict['2001-01-01_1100']['scene'].text.__len__() == 132
-    assert demo2.trackerdict['2001-01-01_1100']['scene'].text[23:28] == " 2.0 "
+    assert demo2.trackerdict['2001-01-01_1100']['scenes'][0].text.__len__() == 132
+    assert demo2.trackerdict['2001-01-01_1100']['scenes'][0].text[23:28] == " 2.0 "
     demo2.exportTrackerDict(savefile = 'results\exportedTrackerDict.csv', reindex=True)
 
 """    
@@ -203,7 +204,7 @@ def test_1axis_gencumSky():
     
     demo = bifacial_radiance.RadianceObj(name)  # Create a RadianceObj 'object'
     demo.setGround(albedo) # input albedo number or material name like 'concrete'.  To see options, run this without any input.
-    metdata = demo.readWeatherFile(weatherFile=MET_FILENAME, starttime='01_01_01', endtime = '01_01_23', coerce_year=2001) # read in the EPW weather data from above
+    metdata = demo.readWeatherFile(weatherFile=MET_FILENAME, starttime='01_01_01', endtime = '02_01_23', coerce_year=2001) # read in the EPW weather data from above
     moduleText = '! genbox black test-module 0.98 1.95 0.02 | xform -t -0.49 -2.0 0 -a 2 -t 0 2.05 0'
     module=demo.makeModule(name='test-module',x=0.984,y=1.95, numpanels = 2, ygap = 0.1, text=moduleText)
     assert module.text == moduleText
@@ -219,34 +220,52 @@ def test_1axis_gencumSky():
     # Removing all of this other tests for hub_height and height since it's ben identified that
     # a new module to handle hub_height and height in sceneDict needs to be implemented
     # instead of checking inside of makeScene, makeSceneNxR, and makeScene1axis
-    assert trackerdict[-5.0]['radfile'][0:7] == 'objects' # 'objects\\1axis-5.0_1.825_11.42_5.0_10x3_origin0,0.rad'
+    assert trackerdict[-5.0]['scenes'][0].radfiles[0:7] == 'objects' # 'objects\\1axis-5.0_1.825_11.42_5.0_10x3_origin0,0.rad'
+    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')
+    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')
+    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, 'clearance_height':hub_height, 'nMods':10, 'nRows':3}  # testing height filter too
-    trackerdict = demo.makeScene1axis(sceneDict=sceneDict, module = 'test-module')
+    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')
-    demo.exportTrackerDict(trackerdict, savefile = 'results\exportedTrackerDict2.csv')
-    assert trackerdict[-5.0]['radfile'][0:7] == 'objects' 
+    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'
+    
+    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]]
-    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) 
-    assert trackerdict[-5.0]['Results'][0]['AnalysisObj'].x[0] == -10.76304
+    minitrackerdict[list(trackerdict)[0]]['scenes'] = [trackerdict[list(trackerdict)[0]]['scenes'][3]]
+
+    trackerdict = demo.makeOct1axis(trackerdict=minitrackerdict, singleindex=-5) # just run this for one timestep: -5 degrees
+    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 ) 
-    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')
+    
+    CECMod = pd.read_csv(os.path.join(TESTDIR, 'Canadian_Solar_Inc__CS5P_220M.csv'),
+                         index_col=0).iloc[:,0]
+    results = demo.calculateResults(CECMod=CECMod)
+    pd.testing.assert_frame_equal(results, demo.CompiledResults)
+    assert results.iloc[0].Grear_mean == pytest.approx(210, abs=30) #gencumsky has lots of variability
+    assert results.__len__() == 4
+    assert results.iloc[3].Grear_mean == pytest.approx(np.mean(results.iloc[3].Wm2Back), abs=0.1)
+    
 
 def test_SceneObj_makeSceneNxR_lowtilt():
     # test _makeSceneNxR(tilt, height, pitch, azimuth = 180, nMods = 20, nRows = 7, radname = None)
@@ -515,7 +534,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) 
@@ -599,16 +618,54 @@ def test_customTrackerAngles():
     assert trackerdict[-20]['count'] == 37
     
 def test_addPiles():
-    # Set up initial test with demo.addPiles, but switch to scene.addPiles 
-    # when it gets refactored
+    # Test adding piles to the scene.
+    # TODO: implement and test functionality in makescene1axis
     name = "_addPiles"
     demo = bifacial_radiance.RadianceObj(name)
     module = demo.makeModule(name='test', x=1.59, y=0.95)
     sceneDict = {'tilt':10,'pitch':1.5,'hub_height':.5,
                  'azimuth':180, 'nMods': 10, 'nRows': 3}
     scene = demo.makeScene(module=module, sceneDict=sceneDict)
-    demo.addPiles()
-    assert demo.radfiles[1][-23:] == 'Piles_6_0.2_0.2_0.5.rad'
-    with open(demo.radfiles[1], 'r') as f:
+    scene.addPiles()
+    assert scene.radfiles[1][-23:] == 'Piles_6_0.2_0.2_0.5.rad'
+    with open(scene.radfiles[1], 'r') as f:
         assert f.read()[:87] == '!xform -rx 0 -a 3.0 -t 6 0 0 -a 3 ' + \
-        '-t 0 1.5 0 -i 1 -t -6.4 -1.5 0 -rz 0 -t 0 0 0 objects'
\ No newline at end of file
+        '-t 0 1.5 0 -i 1 -t -6.4 -1.5 0 -rz 0 -t 0 0 0 objects'
+        
+def test_customObj():
+    # Test using appendtoScene to make custom objects.
+    name = "_customObj"
+    demo = bifacial_radiance.RadianceObj(name)  # Create a RadianceObj 'object'
+    module = demo.makeModule(name='test', x=1.59, y=0.95)
+    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'   
+    customObject = demo.makeCustomObject(objname,text)
+    demo.appendtoScene(scene.radfiles[0], customObject, '-rz 0')
+    scene.appendtoScene(customObject=customObject, text='-t 1 1 0')
+    
+    with open(scene.radfiles[0], 'r') as f:
+        assert f.readline().__len__() == 110 
+        assert f.readline()[0:26] == '!xform -rx 0 -rz 0 objects'
+        assert f.readline()[0:29] == '!xform -rx 0 -t 1 1 0 objects'
+    
+    # continue as 1-axis time based analysis with customObj.
+    metdata = demo.readWeatherFile(weatherFile=MET_FILENAME, starttime='01_01_08', endtime = '01_01_10', coerce_year=2001) # read in the EPW weather data from above
+    trackerdict = demo.set1axis(cumulativesky = False)
+    trackerdict= demo.makeScene1axis(sceneDict={'hub_height':0.5, 'pitch':1.5, 'azimuth':180}, 
+                                     customtext='-t 1 1 0 '+customObject, append=False)
+    trackerdict= demo.makeScene1axis(sceneDict={'hub_height':0.75, 'pitch':1.0, 'azimuth':180}, 
+                                     customtext='-t 2 1 0 '+customObject, append=True)
+    with open(trackerdict['2001-01-01_0800']['scenes'][0].radfiles, 'r') as f:
+        f.readline()
+        line = f.readline()  #Linux uses backslash, windows forward slash...
+        assert(line  == '!xform -rx 0  -t 1 1 0 objects/Marker.rad') or (line  == '!xform -rx 0  -t 1 1 0 objects\Marker.rad')
+    with open(trackerdict['2001-01-01_0900']['scenes'][1].radfiles, 'r') as f:
+        f.readline()
+        line = f.readline()
+        assert(line == '!xform -rx 0  -t 2 1 0 objects/Marker.rad') or (line == '!xform -rx 0  -t 2 1 0 objects\Marker.rad')
+    
\ No newline at end of file