# messages.properties
#
# /*******************************************************************************
# * Copyright (c) 2007, 2008 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# *******************************************************************************/

# Comma separated variable
CSC.title=CSV

# Common
COMMON.NOTFOUND=Scenario folder not found!
COMMON.NOTDATA=Invalid data or path!
COMMON.DONE=Done
COMMON.READY=Ready to Plot
COMMON.WORKING=Working
COMMON.STATUS=Status
COMMON.CLEAR=Clear Monitors
COMMON.INCIDENCE=Incidence
COMMON.DELTABIRTHS=deltaBirths
COMMON.DELTADEATHS=deltaDeaths
COMMON.TIME=time
COMMON.ITERATION=#iteration
COMMON.AGGREGATE_TITLE=Epidemic Aggregate Data View
COMMON.SYNCHRONIZER=PhaseSynchronizer
COMMON.ERRORINIT=Problem initializing chart



# Epidemic view
EPIVIEW.SELECTDIR=Select Folder
EPIVIEW.AGGREGATEDATA=Aggregate data
EPIVIEW.REFERENCEFOLDERLABEL=Use Reference Filter
EPIVIEW.SELECTFILE=Select File
EPIVIEW.SELECTSCENARIOFOLDER=Select scenario folder
EPIVIEW.SELECTREFERENCEFOLDER=Select reference folder
EPIVIEW.SELECTAGGFILE=Select Aggregate file
EPIVIEW.SELECTINCFILE=Select Incidence file
EPIVIEW.PLOTTEXT=Plot
EPIVIEW.AGGREGATELEGEND=Epidemic
EPIVIEW.YAXIS=Population
EPIVIEW.SCENARIOFOLDERLABEL=Scenario Folder:
EPIVIEW.AGGFILELABEL= Scenario Aggregate File
EPIVIEW.INCFILELABEL= Scenario Incidence File

# Incidence chart part of EPIVIEW
INCVIEW.INCIDENCELEGEND=Incidence
INCVIEW.YAXIS=Incidence

# Estimator view
EST.TITLE=Parameter Estimation
EST.ESTIMATE=Estimate Parameters
EST.SELECTESTIMATOR=Select
EST.RESULTS=Results:
EST.COMPLETE=Parameter Estimation Complete
EST.SCFOLDER=Scenario Folder:
EST.PARAMESTIMATOR=Parameter Estimator:
EST.SELECTFOLDEBUTTON=Select Scenario Folder
EST.SELECTFOLDEDIALOGTITLE=Choose Scenario Folder
EST.PARAMESTTITLE=Select Parameter Estimator
EST.PARAMESTLABEL=Select Parameter Estimator:
EST.WIZARDPAGE1TITLE=Select Scenario Folder
EST.CHOICE1=Fit Each Location Then Average
EST.CHOICE2=Sum Over All Locations Then Fit
EST.MAXTHRESHOLDS=Max S 
EST.MINTHRESHOLDS=Min S 
EST.MAXTHRESHOLDE=Max E 
EST.MINTHRESHOLDE=Min E 
EST.MAXTHRESHOLDI=Max I 
EST.MINTHRESHOLDI=Min I 
EST.MAXTHRESHOLDR=Max R 
EST.MINTHRESHOLDR=Max R 
EST.RESULTS=Results
EST.INPUTDATA=Input Data
EST.REGRESSION=Regression
EST.AVERAGE=Average
EST.DISPLAY=Data to Display
EST.EQUATION1=Eq.1
EST.EQUATION2=Eq.2
EST.EQUATION3=Eq.3
EST.EQUATION4=Eq.4
EST.AXISLABEL1=S,S*
EST.AXISLABEL2=E,E*
EST.AXISLABEL3=I,I*
EST.AXISLABEL4=R,R*
EST.RAXISLABEL1=from dS/dT
EST.RAXISLABEL2=from dE/dT
EST.RAXISLABEL3=from dI/dT
EST.RAXISLABEL4=from dR/dT
#
# beta(f)
EST.FREQBETA=\u03b2(f)
# beta(rho)
EST.DENSITYBETA=\u03b2(\u03c1)

# Lyapunov view
LYA.DIVERGENCELEGEND=Lyapunov Trajectory Divergence
LYA.DIVERGENCEYAXIS=ln[delta]
LYA.TITLE=Lyapunov Analysis
LYA.COMPARISON=Compute Lyapunov Exponent
LYA.RESULTS=Results
LYA.WORKING=...working
LYA.DONE=done.
LYA.ERROR1=Invalid Folder. Please pick a complete SCENARIO folder. Not (e.g.) an aggregate folder. 
LYA.COMPLETE=Comparison Complete
LYA.SELECTFOLDER=Select Scenario Folder
LYA.SELECTFOLDERDIALG=Pick a scenario folder
LYA.FOLDER1LABEL=Scenario Folder 1:
LYA.FOLDER2LABEL=Scenario Folder 2:
LYA.DEVIATION=LyapunovDeviation

# Scenario comparison view
COMP.RMSDIFFERENCELABEL = Error
COMP.RMSSTRING=Error
COMP.ANALYZE=Analyze
COMP.TITLE = Scenario Comparison
COMP.COMPARE = RMS Compare
COMP.RESULTS = Results:
COMP.SELECTFOLDERBUTTON=Select Folder
COMP.SELECTFOLDERDIALOG=Pick a scenario folder
COMP.FOLDER1LABEL=Reference Scenario Folder:
COMP.FOLDER2LABEL=Compare Scenario Folder(s):
COMP.ERRORFUNCTION=Error Function

# Processor view
PROCESSOR.TITLE =Data Processor
PROCESSOR.SOURCEFOLDER=Source Folder:
PROCESSOR.SELECTSOURCEFOLDER=Select Source Folder
PROCESSOR.SELECTSOURCEFOLDEDIALOGTITLE=Choose Source Folder
PROCESSOR.TARGETFOLDER=Target Folder:
PROCESSOR.SELECTTARGETFOLDER=Select Target Folder
PROCESSOR.SELECTTARGETFOLDEDIALOGTITLE=Choose Target Folder
PROCESSOR.POPULATIONDATAFILE=Population Data File:
PROCESSOR.SELECTPOPULATIONDATAFILE=Select Population Data File
PROCESSOR.SELECTPOPULATIONDATAFILEDIALOGTITLE=Choose Population Data File
PROCESSOR.NAMEDATAFILE=Name Data File:
PROCESSOR.SELECTNAMEDATAFILE=Select Name Data File
PROCESSOR.SELECTNAMEDATAFILEDIALOGTITLE=Choose Name Data File
PROCESSOR.RECOVERYRATE=Recovery Rate
PROCESSOR.SUSCEPTIBLERATE=Susceptible Rate
PROCESSOR.IMMUNITYLOSSRATE=Immunity Loss Rate
PROCESSOR.PROCESS= Process Data
PROCESSOR.PARAMETERS=Disease Parameters:
PROCESSOR.POPULATIONSIZE=Population Size:
PROCESSOR.STARTYEAR=Start Year
PROCESSOR.ENDYEAR=End Year
PROCESSOR.READINGDATA=Reading data...
PROCESSOR.FAILEDREADDATA=Invalid data

# Time series chart
TS.TIMELABEL=Time

# Context menu entries
ContextMenu.LinearTimeScale=Linear Scale
ContextMenu.LogTimeScale=Log Scale
ContextMenu.LinearScaling=Linear Scale
ContextMenu.LogScaling=Log Scale
ContextMenu.ShowLegend=Show Legend
ContextMenu.HideLegend=Hide Legend
