def load_sourcesCSV(self, _sourceCSV, _component, _signalComplex):
     ''' 
     _sourceCSV: .csv file, i.e. ./res/File_8.csv
     _model: name of the model , for retrieving the h5.group
     _component: name of the component, for retrieving the h5.dataset
     _signalComplex: array with pair name of signals [meas, angle] that refer to a complex signal
     '''
     if (_sourceCSV != ''):
         self.iocsv= InputCSVStream(_sourceCSV, ',')
         ''' select the signals according to variables '''
         ''' name is the representation of the measurement 
         meas signals/variables that name the signal of a measurement
         i.e: name KTHLAB:EMLAB; meas KTHLAB:EMLAB:Magnitude,KTHLAB:EMLAB:Angle 
         i.e: name bus1.V; meas bus1.v,bus1.angle '''
         self.iocsv.load_csvValues(_component, _signalComplex[0], _signalComplex[1])
         print 'PMU Signal ', self.iocsv.get_senyal(_component).__str__()
class Validation():
    ''' class for validation, things to do
    TODO: pass the data read to the era method (both simulation and measurement)
    TODO: save the result in the same .h5 file of the simulation
    '''
    def __init__(self, _variables):
        ''' Loading output variables of the model, their values will be stored in h5 and plotted
        argv[0]: file with variable names from the model
        '''
        self.outputs= OutputModelVar(_variables)
        self.outputs.load_varList()
        print self.outputs.get_varList()
        self.measurements= []
        
    def load_sourcesCSV(self, _sourceCSV, _component, _signalComplex):
        ''' 
        _sourceCSV: .csv file, i.e. ./res/File_8.csv
        _model: name of the model , for retrieving the h5.group
        _component: name of the component, for retrieving the h5.dataset
        _signalComplex: array with pair name of signals [meas, angle] that refer to a complex signal
        '''
        if (_sourceCSV != ''):
            self.iocsv= InputCSVStream(_sourceCSV, ',')
            ''' select the signals according to variables '''
            ''' name is the representation of the measurement 
            meas signals/variables that name the signal of a measurement
            i.e: name KTHLAB:EMLAB; meas KTHLAB:EMLAB:Magnitude,KTHLAB:EMLAB:Angle 
            i.e: name bus1.V; meas bus1.v,bus1.angle '''
            self.iocsv.load_csvValues(_component, _signalComplex[0], _signalComplex[1])
            print 'PMU Signal ', self.iocsv.get_senyal(_component).__str__()

    def load_sourcesH5(self, _sourceH5, _model, _component):
        ''' 
        _sourceH5: .h5 file, i.e. './res/PMUdata_Bus1VA2VALoad9PQ.h5'
        _model: name of the model , for retrieving the h5.group
        _component: name of the component, for retrieving the h5.dataset
        '''
        if (_sourceH5 != ''):
            self.ioh5= InputH5Stream(_sourceH5)
            self.ioh5.open_h5()
            self.ioh5.load_h5(_model, _component)
            print 'Simulation Signal ', self.ioh5.get_senyal(_component).__str__()
        
    def load_pandaSource(self, _sourceCSV, _sourceH5, _modelName, _component, _variable):
        '''
        _sourceCSV: something like './res/PMUdata_Bus1VA2VALoad9PQ.csv'
        _sourceH5: something like 'PMUdata_Bus1VA2Venam1.h5'
        '''
        csvData = pd.read_csv(_sourceCSV,sep=",",usecols=(1,2,3,4,5,6))
        csvData.to_hdf(_sourceH5,'df', complib='zlib', complevel=9)  
        self.ioh5.open_exth5(_sourceH5)
        self.ioh5.open_load_h5(_modelName, _component, _variable)
#         return self.iocsv.get_senyal('KTHLAB:EMLAB'), self.ioh5.get_senyal('block0')
#         return (csvData, self.ioh5.get_senyal('block0'))

    def get_sources(self, _measurement, _component):
        ''' _measurement> 'KTHLAB:EMLAB'
        _component> 'block0'
        '''
        return [self.iocsv.get_senyal(_measurement), self.ioh5.get_senyal(_component)]
    
    def method_ME(self, _measSignal, _simSignal, _order):
        ''' TODO: create a subset of signals from original signal in object senyal
        call mode estimation method with each subset, inside a loop '''
        meEngine= ModeEstimation()
        meEngine.set_order(_order)
        ''' 1) mode Estimation with PMU signal '''
        if _measSignal!= None:
            meEngine.modeEstimationMat('C:/Users/fragom/PhD_CIM/PYTHON/ScriptMAE/lib/mes.jar',_measSignal)
        ''' 2) mode Estimation with simulation signal '''
        if _simSignal!= None:
            meEngine.modeEstimationPY(_simSignal.get_signalReal())
        ''' TODO: pass the whole signal to Vedran mode estimation '''
#         print 'Model Frequency ', meEngine.get_modeFrequency()
#         print 'Model Damping  ', meEngine.get_modeDamping()
        
    def method_ERA(self, _measSignal, _simSignal):
        '''
        _measSignal as output
        _simSignal as input
        '''
        '''TODO: match sampletime from meas with sim '''
#         if (_measSignal.get_sampleTime()!= _simSignal.get_sampleTime()):
        timeSignal= _measSignal.get_sampleTime()
        if _measSignal!= None and _simSignal!= None:
            outSignal= _measSignal.get_signalMag()
            inSignal= _simSignal.get_signalReal()
        else:
            if _measSignal!= None:
                outSignal= _measSignal.get_signalMag()
                inSignal= _measSignal.get_signalMag()
            if _simSignal!= None:
                outSignal= _simSignal.get_signalReal()
                inSignal= _simSignal.get_signalReal()
        num_states = 2
#         a,b,c = mr.compute_ERA_model([timeSignal,outSignal,inSignal], num_states)
        a,b,c = mr.compute_ERA_model(numpy.array(outSignal[0:1000]), num_states)
        print 'Measurements: '
        print 'A= ', a
        print 'B= ', b
        print 'C= ', c
        a,b,c = mr.compute_ERA_model(numpy.array(inSignal), num_states)
        print 'Simulation: '
        print 'A= ', a
        print 'B= ', b
        print 'C= ', c
'''
Created on 4 jun 2015

@author: fragom
'''

from ctrl.StreamCSVFile import InputCSVStream
from datetime import datetime 
import time, os, platform

if __name__ == '__main__':
    
    print 'platform.system() ', platform.system()
    ''' load names from .csv '''
    csvpmu= InputCSVStream('./res/File_8.csv', ',')
#     print csvpmu.load_csvHeader()
    variable= 'KTHLAB:EMLAB:Magnitude'.split(':')[:-1]
    variable = ':'.join(variable)
    csvpmu.load_csvValues(variable,'KTHLAB:EMLAB:Magnitude','KTHLAB:EMLAB:Angle')
#     print csvpmu.get_senyal(variable)
    
#     variable= 'NTNU_PMU:Va:Magnitude'.split(':')[:-1]
#     variable = ':'.join(variable)
#     csvpmu.load_csvValues(variable, 'NTNU_PMU:Va:Magnitude','NTNU_PMU:Va:Angle')
#     print csvpmu.get_senyal(variable)
#     print 'hola'
    ''' select variable, matching variable from model with variable from memory (.csv) '''
#     csvpmu.load_column('KTHLAB:Frequency')
#     print csvpmu.get_signal('KTHLAB:Frequency')
#     print len(csvpmu.get_column('KTHLAB:Frequency'))
#     csvpmu.load_column('Timestamp')