def test_RadianceObj_high_azimuth_angle_end_to_end(): # modify example for high azimuth angle to test different parts of makesceneNxR. Rear irradiance fraction roughly 17.3% for 0.95m landscape panel # takes 14 seconds for sensorsy = 9, 11 seconds for sensorsy = 2 demo = RadianceObj() # Create a RadianceObj 'object' demo.setGround( 'white_EPDM' ) # input albedo number or material name like 'concrete'. To see options, run this without any input. #metdata = demo.readEPW() # read in the EPW weather data from above metdata = demo.readTMY( MET_FILENAME2) # select a TMY file using graphical picker # Now we either choose a single time point, or use cumulativesky for the entire year. fullYear = False if fullYear: demo.genCumSky( demo.epwfile ) # entire year. # Don't know how to test this yet in pytest... else: demo.gendaylit(metdata, 4020) # Noon, June 17th # create a scene using panels in landscape at 10 deg tilt, 1.5m pitch. 0.2 m ground clearance sceneDict = { 'tilt': 10, 'pitch': 1.5, 'height': 0.2, 'orientation': 'landscape', 'azimuth': 30 } demo.makeModule(name='simple_panel', x=0.95, y=1.59) scene = demo.makeScene( 'simple_panel', sceneDict, nMods=10, nRows=3 ) #makeScene creates a .rad file with 20 modules per row, 7 rows. octfile = demo.makeOct( demo.getfilelist() ) # makeOct combines all of the ground, sky and object files into a .oct file. analysis = AnalysisObj( octfile, demo.name ) # return an analysis object including the scan dimensions for back irradiance analysis.analysis(octfile, demo.name, scene.frontscan, scene.backscan) # compare the back vs front irradiance #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(912, rel=0.005) assert np.mean(analysis.Wm2Back) == pytest.approx(182, rel=0.01)
def test_RadianceObj_fixed_tilt_end_to_end(): # just run the demo example. Rear irradiance fraction roughly 11.8% for 0.95m landscape panel # takes 12 seconds demo = RadianceObj() # Create a RadianceObj 'object' demo.setGround( 0.62 ) # input albedo number or material name like 'concrete'. To see options, run this without any input. metdata = demo.readEPW( epwfile=MET_FILENAME) # read in the EPW weather data from above #metdata = demo.readTMY() # select a TMY file using graphical picker # Now we either choose a single time point, or use cumulativesky for the entire year. fullYear = False if fullYear: demo.genCumSky(demo.epwfile) # entire year. else: demo.gendaylit(metdata, 4020) # Noon, June 17th # create a scene using panels in landscape at 10 deg tilt, 1.5m pitch. 0.2 m ground clearance sceneDict = { 'tilt': 10, 'pitch': 1.5, 'height': 0.2, 'orientation': 'landscape' } demo.makeModule(name='simple_panel', x=0.95, y=1.59) scene = demo.makeScene( 'simple_panel', sceneDict, nMods=10, nRows=3 ) #makeScene creates a .rad file with 20 modules per row, 7 rows. octfile = demo.makeOct( demo.getfilelist() ) # makeOct combines all of the ground, sky and object files into a .oct file. analysis = AnalysisObj( octfile, demo.name ) # return an analysis object including the scan dimensions for back irradiance analysis.analysis(octfile, demo.name, scene.frontscan, scene.backscan) # compare the back vs front irradiance #assert np.round(np.mean(analysis.backRatio),decimals=2) == 0.12 # NOTE: this value is 0.11 when your module size is 1m, 0.12 when module size is 0.95m assert np.mean(analysis.backRatio) == pytest.approx(0.12, abs=0.01)
# 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') # <a id='step3'></a> # ### 3. Combine all scene Objects into one OCT file & Visualize # Marking this as its own steps because this is the step that joins our Scene Objects 1, 2 and the appended Post. # Run makeOCT to make the scene with both scene objects AND the marker in it, the ground and the skies. # In[9]: octfile = demo.makeOct(demo.getfilelist()) # At this point you should be able to go into a command window (cmd.exe) and check the geometry. Example: # # ##### rvu -vf views\front.vp -e .01 -pe 0.3 -vp 1 -7.5 12 MultipleObj.oct # # It should look something like this: # # ![multiple Scene Objects Example](..\images_wiki\Journal_example_multiple_objects.PNG) # # <a id='step4'></a> # ### 4. Analysis for Each sceneObject # # a **sceneDict** is saved for each scene. When calling the Analysis, you should reference the scene object you want.
def simulate_single(idx=None, wavelength=None, test_folder_fmt=None, best_data_file=None, data_folder=None): # Verify test_folder exists before creating radiance obj test_folder = test_folder_fmt.format(f'{idx:04}', f'{wavelength:04}') if not os.path.exists(test_folder): os.makedirs(test_folder) ### NEW FOR SPECTRA # Create radiance obj radiance_name = 'BEST' rad_obj = RadianceObj(radiance_name, str(test_folder)) # Set ground rad_obj.readWeatherFile(best_data_file, label='center') # Check to see if file exists foo = rad_obj.metdata.datetime[idx] # If a wavelength was specified, assume this is a spectral simulation and # try to load spectra files. # Determine file suffix suffix = f'_{idx}.txt' # Generate/Load albedo alb_file = os.path.join(data_folder, "alb" + suffix) spectral_alb = spectral_property.load_file(alb_file) # Generate/Load dni and dhi dni_file = os.path.join(data_folder, "dni" + suffix) dhi_file = os.path.join(data_folder, "dhi" + suffix) ghi_file = os.path.join(data_folder, "ghi" + suffix) spectral_dni = spectral_property.load_file(dni_file) spectral_dhi = spectral_property.load_file(dhi_file) spectral_ghi = spectral_property.load_file(ghi_file) weighted_albedo = False if wavelength: alb = spectral_alb[wavelength] dni = spectral_dni[wavelength] dhi = spectral_dhi[wavelength] elif weighted_albedo: _alb = np.array(spectral_alb[range(300, 2501, 10)]) _dni = np.array(spectral_dni[range(300, 2501, 10)]) _dhi = np.array(spectral_dhi[range(300, 2501, 10)]) _ghi = np.array(spectral_ghi[range(300, 2501, 10)]) alb_scale = np.sum(_alb * (_ghi)) / np.sum(alb * (_ghi)) alb *= alb_scale print(f'For IDX {idx}, albedo scaled by {alb_scale}') res_name = "irr_Hydra_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) + '.csv' rad_obj.setGround(alb) # Set sky solpos = rad_obj.metdata.solpos.iloc[idx] zen = float(solpos.zenith) azm = float(solpos.azimuth) - 180 rad_obj.gendaylit2manual(dni, dhi, 90 - zen, azm) lat = 39.742 # NREL SSRL location lon = -105.179 # NREL SSRL location elev = 1829 timezone = -7 axis_tilt = 0 axis_azimuth = 180 limit_angle = 60 backtrack = True # Set to false since it's only 1 row, no shading. gcr = 0.35 angledelta = 0 # rounding to ints numpanels = 1 torquetube = False # We are going to add it separately diameter = 0.130175 # 5 1/8 in torqueTubeMaterial = 'Metal_Grey' tubetype = 'Round' axisofrotationTorqueTube = True azimuth = 90 material = 'Metal_Grey' hub_height = 1.5 #0.927 postdiamy = 0.1016 # N-S measurement, 4 " postdiamx = 0.1524 # E-W measurement, 6 " ttedgeoffset = -1.07 # south edge 42 in. negative because that's how I coded the trnaslation. ttedgeoffsetNorth = 0.10795 # North edge $ 4 1/4 inches length = 21.64 - ttedgeoffset + ttedgeoffsetNorth # map goes from beginning of south post, but there is a bit more post to hold the sensor decimate = True zgap = 0.05 + diameter / 2 # 1 inch of arm, + 1 3/16 of panel width on average ~ 0.055 m decimateinterval = '15Min' pitch = 5.7 # distance between rows ypostlist = [0, 4.199, 10.414, 16.63, 21.64] ymods = [ 0.589, 1.596, 2.603, 3.610, 4.788, 5.795, 6.803, 7.810, 8.818, 9.825, 11.003, 12.011, 13.018, 14.026, 15.034, 16.041, 17.220, 18.230, 19.240, 20.250 ] numcellsx = 6 numcellsy = 12 xcell = 0.142 ycell = 0.142 xcellgap = 0.02 ycellgap = 0.02 module_type = 'Bi60' xgap = 0.046 ygap = 0 glass = False # Set tracker information try: tilt = round( rad_obj.getSingleTimestampTrackerAngle(rad_obj.metdata, idx, gcr, limit_angle=65), 1) except: print("Night time !!!!!!!!!") print("") print("") return None if math.isnan(tilt): return None sazm = 90 cellLevelModuleParams = { 'numcellsx': numcellsx, 'numcellsy': numcellsy, 'xcell': xcell, 'ycell': ycell, 'xcellgap': xcellgap, 'ycellgap': ycellgap } # Running make module on HPC can cause issues if too many works try to # write to the module file at the same time. If something goes wrong, # assume the module has already been created. ''' try: mymodule = rad_obj.makeModule(name=module_type, torquetube=torquetube, diameter=diameter, tubetype=tubetype, material=material, xgap=xgap, ygap=ygap, zgap=zgap, numpanels=numpanels,# x=0.952, y=1.924, cellLevelModuleParams=cellLevelModuleParams, axisofrotationTorqueTube=axisofrotationTorqueTube, glass=glass, z=0.0002) rad_obj.makeModule(name='sensor', x=0.15, y=0.15, z=0.04) except: print('Failed to make module.') ''' radname = "Bi60_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) + "_" sceneDict1 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 0, 'originy': ymods[0] } sceneObj1 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict1, radname=radname) sceneDict2 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 1, 'originy': ymods[0] } sceneObj2 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict2, radname=radname) sceneDict3 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 2, 'originy': ymods[0] } sceneObj3 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict3, radname=radname) sceneDict4 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 3, 'originy': ymods[0] } sceneObj4 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict4, radname=radname) sceneDict5 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 4, 'originy': ymods[0] } sceneObj5 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict5, radname=radname) sceneDict6 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 5, 'originy': ymods[0] } sceneObj6 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict6, radname=radname) sceneDict7 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 6, 'originy': ymods[0] } sceneObj7 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict7, radname=radname) sceneDict8 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 7, 'originy': ymods[0] } sceneObj8 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict8, radname=radname) sceneDict9 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 8, 'originy': ymods[0] } sceneObj9 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict9, radname=radname) sceneDict10 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 9, 'originy': ymods[0] } sceneObj10 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict10, radname=radname) #sceneObjects[tilt] = {'Obj1': sceneObj1, 'Obj2': sceneObj2, 'Obj3': sceneObj3, 'Obj4': sceneObj4, 'Obj5': sceneObj5, 'Obj6': sceneObj6, 'Obj7': sceneObj7, 'Obj8': sceneObj8, 'Obj9': sceneObj9, 'Obj10': sceneObj10} modulesArray = [] fieldArray = [] modulesArray.append(sceneObj1) modulesArray.append(sceneObj2) modulesArray.append(sceneObj3) modulesArray.append(sceneObj4) modulesArray.append(sceneObj5) modulesArray.append(sceneObj6) modulesArray.append(sceneObj7) modulesArray.append(sceneObj8) modulesArray.append(sceneObj9) modulesArray.append(sceneObj10) fieldArray.append(modulesArray) textrow1 = '' textrow2 = sceneObj2.text + '\r\n' textrow3 = sceneObj3.text + '\r\n' textrow4 = sceneObj4.text + '\r\n' textrow5 = sceneObj5.text + '\r\n' textrow6 = sceneObj6.text + '\r\n' textrow7 = sceneObj7.text + '\r\n' textrow8 = sceneObj8.text + '\r\n' textrow9 = sceneObj9.text + '\r\n' textrow10 = sceneObj10.text + '\r\n' # Row 1 for i in range(1, 20): modulesArray = [] sceneDict1 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 0, 'originy': ymods[i] } sceneObj1 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict1, radname=radname) sceneDict2 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 1, 'originy': ymods[i] } sceneObj2 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict2, radname=radname) sceneDict3 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 2, 'originy': ymods[i] } sceneObj3 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict3, radname=radname) sceneDict4 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 3, 'originy': ymods[i] } sceneObj4 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict4, radname=radname) sceneDict5 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 4, 'originy': ymods[i] } sceneObj5 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict5, radname=radname) sceneDict6 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 5, 'originy': ymods[i] } sceneObj6 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict6, radname=radname) sceneDict7 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 6, 'originy': ymods[i] } sceneObj7 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict7, radname=radname) sceneDict8 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 7, 'originy': ymods[i] } sceneObj8 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict8, radname=radname) sceneDict9 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 8, 'originy': ymods[i] } sceneObj9 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict9, radname=radname) sceneDict10 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 9, 'originy': ymods[i] } sceneObj10 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict10, radname=radname) textrow1 += sceneObj1.text + '\r\n' textrow2 += sceneObj2.text + '\r\n' textrow3 += sceneObj3.text + '\r\n' textrow4 += sceneObj4.text + '\r\n' textrow5 += sceneObj5.text + '\r\n' textrow6 += sceneObj6.text + '\r\n' textrow7 += sceneObj7.text + '\r\n' textrow8 += sceneObj8.text + '\r\n' textrow9 += sceneObj9.text + '\r\n' textrow10 += sceneObj10.text + '\r\n' modulesArray.append(sceneObj1) modulesArray.append(sceneObj2) modulesArray.append(sceneObj3) modulesArray.append(sceneObj4) modulesArray.append(sceneObj5) modulesArray.append(sceneObj6) modulesArray.append(sceneObj7) modulesArray.append(sceneObj8) modulesArray.append(sceneObj9) modulesArray.append(sceneObj10) fieldArray.append(modulesArray) # Redoing the first module to append everything to it. sceneDict1 = { 'tilt': tilt, 'pitch': pitch, 'hub_height': hub_height, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': pitch * 0, 'originy': ymods[0] } sceneObj1 = rad_obj.makeScene(moduletype=module_type, sceneDict=sceneDict1, radname=radname) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow1) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow2) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow3) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow4) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow5) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow6) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow7) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow8) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow9) rad_obj.appendtoScene(sceneObj1.radfiles, '', textrow10) # Custom BSA Geometry # Bottom posttubes and torquetube: for i in range(0, 10): xpost = i * pitch # adding torquetube torquetube = '\n\r! genrev Metal_Grey torquetube{} t*{} {} 32 | xform -rx -90 -t {} {} {}'.format( i, length, diameter / 2.0, xpost, ttedgeoffset, hub_height - zgap) rad_obj.appendtoScene(sceneObj1.radfiles, '', torquetube) for j in range(0, 5): ypost = ypostlist[j] post1 = '! genbox Metal_Grey pile{} {} {} {} | xform -t {} {} 0 '.format( (str(i) + "," + str(j)), postdiamx, postdiamy, hub_height, -postdiamx / 2.0 + xpost, -postdiamy + ypost) rad_obj.appendtoScene(sceneObj1.radfiles, '', post1) ########################### # Create sensor objects # ########################### # West Sensors shhw = 1.5 + (1 - 0.226 / 2) * sin( radians(tilt)) + (0.130175 / 2 + 0.05 - 0.02) * cos(radians(tilt)) sxw = pitch * 2 - (1 - 0.226 / 2) * cos( radians(tilt)) + (0.130175 / 2 + 0.05 - 0.02) * sin(radians(tilt)) syw = ymods[9] + 0.5 + 0.226 / 2 sensorw_scene = { 'tilt': tilt, 'pitch': 1, 'hub_height': shhw, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': sxw, 'originy': syw, 'appendRadfile': True } res_name = "SensorW_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) sensorw_sceneObj = rad_obj.makeScene(moduletype='sensor', sceneDict=sensorw_scene, radname=res_name) syw = ymods[15] + 0.5 + 0.226 / 2 sensorIMTw_scene = { 'tilt': tilt, 'pitch': 1, 'hub_height': shhw, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': sxw, 'originy': syw, 'appendRadfile': True } res_name = "SensorIMTW_" + str(foo.year) + "_" + str( foo.month) + "_" + str(foo.day) + "_" + str(foo.hour) + "_" + str( foo.minute) sensorIMTw_sceneObj = rad_obj.makeScene(moduletype='sensor', sceneDict=sensorIMTw_scene, radname=res_name) # East Sensors shhe = 1.5 - (1 - 0.226 / 2) * sin( radians(tilt)) + (0.130175 / 2 + 0.05 - 0.02) * cos(radians(tilt)) sxe = pitch * 2 + (1 - 0.226 / 2) * cos( radians(tilt)) + (0.130175 / 2 + 0.05 - 0.02) * sin(radians(tilt)) sye = ymods[9] + 0.5 + 0.226 / 2 sensore_scene = { 'tilt': tilt, 'pitch': 1, 'hub_height': shhe, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': sxe, 'originy': sye, 'appendRadfile': True } res_name = "SensorE_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) sensore_sceneObj = rad_obj.makeScene(moduletype='sensor', sceneDict=sensore_scene, radname=res_name) sye = ymods[15] + 0.5 + 0.226 / 2 sensorIMTe_scene = { 'tilt': tilt, 'pitch': 1, 'hub_height': shhe, 'azimuth': azimuth, 'nMods': 1, 'nRows': 1, 'originx': sxe, 'originy': sye, 'appendRadfile': True } res_name = "SensorIMTE_" + str(foo.year) + "_" + str( foo.month) + "_" + str(foo.day) + "_" + str(foo.hour) + "_" + str( foo.minute) sensorIMTe_sceneObj = rad_obj.makeScene(moduletype='sensor', sceneDict=sensorIMTe_scene, radname=res_name) # Build oct file sim_name = "BEST_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) octfile = rad_obj.makeOct(rad_obj.getfilelist(), octname=sim_name) ################# # Run analysis # ################# #Row 3 Module 10 sensors analysis = AnalysisObj(octfile, rad_obj.basename) frontscan, backscan = analysis.moduleAnalysis( sensorw_sceneObj, sensorsy=1) #, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "SensorW_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) frontscan, backscan = analysis.moduleAnalysis( sensore_sceneObj, sensorsy=1) #, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "SensorE_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) #IMT Sensors Row 3 Module 5 ''' frontscan, backscan = analysis.moduleAnalysis(sensorIMTw_sceneObj, sensorsy=1)#, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "SensorIMTW_"+str(foo.year)+"_"+str(foo.month)+"_"+str(foo.day)+"_"+str(foo.hour)+"_"+str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) frontscan, backscan = analysis.moduleAnalysis(sensorIMTe_sceneObj, sensorsy=1)#, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "SensorIMTE_"+str(foo.year)+"_"+str(foo.month)+"_"+str(foo.day)+"_"+str(foo.hour)+"_"+str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) #fieldARray[module][row] #HYDRA modmod = 16 rowrow = 1 frontscan, backscan = analysis.moduleAnalysis(fieldArray[modmod][rowrow], sensorsy=12)#, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "Hydra_"+str(foo.year)+"_"+str(foo.month)+"_"+str(foo.day)+"_"+str(foo.hour)+"_"+str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) ''' #LOCATION_APOGEES modmod = 9 rowrow = 2 frontscan, backscan = analysis.moduleAnalysis( fieldArray[modmod][rowrow], sensorsy=4) #, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) frontscan['ystart'] = frontscan['ystart'] + 0.45 backscan['ystart'] = backscan['ystart'] + 0.45 res_name = "Apogee_" + str(foo.year) + "_" + str(foo.month) + "_" + str( foo.day) + "_" + str(foo.hour) + "_" + str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) ''' # SCAN FULL ROWS for rowrow in range(5, 7): for modmod in range(0, 20): frontscan, backscan = analysis.moduleAnalysis(fieldArray[modmod][rowrow], sensorsy=12)#, frontsurfaceoffset=0.021)#, backsurfaceoffset = 0.02) res_name = "Row_"+str(rowrow)+"_Mod_"+str(modmod)+"_"+str(foo.year)+"_"+str(foo.month)+"_"+str(foo.day)+"_"+str(foo.hour)+"_"+str(foo.minute) frontdict, backdict = analysis.analysis(octfile, res_name, frontscan, backscan) ''' # Read in results #results_file = os.path.join('results', f'irr_sensor_{sim_name}.csv') #results = load.read1Result(results_file) results = 1 # Format output #tracker_theta = tilt #front = ','.join([ str(f) for f in results['Wm2Front'] ]) #back = ','.join([ str(r) for r in results['Wm2Back'] ]) print("***** Finished simulation for " + str(foo)) #time_str = metdata.datetime[idx] # print(f"sim_results,{idx},{time_str},{wavelength},{dni},{dhi},{alb}," \ # f"{tracker_theta},{front},{back}") return results