
import os, sys
import json
#from controller import *
from schainpy.controller import Project

desc = "EW DRIFTS MP Experiment"
filename = "EWDrifts.xml"

controllerObj = Project()

controllerObj.setup(id = '191', name='test01', description=desc)

#Experimentos

#path = '/media/pcondor/DATA1/Database/ewdriftsene2024sch/EW_Drifts_01ene/Drifts-data'
path = '/media/soporte/DATA/PERCY_SCHAIN_UPDATE/driftsschain'
#pathFigure = '/media/pcondor/DATA1/Database/ewdriftsschain2023proc'
pathFile ='/media/soporte/DATA/PERCY_SCHAIN_UPDATE/driftsschain/tmp'
#pathFile = '/media/pcondor/DATA1/Database/ewdriftsene2024sch/EW_Drifts_01enetmp'
pathFigure = pathFile
pathFileavg = pathFile+'/avg'
pathFiledata = pathFile+'/Drifts-data'

xmin = 0
xmax = 24
#------------------------------------------------------------------------------------------------
readUnitConfObj = controllerObj.addReadUnit(datatype='HDFReader',
                                            path=path,
                                            startDate='2024/01/23',
                                            endDate='2024/01/23',
                                            startTime='00:00:00',
                                            endTime='23:59:59',
                                            #online=0,
                                            #getByBlock=1,
                                            walk=1,
                                            utcoffset='-18000')

#--------------------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------------------

procUnitConfObj2 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=readUnitConfObj.getId())

opObj20 = procUnitConfObj2.addOperation(name='SpectralFitting', optype='other')
opObj20.addParameter(name='path', value='/home/pcondor/DIR_MADRIGAL/schain/schainpy/model/proc', format='str')
opObj20.addParameter(name='file', value='modelSpectralFitting', format='str')
opObj20.addParameter(name='groupList', value='(0,1),(2,3)',format='multiList')
opObj20.addParameter(name='taver', value='5')
opObj20.addParameter(name='coh_th', value='[1]',format='multiList')
opObj20.addParameter(name='hei_th', value='[2000]',format='multiList')
opObj20.addParameter(name='proc', value='1')
opObj20.addParameter(name='channelList', value='0,0,1,1')
opObj20.addParameter(name='filec', value='weightfit', format='str')

#opObj22 = procUnitConfObj2.addOperation(name='HDFWriter', optype='other')
#opObj22.addParameter(name='path', value=pathFile)
#opObj22.addParameter(name='blocksPerFile', value='1')
#opObj22.addParameter(name='metadataList',value='heightList,timeZone')
#opObj22.addParameter(name='dataList',value='tmp_spectra_i,tmp_cspectra_i,tmp_spectra_c,tmp_cspectra_c,clean_num_aver,coh_num_aver,index,utctime')
#angles :-2.41116      3.01082
opObj21 = procUnitConfObj2.addOperation(name='EWDriftsEstimation', optype='other')
opObj21.addParameter(name='zenith', value='-2.41116, 3.01082', format='floatlist')
opObj21.addParameter(name='zenithCorrection', value='0.0', format='float')
opObj21.addParameter(name='fileDrifts', value=pathFile)

# Drifts en h5
one = {'gdlatr': 'lat', 'gdlonr': 'lon', 'spcst':'spcst','pl':'pl','cbadn':'cbadn','inttms': 'inttms','azdir7':'azw','eldir7':'elw','azdir8':'aze','eldir8':'ele','jro14':'jro14','jro15':'jro15','jro16':'jro16','nwlos':'nwlos'}
two = {
    'range': ('params', 0),
    'gdalt': ('params', 1),
    'VIPN': ('params', 2),
    'dvipn': ('params', 3),
    'vipe': ('params', 4),
    'dvipe': ('params', 5),
    'vi7': ('params', 6),
    'dvi7': ('params', 7),
    'vi8': ('params', 8),
    'dvi8': ('params', 9),
    'PAIWL': ('params', 10),
    'pacwl': ('params', 11),
    'pbiwl': ('params', 12),
    'pbcwl': ('params', 13),
    'pciel': ('params', 14),
    'pccel': ('params', 15),
    'pdiel': ('params', 16),
    'pdcel': ('params', 17),
    'jro10': ('params', 18),
    'jro11': ('params', 19)
    } #writer
ind = ['gdalt']

#f=open('/home/roberto/moder_test.txt','r')
#file_contents=f.read()

meta = {
    'kinst': 10, #instrument code
    'kindat': 1910, #type of data
    'catalog': {
        'principleInvestigator': 'Danny Scipión',
        'expPurpose': 'Drifts'#,
        #'sciRemarks': file_contents
        },
    'header': {
        'analyst': 'Danny Scipión'
    }
}
#f.close()

op_writer = procUnitConfObj2.addOperation(name='MADWriter')
op_writer.addParameter(name='path', value=pathFile)
op_writer.addParameter(name='format', value='hdf5')
op_writer.addParameter(name='oneDDict', value=json.dumps(one))
op_writer.addParameter(name='twoDDict', value=json.dumps(two))
op_writer.addParameter(name='ind2DList', value=json.dumps(ind))
op_writer.addParameter(name='metadata', value=json.dumps(meta))

op_writer = procUnitConfObj2.addOperation(name='setHeightDriftsavg')

# Avg Drifts
one_avg = {'gdlatr': 'lat', 'gdlonr': 'lon', 'spcst':'spcst','pl':'pl','cbadn':'cbadn','inttms': 'inttms'}
two_avg = {
    'range': ('params_avg', 4),
    'gdalt': ('params_avg', 5),
    'altav': ('params_avg', 6),
    'VIPN': ('params_avg', 0),
    'dvipn': ('params_avg', 1),
    'vipe': ('params_avg', 2),
    'dvipe': ('params_avg', 3)
    }
ind_avg = ['gdalt']
meta = {
    'kinst': 10, #instrument code
    'kindat': 1911, #type of data
    'catalog': {
        'principleInvestigator': 'Danny Scipión',
        'expPurpose': 'Drifts'#,
        #'sciRemarks': file_contents
        },
    'header': {
        'analyst': 'Danny Scipión'
    }
}

op_writer = procUnitConfObj2.addOperation(name='MADWriter')
op_writer.addParameter(name='path', value=pathFileavg)
op_writer.addParameter(name='format', value='hdf5')
op_writer.addParameter(name='oneDDict', value=json.dumps(one_avg))
op_writer.addParameter(name='twoDDict', value=json.dumps(two_avg))
op_writer.addParameter(name='ind2DList', value=json.dumps(ind_avg))
op_writer.addParameter(name='metadata', value=json.dumps(meta))

op_writer = procUnitConfObj2.addOperation(name='setHeightDrifts')

opObj24 = procUnitConfObj2.addOperation(name='SpectralMomentsPlot', optype='other')
opObj24.addParameter(name='id', value='1', format='int')
### # opObj14.addParameter(name='wintitle', value='Spectral Averaged', format='str')
opObj24.addParameter(name='save', value=pathFigure, format='str')
###opObj24.addParameter(name='save_period', value=1, format='int')
opObj24.addParameter(name='zmin', value='-8', format='int')
opObj24.addParameter(name='zmax', value='16', format='int')
opObj24.addParameter(name='xaxis', value='Velocity', format='str')

# 
titles=('SNR,Vertical Drifts,Zonal Drifts')
opObj23 = procUnitConfObj2.addOperation(name='GenericRTIPlot')
#opObj23.addParameter(name='colormaps', value='jet,RdBu_r,RdBu_r')
opObj23.addParameter(name='colormaps', value='jro,seismic,seismic')
#opObj23.addParameter(name='colormaps', value='jro,bwr,bwr')
opObj23.addParameter(name='attr_data', value='data_snr1,data_output')
opObj23.addParameter(name='wintitle', value='EW Drifts')
opObj23.addParameter(name='save', value=pathFigure)
opObj23.addParameter(name='titles', value=titles)
opObj23.addParameter(name='zfactors', value='1,1,1')
opObj23.addParameter(name='zlimits', value='(0,13),(-50,50),(-150,150)')
opObj23.addParameter(name='cb_labels', value='dB,m/s,m/s')
opObj23.addParameter(name='throttle', value='1')
opObj23.addParameter(name='xmin', value=xmin)
opObj23.addParameter(name='xmax', value=xmax)
#opObj23.addParameter(name='exp_code', value='110', format='int')
#opObj23.addParameter(name='server', value='10.10.110.243:4444', format='int')
#opObj23.addParameter(name='tag', value= 'jicamarca', format='str')

#--------------------------------------------------------------------------------------------------

controllerObj.start()
