
try: paraview.simple
except: from paraview.simple import *

import glob
import os

from subprocess import *
in_filename = "./track3p_results/OUTPUT/enhancementCounter"
print ("in_filename: ", in_filename)



def get_enhancement_data(filename):
  try:
    ifile = open(filename, 'r')
  except:
    print ("error: unable to open file for reading.",  filename)
    return

  enhancement_out = CSVReader(FileName=filename,
                          FieldDelimiterCharacters = ' ',
                          MergeConsecutiveDelimiters = 1,
                          HaveHeaders = 1)

  # this is necessary!  blank objects otherwise...
  enhancement_out.UpdatePipeline()

  return (enhancement_out)


def show_enhancement(enhancement_out):

  ######################################

  lineChartView1 = CreateView('XYChartView')
  lineChartView1.ViewTime=0.0
  lineChartView1.ChartTitle = 'Enhancement Counter vs. Field Gradient'
  lineChartView1.LeftAxisTitle = 'Enhancement Counter'
  lineChartView1.BottomAxisTitle = 'Field Gradient (X10^7 V/m)'


  ######################################
  pf1 = ProgrammableFilter(registrationName='ProgrammableFilter1', Input=enhancement_out)
  pf1.OutputDataSetType = 'vtkTable'
  pf1.CopyArrays = 0
  pf1.RequestUpdateExtentScript = ''
  pf1.PythonPath = ''
  pf1.RequestInformationScript = ''
  pf1.Script = \
"""\
import math
import numpy

try:
  import warnings
  warnings.simplefilter("ignore", numpy.ComplexWarning)
except:
  pass

input = self.GetInput()

s1 = input.GetColumn(0)
e1 = input.GetColumn(2)

n1 = s1.GetNumberOfTuples()
scale = 1.0/1.0e7

# Field
col_s = vtk.vtkDoubleArray()
col_s.SetName("Field")
col_s.SetNumberOfTuples(n1)
for i in range(n1):
  col_s.SetValue(i, scale * s1.GetValue(i))

# enhancement
col_e = vtk.vtkDoubleArray()
col_e.SetName("Enhancement")
col_e.SetNumberOfTuples(n1)
for i in range(n1):
  col_e.SetValue(i, e1.GetValue(i))



####################
# populate the graph

output = self.GetOutputDataObject(0)
output.AddColumn(col_s)
output.AddColumn(col_e)
"""

  pd1 = PlotData(registrationName='PlotData1', Input=pf1)
  #######################################

  pr1 = GetDisplayProperties(pd1)
  pr1.Visibility = 0
  pr1.UseIndexForXAxis = 0
  pr1.XArrayName = 'Field'
  pr1.AttributeType = 'Row Data'
  pr1.SeriesVisibility = ['Enhancement', '1']
  pr1.SeriesLineStyle = ['Enhancement', '0']
  pr1.SeriesMarkerStyle = ['Enhancement', '1']


  pr1.SeriesColor = ['Field',                  '0.0', '1.0', '0.0', \
                     'Enhancement',                  '1.0', '0.0', '0.0', \
                     'vtkOriginalIndices', '0.0', '0.0', '0.0']

  pr1.Visibility = 1
  Show(pd1, lineChartView1, 'XYChartRepresentation')
  return lineChartView1

################################################################################

def show_max_enhancement(enhancement_out):

  ######################################

  lineChartView2 = CreateView('XYChartView')
  lineChartView2.ViewTime=0.0
  lineChartView2.ChartTitle = 'Max Enhancement Counter vs. Field Gradient'
  lineChartView2.LeftAxisTitle = 'Max Enhancement Counter'
  lineChartView2.BottomAxisTitle = 'Field Gradient (X10^7V/m)'

  ######################################
  pf2 = ProgrammableFilter(registrationName='ProgrammableFilter1', Input=enhancement_out)
  pf2.OutputDataSetType = 'vtkTable'
  pf2.CopyArrays = 0
  pf2.RequestUpdateExtentScript = ''
  pf2.PythonPath = ''
  pf2.RequestInformationScript = ''
  pf2.Script = \
"""\
import math
import numpy

try:
  import warnings
  warnings.simplefilter("ignore", numpy.ComplexWarning)
except:
  pass

input = self.GetInput()

s1 = input.GetColumn(0)
e1 = input.GetColumn(3)

n1 = s1.GetNumberOfTuples()
scale = 1.0/1.0e7

# Field
col_s = vtk.vtkDoubleArray()
col_s.SetName("Field")
col_s.SetNumberOfTuples(n1)
for i in range(n1):
  col_s.SetValue(i, scale * s1.GetValue(i))

# enhancement
col_e = vtk.vtkDoubleArray()
col_e.SetName("Max_En")
col_e.SetNumberOfTuples(n1)
for i in range(n1):
  col_e.SetValue(i, e1.GetValue(i))



####################
# populate the graph

output = self.GetOutputDataObject(0)
output.AddColumn(col_s)
output.AddColumn(col_e)
"""


  pd2 = PlotData(registrationName='PlotData2', Input=pf2)
  #######################################

  pr2 = GetDisplayProperties(pd2)
  pr2.Visibility = 0
  pr2.UseIndexForXAxis = 0
  pr2.XArrayName = 'Field'
  pr2.AttributeType = 'Row Data'
  pr2.SeriesVisibility = ['Max_En', '1']
  pr2.SeriesLineStyle = ['Max_En', '0']
  pr2.SeriesMarkerStyle = ['Max_En', '5']


  pr2.SeriesColor = ['Field',                  '0.0', '1.0', '0.0', \
                     'Max_En',                  '1.0', '0.0', '0.0', \
                     'vtkOriginalIndices', '0.0', '0.0', '0.0']

  pr2.Visibility = 1
  Show(pd2, lineChartView2, 'XYChartRepresentation')
  return lineChartView2

################################################################################

paraview.simple._DisableFirstRenderCameraReset()

filename = in_filename

if filename == '':
  print ("enhancement counter vs. field gradient plot cancelled.")
else:
  print("filename:", filename)

  enhancement_out = get_enhancement_data(filename)

lineChartView1 = show_enhancement(enhancement_out)
lineChartView2 = show_max_enhancement(enhancement_out)
layout1 = CreateLayout(name=' enhancement counter plot')
layout1.SplitVertical(0, 0.500000)
layout1.AssignView(1, lineChartView1)
layout1.AssignView(2, lineChartView2)

SetActiveView(lineChartView2)
Render()
