# scenelists = ['bears', 'car_fig','extr_farm','extr_woods','glass','intr_farm','intr_woods','metal',]

# methods = ['directvoxgo','ibrnet_finetune','ibrnet_pretrain','mipnerf','nerf','nex','plenoxel','reference']
# import os

# for scene in scenelists:
#     for method in methods:
#         f = open('results.txt', 'a')
#         lines=[]
#         cmds = "fvvdp --test 'scene="+ scene+ ",method="+method+".mp4' --ref 'scene="+ scene+ ",method=reference.mp4' --gpu 0 --display eizo_CS274_2k --quiet"
#         print(cmds)
#         # os.system(cmds)
#         r = os.popen(cmds)
#         info = r.readlines()
#         value = info[0].strip('\r\n')
#         lines.append(scene)
#         lines.append(method)
#         lines.append(value)        
#         f.writelines(' '.join(lines))
#         f.write('\n')
#         f.close()

import os
import glob
import csv

scenelists = ['bears','calci_museum_dinosaur', 'calci_museum_elephant', 'calci_museum_giraffe', 'calci_museum_whale','calci_museum_geopards', 'lucca_statue_3', 'lucca_statue_2_nostab','lucca_statue_3_nostab','extr_farm','intr_farm','extr_woods','intr_woods','car_fig','glass','metal']
methods=['directvoxgo',  'ibrnet_finetune' , 'ibrnet_pretrain',  'mipnerf',  'nerf',  'nex',  'plenoxel','gnt_crossscene','gnt_singlescene','light_field','reference']


f=open('/home/hl589/benchmark/nerf_fvvdpvideo.csv','a')
writer = csv.writer(f)
lines = ['condition_id','Q','proc_time']
writer.writerow(lines)
f.close()


for scene in scenelists:
    for method in methods:
        f=open('/home/hl589/benchmark/nerf_fvvdpvideo.csv','a')
        writer = csv.writer(f)
        print('currently process',method,scene)
        lines=[]
        lines.append(scene+'-'+method)

        cmds = "fvvdp --test 'scene="+ scene+ ",method="+method+".mp4' --ref 'scene="+ scene+ ",method=reference.mp4' --gpu 0 --display eizo_CS274_2k --quiet"
        print(cmds)
        r = os.popen(cmds)
        info = r.readlines()
        value = info[0].strip('\r\n')

        lines.append(value)
        lines.append(0)
        writer.writerow(lines)
        f.close()







# # scenelists=['fern','flower','fortress','horns','leaves','orchids','room','trex']
# scenelists = ['bears', 'car_fig','extr_farm','extr_woods','glass','intr_farm','intr_woods','metal']
# methods = ['directvoxgo','ibrnet_finetune','ibrnet_pretrain','mipnerf','nerf','nex','plenoxel','reference']
# import pyfvvdp
# import glob
# import os
# import csv
# from numpy import *
# fv = pyfvvdp.fvvdp(display_name='eizo_CS274_2k', heatmap='threshold')
# f=open('/home/hl589/benchmark/nerf_fvvdpimage.csv','a')
# writer = csv.writer(f)
# lines = ['condition_id','Q','proc_time']
# writer.writerow(lines)
# f.close()
# for scene in scenelists:
#     for method in methods:
#         print(scene, method)
#         # f = open('lab_fvvdp_image_results.txt', 'a')
#         f=open('/home/hl589/benchmark/nerf_fvvdpimage.csv','a')
#         writer = csv.writer(f)
#         ref_imgdir = os.path.join('/anfs/gfxdisp/hanxue_nerf_data/benchmark_results_sparse_set/reference',scene)
#         imgdir = os.path.join('/anfs/gfxdisp/hanxue_nerf_data/benchmark_results_sparse_set',method+'/'+scene)


#         ref_images = sorted(glob.glob(os.path.join(ref_imgdir,'*.png')))
#         images = sorted(glob.glob(os.path.join(imgdir,'*.png')))

#         assert len(ref_images)==len(images)

#         results = []
    
#         for i in range(len(ref_images)):
#             I_ref = pyfvvdp.load_image_as_array(ref_images[i])
#             I_test = pyfvvdp.load_image_as_array(images[i])
#             Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#             results.append(Q_JOD_blur.item())

#         lines = []
#         lines.append(scene+'-'+method)
#         lines.append(str(mean(results))) 
#         lines.append(0)

#         writer.writerow(lines)
#         f.close()
#         # lines.append(scene)
#         # lines.append(method)
#         # lines.append(str(mean(results))) 
#         # # print(lines) 
#         # # print(' '.join(lines))      
#         # f.writelines(' '.join(lines))
#         # f.write('\n')
#         # f.close()

# for scene in scenelists:
#     f = open('llff_results.txt', 'a')
#     imgdir='/anfs/gfxdisp/hanxue_nerf_data/logs/plenoxel/'+scene+'/test_renders'
#     imgfiles = sorted(glob.glob(os.path.join(imgdir,'*.png')))
#     ref_images = imgfiles[1::2]
#     images = imgfiles[::2]
#     dvg_imgdir='/anfs/gfxdisp/hanxue_nerf_data/logs/dvg_new/'+scene+'/render_test_fine_last'
#     dvg_imgfiles = sorted(glob.glob(os.path.join(dvg_imgdir,'*.png')))
#     print(len(ref_images),len(images),ref_images,images)
#     assert len(ref_images)==len(images)
#     assert len(ref_images)==len(dvg_imgfiles)
#     plenoxel_results = []
#     dvg_results = []
#     reference_results = []
#     for i in range(len(ref_images)):
#         I_ref = pyfvvdp.load_image_as_array(ref_images[i])
#         I_test = pyfvvdp.load_image_as_array(images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         plenoxel_results.append(Q_JOD_blur.item())
#         I_test = pyfvvdp.load_image_as_array(dvg_imgfiles[i])
#         I_test = I_test[:,:1008,:]
#         print(I_test.shape, I_ref.shape)
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         dvg_results.append(Q_JOD_blur.item())
#         Q_JOD_blur, stats_blur = fv.predict( I_ref, I_ref, dim_order="HWC" )
#         reference_results.append(Q_JOD_blur.item())
#     lines = []
#     lines.append(scene)
#     lines.append('directvoxgo')
#     lines.append(str(mean(dvg_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')
#     lines = []
#     lines.append(scene)
#     lines.append('plenoxel')
#     lines.append(str(mean(plenoxel_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')
#     lines = []
#     lines.append(scene)
#     lines.append('reference')
#     lines.append(str(mean(reference_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')
#     f.close()

# for scene in scenelists:
#     f = open('llff_results.txt', 'a')
#     imgdir='/rds/user/hl589/rds-nerf-benchmark-JDeuXlFW9KE/nerf_benchmark_ww/exp_log/ibr/llff_test/eval_llff/'+scene+'_315000'
#     ref_images = sorted(glob.glob(os.path.join(imgdir,'*gt_rgb.png')))
#     ibrfinetune_images = sorted(glob.glob(os.path.join(imgdir,'*pred_fine.png')))


#     imgdir='/rds/user/hl589/rds-nerf-benchmark-JDeuXlFW9KE/nerf_benchmark_ww/exp_log/ibr/llff_test/eval_no_finetune_llff/'+scene+'_255000'
#     ibrpretrain_images = sorted(glob.glob(os.path.join(imgdir,'*pred_fine.png')))


#     imgdir='/rds/user/hl589/rds-nerf-benchmark-JDeuXlFW9KE/nerf_benchmark_ww/exp_log/nerf_exp/llff/'+scene+'/eval'
#     nerf_images = sorted(glob.glob(os.path.join(imgdir,'rgb_*.png')))

#     imgdir='/rds/user/hl589/rds-nerf-benchmark-JDeuXlFW9KE/nerf_benchmark_ww/exp_log/nex_exp/'+scene+'/nex_exp'+scene+'/rendered_val'
#     nex_images = sorted(glob.glob(os.path.join(imgdir,'*_ours.png')))

#     imgdir='/rds/user/hl589/rds-nerf-benchmark-JDeuXlFW9KE/nerf_benchmark_ww/exp_log/mip_nerf/'+scene+'/test_preds'
#     mipnerf_images = sorted(glob.glob(os.path.join(imgdir,'color_*.png')))

    
#     print(len(ref_images),len(ibrfinetune_images),len(ibrpretrain_images),ref_images)
#     print(len(nerf_images),len(nex_images),len(mipnerf_images))
#     assert len(ref_images)==len(ibrfinetune_images)
#     assert len(ref_images)==len(ibrpretrain_images)
#     assert len(ref_images)==len(nerf_images)
#     assert len(ref_images)==len(nex_images)
#     assert len(ref_images)==len(mipnerf_images)
#     ibrfinetune_results = []
#     ibrpretrain_results = []
#     nerf_results = []
#     nex_results = []
#     mipnerf_results = []


#     reference_results = []
    
#     for i in range(len(ref_images)):
#         I_ref = pyfvvdp.load_image_as_array(ref_images[i])
#         I_test = pyfvvdp.load_image_as_array(ibrfinetune_images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         ibrfinetune_results.append(Q_JOD_blur.item())

#         I_test = pyfvvdp.load_image_as_array(ibrpretrain_images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         ibrpretrain_results.append(Q_JOD_blur.item())

#         I_test = pyfvvdp.load_image_as_array(nerf_images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         nerf_results.append(Q_JOD_blur.item())

#         I_test = pyfvvdp.load_image_as_array(nex_images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         nex_results.append(Q_JOD_blur.item())

#         I_test = pyfvvdp.load_image_as_array(mipnerf_images[i])
#         Q_JOD_blur, stats_blur = fv.predict( I_test, I_ref, dim_order="HWC" )
#         mipnerf_results.append(Q_JOD_blur.item())

#         Q_JOD_blur, stats_blur = fv.predict( I_ref, I_ref, dim_order="HWC" )
#         reference_results.append(Q_JOD_blur.item())

#     lines = []
#     lines.append(scene)
#     lines.append('ibrnet_finetune')
#     lines.append(str(mean(ibrfinetune_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')

#     lines = []
#     lines.append(scene)
#     lines.append('ibrnet_pretrain')
#     lines.append(str(mean(ibrpretrain_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')

#     lines = []
#     lines.append(scene)
#     lines.append('nerf')
#     lines.append(str(mean(nerf_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')

#     lines = []
#     lines.append(scene)
#     lines.append('nex')
#     lines.append(str(mean(nex_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')

#     lines = []
#     lines.append(scene)
#     lines.append('mipnerf')
#     lines.append(str(mean(mipnerf_results)))        
#     f.writelines(' '.join(lines))
#     f.write('\n')

#     # lines = []
#     # lines.append(scene)
#     # lines.append('reference')
#     # lines.append(str(mean(reference_results)))        
#     # f.writelines(' '.join(lines))
#     # f.write('\n')
#     f.close()


# import os
# import glob
# import csv

# scenelists=['bears', 'car_fig', 'extr_farm','extr_woods',  'fern', 'flower',\
#        'fortress',  'glass', 'horns', 'intr_farm', 'intr_woods',  'leaves', \
#            'metal',   'orchids','room','trex']

# methods=['directvoxgo',  'ibrnet_finetune' , 'ibrnet_pretrain',  'mipnerf',  'nerf',  'nex',  'plenoxel','reference']

# f=open('/home/hl589/benchmark/nerf_fvvdp.csv','a')
# writer = csv.writer(f)
# lines = ['condition_id','Q','proc_time']
# writer.writerow(lines)
# f.close()
# f = open('fvvdp_results.txt', 'r')
# lines=f.readlines()
# results=[line.strip('\n').split(',') for line in lines]
# f.close()
# for method in methods:
#     for scene in scenelists:
#         f=open('/home/hl589/benchmark/nerf_fvvdp.csv','a')
#         writer = csv.writer(f)
#         print('currently process',method,scene)
#         lines=[]
#         lines.append(scene+'-'+method)

        
#         for i in range(len(results)):
#             if results[i][0]==scene and results[i][1]==method:
#                 lines.append(results[i][2])
#                 break

#         # lines.append(str(sum(tmp)/len(tmp)))
#         lines.append(0)
#         writer.writerow(lines)
#         f.close()
