' Name: Plot_Menu ' ' Title: Plot water quality data (main menu) ' ' Topics: Views ' ' Description: Asks user for specifications for Plot script, which plots INORGANIC.DAT time series ' Initial idea from: ' Palle Due Larsen in "Graphics the hard way: Time Series in Avenue" ' at http://www.esri.com/library/userconf/proc96/TO250/PAP246/P246.HTM ' ' Author: Michael Silberbauer 2001-04-25 ' Institute for Water Quality Studies, Department of Water Affairs & Forestry ' Private Bag X313 PRETORIA South Africa 0001 ' ' ' Requires: Plot_Menu prompts for the input data and calls Plot ' ' Self: ' ' Results: ' ----------------------------------------------------------------------------- UserTypeList = { "Domestic_Health", "Domestic_Salts", "Irrigation", "None" } DefaultColourList = { Color.GetBlue, Color.GetCyan, Color.GetGreen, Color.GetYellow, Color.GetMagenta, Color.GetRed, Color.GetGray, Color.GetBlack } theProject = av.GetProject DocumentList = theProject.GetDocs TableList = List.Make for each anItem in DocumentList if( anItem.is( table ) ) then TableList.Add( anItem ) end end InorganicData = MsgBox.ListAsString ( TableList, "Select a file with water quality data", "DATA TABLES" ) if( InorganicData <> nil ) then theVTab = InorganicData.getVTab else MsgBox.Info( "No tables available (yet) in this project", "ERROR: NO TABLE" ) exit end stnlist = List.Make Stations = List.Make if( MsgBox.YesNo ( "Do you wish to select the stations from a list?", "STATION SELECTION MODE", true ) ) then StationData = MsgBox.ListAsString ( TableList, "Select a file with monitoring point names", "STATION FILE" ) if( StationData <> nil ) then theStnVTab = StationData.getVTab else MsgBox.Info( "No tables available in this project", "ERROR: NO TABLE" ) exit end FieldList = theStnVTab.GetFields shortlist = List.Make for each fieldname in FieldList if( ( fieldname.asString.Contains( "st" ) ) or ( fieldname.asString.Contains( "mon" ) ) ) then shortlist.Add( fieldname ) 'MsgBox.Info( fieldname.AsString, "FIELD" ) end end selfield = MsgBox.ListAsString( shortlist, "Choose a field from"++StationData.AsString, "SELECT FIELD WITH STATION CODES" ) if( selfield = nil ) then MsgBox.Info( "Stopping execution", "NO STATION FIELD SELECTED" ) return nil else StationField = selfield 'MsgBox.Info( StationField.AsString, "Station field:" ) end theStnField = theStnVTab.FindField( StationField.AsString ) for each rec in theStnVTab stnlist.Add( theStnVTab.ReturnValue( theStnField, rec ) ) end Stations = MsgBox.MultiListAsString( stnlist, "Choose monitoring points (shift to select many)", "SELECT STATIONS TO PLOT" ) else Stations.Add( MsgBox.Input ( "Enter name of station to plot:", "SINGLE STATION TO PLOT", "A2H027Q01") ) end ' Funny things happen to variable names during file conversion: _ValType ' keeps track of this: _ValType = "Val_info" if( InorganicData.AsString.Contains( ".dbf" ) ) then ' text file _ValType = "Val_info_dbf" end if( InorganicData.AsString.Contains( ".txt" ) ) then ' text file _ValType = "Val_info_txt" end theVTab.GetSelection.ClearAll theVTab.UpdateSelection FieldList = theVTab.GetFields shortlist = List.Make for each fieldname in FieldList if( fieldname.asString.Contains( "date" ).Not ) then shortlist.Add( fieldname ) 'MsgBox.Info( fieldname.AsString, "FIELD" ) end end 'selfields = MsgBox.MultiListAsString( shortlist, "Choose fields (Shift to select many)", "SELECT FIELDS TO PLOT" ) selfield = MsgBox.ListAsString( shortlist, "Choose a field from"++InorganicData.AsString, "SELECT FIELD TO PLOT" ) if( selfield = nil ) then MsgBox.Info( "NO FIELDS SELECTED", "Stopping execution" ) return nil else PlotItem = selfield 'MsgBox.Info( PlotItem.AsString, "Item to plot:" ) end _UseType = MsgBox.ListAsString( UserTypeList, "Choose a user type for guidelines", "SELECT USER TYPE" ) av.Run( "SetConstants", { } ) CutList = _UseVariables.Get( PlotItem.AsString ) 'MsgBox.ListAsString( CutList, "CutList", "DEBUG" ) RGBList = _theColourDict.Get( PlotItem.AsString ) 'MsgBox.ListAsString( RGBList, "RGBList", "DEBUG" ) ColList = List.Make labels = { "Start year", "Start month", "Start day", "End year", "End month", "End day", "Y Max" } default = { "1996", "1", "1", "2000", "12", "31", "Auto" } if( CutList <> nil ) then vType = CutList.Get( 1 ) nCuts = CutList.Get( 2 ) Guideline1 = CutList.Get( 3 ) for each nCut in 3 .. ( nCuts + 2 ) labels.Add( "Cutpoint"++( nCut - 2 ).AsString ) default.Add( CutList.Get( nCut ).AsString ) end else vType = 1 nCuts = 1 labels.Add( "Cutpoint default" ) default.Add( "42" ) ColList.Add( DefaultColourList.Get( 0 ) ) ColList.Add( DefaultColourList.Get( 4 ) ) end selection = MsgBox.MultiInput( "Choose dates and graph limits for"++PlotItem.AsString++"in"++InorganicData.AsString+":", "SELECTION PARAMETERS", labels, default ) if( selection = nil ) then MsgBox.Info( "Nothing selected", "PLOT STOPPING" ) exit else StartYear = selection.Get( 0 ) StartMonth = selection.Get( 1 ) end if( StartMonth.Count = 1 ) then StartMonth = "0"+StartMonth end StartDay = selection.Get( 2 ) if( StartDay.Count = 1 ) then StartDay = "0"+StartDay end StartDate = StartYear+StartMonth+StartDay Date1 = Date.Make( StartDate, "yyyyMMdd" ) EndYear = selection.Get( 3 ) EndMonth = selection.Get( 4 ) if( EndMonth.Count = 1 ) then EndMonth = "0"+EndMonth end EndDay = selection.Get( 5 ) if( EndDay.Count = 1 ) then EndDay = "0"+EndDay end EndDate = EndYear+EndMonth+EndDay Date2 = Date.Make( EndDate, "yyyyMMdd" ) if( (Date1.AsString = "nil" ) or ( Date2.AsString = "nil" ) ) then MsgBox.Info( "Invalid date range"++StartDate++EndDate, "Stopping execution" ) return nil end Ymax_set = selection.Get( 6 ) Guidelines = List.Make for each nCol in 7 .. ( nCuts + 6 ) Guidelines.Add( selection.Get( nCol ).AsNumber ) end for each nCol in 7 .. ( nCuts + 7 ) if( RGBList <> nil) then ColIndx1 = ( nCol - 6 ) * 3 ColIndx2 = ColIndx1 + 1 ColIndx3 = ColIndx1 + 2 R = RGBList.Get( ColIndx1 ) G = RGBList.Get( ColIndx2 ) B = RGBList.Get( ColIndx3 ) aCol = Color.Make aCol.SetRGBList( { R, G, B } ) ColList.Add( aCol ) else ColList.Add( DefaultColourList.Get( ( nCol - 7 ) ) ) end end if( Date2 < Date1 ) then Date0 = Date2 Date2 = Date1 Date1 = Date0 end TypeList = { "Stick", "Area", "Box" } GraphType = MsgBox.ChoiceAsString( TypeList, "Please select a graph type:", "GRAPH TYPES AVAILABLE" ) av.ShowStopButton av.ShowMsg( "Seeking graph limits for"++PlotItem.AsString++"..." ) nStn = 0 for each station in stations nStn = nStn + 1 av.SetStatus( 100 * ( nStn / stations.Count ) ) av.Run( "Plot", { theVTab, Station, PlotItem, Date1, Date2, TypeList, GraphType, vType, Ymax_set, ColList, Guidelines } ) end