#root='/n/gps-base/data0/lanl/gps'
#omniroot= "file:/n/gps-base/data0/lanl/omni/"
rootstr='L:/ct/lanl/gpsdata'
omniroot= "file:/L:/ct/lanl/gpsdata/omni/"
spacecraft= 'ns41'

# file storage model
root = FileSystem.create( File( rootstr + '/level_2/'+spacecraft+'/').toURI().toURL() );
fsm= FileStorageModel.create( root, spacecraft+'_%Y%m%d_l1-001_l2-001.kp2' );
fsm.setFileWidth(7,'d');

problemsRoot = FileSystem.create( File( rootstr + '/level_2/'+spacecraft+'/release' ).toURI().toURL() );
problemsFsm= FileStorageModel.create( problemsRoot, spacecraft + '_%Y%m%d_l1-001_l2-001.kp2.*' );
problemsFsm.setFileWidth(7,'d');

canvas= DasCanvas(800,600)

eeFluxRange= DatumRange.newDatumRange( 0.6, 60000, Units.dimensionless )
ppFluxRange= DatumRange.newDatumRange( 0.01, 400, Units.dimensionless )
llRange= DatumRange.newDatumRange( 4,13, Units.dimensionless )

eventsBar= DasPlot.createPlot( DatumRangeUtil.parseTimeRange("2005-05-13 to 2005-05-20"), DatumRange.newDatumRange(0,1,Units.dimensionless) )
timeAxis= eventsBar.getXAxis()

eePlot= DasPlot( timeAxis.createAttachedAxis(), DasAxis(eeFluxRange,DasAxis.VERTICAL) )
ppPlot= DasPlot( timeAxis.createAttachedAxis(), DasAxis(ppFluxRange,DasAxis.VERTICAL) )
llPlot= DasPlot( timeAxis.createAttachedAxis(), DasAxis(llRange,DasAxis.VERTICAL) )
dstPlot= DasPlot( timeAxis.createAttachedAxis(), DasAxis(DatumRange.newDatumRange( -50, 10, Units.dimensionless ),DasAxis.VERTICAL) )

column= DasColumn.create( canvas, None, "0%+5em", "100%-5em" )

stackRow= DasRow.create( canvas, None, "0%+1em", "90%" )

canvas.add( eePlot, DasRow.create( None, stackRow, "0%+1em", "33%" ), column )
canvas.add( ppPlot, DasRow.create( None, stackRow, "33%+1em", "66%" ), column )
canvas.add( llPlot, DasRow.create( None, stackRow, "66%+1em", "82%" ), column )
canvas.add( dstPlot, DasRow.create( None, stackRow, "82%+1em", "100%" ), column )
canvas.add( eventsBar, DasRow.create( None, stackRow, "100%+1em", "100%+2em" ), column )

eePlot.getXAxis().setTickLabelsVisible(0)
ppPlot.getXAxis().setTickLabelsVisible(0)
llPlot.getXAxis().setTickLabelsVisible(0)
dstPlot.getXAxis().setTickLabelsVisible(0)

eePlot.title='LANL GPS '+spacecraft

eePlot.getYAxis().label='Electrons'
ppPlot.getYAxis().label='Protons'
llPlot.getYAxis().label='L Shell'
dstPlot.getYAxis().label='DST'

eePlot.getYAxis().setLog(1)
ppPlot.getYAxis().setLog(1)

eventsBar.getYAxis().setTickLabelsVisible( 0 )
eventsBar.getYAxis().setVisible(0)

canvas.validate()

eventsRend= EventsRenderer()
eventsRend.setWidthPlaneId( GpsProblemsDataSetDescriptor.PLANE_WIDTH )

gpdsd= GpsProblemsDataSetDescriptor( problemsFsm )
eventsRend.setDataSetDescriptor( gpdsd )

OKAY_COLOR= Color( 200,255,200 )
PROBLEM_COLOR= Color( 255,200,200 )

class MyColorSpecifier(EventsRenderer.ColorSpecifier):
  def getColor( self, d ):
    s= GpsProblemsDataSetDescriptor.units.getObject( d )

eventsRend.setColorSpecifier( MyColorSpecifier() )

class MyTextSpecifier( EventsRenderer.TextSpecifier ):
  def getText( self, range, d ):
    comments= gpdsd.getCommentsFor( d )
    comments= java.lang.String.valueOf(d) + "!c" + comments.replace("!","!!").replace( "\n", "!c" )
    return comments

eventsRend.setTextSpecifier( MyTextSpecifier() )
eventsBar.addRenderer( eventsRend )

for i in range(16,24):
  rend= SeriesRenderer()
  rend.setColor( Color.getHSBColor( (i-16.)/8., 0.8, 0.8 ) )
  rend.setSymSize(1.0)
  c= rend.color
  rend.setFillColor( Color( c.red, c.green, c.blue, 88 ) )
  rend.setDataSetDescriptor( GpsSliceDataSetDescriptor(fsm,i) )
  eePlot.addRenderer( rend )

class LabelCanvasComponent(DasCanvasComponent):
  def __init__( self, plot, labels ):
    self.plot= plot
    self.labels= labels

  def paintComponent( self, g ):
    bounds= DasCanvasComponent.getBounds(self)
    g.setColor( Color( 240,240,240,240) )
    g.fillRoundRect( 0, 0, bounds.width-1, bounds.height-1, 5, 5 )

    rends= self.plot.getRenderers()
    labels= self.labels
    #P1[>1.27]     P2[>5.32]     P3[>9.46]     P4[>15.8]     P5[>24.3]     P6[>35.5]     P7[>50.4]     P8[>54.1]
    x= 3

    i=0
    for rend in rends:
      g.setColor( rend.getColor() )
      g.drawString( labels[i], x, g.getFontMetrics().getAscent()-4 )
      x+= g.getFontMetrics().stringWidth(labels[i]) + 10
      i= i+1

      #DasCanvasComponent.paintComponent(self,g)


labelC= LabelCanvasComponent( eePlot, "E1>[0.08]  E2[>0.25] E3[>0.48] E4[>0.90] E5[>1.64] E6[>2.88] E7[>4.97] E8[>7.57] ".split(" ") )
labelC.putClientProperty( JLayeredPane.LAYER_PROPERTY, DasCanvas.ANNOTATION_LAYER )
canvas.add( labelC, DasRow.create( None, eePlot.getRow(), "0%+5pt", "0%+1em+3pt" ), DasColumn.create( None, eePlot.getColumn(), "0%+5pt", "100%-5pt" ) )

for i in range(24,32):
  rend= SeriesRenderer()
  rend.setColor( Color.getHSBColor( (i-24.)/8., 0.8, 0.8 ) )
  rend.setSymSize(1.0)
  rend.setDataSetDescriptor( GpsSliceDataSetDescriptor(fsm,i) )
  ppPlot.addRenderer( rend )

labelC= LabelCanvasComponent( ppPlot, "P1[>1.27] P2[>5.32] P3[>9.46] P4[>15.8] P5[>24.3] P6[>35.5] P7[>50.4] P8[>54.1] ".split(" ") )
labelC.putClientProperty( JLayeredPane.LAYER_PROPERTY, DasCanvas.ANNOTATION_LAYER )
canvas.add( labelC, DasRow.create( None, ppPlot.getRow(), "0%+5pt", "0%+1em+3pt" ), DasColumn.create( None, ppPlot.getColumn(), "0%+5pt", "100%-5pt" ) )

rend= SeriesRenderer()
rend.setDataSetDescriptor( GpsSliceDataSetDescriptor(fsm,7) )
rend.setPsym( DefaultPlotSymbol.NONE )

llPlot.addRenderer( rend )

fs= FileSystem.create( URL( omniroot ) )

fsm= FileStorageModel.create( fs, "omni2_%Y.dat" )
parser= AsciiParser.newParser(46)

timeParser= TimeParser.create("%Y %j %H")
class MyFieldParser(AsciiParser.FieldParser):
  def parseField( self, field, fieldIndex ):
    return timeParser.parse( field ).getTime( Units.mj1958 )

timeFieldParser= MyFieldParser()

fparser= parser.setFixedColumnsParser( \
  ( 0, 54 ),  \
  ( 11, 6 ),  \
  ( timeFieldParser, AsciiParser.DOUBLE_PARSER ) )
parser.setRecordParser( fparser )
parser.setUnits(0,Units.mj1958)

dstDsd= AsciiTableDataSetDescriptor( fsm )
dstDsd.setAsciiParser( parser )
dstDsd.setRank1Column(1)
dstDsd.setDep0Column(0)

dstRend= SeriesRenderer( histogram=1, psym=DefaultPlotSymbol.NONE, fillToReference=1, dataSetDescriptor=dstDsd )
dstPlot.addRenderer( dstRend )

frame= DasApplication.getDefaultApplication().createMainFrame("gspl1",canvas)
frame.setVisible(True)

