sensotwin.lifetime_extrapolation.simulation.lib.readVTT

 1import vtk
 2from vtk.util import numpy_support as vtknp
 3import numpy as np
 4import pandas as pd
 5
 6def f_readVTTFile(filename):
 7    '''
 8    Create a reader to read in a .vtt file.
 9
10    Parameters:
11    - filename(string):
12        Name of the file to read in.
13    
14    Returns:
15    - reader (vtkXMLTableReader):
16        Reader handle.
17    '''
18    reader = vtk.vtkXMLTableReader()
19    reader.SetFileName(filename)
20    reader.Update()
21    
22    return reader
23
24def f_convertVtkTableToPandasDF(vtk_table):
25    '''
26    Converts a .vtt table to a pandas dataframe.
27    
28    Parameters:
29    - vtk_table (vtkTable):
30        Table to convert to a pandas dataframe.
31
32    Returns:
33    - dataframe (DataFrame):
34        Pandas dataframe.
35    '''
36    n_columns = vtk_table.GetRowData().GetNumberOfArrays()
37    n_rows = vtk_table.GetColumn(0).GetSize()
38    column_names = [vtk_table.GetColumnName(x) for x in range(n_columns)]
39    column_data = []
40    for i in range(n_columns):
41        current_column = vtk_table.GetColumn(i)
42        if isinstance(current_column, vtk.vtkStringArray):
43            column_data.append([vtk_table.GetColumn(i).GetValue(x) for x in range(n_rows)])
44        elif isinstance(current_column, vtk.vtkDoubleArray) or isinstance(current_column, vtk.vtkIntArray):
45            column_data.append(vtknp.vtk_to_numpy(vtk_table.GetColumn(i)))
46    column_data = list(map(list, zip(*column_data))) # transpose
47    dataframe = pd.DataFrame(column_data)
48    dataframe.columns = column_names
49    
50    return dataframe
51
52def f_readVTT2DF(filename):
53    '''
54    Reads in a .vtt file and returns a pandas dataframe.
55
56    - filename(string):
57        Name of the file to read in.
58    
59    Returns:
60    - dataframe (DataFrame):
61        Pandas dataframe.
62    '''
63    reader = f_readVTTFile(filename)
64    table = vtk.vtkTable()
65    table.DeepCopy(reader.GetOutput())
66    dataframe = f_convertVtkTableToPandasDF(table)
67
68    return dataframe
69
70def main():
71    # ---------- user input ---------- #
72
73    filename = 'adjacent_elements_db.vtt'
74
75    # -------------------------------- #
76
77    reader = f_readVTTFile(filename)
78    table = vtk.vtkTable()
79    table.DeepCopy(reader.GetOutput())
80    dataframe = f_convertVtkTableToPandasDF(table)
81    
82if __name__ == '__main__':
83    main()
def f_readVTTFile(filename):
 7def f_readVTTFile(filename):
 8    '''
 9    Create a reader to read in a .vtt file.
10
11    Parameters:
12    - filename(string):
13        Name of the file to read in.
14    
15    Returns:
16    - reader (vtkXMLTableReader):
17        Reader handle.
18    '''
19    reader = vtk.vtkXMLTableReader()
20    reader.SetFileName(filename)
21    reader.Update()
22    
23    return reader

Create a reader to read in a .vtt file.

Parameters:

  • filename(string): Name of the file to read in.

Returns:

  • reader (vtkXMLTableReader): Reader handle.
def f_convertVtkTableToPandasDF(vtk_table):
25def f_convertVtkTableToPandasDF(vtk_table):
26    '''
27    Converts a .vtt table to a pandas dataframe.
28    
29    Parameters:
30    - vtk_table (vtkTable):
31        Table to convert to a pandas dataframe.
32
33    Returns:
34    - dataframe (DataFrame):
35        Pandas dataframe.
36    '''
37    n_columns = vtk_table.GetRowData().GetNumberOfArrays()
38    n_rows = vtk_table.GetColumn(0).GetSize()
39    column_names = [vtk_table.GetColumnName(x) for x in range(n_columns)]
40    column_data = []
41    for i in range(n_columns):
42        current_column = vtk_table.GetColumn(i)
43        if isinstance(current_column, vtk.vtkStringArray):
44            column_data.append([vtk_table.GetColumn(i).GetValue(x) for x in range(n_rows)])
45        elif isinstance(current_column, vtk.vtkDoubleArray) or isinstance(current_column, vtk.vtkIntArray):
46            column_data.append(vtknp.vtk_to_numpy(vtk_table.GetColumn(i)))
47    column_data = list(map(list, zip(*column_data))) # transpose
48    dataframe = pd.DataFrame(column_data)
49    dataframe.columns = column_names
50    
51    return dataframe

Converts a .vtt table to a pandas dataframe.

Parameters:

  • vtk_table (vtkTable): Table to convert to a pandas dataframe.

Returns:

  • dataframe (DataFrame): Pandas dataframe.
def f_readVTT2DF(filename):
53def f_readVTT2DF(filename):
54    '''
55    Reads in a .vtt file and returns a pandas dataframe.
56
57    - filename(string):
58        Name of the file to read in.
59    
60    Returns:
61    - dataframe (DataFrame):
62        Pandas dataframe.
63    '''
64    reader = f_readVTTFile(filename)
65    table = vtk.vtkTable()
66    table.DeepCopy(reader.GetOutput())
67    dataframe = f_convertVtkTableToPandasDF(table)
68
69    return dataframe

Reads in a .vtt file and returns a pandas dataframe.

  • filename(string): Name of the file to read in.

Returns:

  • dataframe (DataFrame): Pandas dataframe.
def main():
71def main():
72    # ---------- user input ---------- #
73
74    filename = 'adjacent_elements_db.vtt'
75
76    # -------------------------------- #
77
78    reader = f_readVTTFile(filename)
79    table = vtk.vtkTable()
80    table.DeepCopy(reader.GetOutput())
81    dataframe = f_convertVtkTableToPandasDF(table)