# Data fra RAMS-lab, Bearing # 8 
import csv
import numpy as np
import matplotlib.pyplot as plt
# Henter data fra RMS.py fil, 
# bør lage løsning for å importere fra "skyen"

def getCSV(csvName):  # Read data from csv-file, ignore first row, i.e., header
  first = True
  ret=[]
  with open(csvName, mode ='r')as file:
    csvFile = csv.reader(file)
    for lines in csvFile:
      if first:
        first = False
      else:
        row = []
        for el in lines:
          row.append(float(el))
        ret.append(row)
  return ret      

def extractColumn(A,col):
    '''    
    Extract one specific columns into a new vector
    '''
    nRows = len(A)   
    ret = np.zeros([nRows])
    for row in range(nRows):        
        ret[row]=A[row][col]
    return ret
d = extractColumn(getCSV('RMS.csv'),0)

x = []  # vektor for å holde x-verdier til plott
yRUL = [] # vektor for faktisk RUL til plott
yPRED = [] # vektor for å holde prediksjonene
found = 0 # Flagg for å indikere at trend "har startet"
# s, ss og n benyttes for statistikk
s = 0
ss = 0
n = 0
last =0
for i,d_i in enumerate(d):
    x.append(i)
    if found>0: # Hvis vi har funnet trend, starter statistikkberegningene
        n +=1
        s += d_i-last
        ss += (d_i-last)**2
        if n > 2:
            e = s/n
            v = 1/(n-1)*(ss-n*e*e)
            # Vi beregner både forventning og varians
            # Men vi bruker kun forventningsverdien for prediksjon
            # Vi kan også bruke variansen om vi ønsker f eks 5% persentilen i prediksjonen for RUL
            yRUL.append(150-i)# Her har vi lagt til grunn at levetiden er 150 observasjoner
                              # I praksis vil vi ikke kunne vite hva levetiden ble under selve datainnsamlingen....
            if e > 0: # I prisnippet kan vi få negativ verdi for trend, da gir det ikke mening å predikere RUL
                yPRED.append((1-d_i)/e) # har lagt til grun at feilgrensen er L = 1, dette vil i prasiks være vanskelig, da L varierer...
            else:
                yPRED.append(0)
    elif d_i>0.1: # Bruker her en enkel terskelverdi for tidligvarsling, burde trene modellen på tidligvarsling...
        found = i
    if len(x) > len(yRUL):
        yRUL.append(0)
        yPRED.append(0)
    last = d_i

plt.plot(x, yRUL,label = "Faktisk")
plt.plot(x, yPRED,label = "Predikert")
plt.plot(x, d*100,label = "$100X(t)$")
plt.xlabel(r'$t$')
plt.ylabel('RUL')
plt.legend()
plt.title('Faktisk og predikert RUL')
plt.savefig('RUL.svg')
plt.show()
