TrainingCourses/Universities/CTU.cz/PRA2/scripts/2021-3-17_data_access.py

'''
Authors: Ing. Kateřina Hromasová, Jakub Svoboda
katerina.hromasova@fjfi.cvut.cz, svoboj68@fjfi.cvut.cz
Date: 17th March 2021

Note that you might have to change the URL in the load_basic function
depending on how the oscilloscope folder is called.
'''

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd # for reading csv files

URL_BASE = 'http://golem.fjfi.cvut.cz'  #base URL for GOLEM data access

def load_basic(name, shot):
    '''
    Loads signals from basic diagnostics osciloscope.

    Uses predefined folder for Basic diagnostic that can have different name for older shots.
    
    Parameters
    ----------
    name : str
        {'U_Loop, U_BtCoil, U_RogCoil'}
    shot : int
        golem shot number
    
    Returns
    -------
    t, np.ndarray
        time axis for given signal
    data, np.array
        oscilloscope data of given diagnostic name in given shot
    '''
    url = '{}/shots/{}/Diagnostics/BasicDiagnostics/{}.csv'.format(URL_BASE, shot, name)
    print(url)
    df = pd.read_csv(url, names=['time', name], index_col='time')
    t = np.array(df.index)
    data = np.transpose(np.array(df))[0]
    return t, data 

def load_rigol(name, shot, group='b'):
    '''
    Loads data from Rigol osciloscope controled by students.

    Uses the file structure for the summer semester 2021.
    
    Parameters
    ----------
    name, str
        {'U_Loop, U_BtCoil, U_RogCoil', U_photod}
    shot, int
        golem shot number
    group, str, optional
        number or letter of rigol osciloscope, should math that of group, by default 'b'
    
    Returns
    -------
    t, np.ndarray
        time axis for given signal
    data, np.array
        oscilloscope data of given diagnostic name in given shot
    '''
    url = f'{URL_BASE}/shots/{shot}/Diagnostics/BasicDiagnostics4TrainCourses/DAS_raw_data_dir-{group}/{name}-{group}.csv'
    print(url)
    df = pd.read_csv(url, names=['time', name], index_col='time')
    t = np.array(df.index)
    data = np.transpose(np.array(df))[0]
    return t, data  
    
if __name__ == '__main__':
    plt.ion()
    # Download oscilloscope data of loop voltage
    t, data = load_basic('U_Loop', 35091)

    # Plot their time trace
    fig = plt.figure('Loop voltage')
    plt.gca().set_title('Loop voltage')
    plt.plot(t*1000, data)
    plt.xlabel('$t$ [ms]')
    plt.ylabel('$U_l$ [V]')
    plt.grid(True)
    fig.tight_layout()