Displaying differences for changeset
 
display as  

src/java/m/cfa/CDSN_Data.java

@@ -16,7 +16,7 @@
 import org.codehaus.jettison.json.JSONObject;
 
 /**
-* Last Updated: 6-July-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 19-April-2016
 */
@@ -32,11 +32,11 @@
      * @param maxLong  the maximum longitude for the station search
      * @return an ArrayList<String> containing the web service result(s)
      */
-    private ArrayList<String> downloadCDSNstations(boolean resultSummaryTF, 
-                                                   String minLat,
-                                                   String maxLat,
-                                                   String minLong,
-                                                   String maxLong) throws IOException{
+    private static ArrayList<String> downloadCDSNstations(boolean resultSummaryTF, 
+                                                          String minLat,
+                                                          String maxLat,
+                                                          String minLong,
+                                                          String maxLong) throws IOException{
         //Specify station search url from inputs
         //http://awqmsws.goldsystems.com/api/MonitoringLocationsVer1?ContentType=json&CountyName=BROADWATER
         String cdsnStationWebsite = "http://awqmsws.goldsystems.com/api/MonitoringLocationsVer1?ContentType=json&IncludeResultSummary="+ String.valueOf(resultSummaryTF) + 
@@ -58,7 +58,7 @@
         //WatershedManagementUnit (?)
         
         //Open the provided website
-        ArrayList<String> pageData = new ArrayList<String>();
+        ArrayList<String> pageData = new ArrayList<>();
         try{
             URL webpage = new URL(cdsnStationWebsite);
             URLConnection yc = webpage.openConnection();
@@ -86,12 +86,13 @@
      * @param maxLong  the maximum longitude for the station search
      * @return JSONArray of CDSN stations within the bounding lat/long box
      * @throws IOException
+     * @throws org.codehaus.jettison.json.JSONException
      */
-    public JSONArray getCDSNstations(boolean resultSummaryTF, 
-                                     String minLat,
-                                     String maxLat,
-                                     String minLong,
-                                     String maxLong) throws IOException, JSONException {
+    public static JSONArray getCDSNstations(boolean resultSummaryTF, 
+                                            String minLat,
+                                            String maxLat,
+                                            String minLong,
+                                            String maxLong) throws IOException, JSONException {
         //Get CDSN stations
         ArrayList<String> stationList = downloadCDSNstations(resultSummaryTF, minLat, maxLat, minLong, maxLong);
         
@@ -112,11 +113,11 @@
      * @param endDate  the user defined end date of search (yyyy-mm-dd)
      * @return an ArrayList<String> containing the web service result(s)
      */
-    private ArrayList<String> downloadCDSNdata(String organizationID,
-                                              String stationID,
-                                              String wq_test,
-                                              String beginDate, 
-                                              String endDate) throws IOException, ParseException{
+    private static ArrayList<String> downloadCDSNdata(String organizationID,
+                                                      String stationID,
+                                                      String wq_test,
+                                                      String beginDate, 
+                                                      String endDate) throws IOException, ParseException{
         //If no date input, make it the maximum of available data
         if(beginDate == null || beginDate.equalsIgnoreCase("")){
             beginDate = "1900-01-01";
@@ -162,7 +163,7 @@
         //WaterBodyName (lots)
         //WatershedManagementUnit (lots)
         
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
         
         try{
             //Open the provided website
@@ -189,22 +190,25 @@
      * @param beginDate  the used defined begin date of search (yyyy-mm-dd)
      * @param endDate  the user defined end date of search (yyyy-mm-dd)
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a String[][] containing flow or water quality data: column1 = date(yyyy-mm-dd), column2 = flowValue
      *   [2] = start data of the data (yyyy-mm-dd)
      *   [3] = end data of the data (yyyy-mm-dd)
+     * @throws java.io.IOException
+     * @throws java.text.ParseException
+     * @throws org.codehaus.jettison.json.JSONException
      */
-    public Object[] getCDSNdata(String organizationID,
-                                String stationID,
-                                String wq_test,
-                                String beginDate, 
-                                String endDate) throws IOException, ParseException, JSONException {
+    public static Object[] getCDSNdata(String organizationID,
+                                       String stationID,
+                                       String wq_test,
+                                       String beginDate, 
+                                       String endDate) throws IOException, ParseException, JSONException {
         //Get CDSN station data
         ArrayList<String> dataList = downloadCDSNdata(organizationID, stationID, wq_test, beginDate, endDate);
         //http://awqmsws.goldsystems.com/api/ResultsVer1?ContentType=json&OrganizationIdentifiersCsv=CITYFTCO_WQX&MonitoringLocationIdentifiersCsv=1EFF&Characteristic=Ammonia-nitrogen&MinDate=01-01-1900&MaxDate=04-25-2016
         
         //Parse results
-        ArrayList<String> resultFileContents = new ArrayList<String>();
+        ArrayList<String> resultFileContents = new ArrayList<>();
         if(dataList.size() > 0){
             resultFileContents.add("OrganizationIdentifier\tMonitoringLocationIdentifier\tMediaSubdivisionName\tActivityIdentifier\tStartDate\tStartTime\tMediaName\tActivityType\tCharacteristicName\tSampleFraction\tValueType\tStatus\tResultValue\tResultUnit\tAnalyticalMethodContext\tAnalyticalMethodIdentifier\tDetectionCondition\tQualifierCode");
             //parse the json string into a JSONArray and the object(s) within it

src/java/m/cfa/CDWR_Data.java

@@ -14,15 +14,15 @@
 import javax.xml.soap.SOAPPart;
 
 /**
- * Last Updated: 28-April-2016
+ * Last Updated: 13-September-2016
  * @author Tyler Wible
  * @since 7-July-2014
  * For more information on all of CDWR's water services, go to:
  * http://www.dwr.state.co.us/SurfaceWater/ColoradoWaterSMS.pdf
  */
 public class CDWR_Data {
-    public final String serverURI = "http://www.dwr.state.co.us/";
-    public final String waterSMSURI = "http://www.dwr.state.co.us/SMS_WebService/ColoradoWaterSMS.asmx";
+    public static final String serverURI = "http://www.dwr.state.co.us/";
+    public static final String waterSMSURI = "http://www.dwr.state.co.us/SMS_WebService/ColoradoWaterSMS.asmx";
     /**
      * Finds discharge data for the specified station and start/end dates out of the Colorado Division of Water Resource Database
      * @param stationID  the abbreviation of the name for the CDWR station
@@ -30,13 +30,13 @@
      * @param endDate  the user specified end date for the station (yyyy-MM-dd format)
      * @param dataType  a flag for extraction of either "hourly" or "daily" flow data from CDWR
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a String[][] containing column1 = date(if dataType = "daily": yyyy-MM-dd format, if dataType = "hourly": yyyy-MM-dd HH:mm format), column2 = flowValue
      *   [2] = start data of the data (if dataType = "daily": yyyy-MM-dd format, if dataType = "hourly": yyyy-MM-dd HH:mm format)
      *   [3] = end data of the data (if dataType = "daily": yyyy-MM-dd format, if dataType = "hourly": yyyy-MM-dd HH:mm format)
      * @throws Exception 
      */
-    public Object[] getCDWRflowData(String stationID, String beginDate, String endDate, String dataType) throws Exception {
+    public static Object[] getCDWRflowData(String stationID, String beginDate, String endDate, String dataType) throws Exception {
         //Artificial limit due to the touchy-ness of CDWR to begin dates before the station data begins
         if(dataType.equalsIgnoreCase("15-min")){
             if(beginDate.compareToIgnoreCase("2007-10-01") < 0){
@@ -59,7 +59,7 @@
 
         SOAPBody replyBody = dataResponse.getSOAPBody();
         Iterator<?> iter1 = replyBody.getChildElements();
-        ArrayList<String> stationData = new ArrayList<String>();
+        ArrayList<String> stationData = new ArrayList<>();
         while (iter1.hasNext()) {
             //Open <GetSMSTransmittingStationsResponse>
             SOAPBodyElement bodyElement = (SOAPBodyElement)iter1.next();
@@ -134,7 +134,7 @@
      * @return the response SOAP message from CDWR
      * @throws Exception 
      */
-    public SOAPMessage GetSMSProvisionalData(String station, String variable, String beginDate, String endDate, String aggregation) throws Exception {
+    public static SOAPMessage GetSMSProvisionalData(String station, String variable, String beginDate, String endDate, String aggregation) throws Exception {
         MessageFactory messageFactory = MessageFactory.newInstance();
         SOAPMessage soapMessage = messageFactory.createMessage();
         SOAPPart soapPart = soapMessage.getSOAPPart();
@@ -202,7 +202,7 @@
      * if dataType = "daily" the format is "yyyy-MM-dd" 
      * if datatype = "hourly" the format is "yyyy-MM-dd HH:mm"
      */
-    private String reformatDate(String date, String dataType){
+    private static String reformatDate(String date, String dataType){
         String newDate = "1900-01-01";
         
         //Get portions of date
@@ -258,11 +258,11 @@
      * Finds rating curve data for the specified station from the Colorado Division of Water Resource Database
      * @param stationID  the abbreviation of the name for the CDWR station
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a double[][] containing rating curve data: column1 = discharge, column2 = depth
      * @throws Exception 
      */
-    public Object[] getCDWRratingCurve(String stationID) throws Exception {
+    public static Object[] getCDWRratingCurve(String stationID) throws Exception {
         // Create SOAP Connection
         SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
         SOAPConnection soapConnection = soapConnectionFactory.createConnection();
@@ -275,7 +275,7 @@
         
         SOAPBody replyBody = dataResponse.getSOAPBody();
         Iterator<?> iter1 = replyBody.getChildElements();
-        ArrayList<String> stationData = new ArrayList<String>();
+        ArrayList<String> stationData = new ArrayList<>();
         while(iter1.hasNext()){
             //Open <GetSMSCurrentRatingTableResponse >
             SOAPBodyElement bodyElement = (SOAPBodyElement)iter1.next();
@@ -333,7 +333,7 @@
      * @return the response SOAP message from CDWR
      * @throws Exception 
      */
-    private SOAPMessage GetSMSCurrentRatingTable(String station) throws Exception {
+    private static SOAPMessage GetSMSCurrentRatingTable(String station) throws Exception {
         MessageFactory messageFactory = MessageFactory.newInstance();
         SOAPMessage soapMessage = messageFactory.createMessage();
         SOAPPart soapPart = soapMessage.getSOAPPart();

src/java/m/cfa/Data.java

@@ -7,7 +7,7 @@
 import org.codehaus.jettison.json.JSONException;
 
 /**
-* Last Updated: 28-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 25-January-2014
 */
@@ -27,20 +27,19 @@
      * @throws InterruptedException
      * @throws Exception 
      */
-    public String[][] extractFlowData(String mainFolder,
-                                      File resourceFile,
-                                      String database,
-                                      String organizationID,
-                                      String stationID,
-                                      String beginDate,
-                                      String endDate,
-                                      String userData) throws IOException, InterruptedException, Exception{
+    public static String[][] extractFlowData(String mainFolder,
+                                             File resourceFile,
+                                             String database,
+                                             String organizationID,
+                                             String stationID,
+                                             String beginDate,
+                                             String endDate,
+                                             String userData) throws IOException, InterruptedException, Exception{
         //Depending on the provided inputs, search for and return flow data
         String[][] flowData = new String[0][2];
         if(database.equalsIgnoreCase("USGS")){
             //Search for USGS flow data
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray = usgs_Data.getUSGSflowData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGSflowData(stationID, beginDate, endDate);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
@@ -49,38 +48,34 @@
             //If there is minimal flow data, extract discharge data from the water quality database
             if(flowData.length < 10){
                 //Retrieve all WQ data from USGS website
-                Object[] returnArray1 = usgs_Data.getUSGSwqData(stationID);
+                Object[] returnArray1 = USGS_Data.getUSGSwqData(stationID);
                 //ArrayList<String> webpageAll = (ArrayList<String>) returnArray1[0];
                 String[][] allWQdata = (String[][]) returnArray1[1];
                 //String start = (String) returnArray1[2];
                 //String end = (String) returnArray1[3];
                 
                 //Extract and combine USGS discharge water quality codes with the flow dataset
-                flowData = usgs_Data.getUSGSwqFlowData(flowData, allWQdata, beginDate, endDate);
+                flowData = USGS_Data.getUSGSwqFlowData(flowData, allWQdata, beginDate, endDate);
             }
 
         }else if(database.equalsIgnoreCase("UserData")){
             //Find the user uploaded data file and uses this for a timeseries graph
-            User_Data user_Data = new User_Data();
-            flowData = user_Data.readUserFile(database, stationID, userData, "flow", beginDate, endDate);
+            flowData = User_Data.readUserFile(database, stationID, userData, "flow", beginDate, endDate);
 
         }else if(database.equalsIgnoreCase("STORET")){
             //Search STORET database using new rest service (fast)
-            STORET_Data storet_Data = new STORET_Data();
-            flowData = storet_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
+            flowData = STORET_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
             
         }else if(database.equalsIgnoreCase("CDWR")){
             //Search for CDWR flow data
-            CDWR_Data cdwr_Data = new CDWR_Data();
-            Object[] returnArray = cdwr_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
+            Object[] returnArray = CDWR_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
             //String end = (String) returnArray[3];
         }else if(database.equalsIgnoreCase("CDSN")){
             //Search for CDWR flow data
-            CDSN_Data cdsn_data = new CDSN_Data();
-            Object[] returnArray = cdsn_data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
+            Object[] returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
             //ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
@@ -103,16 +98,18 @@
      * @return  a String[][] of all the specified water quality data available for the specified period (column1 = date yyyy-MM-dd format, column2 = value)
      * @throws IOException 
      * @throws InterruptedException 
+     * @throws java.text.ParseException 
+     * @throws org.codehaus.jettison.json.JSONException 
      */
-    public Object[] extractWQdata(String mainFolder,
-                                  File resourceFile,
-                                  String database,
-                                  String organizationID,
-                                  String stationID,
-                                  String beginDate,
-                                  String endDate,
-                                  String wqTest,
-                                  String userData) throws IOException, InterruptedException, ParseException, JSONException{
+    public static Object[] extractWQdata(String mainFolder,
+                                         File resourceFile,
+                                         String database,
+                                         String organizationID,
+                                         String stationID,
+                                         String beginDate,
+                                         String endDate,
+                                         String wqTest,
+                                         String userData) throws IOException, InterruptedException, ParseException, JSONException{
         String[][] wqData = new String[0][2];
         String wqLabel = "??", wqUnits = "??";
         if(database.equalsIgnoreCase("USGS")){
@@ -124,15 +121,14 @@
             //String endLoadUnits = resultArray[4];
             
             //Retrieve all WQ data from USGS website
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray1 = usgs_Data.getUSGSwqData(stationID);
+            Object[] returnArray1 = USGS_Data.getUSGSwqData(stationID);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray1[0];
             String[][] allWQdata = (String[][]) returnArray1[1];
             //String start = (String) returnArray1[2];
             //String end = (String) returnArray1[3];
             
             //Extract USGS water quality code for current wqTest only (5-digit code)
-            wqData = usgs_Data.minimizeUSGSWQdata(allWQdata, wqCode, beginDate, endDate);
+            wqData = USGS_Data.minimizeUSGSWQdata(allWQdata, wqCode, beginDate, endDate);
 
         }else if(database.equalsIgnoreCase("UserData")){
             String[] resultArray = getWQtestDataInfo(wqTest, database);
@@ -143,8 +139,7 @@
             //String endLoadUnits = resultArray[4];
             
             //Find the user uploaded data file and uses this for a timeseries graph
-            User_Data user_Data = new User_Data();
-            wqData = user_Data.readUserFile(database, stationID, userData, wqTest, beginDate, endDate);
+            wqData = User_Data.readUserFile(database, stationID, userData, wqTest, beginDate, endDate);
             
         }else if(database.equalsIgnoreCase("STORET")){
             String[] resultArray = getWQtestDataInfo(wqTest, database);
@@ -155,11 +150,10 @@
             //String endLoadUnits = resultArray[4];
             
             //Search STORET database using new rest service (fast)
-            STORET_Data storet_Data = new STORET_Data();
-            wqData = storet_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, wqTest, beginDate, endDate);
+            wqData = STORET_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, wqTest, beginDate, endDate);
             
         }else if(database.equalsIgnoreCase("CDWR")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available water quality data available for the CDWR database. This feature is only available for stations in the USGS or STORET databases.");
             writeError(errorMessage);
         }else if(database.equalsIgnoreCase("CDSN")){
@@ -171,8 +165,7 @@
             //String endLoadUnits = resultArray[4];
             
             //Search for CDWR flow data
-            CDSN_Data cdsn_data = new CDSN_Data();
-            Object[] returnArray = cdsn_data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
+            Object[] returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
             //ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
             wqData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
@@ -197,16 +190,18 @@
      * @return  a String[][] of all the specified water quality data available for the specified period (column1 = date yyyy-MM-dd format, column2 = value)
      * @throws IOException 
      * @throws InterruptedException 
+     * @throws java.text.ParseException 
+     * @throws org.codehaus.jettison.json.JSONException 
      */
-    public Object[] extractFlow_and_WQdata(String mainFolder,
-                                           File resourceFile,
-                                           String database,
-                                           String organizationID,
-                                           String stationID,
-                                           String beginDate,
-                                           String endDate,
-                                           String wqTest,
-                                           String userData) throws IOException, InterruptedException, ParseException, JSONException{
+    public static Object[] extractFlow_and_WQdata(String mainFolder,
+                                                  File resourceFile,
+                                                  String database,
+                                                  String organizationID,
+                                                  String stationID,
+                                                  String beginDate,
+                                                  String endDate,
+                                                  String wqTest,
+                                                  String userData) throws IOException, InterruptedException, ParseException, JSONException{
         String[][] flowData = new String[0][2];
         String[][] wqData = new String[0][2];
         if(database.equalsIgnoreCase("USGS")){
@@ -218,53 +213,49 @@
             //String endLoadUnits = resultArray[4];
             
             //Search for USGS flow data
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray = usgs_Data.getUSGSflowData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGSflowData(stationID, beginDate, endDate);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
             //String end = (String) returnArray[3];
             
             //Retrieve all WQ data from USGS website
-            Object[] returnArray1 = usgs_Data.getUSGSwqData(stationID);
+            Object[] returnArray1 = USGS_Data.getUSGSwqData(stationID);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray1[0];
             String[][] allWQdata = (String[][]) returnArray1[1];
             //String start = (String) returnArray1[2];
             //String end = (String) returnArray1[3];
             
             //Extract USGS water quality code for current wqTest only
-            wqData = usgs_Data.minimizeUSGSWQdata(allWQdata, wqCode, beginDate, endDate);
+            wqData = USGS_Data.minimizeUSGSWQdata(allWQdata, wqCode, beginDate, endDate);
             
             //Extract and combine USGS discharge water quality codes with the flow dataset
-            flowData = usgs_Data.getUSGSwqFlowData(flowData, allWQdata, beginDate, endDate);
+            flowData = USGS_Data.getUSGSwqFlowData(flowData, allWQdata, beginDate, endDate);
 
         }else if(database.equalsIgnoreCase("UserData")){
             //Find the user uploaded data file and uses this for a timeseries graph
-            User_Data user_Data = new User_Data();
-            Object[] returnArray = user_Data.readUserFileLDC(database, stationID, userData, wqTest, beginDate, endDate);
+            Object[] returnArray = User_Data.readUserFileLDC(database, stationID, userData, wqTest, beginDate, endDate);
             flowData = (String[][]) returnArray[0];
             wqData = (String[][]) returnArray[1];
             
         }else if(database.equalsIgnoreCase("STORET")){
             //Search STORET database using new rest service (fast)
-            STORET_Data storet_Data = new STORET_Data();
-            flowData = storet_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
-            wqData = storet_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, wqTest, beginDate, endDate);
+            flowData = STORET_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
+            wqData = STORET_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, wqTest, beginDate, endDate);
             
         }else if(database.equalsIgnoreCase("UserData")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available water quality data available for the CDWR database. This feature is only available for stations in the USGS or STORET databases.");
             writeError(errorMessage);
         }else if(database.equalsIgnoreCase("CDSN")){
             //Search for CDWR flow data
-            CDSN_Data cdsn_data = new CDSN_Data();
-            Object[] returnArray = cdsn_data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
+            Object[] returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
             //ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
             //String end = (String) returnArray[3];
             
-            returnArray = cdsn_data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
+            returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
             //ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
             wqData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
@@ -288,21 +279,18 @@
      * @throws IOException 
      * @throws Exception 
      */
-    public double[][] extractFloodData(String mainFolder,
-                                       File resourceFile,
-                                       String database,
-                                       String organizationID,
-                                       String stationID,
-                                       String beginDate,
-                                       String endDate,
-                                       String userData) throws IOException, Exception{
-        DoubleArray doubleArray = new DoubleArray();
-        
+    public static double[][] extractFloodData(String mainFolder,
+                                              File resourceFile,
+                                              String database,
+                                              String organizationID,
+                                              String stationID,
+                                              String beginDate,
+                                              String endDate,
+                                              String userData) throws IOException, Exception{
         double[][] peakFlowData = new double[0][0];
         if(database.equalsIgnoreCase("USGS")){
             //Search for USGS peak flow data
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray = usgs_Data.getUSGSPeakData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGSPeakData(stationID, beginDate, endDate);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             peakFlowData = (double[][]) returnArray[1];
             //double start = (double) returnArray[2];
@@ -310,54 +298,50 @@
 
         }else if(database.equalsIgnoreCase("UserData")){
             //Find the user uploaded data file and uses this for a timeseries graph
-            User_Data user_Data = new User_Data();
-            String[][] flowData = user_Data.readUserFile(database, stationID, userData, "flow", beginDate, endDate);
+            String[][] flowData = User_Data.readUserFile(database, stationID, userData, "flow", beginDate, endDate);
 
             //Removed duplicate dates
-            flowData = doubleArray.removeDuplicateDates(flowData);
+            flowData = DoubleArray.removeDuplicateDates(flowData);
 
             //Convert into an annual peak time series
-            peakFlowData = doubleArray.convertSTORETpeakData(flowData);
+            peakFlowData = DoubleArray.convertSTORETpeakData(flowData);
 
         }else if(database.equalsIgnoreCase("STORET")){
             //Search STORET database using new rest service (fast)
-            STORET_Data storet_Data = new STORET_Data();
-            String[][] flowData = storet_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
+            String[][] flowData = STORET_Data.getSTORETdata(mainFolder, resourceFile, true, organizationID, stationID, "flow", beginDate, endDate);
             
             //Removed duplicate dates
-            flowData = doubleArray.removeDuplicateDates(flowData);
+            flowData = DoubleArray.removeDuplicateDates(flowData);
 
             //Convert into an annual peak time series
-            peakFlowData = doubleArray.convertSTORETpeakData(flowData);
+            peakFlowData = DoubleArray.convertSTORETpeakData(flowData);
             
         }else if(database.equalsIgnoreCase("CDWR")){
             //Search for CDWR flow data
-            CDWR_Data cdwr_Data = new CDWR_Data();
-            Object[] returnArray = cdwr_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
+            Object[] returnArray = CDWR_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             String[][] flowData = (String[][]) returnArray[1];
             //double start = (double) returnArray[2];
             //double end = (double) returnArray[3];
             
             //Removed duplicate dates
-            flowData = doubleArray.removeDuplicateDates(flowData);
+            flowData = DoubleArray.removeDuplicateDates(flowData);
 
             //Convert into an annual peak time series
-            peakFlowData = doubleArray.convertSTORETpeakData(flowData);
+            peakFlowData = DoubleArray.convertSTORETpeakData(flowData);
         }else if(database.equalsIgnoreCase("CDSN")){
             //Search for CDWR flow data
-            CDSN_Data cdsn_data = new CDSN_Data();
-            Object[] returnArray = cdsn_data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
+            Object[] returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, "flow", beginDate, endDate);
             //ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
             String[][] flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
             //String end = (String) returnArray[3];
             
             //Removed duplicate dates
-            flowData = doubleArray.removeDuplicateDates(flowData);
+            flowData = DoubleArray.removeDuplicateDates(flowData);
 
             //Convert into an annual peak time series
-            peakFlowData = doubleArray.convertSTORETpeakData(flowData);
+            peakFlowData = DoubleArray.convertSTORETpeakData(flowData);
         }
         
         return peakFlowData;
@@ -374,18 +358,17 @@
      * @throws IOException
      * @throws Exception
      */
-    public String[][] extractInstantaneousFlowData(String mainFolder,
-                                                   String database,
-                                                   String stationID,
-                                                   String beginDate,
-                                                   String endDate,
-                                                   String userData) throws IOException, Exception{
+    public static String[][] extractInstantaneousFlowData(String mainFolder,
+                                                          String database,
+                                                          String stationID,
+                                                          String beginDate,
+                                                          String endDate,
+                                                          String userData) throws IOException, Exception{
         //Depending on the provided inputs, search for and return flow data
         String[][] flowData = new String[0][2];
         if(database.equalsIgnoreCase("USGS")){
             //Search for USGS flow data
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray = usgs_Data.getUSGS15minFlowData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGS15minFlowData(stationID, beginDate, endDate);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
@@ -393,24 +376,22 @@
 
         }else if(database.equalsIgnoreCase("UserData")){
             //Find the user uploaded data file and uses this for a timeseries graph
-            User_Data user_Data = new User_Data();
-            flowData = user_Data.read15minUserFile(userData, "flow", beginDate + " 00:00", endDate + " 23:00");
+            flowData = User_Data.read15minUserFile(userData, "flow", beginDate + " 00:00", endDate + " 23:00");
 
         }else if(database.equalsIgnoreCase("STORET")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available 15-minute flow data available for the STORET database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
             
         }else if(database.equalsIgnoreCase("CDWR")){
             //Search for CDWR flow data
-            CDWR_Data cdwr_Data = new CDWR_Data();
-            Object[] returnArray = cdwr_Data.getCDWRflowData(stationID, beginDate, endDate, "15-min");
+            Object[] returnArray = CDWR_Data.getCDWRflowData(stationID, beginDate, endDate, "15-min");
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             flowData = (String[][]) returnArray[1];
             //String start = (String) returnArray[2];
             //String end = (String) returnArray[3];
         }else if(database.equalsIgnoreCase("CDSN")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available 15-minute flow data available for the CDSN database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
         }
@@ -424,29 +405,27 @@
      * @return
      * @throws IOException 
      */
-    public double[][] extractStageDischarge(String database, String stationID) throws IOException, Exception{
+    public static double[][] extractStageDischarge(String database, String stationID) throws IOException, Exception{
         //Depending on the provided inputs, search for and return flow data
         double[][] ratingCurve = new double[0][2];
         if(database.equalsIgnoreCase("USGS")){
             //Search for USGS flow data
-            USGS_Data usgs_Data = new USGS_Data();
-            Object[] returnArray = usgs_Data.getUSGSratingCurve(stationID);
+            Object[] returnArray = USGS_Data.getUSGSratingCurve(stationID);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             ratingCurve = (double[][]) returnArray[1];
 
         }else if(database.equalsIgnoreCase("STORET")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no rating curve data available for STORET stations.");
             writeError(errorMessage);
             
         }else if(database.equalsIgnoreCase("CDWR")){
             //Search for USGS flow data
-            CDWR_Data cdwr_Data = new CDWR_Data();
-            Object[] returnArray = cdwr_Data.getCDWRratingCurve(stationID);
+            Object[] returnArray = CDWR_Data.getCDWRratingCurve(stationID);
             //ArrayList<String> webpageAll = (ArrayList<String>) returnArray[0];
             ratingCurve = (double[][]) returnArray[1];
         }else if(database.equalsIgnoreCase("CDSN")){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no rating curve data available for CDSN stations.");
             writeError(errorMessage);
         }
@@ -455,9 +434,11 @@
     }
     /**
      * @param wqTest  the water quality test desired "00600 Total nitrogen, water, unfiltered, milligrams per liter -- mg/L" (format: "5-digit test-name -- units") or "flow"
+     * @param database
      * @return a string with the type of units for the current test.
+     * @throws java.io.IOException
      */
-     public String[] getWQtestDataInfo(String wqTest, String database) throws IOException{
+     public static String[] getWQtestDataInfo(String wqTest, String database) throws IOException{
         String wqCode = "??", wqLabel = "??", wqUnits = "??";
         if(wqTest.equalsIgnoreCase("flow")){
             wqCode = "flow";
@@ -468,8 +449,7 @@
             wqLabel = wqTest.substring(6,wqTest.lastIndexOf("--")-1);//cut off the "98335" the test name and the "mg/L" units after the name
             if(database.equalsIgnoreCase("USGS")){
                 //Get Units for current WQ test (5-digit code)
-                USGS_Data usgs_Data = new USGS_Data();
-                wqUnits = usgs_Data.getUSGSwqUnits(wqCode);
+                wqUnits = USGS_Data.getUSGSwqUnits(wqCode);
             }else{
                 wqUnits = wqTest.substring(wqTest.lastIndexOf("--") + 3);//keep the "mg/L" units after the name
             }
@@ -486,7 +466,7 @@
      * @param units  the units of the current USGS water quality test.
      * @return a double with the correct conversion factor for the units.
      */
-     public double getWQconversion(String units){
+     public static double getWQconversion(String units){
          double conversion = 0;
          if(units.equalsIgnoreCase("#/l")){
              conversion = (1000)*(java.lang.Math.pow(0.3048,3))*(86400);
@@ -548,7 +528,7 @@
      * @param units  the units of the current USGS water quality test.
      * @return a string with the end result units of the conversion.
      */
-     public String getWQendUnits(String units){
+     public static String getWQendUnits(String units){
          String endUnits = "No Units";
          if(units.equalsIgnoreCase("#/l") || units.equalsIgnoreCase("#/m3") || units.equalsIgnoreCase("#/ml")){
              endUnits = "#/day";
@@ -587,7 +567,7 @@
      * @param error  string array to be written as each line of an error message
      * @throws IOException
      */
-    public void writeError(ArrayList<String> error) throws IOException{
+    public static void writeError(ArrayList<String> error) throws IOException{
         //Output data to text file
         String errorContents = error.get(0);
         for(int i=1; i<error.size(); i++){

src/java/m/cfa/DoubleArray.java

@@ -14,7 +14,7 @@
 import java.util.Date;
 
 /**
-* Last Updated: 16-March-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 21-June-2012
 */
@@ -25,7 +25,7 @@
      * @param newValue  new value to append to the list
      * @return  the new list containing the currentArray list of values and the appended newValue
      */
-    public double[] appendcolumn(double[] currentArray, double newValue){
+    public static double[] appendcolumn(double[] currentArray, double newValue){
         //Initialize new array to contain the new value
         double[] newArray = new double[currentArray.length + 1];
 
@@ -44,7 +44,7 @@
      * @param newValue  new value to append to the list
      * @return  the new list containing the currentArray list of values and the appended newValue
      */
-    public Double[] appendcolumn(double[] currentArray, double[] newValue){
+    public static Double[] appendcolumn(double[] currentArray, double[] newValue){
         //Initialize new array to contain the new value
         Double[] newArray = new Double[currentArray.length + newValue.length];
 
@@ -65,7 +65,7 @@
      * @param currentArray2  new value to append to the list (double[])
      * @return  the new list containing the currentArray list of values and the appended newValue
      */
-    public double[][] appendcolumn_Matrix(double[] currentArray1, double[] currentArray2){
+    public static double[][] appendcolumn_Matrix(double[] currentArray1, double[] currentArray2){
         //Check that the arrays are the same size to be combined
         if(currentArray1.length != currentArray2.length){
             System.out.println("The arrays are not the same size so they can not be combined");
@@ -89,7 +89,7 @@
      * @param array2  new value to append to the list (double[])
      * @return  the new list containing the currentArray list of values and the appended newValue
      */
-    public double[][] appendcolumn_Matrix(double[][] array1, double[] array2){
+    public static double[][] appendcolumn_Matrix(double[][] array1, double[] array2){
         //Check that the arrays are the same size to be combined
         if(array1.length != array2.length){
             System.out.println("The arrays are not the same size so they can not be combined");
@@ -115,7 +115,7 @@
      * @param array2  new value to append to the list (String[])
      * @return  the new list containing the currentArray list of values and the appended newValue
      */
-    public String[][] appendcolumn_Matrix(String[][] array1, String[] array2){
+    public static String[][] appendcolumn_Matrix(String[][] array1, String[] array2){
         //Check that the arrays are the same size to be combined
         if(array1.length != array2.length){
             System.out.println("The arrays are not the same size so they can not be combined");
@@ -142,7 +142,7 @@
      * @param numberOfRows  the number of rows in startingArray to be replaced by those in replacingArray
      * @return  a duplicate of startingArray with the first rows ("numberOfRows" + 1) being from replacingArray not startingArray
      */
-    public double[] replaceRows(double[] startingArray, double[] replacingArray, int numberOfRows){
+    public static double[] replaceRows(double[] startingArray, double[] replacingArray, int numberOfRows){
         //Matlab code:    m(Z+1:end) = mh(Z+1:end);
         double[] newArray = new double[startingArray.length];
 
@@ -160,10 +160,10 @@
     /**
      * Keeps only the rows in startingArray that are not listed in rowIndexList
      * @param startingArray  The array to be minimized (double[][])
-     * @param rowIndexList  a row index of the rows not to be included in the new minimized array (ArrayList<Integer>)
+     * @param rowIndexList  a row index of the rows not to be included in the new minimized array (ArrayList)
      * @return the minimized version of the startingArray (double[][]) 
      */
-    public double[][] replaceRows(double[][] startingArray, ArrayList<Integer> rowIndexList){
+    public static double[][] replaceRows(double[][] startingArray, ArrayList<Integer> rowIndexList){
 
         //Initialize new array
         double[][] newArray = new double[startingArray.length][startingArray[0].length];
@@ -200,7 +200,7 @@
      * @param column  the desired column of the double array
      * @return a double[] array of the unique valued contained in the specified column of the dataArray
      */
-    public double[] getUnique(double[][] dataArray, int column){
+    public static double[] getUnique(double[][] dataArray, int column){
         //Matlab code:    P = unique(ktable(:,2));
         double[] currentColumn = new double[dataArray.length];
 
@@ -218,7 +218,7 @@
      * @param currentColumn  the double array
      * @return a double[] array of the unique valued contained in the dataArray
      */
-    public double[] getUnique(double[] currentColumn){
+    public static double[] getUnique(double[] currentColumn){
         Arrays.sort(currentColumn);
 
         //Check and remove duplicate values for a list of unique values
@@ -248,14 +248,14 @@
         return uniqueColumn;
     }
     /**
-     * Creates an ArrayList<Integer> of the rows in dataArray that have the column number "column" equal to "currentValue"
+     * Creates an ArrayList of the rows in dataArray that have the column number "column" equal to "currentValue"
      * @param dataArray  the double[][] data array
      * @param column  the column of interest of the data array
      * @param currentValue  the desired value from the data array
-     * @return  an ArrayList<Integer> of the rows in dataArray[][column] == currentValue
+     * @return  an ArrayList of the rows in dataArray[][column] == currentValue
      */
-    public ArrayList<Integer> findRowsEqual(double[][] dataArray, int column, double currentValue){
-        ArrayList<Integer> rowIndexList = new ArrayList<Integer>();
+    public static ArrayList<Integer> findRowsEqual(double[][] dataArray, int column, double currentValue){
+        ArrayList<Integer> rowIndexList = new ArrayList<>();
         for(int i=0; i<dataArray.length; i++){
             if(Double.compare(dataArray[i][column],currentValue) == 0){
                 rowIndexList.add(i);
@@ -264,15 +264,15 @@
         return rowIndexList;
     }
     /**
-     * Creates an ArrayList<Integer> of the rows in dataArray that have the column number "column" less or greater than to "currentValue"
+     * Creates an ArrayList of the rows in dataArray that have the column number "column" less or greater than to "currentValue"
      * @param dataArray  the double[][] data array
      * @param column  the column of interest of the data array
      * @param currentValue  the desired value from the data array
      * @param lessThan  if true, then all the rows with data less than the currentValue will be returned, if false all the rows with data greater than the current value will be returned
-     * @return  an ArrayList<Integer> of the rows in dataArray[][column] less than or greater than (depending on the value of "lessThan" provided) currentValue
+     * @return  an ArrayList of the rows in dataArray[][column] less than or greater than (depending on the value of "lessThan" provided) currentValue
      */
-    public ArrayList<Integer> findRowsConditional(double[][] dataArray, int column, double currentValue, boolean lessThan){
-        ArrayList<Integer> rowIndexList = new ArrayList<Integer>();
+    public static ArrayList<Integer> findRowsConditional(double[][] dataArray, int column, double currentValue, boolean lessThan){
+        ArrayList<Integer> rowIndexList = new ArrayList<>();
         for(int i=0; i<dataArray.length; i++){
             if(lessThan){//If lessThan ==  true, then find values less than the currentValue
                 if(Double.compare(dataArray[i][column],currentValue) < 0){
@@ -287,15 +287,14 @@
         return rowIndexList;
     }
     /**
-     * Creates an ArrayList<Integer> of the rows in dataArray that have the column number "column" less/equal to or greater than to "currentValue"
+     * Creates an ArrayList of the rows in dataArray that have the column number "column" less/equal to or greater than to "currentValue"
      * @param dataArray  the double[][] data array
-     * @param column  the column of interest of the data array
      * @param currentValue  the desired value from the data array
      * @param lessThan  if true, then all the rows with data less than the currentValue will be returned, if false all the rows with data greater than the current value will be returned
-     * @return  an ArrayList<Integer> of the rows in dataArray[][column] less than/equal to or greater than (depending on the value of "lessThan" provided) currentValue
+     * @return  an ArrayList of the rows in dataArray[][column] less than/equal to or greater than (depending on the value of "lessThan" provided) currentValue
      */
-    public ArrayList<Integer> findRowsConditional(double[] dataArray, double currentValue, boolean lessThan){
-        ArrayList<Integer> rowIndexList = new ArrayList<Integer>();
+    public static ArrayList<Integer> findRowsConditional(double[] dataArray, double currentValue, boolean lessThan){
+        ArrayList<Integer> rowIndexList = new ArrayList<>();
         for(int i=0; i<dataArray.length; i++){
             if(lessThan){//If lessThan ==  true, then find values less than the currentValue
                 if(Double.compare(dataArray[i],currentValue) <= 0){
@@ -316,7 +315,7 @@
      * @param column  the desired column from data array (zero based)
      * @return  a double[] array of the elements in dataArray[all][column]
      */
-    public double[] getColumn(double[][] dataArray, int column){
+    public static double[] getColumn(double[][] dataArray, int column){
         //Gets the values of dataArray[all][column] in a double[]
         double[] currentElements = new double[dataArray.length];
 
@@ -329,10 +328,10 @@
      * Creates a double[] array of the elements in dataArray[rowIndexList][column]
      * @param dataArray  the double[][] data array
      * @param column  the desired column from data array (zero based)
-     * @param rowIndexList  an ArrayList<Integer> containing the desired row indices from dataArray
+     * @param rowIndexList  an ArrayList containing the desired row indices from dataArray
      * @return  a double[] array of the elements in dataArray[rowIndexList][column]
      */
-    public double[] getColumn(double[][] dataArray, int column, ArrayList<Integer> rowIndexList){
+    public static double[] getColumn(double[][] dataArray, int column, ArrayList<Integer> rowIndexList){
         //Gets the values of dataArray[rowIndexList][column] in a double[]
         double[] currentElements = new double[rowIndexList.size()];
 
@@ -356,7 +355,7 @@
      * @param row  the desired row from data array
      * @return  a double[] array of the elements in dataArray[row][all]
      */
-    public double[] getRow(double[][] dataArray, int row){
+    public static double[] getRow(double[][] dataArray, int row){
         //Gets the values of dataArray[row][all] in a double[]
         double[] currentElements = new double[dataArray[row].length];
 
@@ -369,10 +368,10 @@
      * Creates a double[] array of the elements in dataArray[row][columnIndexList]
      * @param dataArray  the double[][] data array
      * @param row  the desired row from data array
-     * @param columnIndexList  an ArrayList<Integer> containing the desired row indices from dataArray
+     * @param columnIndexList  an ArrayList containing the desired row indices from dataArray
      * @return  a double[] array of the elements in dataArray[rowIndexList][column]
      */
-    public double[] getRow(double[][] dataArray, int row, ArrayList<Integer> columnIndexList){
+    public static double[] getRow(double[][] dataArray, int row, ArrayList<Integer> columnIndexList){
         //Gets the values of dataArray[rowIndexList][column] in a double[]
         double[] currentElements = new double[columnIndexList.size()];
 
@@ -393,10 +392,10 @@
     /**
      * Creates a double[] array of the elements in dataArray[rowIndexList]
      * @param dataArray  the double[] data array
-     * @param rowIndexList  an ArrayList<Integer> containing the desired row indices from dataArray
+     * @param rowIndexList  an ArrayList containing the desired row indices from dataArray
      * @return a double[] array of the elements in dataArray[rowIndexList]
      */
-    public double[] getRows(double[] dataArray, ArrayList<Integer> rowIndexList){
+    public static double[] getRows(double[] dataArray, ArrayList<Integer> rowIndexList){
         //Gets the values of dataArray[rowIndexList] in a double[]
         double[] newArray = new double[rowIndexList.size()];
 
@@ -417,14 +416,14 @@
     /**
      * Creates a double[][] array of the elements in dataArray[rowIndexList][] (aka it keeps some rows and all columns)
      * @param dataArray  the double[][] data array
-     * @param rowIndexList  an ArrayList<Integer> containing the desired row indices from dataArray
+     * @param rowIndexList  an ArrayList containing the desired row indices from dataArray
      * @return  a double[][] array containing the desired rows from rowIndexList and all the columns
      */
-    public double[][] getDataArrayRows(double[][] dataArray, ArrayList<Integer> rowIndexList){
+    public static double[][] getDataArrayRows(double[][] dataArray, ArrayList<Integer> rowIndexList){
         //Gets the values of dataArray[rowIndexList][all] in a double[][]
         double[][] currentElements = new double[rowIndexList.size()][dataArray[0].length];
 
-        if(rowIndexList.size() == 0){
+        if(rowIndexList.isEmpty()){
             return currentElements;
         }
         int indexCtr = 0;
@@ -444,13 +443,13 @@
         return currentElements;
     }
     /**
-     * Compares array1 and array2 and returns an ArrayList<Integer> of the "j" rows in which array1[i] =  array2[j]
+     * Compares array1 and array2 and returns an ArrayList of the "j" rows in which array1[i] =  array2[j]
      * @param array1  double[] first arary to compare
      * @param array2  double[] second array to compare
-     * @return  an ArrayList<Integer> containing the rows in which array1[i] = array2[i]
+     * @return  an ArrayList containing the rows in which array1[i] = array2[i]
      */
-    public ArrayList<Integer> intersect(double[] array1, double[] array2){
-        ArrayList<Integer> rowIndex = new ArrayList<Integer>();
+    public static ArrayList<Integer> intersect(double[] array1, double[] array2){
+        ArrayList<Integer> rowIndex = new ArrayList<>();
 
         //Find the "j" rows where array1[i] = array2[j]
         for(int i=0; i<array1.length; i++){
@@ -478,7 +477,7 @@
         return randomArray;
     }
     /**
-     * Merges the public dataset (first input) with the user dataset (second input)
+     * Merges the public static dataset (first input) with the user dataset (second input)
      * based on the merge method selected
      * @param publicDataset  a String[][] array with the first column containing dates (yyyy-mm-dd)
      * and the second column values of flow or water quality test to be treated as the "public dataset"
@@ -494,7 +493,7 @@
      * "minimum" =  take the minimum value for that day from both datasets
      * @return
      */
-    public String[][] mergeData(String[][] publicDataset, String[][] userDataset, String mergeMethod){
+    public static String[][] mergeData(String[][] publicDataset, String[][] userDataset, String mergeMethod){
         //Allocate an array of values to determine if userdata needs to be kept (true) or merged (false)
         int ctr = 0;
         boolean[] addUserDataset = new boolean[userDataset.length];
@@ -592,7 +591,7 @@
      * "min" =  take the minimum value for that day from both datasets
      * @return
      */
-    public double[][] mergeData(double[][] publicDataset, double[][] userDataset, String mergeMethod){
+    public static double[][] mergeData(double[][] publicDataset, double[][] userDataset, String mergeMethod){
         
         //Sort by dates for comparison purposes
         Arrays.sort(publicDataset, new sort1_smallToLargeDoubleMath());
@@ -680,7 +679,7 @@
      * @param currentStringArray the String[][] to be sorted and removed, column1 = dates (yyyy-mm-dd), column2 = values, other columns will also be kept
      * @return  a String[][] of equal or lesser size than the original containing the original data sorted by the first column
      */
-    public String[][] removeDuplicateDates(String[][] currentStringArray){
+    public static String[][] removeDuplicateDates(String[][] currentStringArray){
         //Sort the Data by date to remove duplicate date entries
         Arrays.sort(currentStringArray, new DateComparator());
         
@@ -718,7 +717,7 @@
      * @return  a double[][] containing: column1 = x, column2 = y coordinates of the ranking based on a duration 
      * curve method and Weibull plotting position
      */
-    public double[][] weibullPlottingPosition(String[][] sortedData){
+    public static double[][] weibullPlottingPosition(String[][] sortedData){
         if(sortedData.length < 1){
             double[][] emptyArray = new double[0][2];
             return emptyArray;
@@ -765,8 +764,9 @@
      * @param seasonBegin  the begin of the season formatted MM-dd (ex June 1st is "06-01")
      * @param seasonEnd  the end of the season formatted MM-dd (ex June 1st is "06-01")
      * @return  an array containing the dates and values of water quality tests that occur within the specified season
+     * @throws java.text.ParseException
      */
-    public String[][] getSeasonalData(String[][] allData, String seasonBegin, String seasonEnd) throws ParseException{
+    public static String[][] getSeasonalData(String[][] allData, String seasonBegin, String seasonEnd) throws ParseException{
         //Convert season begin/end into dates
         DateFormat desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd");
         Date beginDate = desiredDateFormat.parse("2000-" + seasonBegin);
@@ -780,8 +780,8 @@
         }
         
         //Remove data that are outside user specified seasonal range
-        ArrayList<String> partialDates = new ArrayList<String>();
-        ArrayList<String> partialValues = new ArrayList<String>();
+        ArrayList<String> partialDates = new ArrayList<>();
+        ArrayList<String> partialValues = new ArrayList<>();
         for(int i=0; i<allData.length; i++){
             //Convert the current data's date into a calendar
             String monthDay = allData[i][0].substring(5);
@@ -811,7 +811,7 @@
      * @param year  the specified year (ex "1981")
      * @return an array (same format as allData) containing the dates and values that occur within the specified year
      */
-    public String[][] getYearsData(String[][] allData, String year){
+    public static String[][] getYearsData(String[][] allData, String year){
         //Remove data that are outside specified year
         int ctr = 0;
         for(int i=0; i<allData.length; i++){
@@ -840,7 +840,7 @@
      * @param n  the n-year return period for the desired flow
      * @return 
      */
-    public double calculateLowFlowReturnPeriod(ArrayList<Double> nYearFlows, double n){
+    public static double calculateLowFlowReturnPeriod(ArrayList<Double> nYearFlows, double n){
         //Remove non-values
         int ctr = 0;
         for(int i=0; i<nYearFlows.size(); i++){
@@ -864,9 +864,8 @@
         double[] nYearValues = getColumn(nYearRanks,1);
 
         //Find the "n" recurrence interval and return its corresponding flow as the n-year Flow
-        DoubleMath doubleMath = new DoubleMath();
         double target = (1-(1.0/n)) * 100.0;//nonexceedance = (1 - [exceedance = (1/return period)]) * 100 //to get range of 0-100
-        double n_yearFlow = doubleMath.linearInterpolation(nYearNonExceedance, nYearValues, target);
+        double n_yearFlow = DoubleMath.linearInterpolation(nYearNonExceedance, nYearValues, target);
         return n_yearFlow;
     }
     /**
@@ -879,7 +878,7 @@
      * period defined by the begin and end dates
      * @throws ParseException 
      */
-    public String[][] getPeriodData(String[][] sortedData, String periodBegin, String periodEnd) throws ParseException{
+    public static String[][] getPeriodData(String[][] sortedData, String periodBegin, String periodEnd) throws ParseException{
         if(!periodBegin.equalsIgnoreCase("") && !periodEnd.equalsIgnoreCase("")){
             //Change analysis period dates into Date objects
             SimpleDateFormat desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@@ -887,8 +886,8 @@
             Date periodEnd_date = desiredDateFormat.parse(periodEnd);
             
             //Loop through and pull out the period data
-            ArrayList<String> periodDates = new ArrayList<String>();
-            ArrayList<String> periodValues = new ArrayList<String>();
+            ArrayList<String> periodDates = new ArrayList<>();
+            ArrayList<String> periodValues = new ArrayList<>();
             for(int i=0; i<sortedData.length; i++){
                 //Check if data is within the defined period
                 Date newDate = desiredDateFormat.parse(sortedData[i][0]);
@@ -920,7 +919,7 @@
      * @return returns a double[][] array the same size as the provided string array containing 
      * the first column of years and the second column of flow values
      */
-    public double[][] convertSTORETpeakData(String[][] sortableData){
+    public static double[][] convertSTORETpeakData(String[][] sortableData){
 
         Arrays.sort(sortableData, new DateComparator());
         //Find a list of unique years for which an annual maximum flow will be calculated later
@@ -981,7 +980,7 @@
      * @param loadestTF  a flag for if analyzing loadest result data which uses a yyyymmdd date format from the
      * loadest.exe result file rather than typical date format of yyyy-mm-dd
      */
-    public String[][] computeFlowMethod(String[][] dailyData, String timeStep, String method, boolean loadestTF){
+    public static String[][] computeFlowMethod(String[][] dailyData, String timeStep, String method, boolean loadestTF){
         String[][] newData = new String[0][2];
         if(dailyData.length > 0){
             if(timeStep.equalsIgnoreCase("daily")){
@@ -1012,11 +1011,9 @@
      * @return a new string[][] with column 1 = dates (yyyy-mm-dd format for "daily" timeStep,
      * yyyy-mm format for "monthly" timeStep, and yyyy format for "yearly" timeStep) and column2 = values
      */
-    private String[][] computeMethod(String[][] dailyData, String method, int dateLimit){
-        DoubleMath doubleMath = new DoubleMath();
-
+    private static String[][] computeMethod(String[][] dailyData, String method, int dateLimit){
         //Find the unique set of months/years for which the method is desired for
-        ArrayList<String> uniqueTimeStep = new ArrayList<String>();
+        ArrayList<String> uniqueTimeStep = new ArrayList<>();
         String previousMonthYear = dailyData[0][0].substring(0,dateLimit);
         uniqueTimeStep.add(previousMonthYear);
         for(int i=1; i<dailyData.length; i++){
@@ -1030,7 +1027,7 @@
 
         //Loop through daily data, pull out each uniqueTimeStep's dataset and perform the method on that dataset
         String[][] newData = new String[uniqueTimeStep.size()][2];
-        ArrayList<Double> currentMonthData = new ArrayList<Double>();
+        ArrayList<Double> currentMonthData = new ArrayList<>();
         int ctr=0;        
         for(int i=0; i<dailyData.length; i++){
             if(uniqueTimeStep.get(ctr).equals(dailyData[i][0].substring(0, dateLimit))){
@@ -1041,13 +1038,13 @@
                 //If current data != current month, calculate method on the current month's dataset, save the result and reset the dataset
                 newData[ctr][0] = uniqueTimeStep.get(ctr);
                 if(method.equalsIgnoreCase("max")){
-                    newData[ctr][1] = String.valueOf(doubleMath.max(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.max(currentMonthData));
                 }else if(method.equalsIgnoreCase("average")){
-                    newData[ctr][1] = String.valueOf(doubleMath.meanArithmetic(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.meanArithmetic(currentMonthData));
                 }else if(method.equalsIgnoreCase("min")){
-                    newData[ctr][1] = String.valueOf(doubleMath.min(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.min(currentMonthData));
                 }else if(method.equalsIgnoreCase("total")){
-                    newData[ctr][1] = String.valueOf(doubleMath.sum(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.sum(currentMonthData));
                 }
 
                 //Reset the dataset and add the current data to it as the new month's data
@@ -1060,13 +1057,13 @@
             if(i == dailyData.length-1){
                 newData[ctr][0] = uniqueTimeStep.get(ctr);
                 if(method.equalsIgnoreCase("max")){
-                    newData[ctr][1] = String.valueOf(doubleMath.max(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.max(currentMonthData));
                 }else if(method.equalsIgnoreCase("average")){
-                    newData[ctr][1] = String.valueOf(doubleMath.meanArithmetic(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.meanArithmetic(currentMonthData));
                 }else if(method.equalsIgnoreCase("min")){
-                    newData[ctr][1] = String.valueOf(doubleMath.min(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.min(currentMonthData));
                 }else if(method.equalsIgnoreCase("total")){
-                    newData[ctr][1] = String.valueOf(doubleMath.sum(currentMonthData));
+                    newData[ctr][1] = String.valueOf(DoubleMath.sum(currentMonthData));
                 }
             }
         }
@@ -1081,8 +1078,9 @@
      * @param outputFileName
      * @param loadestTF
      * @throws IOException 
+     * @throws java.text.ParseException 
      */
-    public void writeTimeSeries(String mainFolder, String[][] data, String timeStep, String outputFileName, boolean loadestTF) throws IOException, ParseException {
+    public static void writeTimeSeries(String mainFolder, String[][] data, String timeStep, String outputFileName, boolean loadestTF) throws IOException, ParseException {
         //Convert Date formate for output
         String[] date = changeDate2JHighChart(data, timeStep, loadestTF);
         
@@ -1112,7 +1110,7 @@
      * @param timeStep
      * @return
      */
-    private String[] changeDate2JHighChart(String[][] data, String timeStep, boolean loadestTF) throws ParseException{
+    private static String[] changeDate2JHighChart(String[][] data, String timeStep, boolean loadestTF) throws ParseException{
         DateFormat desiredDateFormat = getDateFormat(timeStep,  loadestTF);
         
         String[] date = new String[data.length];
@@ -1139,7 +1137,7 @@
      * @param outputFileName
      * @throws IOException 
      */
-    public void writeBoxplot(String mainFolder,
+    public static void writeBoxplot(String mainFolder,
                              ArrayList<ArrayList<Double>> outliers,
                              double[][] boxplotData,
                              String outputFileName) throws IOException {
@@ -1230,7 +1228,7 @@
      * @param outputFileName
      * @throws IOException 
      */
-    public void writeXYseries(String mainFolder, String[][] data, String outputFileName) throws IOException {
+    public static void writeXYseries(String mainFolder, String[][] data, String outputFileName) throws IOException {
         //open the file writer and set path
         String path = mainFolder + File.separator + outputFileName;
         FileWriter writer =  new FileWriter(path, false);
@@ -1259,7 +1257,7 @@
      * which return (yyyy-MM-dd HH:mm | yyyymmdd | yyyymm | yyyy) respectively
      * @return Returns a DateFormat for the specified time step
      */
-    public DateFormat getDateFormat(String timeStep, boolean loadestTF){
+    public static DateFormat getDateFormat(String timeStep, boolean loadestTF){
         DateFormat desiredDateFormat = null;
         if(timeStep.equalsIgnoreCase("15-min")){
             desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@@ -1287,8 +1285,9 @@
      * @param firstDate_str  the first date to be compared (expected format = yyyy-mm-dd)
      * @param secondDate_str  the second date to be compared (expected format = (yyyy-mm-dd)
      * @return returns true if nextDate = date + 1day, false otherwise
+     * @throws java.text.ParseException
      */
-    public boolean checkSubsequentDates(String firstDate_str, String secondDate_str) throws ParseException{
+    public static boolean checkSubsequentDates(String firstDate_str, String secondDate_str) throws ParseException{
         DateFormat desiredDateFormat = getDateFormat("daily", false);
         
         Date firstDate = desiredDateFormat.parse(firstDate_str);
@@ -1313,9 +1312,9 @@
      * @param date
      * @return 
      */
-    public ArrayList<Double> getDaysData(String[][] allData, String date){
+    public static ArrayList<Double> getDaysData(String[][] allData, String date){
         //Remove data that are outside specified date (yyyy-MM-dd)
-        ArrayList<Double> dayData = new ArrayList<Double>();
+        ArrayList<Double> dayData = new ArrayList<>();
         for(int i=0; i<allData.length; i++){
             String tempDate = allData[i][0].substring(0,10);
             if(date.compareToIgnoreCase(tempDate) == 0){
@@ -1331,8 +1330,9 @@
      * @param direction  the magnitude and direction of days from 'date' that is desired 
      * (i.e. a value of -2 would yield the date of 2 days ago while a value of 1 will yield tomorrow's date)
      * @return returns the string value of the date that is 'direction' away formatted as yyyy-MM-dd
+     * @throws java.text.ParseException
      */
-    public String getDay(String date, int direction) throws ParseException{
+    public static String getDay(String date, int direction) throws ParseException{
         //Parse Date
         DateFormat desiredDateFormat = getDateFormat("daily",  false);
         Date currentDate = desiredDateFormat.parse(date);
@@ -1373,7 +1373,7 @@
      * @param currentYear  an integer for the current year
      * @return  true if the currentYear is a leap year, false otherwise
      */
-    public boolean getLeapYearTF(int currentYear){
+    public static boolean getLeapYearTF(int currentYear){
         //Determine if the current year is a leap year (366 days) or not (365 days)
         boolean leapYear = false;
         double currentYear_db = (double) currentYear;
@@ -1399,19 +1399,18 @@
      * @param flowData  a string[][] containing: column1 = dates, column2 = flowValues
      * @param numDays  an integer representing the number (m) of consecutive days to be desired for analysis
      * @param averageType  a flag for what sort of average to take of the dataset either 'arithmetic' or 'harmonic' are supported currently
+     * @throws java.text.ParseException
      * @returns  an ArrayList containing an ArrayList of each set of "m-day" consecutive set of flows for analysis (min, max, average, etc)
      * @throws IOException
      */
-    public Object[] getMdayData(String[][] flowData, int numDays, String averageType) throws IOException, ParseException{
-        DoubleMath doubleMath = new DoubleMath();
-        
+    public static Object[] getMdayData(String[][] flowData, int numDays, String averageType) throws IOException, ParseException{
         //Loop through flow data and find "m"-day consecutive flows
-        ArrayList<String> allDate = new ArrayList<String>();
-        ArrayList<Double> allData = new ArrayList<Double>();
+        ArrayList<String> allDate = new ArrayList<>();
+        ArrayList<Double> allData = new ArrayList<>();
         try{
             for(int i=0; i<flowData.length; i++){
-                ArrayList<String> mDayDate = new ArrayList<String>();
-                ArrayList<Double> mDayData = new ArrayList<Double>();
+                ArrayList<String> mDayDate = new ArrayList<>();
+                ArrayList<Double> mDayData = new ArrayList<>();
                 int ctr = i;
                 for(int j=0; j<numDays; j++){
                     if(j==0){
@@ -1440,9 +1439,9 @@
                     String endDate = mDayDate.get(numDays - 1);
                     allDate.add(startDate + " to " + endDate);
                     if(averageType.equalsIgnoreCase("arithmetic")){
-                        allData.add(doubleMath.meanArithmetic(mDayData));
+                        allData.add(DoubleMath.meanArithmetic(mDayData));
                     }else if(averageType.equalsIgnoreCase("harmonic")){
-                        allData.add(doubleMath.meanHarmonic(mDayData));
+                        allData.add(DoubleMath.meanHarmonic(mDayData));
                     }
                 }
             }
@@ -1465,7 +1464,7 @@
 //     * data for dates which were beginDate < data-date < endDate
 //     * @throws IOException 
 //     */
-//    public String[][] minimize15minData(String[][] allData, String beginDate, String endDate) throws IOException{
+//    public static String[][] minimize15minData(String[][] allData, String beginDate, String endDate) throws IOException{
 //        //Get today's date
 //        DateFormat desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 //        Date currentDate = new Date();

src/java/m/cfa/DoubleMath.java

@@ -8,7 +8,7 @@
 import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction;
 
 /**
-* Last Updated: 13-July-2015
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 21-June-2012
 */
@@ -23,7 +23,7 @@
     }
 }
 public class DoubleMath{
-    private double[] convertArray(ArrayList<Double> array){
+    private static double[] convertArray(ArrayList<Double> array){
         double[] newArray = new double[array.size()];
         for(int i=0; i<array.size(); i++){
             newArray[i] = array.get(i);
@@ -35,7 +35,7 @@
      * @param array  the double[] array
      * @return  the maximum of the above array as a double
      */
-    public double max(double[] array){
+    public static double max(double[] array){
         double maximum = -9999;
         for(int i=0; i<array.length; i++){
             if(i == 0){
@@ -53,7 +53,7 @@
      * @param array  the ArrayList<Double> array
      * @return  the maximum of the above array as a double
      */
-    public double max(ArrayList<Double> array){
+    public static double max(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double maximum = max(newArray);
         return maximum;
@@ -63,7 +63,7 @@
      * @param array  the double[] array
      * @return  the minimum of the above array as a double
      */
-    public double min(double[] array){
+    public static double min(double[] array){
         double minimum = -9999;
         for(int i=0; i<array.length; i++){
             if(i == 0){
@@ -81,7 +81,7 @@
      * @param array  the ArrayList<Double> array
      * @return  the minimum of the above array as a double
      */
-    public double min(ArrayList<Double> array){
+    public static double min(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double minimum = min(newArray);
         return minimum;
@@ -91,7 +91,7 @@
      * @param array  the array to be summed
      * @return the sum of the array
      */
-    public double sum(double[] array){
+    public static double sum(double[] array){
         double sum = 0;
         //Calculate the sum of the array
         for(int i=0; i<array.length; i++){
@@ -104,7 +104,7 @@
      * @param array  the array to be summed
      * @return the sum of the array
      */
-    public double sum(ArrayList<Double> array){
+    public static double sum(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double sum = sum(newArray);
         return sum;
@@ -116,7 +116,7 @@
      * @param decimalPlaces  is equal to the number of decimal places desired
      * @return  a double rounded value of the orignal data
      */
-    public double round(double originalValue, double decimalPlaces){
+    public static double round(double originalValue, double decimalPlaces){
         double decimals = Math.pow(10, decimalPlaces);
         double roundedValue = Math.round(originalValue*decimals);
         roundedValue = roundedValue/decimals;
@@ -130,7 +130,7 @@
      * @param roundingValue  is equal to the 10^number of decimal places desired (aka 2 decimal places has a roundingValue = 10)
      * @return  a double[] array of the rounded values of the original data
      */
-    public double[] roundColumn(double[] array, double roundingValue){
+    public static double[] roundColumn(double[] array, double roundingValue){
         double[] roundedArray = new double[array.length];
         for(int i=0; i<array.length; i++){
             double tempValue = Math.round(array[i]*roundingValue);
@@ -144,7 +144,7 @@
      * @param array  the double[] array of which the arithmetic mean is desired
      * @return  the double value of the arithmetic mean of the data array
      */
-    public double meanArithmetic(double[] array){
+    public static double meanArithmetic(double[] array){
         //Calculates the average of a double array
         double sum = sum(array);
         double count = array.length;
@@ -160,7 +160,7 @@
      * @param array  the ArrayList<Double> of which the arithmetic mean is desired
      * @return  the double value of the arithmetic mean of the data array
      */
-    public double meanArithmetic(ArrayList<Double> array){
+    public static double meanArithmetic(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double average = meanArithmetic(newArray);
         return average;
@@ -174,7 +174,7 @@
      * @param array  the double[] array of which the harmonic mean is desired
      * @return  the double value of the harmonic mean of the data array
      */
-    public double meanHarmonic(double[] array){
+    public static double meanHarmonic(double[] array){
         //Calculate properties of harmonic mean
         double reciprocalSum = 0, nZeros = 0, nData = 0;
         for(int i=0; i<array.length; i++){
@@ -199,7 +199,7 @@
      * @param array  the ArrayList<Double> array of which the harmonic mean is desired
      * @return  the double value of the harmonic mean of the data array
      */
-    public double meanHarmonic(ArrayList<Double> array){
+    public static double meanHarmonic(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double meanHarmonic = meanHarmonic(newArray);
         return meanHarmonic;
@@ -209,7 +209,7 @@
      * @param array  the double[] array that the average is desired for
      * @return  the double value of the average of the Log10 of the data array
      */
-    public double Average_Log10(double[] array){
+    public static double Average_Log10(double[] array){
         //Matlab code:  Xmean = mean(log10(data));
         double[] log10array = Log10(array);
         double averageLog10 = meanArithmetic(log10array);
@@ -220,7 +220,7 @@
      * @param array  the double[] array containing the pre-Log10 values
      * @return  the resulting double[] array containing the Log10 values of the "data" array
      */
-    public double[] Log10(double[] array){
+    public static double[] Log10(double[] array){
         //Matlab code:  X = log10(data);
 
         //Returns an array containing the Log10 value of each element in the data array
@@ -237,7 +237,7 @@
      * @param column  the column of data to be calculated with
      * @return  the resulting double[] array containing the Log10 values of the "data" array
      */
-    public double[] Log10(double[][] array, int column){
+    public static double[] Log10(double[][] array, int column){
         //Matlab code:  X = log10(data);
 
         //Returns an array containing the Log10 value of each element in the data array
@@ -256,7 +256,7 @@
      * @return  an array of y points corresponding to the x points of the xarray after a spline interpolation between Xarray and Yarray
      * @throws ArgumentOutsideDomainException 
      */
-    public double[] splineInterpolation(double[] Xarray, double[] Yarray, double[] xarray) throws ArgumentOutsideDomainException{
+    public static double[] splineInterpolation(double[] Xarray, double[] Yarray, double[] xarray) throws ArgumentOutsideDomainException{
         //Interpolate each y point for each provided x point using the above interpolatoer
         double[] yarray = new double[xarray.length];
         for(int i=0; i<xarray.length; i++){
@@ -271,7 +271,7 @@
      * @param xValue  a double x point for which y point is desired
      * @return  a double y point corresponding to the x point of the xValue after a spline interpolation between Xarray and Yarray
      */
-    public double splineInterpolation(double[] Xarray, double[] Yarray, double xValue) throws ArgumentOutsideDomainException{
+    public static double splineInterpolation(double[] Xarray, double[] Yarray, double xValue) throws ArgumentOutsideDomainException{
         //Set up the spline interplator
         SplineInterpolator splineInterp2 = new SplineInterpolator();
         PolynomialSplineFunction splineFunction2 = splineInterp2.interpolate(Xarray, Yarray);
@@ -288,7 +288,7 @@
      * @param xArray  a double[] array  x points for which y points is desired
      * @return  a double[] array of y points corresponding to the array of x points of the xArray after a linear interpolation between Xarray and Yarray
      */
-    public double[] linearInterpolation(double[] Xarray, double[] Yarray, double[] xArray){
+    public static double[] linearInterpolation(double[] Xarray, double[] Yarray, double[] xArray){
         //Interpolate a y value for each x value in xArray
         double[] yArray = new double[xArray.length];
         for(int i=0; i<xArray.length; i++){
@@ -304,9 +304,7 @@
      * @param xValue  a double x point for which y point is desired
      * @return  a double y point corresponding to the x point of the xValue after a linear interpolation between Xarray and Yarray
      */
-    public double linearInterpolation(double[] Xarray, double[] Yarray, double xValue){
-        DoubleArray doubleArray = new DoubleArray();
-
+    public static double linearInterpolation(double[] Xarray, double[] Yarray, double xValue){
         double yValue = 0;
 
         //Sort the Xarray based on values as to properly interpolate between points
@@ -317,8 +315,8 @@
                 tempMatrix[i][2] = i;
         }
         Arrays.sort(tempMatrix, new sort1_smallToLargeDoubleMath());
-        Xarray = doubleArray.getColumn(tempMatrix, 0);
-        Yarray = doubleArray.getColumn(tempMatrix, 1);
+        Xarray = DoubleArray.getColumn(tempMatrix, 0);
+        Yarray = DoubleArray.getColumn(tempMatrix, 1);
 
         //Interpolate bewtween the arrays
         for(int i=0; i<Xarray.length; i++){
@@ -352,7 +350,7 @@
     * @param percentile_type  which percentile value is desired 0.25, or 0.95, etc.
     * @return percentile of the dataset.
     */
-    public double Percentile_function (double[] array, double percentile_type){
+    public static double Percentile_function (double[] array, double percentile_type){
         //Sort Data
         Arrays.sort(array);
         double percentile = -9999;
@@ -403,7 +401,7 @@
     * @param percentile_type  which percentile value is desired 0.25, or 0.95, etc.
     * @return percentile of the dataset.
     */
-    public double Percentile_function (ArrayList<Double> array, double percentile_type){
+    public static double Percentile_function (ArrayList<Double> array, double percentile_type){
         double[] newArray = convertArray(array);
         double percentile = Percentile_function(newArray, percentile_type);
         return percentile;
@@ -413,7 +411,7 @@
     * @param array  input list data for median
     * @return median of the dataset.
     */
-    public double median(double[] array){
+    public static double median(double[] array){
         //sort dataset before calculating median
         Arrays.sort(array);
         
@@ -434,7 +432,7 @@
     * @param array  input list data for median
     * @return median of the dataset.
     */
-    public double median(ArrayList<Double> array){
+    public static double median(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double median = median(newArray);
         return median;
@@ -444,7 +442,7 @@
     * @param array  input list data for standard deviation
     * @return the population standard deviation of the dataList.
     */
-    public double StandardDeviationSample(double[] array){
+    public static double StandardDeviationSample(double[] array){
         double variance = VarianceSample(array);
         double standardDeviation = Math.pow(variance,0.5);
         return standardDeviation;
@@ -454,7 +452,7 @@
     * @param array  input list data for standard deviation
     * @return standard deviation of the dataset.
     */
-    public double StandardDeviationSample(ArrayList<Double> array){
+    public static double StandardDeviationSample(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double standardDeviation = StandardDeviationSample(newArray);
         return standardDeviation;
@@ -464,7 +462,7 @@
     * @param array  data array for which the variance is to be found
     * @return variance of the data array
     */
-    public double VariancePopulation(double[] array){
+    public static double VariancePopulation(double[] array){
         double average = meanArithmetic(array);
         //Calculate sum of differences
         double sum = 0;
@@ -485,7 +483,7 @@
     * @param array  data array for which the variance is to be found
     * @return variance of the data array
     */
-    public double VariancePopulation(ArrayList<Double> array){
+    public static double VariancePopulation(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double variance = VariancePopulation(newArray);
         return variance;
@@ -495,7 +493,7 @@
     * @param array  data array for which the variance is to be found
     * @return variance of the data array
     */
-    public double VarianceSample(double[] array){
+    public static double VarianceSample(double[] array){
         double average = meanArithmetic(array);
         //Calculate sum of differences
         double sum = 0;
@@ -522,7 +520,7 @@
     * @param array  data array for which the variance is to be found
     * @return variance of the data array
     */
-    public double VarianceSample(ArrayList<Double> array){
+    public static double VarianceSample(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double variance = VarianceSample(newArray);
         return variance;
@@ -532,7 +530,7 @@
     * @param array  input list data for coefficient of variation
     * @return coefficient of variation of the dataset.
     */
-    public double CoefficientOfVariation(double[] array){
+    public static double CoefficientOfVariation(double[] array){
         //Calculate the average and standard deviation for the coefficient of varience
         double average = meanArithmetic(array);
         double stDev = StandardDeviationSample(array);
@@ -545,7 +543,7 @@
     * @param array  input list data for coefficient of variation
     * @return coefficient of variation of the dataset.
     */
-    public double CoefficientOfVariation(ArrayList<Double> array){
+    public static double CoefficientOfVariation(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double coefVar = CoefficientOfVariation(newArray);
         return coefVar;
@@ -557,7 +555,7 @@
     * @return covariance of variation of the dataset.
     * @throws IOException 
     */
-    public double Covariance(double[] xData, double[] yData) throws IOException{
+    public static double Covariance(double[] xData, double[] yData) throws IOException{
         //Check if arrays are the same size
         if(xData.length != yData.length){
             throw(new IOException("Data arrays must be the same size to perform this statistic.  X data size:\t" + 
@@ -585,7 +583,7 @@
     * @return covariance of variation of the dataset.
     * @throws IOException 
     */
-    public double Covariance(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
+    public static double Covariance(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
         double[] newXarray = convertArray(xArray);
         double[] newYarray = convertArray(yArray);
         double covariance = Covariance(newXarray, newYarray);
@@ -596,7 +594,7 @@
     * @param array  input list data for skewness
     * @return skewness of the dataset.
     */
-    public double SkewnessPopulation(double[] array){
+    public static double SkewnessPopulation(double[] array){
         //Get the average and standard deviation for use in the skewness formula
         double average = meanArithmetic(array);
         double stDev = StandardDeviationSample(array);
@@ -615,7 +613,7 @@
     * @param array  input list data for skewness
     * @return skewness of the dataset.
     */
-    public double SkewnessPopulation(ArrayList<Double> array){
+    public static double SkewnessPopulation(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double skewness = SkewnessPopulation(newArray);
         return skewness;
@@ -626,7 +624,7 @@
     * @param array  input list data for skewness
     * @return skewness of the dataset.
     */
-    public double SkewnessSample(double[] array){
+    public static double SkewnessSample(double[] array){
         //Get the average and standard deviation for use in the skewness formula
         double average = meanArithmetic(array);
         double variance = VarianceSample(array);
@@ -650,7 +648,7 @@
     * @param array  input list data for skewness
     * @return skewness of the dataset.
     */
-    public double SkewnessSample(ArrayList<Double> array){
+    public static double SkewnessSample(ArrayList<Double> array){
         double[] newArray = convertArray(array);
         double skewness = SkewnessSample(newArray);
         return skewness;
@@ -660,7 +658,7 @@
     * @param xData  input list data for Sxx
     * @return Sxx of the dataset.
     */
-    public double Sxx(double[] xData){
+    public static double Sxx(double[] xData){
         double xBar = meanArithmetic(xData);
         double sxx = 0;
 
@@ -675,7 +673,7 @@
     * @param xArray  input list data for Sxx
     * @return Sxx of the dataset.
     */
-    public double Sxx(ArrayList<Double> xArray){
+    public static double Sxx(ArrayList<Double> xArray){
         double[] newXarray = convertArray(xArray);
         double sxx = Sxx(newXarray);
         return sxx;
@@ -685,8 +683,9 @@
     * @param xArray  input list of x data for Sxy
     * @param yArray  input list of y data for Sxy
     * @return Sxx of the datasets.
+     * @throws java.io.IOException
     */
-    public double Sxy(double[] xArray, double[] yArray) throws IOException{
+    public static double Sxy(double[] xArray, double[] yArray) throws IOException{
         //Check if arrays are the same size
         if(xArray.length != yArray.length){
             throw(new IOException("Data arrays must be the same size to perform this statistic.  X data size:\t" + 
@@ -708,8 +707,9 @@
     * @param xArray  input list of x data for Sxy
     * @param yArray  input list of y data for Sxy
     * @return Sxx of the datasets.
+     * @throws java.io.IOException
     */
-    public double Sxy(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
+    public static double Sxy(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
         double[] newXarray = convertArray(xArray);
         double[] newYarray = convertArray(yArray);
         double sxy = Sxy(newXarray, newYarray);
@@ -720,8 +720,9 @@
     * @param xArray  input list of x data
     * @param yArray  input list of y data
     * @return the correlation coefficient of the two data sets [r = Sxy / squareRoot(Sxx * Syy)]
+     * @throws java.io.IOException
     */
-    public double CorrelationCoefficient(double[] xArray, double[] yArray) throws IOException{
+    public static double CorrelationCoefficient(double[] xArray, double[] yArray) throws IOException{
         //Check if arrays are the same size
         if(xArray.length != yArray.length){
             throw(new IOException("Data arrays must be the same size to perform this statistic.  X data size:\t" + 
@@ -741,8 +742,9 @@
     * @param xArray  input list of x data
     * @param yArray  input list of y data
     * @return the correlation coefficient of the two data sets [r = Sxy / squareRoot(Sxx * Syy)]
+     * @throws java.io.IOException
     */
-    public double CorrelationCoefficient(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
+    public static double CorrelationCoefficient(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
         double[] newXarray = convertArray(xArray);
         double[] newYarray = convertArray(yArray);
         double r = CorrelationCoefficient(newXarray, newYarray);
@@ -753,8 +755,9 @@
     * @param xArray  input list of x data
     * @param yArray  input list of y data
     * @return the Rsquare of the two data sets [r = 1 - See/Syy]
+     * @throws java.io.IOException
     */
-    public double Rsquare(double[] xArray, double[] yArray) throws IOException{
+    public static double Rsquare(double[] xArray, double[] yArray) throws IOException{
         //Check if arrays are the same size
         if(xArray.length != yArray.length){
             throw(new IOException("Data arrays must be the same size to perform this statistic.  X data size:\t" + 
@@ -780,8 +783,9 @@
     * @param xArray  input list of x data for Sxy
     * @param yArray  input list of y data for Sxy
     * @return the Rsquare of the two data sets [r = 1 - See/Syy]
+     * @throws java.io.IOException
     */
-    public double Rsquare(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
+    public static double Rsquare(ArrayList<Double> xArray, ArrayList<Double> yArray) throws IOException{
         double[] newXarray = convertArray(xArray);
         double[] newYarray = convertArray(yArray);
         double rSquare = Rsquare(newXarray, newYarray);
@@ -792,7 +796,7 @@
      * @param array  array of difference values (y - y_hat)
      * @return  the sum of squared errors, sum(error_i ^ 2) 
      */
-    public double SSE(double[] array){
+    public static double SSE(double[] array){
         double sum = 0;
         for(int i=0; i<array.length;i++){
             sum = sum + Math.pow(array[i], 2);
@@ -805,7 +809,7 @@
      * @param array  array of difference values (y - y_hat)
      * @return  the value of the likelihood function LH = product( [1/sqrt(2*pi*sigma_errors^2)] * exp [-(error^2) / (2*sigma_errors^2)]
      */
-    public double LF(double[] array){
+    public static double LF(double[] array){
         //Compute the variance of the errors
         double sigma_e2 = VarianceSample(array);
 
@@ -822,7 +826,7 @@
      * @param array  array of difference values (y - y_hat)
      * @return  the value of the likelihood function, LLH = (-n/2)*ln(2*pi) - 1/2*ln(sigma_errors ^ 2n) - 1/2*(sigma_errors ^ -2)*sum(errors[i] ^ 2)
      */
-    public double LLF(double[] array){
+    public static double LLF(double[] array){
         //Compute the standard deviation of the errors
         double N = array.length;
         double sigma_e = StandardDeviationSample(array);
@@ -853,7 +857,7 @@
      * @param numberOfParams  the number of parameters used in the model (AR(p) or ARMA(p,q)) to predict future data
      * @return  the value of AIC for the given errors and parameters
      */
-    public double AIC(double[] array, int numberOfParams){
+    public static double AIC(double[] array, int numberOfParams){
         //Compute the log-likelihood function
         double llf = LLF(array);
 
@@ -869,7 +873,7 @@
      * @param numberOfParams  the number of parameters used in the model (AR(p) or ARMA(p,q)) to predict future data
      * @return  the value of BIC for the given errors and parameters
      */
-    public double BIC(double[] array, int numberOfParams){
+    public static double BIC(double[] array, int numberOfParams){
         //Compute the log-likelihood function
         double llf = LLF(array);
         double N = array.length;
@@ -885,8 +889,9 @@
      * @param observed array of observed values, sorted by observation date
      * @param modeled array of modeled values, sorted by model date, paired to the same dates as the above observed dates
      * @return 
+     * @throws java.io.IOException 
      */
-    public double NashSutcliffe(double[] observed, double[] modeled) throws IOException{
+    public static double NashSutcliffe(double[] observed, double[] modeled) throws IOException{
         //Check if arrays are the same size
         if(observed.length != modeled.length){
             throw(new IOException("Data arrays must be the same size to perform this statistic.  Observed data size:\t" + 
@@ -910,8 +915,9 @@
      * @param observed array of observed values, sorted by observation date
      * @param modeled array of modeled values, sorted by model date, paired to the same dates as the above observed dates
      * @return 
+     * @throws java.io.IOException 
      */
-    public double NashSutcliffe(ArrayList<Double> observed, ArrayList<Double> modeled) throws IOException{
+    public static double NashSutcliffe(ArrayList<Double> observed, ArrayList<Double> modeled) throws IOException{
         double[] newObsArray = convertArray(observed);
         double[] newModArray = convertArray(modeled);
         double E = NashSutcliffe(newObsArray, newModArray);
@@ -922,7 +928,7 @@
      * @param pairedData  a list of only y values which belong to a sorted (by magnitude of x) list of paired x-y data in the Mann-Kendall test.
      * @return the Mann-Kendall Correlation Coefficient
      */
-    public double KendallCorrelationCoefficient(ArrayList<Double> pairedData){
+    public static double KendallCorrelationCoefficient(ArrayList<Double> pairedData){
         //Compare ordered pairs such that i > j
         int M = 0, P = 0;
         for(int j=0; j<pairedData.size(); j++){

src/java/m/cfa/FlowStatistics.java

@@ -13,7 +13,7 @@
 import java.util.GregorianCalendar;
 
 /**
-* Last Updated: 25-March-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 29-June-2011
 */
@@ -309,8 +309,8 @@
             Date period1Begin_date = desiredDateFormat.parse(period1Begin);
             Date period1End_date = desiredDateFormat.parse(period1End);
             
-            ArrayList<String> period1_dates = new ArrayList<String>();
-            ArrayList<String> period1_flows = new ArrayList<String>();
+            ArrayList<String> period1_dates = new ArrayList<>();
+            ArrayList<String> period1_flows = new ArrayList<>();
             for(int i=0; i<flowData.length; i++){
                 Date newDate = desiredDateFormat.parse(flowData[i][0]);
                 if(newDate.compareTo(period1Begin_date) >= 0 && newDate.compareTo(period1End_date) <= 0){
@@ -341,8 +341,8 @@
             Date period2Begin_date = desiredDateFormat.parse(period2Begin);
             Date period2End_date = desiredDateFormat.parse(period2End);
             
-            ArrayList<String> period2_dates = new ArrayList<String>();
-            ArrayList<String> period2_flows = new ArrayList<String>();
+            ArrayList<String> period2_dates = new ArrayList<>();
+            ArrayList<String> period2_flows = new ArrayList<>();
             for(int i=0; i<flowData.length; i++){
                 Date newDate = desiredDateFormat.parse(flowData[i][0]);
                 if(newDate.compareTo(period2Begin_date) >= 0 && newDate.compareTo(period2End_date) <= 0){
@@ -373,8 +373,8 @@
             Date period3Begin_date = desiredDateFormat.parse(period3Begin);
             Date period3End_date = desiredDateFormat.parse(period3End);
             
-            ArrayList<String> period3_dates = new ArrayList<String>();
-            ArrayList<String> period3_flows = new ArrayList<String>();
+            ArrayList<String> period3_dates = new ArrayList<>();
+            ArrayList<String> period3_flows = new ArrayList<>();
             for(int i=0; i<flowData.length; i++){
                 Date newDate = desiredDateFormat.parse(flowData[i][0]);
                 if(newDate.compareTo(period3Begin_date) >= 0 && newDate.compareTo(period3End_date) <= 0){
@@ -403,8 +403,7 @@
         }
         
         //Calculate Flow statistics for each year in time period
-        DoubleArray doubleArray =  new DoubleArray();
-        ArrayList<Double> mQnFlows = new ArrayList<Double>();
+        ArrayList<Double> mQnFlows = new ArrayList<>();
         boolean moreYears = flowData.length > 0;
         String currentYear = flowData[0][0].substring(0,4);
         String finalYear = flowData[flowData.length - 1][0].substring(0,4);
@@ -429,11 +428,11 @@
             if(waterYearTF){
                 //Get current water year's data
                 String nextYear = String.valueOf(Integer.parseInt(currentYear) + 1);
-                partialData = doubleArray.getPeriodData(flowData, currentYear + "-10-01", nextYear + "-09-30");
+                partialData = DoubleArray.getPeriodData(flowData, currentYear + "-10-01", nextYear + "-09-30");
                 headerLabel = "Water Year: " + currentYear + "-10-01 to " + nextYear + "-09-30";
             }else{
                 //Get current calendar year's data
-                partialData = doubleArray.getYearsData(flowData, currentYear);
+                partialData = DoubleArray.getYearsData(flowData, currentYear);
                 headerLabel = currentYear;
             }
             resultArray = calculateFlowStatistics(statsSummaryTable, 
@@ -476,7 +475,7 @@
         //Calculate mQn (7Q10) Statistics
         double mQnFlow = 0;
         if(m != 0 && n != 0){
-            mQnFlow = doubleArray.calculateLowFlowReturnPeriod(mQnFlows, n);
+            mQnFlow = DoubleArray.calculateLowFlowReturnPeriod(mQnFlows, n);
         }
         String errorMessage = "";
         if(mQnFlow == 0){
@@ -514,39 +513,35 @@
                                              boolean showMonthlyTF,
                                              String seasonBegin,
                                              String seasonEnd) throws IOException, ParseException{
-        //Determine statistics
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        
         //Sort Data consecutively
         Arrays.sort(flowData, new DateComparator());
         
         //Get/Store data for seasonal statistics
-        String[][] seasonalData_String = doubleArray.getSeasonalData(flowData, seasonBegin, seasonEnd);
-        ArrayList<Double> seasonal_data = new ArrayList<Double>();
+        String[][] seasonalData_String = DoubleArray.getSeasonalData(flowData, seasonBegin, seasonEnd);
+        ArrayList<Double> seasonal_data = new ArrayList<>();
         for(int i=0; i<seasonalData_String.length; i++){
             double value = Double.parseDouble(seasonalData_String[i][1]);
             seasonal_data.add(value);
         }
         
         //Set up monthly data arrays
-        ArrayList<Double> jan_data = new ArrayList<Double>();
-        ArrayList<Double> feb_data = new ArrayList<Double>();
-        ArrayList<Double> mar_data = new ArrayList<Double>();
-        ArrayList<Double> apr_data = new ArrayList<Double>();
-        ArrayList<Double> may_data = new ArrayList<Double>();
-        ArrayList<Double> jun_data = new ArrayList<Double>();
-        ArrayList<Double> jul_data = new ArrayList<Double>();
-        ArrayList<Double> aug_data = new ArrayList<Double>();
-        ArrayList<Double> sep_data = new ArrayList<Double>();
-        ArrayList<Double> oct_data = new ArrayList<Double>();
-        ArrayList<Double> nov_data = new ArrayList<Double>();
-        ArrayList<Double> dec_data = new ArrayList<Double>();
+        ArrayList<Double> jan_data = new ArrayList<>();
+        ArrayList<Double> feb_data = new ArrayList<>();
+        ArrayList<Double> mar_data = new ArrayList<>();
+        ArrayList<Double> apr_data = new ArrayList<>();
+        ArrayList<Double> may_data = new ArrayList<>();
+        ArrayList<Double> jun_data = new ArrayList<>();
+        ArrayList<Double> jul_data = new ArrayList<>();
+        ArrayList<Double> aug_data = new ArrayList<>();
+        ArrayList<Double> sep_data = new ArrayList<>();
+        ArrayList<Double> oct_data = new ArrayList<>();
+        ArrayList<Double> nov_data = new ArrayList<>();
+        ArrayList<Double> dec_data = new ArrayList<>();
         
         //Calculate 1-day statistics
-        ArrayList<Double> allData = new ArrayList<Double>();
-        ArrayList<Double> diffPositive = new ArrayList<Double>();
-        ArrayList<Double> diffNegative = new ArrayList<Double>();
+        ArrayList<Double> allData = new ArrayList<>();
+        ArrayList<Double> diffPositive = new ArrayList<>();
+        ArrayList<Double> diffNegative = new ArrayList<>();
         double max_1day = -9999, min_1day = 9999;
         String max_1day_date = "-1", min_1day_date = "-1";
         boolean increasing = false;
@@ -595,7 +590,7 @@
             }
             
             //Calculate difference
-            if(doubleArray.checkSubsequentDates(date1, date2)){
+            if(DoubleArray.checkSubsequentDates(date1, date2)){
                 double diff = value - oldValue;
                 if(diff > 0){
                     diffPositive.add(diff);
@@ -636,60 +631,60 @@
             oldValue = value;
             date1 = date2;
         }
-        double mean_all = doubleMath.meanArithmetic(allData);
+        double mean_all = DoubleMath.meanArithmetic(allData);
         double centroid = centroidSum / sum;
         double flashinessIndex = RBI_numerator / sum;
         
         //Calculate 3-day statistics
-        Object[] resultArray = doubleArray.getMdayData(flowData, 3, "arithmetic");
+        Object[] resultArray = DoubleArray.getMdayData(flowData, 3, "arithmetic");
         ArrayList<String> average_3day_date = (ArrayList<String>) resultArray[0];
         ArrayList<Double> average_3day = (ArrayList<Double>) resultArray[1];
-        double max_3day = doubleMath.max(average_3day);
-        double min_3day = doubleMath.min(average_3day);
+        double max_3day = DoubleMath.max(average_3day);
+        double min_3day = DoubleMath.min(average_3day);
         String max_3day_date = getDateOfValue(average_3day_date, average_3day, max_3day);
         String min_3day_date = getDateOfValue(average_3day_date, average_3day, min_3day);
         
         //Calculate 7-day statistics
-        resultArray = doubleArray.getMdayData(flowData, 7, "arithmetic");
+        resultArray = DoubleArray.getMdayData(flowData, 7, "arithmetic");
         ArrayList<String> average_7day_date = (ArrayList<String>) resultArray[0];
         ArrayList<Double> average_7day = (ArrayList<Double>) resultArray[1];
-        double max_7day = doubleMath.max(average_7day);
-        double min_7day = doubleMath.min(average_7day);
-        double min_7day_ave = doubleMath.round(min_7day/mean_all,3);
+        double max_7day = DoubleMath.max(average_7day);
+        double min_7day = DoubleMath.min(average_7day);
+        double min_7day_ave = DoubleMath.round(min_7day/mean_all,3);
         String max_7day_date = getDateOfValue(average_7day_date, average_7day, max_7day);
         String min_7day_date = getDateOfValue(average_7day_date, average_7day, min_7day);
         
         //Calculate 30-day statistics
-        resultArray = doubleArray.getMdayData(flowData, 30, "arithmetic");
+        resultArray = DoubleArray.getMdayData(flowData, 30, "arithmetic");
         ArrayList<String> average_30day_date = (ArrayList<String>) resultArray[0];
         ArrayList<Double> average_30day = (ArrayList<Double>) resultArray[1];
-        double max_30day = doubleMath.max(average_30day);
-        double min_30day = doubleMath.min(average_30day);
+        double max_30day = DoubleMath.max(average_30day);
+        double min_30day = DoubleMath.min(average_30day);
         String max_30day_date = getDateOfValue(average_30day_date, average_30day, max_30day);
         String min_30day_date = getDateOfValue(average_30day_date, average_30day, min_30day);
         
         //Calculate 90-day statistics
-        resultArray = doubleArray.getMdayData(flowData, 90, "arithmetic");
+        resultArray = DoubleArray.getMdayData(flowData, 90, "arithmetic");
         ArrayList<String> average_90day_date = (ArrayList<String>) resultArray[0];
         ArrayList<Double> average_90day = (ArrayList<Double>) resultArray[1];
-        double max_90day = doubleMath.max(average_90day);
-        double min_90day = doubleMath.min(average_90day);
+        double max_90day = DoubleMath.max(average_90day);
+        double min_90day = DoubleMath.min(average_90day);
         String max_90day_date = getDateOfValue(average_90day_date, average_90day, max_90day);
         String min_90day_date = getDateOfValue(average_90day_date, average_90day, min_90day);
         
         //Calculate mQn (7Q10)Statistics
         double min_Mday = 0;
         if(m != 0){
-            resultArray = doubleArray.getMdayData(flowData, m, "arithmetic");
+            resultArray = DoubleArray.getMdayData(flowData, m, "arithmetic");
             ArrayList<Double> average_Mday = (ArrayList<Double>) resultArray[1];
-            min_Mday = doubleMath.min(average_Mday);
+            min_Mday = DoubleMath.min(average_Mday);
         }
         
         //Calculate Pulse Information
-        double highLimit = doubleMath.Percentile_function(allData, highPercentile);
-        double lowLimit = doubleMath.Percentile_function(allData, lowPercentile);
-        ArrayList<Double> highPulses = new ArrayList<Double>();
-        ArrayList<Double> lowPulses = new ArrayList<Double>();
+        double highLimit = DoubleMath.Percentile_function(allData, highPercentile);
+        double lowLimit = DoubleMath.Percentile_function(allData, lowPercentile);
+        ArrayList<Double> highPulses = new ArrayList<>();
+        ArrayList<Double> lowPulses = new ArrayList<>();
         int ctr_highPulse = 0, ctr_lowPulse = 0;
         double duration_highPulse = 0, duration_lowPulse = 0;
         boolean highPulseTF = false, lowPulseTF = false;
@@ -700,7 +695,7 @@
             String date2 = flowData[i][0];
             double value = Double.parseDouble(flowData[i][1]);
             if(i>0){
-                if(doubleArray.checkSubsequentDates(date1, date2)){
+                if(DoubleArray.checkSubsequentDates(date1, date2)){
                     //Calculate high pulse information
                     if(value > highLimit){
                         if(!highPulseTF){
@@ -763,51 +758,51 @@
         additionalSummary[0] = "";//blank
         additionalSummary[1] = dataHeader;//Method
         additionalSummary[2] = String.valueOf(allData.size());//Count, overall
-        additionalSummary[3] = String.valueOf(doubleMath.round(doubleMath.max(allData), 3));//Maximum, overall
-        additionalSummary[4] = String.valueOf(doubleMath.round(doubleMath.min(allData), 3));//Minimum, overall
-        additionalSummary[5] = String.valueOf(doubleMath.round(doubleMath.Percentile_function(allData,0.75), 3));//Upper Quartile, overall
-        additionalSummary[6] = String.valueOf(doubleMath.round(doubleMath.Percentile_function(allData,0.25), 3));//Lower Quartile, overall
-        additionalSummary[7] = String.valueOf(doubleMath.round(doubleMath.median(allData), 3));//Median, overall
-        additionalSummary[8] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(allData), 3));//Average, overall
-        additionalSummary[9] = String.valueOf(doubleMath.round(doubleMath.StandardDeviationSample(allData), 3));//Standard Deviation, overall
-        additionalSummary[10] = String.valueOf(doubleMath.round(doubleMath.VarianceSample(allData), 3));//Variance, overall
-        additionalSummary[11] = String.valueOf(doubleMath.round(doubleMath.SkewnessSample(allData), 3));//Skewness, overall
-        additionalSummary[12] = String.valueOf(doubleMath.round(doubleMath.CoefficientOfVariation(allData), 3));//Coefficient of Variation, overall
-        additionalSummary[13] = String.valueOf(doubleMath.round(max_1day,3));//Maximum (1-day)
+        additionalSummary[3] = String.valueOf(DoubleMath.round(DoubleMath.max(allData), 3));//Maximum, overall
+        additionalSummary[4] = String.valueOf(DoubleMath.round(DoubleMath.min(allData), 3));//Minimum, overall
+        additionalSummary[5] = String.valueOf(DoubleMath.round(DoubleMath.Percentile_function(allData,0.75), 3));//Upper Quartile, overall
+        additionalSummary[6] = String.valueOf(DoubleMath.round(DoubleMath.Percentile_function(allData,0.25), 3));//Lower Quartile, overall
+        additionalSummary[7] = String.valueOf(DoubleMath.round(DoubleMath.median(allData), 3));//Median, overall
+        additionalSummary[8] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(allData), 3));//Average, overall
+        additionalSummary[9] = String.valueOf(DoubleMath.round(DoubleMath.StandardDeviationSample(allData), 3));//Standard Deviation, overall
+        additionalSummary[10] = String.valueOf(DoubleMath.round(DoubleMath.VarianceSample(allData), 3));//Variance, overall
+        additionalSummary[11] = String.valueOf(DoubleMath.round(DoubleMath.SkewnessSample(allData), 3));//Skewness, overall
+        additionalSummary[12] = String.valueOf(DoubleMath.round(DoubleMath.CoefficientOfVariation(allData), 3));//Coefficient of Variation, overall
+        additionalSummary[13] = String.valueOf(DoubleMath.round(max_1day,3));//Maximum (1-day)
         additionalSummary[14] = max_1day_date;//Date of Maximum (1-day)
-        additionalSummary[15] = String.valueOf(doubleMath.round(min_1day,3));//Minimum (1-day)
+        additionalSummary[15] = String.valueOf(DoubleMath.round(min_1day,3));//Minimum (1-day)
         additionalSummary[16] = min_1day_date;//Date of Minimum (1-day)
-        additionalSummary[17] = String.valueOf(doubleMath.round(max_3day,3));//Maximum (3-day)
+        additionalSummary[17] = String.valueOf(DoubleMath.round(max_3day,3));//Maximum (3-day)
         additionalSummary[18] = max_3day_date;//Dates of Maximum (3-day)
-        additionalSummary[19] = String.valueOf(doubleMath.round(min_3day,3));//Minimum (3-day)
+        additionalSummary[19] = String.valueOf(DoubleMath.round(min_3day,3));//Minimum (3-day)
         additionalSummary[20] = min_3day_date;//Dates of Minimum (3-day)
-        additionalSummary[21] = String.valueOf(doubleMath.round(max_7day,3));//Maximum (7-day)
+        additionalSummary[21] = String.valueOf(DoubleMath.round(max_7day,3));//Maximum (7-day)
         additionalSummary[22] = max_7day_date;//Dates of Maximum (7-day)
-        additionalSummary[23] = String.valueOf(doubleMath.round(min_7day,3));//Minimum (7-day)
+        additionalSummary[23] = String.valueOf(DoubleMath.round(min_7day,3));//Minimum (7-day)
         additionalSummary[24] = min_7day_date;//Dates of Minimum (7-day)
-        additionalSummary[25] = String.valueOf(doubleMath.round(min_7day_ave,3));//Minimum (7-day)
-        additionalSummary[26] = String.valueOf(doubleMath.round(max_30day,3));//Maximum (30-day)
+        additionalSummary[25] = String.valueOf(DoubleMath.round(min_7day_ave,3));//Minimum (7-day)
+        additionalSummary[26] = String.valueOf(DoubleMath.round(max_30day,3));//Maximum (30-day)
         additionalSummary[27] = max_30day_date;//Dates of Maximum (30-day)
-        additionalSummary[28] = String.valueOf(doubleMath.round(min_30day,3));//Minimum (30-day)
+        additionalSummary[28] = String.valueOf(DoubleMath.round(min_30day,3));//Minimum (30-day)
         additionalSummary[29] = min_30day_date;//Dates of Minimum (30-day)
-        additionalSummary[30] = String.valueOf(doubleMath.round(max_90day,3));//Maximum (90-day)
+        additionalSummary[30] = String.valueOf(DoubleMath.round(max_90day,3));//Maximum (90-day)
         additionalSummary[31] = max_90day_date;//Dates of Maximum (90-day)
-        additionalSummary[32] = String.valueOf(doubleMath.round(min_90day,3));//Minimum (90-day)
+        additionalSummary[32] = String.valueOf(DoubleMath.round(min_90day,3));//Minimum (90-day)
         additionalSummary[33] = min_90day_date;//Dates of Minimum (90-day)
         additionalSummary[34] = String.valueOf(ctr_zero);//Number of Zero Flow Days
         additionalSummary[35] = String.valueOf(ctr_reversals);//Number of Flow Reversals
         additionalSummary[36] = String.valueOf(ctr_rises);//Number of Flow Rises
         additionalSummary[37] = String.valueOf(ctr_falls);//Number of Flow Falls
         additionalSummary[38] = String.valueOf(ctr_highPulse);//Number of High Pulses
-        additionalSummary[39] = String.valueOf(doubleMath.round(highLimit,1));//Threshold for High Pulses
-        additionalSummary[40] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(highPulses), 3));//Average Duration of High Pulses
+        additionalSummary[39] = String.valueOf(DoubleMath.round(highLimit,1));//Threshold for High Pulses
+        additionalSummary[40] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(highPulses), 3));//Average Duration of High Pulses
         additionalSummary[41] = String.valueOf(ctr_lowPulse);//Number of Low Pulses
-        additionalSummary[42] = String.valueOf(doubleMath.round(lowLimit,1));//Threshold for Low Pulses
-        additionalSummary[43] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(lowPulses), 3));//Average Duration of Low Pulses
-        additionalSummary[44] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(diffPositive),3));//Average Positive Difference Between Consecutive Days
-        additionalSummary[45] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(diffNegative),3));//Average Negative Difference Between Consecutive Days
-        additionalSummary[46] = String.valueOf(doubleMath.round(centroid,2));//Temporal centroid of annual discharge (Julian day, not water-year day)
-        additionalSummary[47] = String.valueOf(doubleMath.round(flashinessIndex,4));//Richards-Baker Index for flow 'flashiness'
+        additionalSummary[42] = String.valueOf(DoubleMath.round(lowLimit,1));//Threshold for Low Pulses
+        additionalSummary[43] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(lowPulses), 3));//Average Duration of Low Pulses
+        additionalSummary[44] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(diffPositive),3));//Average Positive Difference Between Consecutive Days
+        additionalSummary[45] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(diffNegative),3));//Average Negative Difference Between Consecutive Days
+        additionalSummary[46] = String.valueOf(DoubleMath.round(centroid,2));//Temporal centroid of annual discharge (Julian day, not water-year day)
+        additionalSummary[47] = String.valueOf(DoubleMath.round(flashinessIndex,4));//Richards-Baker Index for flow 'flashiness'
         
         //Add seasonal stats summary
         int index = 48;
@@ -874,7 +869,7 @@
         additionalSummary[index + 5] = "";//blank
 
         //Add these statistics to the existing results
-        statsSummaryTable = doubleArray.appendcolumn_Matrix(statsSummaryTable, additionalSummary);
+        statsSummaryTable = DoubleArray.appendcolumn_Matrix(statsSummaryTable, additionalSummary);
         
         Object[] returnArray = {statsSummaryTable, min_Mday};
         return returnArray;
@@ -890,19 +885,17 @@
      * @return 
      */
     private Object[] addSimpleStatsSummary(String[] statsSummaryTable, ArrayList<Double> data, int index){
-        DoubleMath doubleMath = new DoubleMath();
-
         statsSummaryTable[index] = String.valueOf(data.size());//count
-        statsSummaryTable[index + 1] = String.valueOf(doubleMath.round(doubleMath.max(data), 3));//Maximum
-        statsSummaryTable[index + 2] = String.valueOf(doubleMath.round(doubleMath.min(data), 3));//Minimum
-        statsSummaryTable[index + 3] = String.valueOf(doubleMath.round(doubleMath.Percentile_function(data, 0.75), 3));//Upper Quartile
-        statsSummaryTable[index + 4] = String.valueOf(doubleMath.round(doubleMath.Percentile_function(data,0.25), 3));//Lower Quartile
-        statsSummaryTable[index + 5] = String.valueOf(doubleMath.round(doubleMath.median(data), 3));//Median
-        statsSummaryTable[index + 6] = String.valueOf(doubleMath.round(doubleMath.meanArithmetic(data), 3));//Average
-        statsSummaryTable[index + 7] = String.valueOf(doubleMath.round(doubleMath.StandardDeviationSample(data), 3));//Standard Deviation
-        statsSummaryTable[index + 8] = String.valueOf(doubleMath.round(doubleMath.VarianceSample(data), 3));//Variance
-        statsSummaryTable[index + 9] = String.valueOf(doubleMath.round(doubleMath.SkewnessSample(data), 3));//Skewness
-        statsSummaryTable[index + 10] = String.valueOf(doubleMath.round(doubleMath.CoefficientOfVariation(data), 3));//Coefficient of Variation
+        statsSummaryTable[index + 1] = String.valueOf(DoubleMath.round(DoubleMath.max(data), 3));//Maximum
+        statsSummaryTable[index + 2] = String.valueOf(DoubleMath.round(DoubleMath.min(data), 3));//Minimum
+        statsSummaryTable[index + 3] = String.valueOf(DoubleMath.round(DoubleMath.Percentile_function(data, 0.75), 3));//Upper Quartile
+        statsSummaryTable[index + 4] = String.valueOf(DoubleMath.round(DoubleMath.Percentile_function(data,0.25), 3));//Lower Quartile
+        statsSummaryTable[index + 5] = String.valueOf(DoubleMath.round(DoubleMath.median(data), 3));//Median
+        statsSummaryTable[index + 6] = String.valueOf(DoubleMath.round(DoubleMath.meanArithmetic(data), 3));//Average
+        statsSummaryTable[index + 7] = String.valueOf(DoubleMath.round(DoubleMath.StandardDeviationSample(data), 3));//Standard Deviation
+        statsSummaryTable[index + 8] = String.valueOf(DoubleMath.round(DoubleMath.VarianceSample(data), 3));//Variance
+        statsSummaryTable[index + 9] = String.valueOf(DoubleMath.round(DoubleMath.SkewnessSample(data), 3));//Skewness
+        statsSummaryTable[index + 10] = String.valueOf(DoubleMath.round(DoubleMath.CoefficientOfVariation(data), 3));//Coefficient of Variation
         
         index = index + 11;
         Object[] returnArray = {statsSummaryTable, index};

src/java/m/cfa/Graphing.java

@@ -30,16 +30,16 @@
 import org.jfree.ui.TextAnchor;
 
 /**
-* Last Updated: 28-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 3-February-2014
 */
 public class Graphing {
-    private String fontFamily = "SansSerif";
-    public Font titleFont = new Font(fontFamily, Font.BOLD, 30);
-    public Font masterFont = new Font(fontFamily, Font.PLAIN, 22);
-    public Font DClabelFont = new Font(fontFamily, Font.ITALIC, 20);
-    public Font floodLabelFont = new Font(fontFamily, Font.PLAIN, 18);
+    private static String fontFamily = "SansSerif";
+    public static Font titleFont = new Font(fontFamily, Font.BOLD, 30);
+    public static Font masterFont = new Font(fontFamily, Font.PLAIN, 22);
+    public static Font DClabelFont = new Font(fontFamily, Font.ITALIC, 20);
+    public static Font floodLabelFont = new Font(fontFamily, Font.PLAIN, 18);
     //Calibri
     //Georgia
     //SansSerif
@@ -54,7 +54,7 @@
      * @param upperlimit  the upper limit of the x-interval marker.
      * @return XYPlot with the interval label added
      */
-    public XYPlot addIntervalLabel (XYPlot plot, String Label_title, double lowerlimit, double upperlimit){
+    public static XYPlot addIntervalLabel (XYPlot plot, String Label_title, double lowerlimit, double upperlimit){
         //Create a new interval marker and set its properties
         final IntervalMarker newLabel = new IntervalMarker(lowerlimit,upperlimit);
         newLabel.setLabel(Label_title);
@@ -83,17 +83,15 @@
      * therefore don't label these outliers in the legend
      * @return the original plot with new boxplot in it.
      */
-    public Object[] boxplot_shapes(XYPlot plot, 
+    public static Object[] boxplot_shapes(XYPlot plot, 
                                    double x_coord, 
                                ArrayList<Double> data, 
                                int series_int, 
                                boolean existingOutliers, 
                                boolean existingExtremeOutliers){
-        DoubleMath doubleMath = new DoubleMath();
-
         //Calculate and add Median to dataset
         XYSeries median_series = new XYSeries("Medians");
-        double mid_median = doubleMath.Percentile_function(data,0.50);
+        double mid_median = DoubleMath.Percentile_function(data,0.50);
         median_series.add(x_coord,mid_median);
 
         //Create median Line
@@ -109,8 +107,8 @@
         //Create quartile Box shapes for the box plot
         //Create XYSeries for the box shape
         XYSeries shapeSeries = new XYSeries("Shape");
-        double lowerQuartile = doubleMath.Percentile_function(data,0.25);
-        double upperQuartile = doubleMath.Percentile_function(data,0.75);
+        double lowerQuartile = DoubleMath.Percentile_function(data,0.25);
+        double upperQuartile = DoubleMath.Percentile_function(data,0.75);
         shapeSeries.add(x_coord, lowerQuartile);
         shapeSeries.add(x_coord, upperQuartile);
 
@@ -130,11 +128,11 @@
         double IQR = upperQuartile - lowerQuartile;
         double lowerLimit = lowerQuartile - 1.5*IQR;
         double upperLimit = upperQuartile + 1.5*IQR;
-        if(lowerLimit < doubleMath.min(data)){
-            lowerLimit = doubleMath.min(data);
+        if(lowerLimit < DoubleMath.min(data)){
+            lowerLimit = DoubleMath.min(data);
         }
-        if(upperLimit > doubleMath.max(data)){
-            upperLimit = doubleMath.max(data);
+        if(upperLimit > DoubleMath.max(data)){
+            upperLimit = DoubleMath.max(data);
         }
         XYSeries lineSeries = new XYSeries("Line");
         lineSeries.add(x_coord, lowerLimit);
@@ -154,7 +152,7 @@
         
         //Create additional output for use with JHighCharts instead/in addition to JFreeCharts
         double[] boxplotData = {upperLimit,upperQuartile,mid_median,lowerQuartile,lowerLimit};
-        ArrayList<Double> outliersJHighCharts = new ArrayList<Double>();// Get daily outliers
+        ArrayList<Double> outliersJHighCharts = new ArrayList<>();// Get daily outliers
         
         //Calculate and create Outliers (# < lowerQuartile - 1.5*IQR or # > upperQuartile + 1.5*IQR)
         //Calculate and create Extreme Outliers (# < lowerQuartile - 3*IQR or # > upperQuartile + 3*IQR)
@@ -225,7 +223,7 @@
      * @param seriesIndex  the graph index of the series to be plotted
      * @return the XYPlot with the series added to it with the above properties
      */
-    public XYPlot addXYSeries(XYPlot plot, double[][] series, Color lineColor, int seriesIndex){
+    public static XYPlot addXYSeries(XYPlot plot, double[][] series, Color lineColor, int seriesIndex){
         XYSeries xySeries = new XYSeries("");
         for(int i=0; i<series.length; i++){
             double y = series[i][1];
@@ -263,7 +261,7 @@
      * each time this function is call so that the new dataset does not replace the old one
      * @return the XYPlot with the added TimeSeries
      */
-    public XYPlot addTimeseriesData(XYPlot plot, 
+    public static XYPlot addTimeseriesData(XYPlot plot, 
                                     TimeSeries currentLine, 
                                     boolean lineTrue, 
                                     Color seriesColor, 
@@ -323,9 +321,8 @@
      * of the following formats respectively (yyyy-MM-dd HH:mm | yyyy-mm-dd | yyyy-mm | yyyy)
      * @return a JFreeChart TimeSeries
      */
-    public TimeSeries createTimeSeriesFromData(String[][] data, String title, String timeStep) throws ParseException{
-        DoubleArray doubleArray = new DoubleArray();
-        DateFormat desiredDateFormat = doubleArray.getDateFormat(timeStep,  false);
+    public static TimeSeries createTimeSeriesFromData(String[][] data, String title, String timeStep) throws ParseException{
+        DateFormat desiredDateFormat = DoubleArray.getDateFormat(timeStep,  false);
         Date jfreeChartDateLimit = desiredDateFormat.parse("1900-01-01");
 
         //Create TimeSeries graph of merged data
@@ -346,7 +343,7 @@
      * @param plot  the XYPlot containing the graph on which the fonts will be changed
      * @return the original plot with the modifications to the axis fonts
      */
-    public XYPlot setTimeAxisPreferences(XYPlot plot){
+    public static XYPlot setTimeAxisPreferences(XYPlot plot){
         //Set Y axis fonts
         ValueAxis yAxis = plot.getRangeAxis();
         yAxis.setLabelFont(masterFont);
@@ -371,7 +368,7 @@
      * @param plot  the XYPlot containing the graph on which the fonts will be changed
      * @return the original plot with the modifications to the axis fonts
      */
-    public XYPlot setAxisPreferences(XYPlot plot){
+    public static XYPlot setAxisPreferences(XYPlot plot){
         //Set Y axis fonts
         ValueAxis yAxis = plot.getRangeAxis();
         yAxis.setLabelFont(masterFont);
@@ -396,7 +393,7 @@
      * @param plot  the XYPlot containing the graph on which the fonts will be changed
      * @return the original plot with the modifications to the axis fonts
      */
-    public XYPlot setLogYaxisPreferences(XYPlot plot){
+    public static XYPlot setLogYaxisPreferences(XYPlot plot){
         //Set Y axis fonts
         LogarithmicAxis yAxis = (LogarithmicAxis) plot.getRangeAxis();
         yAxis.setLabelFont(masterFont);
@@ -419,7 +416,7 @@
      * @param plot  the XYPlot containing the graph on which the fonts will be changed
      * @return the original plot with the modifications to the axis fonts
      */
-    public XYPlot setLogXaxisPreferences(XYPlot plot){
+    public static XYPlot setLogXaxisPreferences(XYPlot plot){
         //Set Y axis fonts
         ValueAxis xAxis = (ValueAxis) plot.getRangeAxis();
         xAxis.setLabelFont(masterFont);
@@ -442,7 +439,7 @@
      * @param plot  the CategoryPlot containing the graph on which the fonts will be changed
      * @return the original plot with the modifications to the axis fonts
      */
-    public CategoryPlot setCategoryAxisPreferences(CategoryPlot plot){
+    public static CategoryPlot setCategoryAxisPreferences(CategoryPlot plot){
         //Set Y axis fonts
         ValueAxis yAxis = plot.getRangeAxis();
         yAxis.setLabelFont(masterFont);

src/java/m/cfa/STORET_Data.java

@@ -9,7 +9,7 @@
 import java.util.List;
 
 /**
-* Last Updated: 28-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 22-June-2012
 */
@@ -30,7 +30,7 @@
      * @throws IOException
      * @throws InterruptedException 
      */
-    public File downloadSTORET(String mainFolder, 
+    public static File downloadSTORET(String mainFolder, 
                                File resourceFile,
                                boolean cfaFormat_FT,
                                String organizationID,
@@ -66,7 +66,7 @@
         }
         
         //Setup inputs to python
-        List<String> args = new ArrayList<String>();
+        List<String> args = new ArrayList<>();
         args.add("python");
         args.add(resourceFile.getAbsolutePath());
         args.add(String.valueOf(cfaFormat_FT));
@@ -108,14 +108,14 @@
      * @return  a String[][] containing the flow or water quality data: column1 = date(yyyy-mm-dd), column2 = flowValue
      * @throws IOException
      */
-    public String[][] getSTORETdata(String mainFolder, 
-                                    File resourceFile,
-                                    boolean cfaFormat_FT,
-                                    String organizationID,
-                                    String stationID,
-                                    String wq_test,
-                                    String beginDate, 
-                                    String endDate) throws IOException, InterruptedException{
+    public static String[][] getSTORETdata(String mainFolder, 
+                                           File resourceFile,
+                                           boolean cfaFormat_FT,
+                                           String organizationID,
+                                           String stationID,
+                                           String wq_test,
+                                           String beginDate, 
+                                           String endDate) throws IOException, InterruptedException{
         //Get storet data
         File storetResultFile = downloadSTORET(mainFolder, resourceFile, cfaFormat_FT, organizationID, stationID, wq_test, beginDate, endDate);
         
@@ -140,17 +140,16 @@
         fr.close();
         
         //Parse result data
-        User_Data user_Data = new User_Data();
-        String[][] flowData = user_Data.readUserFile("STORET", stationID, storetData, wq_test, beginDate, endDate);
+        String[][] stationData = User_Data.readUserFile("STORET", stationID, storetData, wq_test, beginDate, endDate);
         
         //add check here for wq vs flow data and make sure to parse/convert the storet data's units into usgs code units
-        return flowData;
+        return stationData;
     }
     /**
      * @param units  the units of the current USGS water quality test.
      * @return a double with the correct conversion factor for the units.
      */
-     private double getWQconversion(String units){
+     private static double getWQconversion(String units){
          double conversion = -1.0;
          if(units.equalsIgnoreCase("g/l")){
              conversion = 1000.0;//convert to mg/l

src/java/m/cfa/USGS_Data.java

@@ -11,7 +11,7 @@
 import java.util.Iterator;
 
 /**
-* Last Updated: 28-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 21-June-2012
 */
@@ -22,19 +22,19 @@
      * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
      * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a String[][] containing column1 = date(yyyy-mm-dd), column2 = flowValue
      *   [2] = start data of the data (yyyy-mm-dd)
      *   [3] = end data of the data (yyyy-mm-dd)
      * @throws IOException
      */
-    public Object[] getUSGSflowData(String stationID, String beginDate, String endDate) throws IOException{
+    public static Object[] getUSGSflowData(String stationID, String beginDate, String endDate) throws IOException{
         //Get the webpage of data for the USGS flow station
         ArrayList<String> webpageAll = DownloadFlowWebpage(stationID, beginDate, endDate);
         
         //Pull out new arraylist of only the desired data from the arraylist to return as the web page result
         Iterator<String> iterate = webpageAll.iterator( );
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
 
         while(iterate.hasNext()){
             String temp_pageData = (String) iterate.next();
@@ -87,10 +87,10 @@
      * @param stationID  the USGS station ID for the current station
      * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
      * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
-     * @return an ArrayList<String> containing the results of the web service search for flow data using the above inputs
+     * @return an ArrayList containing the results of the web service search for flow data using the above inputs
      * @throws IOException
      */
-    public ArrayList<String> DownloadFlowWebpage(String stationID, String beginDate, String endDate) throws IOException {
+    public static ArrayList<String> DownloadFlowWebpage(String stationID, String beginDate, String endDate) throws IOException {
         //Specify flow website from inputs
         //http://waterdata.usgs.gov/nwis/dv?cb_00060=on&format=rdb&begin_date=1900-01-01&end_date=2015-07-01&site_no=07369654&referred_module=sw
         String flowWebsite = "http://waterdata.usgs.gov/nwis/dv?cb_00060=on&format=rdb&begin_date=" + 
@@ -102,7 +102,7 @@
         BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
         //Read out all of the webpage out into an ArrayList<String>
         String inputLine;
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
 
         while((inputLine = in.readLine()) != null){
             pageData.add(inputLine);
@@ -117,18 +117,18 @@
      * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
      * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a double[][] containing column1 = year, column2 = floodValue
      *   [2] = start data of the data (yyyy-mm-dd)
      *   [3] = end data of the data (yyyy-mm-dd)
      * @throws IOException
      */
-    public Object[] getUSGSPeakData(String stationID, String beginDate, String endDate) throws IOException{
+    public static Object[] getUSGSPeakData(String stationID, String beginDate, String endDate) throws IOException{
         //Get peak flow data
         ArrayList<String> peakWebPage = DownloadPeakFlowWebpage(stationID);
 
         //Loop through and pull out the desired data
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         Iterator<String> iterate = peakWebPage.iterator( );
 
         while(iterate.hasNext()){
@@ -171,10 +171,10 @@
         /**
      * Opens a web connection to USGS and returns the contents of a search for all peak flow data for the specific station
      * @param stationID  the USGS station ID for the current station
-     * @return an ArrayList<String> containing the results of the web service search for peak flow data using the above inputs
+     * @return an ArrayList containing the results of the web service search for peak flow data using the above inputs
      * @throws IOException
      */
-    public ArrayList<String> DownloadPeakFlowWebpage(String stationID) throws IOException {
+    public static ArrayList<String> DownloadPeakFlowWebpage(String stationID) throws IOException {
         //Specify flow website from inputs
         String peakWebsite = "http://nwis.waterdata.usgs.gov/nwis/peak?site_no=" + stationID + "&agency_cd=USGS&format=rdb";
 
@@ -185,7 +185,7 @@
         BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
         //Read out all of the webpage out into an ArrayList<String>
         String inputLine;
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
 
         while((inputLine = in.readLine()) != null){
             pageData.add(inputLine);
@@ -197,14 +197,14 @@
      * Converts the string array into a double array.  First it substrings the year from the 
      * first column (the date of the flows) and then only converts the year into a double.  
      * Then converts the flow values into doubles. It also only keeps data within the provided date range
-     * @param stringData  The ArrayList<String> array containing dates (YYYY-mm-dd) in the first column 
+     * @param stringData  The ArrayList array containing dates (YYYY-mm-dd) in the first column 
      * and flow values (cfs) in the second column
      * @param beginDate  the user defined begin date
      * @param endDate  the user defined end date
      * @return returns a double[][] array the same size as the provided string array containing 
      * the first column of years and the second column of flow values
      */
-    public double[][] convertUSGSpeakData(ArrayList<String> stringData, String beginDate, String endDate){
+    public static double[][] convertUSGSpeakData(ArrayList<String> stringData, String beginDate, String endDate){
         String beginYear = beginDate.substring(0,4);
         String endYear = endDate.substring(0,4);
         int ctr = 0;
@@ -249,13 +249,13 @@
      * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
      * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a String[][] containing column1 = date(yyyy-MM-dd hh:mm), column2 = flowValue
      *   [2] = start data of the data (yyyy-MM-dd hh:mm)
      *   [3] = end data of the data (yyyy-MM-dd hh:mm)
      * @throws IOException
      */
-    public Object[] getUSGS15minFlowData(String stationID, String beginDate, String endDate) throws IOException{
+    public static Object[] getUSGS15minFlowData(String stationID, String beginDate, String endDate) throws IOException{
         //Artificial limit due to the current status of USGS's Instantaneous Data Archive transition to NWIS
         if(beginDate.compareToIgnoreCase("2007-10-01") < 0){
             beginDate = "2007-10-01";
@@ -269,7 +269,7 @@
         
         //Pull out new arraylist of only the desired data from the arraylist to return as the web page result
         Iterator<String> iterate = webpageAll.iterator( );
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
 
         while(iterate.hasNext()){
             String temp_pageData = (String) iterate.next();
@@ -324,10 +324,10 @@
      * @param stationID  the USGS station ID for the current station
      * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
      * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
-     * @return an ArrayList<String> containing the results of the web service search for 15 minute flow data using the above inputs
+     * @return an ArrayList containing the results of the web service search for 15 minute flow data using the above inputs
      * @throws IOException
      */
-    public ArrayList<String> Download15minFlowWebpage(String stationID, String beginDate, String endDate) throws IOException {
+    public static ArrayList<String> Download15minFlowWebpage(String stationID, String beginDate, String endDate) throws IOException {
         //Specify flow website from inputs
         String flowWebsite = "http://nwis.waterdata.usgs.gov/nwis/uv?cb_00060=on&format=rdb&site_no=" + stationID + 
                              "&period=&begin_date=" + beginDate + "&end_date=" + endDate;
@@ -338,7 +338,121 @@
         URLConnection yc = webpage.openConnection();
         BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
         //Read out all of the webpage out into an ArrayList<String>
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
+        boolean moreLines = true;
+        while(moreLines){
+            try{
+                String inputLine = in.readLine();
+                if(inputLine != null){
+                    pageData.add(inputLine);
+                }else{
+                    moreLines = false;
+                }
+            }catch(SocketException e){
+                //The webpage is angry for some reason so quit out
+                moreLines = false;
+            }
+        }
+        in.close();
+
+        return pageData;
+    }
+    /**
+     * Get the 15 minute flow webpage and loop through and pull out the flow data for the current station
+     * @param stationID  the USGS station ID for the current station
+     * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
+     * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
+     * @return  a Object[][] containing:
+     *   [0] = an ArrayList containing the data query from the web service
+     *   [1] = a String[][] containing column1 = date(yyyy-MM-dd hh:mm), column2 = flowValue
+     *   [2] = start data of the data (yyyy-MM-dd hh:mm)
+     *   [3] = end data of the data (yyyy-MM-dd hh:mm)
+     * @throws IOException
+     */
+    public static Object[] getUSGS15minStageData(String stationID, String beginDate, String endDate) throws IOException{
+        //Artificial limit due to the current status of USGS's Instantaneous Data Archive transition to NWIS
+        if(beginDate.compareToIgnoreCase("2007-10-01") < 0){
+            beginDate = "2007-10-01";
+        }
+        if(endDate.compareToIgnoreCase("2007-10-01") < 0){
+            endDate = "2007-10-01";
+        }
+        
+        //Get the webpage of data for the USGS flow station
+        ArrayList<String> webpageAll = Download15minStageWebpage(stationID, beginDate, endDate);
+        
+        //Pull out new arraylist of only the desired data from the arraylist to return as the web page result
+        Iterator<String> iterate = webpageAll.iterator( );
+        ArrayList<String> textData = new ArrayList<>();
+
+        while(iterate.hasNext()){
+            String temp_pageData = (String) iterate.next();
+            String[] f = temp_pageData.split("\t");
+
+            if ((f.length >= 4) && ("USGS".equals(f[0]))) {
+                boolean Ice = f[4].equalsIgnoreCase("Ice");
+                boolean Ssn = f[4].equalsIgnoreCase("Ssn");
+                boolean Dis = f[4].equalsIgnoreCase("Dis");
+                boolean rat = f[4].equalsIgnoreCase("Rat");
+                boolean eqp = f[4].equalsIgnoreCase("Eqp");
+                boolean mnt = f[4].equalsIgnoreCase("Mnt");
+                boolean other = f[4].equalsIgnoreCase("***");
+                boolean blank = f[4].equalsIgnoreCase("");
+                if (!Ice && !Ssn && !Dis && !rat && !eqp && !mnt && !other && !blank) {
+                    //Pull out only the data needed to pass between sub-functions
+
+                    //f[1] = StationID
+                    //f[2] = Date-Time
+                    //f[3] = time location (ex. MDT = mountain daylight time)
+                    //f[4] = stage
+                    textData.add(f[1] + "\t" + f[2] + "\t" + f[3] + "\t" + f[4]);
+                }
+            }
+        }
+
+        //convert Array list into String[][] array (column1 = date, column2 = value)
+        String[][] stringArray = new String[textData.size()][2];
+        for(int i=0; i<stringArray.length; i++){
+            String[] currentColumns = textData.get(i).split("\t");
+            //currentColumns[0] = stationID
+            //currentColumns[1] = date (yyyy-MM-dd hh:mm)
+            //currentColumns[2] = time location
+            //currentColumns[3] = value
+            stringArray[i][0] = currentColumns[1];
+            stringArray[i][1] = currentColumns[3];
+        }
+        
+        //Save analysis results
+        String start = "-1";
+        String end = "-1";
+        if(stringArray.length > 0){
+            start = stringArray[0][0];
+            end = stringArray[stringArray.length - 1][0];
+        }
+        
+        Object[] returnArray = {webpageAll, stringArray, start, end};
+        return returnArray;
+    }
+    /**
+     * Opens a web connection to USGS and returns the contents of a search for 15 minute flow depth (stage) data for the specific station and date range
+     * @param stationID  the USGS station ID for the current station
+     * @param beginDate  the user specified begin date for the station (yyyy-mm-dd format)
+     * @param endDate  the user specified end date for the station (yyyy-mm-dd format)
+     * @return an ArrayList containing the results of the web service search for 15 minute flow data using the above inputs
+     * @throws IOException
+     */
+    public static ArrayList<String> Download15minStageWebpage(String stationID, String beginDate, String endDate) throws IOException {
+        //Specify flow website from inputs
+        String flowWebsite = "http://nwis.waterdata.usgs.gov/nwis/uv?cb_00065=on&format=rdb&site_no=" + stationID + 
+                             "&period=&begin_date=" + beginDate + "&end_date=" + endDate;
+        //Instantaneous Data Archive (IDA) website (to be discontinued in 2015) = "http://ida.water.usgs.gov/ida/available_records.cfm?sn=" + stationID;
+        
+        //Open the provided website
+        URL webpage = new URL(flowWebsite);
+        URLConnection yc = webpage.openConnection();
+        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
+        //Read out all of the webpage out into an ArrayList<String>
+        ArrayList<String> pageData = new ArrayList<>();
         boolean moreLines = true;
         while(moreLines){
             try{
@@ -361,14 +475,14 @@
      * Get the water quality webpage and loop through and pull out the water quality data for the current station
      * @param stationID  the USGS station ID for the current station
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a String[][] containing column1 = year, column2 = waterQualityValue
      *   [2] = start data of the data (yyyy-mm-dd)
      *   [3] = end data of the data (yyyy-mm-dd)
      * @throws IOException
      * @throws InterruptedException
      */
-    public Object[] getUSGSwqData(String stationID) throws IOException, InterruptedException{
+    public static Object[] getUSGSwqData(String stationID) throws IOException, InterruptedException{
 
         //Get the webpage of data for the USGS flow station
         ArrayList<String> webpageAll = DownloadWQwebpage(stationID);
@@ -376,7 +490,7 @@
     
         //Pull out new arraylist of only the desired data from the arraylist to return as the web page result
         Iterator<String> iterate = webpageAll.iterator( );
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         while(iterate.hasNext()){
             String temp_pageData = (String) iterate.next();
             String[] f = temp_pageData.split("\t");
@@ -429,14 +543,14 @@
     /**
      * Opens a web connection to USGS and returns the contents of a search for all water quality data for the specific station
      * @param stationID  the USGS station ID for the current station
-     * @return an ArrayList<String> containing the results of the web service search for water quality data using the above input
+     * @return an ArrayList containing the results of the web service search for water quality data using the above input
      * @throws IOException
      * @throws InterruptedException 
      */
-    public ArrayList<String> DownloadWQwebpage(String stationID) throws IOException, InterruptedException {
+    public static ArrayList<String> DownloadWQwebpage(String stationID) throws IOException, InterruptedException {
         //Specify flow website from inputs
 //      String WQWebsite = "http://waterdata.usgs.gov/nwis/nwisman/?site_no=" + stationID + "&agency_cd=USGS";
-        String WQWebsite = "http://nwis.waterdata.usgs.gov/usa/nwis/qwdata/?site_no=" + stationID + "&agency_cd=USGS&inventory_output=0&rdb_inventory_output=value&TZoutput=0&pm_cd_compare=Greater%20than&radio_parm_cds=all_parm_cds&qw_attributes=0&format=rdb&qw_sample_wide=0&rdb_qw_attributes=0&date_format=YYYY-MM-DD&rdb_compression=value&submitted_form=brief_list";        
+        String WQWebsite = "http://nwis.waterdata.usgs.gov/usa/nwis/qwdata/?site_no=" + stationID + "&agency_cd=USGS&inventory_output=0&rdb_inventory_output=value&TZoutput=0&pm_cd_compare=Greater%20than&radio_parm_cds=all_parm_cds&qw_attributes=0&format=rdb&qw_sample_wide=0&rdb_qw_attributes=0&date_format=YYYY-MM-DD&rdb_compression=value&submitted_form=brief_list";
 
         //Open the provided website
         URL webpage = new URL(WQWebsite);
@@ -457,13 +571,13 @@
             //If waiting more than 15 seconds (arbirary time amount, change as needed), the page likely didn't load 
             //or the station search didn't work so end the program and report this error
             if(sleepCounter > 15){
-                return new ArrayList<String>();
+                return new ArrayList<>();
             }
         }
 
         //Read out all of the webpage out into an ArrayList<String>
         String inputLine;
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
         while((inputLine = in.readLine()) != null){
             pageData.add(inputLine);
         }
@@ -476,7 +590,7 @@
      * @return  returns true if the webpage contains the keyword, false otherwise
      * @throws IOException
      */
-    public boolean getWQPage(BufferedReader in, String keyword) throws IOException{
+    public static boolean getWQPage(BufferedReader in, String keyword) throws IOException{
         String inputLine = "";
 
         boolean containsKeyword = false;
@@ -498,7 +612,7 @@
      * @throws IOException
      * @throws InterruptedException
      */
-    public ArrayList<String> getUSGSwqData_partial(String stationID, String wqTest) throws IOException, InterruptedException {
+    public static ArrayList<String> getUSGSwqData_partial(String stationID, String wqTest) throws IOException, InterruptedException {
 
         //Specify flow website from inputs
 //      String WQWebsite = "http://waterdata.usgs.gov/nwis/nwisman/?site_no=" + stationID + "&agency_cd=USGS";
@@ -523,13 +637,13 @@
             //If waiting more than 15 seconds (arbirary time amount, change as needed), the page likely didn't load 
             //or the station search didn't work so end the program and report this error
             if(sleepCounter > 15){
-                return new ArrayList<String>();
+                return new ArrayList<>();
             }
         }
 
         //Read out all of the webpage out into an ArrayList<String>
         String inputLine;
-        ArrayList<String> pageData = new ArrayList<String>( );
+        ArrayList<String> pageData = new ArrayList<>();
         while((inputLine = in.readLine()) != null){
             //Deliminate the row based on tabs
             String[] f = inputLine.split("\t");
@@ -558,7 +672,7 @@
      * @param endDate  the user defined end date for data search
      * @return
      */
-    public String[][] minimizeUSGSWQdata(String[][] allData, String wqTestCode, String beginDate, String endDate){
+    public static String[][] minimizeUSGSWQdata(String[][] allData, String wqTestCode, String beginDate, String endDate){
         int ctr = 0;
         for(int i=0; i<allData.length; i++){
             if(i != 0){//Ignore the first row containing the station name
@@ -590,7 +704,7 @@
      * @return a string with the type of units for the current test.
      * @throws IOException 
      */
-     public String getUSGSwqUnits(String parameterCode) throws IOException{
+     public static String getUSGSwqUnits(String parameterCode) throws IOException{
          URL webpage = new URL("http://nwis.waterdata.usgs.gov/usa/nwis/pmcodes?radio_pm_search=param_group&pm_group=All+--+include+all+parameter+groups&pm_search=&casrn_search=&srsname_search=&format=rdb&show=parameter_group_nm&show=parameter_nm&show=casrn&show=srsname&show=parameter_units");
          URLConnection yc = webpage.openConnection();
          BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
@@ -619,9 +733,7 @@
      * @return  a String[][] containing column1 = date (yyyy-mm-dd), column2 = flowValue based on USGS water quality observations for discharge (codes 00061 and 30209)
      * @throws IOException 
      */
-    public String[][] getUSGSwqFlowData(String[][] flowData, String[][] allWQdata, String beginDate, String endDate) throws IOException{
-        DoubleArray doubleArray = new DoubleArray();
-        
+    public static String[][] getUSGSwqFlowData(String[][] flowData, String[][] allWQdata, String beginDate, String endDate) throws IOException{
         //Extract USGS water quality code 00061 for dischage in cfs
         String[][] WQFlow1 = minimizeUSGSWQdata(allWQdata, "00061", beginDate, endDate);
         //Extract USGS water quality code 30209 for discharge test in m^3/s (cms)
@@ -633,10 +745,10 @@
         }
 
         //combine the WQ flows (cfs and the converted cms data) into a single variable to then combine with the Flowdata
-        String[][] WQDataflows = doubleArray.mergeData(WQFlow1, WQFlow2, "public");//The "public" attribute keeps the first dataset in case of duplicates
+        String[][] WQDataflows = DoubleArray.mergeData(WQFlow1, WQFlow2, "public");//The "public" attribute keeps the first dataset in case of duplicates
 
         //Combine flow data and WQ flow data into a variable of dates and flow values to be sorted
-        flowData = doubleArray.mergeData(flowData, WQDataflows, "public");//The "public" attribute keeps the first dataset in case of duplicates
+        flowData = DoubleArray.mergeData(flowData, WQDataflows, "public");//The "public" attribute keeps the first dataset in case of duplicates
         
         return flowData;
     }
@@ -644,17 +756,17 @@
      * Get the rating curve (stage-discharge relationship) data for use by the user
      * @param stationID  the USGS station ID for the current station
      * @return  a Object[][] containing:
-     *   [0] = an ArrayList<String> containing the data query from the web service
+     *   [0] = an ArrayList containing the data query from the web service
      *   [1] = a double[][] containing column1 = discharge, column2 = depth
      * @throws IOException
      */
-    public Object[] getUSGSratingCurve(String stationID) throws IOException{
+    public static Object[] getUSGSratingCurve(String stationID) throws IOException{
         //Get the webpage of data for the USGS flow station
         ArrayList<String> webpageAll = DownloadRatingCurveWebpage(stationID);
         
         //Pull out new arraylist of only the desired data from the arraylist to return as the web page result
         Iterator<String> iterate = webpageAll.iterator( );
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
 
         while(iterate.hasNext()){
             String temp_pageData = (String) iterate.next();
@@ -695,10 +807,10 @@
     /**
      * Opens a web connection to USGS and returns the contents of a search for 15 minute flow data for the specific station and date range
      * @param stationID  the USGS station ID for the current station
-     * @return an ArrayList<String> containing the results of the search for rating curve data using the above inputs
+     * @return an ArrayList containing the results of the search for rating curve data using the above inputs
      * @throws IOException
      */
-    public ArrayList<String> DownloadRatingCurveWebpage(String stationID) throws IOException {
+    public static ArrayList<String> DownloadRatingCurveWebpage(String stationID) throws IOException {
         //Specify rating curve website from inputs
         String ratingCurveWebsite = "http://nwis.waterdata.usgs.gov/nwisweb/data/ratings/exsa/USGS." + stationID + ".exsa.rdb";
         //"http://nwis.waterdata.usgs.gov/nwisweb/data/ratings/exsa/USGS.06741510.exsa.rdb"
@@ -706,7 +818,7 @@
         //Open the provided website
         URL webpage = new URL(ratingCurveWebsite);
         URLConnection yc = webpage.openConnection();
-        ArrayList<String> pageData = new ArrayList<String>();
+        ArrayList<String> pageData = new ArrayList<>();
         try{
             BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
             //Read out all of the webpage out into an ArrayList<String>

src/java/m/cfa/User_Data.java

@@ -6,7 +6,7 @@
 import java.util.Date;
 
 /**
-* Last Updated: 28-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 12-July-2012
 */
@@ -31,7 +31,7 @@
      * @return a string[] containing the header
      * @throws IOException
      */
-    public String[] getHeadersLDC(String userData_string) throws IOException{
+    public static String[] getHeadersLDC(String userData_string) throws IOException{
         
         String[] userData_types = userData_string.split("\\$\\$");
         //String userData_flow = userData_types[0];
@@ -63,7 +63,7 @@
      * @return a string[] containing the header of the first and second datasets (used by loadest and durationcurve-ldc)
      * @throws IOException
      */
-    private String[] getHeaders(String userData_string) throws IOException{
+    private static String[] getHeaders(String userData_string) throws IOException{
         //Pull out the first line and parse it into headers
         String[] userData_rows = userData_string.split("\n");
         String[] headers = userData_rows[0].split("\t");
@@ -96,7 +96,7 @@
      *   [1] = a String[][] containing water quality data: column1 = year, column2 = floodValue
      * @throws IOException
      */
-    public Object[] readUserFileLDC(String database, String stationID, String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
+    public static Object[] readUserFileLDC(String database, String stationID, String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
         
         String[] userData_types = userData_string.split("\\$\\$");
         String userData_flow = userData_types[0];
@@ -134,10 +134,9 @@
      * if there is not a value for column2 (blank, null, not a number, etc.) then no data will be kept for that date
      * @throws IOException
      */
-    public String[][] readUserFile(String database, String stationID, String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
+    public static String[][] readUserFile(String database, String stationID, String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
         //Get the wqCode out of wqTest
-        Data data = new Data();
-        String[] resultArray = data.getWQtestDataInfo(wqTest, "UserData");
+        String[] resultArray = Data.getWQtestDataInfo(wqTest, "UserData");
         String wqCode = resultArray[0];
         //String wqLabel = resultArray[1];
         //String wqUnits = resultArray[2];
@@ -226,7 +225,7 @@
      * @param date  the original date format to be converted into yyyy-mm-dd
      * @return  the original date converted to the yyyy-mm-dd format or "error" if the date wasn't able to be converted
      */
-    public String fixDateFormat(String date){
+    public static String fixDateFormat(String date){
         //This allows the user to upload a greater number of date formats that will be converted into the expected format for all the java interfaces
         
         //Convert Determine the deliminator the current date format
@@ -288,7 +287,7 @@
      * data for dates which were beginDate < data-date < endDate
      * @throws IOException 
      */
-    public String[][] minimizeUserData(String[][] allData, String beginDate, String endDate) throws IOException{
+    public static String[][] minimizeUserData(String[][] allData, String beginDate, String endDate) throws IOException{
         //Get today's date
         DateFormat desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd");
         Date currentDate = new Date();
@@ -360,7 +359,7 @@
      * if there is not a value for column2 (blank, null, not a number, etc.) then no data will be kept for that date
      * @throws IOException
      */
-    public String[][] read15minUserFile(String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
+    public static String[][] read15minUserFile(String userData_string, String wqTest, String beginDate, String endDate) throws IOException{
         //Check that the wqTest is a USGS code or "flow"
         if(wqTest.length() > 5){
             wqTest = wqTest.substring(0,5);//pull just the 5 digit USGS WQ code
@@ -454,7 +453,7 @@
      * @param dateTime_string  the original date format to be converted into yyyy-mm-dd hh:mm
      * @return  the original date-time converted to the 'yyyy-mm-dd hh:mm' format or "error" if the date-time wasn't able to be converted
      */
-    public String fixDateTimeFormat(String dateTime_string){
+    public static String fixDateTimeFormat(String dateTime_string){
         //This allows the user to upload a greater number of date-time formats that will be converted into the expected format for all the java interfaces
         
         String[] dateTime = dateTime_string.split(" ");
@@ -485,7 +484,7 @@
      * @param time  the original time format to be converted into hh:mm
      * @return  the original time converted to the hh:mm format or "error" if the time wasn't able to be converted
      */
-    public String fixTimeFormat(String time){
+    public static String fixTimeFormat(String time){
         //This allows the user to upload a greater number of time formats that will be converted into the expected format for all the java interfaces
         
         //Substring the time
@@ -528,7 +527,7 @@
      * data for dates which were beginDate < data-date < endDate
      * @throws IOException 
      */
-    public String[][] minimize15minUserData(String[][] allData, String beginDate, String endDate) throws IOException{
+    public static String[][] minimize15minUserData(String[][] allData, String beginDate, String endDate) throws IOException{
         //Get today's date
         DateFormat desiredDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         Date currentDate = new Date();

src/java/m/cfa/baseflow/guiBaseflow_Model.java

@@ -33,7 +33,7 @@
 import org.jfree.data.time.TimeSeries;
 
 /**
- * Last Updated: 29-April-2016
+ * Last Updated: 13-September-2016
  * @author Tyler Wible
  * @since 15-June-2012
  */
@@ -206,8 +206,6 @@
      * @throws IOException
      */
     private void graphBFLOWresults(String[][] sortedData_user) throws IOException, ParseException{
-        Graphing graphing = new Graphing();
-
         //Pull out results to be graphed
         String[][] baseFlowResults = readBFLOWresults(mainFolder);
 
@@ -280,29 +278,28 @@
         calculateBFLOWstats(graphData);
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeTimeSeries(mainFolder, graphData, "Daily", getTimeseriesOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, "Daily", getTimeseriesOutput().getName(), false);
 
         //Graph the baseflow on a timeseries axis
         XYPlot plotTime = new XYPlot();
 
         if(sortedData_user.length != 0){//only show user points if it is not zero
-            plotTime = graphing.addTimeseriesData(plotTime, streamflow_series, true, Color.lightGray, false, false, false, true, 7);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow1_series, true, Color.gray, true, true, false, true, 6);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow2_series, true, Color.darkGray, false, false, false, true, 5);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow3_series, true, Color.black, true, true, false, true, 4);
+            plotTime = Graphing.addTimeseriesData(plotTime, streamflow_series, true, Color.lightGray, false, false, false, true, 7);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow1_series, true, Color.gray, true, true, false, true, 6);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow2_series, true, Color.darkGray, false, false, false, true, 5);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow3_series, true, Color.black, true, true, false, true, 4);
             
             //Create user data points
-            plotTime = graphing.addTimeseriesData(plotTime, streamflow_series_user, false, Color.lightGray, false, false, false, true, 3);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow1_series_user, false, Color.gray, false, false, false, true, 2);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow2_series_user, false, Color.darkGray, false, false, false, true, 1);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow3_series_user, false, Color.black, false, false, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, streamflow_series_user, false, Color.lightGray, false, false, false, true, 3);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow1_series_user, false, Color.gray, false, false, false, true, 2);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow2_series_user, false, Color.darkGray, false, false, false, true, 1);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow3_series_user, false, Color.black, false, false, false, true, 0);
         }else{
             //Create data points
-            plotTime = graphing.addTimeseriesData(plotTime, streamflow_series, true, Color.lightGray, false, false, false, true, 3);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow1_series, true, Color.gray, true, true, false, true, 2);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow2_series, true, Color.darkGray, false, false, false, true, 1);
-            plotTime = graphing.addTimeseriesData(plotTime, baseflow3_series, true, Color.black, true, true, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, streamflow_series, true, Color.lightGray, false, false, false, true, 3);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow1_series, true, Color.gray, true, true, false, true, 2);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow2_series, true, Color.darkGray, false, false, false, true, 1);
+            plotTime = Graphing.addTimeseriesData(plotTime, baseflow3_series, true, Color.black, true, true, false, true, 0);
         }
         
         //Define Y Axis
@@ -317,15 +314,15 @@
         plotTime.setDomainAxis(0, domainTime);
 
         //Set other graph preferences
-        plotTime = graphing.setTimeAxisPreferences(plotTime);
+        plotTime = Graphing.setTimeAxisPreferences(plotTime);
 
         //Graph plot onto JfreeChart
         String graphTitle = "BFLOW Base-flow Separation for " + database + " Station " + stationID + "; " + stationName;
-        JFreeChart parentChart = new JFreeChart(graphTitle, graphing.titleFont, plotTime, true);
+        JFreeChart parentChart = new JFreeChart(graphTitle, Graphing.titleFont, plotTime, true);
 
         //Set legend Font
         LegendTitle legendTitle = parentChart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         //Save resulting graph
         try {
@@ -356,7 +353,7 @@
 
         String currentLine;
         int ctr = 0;
-        ArrayList<String> resultList = new ArrayList<String>();
+        ArrayList<String> resultList = new ArrayList<>();
 
         //Read out the contents of the results file
         while((currentLine = reader.readLine()) !=null){
@@ -421,28 +418,26 @@
         return resultArray;
     }
     private void calculateBFLOWstats(String[][] graphData){
-        DoubleMath doubleMath = new DoubleMath();
+        //Calculate the statistics for each baseflow filter pass
+        bflowStream_max = DoubleMath.round(DoubleMath.max(getColumn(graphData,1)),3);
+        bflowStream_min = DoubleMath.round(DoubleMath.min(getColumn(graphData,1)),3);
+        bflowStream_median = DoubleMath.round(DoubleMath.median(getColumn(graphData,1)),3);
+        bflowStream_mean = DoubleMath.round(DoubleMath.meanArithmetic(getColumn(graphData,1)),3);
         
-        //Calculate the statistics for each baseflow filter pass
-        bflowStream_max = doubleMath.round(doubleMath.max(getColumn(graphData,1)),3);
-        bflowStream_min = doubleMath.round(doubleMath.min(getColumn(graphData,1)),3);
-        bflowStream_median = doubleMath.round(doubleMath.median(getColumn(graphData,1)),3);
-        bflowStream_mean = doubleMath.round(doubleMath.meanArithmetic(getColumn(graphData,1)),3);
+        bflow1_max = DoubleMath.round(DoubleMath.max(getColumn(graphData,2)),3);
+        bflow1_min = DoubleMath.round(DoubleMath.min(getColumn(graphData,2)),3);
+        bflow1_median = DoubleMath.round(DoubleMath.median(getColumn(graphData,2)),3);
+        bflow1_mean = DoubleMath.round(DoubleMath.meanArithmetic(getColumn(graphData,2)),3);
         
-        bflow1_max = doubleMath.round(doubleMath.max(getColumn(graphData,2)),3);
-        bflow1_min = doubleMath.round(doubleMath.min(getColumn(graphData,2)),3);
-        bflow1_median = doubleMath.round(doubleMath.median(getColumn(graphData,2)),3);
-        bflow1_mean = doubleMath.round(doubleMath.meanArithmetic(getColumn(graphData,2)),3);
+        bflow2_max = DoubleMath.round(DoubleMath.max(getColumn(graphData,3)),3);
+        bflow2_min = DoubleMath.round(DoubleMath.min(getColumn(graphData,3)),3);
+        bflow2_median = DoubleMath.round(DoubleMath.median(getColumn(graphData,3)),3);
+        bflow2_mean = DoubleMath.round(DoubleMath.meanArithmetic(getColumn(graphData,3)),3);
         
-        bflow2_max = doubleMath.round(doubleMath.max(getColumn(graphData,3)),3);
-        bflow2_min = doubleMath.round(doubleMath.min(getColumn(graphData,3)),3);
-        bflow2_median = doubleMath.round(doubleMath.median(getColumn(graphData,3)),3);
-        bflow2_mean = doubleMath.round(doubleMath.meanArithmetic(getColumn(graphData,3)),3);
-        
-        bflow3_max = doubleMath.round(doubleMath.max(getColumn(graphData,4)),3);
-        bflow3_min = doubleMath.round(doubleMath.min(getColumn(graphData,4)),3);
-        bflow3_median = doubleMath.round(doubleMath.median(getColumn(graphData,4)),3);
-        bflow3_mean = doubleMath.round(doubleMath.meanArithmetic(getColumn(graphData,4)),3);
+        bflow3_max = DoubleMath.round(DoubleMath.max(getColumn(graphData,4)),3);
+        bflow3_min = DoubleMath.round(DoubleMath.min(getColumn(graphData,4)),3);
+        bflow3_median = DoubleMath.round(DoubleMath.median(getColumn(graphData,4)),3);
+        bflow3_mean = DoubleMath.round(DoubleMath.meanArithmetic(getColumn(graphData,4)),3);
     }
     /**
      * Creates a double[] array of the elements in dataArray[all][column]
@@ -614,8 +609,7 @@
      */
     private int[] checkFebLeapYear(int currentYear) {
         //Determine how many days February should have based on if it is a leap year or not
-        DoubleArray doubleArray = new DoubleArray();
-        boolean leapYear = doubleArray.getLeapYearTF(currentYear);
+        boolean leapYear = DoubleArray.getLeapYearTF(currentYear);
 
         //Based on the leap year or not determine the number of days in February
         int[] feb = {8, 8, 8, 4};
@@ -685,9 +679,6 @@
      * @throws IOException
      */
     private void graphHYSEPresults() throws IOException, ParseException{
-        Graphing graphing = new Graphing();
-
-
         //Pull out results to be graphed
         String[][] baseFlowResults = readHYSEPresults(mainFolder, ".bsf");//hysep.bsf
         String[][] streamFlowResults = readHYSEPresults(mainFolder, ".sro");//hysep.sro
@@ -737,14 +728,13 @@
         }
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeTimeSeries(mainFolder, graphData, "Daily", getTimeseriesOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, "Daily", getTimeseriesOutput().getName(), false);
 
         //Graph the baseflow on a timeseries axis
         XYPlot plotTime = new XYPlot();
-        plotTime = graphing.addTimeseriesData(plotTime, totalFlow_series, true, Color.black, false, false, false, true, 2);
-//      plotTime = graphTimeData(plotTime, streamflow_series, true, Color.lightGray, false, false, true, 1);
-        plotTime = graphing.addTimeseriesData(plotTime, baseflow_series, true, Color.gray, false, false, false, true, 0);
+        plotTime = Graphing.addTimeseriesData(plotTime, totalFlow_series, true, Color.black, false, false, false, true, 2);
+//      plotTime = GraphTimeData(plotTime, streamflow_series, true, Color.lightGray, false, false, true, 1);
+        plotTime = Graphing.addTimeseriesData(plotTime, baseflow_series, true, Color.gray, false, false, false, true, 0);
 
         //Define Y Axis
         ValueAxis rangeTime = new NumberAxis("Flow [cfs]");
@@ -757,15 +747,15 @@
         plotTime.setDomainAxis(0, domainTime);
 
         //Set other graph preferences
-        plotTime = graphing.setTimeAxisPreferences(plotTime);
+        plotTime = Graphing.setTimeAxisPreferences(plotTime);
 
         //Graph plot onto JfreeChart
         String title = "USGS-HYSEP Hydrograph Separation For " + database + " Station: " + stationID + ", " + stationName;
-        JFreeChart parentChart = new JFreeChart(title, graphing.titleFont, plotTime, true);
+        JFreeChart parentChart = new JFreeChart(title, Graphing.titleFont, plotTime, true);
 
         //Set legend Font
         LegendTitle legendTitle = parentChart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
 
         //Save resulting graph
@@ -795,10 +785,10 @@
 
         String currentLine;
         int ctr=0, dayCtr=1;
-        ArrayList<String> yearList = new ArrayList<String>();
-        ArrayList<String> monthList = new ArrayList<String>();
-        ArrayList<String> dayList = new ArrayList<String>();
-        ArrayList<String> flowList = new ArrayList<String>();
+        ArrayList<String> yearList = new ArrayList<>();
+        ArrayList<String> monthList = new ArrayList<>();
+        ArrayList<String> dayList = new ArrayList<>();
+        ArrayList<String> flowList = new ArrayList<>();
 
         //Read out the contents of the results file
         while((currentLine = reader.readLine()) !=null){
@@ -885,8 +875,7 @@
      */
     private int checkWATSTOREleapYear(int currentYear){
         //Determine how many days February should have based on if it is a leap year or not
-        DoubleArray doubleArray = new DoubleArray();
-        boolean leapYear = doubleArray.getLeapYearTF(currentYear);
+        boolean leapYear = DoubleArray.getLeapYearTF(currentYear);
 
         //Based on the leap year or not determine the number of days in February
         int feb = 4;
@@ -922,25 +911,22 @@
         }
         
         //Check if any flow data exists
-        Data data = new Data();
-        String[][] sortableData = data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
+        String[][] sortableData = Data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
         
         //If the user wants the datasets (public and user) merged then retrieve the second dataset (user)
         String[][] sortableData_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            sortableData_user = user_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
+            sortableData_user = User_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
         if(sortedData_combined.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             if(sortedData.length == 0){
                 errorMessage.add("There is no available flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                 if(database.equalsIgnoreCase("CDWR")){

src/java/m/cfa/download/guiDownload_Data.java

@@ -18,7 +18,7 @@
 import org.codehaus.jettison.json.JSONException;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 21-June-2012
 */
@@ -54,13 +54,12 @@
      * @throws Exception 
      */
     private ArrayList<String> downloadCDWRdata() throws Exception{
-        CDWR_Data cdwr_Data = new CDWR_Data();
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         
         //Determine the type of download for CDWR: flow, hourly-flow, no aggrigation (15-min) flow, or stage-discharge
         if(wqTest.equalsIgnoreCase("flow")){
             //Search for CDWR flow data
-            Object[] returnArray = cdwr_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
+            Object[] returnArray = CDWR_Data.getCDWRflowData(stationID, beginDate, endDate, "Daily");
             textData = (ArrayList<String>) returnArray[0];
             //flowData = (String[][]) returnArray[1];
             start = (String) returnArray[2];
@@ -68,19 +67,19 @@
 
         }else if(wqTest.equalsIgnoreCase("Flood Flow") || wqTest.equalsIgnoreCase("15-min flow")){
             //Search for CDWR flow data
-            Object[] returnArray = cdwr_Data.getCDWRflowData(stationID, beginDate, endDate, "15-min");
+            Object[] returnArray = CDWR_Data.getCDWRflowData(stationID, beginDate, endDate, "15-min");
             textData = (ArrayList<String>) returnArray[0];
             //flowData = (String[][]) returnArray[1];
             start = (String) returnArray[2];
             end = (String) returnArray[3];
 
         }else if(wqTest.equalsIgnoreCase("stage-discharge")){
-            Object[] returnArray = cdwr_Data.getCDWRratingCurve(stationID);
+            Object[] returnArray = CDWR_Data.getCDWRratingCurve(stationID);
             textData = (ArrayList<String>) returnArray[0];
             //double[][] ratingCurve = (double[][]) returnArray[1];
 
         }else{
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available data available for " + wqTest + " in the CDWR database. This feature is only available for stations in the USGS-NWIS, STORET, or CDSN databases.");
             writeError(errorMessage);
         }
@@ -106,25 +105,24 @@
             wqTest = "flow";
         }else if(wqTest.equalsIgnoreCase("15-min flow")){
             //Since STORET doesn't have 15-minute data, thrown an error and alert the user of this
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available 15-minute flow data available for the STORET database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
         }else if(wqTest.equalsIgnoreCase("stage-discharge")){
             //Since STORET doesn't have stage-discharge/rating curve data, thrown an error and alert the user of this
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available stage-discharge data available for the STORET database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
         }
         
         //Search STORET database using new rest service (fast)
-        STORET_Data storet_Data = new STORET_Data();
-        File storetResultFile = storet_Data.downloadSTORET(mainFolder, storetResourceFile, false, organizationID, stationID, "", beginDate, endDate);
+        File storetResultFile = STORET_Data.downloadSTORET(mainFolder, storetResourceFile, false, organizationID, stationID, "", beginDate, endDate);
         
         //Read Result file
         FileReader fr = new FileReader(storetResultFile);
         BufferedReader textReader = new BufferedReader(fr);
 
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         String currentLine;
         while((currentLine = textReader.readLine()) !=null){
             textData.add(currentLine);
@@ -141,13 +139,12 @@
      * @throws InterruptedException 
      */
     private ArrayList<String> downloadUSGSdata() throws IOException, InterruptedException{
-        USGS_Data usgs_Data = new USGS_Data();
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         
         //Determine the type of download for USGS: flow, flood flow, 15-minute-flow, stage-discharge, WQ data (all), WQ data (individual test)
         if(wqTest.equalsIgnoreCase("flow")){
             //Retrieve flow data from USGS website
-            Object[] returnArray = usgs_Data.getUSGSflowData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGSflowData(stationID, beginDate, endDate);
             textData = (ArrayList<String>) returnArray[0];
             //String[][] flowData = (String[][]) returnArray[1];
             start = (String) returnArray[2];
@@ -155,7 +152,7 @@
 
         }else if(wqTest.equalsIgnoreCase("Flood Flow")){
             //Retrieve flood flow data from USGS website
-            Object[] returnArray = usgs_Data.getUSGSPeakData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGSPeakData(stationID, beginDate, endDate);
             textData = (ArrayList<String>) returnArray[0];
             //double[][] floodData = (double[][]) returnArray[1];
             start = String.valueOf((double) returnArray[2]);
@@ -163,7 +160,7 @@
 
         }else if(wqTest.equalsIgnoreCase("15-min flow")){
             //Retrive 15-minute flow data from USGS website
-            Object[] returnArray = usgs_Data.getUSGS15minFlowData(stationID, beginDate, endDate);
+            Object[] returnArray = USGS_Data.getUSGS15minFlowData(stationID, beginDate, endDate);
             textData = (ArrayList<String>) returnArray[0];
             //String[][] flowData = (String[][]) returnArray[1];
             start = (String) returnArray[2];
@@ -171,13 +168,13 @@
 
         }else if(wqTest.equalsIgnoreCase("stage-discharge")){
             //Retrive rating curve data from USGS website
-            Object[] returnArray = usgs_Data.getUSGSratingCurve(stationID);
+            Object[] returnArray = USGS_Data.getUSGSratingCurve(stationID);
             textData = (ArrayList<String>) returnArray[0];
             //double[][] ratingCurve = (double[][]) returnArray[1];
 
         }else if(wqTest.equalsIgnoreCase("all")){
             //Retrive all WQ data from USGS website
-            Object[] returnArray = usgs_Data.getUSGSwqData(stationID);
+            Object[] returnArray = USGS_Data.getUSGSwqData(stationID);
             textData = (ArrayList<String>) returnArray[0];
             //String[][] allWQdata = (String[][]) returnArray1[1];
             start = (String) returnArray[2];
@@ -185,7 +182,7 @@
 
         }else{
             //Retrive only the selected WQ data from USGS website
-            textData = usgs_Data.getUSGSwqData_partial(stationID, wqTest);
+            textData = USGS_Data.getUSGSwqData_partial(stationID, wqTest);
         }
         
         return textData;
@@ -203,18 +200,17 @@
             wqTest = "flow";
         }else if(wqTest.equalsIgnoreCase("15-min flow")){
             //Since CDSN doesn't have 15-minute data, thrown an error and alert the user of this
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available 15-minute flow data available for the STORET database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
         }else if(wqTest.equalsIgnoreCase("stage-discharge")){
             //Since CDSN doesn't have stage-discharge/rating curve data, thrown an error and alert the user of this
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available stage-discharge data available for the STORET database. This feature is only available for stations in the USGS-NWIS or CDWR databases.");
             writeError(errorMessage);
         }
         
-        CDSN_Data cdsn_data = new CDSN_Data();
-        Object[] returnArray = cdsn_data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
+        Object[] returnArray = CDSN_Data.getCDSNdata(organizationID, stationID, wqTest, beginDate, endDate);
         ArrayList<String> resultFileContents = (ArrayList<String>) returnArray[0];
         //flowData = (String[][]) returnArray[1];
         start = (String) returnArray[2];
@@ -237,7 +233,7 @@
     }
     /**
      * Writes out the output file to the specified location
-     * @param textData  ArrayList<String> to be written as each line of the text file
+     * @param textData  ArrayList to be written as each line of the text file
      * @throws IOException
      */
     public void writeOutputFile(ArrayList<String> textData) throws IOException{
@@ -255,6 +251,7 @@
     }
     /**
      * Primary download function, queries CDWR, STORET, or USGS database
+     * @param storetResourceFile
      * @throws IOException 
      * @throws InterruptedException 
      */
@@ -271,7 +268,7 @@
         }
         
         //Determine the requested download type and download data from the correct site
-        ArrayList<String> textData = new ArrayList<String>();
+        ArrayList<String> textData = new ArrayList<>();
         if(database.equalsIgnoreCase("USGS")){
             textData = downloadUSGSdata();
             

src/java/m/cfa/drought/AutoRegression.java

@@ -30,12 +30,12 @@
     }
 }
 /**
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 23-July-2012
 */
 public class AutoRegression {
-        private int projectionCount = 100000;
+    private final int projectionCount = 100000;
     /**
      * Performs a conversion to stoicastic data (z) from standard data of the second column of the provided data array if convertTrue is true. Otherwise it 
      * performs a conversion to original data (x) from stoicastic data z of the second column of the provided data array.
@@ -73,13 +73,10 @@
      * @return  the optimized lambda value for the Box-Cox Transformation (aka minimum skewness)
      */
     public double BoxCox(double[][] annualData){
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Perform Box-Cox transform of the data
         double lambda = 0.0;
         double[][] transformedData = BoxCox(lambda, annualData, true);
-        double skewness = doubleMath.SkewnessSample(doubleArray.getColumn(transformedData,1));
+        double skewness = DoubleMath.SkewnessSample(DoubleArray.getColumn(transformedData,1));
 
         //Check if the transformation is proper (aka skewness = 0 or marginally close) and try again if skewness is not zero
         long start = System.currentTimeMillis();
@@ -90,7 +87,7 @@
                 //If lambda has ranged from 0 to 5 end searching for optimal lambda and report lambda = 1
                 lambda = 1;
                 transformedData = BoxCox(lambda, annualData, true);
-                skewness = doubleMath.SkewnessSample(doubleArray.getColumn(transformedData,1));
+                skewness = DoubleMath.SkewnessSample(DoubleArray.getColumn(transformedData,1));
                 break;
             }else{
                 lambda = lambda + 0.001;
@@ -99,7 +96,7 @@
 
             //Transform the data using a Box-Cox transformation with the estimated lambda value
             transformedData = BoxCox(lambda, annualData, true);
-            skewness = doubleMath.SkewnessSample(doubleArray.getColumn(transformedData,1));
+            skewness = DoubleMath.SkewnessSample(DoubleArray.getColumn(transformedData,1));
             ctr++;
         }
 
@@ -213,9 +210,6 @@
      * @throws IOException
      */
     public Object[] AutoregressiveModel(String mainFolder, String action, String phiValues, String thetaValues, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         Object[] returnArray = null;
 
         if(action.equalsIgnoreCase("optimizeModel")){
@@ -223,10 +217,10 @@
             //Run optimization on the model using AIC/BIC and return a graph of the optimal front
             if(thetaValues.equalsIgnoreCase("")){
                 //Perform AR(p) optimization
-                ArrayList<Double> aic = new ArrayList<Double>();
-                ArrayList<Double> bic = new ArrayList<Double>();
-                ArrayList<String> phi = new ArrayList<String>();
-                ArrayList<String> theta = new ArrayList<String>();
+                ArrayList<Double> aic = new ArrayList<>();
+                ArrayList<Double> bic = new ArrayList<>();
+                ArrayList<String> phi = new ArrayList<>();
+                ArrayList<String> theta = new ArrayList<>();
 
                 boolean increasing = false;
                 int ctr = 1;
@@ -253,7 +247,7 @@
                 }
 
                 //Determine the phi values corresponding to the best BIC value
-                double min = doubleMath.min(bic);
+                double min = DoubleMath.min(bic);
                 for(int i=0; i<bic.size(); i++){
                         if(Double.compare(bic.get(i), min) == 0){
                                 phiValues = phi.get(i);
@@ -291,7 +285,7 @@
 
 
                 //Determine the optimal BIC value (minimum of the matrix)
-                double min = doubleMath.min(doubleArray.getColumn(results, 3));
+                double min = DoubleMath.min(DoubleArray.getColumn(results, 3));
 
                 //Loop through and find the phi and theta values corresponding to the optimal BIC value
                 for(int i=0; i<results.length; i++){
@@ -366,9 +360,6 @@
      * @throws IOException 
      */
     public String[] AR(String mainFolder, int p, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Error catch for available data vs. "p" order AR model
         int N = transformedData.length;
         if(N < (2*p + 1)){
@@ -404,7 +395,7 @@
 
         //Convert phi values into a single tab-delimited string and calculate estimate of variance of errors
         String phiStrings = null;
-        double[] data0 = doubleArray.getColumn(b.getArray(), 0);
+        double[] data0 = DoubleArray.getColumn(b.getArray(), 0);
         double sum = 0;
         for(int i=0; i<phi.getRowDimension(); i++){
             //Check for causal/explosive AR(p) model based on abs(phi) < 1
@@ -420,8 +411,8 @@
             }
 
             //Calculate sum of phi * lag(p) for variance of error estimate
-            double[] dataP = doubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
-            double lagP = doubleMath.CorrelationCoefficient(dataP, data0);
+            double[] dataP = DoubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
+            double lagP = DoubleMath.CorrelationCoefficient(dataP, data0);
             sum = sum + (phi.get(i, 0) * lagP);
         }
 
@@ -441,9 +432,6 @@
      * @throws IOException 
      */
     public Object[] AR(String mainFolder, String phiString, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Error catch for available data vs. "p" order AR model
         int N = transformedData.length;
         String[] phiValues = phiString.split("\t");
@@ -471,15 +459,15 @@
 
         //Convert phi values into a matrix
         Matrix phi = new Matrix(p, 1);
-        double[] data0 = doubleArray.getColumn(b.getArray(), 0);
+        double[] data0 = DoubleArray.getColumn(b.getArray(), 0);
         double sum = 0;
         for(int i=0; i<phiValues.length; i++){
             double currentPhi = Double.parseDouble(phiValues[i]);
             phi.set(i, 0, currentPhi);
 
             //Calculate sum of phi * lag(p) for variance of error estimate
-            double[] dataP = doubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
-            double lagP = doubleMath.CorrelationCoefficient(dataP, data0);
+            double[] dataP = DoubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
+            double lagP = DoubleMath.CorrelationCoefficient(dataP, data0);
             sum = sum + (phi.get(i, 0) * lagP);
         }
 
@@ -504,14 +492,14 @@
         }
 
 //        //Compute stats on the errors
-//        double aic = doubleMath.AIC(errors, p);
-//        double bic = doubleMath.BIC(errors, p);
+//        double aic = DoubleMath.AIC(errors, p);
+//        double bic = DoubleMath.BIC(errors, p);
 //        testErrors(errors);
 
         //Project forward the data to perform drought statistics on
         Random generator = new Random();
-        double mean = doubleMath.meanArithmetic(errors);
-        double stDev = doubleMath.StandardDeviationSample(errors);
+        double mean = DoubleMath.meanArithmetic(errors);
+        double stDev = DoubleMath.StandardDeviationSample(errors);
         double[][] predictedData = new double[projectionCount + p][2];
         for(int i=0; i<predictedData.length; i++){
             //Pull first p values from actual observed data
@@ -552,9 +540,6 @@
      * @throws IOException 
      */
     public double[] ARoptimize(String mainFolder, String phiString, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Error catch for available data vs. "p" order AR model
         int N = transformedData.length;
         String[] phiValues = phiString.split("\t");
@@ -582,15 +567,15 @@
 
         //Convert phi values into a matrix
         Matrix phi = new Matrix(p, 1);
-        double[] data0 = doubleArray.getColumn(b.getArray(), 0);
+        double[] data0 = DoubleArray.getColumn(b.getArray(), 0);
         double sum = 0;
         for(int i=0; i<phiValues.length; i++){
             double currentPhi = Double.parseDouble(phiValues[i]);
             phi.set(i, 0, currentPhi);
 
             //Calculate sum of phi * lag(p) for variance of error estimate
-            double[] dataP = doubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
-            double lagP = doubleMath.CorrelationCoefficient(dataP, data0);
+            double[] dataP = DoubleArray.getColumn(A.getMatrix(0, A.getRowDimension() - 1, i, i).getArray(), 0);
+            double lagP = DoubleMath.CorrelationCoefficient(dataP, data0);
             sum = sum + (phi.get(i, 0) * lagP);
         }
 
@@ -615,8 +600,8 @@
         }
 
         //Compute stats on the errors
-        double aic = doubleMath.AIC(errors, p);
-        double bic = doubleMath.BIC(errors, p);
+        double aic = DoubleMath.AIC(errors, p);
+        double bic = DoubleMath.BIC(errors, p);
 //        testErrors(errors);
 
         //Return the generated data as well as the shortened version of the original data so they can be graphed together
@@ -701,8 +686,6 @@
      * @throws IOException 
      */
     public double[] ARMAoptimize(String mainFolder, String phiString, String thetaString, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-
         String[] phiValues = phiString.split("\t");
         String[] thetaValues = thetaString.split("\t");
         int p = phiValues.length;
@@ -770,10 +753,10 @@
         }
 
         //Compute stats on the errors
-//        double sse = doubleMath.SSE(errors);
+//        double sse = DoubleMath.SSE(errors);
 //        System.out.println("SSE: " + sse);
-        double aic = doubleMath.AIC(errors, p+q);
-        double bic = doubleMath.BIC(errors, p+q);
+        double aic = DoubleMath.AIC(errors, p+q);
+        double bic = DoubleMath.BIC(errors, p+q);
 //        testErrors(errors);
 //        System.out.println("ARMA(" + p + ", " + q + ") JAMA model (SSE: " + sse + ") took " + (System.nanoTime()-start) + " nanoseconds to generate a dataset.");
         double[] returnArray = {aic, bic};
@@ -791,8 +774,6 @@
      * @throws IOException 
      */
     public Object[] ARMA(String mainFolder, String phiString, String thetaString, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-
         String[] phiValues = phiString.split("\t");
         String[] thetaValues = thetaString.split("\t");
         int p = phiValues.length;
@@ -857,14 +838,14 @@
         }
 
 //        //Compute stats on the errors
-//        double aic = doubleMath.AIC(errors, p+q);
-//        double bic = doubleMath.BIC(errors, p+q);
+//        double aic = DoubleMath.AIC(errors, p+q);
+//        double bic = DoubleMath.BIC(errors, p+q);
 //        testErrors(errors);
 
         //Project forward the data to perform drought statistics on
         Random generator = new Random();
-        double mean = doubleMath.meanArithmetic(errors);
-        double stDev = doubleMath.StandardDeviationSample(errors);
+        double mean = DoubleMath.meanArithmetic(errors);
+        double stDev = DoubleMath.StandardDeviationSample(errors);
         double[][] predictedData = new double[projectionCount + p][2];
         for(int i=0; i<predictedData.length; i++){
             //Pull first p values from actual observed data
@@ -914,9 +895,6 @@
      * @throws IOException 
      */
     public String[] ARMA11(String mainFolder, double[][] transformedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Error catch for available data vs. "p" order AR model
         int N = transformedData.length;
         if(N < (2*1 + 1)){
@@ -948,8 +926,8 @@
         double[][] data0 = b.getArray();
         double[][] data1 = A.getMatrix(0, A.getRowDimension() - 1, 0, 0).getArray();
         double[][] data2 = A.getMatrix(0, A.getRowDimension() - 1, 1, 1).getArray();
-        double lag1 = doubleMath.CorrelationCoefficient(doubleArray.getColumn(data0, 0), doubleArray.getColumn(data1, 0));
-        double lag2 = doubleMath.CorrelationCoefficient(doubleArray.getColumn(data0, 0), doubleArray.getColumn(data2, 0));
+        double lag1 = DoubleMath.CorrelationCoefficient(DoubleArray.getColumn(data0, 0), DoubleArray.getColumn(data1, 0));
+        double lag2 = DoubleMath.CorrelationCoefficient(DoubleArray.getColumn(data0, 0), DoubleArray.getColumn(data2, 0));
 
         //Calculated phi1 of ARMA(1,1)
         double phi1 = lag2/lag1;
@@ -960,7 +938,7 @@
         double theta1 = ((-B) + Math.pow(root, 0.5))/(2*(lag1 - phi1));
 
 //        //Estimate varience of errors for ARMA(1,1) only
-//        double variance = doubleMath.VarianceSample(doubleArray.getColumn(data0, 0));
+//        double variance = DoubleMath.VarianceSample(DoubleArray.getColumn(data0, 0));
 //        double numerator = variance *(1 - phi1);
 //        double denominator = 1 - (2*phi1*theta1) + Math.pow(theta1, 1);
 //        double variance_e = numerator/denominator;
@@ -1014,15 +992,15 @@
 //     */
 //    private void testErrors(double[] errors){
 //        //Calculate error mean and compare it against the assumed mean of zero
-//      System.out.println("Error Mean: " + doubleMath.Average(errors));
+//      System.out.println("Error Mean: " + DoubleMath.Average(errors));
 //        
 //        //Calculated the error variance from portions of the sample and test if it is constant
-//      System.out.println("Error Variance: " + doubleMath.VarianceSample(errors));
-//      System.out.println("Error Standard Deviation: " + doubleMath.StandardDeviationSample(errors));
+//      System.out.println("Error Variance: " + DoubleMath.VarianceSample(errors));
+//      System.out.println("Error Standard Deviation: " + DoubleMath.StandardDeviationSample(errors));
 //        
 //        //Calculate other stats. of the errors
-//      System.out.println("Error Likelihood: " + doubleMath.LF(errors));
-//      System.out.println("Error Log-Likelihood: " + doubleMath.LLF(errors));
-//      System.out.println("Error SSE: " + doubleMath.SSE(errors));
+//      System.out.println("Error Likelihood: " + DoubleMath.LF(errors));
+//      System.out.println("Error Log-Likelihood: " + DoubleMath.LLF(errors));
+//      System.out.println("Error SSE: " + DoubleMath.SSE(errors));
 //    }
 }

src/java/m/cfa/drought/DroughtProperties.java

@@ -4,7 +4,7 @@
 import java.util.ArrayList;
 
 /**
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 11-July-2012
 */
@@ -35,10 +35,10 @@
      * then that year is a drought
      */
     public DroughtProperties(double[][] annualData, double waterDemand){
-        ArrayList<Double> newDeficit = new ArrayList<Double>();
-        ArrayList<Integer> newDuration = new ArrayList<Integer>();
-        ArrayList<Double> newIntensity = new ArrayList<Double>();
-        ArrayList<Integer> newEndYearOfDrought = new ArrayList<Integer>();
+        ArrayList<Double> newDeficit = new ArrayList<>();
+        ArrayList<Integer> newDuration = new ArrayList<>();
+        ArrayList<Double> newIntensity = new ArrayList<>();
+        ArrayList<Integer> newEndYearOfDrought = new ArrayList<>();
         
         int droughtCtr = -1;
         for(int i=0; i<annualData.length; i++){

src/java/m/cfa/drought/guiDrought_Model.java

@@ -51,7 +51,7 @@
 import org.jfree.ui.TextAnchor;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 10-July-2012
 */
@@ -135,13 +135,11 @@
      * @throws java.text.ParseException 
      */
     public String[] generalDroughtAnalysis(String[][] sortedData) throws IOException, ParseException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
         //Calculate total annual flows
         double[][] annualData = sumAnnualFlows(sortedData);
 
         //Get the flow values and calculate the long-term (total) average of them
-        droughtLimit = doubleMath.meanArithmetic(doubleArray.getColumn(annualData, 1));
+        droughtLimit = DoubleMath.meanArithmetic(DoubleArray.getColumn(annualData, 1));
 
         //Call built in function to perform the drough analysis and graph the resulting data
         String[] droughtInfo = generalDroughtAnalysis(sortedData, droughtLimit);
@@ -168,16 +166,14 @@
 //    annualData = (double[][]) returnArray[0];
 //    double[][] generatedData = (double[][]) returnArray[1];
 //    autoRegression.graphAR1Double(annualData, generatedData);
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
         AutoRegression autoRegression = new AutoRegression();
 
         //Calculate total annual flows
         double[][] annualData = sumAnnualFlows(sortedData);
 
         //Convert the data to only the stoicastic portion to modeled using AR(1) or ARMA(1,1)
-        double average = doubleMath.meanArithmetic(doubleArray.getColumn(annualData, 1));
-        double stDev = doubleMath.StandardDeviationSample(doubleArray.getColumn(annualData, 1));
+        double average = DoubleMath.meanArithmetic(DoubleArray.getColumn(annualData, 1));
+        double stDev = DoubleMath.StandardDeviationSample(DoubleArray.getColumn(annualData, 1));
         double[][] stocaisticData = autoRegression.StoicasticConversion(annualData, average, stDev, true);
 
 
@@ -304,17 +300,15 @@
      * @return  a double[][] array containing: column1 = lambda sets of eleven lambda values {0. 0.5, 0.75, 1.0, 2.0}, column2 = average recurrence interval (return period), column3 = length of drought (from 1 to 11
      */
     private double[][] recurrenceInterval(DroughtProperties currentDroughtProps, double droughtLimit, double[][] flowData){
-        DoubleMath doubleMath = new DoubleMath();
-
         double[] lambda = {0.0, 0.5, 0.75, 1.0, 2.0, 3.0, 4.0};
-        ArrayList<Double> droughtLambda = new ArrayList<Double>();
-        ArrayList<Double> droughtRecurrence = new ArrayList<Double>();
-        ArrayList<Double> droughtLength = new ArrayList<Double>();
+        ArrayList<Double> droughtLambda = new ArrayList<>();
+        ArrayList<Double> droughtRecurrence = new ArrayList<>();
+        ArrayList<Double> droughtLength = new ArrayList<>();
         //Loop through lambda values
         for(int i=0; i<lambda.length; i++){
             //Loop drought year length
             for(int j=1; j<11; j++){
-                ArrayList<Double> recurrence = new ArrayList<Double>();
+                ArrayList<Double> recurrence = new ArrayList<>();
                 int endYear = (int) flowData[0][0];
 
                 //Loop through droughts
@@ -328,9 +322,9 @@
                 }
 
                 //There were observed droughts larger than this one, calculate the average recurrence interval
-                if(recurrence.size() != 0){
+                if(!recurrence.isEmpty()){
                     droughtLambda.add(lambda[i]);//lambda value
-                    droughtRecurrence.add(doubleMath.meanArithmetic(recurrence));//average recurrence = return period
+                    droughtRecurrence.add(DoubleMath.meanArithmetic(recurrence));//average recurrence = return period
                     droughtLength.add((double) j);//length of drought
                 }
             }
@@ -360,9 +354,9 @@
         }
 
         //Get a unique list of years along with their accumulated flow values
-        ArrayList<String> uniqueYears = new ArrayList<String>();
-        ArrayList<Double> uniqueFlows = new ArrayList<Double>();
-        ArrayList<Integer> uniqueDays = new ArrayList<Integer>();
+        ArrayList<String> uniqueYears = new ArrayList<>();
+        ArrayList<Double> uniqueFlows = new ArrayList<>();
+        ArrayList<Integer> uniqueDays = new ArrayList<>();
         uniqueYears.add(sortedData[0][0].substring(0,4));
         uniqueFlows.add((Double.parseDouble(sortedData[0][1])*24*3600)/43560);
         uniqueDays.add(1);
@@ -436,8 +430,6 @@
      * @throws ParseException 
      */
     private void graphTimeseries(double[][] sortedData, double droughtLimit) throws IOException, ParseException{
-        Graphing graphing = new Graphing();
-
         //Round the long term average to fit the data better
         double tempRounding = droughtLimit*1000;
         tempRounding = Math.round(tempRounding)/1000;
@@ -459,13 +451,12 @@
         }
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeTimeSeries(mainFolder, graphData, "Yearly", getTimeseriesOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, "Yearly", getTimeseriesOutput().getName(), false);
 
         //Graph data
         XYPlot plotTime = new XYPlot();
-        plotTime = graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
-        plotTime = graphing.addTimeseriesData(plotTime, averageSeries, true, Color.black, false, false, true, true, 1);
+        plotTime = Graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
+        plotTime = Graphing.addTimeseriesData(plotTime, averageSeries, true, Color.black, false, false, true, true, 1);
 
         //Create Y axis
         ValueAxis rangeTime = new NumberAxis("Annual Flow Rate [acre-ft]");
@@ -478,15 +469,15 @@
         plotTime.setDomainAxis(0, domainTime);
         
         //Set extra plot preferences
-        plotTime = graphing.setTimeAxisPreferences(plotTime);
+        plotTime = Graphing.setTimeAxisPreferences(plotTime);
 
         //Create the chart with the plot and a legend
         String graphTitle = "Annual Time Series for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plotTime, true);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plotTime, true);
 
         //Set legend Font
         LegendTitle legendTitle = chart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         //Save resulting graph for use later
         try{
@@ -504,8 +495,6 @@
      * @throws IOException 
      */
     private void graphNegativeBarChart(double[][] sortedData, double droughtLimit) throws IOException{
-        Graphing graphing = new Graphing();
-
         //Round the long term average to fit the data better
         double tempRounding = droughtLimit*1000;
         tempRounding = Math.round(tempRounding)/1000;
@@ -531,8 +520,7 @@
         }
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeXYseries(mainFolder, graphData, getColumnChartOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, graphData, getColumnChartOutput().getName());
 
         //Define axis and properties
         NumberAxis numberaxis = new NumberAxis("Annual Deficit/Surplus of Drought Limit (" + tempRounding + " acre-ft)");
@@ -557,11 +545,11 @@
         XYPlot plot = new XYPlot(dataset, dateaxis, numberaxis, stackedxybarrenderer);
 
         //Set extra plot preferences
-        plot = graphing.setTimeAxisPreferences(plot);
+        plot = Graphing.setTimeAxisPreferences(plot);
 
         //Create the chart with the plot
         String graphTitle = "Annual Drought/Surplus for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, false);
 
         //Save resulting graph for use later
         try{
@@ -582,8 +570,6 @@
     private void graphFittedData(double[][] originalData, 
                                  double[][] fittedData, 
                                  String methodType) throws IOException{
-        Graphing graphing = new Graphing();
-
         //Convert graph x = original data, y = fitted data
         XYSeries series1 = new XYSeries("Regression of Data");
         String[][] graphData = new String[originalData.length][4];
@@ -615,8 +601,7 @@
         }
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeXYseries(mainFolder, graphData, getFittedGraphOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, graphData, getFittedGraphOutput().getName());
 
         //Add first series to graph
         XYPlot plot = new XYPlot();
@@ -649,12 +634,12 @@
         plot.setRangeAxis(0, yAxis);
 
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
 
         //Create the chart with the plot
         String graphTitle = "Data Correlation for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, false);
 
         try{
             String path = mainFolder + File.separator + getFittedDataGraph();
@@ -675,8 +660,6 @@
     private void graphPredictedData(double[][] originalData, 
                                     double[][] predictedData, 
                                     String methodType) throws IOException, ParseException{
-        Graphing graphing = new Graphing();
-
         //Convert series into Dates
         XYSeries series1 = new XYSeries("Original Data");
         XYSeries series2 = new XYSeries(methodType + " warm up period");
@@ -701,8 +684,7 @@
         }
         
         //Save results for graphing with JSHighcharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeTimeSeries(mainFolder, graphData, "Yearly", getProjectedGraphOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, "Yearly", getProjectedGraphOutput().getName(), false);
 
         //Add first series to graph
         XYPlot plot = new XYPlot();
@@ -738,15 +720,15 @@
         plot.setRangeAxis(0, yAxis);
 
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the chart with the plot
         String graphTitle = "Projected Data for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, true);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, true);
 
         //Set legend Font
         LegendTitle legendTitle = chart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         try{
             String path = mainFolder + File.separator + getProjectedDataGraph();
@@ -764,24 +746,20 @@
      */
     private void graphReturnPeriod(double[][] originalData, 
                                    double[][] predictedData) throws IOException{
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        Graphing graphing = new Graphing();
-
         //Create xy scatter plot
         XYPlot plot = new XYPlot();
 
         //Add fist series to graph
         double[] lambda = {0.0};//, 0.5, 0.75, 1.0};
         Color[] colorMatrix2 = {Color.black, Color.darkGray, Color.gray, Color.lightGray};
-        ArrayList<ArrayList<Double>> graphDataX = new ArrayList<ArrayList<Double>>();
-        ArrayList<ArrayList<Double>> graphDataY = new ArrayList<ArrayList<Double>>();
+        ArrayList<ArrayList<Double>> graphDataX = new ArrayList<>();
+        ArrayList<ArrayList<Double>> graphDataY = new ArrayList<>();
         int ctr = 0;
         for(int i=0; i<lambda.length; i++){
             //Create and populate the lambda series
             XYSeries series2 = new XYSeries("Original Data: Lambda = " + lambda[i]);
-            ArrayList<Double> temp_originalX = new ArrayList<Double>();
-            ArrayList<Double> temp_originalY = new ArrayList<Double>();
+            ArrayList<Double> temp_originalX = new ArrayList<>();
+            ArrayList<Double> temp_originalY = new ArrayList<>();
             for(int j=0; j < originalData.length; j++){
                 if(Double.compare(originalData[j][0], lambda[i]) == 0){
                     series2.add(originalData[j][2], originalData[j][1]);
@@ -808,8 +786,8 @@
         for(int i=0; i<lambda2.length; i++){
             //Create and populate the lambda series
             XYSeries series2 = new XYSeries("Simmulated Data: Lambda = " + lambda2[i]);
-            ArrayList<Double> temp_predictedX = new ArrayList<Double>();
-            ArrayList<Double> temp_predictedY = new ArrayList<Double>();
+            ArrayList<Double> temp_predictedX = new ArrayList<>();
+            ArrayList<Double> temp_predictedY = new ArrayList<>();
             for(int j=0; j < predictedData.length; j++){
                 if(Double.compare(predictedData[j][0], lambda2[i]) == 0){
                     series2.add(predictedData[j][2], predictedData[j][1]);
@@ -853,7 +831,7 @@
             ctr++;//Increase by 1 to move from x column to y column
             ctr++;//Increase by 1 to move from y column to new x column
         }
-        doubleArray.writeXYseries(mainFolder, graphData, getRecurrenceGraphOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, graphData, getRecurrenceGraphOutput().getName());
         
 
         //Create the X Axis
@@ -868,7 +846,7 @@
         LogarithmicAxis yAxis = new LogarithmicAxis("Recurrence Interval [years]");
         yAxis.setAllowNegativesFlag(true);
         try{
-            double maxValue = Math.log10(doubleMath.max(doubleArray.getColumn(predictedData, 1)));
+            double maxValue = Math.log10(DoubleMath.max(DoubleArray.getColumn(predictedData, 1)));
             if(Double.compare(maxValue, Double.NEGATIVE_INFINITY) != 0 &&
                     Double.compare(maxValue, Double.POSITIVE_INFINITY) != 0 ){
                 maxValue = Math.ceil(maxValue);
@@ -881,22 +859,22 @@
 
         //Add equation explaining the term lambda
         XYTextAnnotation equation = new XYTextAnnotation(" Lambda = Drought Deficit / Drought Limit  ", 9, yAxis.getUpperBound()*0.5);
-        equation.setFont(graphing.masterFont);
+        equation.setFont(Graphing.masterFont);
         equation.setBackgroundPaint(Color.white);
         equation.setOutlinePaint(Color.black);
         equation.setOutlineVisible(true);
         plot.addAnnotation(equation);
 
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the chart with the plot
         String graphTitle = "Drought Recurrence Intervals for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, true);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, true);
 
         //Set legend Font
         LegendTitle legendTitle = chart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         try{
             String path = mainFolder + File.separator + getDroughtRecurrenceGraph();
@@ -912,9 +890,6 @@
      * @param bic  an array list of bic values corresponding to p=1, 2, etc.
      */
     private void graphAR_AIC_BIC(ArrayList<Double> aic, ArrayList<Double> bic){
-        DoubleMath doubleMath = new DoubleMath();
-        Graphing graphing = new Graphing();
-
         //Graph AIC and BIC data vs. the p parameter of the AR(p) model
         XYSeries series1 = new XYSeries("AIC");
         XYSeries series2 = new XYSeries("BIC");
@@ -948,13 +923,13 @@
 
         //Create the Y Axis
         ValueAxis yAxis = new NumberAxis("AIC/BIC Value");
-        double max = doubleMath.max(aic);
-        if(max < doubleMath.max(bic)){
-                max = doubleMath.max(bic);
+        double max = DoubleMath.max(aic);
+        if(max < DoubleMath.max(bic)){
+                max = DoubleMath.max(bic);
         }
-        double min = doubleMath.min(aic);
-        if(min > doubleMath.min(bic)){
-                min = doubleMath.min(bic);
+        double min = DoubleMath.min(aic);
+        if(min > DoubleMath.min(bic)){
+                min = DoubleMath.min(bic);
         }
         yAxis.setRange(0.98*min, 1.02*max);
         plot.setRangeAxis(0, yAxis);
@@ -970,10 +945,10 @@
         plot.addAnnotation(ta);
 
         //Set extra plot preferences
-        graphing.setAxisPreferences(plot);
+        Graphing.setAxisPreferences(plot);
 
         //Create the chart with the plot
-        JFreeChart chart = new JFreeChart("AR(p) Parameter Optimization", graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart("AR(p) Parameter Optimization", Graphing.titleFont, plot, false);
 
         try{
             String path = mainFolder + File.separator + getOptimizedModel_ARMAgraphs();
@@ -990,10 +965,6 @@
      * @param graphNumber  the index of the graph either 3 (AIC) or 4 (BIC)
      */
     private void graphARMA_AIC_BIC(String method, double[][] results, int graphNumber){
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        Graphing graphing = new Graphing();
-
         //Add each point of the aic/bic to the graph
         XYPlot plot = new XYPlot();
         XYSeries series1 = new XYSeries(method + " Points");
@@ -1003,20 +974,20 @@
 
         //Determine what the optimal values of AIC/BIC are for each p+q combination
         XYSeries series2 = new XYSeries(method + " Optimal Front");
-        ArrayList<Double> aicBIC = new ArrayList<Double>();
-        ArrayList<Double> pValues = new ArrayList<Double>();
-        ArrayList<Double> qValues = new ArrayList<Double>();
+        ArrayList<Double> aicBIC = new ArrayList<>();
+        ArrayList<Double> pValues = new ArrayList<>();
+        ArrayList<Double> qValues = new ArrayList<>();
         for(int i=2; i<=8; i++){
             //For each "value"=p+q find all of the p+q combinations which add to this 
             //"value" and retrieve their corresponding AIC/BIC value
-            ArrayList<Double> reArrangedData = new ArrayList<Double>();
+            ArrayList<Double> reArrangedData = new ArrayList<>();
             for(int j=0; j<results.length; j++){
                 if(results[j][0] + results[j][1] == i){
                     reArrangedData.add(results[j][graphNumber - 1]);
                 }
             }
 
-            double currentMinimum = doubleMath.min(reArrangedData);
+            double currentMinimum = DoubleMath.min(reArrangedData);
             series2.add(i, currentMinimum);
             for(int j=0; j<results.length; j++){
                 if(Double.compare(currentMinimum,results[j][graphNumber - 1]) == 0){
@@ -1048,7 +1019,7 @@
 
         //Add highlight to best AIC/BIC value (lowest)
         XYSeries series3 = new XYSeries("Error");
-        double minAICbic = doubleMath.min(aicBIC);
+        double minAICbic = DoubleMath.min(aicBIC);
         String p = "", q = "";
         for(int i=0; i<aicBIC.size(); i++){
             if(Double.compare(aicBIC.get(i), minAICbic) == 0){
@@ -1078,7 +1049,7 @@
         final XYPointerAnnotation pointer = new XYPointerAnnotation("Optimal ARMA Model: p= " + p + " q= " + q, x, y, Math.PI - 0.3);
         pointer.setBaseRadius(30.0);
         pointer.setTipRadius(10.0);
-        pointer.setFont(graphing.masterFont);
+        pointer.setFont(Graphing.masterFont);
         pointer.setPaint(Color.black);
         pointer.setBackgroundPaint(Color.white);
         pointer.setOutlinePaint(Color.black);
@@ -1099,16 +1070,16 @@
 
         //Create the Y Axis
         ValueAxis yAxis = new NumberAxis(method + " Value");
-        double max = doubleMath.max(doubleArray.getColumn(results, graphNumber - 1));
-        double min = doubleMath.min(doubleArray.getColumn(results, graphNumber - 1));
+        double max = DoubleMath.max(DoubleArray.getColumn(results, graphNumber - 1));
+        double min = DoubleMath.min(DoubleArray.getColumn(results, graphNumber - 1));
         yAxis.setRange(0.8*min, 1.02*max);
         plot.setRangeAxis(0, yAxis);
 
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the chart with the plot
-        JFreeChart chart = new JFreeChart("ARMA(p, q) " + method + " Parameter Optimization", graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart("ARMA(p, q) " + method + " Parameter Optimization", Graphing.titleFont, plot, false);
 
         try{
             String path = mainFolder + File.separator + getOptimizedModel_ARMAgraphs()[graphNumber-3];
@@ -1170,25 +1141,22 @@
         }
 
         //Check if any flow data exists
-        Data data = new Data();
-        String[][] sortableData = data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
+        String[][] sortableData = Data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
         
         //If the user wants the datasets (public and user) merged then retrieve the second dataset (user)
         String[][] sortableData_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            sortableData_user = user_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
+            sortableData_user = User_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
         if(sortedData_combined.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             if(sortedData.length == 0){
                 errorMessage.add("There is no available flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                 if(database.equalsIgnoreCase("CDWR")){

src/java/m/cfa/durationcurve/guiDC_Model.java

@@ -33,7 +33,7 @@
 import org.jfree.data.xy.XYSeriesCollection;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 12-June-2011
 */
@@ -152,25 +152,22 @@
         boolean mQnHide = mQnPeriod.contains("false");    
 
         //Check if any flow data exists
-        Data data = new Data();
-        String[][] sortableData = data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
+        String[][] sortableData = Data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
         
         //If the user wants the datasets (public and user) merged then retrieve the second dataset (user)
         String[][] sortableData_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            sortableData_user = user_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
+            sortableData_user = User_Data.readUserFile("UserData", stationID, userData, "flow", beginDate, endDate);
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
         if(sortedData_combined.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             if(sortedData.length == 0){
                 errorMessage.add("There is no available flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                 if(database.equalsIgnoreCase("CDWR")){
@@ -184,16 +181,16 @@
         }
         
         //Get period data for analyses
-        String[][] period1Data = doubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
-        String[][] period2Data = doubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
-        String[][] period3Data = doubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
+        String[][] period1Data = DoubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
+        String[][] period2Data = DoubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
+        String[][] period3Data = DoubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
         
         //Check if the user only wants to perform a seasonal analysis (aka a seasonal flow duration curve)
         if(seasonalOnly){
-            sortedData_combined = doubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
-            period1Data = doubleArray.getSeasonalData(period1Data, seasonBegin, seasonEnd);
-            period2Data = doubleArray.getSeasonalData(period2Data, seasonBegin, seasonEnd);
-            period3Data = doubleArray.getSeasonalData(period3Data, seasonBegin, seasonEnd);
+            sortedData_combined = DoubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
+            period1Data = DoubleArray.getSeasonalData(period1Data, seasonBegin, seasonEnd);
+            period2Data = DoubleArray.getSeasonalData(period2Data, seasonBegin, seasonEnd);
+            period3Data = DoubleArray.getSeasonalData(period3Data, seasonBegin, seasonEnd);
         }
         
         //While the dataset is still sorted by date, pull out the mQn value and start/end dates for analysis summary
@@ -219,8 +216,7 @@
             String MQNmessage = (String) returnValue[1];
             if(!mQnHide){
                 lowFlowErrorMessage = MQNmessage;
-                DoubleMath doubleMath = new DoubleMath();
-                mQnVal =  doubleMath.round(mQn, 2);
+                mQnVal =  DoubleMath.round(mQn, 2);
             }
         }
         
@@ -266,11 +262,10 @@
                           double n, 
                           boolean mQnHide) throws IOException{
         //Perform Weibull Plotting Position Ranking for the Flow Duration Curve Method
-        DoubleArray doubleArray = new DoubleArray();
-        double[][] xyRanks = doubleArray.weibullPlottingPosition(sortedData_combined);
-        double[][] xyRanks_period1 = doubleArray.weibullPlottingPosition(period1Data);
-        double[][] xyRanks_period2 = doubleArray.weibullPlottingPosition(period2Data);
-        double[][] xyRanks_period3 = doubleArray.weibullPlottingPosition(period3Data);
+        double[][] xyRanks = DoubleArray.weibullPlottingPosition(sortedData_combined);
+        double[][] xyRanks_period1 = DoubleArray.weibullPlottingPosition(period1Data);
+        double[][] xyRanks_period2 = DoubleArray.weibullPlottingPosition(period2Data);
+        double[][] xyRanks_period3 = DoubleArray.weibullPlottingPosition(period3Data);
 
         //Determine summary table from xyRanks for duration curve
         calculatePercentileSummmary(xyRanks, xyRanks_period1, xyRanks_period2, xyRanks_period3, "Flow (cfs)");
@@ -420,15 +415,14 @@
         }
 
         //Graph a FDC for each year in time period
-        Graphing graphing =  new Graphing();
         String currentYear = start.substring(0,4);
         String finalYear = end.substring(0,4);
         boolean moreYears = xyRanks.length > 0;
         while(moreYears){
             //Get current year's data and graph it
-            String[][] partialData = doubleArray.getYearsData(sortedData_combined, currentYear);
-            double[][] partialRanks = doubleArray.weibullPlottingPosition(partialData);
-            graphing.addXYSeries(plot, partialRanks, Color.lightGray, seriesIndex);
+            String[][] partialData = DoubleArray.getYearsData(sortedData_combined, currentYear);
+            double[][] partialRanks = DoubleArray.weibullPlottingPosition(partialData);
+            Graphing.addXYSeries(plot, partialRanks, Color.lightGray, seriesIndex);
             seriesIndex++;
             
             //Save results for output for JHighCharts
@@ -444,8 +438,8 @@
                     //do nothing as it already has a -1 value
                 }
             }
-            graphData = doubleArray.appendcolumn_Matrix(graphData, partialFDCData_x);//Add x points
-            graphData = doubleArray.appendcolumn_Matrix(graphData, partialFDCData_y);//Add y points
+            graphData = DoubleArray.appendcolumn_Matrix(graphData, partialFDCData_x);//Add x points
+            graphData = DoubleArray.appendcolumn_Matrix(graphData, partialFDCData_y);//Add y points
             
             //Determine the next data year to continue looping over
             int nextYear = Integer.parseInt(currentYear) + 1;
@@ -457,21 +451,21 @@
         }
         
         //Output XY data for use with JHighCharts
-        doubleArray.writeXYseries(mainFolder, graphData, getDCgraphOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, graphData, getDCgraphOutput().getName());
         
         //Set extra graphing preferences
-        plot = graphing.setLogYaxisPreferences(plot);
+        plot = Graphing.setLogYaxisPreferences(plot);
 
         //Add Flow Range Labels:
-        plot = graphing.addIntervalLabel(plot, "High Flow", 0, 10);
-        plot = graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
-        plot = graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
-        plot = graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
-        plot = graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
+        plot = Graphing.addIntervalLabel(plot, "High Flow", 0, 10);
+        plot = Graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
+        plot = Graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
+        plot = Graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
+        plot = Graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
 
         //Graph plot onto JfreeChart
         String graphTitle = "Flow Duration Curve for " + database + " Station " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, showLegend);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, showLegend);
 
         //Write a results file containing the flow duration curve interval (exceedance values) and their corresponding discharge values
         writeResults(xyRanks, "Discharge (cfs)");
@@ -498,8 +492,7 @@
      */
     private void createLDC(File storetResourceFile) throws IOException, InterruptedException, ParseException, JSONException {
         //Check if any flow and water quality data exists
-        Data data = new Data();
-        Object[] returnArray1 = data.extractFlow_and_WQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
+        Object[] returnArray1 = Data.extractFlow_and_WQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
         String[][] sortableData = (String[][]) returnArray1[0];
         String[][] WQdata = (String[][]) returnArray1[1];
         
@@ -507,23 +500,21 @@
         String[][] sortableData_user = new String[0][0];
         String[][] WQdata_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            Object[] returnArray2 = user_Data.readUserFileLDC("UserData", stationID, userData, wqTest, beginDate, endDate);
+            Object[] returnArray2 = User_Data.readUserFileLDC("UserData", stationID, userData, wqTest, beginDate, endDate);
             sortableData_user = (String[][]) returnArray2[0];
             WQdata_user = (String[][]) returnArray2[1];
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
-        String[][] WQdata_combined = doubleArray.mergeData(WQdata, WQdata_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] WQdata_combined = DoubleArray.mergeData(WQdata, WQdata_user, mergeMethod);
         
         //Check if any data exists
-        ArrayList<String> errorMessage = new ArrayList<String>();
+        ArrayList<String> errorMessage = new ArrayList<>();
         if(sortedData_combined.length == 0){
             if(sortedData.length == 0){
                 errorMessage.add("There is no available flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
@@ -555,32 +546,25 @@
 //        String WQlabel = wqTest.substring(11,endIndex);//cut off the "98335      " part before the test name and the units after the name
 
         //Get Units and conversion for current WQ test
-        String[] resultArray = data.getWQtestDataInfo(wqTest, database);
+        String[] resultArray = Data.getWQtestDataInfo(wqTest, database);
         //String wqCode = resultArray[0];
         String wqLabel = resultArray[1];
         //String units = resultArray[2];
         double conversion = Double.parseDouble(resultArray[3]);
         String endUnits = resultArray[4];
-        
-//        //old
-//        USGS_Data usgs_Data = new USGS_Data();
-//        String units = usgs_Data.getUSGSwqUnits(wqTest.substring(0,5));//pull just the 5 digit USGS WQ code
-//        double conversion = usgs_Data.getUSGSwqConversion(units);
-//        String endUnits = usgs_Data.getUSGSwqEndUnits(units);
-//        //remove here to 'old' above
     
         //Get period data for analyses
-        String[][] period1Data = doubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
-        String[][] period2Data = doubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
-        String[][] period3Data = doubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
+        String[][] period1Data = DoubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
+        String[][] period2Data = DoubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
+        String[][] period3Data = DoubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
         
         //Check if the user only wants to perform a seasonal analysis (aka a seasonal flow duration curve)
         if(seasonalOnly){
-            sortedData_combined = doubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
-            WQdata_combined = doubleArray.getSeasonalData(WQdata_combined, seasonBegin, seasonEnd);
-            period1Data = doubleArray.getSeasonalData(period1Data, seasonBegin, seasonEnd);
-            period2Data = doubleArray.getSeasonalData(period2Data, seasonBegin, seasonEnd);
-            period3Data = doubleArray.getSeasonalData(period3Data, seasonBegin, seasonEnd);
+            sortedData_combined = DoubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
+            WQdata_combined = DoubleArray.getSeasonalData(WQdata_combined, seasonBegin, seasonEnd);
+            period1Data = DoubleArray.getSeasonalData(period1Data, seasonBegin, seasonEnd);
+            period2Data = DoubleArray.getSeasonalData(period2Data, seasonBegin, seasonEnd);
+            period3Data = DoubleArray.getSeasonalData(period3Data, seasonBegin, seasonEnd);
         }
         
         //While the dataset is still sorted by date, pull out the mQn value and start/end dates for analysis summary
@@ -611,8 +595,7 @@
                 if(!MQNmessage.equalsIgnoreCase("")){//if the MQNmessage is not blank add it to the dynamic summary
                     lowFlowErrorMessage = MQNmessage;
                 }else{
-                    DoubleMath doubleMath = new DoubleMath();
-                    mQnVal =  doubleMath.round(mQn, 2);
+                    mQnVal =  DoubleMath.round(mQn, 2);
                 }
             }
         }
@@ -625,8 +608,8 @@
         flowLen_period3 = String.valueOf(period3Data.length);
         CalculateStatistics(sortedData_combined);
         
-        String[][] seasonalWQ_combined = doubleArray.getSeasonalData(WQdata_combined, seasonBegin, seasonEnd);
-        String[][] seasonalWQ_user = doubleArray.getSeasonalData(WQdata_user, seasonBegin, seasonEnd);
+        String[][] seasonalWQ_combined = DoubleArray.getSeasonalData(WQdata_combined, seasonBegin, seasonEnd);
+        String[][] seasonalWQ_user = DoubleArray.getSeasonalData(WQdata_user, seasonBegin, seasonEnd);
 
         //Graph resulting LDC data
         Object[] returnArray = graphLDC(wqLabel, endUnits, conversion, sortedData_combined, sortedData_user, period1Data, period2Data, period3Data, WQdata_combined, WQdata_user, seasonalWQ_combined, seasonalWQ_user,  mQn, m, n);
@@ -678,11 +661,10 @@
                               double n) throws IOException {
         //Perform Weibull Plotting Position Ranking for the Load Duration Curve Method 
         //Note: this data is already converted to loads, see "guiDC_Model.createLDC"
-        DoubleArray doubleArray = new DoubleArray();
-        double[][] xyRanks = doubleArray.weibullPlottingPosition(sortedData_combined);
-        double[][] xyRanks_period1 = doubleArray.weibullPlottingPosition(period1Data);
-        double[][] xyRanks_period2 = doubleArray.weibullPlottingPosition(period2Data);
-        double[][] xyRanks_period3 = doubleArray.weibullPlottingPosition(period3Data);
+        double[][] xyRanks = DoubleArray.weibullPlottingPosition(sortedData_combined);
+        double[][] xyRanks_period1 = DoubleArray.weibullPlottingPosition(period1Data);
+        double[][] xyRanks_period2 = DoubleArray.weibullPlottingPosition(period2Data);
+        double[][] xyRanks_period3 = DoubleArray.weibullPlottingPosition(period3Data);
         
         //Determine summary table from xyRanks for duration curve
         double[][] loadRanks = new double[xyRanks.length][2];
@@ -770,11 +752,11 @@
             }
         }
         //Add WQ test data to graph series and generate box plot data
-        ArrayList<Double> high_data = new ArrayList<Double>();
-        ArrayList<Double> moist_data = new ArrayList<Double>();
-        ArrayList<Double> mid_data = new ArrayList<Double>();
-        ArrayList<Double> dry_data = new ArrayList<Double>();
-        ArrayList<Double> low_data = new ArrayList<Double>();
+        ArrayList<Double> high_data = new ArrayList<>();
+        ArrayList<Double> moist_data = new ArrayList<>();
+        ArrayList<Double> mid_data = new ArrayList<>();
+        ArrayList<Double> dry_data = new ArrayList<>();
+        ArrayList<Double> low_data = new ArrayList<>();
         double highexceed_count = 0, moistexceed_count =0, midexceed_count =0, dryexceed_count =0,    
                 lowexceed_count =0, totalexceed_count =1, totalCount = 0;
         double WQ_load = 0, Seasonal_WQ_load=0;
@@ -1066,11 +1048,10 @@
         seriesIndex++;
 
         //Create box plot of WQ points
-        Graphing graphing = new Graphing();
         boolean showOutliers = false, showExtremeOutliers = false;
         if(high_data.size() > 4){
             //Create quartile rectangle, min-max line, and median line
-            Object[] returnArray = graphing.boxplot_shapes(plot, 5, high_data, seriesIndex, showOutliers, showExtremeOutliers);
+            Object[] returnArray = Graphing.boxplot_shapes(plot, 5, high_data, seriesIndex, showOutliers, showExtremeOutliers);
             plot = (XYPlot) returnArray[0];
             showOutliers = (Boolean) returnArray[1];
             showExtremeOutliers = (Boolean) returnArray[2];
@@ -1079,7 +1060,7 @@
 
         if(moist_data.size() > 4){
             //Create quartile rectangle, min-max line, and median line
-            Object[] returnArray = graphing.boxplot_shapes(plot, 25, moist_data, seriesIndex, showOutliers, showExtremeOutliers);
+            Object[] returnArray = Graphing.boxplot_shapes(plot, 25, moist_data, seriesIndex, showOutliers, showExtremeOutliers);
             plot = (XYPlot) returnArray[0];
             showOutliers = (Boolean) returnArray[1];
             showExtremeOutliers = (Boolean) returnArray[2];
@@ -1088,7 +1069,7 @@
 
         if(mid_data.size() > 4){
             //Create quartile rectangle, min-max line, and median line
-            Object[] returnArray = graphing.boxplot_shapes(plot, 50, mid_data, seriesIndex, showOutliers, showExtremeOutliers);
+            Object[] returnArray = Graphing.boxplot_shapes(plot, 50, mid_data, seriesIndex, showOutliers, showExtremeOutliers);
             plot = (XYPlot) returnArray[0];
             showOutliers = (Boolean) returnArray[1];
             showExtremeOutliers = (Boolean) returnArray[2];
@@ -1097,7 +1078,7 @@
 
         if(dry_data.size() > 4){
             //Create quartile rectangle, min-max line, and median line
-            Object[] returnArray = graphing.boxplot_shapes(plot, 75, dry_data, seriesIndex, showOutliers, showExtremeOutliers);
+            Object[] returnArray = Graphing.boxplot_shapes(plot, 75, dry_data, seriesIndex, showOutliers, showExtremeOutliers);
             plot = (XYPlot) returnArray[0];
             showOutliers = (Boolean) returnArray[1];
             showExtremeOutliers = (Boolean) returnArray[2];
@@ -1106,7 +1087,7 @@
 
         if(low_data.size() > 4){
             //Create quartile rectangle, min-max line, and median line
-            Object[] returnArray = graphing.boxplot_shapes(plot, 95, low_data, seriesIndex, showOutliers, showExtremeOutliers);
+            Object[] returnArray = Graphing.boxplot_shapes(plot, 95, low_data, seriesIndex, showOutliers, showExtremeOutliers);
             plot = (XYPlot) returnArray[0];
             showOutliers = (Boolean) returnArray[1];
             showExtremeOutliers = (Boolean) returnArray[2];
@@ -1139,10 +1120,10 @@
                 //do nothing as it already has a -1 value
             }
         }
-        graphData = doubleArray.appendcolumn_Matrix(graphData, partialSeasonalWQdata_x);//Add Seasonal WQ x points
-        graphData = doubleArray.appendcolumn_Matrix(graphData, partialSeasonalWQdata_y);//Add Seasonal WQ y points
-        graphData = doubleArray.appendcolumn_Matrix(graphData, partialWQdata_x);//Add WQ x points
-        graphData = doubleArray.appendcolumn_Matrix(graphData, partialWQdata_y);//Add WQ y points
+        graphData = DoubleArray.appendcolumn_Matrix(graphData, partialSeasonalWQdata_x);//Add Seasonal WQ x points
+        graphData = DoubleArray.appendcolumn_Matrix(graphData, partialSeasonalWQdata_y);//Add Seasonal WQ y points
+        graphData = DoubleArray.appendcolumn_Matrix(graphData, partialWQdata_x);//Add WQ x points
+        graphData = DoubleArray.appendcolumn_Matrix(graphData, partialWQdata_y);//Add WQ y points
 
         //Graph a LDC for each year in time period
         String currentYear = start.substring(0,4);
@@ -1150,12 +1131,12 @@
         boolean moreYears = xyRanks.length > 0;
         while(moreYears){
             //Get current year's data and graph it
-            String[][] partialData = doubleArray.getYearsData(sortedData_combined, currentYear);
-            double[][] partialRanks = doubleArray.weibullPlottingPosition(partialData);
+            String[][] partialData = DoubleArray.getYearsData(sortedData_combined, currentYear);
+            double[][] partialRanks = DoubleArray.weibullPlottingPosition(partialData);
             for(int i=0; i<partialRanks.length; i++){
                 partialRanks[i][1] = partialRanks[i][1] * conversion * wqTarget;
             }
-            plot = graphing.addXYSeries(plot, partialRanks, Color.lightGray, seriesIndex);
+            plot = Graphing.addXYSeries(plot, partialRanks, Color.lightGray, seriesIndex);
             seriesIndex++;
             
             //Save results for output for JHighCharts
@@ -1171,8 +1152,8 @@
                     //do nothing as it already has a -1 value
                 }
             }
-            graphData = doubleArray.appendcolumn_Matrix(graphData, partialLDCData_x);//Add x points
-            graphData = doubleArray.appendcolumn_Matrix(graphData, partialLDCData_y);//Add y points
+            graphData = DoubleArray.appendcolumn_Matrix(graphData, partialLDCData_x);//Add x points
+            graphData = DoubleArray.appendcolumn_Matrix(graphData, partialLDCData_y);//Add y points
             
             //Determine the next data year to continue looping over
             int nextYear = Integer.parseInt(currentYear) + 1;
@@ -1184,25 +1165,25 @@
         }
         
         //Output XY data for use with JHighCharts
-        doubleArray.writeXYseries(mainFolder, graphData, getDCgraphOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, graphData, getDCgraphOutput().getName());
 
         //Add Flow Range Labels
-        plot = graphing.addIntervalLabel(plot, "High Flow", 0, 10);
-        plot = graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
-        plot = graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
-        plot = graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
-        plot = graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
+        plot = Graphing.addIntervalLabel(plot, "High Flow", 0, 10);
+        plot = Graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
+        plot = Graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
+        plot = Graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
+        plot = Graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
 
         //Set extra plot preferences
-        plot = graphing.setLogYaxisPreferences(plot);
+        plot = Graphing.setLogYaxisPreferences(plot);
 
         //Graph plot onto JfreeChart
         String graphTitle = "Load Duration Curve for " + database + " Station " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, true);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, true);
 
         //Set legend Font
         LegendTitle legendTitle = chart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         //Write a results file containing the flow duration curve interval (exceedance values) and their corresponding discharge values
         writeResults(xyRanks, yaxis_title);
@@ -1226,15 +1207,14 @@
      */
     private void CalculateStatistics(String[][] data) {
         //Convert into double list
-        ArrayList<Double> dataList = new ArrayList<Double>();
+        ArrayList<Double> dataList = new ArrayList<>();
         for(int i=0; i<data.length; i++){
             dataList.add(Double.parseDouble(data[i][1]));
         }
         
         //Calculate statistics
-        DoubleMath doubleMath = new DoubleMath();
-        flowMedian = doubleMath.round(doubleMath.median(dataList),3);//Call Median function
-        flowMean = doubleMath.round(doubleMath.meanArithmetic(dataList),3);//Call Mean function
+        flowMedian = DoubleMath.round(DoubleMath.median(dataList),3);//Call Median function
+        flowMean = DoubleMath.round(DoubleMath.meanArithmetic(dataList),3);//Call Mean function
     }
     /**
      * Calculates a summary table of standardized percentiles based on the data
@@ -1245,33 +1225,30 @@
      * @param title 
      */
     private void calculatePercentileSummmary(double[][] xyRanks, double[][] xyRanks_period1, double[][] xyRanks_period2, double[][] xyRanks_period3, String title){
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-
         //Hard coded percentile summary table
         double[] frqDisp = {99, 95, 90, 75, 50, 25, 10, 5, 1};
         String[] frqDispString = {"99", "95", "90", "75", "50", "25", "10", "5", "1"};
         
         //Interpolate desired percentiles
-        double[] yFinal = doubleMath.linearInterpolation(doubleArray.getColumn(xyRanks,0), doubleArray.getColumn(xyRanks,1), frqDisp);
+        double[] yFinal = DoubleMath.linearInterpolation(DoubleArray.getColumn(xyRanks,0), DoubleArray.getColumn(xyRanks,1), frqDisp);
         double[] period1 = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
         double[] period2 = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
         double[] period3 = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
         if(xyRanks_period1.length > 0){
-            period1 = doubleMath.linearInterpolation(doubleArray.getColumn(xyRanks_period1,0), doubleArray.getColumn(xyRanks_period1,1), frqDisp);
+            period1 = DoubleMath.linearInterpolation(DoubleArray.getColumn(xyRanks_period1,0), DoubleArray.getColumn(xyRanks_period1,1), frqDisp);
         }
         if(xyRanks_period2.length > 0){
-            period2 = doubleMath.linearInterpolation(doubleArray.getColumn(xyRanks_period2,0), doubleArray.getColumn(xyRanks_period2,1), frqDisp);
+            period2 = DoubleMath.linearInterpolation(DoubleArray.getColumn(xyRanks_period2,0), DoubleArray.getColumn(xyRanks_period2,1), frqDisp);
         }
         if(xyRanks_period3.length > 0){
-            period3 = doubleMath.linearInterpolation(doubleArray.getColumn(xyRanks_period3,0), doubleArray.getColumn(xyRanks_period3,1), frqDisp);
+            period3 = DoubleMath.linearInterpolation(DoubleArray.getColumn(xyRanks_period3,0), DoubleArray.getColumn(xyRanks_period3,1), frqDisp);
         }
 
         //Round results for summary table
-        yFinal = doubleMath.roundColumn(yFinal, 100);
-        period1 = doubleMath.roundColumn(period1, 100);
-        period2 = doubleMath.roundColumn(period2, 100);
-        period3 = doubleMath.roundColumn(period3, 100);
+        yFinal = DoubleMath.roundColumn(yFinal, 100);
+        period1 = DoubleMath.roundColumn(period1, 100);
+        period2 = DoubleMath.roundColumn(period2, 100);
+        period3 = DoubleMath.roundColumn(period3, 100);
 
         //Create summary table in a single string
         summaryTable = "Exceedance Percentile\t" + title + "\tPeriod 1 " + title + "\tPeriod 2 " + title + "\tPeriod 3 " + title;
@@ -1293,7 +1270,7 @@
      */
     private void writeResults(double[][] results, String resultType) throws IOException{
         //Remove zero results
-        ArrayList<String> finalResults = new ArrayList<String>();
+        ArrayList<String> finalResults = new ArrayList<>();
         for(int i=0; i<results.length; i++){
             //Only keep non-zero data
             if(Double.compare(results[i][0],0) != 0){

src/java/m/cfa/flood/Bulletin17B.java

@@ -81,7 +81,7 @@
     }
 }
 /**
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible (converted from Matlab to Java retaining comments from the Matlab code and the original Matlab code segments as comments before/after their corresponding Java code segments)
 * @author Jeff Burkey (originally written in Matlab)
 * @since Java version: 16-May-2012
@@ -93,6 +93,7 @@
     double yAxisOffset = 1;
     double yAxisLimit = -1;
     double legendOffset = 0;
+    String skewErrorMessage = "";
     /**
      * @param datain  Nx2 double
      * datain[][0] = year or datenum
@@ -122,26 +123,23 @@
         //Note that a number of lines/formulas are commented out after non-commented formulas
         //The comment formulas are the original Matlab code lines written by Jeff Burkey
         //The non-commented part that comes first is the Java equivalent as written by Tyler Wible
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        Bulletin17Tables tables = new Bulletin17Tables();
-
+        
         //Check for early return due to data size being too large or too small
         //This is for limits on the values in the KNtable provided by USGS  (Tyler)
         if(datain.length < 10){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("The flood frequency analysis tool requires a minimum of 10 data points required for the Bulletin 17B statistical analysis. The record of data, based on the specified dates, for this station has " + datain.length + " annual maxima flood observations.");
             writeError(errorMessage);
         }else if(datain.length > 149){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("The flood frequency analysis tool requires a maximum of 149 data points for use with the Bulletin 17B statistical analysis. The record of data, based on the specified dates, for this station has " + datain.length + " annual maxima flood observations.");
             writeError(errorMessage);
         }
 
         //Remove all zero flood years before any calculations are done. (Jeff)
         //Matlab code:  nonZeroFlood = datain(datain(:,2)>0,:);
-        ArrayList<Integer> rowIndexList = doubleArray.findRowsConditional(datain, 1, 0, false);
-        double[][] nonZeroFlood = doubleArray.getDataArrayRows(datain, rowIndexList);
+        ArrayList<Integer> rowIndexList = DoubleArray.findRowsConditional(datain, 1, 0, false);
+        double[][] nonZeroFlood = DoubleArray.getDataArrayRows(datain, rowIndexList);
 
         //Calculate stats for the B17 station data (Jeff)
         //Matlab code:  [G N S Xmean] = stationStats(nonZeroFlood);
@@ -152,8 +150,8 @@
         double Xmean = statsArray[3];
         
         double[] skews = {G};
-        double[][] KNtable = tables.KNtable;
-        double[][] ktable = tables.ktable();
+        double[][] KNtable = Bulletin17Tables.KNtable;
+        double[][] ktable = Bulletin17Tables.ktable();
         //structure of ktable is:
         //  Column 1 = Skew
         //  Column 2 = Probability
@@ -179,10 +177,10 @@
             //remove high and low outliers and recompute Station statistics  (Jeff)
             //Overall Matlab code:  datafilter = nonZeroFlood(ql < nonZeroFlood(:,2) & nonZeroFlood(:,2) < qh,[1 2]);
             //Broken into two parts for Java (Tyler)
-            rowIndexList = doubleArray.findRowsConditional(nonZeroFlood, 1, qh, true);
-            datafilter = doubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);    //datafilter = nonZeroFlood(nonZeroFlood(:,2) < qh,[1 2]);
-            rowIndexList = doubleArray.findRowsConditional(datafilter, 1, ql, false);
-            datafilter = doubleArray.getDataArrayRows(datafilter, rowIndexList);      //datafilter = datafilter(ql < datafilter(:,2),[1 2]);
+            rowIndexList = DoubleArray.findRowsConditional(nonZeroFlood, 1, qh, true);
+            datafilter = DoubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);    //datafilter = nonZeroFlood(nonZeroFlood(:,2) < qh,[1 2]);
+            rowIndexList = DoubleArray.findRowsConditional(datafilter, 1, ql, false);
+            datafilter = DoubleArray.getDataArrayRows(datafilter, rowIndexList);      //datafilter = datafilter(ql < datafilter(:,2),[1 2]);
 
             //check for low/zero records removed  (Jeff)
             //Matlab code:  QLcnt = sum(datain(:,2) < ql);
@@ -216,16 +214,16 @@
             qh = Math.pow(10,xh);    //qh = 10^xh; //High threshold
 
             //Matlab code: datafilter = nonZeroFlood(nonZeroFlood(:,2) < qh,[1 2]);
-            rowIndexList = doubleArray.findRowsConditional(nonZeroFlood, 1, qh, true);
-            datafilter = doubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);
+            rowIndexList = DoubleArray.findRowsConditional(nonZeroFlood, 1, qh, true);
+            datafilter = DoubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);
 
             xl = Xmean - KNvalue*S;  //xl = Xmean - KNtable(KNtable(:,1)==N,2)*S;
             ql = Math.pow(10,xl);    //ql = 10^xl; //Low threshold
 
             //remove outliers and recompute Station statistics    (Jeff)
             //Matlab code:  datafilter = datafilter(ql < datafilter(:,2),[1 2]);
-            rowIndexList = doubleArray.findRowsConditional(datafilter, 1, ql, false);
-            datafilter = doubleArray.getDataArrayRows(datafilter, rowIndexList);
+            rowIndexList = DoubleArray.findRowsConditional(datafilter, 1, ql, false);
+            datafilter = DoubleArray.getDataArrayRows(datafilter, rowIndexList);
 
             //check for low/zero records removed    (Jeff)
             //Matlab code:  QLcnt = sum(datain(:,2) < ql);
@@ -260,8 +258,8 @@
 
             //remove outliers and recompute Station statistics    (Jeff)
             //Matlab code:  datafilter = nonZeroFlood(ql < nonZeroFlood(:,2),[1 2]);
-            rowIndexList = doubleArray.findRowsConditional(nonZeroFlood, 1, ql, false);
-            datafilter = doubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);
+            rowIndexList = DoubleArray.findRowsConditional(nonZeroFlood, 1, ql, false);
+            datafilter = DoubleArray.getDataArrayRows(nonZeroFlood, rowIndexList);
 
             //check for low/zero records removed    (Jeff)
             //Matlab code:  QLcnt = sum(datain(:,2) < ql);
@@ -283,8 +281,8 @@
             qh = Math.pow(10,xh);    //qh = 10^xh; //High threshold
 
             //Matlab code:  datafilter = nonZeroFlood(ql < nonZeroFlood(:,2),[1 2]);
-            rowIndexList = doubleArray.findRowsConditional(datafilter, 1, qh, true);
-            datafilter = doubleArray.getDataArrayRows(datafilter, rowIndexList);
+            rowIndexList = DoubleArray.findRowsConditional(datafilter, 1, qh, true);
+            datafilter = DoubleArray.getDataArrayRows(datafilter, rowIndexList);
 
             //check for high records removed
             //Matlab code:  QHcnt = sum(datain(:,2) > qh);
@@ -297,14 +295,14 @@
 
         //Recompute with Historical/high outlier data    (Jeff)
         //Matlab code:  Xz = log10(datain(datain(:,2) > qh,:));
-        rowIndexList = doubleArray.findRowsConditional(datain, 1, qh, false);
-        double[][] highFilter = doubleArray.getDataArrayRows(datain, rowIndexList);
-        double[] Xz = doubleMath.Log10(highFilter, 1);
+        rowIndexList = DoubleArray.findRowsConditional(datain, 1, qh, false);
+        double[][] highFilter = DoubleArray.getDataArrayRows(datain, rowIndexList);
+        double[] Xz = DoubleMath.Log10(highFilter, 1);
         //Xz = Log10 of historic peaks and high outliers (not low outliers)     (Jeff)
         
         //X = Log10 of peaks not including outliers, zero floods, etc.
-        double[] X = doubleMath.Log10(datafilter, 1);  //X = log10(datafilter);
-        skews = doubleArray.appendcolumn(skews, G);    //skews = [skews G];
+        double[] X = DoubleMath.Log10(datafilter, 1);  //X = log10(datafilter);
+        skews = DoubleArray.appendcolumn(skews, G);    //skews = [skews G];
         int Z = QHcnt;  //Z = Number of historic peaks including high outliers
         int H = n;      //H = number of years in historic record
         int L = QLcnt;  //L = Number of low outliers and/or zero flood years
@@ -317,7 +315,7 @@
         //double M = (Double) historicalArray[1];
         S = (Double) historicalArray[2];
         //double[][] hp = (double[][]) historicalArray[3];  //hp = historical plot with outliers removed    (Jeff)
-        skews = doubleArray.appendcolumn(skews, G);//    skews = [skews G];
+        skews = DoubleArray.appendcolumn(skews, G);//    skews = [skews G];
 
         if(Math.abs(G - gg) > 0.5){
             //Notify user more weight should be given to station skew    (Jeff)
@@ -358,7 +356,7 @@
         for(int i=0; i<floodfreq.length; i++){
             floodfreqPest[i] = floodfreq[i][0] * Pest;
         }
-        floodfreq = doubleArray.appendcolumn_Matrix(floodfreq, floodfreqPest);
+        floodfreq = DoubleArray.appendcolumn_Matrix(floodfreq, floodfreqPest);
 
         //P's outside of adjusted probabilities are extrapolated when using spline method.    (Jeff)
         double[] floodfreq_column1 = new double[floodfreq.length];
@@ -371,46 +369,44 @@
         }
 
         //Matlab code:  adjfreq = [floodfreq(:,1) interp1(floodfreq(:,3), floodfreq(:,2), floodfreq(:,1), 'pchip')];
-        double[] adjustColum2 = doubleMath.linearInterpolation(floodfreq_column3, floodfreq_column2, floodfreq_column1);
+        double[] adjustColum2 = DoubleMath.linearInterpolation(floodfreq_column3, floodfreq_column2, floodfreq_column1);
         //double[] adjustColum2 = splineInterpolation(floodfreq_column3, floodfreq_column2, floodfreq_column1);
-        double[][] adjfreq = doubleArray.appendcolumn_Matrix(floodfreq_column1, adjustColum2);
+        double[][] adjfreq = DoubleArray.appendcolumn_Matrix(floodfreq_column1, adjustColum2);
 
         double GS = 0, SS = 0, XS = 0;
-        String[][] summaryTable = new String[0][0];
         if(QLcnt > 0){
             //Interpolate P back from adjusted P    (Jeff)
             //Matlab code:  Q01 = 10^adjfreq(adjfreq(:,1)==.01,2);
-            double adjfreqValue = adjfreq[doubleArray.findRowsEqual(adjfreq, 0, 0.01).get(0)][1];
+            double adjfreqValue = adjfreq[DoubleArray.findRowsEqual(adjfreq, 0, 0.01).get(0)][1];
             double Q01 = Math.pow(10, adjfreqValue);
 
             //Matlab code:  Q10 = 10^adjfreq(adjfreq(:,1)==.10,2);
-            adjfreqValue = adjfreq[doubleArray.findRowsEqual(adjfreq, 0, 0.10).get(0)][1];
+            adjfreqValue = adjfreq[DoubleArray.findRowsEqual(adjfreq, 0, 0.10).get(0)][1];
             double Q10 = Math.pow(10, adjfreqValue);
 
             //Matlab code:  Q50 = 10^adjfreq(adjfreq(:,1)==.50,2);
-            adjfreqValue = adjfreq[doubleArray.findRowsEqual(adjfreq, 0, 0.50).get(0)][1];
+            adjfreqValue = adjfreq[DoubleArray.findRowsEqual(adjfreq, 0, 0.50).get(0)][1];
             double Q50 = Math.pow(10, adjfreqValue);
 
             //Generate synthetic Log-Pearson statistics the below equation is valid for skews between -2.0 < GS < +2.5    (Jeff)
             //Matlab code:  GS = -2.5 + 3.12*(log10(Q01/Q10)/log10(Q10/Q50));
             GS = -2.5 + 3.12*((Math.log10(Q01/Q10))/(Math.log10(Q10/Q50)));
-            skews = doubleArray.appendcolumn(skews, GS);  //skews = [skews GS];
+            skews = DoubleArray.appendcolumn(skews, GS);  //skews = [skews GS];
 
             //Only using freqCurve to grab K, variables Xmean, S, have no baring for this instance.    (Jeff)
             //Matlab code:  KS = freqCurve(Xmean, S, GS, ktable);
             double[][][] freqCurveArray2 = freqCurve(Xmean, S, GS, ktable);
             double[][] KS = freqCurveArray2[0];
 
-            double K01 = KS[doubleArray.findRowsEqual(KS, 1, 0.01).get(0)][0];  //K01 = KS(KS(:,2)==.01);
-            double K50 = KS[doubleArray.findRowsEqual(KS, 1, 0.50).get(0)][0];  //K50 = KS(KS(:,2)==.50);
+            double K01 = KS[DoubleArray.findRowsEqual(KS, 1, 0.01).get(0)][0];  //K01 = KS(KS(:,2)==.01);
+            double K50 = KS[DoubleArray.findRowsEqual(KS, 1, 0.50).get(0)][0];  //K50 = KS(KS(:,2)==.50);
 
             SS = (Math.log10(Q01/Q50))/(K01 - K50);
             XS = Math.log10(Q50) - K50*SS;
 
             //Per step 4 of Appendix 5
             if(GS < -2 || GS > 2.5){
-                String[][] skewErrorMessage = {{"Skew Error: Synthetic skew exceeds acceptable limits.\nUser should plot data by hand for further evaluation.\n", ""}};
-                summaryTable = skewErrorMessage;
+                skewErrorMessage = "Skew Error: Synthetic skew exceeds acceptable limits.\nUser should plot data by hand for further evaluation.\n";
             }
         }else{
             GS = G;
@@ -437,7 +433,7 @@
         double GW = (MSEGbar*GS + MSEG*gg)/(MSEGbar + MSEG);
         //Adopted skew (i.e. round skew to nearest tenth    (Jeff)
         double GD = GW;  //GD = round(GW*10)/10;
-        skews = doubleArray.appendcolumn(skews, GD);//   skews = [skews GD];
+        skews = DoubleArray.appendcolumn(skews, GD);//   skews = [skews GD];
 
         //Matlab code:  [K finalfreq Gzero] = freqCurve(XS, SS, GD, ktable);
         double[][][] freqCurveArray2 = freqCurve(XS, SS, GD, ktable);
@@ -447,35 +443,35 @@
 
         //Equation 11-1 in Appendix 11    (Jeff)
         //Matlab code:  pnn = unique(Pntable(:,2));
-        double[][] PNtable = tables.PNtable;
-        double[] pnn = doubleArray.getUnique(PNtable, 1);
+        double[][] PNtable = Bulletin17Tables.PNtable;
+        double[] pnn = DoubleArray.getUnique(PNtable, 1);
         double[] pexp_single = new double[pnn.length];
         
         //lookup and interpolate adjusted probability based on sample size    (Jeff)
         for(int i=0; i<pnn.length; i++){
             //Matlab code:  pn2 = Pntable(Pntable(:,2)==pnn(i),:);
-            ArrayList<Integer> rowIndex2 = doubleArray.findRowsEqual(PNtable,1,pnn[i]);
-            double[] pn2_column1 = doubleArray.getColumn(PNtable, 0, rowIndex2);//    pn2(:,1)
-            double[] pn2_column3 = doubleArray.getColumn(PNtable, 2, rowIndex2);//    pn2(:,3)
+            ArrayList<Integer> rowIndex2 = DoubleArray.findRowsEqual(PNtable,1,pnn[i]);
+            double[] pn2_column1 = DoubleArray.getColumn(PNtable, 0, rowIndex2);//    pn2(:,1)
+            double[] pn2_column3 = DoubleArray.getColumn(PNtable, 2, rowIndex2);//    pn2(:,3)
 
             //Perform a linear interpolation    (Tyler)
             //Matlab code:  pexp(i) = interp1(pn2(:,1),pn2(:,3),N-1,"pchip");
-            pexp_single[i] = doubleMath.linearInterpolation(pn2_column1, pn2_column3, N-1);
+            pexp_single[i] = DoubleMath.linearInterpolation(pn2_column1, pn2_column3, N-1);
             //pexp_single[i] = splineInterpolation(pn2_column1, pn2_column3, N-1);
         }
-        double[][] pexp = doubleArray.appendcolumn_Matrix(pnn, pexp_single);  //pexp = [pnn pexp'];
+        double[][] pexp = DoubleArray.appendcolumn_Matrix(pnn, pexp_single);  //pexp = [pnn pexp'];
         
         //Matlab code:  [c, ia, ib] =  intersect(pexp(:,1),finalfreq(:,1),"rows");
-        ArrayList<Integer> ib = doubleArray.intersect(doubleArray.getColumn(pexp, 0), doubleArray.getColumn(finalfreq, 0));
+        ArrayList<Integer> ib = DoubleArray.intersect(DoubleArray.getColumn(pexp, 0), DoubleArray.getColumn(finalfreq, 0));
 
         //Recalculate P using expected probabilities
         //'pchip' is used because it better plots linearly in log space w.r.t.
         //identified expected probabilities of: .9999, .999, .99, .95, .9, .7,
         //.5, .3, .1, .05, .01, .001, and .0001    (Jeff)
         //Matlab code:  expectedP = [finalfreq(:,1) interp1(pexp(:,2), finalfreq(ib,2), finalfreq(:,1),"pchip")];
-        double[] column2 = doubleMath.linearInterpolation(doubleArray.getColumn(pexp, 1), doubleArray.getColumn(finalfreq, 1, ib), doubleArray.getColumn(finalfreq, 0));
+        double[] column2 = DoubleMath.linearInterpolation(DoubleArray.getColumn(pexp, 1), DoubleArray.getColumn(finalfreq, 1, ib), DoubleArray.getColumn(finalfreq, 0));
         //double[] column2 = splinInterpolation(getColumn(pexp, 1), getColumn(finalfreq, 1, ib), getColumn(finalfreq, 0));  old method
-        double[][] expectedP = doubleArray.appendcolumn_Matrix(doubleArray.getColumn(finalfreq, 0), column2);
+        double[][] expectedP = DoubleArray.appendcolumn_Matrix(DoubleArray.getColumn(finalfreq, 0), column2);
 
         //Not sure if the below comment is still valid. 1/5/2009.
         //USGS PKFQWin seems to not use the adopted, rather the weighted. At
@@ -486,8 +482,8 @@
         //cialpha variable.    (Jeff)
         ///////////////////////////////////////    (Jeff)
         //Matlab code:  Galpha = Gzero(Gzero(:,2)==0.05,:);  //    (Jeff)
-        ArrayList<Integer> rowIndex3 = doubleArray.findRowsEqual(Gzero, 1, 0.05);
-        double[][] Galpha = doubleArray.getDataArrayRows(Gzero, rowIndex3);
+        ArrayList<Integer> rowIndex3 = DoubleArray.findRowsEqual(Gzero, 1, 0.05);
+        double[][] Galpha = DoubleArray.getDataArrayRows(Gzero, rowIndex3);
         ///////////////////////////////////////    (Jeff)
         
         //Matlab code:  a = 1 - (Galpha(:,3).^2)/(2*(H-1));
@@ -509,8 +505,8 @@
         //expected probabilities breaks down for probabilities less than 0.002,
         //replace with NaN's.    (Jeff)
         //Matlab code:  expectedP(expectedP(:,1) < .002,2) = nan;
-        ArrayList<Integer> rowIndex4 = doubleArray.findRowsConditional(expectedP, 0, 0.002, true);
-        expectedP = doubleArray.replaceRows(expectedP, rowIndex4);
+        ArrayList<Integer> rowIndex4 = DoubleArray.findRowsConditional(expectedP, 0, 0.002, true);
+        expectedP = DoubleArray.replaceRows(expectedP, rowIndex4);
 
         //Create ouput data    (Tyler)
         //Matlab code:  dataout = [1./finalfreq(:,1) finalfreq(:,1) 10.^finalfreq(:,2) 10.^LQu 10.^LQl 10.^expectedP(:,2)];
@@ -526,8 +522,8 @@
         Arrays.sort(dataout, new sort1_smallToLarge());  //dataout = sortrows(dataout,1);
 
         //Matlab code:  pp = plotpos(datain(datain(:,2)>0,:),H);
-        ArrayList<Integer> rowIndex5 = doubleArray.findRowsConditional(datain, 0, 0, false);
-        double[][] plotData = doubleArray.getDataArrayRows(datain, rowIndex5);
+        ArrayList<Integer> rowIndex5 = DoubleArray.findRowsConditional(datain, 0, 0, false);
+        double[][] plotData = DoubleArray.getDataArrayRows(datain, rowIndex5);
         double[][] pp = plotpos(plotData, H);
 
         //Graph the data    (Tyler)
@@ -535,7 +531,7 @@
         pplot(pp, K, dataout, GD, mainFolder, database, stationID, stationName, showLargeFloods, plotref, plottype);
 
         //Assemble a summary of return periods and flow values    (Tyler)
-        summaryTable = probFreqData(dataout, summaryTable);
+        String[][] summaryTable = probFreqData(dataout);
         return summaryTable;
     }
     /**
@@ -546,7 +542,6 @@
      */
     private double[] stationStats(double[][] datain){
         //Used to calculate Station Statistics Skew and Standard Deviation
-        DoubleMath doubleMath = new DoubleMath();
 
         //cialpha = round(1 - cii*100)/100;
         double[] data = new double[datain.length];  //data = datain(:,2:end);
@@ -555,8 +550,8 @@
         }
         //yr = datain(:,1);
         double N = data.length;
-        double Xmean = doubleMath.Average_Log10(data);  //Xmean = mean(log10(data));
-        double[] X = doubleMath.Log10(data);            //X = log10(data);
+        double Xmean = DoubleMath.Average_Log10(data);  //Xmean = mean(log10(data));
+        double[] X = DoubleMath.Log10(data);            //X = log10(data);
         double S = calcS(X, N);                         //S = sqrt((sum(X.^2) - sum(X)^2/N)/(N-1));
 
         //for now check for outliers and notify user
@@ -580,18 +575,16 @@
     private  double[][][] freqCurve(double Xmean, double S, double G, double[][] ktable){
         //function [K_final floodfreq Gzero] = freqCurve(Xmean, S, G, ktable)
         //Retrieve Frequency Curve Coordinates    (Jeff)
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
 
         //Grab list of available probabilites from ktable    (Jeff)
-        double[] P = doubleArray.getUnique(ktable, 1);  //P = unique(ktable(:,2));
+        double[] P = DoubleArray.getUnique(ktable, 1);  //P = unique(ktable(:,2));
 
         //the below loop uses the adopted Skew GD, not the station skew    (Jeff)
         double[] K = new double[P.length];
         for(int i=0; i<P.length; i++){
-            ArrayList<Integer> p = doubleArray.findRowsEqual(ktable, 1, P[i]);  //p = find(ktable(:,2) == P(i));
-            double[] g = doubleArray.getColumn(ktable, 0, p);  //g = ktable(p,1);
-            double[] k = doubleArray.getColumn(ktable, 2, p);  //k = ktable(p,3);
+            ArrayList<Integer> p = DoubleArray.findRowsEqual(ktable, 1, P[i]);  //p = find(ktable(:,2) == P(i));
+            double[] g = DoubleArray.getColumn(ktable, 0, p);  //g = ktable(p,1);
+            double[] k = DoubleArray.getColumn(ktable, 2, p);  //k = ktable(p,3);
             //Replaced lagrange.m
             //(http://www.mathworks.com/matlabcentral/fileexchange/14398-a-para
             //bolic-lagrangian-interpolating-polynomial-function) for matlab
@@ -605,7 +598,7 @@
             //PolynomialSplineFunction splineFunction = splineInterp.interpolate(g, k);
             //K[i] = splineFunction.value(G);//    K[i] = interp1(g,k,G,"spline");
             //Linear Interpolation (Tyler)
-            K[i] = doubleMath.linearInterpolation(g, k, G);
+            K[i] = DoubleMath.linearInterpolation(g, k, G);
         }
         
         //Matlab code:  floodfreq = [P (Xmean + K.*S)];
@@ -613,16 +606,16 @@
         for(int i=0; i<K.length; i++){
             Xmean_KS[i] = Xmean + K[i]*S;
         }
-        double[][] floodfreq = doubleArray.appendcolumn_Matrix(P, Xmean_KS);
+        double[][] floodfreq = DoubleArray.appendcolumn_Matrix(P, Xmean_KS);
 
         //add probability to K for looking up values    (Jeff)
-        double[][] K_final = doubleArray.appendcolumn_Matrix(K, P);  //K = [K P];
+        double[][] K_final = DoubleArray.appendcolumn_Matrix(K, P);  //K = [K P];
 
         //Compute confidence limits for estimate
         //retrieve zero skew probability    (Jeff)
         //Matlab code:  Gzero = sortrows(ktable(ktable(:,1)==0.0,:),2)
-        ArrayList<Integer> rowIndex = doubleArray.findRowsEqual(ktable,0,0);
-        double[][] Gzero = doubleArray.getDataArrayRows(ktable,rowIndex);
+        ArrayList<Integer> rowIndex = DoubleArray.findRowsEqual(ktable,0,0);
+        double[][] Gzero = DoubleArray.getDataArrayRows(ktable,rowIndex);
         Arrays.sort(Gzero, new sort2_smallToLarge());
 
         double[][][] freqCurveArray = {K_final, floodfreq, Gzero};
@@ -643,13 +636,11 @@
      */
     private double[][] plotpos(double[][] datain, int n){
         //Matlab code:  function [gplot] = plotpos(datain, n)
-        DoubleArray doubleArray = new DoubleArray();
-
         double N = n;
         double[][] dsort = datain.clone();
         Arrays.sort(dsort, new sort2_largeToSmall());  //dsort = sortrows(datain,-2);
 
-        ArrayList<Integer> rowIndex = doubleArray.findRowsConditional(dsort, 0, 0, false);  //[r c] = find(dsort(:,1));
+        ArrayList<Integer> rowIndex = DoubleArray.findRowsConditional(dsort, 0, 0, false);  //[r c] = find(dsort(:,1));
         Iterator<Integer> iterate = rowIndex.iterator();
         double[] gp = new double[rowIndex.size()];
         double[] gw = new double[rowIndex.size()];
@@ -686,8 +677,6 @@
      */
     private Object[] historical(int H, int L, int Z, double[] X, double[] Xz){
         //Matlab code:  function [Gbar Mbar Sbar hp] = historical(H, L, Z, X, Xz)
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
 
         //Number of X events
         int N = X.length;
@@ -696,7 +685,7 @@
         double W = (H-Z)/(N+L);
 
         //Historically adjusted mean
-        double Mbar = (W*doubleMath.sum(X) + doubleMath.sum(Xz))/(H-W*L);
+        double Mbar = (W*DoubleMath.sum(X) + DoubleMath.sum(Xz))/(H-W*L);
 
         //Historically adjusted standard deviation
         //Matlab code:  Sbar = sqrt((W*sum((X-Mbar).^2) + sum((Xz-Mbar).^2))/(H-W*L-1));
@@ -742,7 +731,7 @@
         }
 
         //combining historical and systematic peaks
-        Double[] Xh = doubleArray.appendcolumn(X, Xz);  //Xh = [X; Xz];
+        Double[] Xh = DoubleArray.appendcolumn(X, Xz);  //Xh = [X; Xz];
 
         //sort from largest to smallest
         Arrays.sort(Xh,Collections.reverseOrder());  //Xh = sort(Xh,'descend');
@@ -758,7 +747,7 @@
         for(int i=0; i<mh.length; i++){
             mh[i] = W*E[i] - ((W-1)*(Z+.50));  //mh = W.*E-((W-1)*(Z+.50));
         }
-        m = doubleArray.replaceRows(m, mh, Z);  //m(Z+1:end) = mh(Z+1:end);
+        m = DoubleArray.replaceRows(m, mh, Z);  //m(Z+1:end) = mh(Z+1:end);
 
         //Matlab code:  wp = m./(H+1); //Weibul Plotting Position
         double[] wp = new double[m.length];
@@ -834,16 +823,12 @@
                         boolean plotref, 
                         boolean plottype) throws IOException{
         //Matlab code:  function pplot(datain, K,curves,skew,imgfile,gaugeName,plotref,plottype)
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        Graphing graphing = new Graphing();
-        Bulletin17Tables tables = new Bulletin17Tables();
 
         double[][] obs = datain.clone();
         Arrays.sort(obs, new sort2_smallToLarge());  //obs = sortrows(datain,2);
 
         //Matlab code:  yRnk= [obs interp1(K(:,2),K(:,1), obs(:,1),"pchip")];
-        double[] column4 = doubleMath.linearInterpolation(doubleArray.getColumn(K, 1), doubleArray.getColumn(K, 0), doubleArray.getColumn(obs, 1));
+        double[] column4 = DoubleMath.linearInterpolation(DoubleArray.getColumn(K, 1), DoubleArray.getColumn(K, 0), DoubleArray.getColumn(obs, 1));
         //double[] column4 = splineInterpolation(getColumn(K, 1), getColumn(K, 0), getColumn(obs, 1));
         double[][] yRnk = new double[column4.length][4];
         for(int i=0; i<column4.length; i++){
@@ -857,7 +842,7 @@
         //maybe overkill, but sort and filter out any duplicates. This does let
         //the user get lazy defining grid tick marks though.    (Jeff)
         //Matlab code:  sort(unique(pscale_mat),"descend");
-        double[] pscale = tables.pscale;
+        double[] pscale = Bulletin17Tables.pscale;
         Double[] pscale2 = new Double[pscale.length];
         for(int i=0; i<pscale.length; i++){
             pscale2[i] = pscale[i];
@@ -867,27 +852,27 @@
             pscale[i] = pscale2[i];
         }
 
-        if(doubleMath.max(pscale) > doubleMath.max(doubleArray.getColumn(K,1))){
-            double xmin = doubleMath.max(doubleArray.getColumn(K,1));
+        if(DoubleMath.max(pscale) > DoubleMath.max(DoubleArray.getColumn(K,1))){
+            double xmin = DoubleMath.max(DoubleArray.getColumn(K,1));
             System.out.println("Users specified an exceedance beyond available probabilities.\nLower limit was reset.\n");
 
-            ArrayList<Integer> rowIndex = doubleArray.findRowsConditional(pscale, xmin, true);
-            pscale = doubleArray.getRows(pscale, rowIndex);  //pscale = pscale(pscale<=xmin);
+            ArrayList<Integer> rowIndex = DoubleArray.findRowsConditional(pscale, xmin, true);
+            pscale = DoubleArray.getRows(pscale, rowIndex);  //pscale = pscale(pscale<=xmin);
         }
-        if(doubleMath.min(pscale) < doubleMath.min(doubleArray.getColumn(K,1))){
-            double xmax = doubleMath.min(doubleArray.getColumn(K,1));
+        if(DoubleMath.min(pscale) < DoubleMath.min(DoubleArray.getColumn(K,1))){
+            double xmax = DoubleMath.min(DoubleArray.getColumn(K,1));
             System.out.println("Users specified an exceedance beyond available probabilities.\nUpper limit was reset.\n");
             
-            ArrayList<Integer> rowIndex = doubleArray.findRowsConditional(pscale, xmax, false);
-            pscale = doubleArray.getRows(pscale, rowIndex);  //pscale = pscale(pscale>=xmax);
+            ArrayList<Integer> rowIndex = DoubleArray.findRowsConditional(pscale, xmax, false);
+            pscale = DoubleArray.getRows(pscale, rowIndex);  //pscale = pscale(pscale>=xmax);
         }
 
         //Matlab code:  gridMajor = sort(interp1(K(:,2),K(:,1),pscale,'pchip'));
-        double[] gridMajor = doubleMath.linearInterpolation(doubleArray.getColumn(K, 1), doubleArray.getColumn(K, 0), pscale);
+        double[] gridMajor = DoubleMath.linearInterpolation(DoubleArray.getColumn(K, 1), DoubleArray.getColumn(K, 0), pscale);
         //double[] gridMajor = splineInterpolation(getColumn(K, 1), getColumn(K, 0), pscale);
         Arrays.sort(gridMajor);
 
-        double[] xcurve = doubleArray.getColumn(K, 0);
+        double[] xcurve = DoubleArray.getColumn(K, 0);
         Arrays.sort(xcurve);  //xcurve = sort(K(:,1));
 
         //Start graphing in Java    (Tyler)
@@ -908,9 +893,9 @@
 
         //Determine y axis limits of the graph
         //Matlab code:  interp1(curves(:,1),curves(:,4),max(pscale),'pchip');
-        double ymin = doubleMath.linearInterpolation(doubleArray.getColumn(curves,1), doubleArray.getColumn(curves, 4), doubleMath.max(pscale));
-        double ymax = doubleMath.linearInterpolation(doubleArray.getColumn(curves, 1), doubleArray.getColumn(curves, 3), doubleMath.min(pscale));
-        double[] xLimits = {doubleMath.min(gridMajor), 1.02*doubleMath.max(gridMajor)};
+        double ymin = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,1), DoubleArray.getColumn(curves, 4), DoubleMath.max(pscale));
+        double ymax = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves, 1), DoubleArray.getColumn(curves, 3), DoubleMath.min(pscale));
+        double[] xLimits = {DoubleMath.min(gridMajor), 1.02*DoubleMath.max(gridMajor)};
 
         //Check if there is any historical data below the calculated ymin, if so reset ymin to the smaller of the two values
         //System.out.println("Y max: " + ymax);
@@ -926,17 +911,17 @@
 
         //Create XYSeries for each square (=outline) and circle to be plotted on top    (Tyler)
         //Place a symbol on top of the most recent year    (Jeff)
-        double maxYear = doubleMath.max(doubleArray.getColumn(yRnk, 2));
-        ArrayList<Integer> index = doubleArray.findRowsEqual(yRnk, 2, maxYear);
+        double maxYear = DoubleMath.max(DoubleArray.getColumn(yRnk, 2));
+        ArrayList<Integer> index = DoubleArray.findRowsEqual(yRnk, 2, maxYear);
         XYSeries lastYear_xy = new XYSeries(String.valueOf(Math.round(maxYear)));
         lastYear_xy.add(yRnk[index.get(0)][3], yRnk[index.get(0)][1]);
 
         //In addition to plotting the last water year with a square symbol to highlight...
         //Draw a drop down reference line from the Final curve representing the return period of most recent year in data (i.e. square symbol data point)    (Jeff)
         XYSeries lastYear_yLine = new XYSeries("lastYear_yLine (Don't show in Legend)");
-        double xlast = doubleMath.linearInterpolation(doubleArray.getColumn(curves,2), doubleArray.getColumn(curves, 1), yRnk[index.get(index.size()-1)][1]);
-        double xLscale = doubleMath.linearInterpolation(doubleArray.getColumn(K,1), doubleArray.getColumn(K,0), xlast);
-        double xrefMin = doubleMath.min(gridMajor);
+        double xlast = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,2), DoubleArray.getColumn(curves, 1), yRnk[index.get(index.size()-1)][1]);
+        double xLscale = DoubleMath.linearInterpolation(DoubleArray.getColumn(K,1), DoubleArray.getColumn(K,0), xlast);
+        double xrefMin = DoubleMath.min(gridMajor);
         lastYear_yLine.add(xLscale, yLimits[0]);
         lastYear_yLine.add(xLscale, yRnk[index.get(0)][1]);
 
@@ -979,10 +964,10 @@
         //Graph line for clarification of return period of lastYear_xy    (Tyler)
         plot = graphData(plot, lastYear_yLine, true, false, Color.gray, true, false, false, "", 11, "");
         //Add lable to line    (Tyler)
-        String lineLabel1 = doubleMath.round(1/xlast, 1) + " - year";
+        String lineLabel1 = DoubleMath.round(1/xlast, 1) + " - year";
         double yLocation =  yLimits[0]*0.88 + (Math.abs(yLimits[0]*0.88) + Math.abs(yRnk[index.get(0)][1]))/4;
         XYTextAnnotation lastYearAnnotation = new XYTextAnnotation(lineLabel1, xLscale, yLocation);
-        lastYearAnnotation.setFont(graphing.floodLabelFont);
+        lastYearAnnotation.setFont(Graphing.floodLabelFont);
         lastYearAnnotation.setRotationAngle(3*Math.PI/2);
         lastYearAnnotation.setBackgroundPaint(Color.white);
         plot.addAnnotation(lastYearAnnotation);
@@ -995,86 +980,86 @@
         if(plotref){
             //Create 100year flood line for the 95% confidence interval    (Tyler)
             XYSeries x100_xy95 = new XYSeries("100 yr CI");
-            ArrayList<Integer> list = doubleArray.findRowsEqual(curves, 1, 0.01);
+            ArrayList<Integer> list = DoubleArray.findRowsEqual(curves, 1, 0.01);
             x100_xy95.add(xrefMin, curves[list.get(0)][3]);
             x100_xy95.add(xcurve[list.get(0)], curves[list.get(0)][3]);
             plot = graphData(plot, x100_xy95, true, false, Color.gray, true, false, false, "", 13, "");
             //Add text label for line    (Tyler)
-            String lineLabel = doubleMath.round(curves[list.get(0)][3], 1) + " - cfs";
+            String lineLabel = DoubleMath.round(curves[list.get(0)][3], 1) + " - cfs";
             double xLocation = xrefMin + (Math.abs(xrefMin) + Math.abs(xcurve[list.get(0)]))/4;
             XYTextAnnotation lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][3]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
 
 
             //100 year flood line    (Tyler)
             XYSeries x100_xy = new XYSeries("100 yr");
-            list = doubleArray.findRowsEqual(curves, 1, 0.01);
+            list = DoubleArray.findRowsEqual(curves, 1, 0.01);
             x100_xy.add(xrefMin, curves[list.get(0)][2]);
             x100_xy.add(xcurve[list.get(0)], curves[list.get(0)][2]);
             plot = graphData(plot, x100_xy, true, false, Color.gray, true, false, false, "", 14, "");
             //Add text label for line    (Tyler)
-            lineLabel = doubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
+            lineLabel = DoubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
             xLocation = xrefMin + (Math.abs(xrefMin) + Math.abs(xcurve[list.get(0)]))/4;
             lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][2]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
 
 
             //25 year flood line    (Tyler)
             XYSeries x25_xy = new XYSeries("25 yr");
-            list = doubleArray.findRowsEqual(curves, 1, 0.04);
+            list = DoubleArray.findRowsEqual(curves, 1, 0.04);
             x25_xy.add(xrefMin, curves[list.get(0)][2]);
             x25_xy.add(xcurve[list.get(0)], curves[list.get(0)][2]);
             plot = graphData(plot, x25_xy, true, false, Color.gray, true, false, false, "", 15, "");
             //Add text label for line
-            lineLabel = doubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
+            lineLabel = DoubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
             lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][2]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
 
 
             //10 year flood line    (Tyler)
             XYSeries x10_xy = new XYSeries("10 yr");
-            list = doubleArray.findRowsEqual(curves, 1, 0.1);
+            list = DoubleArray.findRowsEqual(curves, 1, 0.1);
             x10_xy.add(xrefMin, curves[list.get(0)][2]);
             x10_xy.add(xcurve[list.get(0)], curves[list.get(0)][2]);
             plot = graphData(plot, x10_xy, true, false, Color.gray, true, false, false, "",16, "");
             //Add text label for line    (Tyler)
-            lineLabel = doubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
+            lineLabel = DoubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
             lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][2]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
 
 
             //5 year flood line    (Tyler)
             XYSeries x5_xy = new XYSeries("5 yr");
-            list = doubleArray.findRowsEqual(curves, 1, 0.2);
+            list = DoubleArray.findRowsEqual(curves, 1, 0.2);
             x5_xy.add(xrefMin, curves[list.get(0)][2]);
             x5_xy.add(xcurve[list.get(0)], curves[list.get(0)][2]);
             plot = graphData(plot, x5_xy, true, false, Color.gray, true, false, false, "", 17, "");
             //Add text label for line    (Tyler)
-            lineLabel = doubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
+            lineLabel = DoubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
             lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][2]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
 
 
             //2 year flood line    (Tyler)
             XYSeries x2_xy = new XYSeries("2 yr");
-            list = doubleArray.findRowsEqual(curves, 1, 0.5);
+            list = DoubleArray.findRowsEqual(curves, 1, 0.5);
             x2_xy.add(xrefMin, curves[list.get(0)][2]);
             x2_xy.add(xcurve[list.get(0)], curves[list.get(0)][2]);
             plot = graphData(plot, x2_xy, true, false, Color.gray, true, false, false, "", 18, "");
             //Add text label for line    (Tyler)
-            lineLabel = doubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
+            lineLabel = DoubleMath.round(curves[list.get(0)][2], 1) + " - cfs";
             lineAnnotation = new XYTextAnnotation(lineLabel, xLocation, curves[list.get(0)][2]);
-            lineAnnotation.setFont(graphing.floodLabelFont);
+            lineAnnotation.setFont(Graphing.floodLabelFont);
             lineAnnotation.setBackgroundPaint(Color.white);
             plot.addAnnotation(lineAnnotation);
         }
@@ -1107,7 +1092,7 @@
         if(plottype){
             //Create the legend inside of the graph
             LegendTitle lt = new LegendTitle(plot);
-            lt.setItemFont(graphing.masterFont);
+            lt.setItemFont(Graphing.masterFont);
             lt.setBackgroundPaint(new Color(255, 255, 255, 255));
             lt.setFrame(new BlockBorder(Color.black));
             lt.setPosition(RectangleEdge.LEFT);
@@ -1116,18 +1101,18 @@
         }
 
         //Set other graph preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Graph plot onto JfreeChart    (Tyler)
         String graphTitle = "Flood Data for " + database + " Station: " + stationID + "; " + stationName + 
-                "\nWeighted Skew (G=" + doubleMath.round(skew, 5) + ") Probability Plot";
-        JFreeChart parentChart = new JFreeChart(graphTitle, graphing.titleFont, plot, !plottype);
+                "\nWeighted Skew (G=" + DoubleMath.round(skew, 5) + ") Probability Plot";
+        JFreeChart parentChart = new JFreeChart(graphTitle, Graphing.titleFont, plot, !plottype);
 
         //Adjust the location of the legend    outside the graph (Tyler)
         if(!plottype){
             //Create the legend outside the graph
             LegendTitle legend = parentChart.getLegend();
-            legend.setItemFont(graphing.masterFont);
+            legend.setItemFont(Graphing.masterFont);
             legend.setPosition(RectangleEdge.RIGHT);
         }
 
@@ -1145,16 +1130,12 @@
      * Creates a summary table of flood flows and their correpsonding return periods
      * @param curves  the dataout containing the calculated expected and B17 datasets 
      * to be used for interpolating the flows for each return period
-     * @param summaryTable_old  a String[][] that contains if anything a skewness warning that 
-     * will be appended to the output of the return of this function
      * @return  a String[][] containing the data summary table, with headers.  The 
      * first column is the return period, second column is the B17 flood flow, third 
      * column is the expected flood flow
      */
-    private String[][] probFreqData(double[][] curves, String[][] summaryTable_old){
+    private String[][] probFreqData(double[][] curves){
         //Matlab code:    function frqlabel = procFreqData(curves)    (Tyler)
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
 
         //User can edit this to adjust which Return periods are displayed    (Jeff)
         //Matlab code    frqDisp = [200 100 50 40 25 20 10 5 2 1.5 1.25 1.01]';    (Tyler)
@@ -1171,16 +1152,16 @@
 
         //remove any NaN's    (Jeff)
         //curves(any(isnan(curves),2),:) = [];
-        double[] yFinal = doubleMath.linearInterpolation(doubleArray.getColumn(curves,1), doubleArray.getColumn(curves,2), invfrqDisp);  //yFinal = interp1(curves(:,1),curves(:,2),invfrqDisp,'pchip');
-        //double[] yExpect = doubleMath.linearInterpolation(doubleArray.getColumn(curves,1), doubleArray.getColumn(curves,5), invfrqDisp);  //yExpect = interp1(curves(:,1),curves(:,5),invfrqDisp,'pchip');
-        double[] yFinal95L = doubleMath.linearInterpolation(doubleArray.getColumn(curves,1), doubleArray.getColumn(curves,4), invfrqDisp);  //Added for extra information    (Tyler)
-        double[] yFinal95U = doubleMath.linearInterpolation(doubleArray.getColumn(curves,1), doubleArray.getColumn(curves,3), invfrqDisp);  //Added for extra information    (Tyler)
+        double[] yFinal = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,1), DoubleArray.getColumn(curves,2), invfrqDisp);  //yFinal = interp1(curves(:,1),curves(:,2),invfrqDisp,'pchip');
+        //double[] yExpect = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,1), DoubleArray.getColumn(curves,5), invfrqDisp);  //yExpect = interp1(curves(:,1),curves(:,5),invfrqDisp,'pchip');
+        double[] yFinal95L = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,1), DoubleArray.getColumn(curves,4), invfrqDisp);  //Added for extra information    (Tyler)
+        double[] yFinal95U = DoubleMath.linearInterpolation(DoubleArray.getColumn(curves,1), DoubleArray.getColumn(curves,3), invfrqDisp);  //Added for extra information    (Tyler)
 
         //Round all values to one decimal place for summary table
-        yFinal = doubleMath.roundColumn(yFinal, 10);
-        //yExpect = doubleMath.roundColumn(yExpect, 10);
-        yFinal95L = doubleMath.roundColumn(yFinal95L, 10);
-        yFinal95U = doubleMath.roundColumn(yFinal95U, 10);
+        yFinal = DoubleMath.roundColumn(yFinal, 10);
+        //yExpect = DoubleMath.roundColumn(yExpect, 10);
+        yFinal95L = DoubleMath.roundColumn(yFinal95L, 10);
+        yFinal95U = DoubleMath.roundColumn(yFinal95U, 10);
 
         //Matlab code:    mm = num2str([frqDisp yFinal yExpect],'%5.2f %7.0f %7.0f');
         //below is very specific to mm format above    (Jeff)
@@ -1189,14 +1170,8 @@
             //'(year)  (cfs)   (cfs) ';...
             //'----------------------';...
             //mm;];
-        int summaryLength = 0;
-        if(summaryTable_old.length != 0){
-            summaryLength = invfrqDisp.length + 2 + summaryTable_old.length;
-        }else{
-            summaryLength = invfrqDisp.length + 2;
-        }
         
-        String[][] summaryTable_new = new String[summaryLength][4];
+        String[][] summaryTable_new = new String[invfrqDisp.length + 2][4];
         //Row 1    (Tyler)
         summaryTable_new[0][0] = "Return Period";
         //summaryTable_new[0][1] = "Expected";
@@ -1218,11 +1193,6 @@
             summaryTable_new[i+2][3] = String.valueOf(yFinal95U[i]);    //    Upper 95% CI from B17 value
         }
 
-        //If a skewness error exists, append it to the summary table
-        if(summaryTable_old.length != 0){
-            summaryTable_new[0][0] = summaryTable_old[0][0];
-        }
-
         return summaryTable_new;
     }
     /**
@@ -1308,8 +1278,6 @@
                                 String shapeType,
                                 int graphIndex, 
                                 String extraText){
-        Graphing graphing = new Graphing();
-        
         //Create Line Data and renderer
         XYDataset currentDataset = new XYSeriesCollection(currentLine);
         //Check if this series should have a dashed line or solid line and change the renderer accordingly
@@ -1358,7 +1326,7 @@
                 final XYPointerAnnotation pointer = new XYPointerAnnotation(extraText, x, y, Math.PI / 4.0);
                 pointer.setBaseRadius(35.0);
                 pointer.setTipRadius(10.0);
-                pointer.setFont(graphing.floodLabelFont);
+                pointer.setFont(Graphing.floodLabelFont);
                 pointer.setPaint(Color.black);
                 pointer.setTextAnchor(TextAnchor.HALF_ASCENT_LEFT);
                 plot.addAnnotation(pointer);
@@ -1534,9 +1502,6 @@
      * @return the XYPlot with the tick marks added
      */
     private XYPlot addCustomTickMarks(XYPlot plot, double[] pscale, double[] xLocationArray, double[] yLimits, double[] xLimits, int graphIndex){
-        DoubleMath doubleMath = new DoubleMath();
-        Graphing graphing = new Graphing();
-        
         //Loop through and create a label for each element in pscale except the first one at location x = xLocationArray[i]
         double xOffset = 1, decimalAmount = 0;
         for(int i=1; i<xLocationArray.length; i++){
@@ -1550,7 +1515,7 @@
             }
 
             //Create text of return period value and CDF value for x-axis label
-            String label = doubleMath.round(pscale[i], 3) + "\t (" + doubleMath.round(1/pscale[i], decimalAmount) + "- yr)";
+            String label = DoubleMath.round(pscale[i], 3) + "\t (" + DoubleMath.round(1/pscale[i], decimalAmount) + "- yr)";
 
             //Add grid line to mimic grid lines for probability plots
             XYSeries majorTickLine = new XYSeries(label);
@@ -1561,7 +1526,7 @@
 
             //Add text annotation to the grid line as a "tick label"
             XYTextAnnotation bottomAnnotation = new XYTextAnnotation(label, xOffset*xLocationArray[i], tickLabelOffset[i]*yLimits[0]);
-            bottomAnnotation.setFont(graphing.floodLabelFont);
+            bottomAnnotation.setFont(Graphing.floodLabelFont);
             bottomAnnotation.setRotationAngle(3*Math.PI/2);
             plot.addAnnotation(bottomAnnotation);
 

src/java/m/cfa/flood/Bulletin17Tables.java

@@ -3,12 +3,12 @@
 /**
 * This class contains tables referenced from the Bulletin 17B document used by 
 * the B17 flood analysis method
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since Java version: 2-November-2012
 */
 public class Bulletin17Tables {
-    public double[][] KNtable = {
+    public static double[][] KNtable = {
         {10,2.036},
         {11,2.088},
         {12,2.134},
@@ -149,15 +149,10 @@
         {147,3.144},
         {148,3.146},
         {149,3.148}};
-    public double[][] ktable(){
-        Bulletin17ktable1 table1 = new Bulletin17ktable1();
-        double[] column1 = table1.column1;
-        
-        Bulletin17ktable2 table2 = new Bulletin17ktable2();
-        double[] column2 = table2.column2;
-        
-        Bulletin17ktable3 table3 = new Bulletin17ktable3();
-        double[] column3 = table3.column3;
+    public static double[][] ktable(){
+        double[] column1 = Bulletin17ktable1.column1;
+        double[] column2 = Bulletin17ktable2.column2;
+        double[] column3 = Bulletin17ktable3.column3;
         
         double[][] ktable = new double[column1.length][3];
         for(int i=0; i<column1.length; i++){
@@ -169,7 +164,7 @@
         
         return ktable;
     }
-    public double[] pscale = {0.005,
+    public static double[] pscale = {0.005,
         0.01,
         0.02,
         0.05,
@@ -185,7 +180,7 @@
         0.001,
         0.6667,
         0.3333};
-    public double[][] PNtable = {{1,0.9999,0.898},
+    public static double[][] PNtable = {{1,0.9999,0.898},
         {1,0.999,0.879},
         {1,0.99,0.846},
         {1,0.95,0.796},

src/java/m/cfa/flood/Bulletin17ktable1.java

@@ -3,10 +3,10 @@
 /**
 * This class contains tables referenced from the Bulletin 17B document used by 
 * the B17 flood analysis method
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since Java version: 2-November-2012
 */
 public class Bulletin17ktable1 {
-    public double[] column1 = {-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9};
+    public static double[] column1 = {-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.9,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.8,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.7,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.6,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.5,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.4,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.3,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.2,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8.1,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.9,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.8,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.7,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.6,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.5,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.4,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.3,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.2,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7.1,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.9,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.8,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.7,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.6,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.5,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.4,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.3,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.2,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6.1,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.9,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.8,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.7,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.6,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.5,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.4,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.3,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.2,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5.1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.9,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.6,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.5,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.4,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.3,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.2,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4.1,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.9,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.8,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.7,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.6,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.5,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.4,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.3,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.2,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3.1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.9,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.8,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.7,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.6,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.5,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.4,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.3,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.2,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.9,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.8,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.7,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.6,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.5,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.3,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.2,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1.1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.9,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.7,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.7,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.8,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.7,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,2.9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.4,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.7,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,3.9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.1,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.3,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.4,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,4.9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.1,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.2,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.3,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.4,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.6,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.7,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.8,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,5.9,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.1,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.3,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.4,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.6,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.7,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.8,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.8,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,7.9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.1,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.2,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.3,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.5,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.6,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.7,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,8.9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9};
 }

src/java/m/cfa/flood/Bulletin17ktable2.java

@@ -3,10 +3,10 @@
 /**
 * This class contains tables referenced from the Bulletin 17B document used by 
 * the B17 flood analysis method
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since Java version: 2-November-2012
 */
 public class Bulletin17ktable2 {
-    public double[] column2 = {0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001};
+    public static double[] column2 = {0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001,0.9999,0.9995,0.999,0.998,0.995,0.99,0.98,0.975,0.96,0.95,0.9,0.8,0.7,0.6,0.570376,0.5,0.429624,0.4,0.3,0.2,0.1,0.05,0.04,0.025,0.02,0.01,0.005,0.002,0.001,0.0005,0.0001};
 }

src/java/m/cfa/flood/Bulletin17ktable3.java

@@ -3,10 +3,10 @@
 /**
 * This class contains tables referenced from the Bulletin 17B document used by 
 * the B17 flood analysis method
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since Java version: 2-November-2012
 */
 public class Bulletin17ktable3 {
-    public double[] column3 = {-20.53356,-14.52288,-12.04437,-9.65701,-6.68763,-4.63541,-2.82035,-2.30138,-1.33922,-0.95435,-0.11146,0.19338,0.2203,0.22214,0.22219,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,-20.3942,-14.44446,-11.99009,-9.62504,-6.6813,-4.64429,-2.83919,-2.32197,-1.36065,-0.97471,-0.12272,0.19316,0.22249,0.22461,0.22468,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,-20.25402,-14.36528,-11.93509,-9.59243,-6.67443,-4.65277,-2.85782,-2.34242,-1.38213,-0.99519,-0.13431,0.19277,0.22469,0.22714,0.22722,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,-20.113,-14.28534,-11.87938,-9.55915,-6.66703,-4.66085,-2.87622,-2.36273,-1.40364,-1.01581,-0.14624,0.19221,0.2269,0.22972,0.22982,0.22988,0.22988,0.22988,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,-19.97115,-14.20463,-11.82294,-9.52521,-6.65907,-4.6685,-2.8944,-2.38288,-1.42518,-1.03654,-0.15851,0.19147,0.22911,0.23236,0.23248,0.23255,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,-19.82845,-14.12314,-11.76576,-9.4906,-6.65056,-4.67573,-2.91234,-2.40287,-1.44673,-1.05738,-0.17113,0.19054,0.23132,0.23505,0.2352,0.23528,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,-19.68489,-14.04086,-11.70785,-9.4553,-6.64148,-4.68252,-2.93002,-2.42268,-1.46829,-1.07832,-0.18408,0.18939,0.23352,0.23779,0.23797,0.23808,0.23809,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,-19.54046,-13.95778,-11.64917,-9.41931,-6.63183,-4.68887,-2.94746,-2.44231,-1.48985,-1.09936,-0.19737,0.18803,0.23571,0.2406,0.24081,0.24095,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,-19.39517,-13.87389,-11.58974,-9.38262,-6.62159,-4.69476,-2.96462,-2.46175,-1.51141,-1.12048,-0.21101,0.18643,0.23788,0.24345,0.24371,0.24388,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,-19.24898,-13.78919,-11.52953,-9.34521,-6.61075,-4.70019,-2.9815,-2.48099,-1.53294,-1.14168,-0.22498,0.18459,0.24003,0.24637,0.24667,0.24689,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,-19.10191,-13.70366,-11.46855,-9.30709,-6.59931,-4.70514,-2.9981,-2.50001,-1.55444,-1.16295,-0.23929,0.18249,0.24214,0.24933,0.2497,0.24996,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,-18.95393,-13.6173,-11.40677,-9.26823,-6.58725,-4.70961,-3.01439,-2.51881,-1.57591,-1.18427,-0.25394,0.18012,0.24421,0.25236,0.2528,0.25312,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,-18.80504,-13.53009,-11.34419,-9.22863,-6.57456,-4.71358,-3.03038,-2.53737,-1.59732,-1.20565,-0.26892,0.17746,0.24622,0.25544,0.25596,0.25635,0.2564,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,-18.65522,-13.44202,-11.2808,-9.18828,-6.56124,-4.71704,-3.04604,-2.55569,-1.61867,-1.22706,-0.28422,0.1745,0.24817,0.25857,0.25919,0.25966,0.25973,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,-18.50447,-13.35309,-11.21658,-9.14717,-6.54727,-4.71998,-3.06137,-2.57375,-1.63995,-1.2485,-0.29986,0.17123,0.25005,0.26175,0.26248,0.26306,0.26315,0.26315,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,-18.35278,-13.26328,-11.15154,-9.10528,-6.53264,-4.7224,-3.07636,-2.59154,-1.66115,-1.26995,-0.31582,0.16764,0.25183,0.26497,0.26584,0.26654,0.26665,0.26666,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,-18.20013,-13.17258,-11.08565,-9.06261,-6.51735,-4.72427,-3.09099,-2.60905,-1.68225,-1.29141,-0.33209,0.16371,0.25352,0.26825,0.26926,0.2701,0.27025,0.27026,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,-18.04652,-13.08098,-11.0189,-9.01915,-6.50137,-4.72559,-3.10525,-2.62626,-1.70325,-1.31287,-0.34868,0.15942,0.2551,0.27156,0.27274,0.27376,0.27394,0.27396,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,-17.89193,-12.98848,-10.95129,-8.97488,-6.4847,-4.72635,-3.11914,-2.64317,-1.72412,-1.3343,-0.36557,0.15478,0.25654,0.27491,0.27629,0.27751,0.27774,0.27776,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,-17.73636,-12.89505,-10.88281,-8.92979,-6.46733,-4.72653,-3.13263,-2.65977,-1.74481,-1.35571,-0.38277,0.14975,0.25785,0.27829,0.2799,0.28135,0.28164,0.28167,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,-17.57979,-12.80069,-10.81343,-8.88387,-6.44924,-4.72613,-3.14572,-2.67603,-1.76547,-1.37708,-0.40026,0.14434,0.25899,0.28169,0.28355,0.28528,0.28565,0.28569,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,-17.42221,-12.70539,-10.74316,-8.83711,-6.43042,-4.72512,-3.15838,-2.69195,-1.78591,-1.39839,-0.41803,0.13853,0.25995,0.28511,0.28726,0.28931,0.28977,0.28982,0.28985,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,-17.26361,-12.60913,-10.67197,-8.7895,-6.41086,-4.7235,-3.17062,-2.70751,-1.80618,-1.41963,-0.43608,0.13231,0.26072,0.28854,0.29101,0.29344,0.294,0.29407,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,-17.10397,-12.5119,-10.59986,-8.74102,-6.39055,-4.72125,-3.18241,-2.7227,-1.82627,-1.44079,-0.4544,0.12566,0.26128,0.29196,0.2948,0.29766,0.29835,0.29844,0.2985,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,-16.94329,-12.4137,-10.52681,-8.69167,-6.36948,-4.71836,-3.19374,-2.73751,-1.84616,-1.46186,-0.47299,0.11859,0.2616,0.29537,0.29862,0.30198,0.30283,0.30294,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,-16.78156,-12.3145,-10.45281,-8.64142,-6.34762,-4.71482,-3.2046,-2.75191,-1.86584,-1.48281,-0.49182,0.11107,0.26167,0.29875,0.30246,0.30639,0.30743,0.30757,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,-16.61875,-12.21429,-10.37785,-8.59027,-6.32497,-4.71061,-3.21497,-2.76591,-1.88528,-1.50365,-0.51089,0.10311,0.26146,0.30209,0.30631,0.3109,0.31216,0.31234,0.31249,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,-16.45487,-12.11307,-10.30192,-8.5382,-6.30151,-4.70571,-3.22484,-2.77947,-1.90449,-1.52434,-0.53019,0.09469,0.26097,0.30538,0.31016,0.31549,0.31702,0.31724,0.31745,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,-16.28989,-12.01082,-10.22499,-8.48519,-6.27723,-4.70013,-3.23419,-2.79259,-1.92343,-1.54487,-0.5497,0.0858,0.26015,0.30859,0.31399,0.32016,0.32202,0.3223,0.32256,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,-16.1238,-11.90752,-10.14706,-8.43125,-6.25212,-4.69382,-3.24301,-2.80525,-1.9421,-1.56524,-0.56942,0.07645,0.25901,0.31171,0.3178,0.32492,0.32715,0.3275,0.32784,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,-15.9566,-11.80316,-10.06812,-8.37634,-6.22616,-4.6868,-3.25128,-2.81743,-1.96048,-1.58541,-0.58933,0.06662,0.2575,0.31472,0.32155,0.32974,0.33242,0.33285,0.3333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,-15.78826,-11.69773,-9.98815,-8.32046,-6.19933,-4.67903,-3.25898,-2.82912,-1.97855,-1.60538,-0.60941,0.05632,0.25562,0.31759,0.32525,0.33463,0.33782,0.33836,0.33893,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,-15.61878,-11.59122,-9.90713,-8.26359,-6.17162,-4.6705,-3.2661,-2.8403,-1.99629,-1.62513,-0.62966,0.04553,0.25334,0.32031,0.32886,0.33957,0.34336,0.34402,0.34476,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,-15.44813,-11.4836,-9.82505,-8.20572,-6.14302,-4.6612,-3.27263,-2.85096,-2.01369,-1.64464,-0.65006,0.03427,0.25064,0.32285,0.33236,0.34455,0.34903,0.34985,0.35078,0.35087,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,-15.27632,-11.37487,-9.7419,-8.14683,-6.11351,-4.65111,-3.27854,-2.86107,-2.03073,-1.6639,-0.67058,0.02252,0.24751,0.32519,0.33573,0.34955,0.35484,0.35583,0.357,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,-15.10332,-11.26502,-9.65766,-8.08691,-6.08307,-4.64022,-3.28381,-2.87062,-2.04739,-1.68287,-0.69122,0.01028,0.24391,0.32729,0.33895,0.35456,0.36076,0.36196,0.36345,0.36363,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,-14.92912,-11.15402,-9.57232,-8.02594,-6.05169,-4.6285,-3.28844,-2.87959,-2.06365,-1.70155,-0.71195,-0.00243,0.23984,0.32914,0.34198,0.35956,0.3668,0.36825,0.37011,0.37036,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,-14.7537,-11.04186,-9.48586,-7.9639,-6.01934,-4.61594,-3.2924,-2.88796,-2.0795,-1.71992,-0.73277,-0.01561,0.23527,0.3307,0.34481,0.36453,0.37295,0.37469,0.37701,0.37734,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,-14.57706,-10.92853,-9.39827,-7.90078,-5.98602,-4.60252,-3.29567,-2.89572,-2.0949,-1.73795,-0.75364,-0.02927,0.23019,0.33194,0.3474,0.36945,0.37919,0.38127,0.38414,0.38458,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,-14.39918,-10.81401,-9.30952,-7.83657,-5.95171,-4.58823,-3.29823,-2.90283,-2.10985,-1.75563,-0.77455,-0.0434,0.22458,0.33284,0.34972,0.37428,0.38552,0.38799,0.39152,0.39211,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,-14.22004,-10.69829,-9.21961,-7.77124,-5.91639,-4.57304,-3.30007,-2.9093,-2.12432,-1.77292,-0.79548,-0.05798,0.21843,0.33336,0.35174,0.37901,0.3919,0.39482,0.39914,0.39993,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,-14.03963,-10.58135,-9.12852,-7.70479,-5.88004,-4.55694,-3.30116,-2.91508,-2.13829,-1.78982,-0.81641,-0.073,0.21172,0.33347,0.35343,0.38359,0.39833,0.40177,0.40703,0.40806,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,-13.85794,-10.46318,-9.03623,-7.63718,-5.84265,-4.5399,-3.30149,-2.92017,-2.15174,-1.80631,-0.83731,-0.08847,0.20446,0.33315,0.35475,0.388,0.40477,0.4088,0.41517,0.41652,0.41666,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,-13.67495,-10.34375,-8.94273,-7.56842,-5.80418,-4.52192,-3.30103,-2.92455,-2.16465,-1.82234,-0.85817,-0.10436,0.19661,0.33236,0.35567,0.39221,0.41121,0.4159,0.42357,0.42532,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,-13.49066,-10.22307,-8.848,-7.49847,-5.76464,-4.50297,-3.29976,-2.92818,-2.17699,-1.83792,-0.87895,-0.12067,0.18819,0.33108,0.35616,0.39617,0.41761,0.42304,0.43223,0.43448,0.43477,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,-13.30504,-10.1011,-8.75202,-7.42733,-5.724,-4.48303,-3.29767,-2.93105,-2.18874,-1.853,-0.89964,-0.13737,0.17918,0.32928,0.35619,0.39985,0.42394,0.4302,0.44114,0.44402,0.44443,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,-13.11808,-9.97784,-8.65479,-7.35497,-5.68224,-4.46207,-3.29473,-2.93314,-2.19988,-1.86757,-0.92022,-0.15445,0.16958,0.32693,0.35572,0.40321,0.43016,0.43734,0.45029,0.45395,0.45452,0.45454,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,-12.92977,-9.85326,-8.55627,-7.28138,-5.63934,-4.44009,-3.29092,-2.93443,-2.21039,-1.8816,-0.94064,-0.17189,0.15939,0.324,0.35473,0.40621,0.43623,0.44442,0.45967,0.46428,0.46508,0.46511,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,-12.7401,-9.72737,-8.45646,-7.20654,-5.59528,-4.41706,-3.28622,-2.93489,-2.22024,-1.89508,-0.9609,-0.18967,0.14861,0.32049,0.35318,0.40881,0.44212,0.45142,0.46927,0.47504,0.47614,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,-12.54906,-9.60013,-8.35534,-7.13043,-5.55005,-4.39296,-3.2806,-2.9345,-2.2294,-1.90796,-0.98096,-0.20777,0.13725,0.31635,0.35105,0.41097,0.44777,0.45828,0.47906,0.48622,0.48772,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,-12.35663,-9.47154,-8.25289,-7.05304,-5.50362,-4.36777,-3.27404,-2.93324,-2.23786,-1.92023,-1.00079,-0.22617,0.1253,0.31159,0.34831,0.41265,0.45314,0.46496,0.48902,0.49784,0.49986,0.49999,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,-12.1628,-9.34158,-8.1491,-6.97435,-5.45598,-4.34147,-3.26653,-2.93107,-2.24558,-1.93186,-1.02036,-0.24484,0.11279,0.30617,0.34494,0.41381,0.45819,0.47141,0.49911,0.5099,0.51261,0.51281,0.51281,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,-11.96757,-9.21023,-8.04395,-6.89435,-5.40711,-4.31403,-3.25803,-2.92799,-2.25254,-1.94283,-1.03965,-0.26376,0.09972,0.3001,0.34092,0.41441,0.46286,0.47758,0.50929,0.5224,0.526,0.52629,0.5263,0.52631,0.52631,0.52632,0.52632,0.52632,0.52632,0.52632,0.52632,-11.77092,-9.0775,-7.93744,-6.81301,-5.35698,-4.28545,-3.24853,-2.92397,-2.25872,-1.95311,-1.05863,-0.2829,0.0861,0.29335,0.33623,0.41442,0.46711,0.48342,0.51952,0.53533,0.54006,0.5405,0.54052,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,-11.57284,-8.94335,-7.82954,-6.73032,-5.30559,-4.25569,-3.238,-2.91898,-2.26409,-1.96266,-1.07726,-0.30223,0.07195,0.28592,0.33085,0.41381,0.47088,0.48888,0.52975,0.54867,0.55483,0.55548,0.55552,0.55555,0.55555,0.55556,0.55556,0.55556,0.55556,0.55556,0.55556,-11.37334,-8.80779,-7.72024,-6.64627,-5.25291,-4.22473,-3.22641,-2.91299,-2.26862,-1.97147,-1.09552,-0.32171,0.0573,0.27782,0.32479,0.41253,0.47413,0.49391,0.53993,0.56242,0.57035,0.5713,0.57136,0.57141,0.57142,0.57143,0.57143,0.57143,0.57143,0.57143,0.57143,-11.17239,-8.67079,-7.60953,-6.56084,-5.19892,-4.19257,-3.21375,-2.90599,-2.27229,-1.97951,-1.11337,-0.34133,0.04215,0.26904,0.31802,0.41058,0.47682,0.49844,0.55,0.57652,0.58666,0.58802,0.58812,0.58821,0.58822,0.58823,0.58824,0.58824,0.58824,0.58824,0.58824,-10.97001,-8.53236,-7.49739,-6.47401,-5.14362,-4.15917,-3.2,-2.89795,-2.27506,-1.98674,-1.13078,-0.36104,0.02654,0.25958,0.31055,0.40792,0.4789,0.50244,0.55989,0.59096,0.60379,0.60572,0.60587,0.60601,0.60603,0.60606,0.60606,0.60606,0.60606,0.60606,0.60606,-10.76618,-8.39248,-7.38382,-6.38578,-5.08697,-4.12452,-3.18512,-2.88884,-2.27693,-1.99314,-1.14772,-0.38081,0.0105,0.24946,0.30238,0.40454,0.48033,0.50585,0.56953,0.60567,0.62175,0.62445,0.62469,0.62491,0.62495,0.62499,0.625,0.625,0.625,0.625,0.625,-10.5609,-8.25115,-7.26881,-6.29613,-5.02897,-4.08859,-3.16911,-2.87865,-2.27785,-1.99869,-1.16416,-0.40061,-0.00596,0.23868,0.29351,0.40041,0.48107,0.50863,0.57887,0.6206,0.64056,0.64429,0.64465,0.645,0.64507,0.64514,0.64516,0.64516,0.64516,0.64516,0.64516,-10.35418,-8.10836,-7.15235,-6.20506,-4.96959,-4.05138,-3.15193,-2.86735,-2.2778,-2.00335,-1.18006,-0.4204,-0.02279,0.22726,0.28395,0.39554,0.48109,0.51073,0.58783,0.63569,0.66023,0.66532,0.66585,0.66638,0.66649,0.66663,0.66666,0.66667,0.66667,0.66667,0.66667,-10.14602,-7.96411,-7.03443,-6.11254,-4.90884,-4.01286,-3.13356,-2.85492,-2.27676,-2.0071,-1.19539,-0.44015,-0.03997,0.21523,0.27372,0.38991,0.48037,0.51212,0.59634,0.65086,0.68075,0.68759,0.68836,0.68917,0.68935,0.68959,0.68964,0.68965,0.68965,0.68966,0.68966,-9.93643,-7.81839,-6.91505,-6.01858,-4.84669,-3.97301,-3.11399,-2.84134,-2.2747,-2.00992,-1.21013,-0.4598,-0.05746,0.20259,0.26282,0.38353,0.47888,0.51276,0.60434,0.66603,0.70209,0.71116,0.71227,0.71348,0.71377,0.71415,0.71425,0.71428,0.71428,0.71429,0.71429,-9.72543,-7.67121,-6.79421,-5.92316,-4.78313,-3.93183,-3.0932,-2.82658,-2.2716,-2.01177,-1.22422,-0.47934,-0.07523,0.18939,0.25129,0.3764,0.4766,0.51263,0.61176,0.68111,0.72422,0.7361,0.73765,0.73943,0.73987,0.74049,0.74067,0.74073,0.74074,0.74074,0.74074,-9.51301,-7.52258,-6.67191,-5.82629,-4.71815,-3.8893,-3.07116,-2.81062,-2.26743,-2.01263,-1.23766,-0.49872,-0.09323,0.17564,0.23915,0.36852,0.47353,0.51171,0.61854,0.69602,0.74709,0.76242,0.76456,0.76712,0.76779,0.76878,0.76909,0.7692,0.76922,0.76923,0.76923,-9.2992,-7.3725,-6.54814,-5.72796,-4.65176,-3.8454,-3.04787,-2.79345,-2.26217,-2.01247,-1.25039,-0.51789,-0.11143,0.16138,0.22642,0.35992,0.46966,0.50999,0.62463,0.71067,0.77062,0.79015,0.79306,0.79667,0.79765,0.79921,0.79973,0.79994,0.79998,0.79999,0.8,-9.08403,-7.22098,-6.42292,-5.62818,-4.58393,-3.80013,-3.0233,-2.77506,-2.25581,-2.01128,-1.2624,-0.53683,-0.12979,0.14665,0.21313,0.35062,0.46499,0.50744,0.62999,0.72495,0.79472,0.81927,0.82315,0.82817,0.82959,0.83196,0.83283,0.8332,0.83328,0.83331,0.83333,-8.86753,-7.06804,-6.29626,-5.52694,-4.51467,-3.75347,-2.99744,-2.75541,-2.24831,-2.00903,-1.27365,-0.55549,-0.14827,0.13148,0.19933,0.34063,0.45953,0.50409,0.63456,0.7388,0.81929,0.84976,0.85486,0.86169,0.86371,0.86723,0.86863,0.86929,0.86945,0.86952,0.86956,-8.64971,-6.9137,-6.16816,-5.42426,-4.44398,-3.70543,-2.97028,-2.73451,-2.23967,-2.0057,-1.28412,-0.57383,-0.16682,0.1159,0.18504,0.32999,0.45329,0.49991,0.63833,0.75211,0.84422,0.88156,0.88814,0.89728,0.90009,0.90521,0.90742,0.90854,0.90885,0.90899,0.90908,-8.43064,-6.75798,-6.03865,-5.32014,-4.37186,-3.656,-2.94181,-2.71234,-2.22986,-2.00128,-1.29377,-0.59183,-0.1854,0.09997,0.1703,0.31872,0.44628,0.49494,0.64125,0.76482,0.86938,0.91458,0.92295,0.93495,0.93878,0.94607,0.94945,0.95131,0.95188,0.95215,0.95234,-8.21034,-6.6009,-5.90776,-5.21461,-4.29832,-3.60517,-2.91202,-2.68888,-2.21888,-1.99573,-1.30259,-0.60944,-0.20397,0.08371,0.15516,0.30685,0.43854,0.48917,0.64333,0.77686,0.89464,0.94871,0.95918,0.97468,0.9798,0.98995,0.99499,0.998,0.999,0.9995,0.9999,-7.98888,-6.44251,-5.77549,-5.10768,-4.22336,-3.55295,-2.88091,-2.66413,-2.2067,-1.98906,-1.31054,-0.62662,-0.2225,0.06718,0.13964,0.29443,0.43008,0.48265,0.64453,0.78816,0.91988,0.98381,0.99672,1.0164,1.02311,1.03695,1.04427,1.04898,1.05068,1.05159,1.05239,-7.76632,-6.28285,-5.6419,-4.99937,-4.147,-3.49935,-2.84848,-2.6381,-2.19332,-1.98124,-1.3176,-0.64335,-0.24094,0.0504,0.12381,0.2815,0.42095,0.47538,0.64488,0.79868,0.94496,1.01973,1.03543,1.06001,1.06864,1.08711,1.09749,1.10465,1.10743,1.10901,1.11054,-7.54272,-6.12196,-5.50701,-4.88971,-4.06926,-3.44438,-2.81472,-2.61076,-2.17873,-1.97227,-1.32376,-0.65959,-0.25925,0.03344,0.10769,0.26808,0.41116,0.46739,0.64436,0.80837,0.96977,1.05631,1.07513,1.10537,1.11628,1.14042,1.15477,1.16534,1.16974,1.1724,1.1752,-7.31818,-5.9599,-5.37087,-4.77875,-3.99016,-3.38804,-2.77964,-2.58214,-2.16293,-1.96213,-1.329,-0.67532,-0.2774,0.01631,0.09132,0.25422,0.40075,0.45873,0.643,0.8172,0.99418,1.09338,1.11566,1.15229,1.16584,1.1968,1.21618,1.23132,1.23805,1.24235,1.24728,-7.09277,-5.79673,-5.23353,-4.66651,-3.90973,-3.33035,-2.74325,-2.55222,-2.14591,-1.95083,-1.3333,-0.6905,-0.29535,-0.00092,0.07476,0.23996,0.38977,0.44942,0.6408,0.82516,1.0181,1.13075,1.15682,1.20059,1.21716,1.25611,1.28167,1.30279,1.31275,1.31944,1.32774,-6.86661,-5.63252,-5.09505,-4.55304,-3.82798,-3.27134,-2.70556,-2.52102,-2.12768,-1.93836,-1.33665,-0.70512,-0.31307,-0.01824,0.05803,0.22535,0.37824,0.43949,0.63779,0.83223,1.04144,1.16827,1.19842,1.25004,1.26999,1.31815,1.35114,1.37981,1.39408,1.40413,1.41753,-6.6398,-5.46735,-4.95549,-4.43839,-3.74497,-3.21103,-2.66657,-2.48855,-2.10823,-1.92472,-1.33904,-0.71915,-0.33054,-0.0356,0.04116,0.2104,0.3662,0.42899,0.634,0.83841,1.06413,1.20578,1.24028,1.30042,1.32412,1.38267,1.42439,1.46232,1.48216,1.49673,1.51752,-6.41249,-5.3013,-4.81492,-4.32263,-3.66073,-3.14944,-2.62631,-2.45482,-2.08758,-1.90992,-1.34047,-0.73257,-0.34772,-0.05297,0.02421,0.19517,0.3537,0.41794,0.62944,0.84369,1.08608,1.24313,1.28225,1.35153,1.37929,1.44942,1.50114,1.55016,1.57695,1.59738,1.62838,-6.1848,-5.13449,-4.67344,-4.20582,-3.5753,-3.0866,-2.5848,-2.41984,-2.06573,-1.89395,-1.34092,-0.74537,-0.36458,-0.07032,0.00719,0.17968,0.34075,0.40638,0.62415,0.84809,1.10726,1.28019,1.32414,1.40314,1.43529,1.51808,1.5811,1.64305,1.67825,1.70603,1.75053,-5.95691,-4.96701,-4.53112,-4.08802,-3.48874,-3.02256,-2.54206,-2.38364,-2.04269,-1.87683,-1.34039,-0.75752,-0.38111,-0.08763,-0.00987,0.16397,0.3274,0.39434,0.61815,0.85161,1.12762,1.31684,1.36584,1.45507,1.49188,1.58838,1.6639,1.74062,1.78572,1.82241,1.8841,-5.72899,-4.79899,-4.38807,-3.96932,-3.40109,-2.95735,-2.49811,-2.34623,-2.01848,-1.85856,-1.33889,-0.76902,-0.39729,-0.10486,-0.02693,0.14807,0.31368,0.38186,0.61146,0.85426,1.14712,1.35299,1.4072,1.50712,1.54886,1.66001,1.74919,1.84244,1.89894,1.94611,2.02891,-5.50124,-4.63057,-4.24439,-3.84981,-3.31243,-2.89101,-2.45298,-2.30764,-1.99311,-1.83916,-1.3364,-0.77986,-0.41309,-0.12199,-0.04397,0.13199,0.29961,0.36889,0.60412,0.85607,1.16574,1.38855,1.44813,1.55914,1.60604,1.73271,1.8366,1.94806,2.01739,2.07661,2.18448,-5.27389,-4.46189,-4.10022,-3.72957,-3.22281,-2.82359,-2.4067,-2.2679,-1.9666,-1.81864,-1.33294,-0.79002,-0.42851,-0.13901,-0.06097,0.11578,0.28516,0.35565,0.59615,0.85703,1.18347,1.42345,1.48852,1.61099,1.66325,1.80621,1.9258,2.05701,2.14053,2.21328,2.35015,-5.04718,-4.29311,-3.95567,-3.60872,-3.13232,-2.75514,-2.35931,-2.22702,-1.93896,-1.79701,-1.3285,-0.7995,-0.44352,-0.15589,-0.07791,0.09945,0.27047,0.34198,0.58757,0.85718,1.20028,1.45762,1.5283,1.66253,1.72033,1.88029,2.01644,2.16884,2.2678,2.35549,2.52507,-4.82141,-4.12443,-3.8109,-3.48137,-3.04102,-2.68572,-2.31084,-2.18505,-1.91022,-1.77428,-1.32309,-0.80829,-0.45812,-0.17261,-0.09478,0.08302,0.25558,0.32796,0.5784,0.85653,1.21618,1.49101,1.5674,1.71366,1.77716,1.95472,2.10825,2.28311,2.39867,2.50257,2.70836,-4.59687,-3.95605,-3.66608,-3.36566,-2.949,-2.61539,-2.26133,-2.14202,-1.88039,-1.75048,-1.31671,-0.81638,-0.47228,-0.18916,-0.11154,0.06651,0.24037,0.31362,0.56867,0.85508,1.23114,1.52357,1.60574,1.76427,1.83361,2.02933,2.20092,2.39942,2.53261,2.6539,2.89907,-4.37394,-3.7882,-3.52139,-3.24371,-2.85636,-2.54421,-2.21081,-2.09795,-1.84949,-1.72562,-1.30936,-0.82377,-0.486,-0.20552,-0.1282,0.04993,0.22492,0.29897,0.55839,0.85285,1.24516,1.55527,1.64329,1.81427,1.88959,2.10394,2.29423,2.51741,2.66915,2.80889,3.09631,-4.15301,-3.62113,-3.37703,-3.12169,-2.76321,-2.47226,-2.15935,-2.0529,-1.81756,-1.69971,-1.30105,-0.83044,-0.49927,-0.22168,-0.14472,0.03325,0.20925,0.28403,0.54757,0.84986,1.25824,1.58607,1.67999,1.8636,1.94499,2.1784,2.38795,2.63672,2.80786,2.96698,3.29921,-3.93453,-3.45513,-3.23322,-2.99978,-2.66965,-2.39961,-2.10697,-2.00688,-1.78462,-1.67279,-1.29178,-0.83639,-0.51207,-0.23763,-0.16111,0.01662,0.19339,0.26882,0.53624,0.84611,1.27037,1.61594,1.7158,1.91219,1.99973,2.25258,2.48187,2.75706,2.94834,3.12767,3.50703,-3.71902,-3.29053,-3.09023,-2.87816,-2.57583,-2.32635,-2.05375,-1.95996,-1.75069,-1.64485,-1.28155,-0.84162,-0.5244,-0.25335,-0.17733,0,0.17733,0.25335,0.5244,0.84162,1.28155,1.64485,1.75069,1.95996,2.05375,2.32635,2.57583,2.87816,3.09023,3.29053,3.71902,-3.50703,-3.12767,-2.94834,-2.75706,-2.48187,-2.25258,-1.99973,-1.91219,-1.7158,-1.61594,-1.27037,-0.84611,-0.53624,-0.26882,-0.19339,-0.01662,0.16111,0.23763,0.51207,0.83639,1.29178,1.67279,1.78462,2.00688,2.10697,2.39961,2.66965,2.99978,3.23322,3.45513,3.93453,-3.29921,-2.96698,-2.80786,-2.63672,-2.38795,-2.1784,-1.94499,-1.8636,-1.67999,-1.58607,-1.25824,-0.84986,-0.54757,-0.28403,-0.20925,-0.03325,0.14472,0.22168,0.49927,0.83044,1.30105,1.69971,1.81756,2.0529,2.15935,2.47226,2.76321,3.12169,3.37703,3.62113,4.15301,-3.09631,-2.80889,-2.66915,-2.51741,-2.29423,-2.10394,-1.88959,-1.81427,-1.64329,-1.55527,-1.24516,-0.85285,-0.55839,-0.29897,-0.22492,-0.04993,0.1282,0.20552,0.486,0.82377,1.30936,1.72562,1.84949,2.09795,2.21081,2.54421,2.85636,3.24371,3.52139,3.7882,4.37394,-2.89907,-2.6539,-2.53261,-2.39942,-2.20092,-2.02933,-1.83361,-1.76427,-1.60574,-1.52357,-1.23114,-0.85508,-0.56867,-0.31362,-0.24037,-0.06651,0.11154,0.18916,0.47228,0.81638,1.31671,1.75048,1.88039,2.14202,2.26133,2.61539,2.949,3.36566,3.66608,3.95605,4.59687,-2.70836,-2.50257,-2.39867,-2.28311,-2.10825,-1.95472,-1.77716,-1.71366,-1.5674,-1.49101,-1.21618,-0.85653,-0.5784,-0.32796,-0.25558,-0.08302,0.09478,0.17261,0.45812,0.80829,1.32309,1.77428,1.91022,2.18505,2.31084,2.68572,3.04102,3.48737,3.8109,4.12443,4.82141,-2.52507,-2.35549,-2.2678,-2.16884,-2.01644,-1.88029,-1.72033,-1.66253,-1.5283,-1.45762,-1.20028,-0.85718,-0.58757,-0.34198,-0.27047,-0.09945,0.07791,0.15589,0.44352,0.7995,1.3285,1.79701,1.93896,2.22702,2.35931,2.75514,3.13232,3.60872,3.95567,4.29311,5.04718,-2.35015,-2.21328,-2.14053,-2.05701,-1.9258,-1.80621,-1.66325,-1.61099,-1.48852,-1.42345,-1.18347,-0.85703,-0.59615,-0.35565,-0.28516,-0.11578,0.06097,0.13901,0.42851,0.79002,1.33294,1.81864,1.9666,2.2679,2.4067,2.82359,3.22281,3.72957,4.10022,4.46189,5.27389,-2.18448,-2.07661,-2.01739,-1.94806,-1.8366,-1.73271,-1.60604,-1.55914,-1.44813,-1.38855,-1.16574,-0.85607,-0.60412,-0.36889,-0.29961,-0.13199,0.04397,0.12199,0.41309,0.77986,1.3364,1.83916,1.99311,2.30764,2.45298,2.89101,3.31243,3.84981,4.24439,4.63057,5.50124,-2.02891,-1.94611,-1.89894,-1.84244,-1.74919,-1.66001,-1.54886,-1.50712,-1.4072,-1.35299,-1.14712,-0.85426,-0.61146,-0.38186,-0.31368,-0.14807,0.02693,0.10486,0.39729,0.76902,1.33889,1.85856,2.01848,2.34623,2.49811,2.95735,3.40109,3.96932,4.38807,4.79899,5.72899,-1.8841,-1.82241,-1.78572,-1.74062,-1.6639,-1.58838,-1.49188,-1.45507,-1.36584,-1.31684,-1.12762,-0.85161,-0.61815,-0.39434,-0.3274,-0.16397,0.00987,0.08763,0.38111,0.75752,1.34039,1.87683,2.04269,2.38364,2.54206,3.02256,3.48874,4.08802,4.53112,4.96701,5.95691,-1.75053,-1.70603,-1.67825,-1.64305,-1.5811,-1.51808,-1.43529,-1.40314,-1.32414,-1.28019,-1.10726,-0.84809,-0.62415,-0.40638,-0.34075,-0.17968,-0.00719,0.07032,0.36458,0.74537,1.34092,1.89395,2.06573,2.41984,2.5848,3.0866,3.5753,4.20582,4.67344,5.13449,6.1848,-1.62838,-1.59738,-1.57695,-1.55016,-1.50114,-1.44942,-1.37929,-1.35153,-1.28225,-1.24313,-1.08608,-0.84369,-0.62944,-0.41794,-0.3537,-0.19517,-0.02421,0.05297,0.34772,0.73257,1.34047,1.90992,2.08758,2.45482,2.62631,3.14944,3.66073,4.32263,4.81492,5.3013,6.41249,-1.51752,-1.49673,-1.48216,-1.46232,-1.42439,-1.38267,-1.32412,-1.30042,-1.24028,-1.20578,-1.06413,-0.83841,-0.634,-0.42899,-0.3662,-0.2104,-0.04116,0.0356,0.33054,0.71915,1.33904,1.92472,2.10823,2.48855,2.66657,3.21103,3.74497,4.43839,4.95549,5.46735,6.6398,-1.41753,-1.40413,-1.39408,-1.37981,-1.35114,-1.31815,-1.26999,-1.25004,-1.19842,-1.16827,-1.04144,-0.83223,-0.63779,-0.43949,-0.37824,-0.22535,-0.05803,0.01824,0.31307,0.70512,1.33665,1.93836,2.12768,2.52102,2.70556,3.27134,3.82798,4.55304,5.09505,5.63252,6.86661,-1.32774,-1.31944,-1.31275,-1.30279,-1.28167,-1.25611,-1.21716,-1.20059,-1.15682,-1.13075,-1.0181,-0.82516,-0.6408,-0.44942,-0.38977,-0.23996,-0.07476,0.00092,0.29535,0.6905,1.3333,1.95083,2.14591,2.55222,2.74325,3.33035,3.90973,4.66651,5.23353,5.79673,7.09277,-1.24728,-1.24235,-1.23805,-1.23132,-1.21618,-1.1968,-1.16584,-1.15229,-1.11566,-1.09338,-0.99418,-0.8172,-0.643,-0.45873,-0.40075,-0.25422,-0.09132,-0.01631,0.2774,0.67532,1.329,1.96213,2.16293,2.58214,2.77964,3.38804,3.99016,4.77875,5.37087,5.9599,7.31818,-1.1752,-1.1724,-1.16974,-1.16534,-1.15477,-1.14042,-1.11628,-1.10537,-1.07513,-1.05631,-0.96977,-0.80837,-0.64436,-0.46739,-0.41116,-0.26808,-0.10769,-0.03344,0.25925,0.65959,1.32376,1.97227,2.17873,2.61076,2.81472,3.44438,4.06926,4.88971,5.50701,6.12196,7.54272,-1.11054,-1.10901,-1.10743,-1.10465,-1.09749,-1.08711,-1.06864,-1.06001,-1.03543,-1.01973,-0.94496,-0.79868,-0.64488,-0.47538,-0.42095,-0.2815,-0.12381,-0.0504,0.24094,0.64335,1.3176,1.98124,2.19332,2.6381,2.84848,3.49935,4.147,4.99937,5.6419,6.28285,7.76632,-1.05239,-1.05159,-1.05068,-1.04898,-1.04427,-1.03695,-1.02311,-1.0164,-0.99672,-0.98381,-0.91988,-0.78816,-0.64453,-0.48265,-0.43008,-0.29443,-0.13964,-0.06718,0.2225,0.62662,1.31054,1.98906,2.2067,2.66413,2.88091,3.55295,4.22336,5.10768,5.77549,6.44251,7.98688,-0.9999,-0.9995,-0.999,-0.998,-0.99499,-0.98995,-0.9798,-0.97468,-0.95918,-0.94871,-0.89464,-0.77686,-0.64333,-0.48917,-0.43854,-0.30685,-0.15516,-0.08371,0.20397,0.60944,1.30259,1.99573,2.21888,2.68888,2.91202,3.60517,4.29832,5.21461,5.90776,6.6009,8.21034,-0.95234,-0.95215,-0.95188,-0.95131,-0.94945,-0.94607,-0.93878,-0.93495,-0.92295,-0.91458,-0.86938,-0.76482,-0.64125,-0.49494,-0.44628,-0.31872,-0.1703,-0.09997,0.1854,0.59183,1.29377,2.00128,2.22986,2.71234,2.94181,3.656,4.37186,5.32014,6.03865,6.75798,8.43064,-0.90908,-0.90899,-0.90885,-0.90854,-0.90742,-0.90521,-0.90009,-0.89728,-0.88814,-0.88156,-0.84422,-0.75211,-0.63833,-0.49991,-0.45329,-0.32999,-0.18504,-0.1159,0.16682,0.57383,1.28412,2.0057,2.23967,2.73451,2.97028,3.70543,4.44398,5.42426,6.16816,6.9137,8.64971,-0.86956,-0.86952,-0.86945,-0.86929,-0.86863,-0.86723,-0.86371,-0.86169,-0.85486,-0.84976,-0.81929,-0.7388,-0.63456,-0.50409,-0.45953,-0.34063,-0.19933,-0.13148,0.14827,0.55549,1.27365,2.00903,2.24831,2.75541,2.99744,3.75347,4.51467,5.52694,6.29626,7.06804,8.86753,-0.83333,-0.83331,-0.83328,-0.8332,-0.83283,-0.83196,-0.82959,-0.82817,-0.82315,-0.81927,-0.79472,-0.72495,-0.62999,-0.50744,-0.46499,-0.35062,-0.21313,-0.14665,0.12979,0.53683,1.2624,2.01128,2.25581,2.77506,3.0233,3.80013,4.58393,5.62818,6.42292,7.22098,9.08403,-0.8,-0.79999,-0.79998,-0.79994,-0.79973,-0.79921,-0.79765,-0.79667,-0.79306,-0.79015,-0.77062,-0.71067,-0.62463,-0.50999,-0.46966,-0.35992,-0.22642,-0.16138,0.11143,0.51789,1.25039,2.01247,2.26217,2.79345,3.04787,3.8454,4.65176,5.72796,6.54814,7.3725,9.2992,-0.76923,-0.76923,-0.76922,-0.7692,-0.76909,-0.76878,-0.76779,-0.76712,-0.76456,-0.76242,-0.74709,-0.69602,-0.61854,-0.51171,-0.47353,-0.36852,-0.23915,-0.17564,0.09323,0.49872,1.23766,2.01263,2.26743,2.81062,3.07116,3.8893,4.71815,5.82629,6.67191,7.52258,9.51301,-0.74074,-0.74074,-0.74074,-0.74073,-0.74067,-0.74049,-0.73987,-0.73943,-0.73765,-0.7361,-0.72422,-0.68111,-0.61176,-0.51263,-0.4766,-0.3764,-0.25129,-0.18939,0.07523,0.47934,1.22422,2.01177,2.2716,2.82658,3.0932,3.93183,4.78313,5.92316,6.79421,7.67121,9.72543,-0.71429,-0.71429,-0.71428,-0.71428,-0.71425,-0.71415,-0.71377,-0.71348,-0.71227,-0.71116,-0.70209,-0.66603,-0.60434,-0.51276,-0.47888,-0.38353,-0.26282,-0.20259,0.05746,0.4598,1.21013,2.00992,2.2747,2.84134,3.11399,3.97301,4.84669,6.01858,6.91505,7.81839,9.93643,-0.68966,-0.68966,-0.68965,-0.68965,-0.68964,-0.68959,-0.68935,-0.68917,-0.68836,-0.68759,-0.68075,-0.65086,-0.59634,-0.51212,-0.48037,-0.38991,-0.27372,-0.21523,0.03997,0.44015,1.19539,2.0071,2.27676,2.85492,3.13356,4.01286,4.90884,6.11254,7.03443,7.96411,10.14602,-0.66667,-0.66667,-0.66667,-0.66667,-0.66666,-0.66663,-0.66649,-0.66638,-0.66585,-0.66532,-0.66023,-0.63569,-0.58783,-0.51073,-0.48109,-0.39554,-0.28395,-0.22726,0.02279,0.4204,1.18006,2.00335,2.2778,2.86735,3.15193,4.05138,4.96959,6.20506,7.15235,8.10836,10.35418,-0.64516,-0.64516,-0.64516,-0.64516,-0.64516,-0.64514,-0.64507,-0.645,-0.64465,-0.64429,-0.64056,-0.6206,-0.57887,-0.50863,-0.48107,-0.40041,-0.29351,-0.23868,0.00596,0.40061,1.16416,1.99869,2.27785,2.87865,3.16911,4.08859,5.02897,6.29613,7.26881,8.25115,10.5609,-0.625,-0.625,-0.625,-0.625,-0.625,-0.62499,-0.62495,-0.62491,-0.62469,-0.62445,-0.62175,-0.60567,-0.56953,-0.50585,-0.48033,-0.40454,-0.30238,-0.24946,-0.0105,0.38081,1.14772,1.99314,2.27693,2.88884,3.18512,4.12452,5.08697,6.38578,7.38382,8.39248,10.76618,-0.60606,-0.60606,-0.60606,-0.60606,-0.60606,-0.60606,-0.60603,-0.60601,-0.60587,-0.60572,-0.60379,-0.59096,-0.55989,-0.50244,-0.4789,-0.40792,-0.31055,-0.25958,-0.02654,0.36104,1.13078,1.98674,2.27506,2.89795,3.2,4.15917,5.14362,6.47401,7.49739,8.53236,10.97001,-0.58824,-0.58824,-0.58824,-0.58824,-0.58824,-0.58823,-0.58822,-0.58821,-0.58812,-0.58802,-0.58666,-0.57652,-0.55,-0.49844,-0.47682,-0.41058,-0.31802,-0.26904,-0.04215,0.34133,1.11337,1.97951,2.27229,2.90599,3.21375,4.19257,5.19892,6.56084,7.60953,8.67079,11.17239,-0.57143,-0.57143,-0.57143,-0.57143,-0.57143,-0.57143,-0.57142,-0.57141,-0.57136,-0.5713,-0.57035,-0.56242,-0.53993,-0.49391,-0.47413,-0.41253,-0.32479,-0.27782,-0.0573,0.32171,1.09552,1.97147,2.26862,2.91299,3.22641,4.22473,5.25291,6.64627,7.72024,8.80779,11.37334,-0.55556,-0.55556,-0.55556,-0.55556,-0.55556,-0.55556,-0.55555,-0.55555,-0.55552,-0.55548,-0.55483,-0.54867,-0.52975,-0.48888,-0.47088,-0.41381,-0.33085,-0.28592,-0.07195,0.30223,1.07726,1.96266,2.26409,2.91898,3.238,4.25569,5.30559,6.73032,7.82954,8.94335,11.57284,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54052,-0.5405,-0.54006,-0.53533,-0.51952,-0.48342,-0.46711,-0.41442,-0.33623,-0.29335,-0.0861,0.2829,1.05863,1.95311,2.25872,2.92397,3.24853,4.28545,5.35698,6.81301,7.93744,9.0775,11.77092,-0.52632,-0.52632,-0.52632,-0.52632,-0.52632,-0.52632,-0.52631,-0.52631,-0.5263,-0.52629,-0.526,-0.5224,-0.50929,-0.47758,-0.46286,-0.41441,-0.34092,-0.3001,-0.09972,0.26376,1.03965,1.94283,2.25254,2.92799,3.25803,4.31403,5.40711,6.89435,8.04395,9.21023,11.96757,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51281,-0.51281,-0.51261,-0.5099,-0.49911,-0.47141,-0.45819,-0.41381,-0.34494,-0.30617,-0.11279,0.24484,1.02036,1.93186,2.24558,2.93107,3.26653,4.34147,5.45598,6.97435,8.1491,9.34158,12.1628,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.49999,-0.49986,-0.49784,-0.48902,-0.46496,-0.45314,-0.41265,-0.34831,-0.31159,-0.1253,0.22617,1.00079,1.92023,2.23786,2.93324,3.27404,4.36777,5.50362,7.05304,8.25289,9.47154,12.35663,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.48772,-0.48622,-0.47906,-0.45828,-0.44777,-0.41097,-0.35105,-0.31635,-0.13725,0.20777,0.98096,1.90796,2.2294,2.9345,3.2806,4.39296,5.55005,7.13043,8.35534,9.60013,12.54906,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47614,-0.47504,-0.46927,-0.45142,-0.44212,-0.40881,-0.35318,-0.32049,-0.14861,0.18967,0.9609,1.89508,2.22024,2.93489,3.28622,4.41706,5.59528,7.20654,8.45646,9.72737,12.7401,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46511,-0.46508,-0.46428,-0.45967,-0.44442,-0.43623,-0.40621,-0.35473,-0.324,-0.15939,0.17189,0.94064,1.8816,2.21039,2.93443,3.29092,4.44009,5.63934,7.28138,8.55627,9.85326,12.92977,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45454,-0.45452,-0.45395,-0.45029,-0.43734,-0.43016,-0.40321,-0.35572,-0.32693,-0.16958,0.15445,0.92022,1.86757,2.19988,2.93314,3.29473,4.46207,5.68224,7.35497,8.65479,9.97784,13.11808,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44443,-0.44402,-0.44114,-0.4302,-0.42394,-0.39985,-0.35619,-0.32928,-0.17918,0.13737,0.89964,1.853,2.18874,2.93105,3.29767,4.48303,5.724,7.42733,8.75202,10.1011,13.30504,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43477,-0.43448,-0.43223,-0.42304,-0.41761,-0.39617,-0.35616,-0.33108,-0.18819,0.12067,0.87895,1.83792,2.17699,2.92818,3.29976,4.50297,5.76464,7.49847,8.848,10.22307,13.49066,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42532,-0.42357,-0.4159,-0.41121,-0.39221,-0.35567,-0.33236,-0.19661,0.10436,0.85817,1.82234,2.16465,2.92455,3.30103,4.52192,5.80418,7.56842,8.94273,10.34375,13.67495,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41666,-0.41652,-0.41517,-0.4088,-0.40477,-0.388,-0.35475,-0.33315,-0.20446,0.08847,0.83731,1.80631,2.15174,2.92017,3.30149,4.5399,5.84265,7.63718,9.03623,10.46318,13.85794,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40806,-0.40703,-0.40177,-0.39833,-0.38359,-0.35343,-0.33347,-0.21172,0.073,0.81641,1.78982,2.13829,2.91508,3.30116,4.55694,5.88004,7.70479,9.12852,10.58135,14.03963,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.39993,-0.39914,-0.39482,-0.3919,-0.37901,-0.35174,-0.33336,-0.21843,0.05798,0.79548,1.77292,2.12432,2.9093,3.30007,4.57304,5.91639,7.77124,9.21961,10.69829,14.22004,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39211,-0.39152,-0.38799,-0.38552,-0.37428,-0.34972,-0.33284,-0.22458,0.0434,0.77455,1.75563,2.10985,2.90283,3.29823,4.58823,5.95171,7.83657,9.30952,10.81401,14.39918,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38458,-0.38414,-0.38127,-0.37919,-0.36945,-0.3474,-0.33194,-0.23019,0.02927,0.75364,1.73795,2.0949,2.89572,3.29567,4.60252,5.98602,7.90078,9.39827,10.92853,14.57706,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37734,-0.37701,-0.37469,-0.37295,-0.36453,-0.34481,-0.3307,-0.23527,0.01561,0.73277,1.71992,2.0795,2.88796,3.2924,4.61594,6.01934,7.9639,9.48586,11.04186,14.7537,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37036,-0.37011,-0.36825,-0.3668,-0.35956,-0.34198,-0.32914,-0.23984,0.00243,0.71195,1.70155,2.06365,2.87959,3.28844,4.6285,6.05169,8.02594,9.57232,11.15402,14.92912,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36363,-0.36345,-0.36196,-0.36076,-0.35456,-0.33895,-0.32729,-0.24391,-0.01028,0.69122,1.68287,2.04739,2.87062,3.28381,4.64022,6.08307,8.08691,9.65766,11.26502,15.10332,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.357,-0.35583,-0.35484,-0.34955,-0.33573,-0.32519,-0.24751,-0.02252,0.67058,1.6639,2.03073,2.86107,3.27854,4.65111,6.11351,8.14683,9.7419,11.37487,15.27632,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35087,-0.35078,-0.34985,-0.34903,-0.34455,-0.33236,-0.32285,-0.25064,-0.03427,0.65006,1.64464,2.01369,2.85096,3.27263,4.6612,6.14302,8.20572,9.82505,11.4836,15.44813,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34476,-0.34402,-0.34336,-0.33957,-0.32886,-0.32031,-0.25334,-0.04553,0.62966,1.62513,1.99629,2.8403,3.2661,4.6705,6.17162,8.26359,9.90713,11.59122,15.61878,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33893,-0.33836,-0.33782,-0.33463,-0.32525,-0.31759,-0.25562,-0.05632,0.60941,1.60538,1.97855,2.82912,3.25898,4.67903,6.19933,8.32046,9.98815,11.69773,15.78826,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.3333,-0.33285,-0.33242,-0.32974,-0.32155,-0.31472,-0.2575,-0.06662,0.58933,1.58541,1.96048,2.81743,3.25128,4.6868,6.22616,8.37634,10.06812,11.80316,15.9566,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32784,-0.3275,-0.32715,-0.32492,-0.3178,-0.31171,-0.25901,-0.07645,0.56942,1.56524,1.9421,2.80525,3.24301,4.69382,6.25212,8.43125,10.14706,11.90752,16.1238,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32256,-0.3223,-0.32202,-0.32016,-0.31399,-0.30859,-0.26015,-0.0858,0.5497,1.54487,1.92343,2.79259,3.23419,4.70013,6.27723,8.48519,10.22499,12.01082,16.28989,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31745,-0.31724,-0.31702,-0.31549,-0.31016,-0.30538,-0.26097,-0.09469,0.53019,1.52434,1.90449,2.77947,3.22484,4.70571,6.30151,8.5382,10.30192,12.11307,16.45487,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.31249,-0.31234,-0.31216,-0.3109,-0.30631,-0.30209,-0.26146,-0.10311,0.51089,1.50365,1.88528,2.76591,3.21497,4.71061,6.32497,8.59027,10.37785,12.21429,16.61875,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30757,-0.30743,-0.30639,-0.30246,-0.29875,-0.26167,-0.11107,0.49182,1.48281,1.86584,2.75191,3.2046,4.71482,6.34762,8.64142,10.45281,12.3145,16.78156,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30294,-0.30283,-0.30198,-0.29862,-0.29537,-0.2616,-0.11859,0.47299,1.46186,1.84616,2.73751,3.19374,4.71836,6.36948,8.69167,10.52681,12.4137,16.94329,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.2985,-0.29844,-0.29835,-0.29766,-0.2948,-0.29196,-0.26128,-0.12566,0.4544,1.44079,1.82627,2.7227,3.18241,4.72125,6.39055,8.74102,10.59986,12.5119,17.10397,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29407,-0.294,-0.29344,-0.29101,-0.28854,-0.26072,-0.13231,0.43608,1.41963,1.80618,2.70751,3.17062,4.7235,6.41086,8.7895,10.67197,12.60913,17.26361,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28985,-0.28982,-0.28977,-0.28931,-0.28726,-0.28511,-0.25995,-0.13853,0.41803,1.39839,1.78591,2.69195,3.15838,4.72512,6.43042,8.83711,10.74316,12.70539,17.42221,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28569,-0.28565,-0.28528,-0.28355,-0.28169,-0.25899,-0.14434,0.40026,1.37708,1.76547,2.67603,3.14572,4.72613,6.44924,8.88387,10.81343,12.80069,17.57979,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28167,-0.28164,-0.28135,-0.2799,-0.27829,-0.25785,-0.14975,0.38277,1.35571,1.74487,2.65977,3.13263,4.72653,6.46733,8.92979,10.88281,12.89505,17.73636,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27776,-0.27774,-0.27751,-0.27629,-0.27491,-0.25654,-0.15478,0.36557,1.3343,1.72412,2.64317,3.11914,4.72635,6.4847,8.97488,10.95129,12.98848,17.89193,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27396,-0.27394,-0.27376,-0.27274,-0.27156,-0.2551,-0.15942,0.34868,1.31287,1.70325,2.62626,3.10525,4.72559,6.50137,9.01915,11.0189,13.08098,18.04652,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27026,-0.27025,-0.2701,-0.26926,-0.26825,-0.25352,-0.16371,0.33209,1.29141,1.68225,2.60905,3.09099,4.72427,6.51735,9.06261,11.08565,13.17258,18.20013,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26666,-0.26665,-0.26654,-0.26584,-0.26497,-0.25183,-0.16764,0.31582,1.26995,1.66115,2.59154,3.07636,4.7224,6.53264,9.10528,11.15154,13.26328,18.35278,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26315,-0.26315,-0.26306,-0.26248,-0.26175,-0.25005,-0.17123,0.29986,1.2485,1.63995,2.57375,3.06137,4.71998,6.54727,9.14717,11.21658,13.35309,18.50447,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25973,-0.25966,-0.25919,-0.25857,-0.24817,-0.1745,0.28422,1.22706,1.61867,2.55569,3.04604,4.71704,6.56124,9.18828,11.2808,13.44202,18.65522,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.2564,-0.25635,-0.25596,-0.25544,-0.24622,-0.17746,0.26892,1.20565,1.59732,2.53737,3.03038,4.71358,6.57456,9.22863,11.34419,13.53009,18.80504,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25312,-0.2528,-0.25236,-0.24421,-0.18012,0.25394,1.18427,1.57591,2.51881,3.01439,4.70961,6.58725,9.26823,11.40677,13.6173,18.95393,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.24996,-0.2497,-0.24933,-0.24214,-0.18249,0.23929,1.16295,1.55444,2.50001,2.9981,4.70514,6.59931,9.30709,11.46855,13.70366,19.10191,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24689,-0.24667,-0.24637,-0.24003,-0.18459,0.22498,1.14168,1.53294,2.48099,2.9815,4.70019,6.61075,9.34521,11.52953,13.78919,19.24898,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.24388,-0.24371,-0.24345,-0.23788,-0.18643,0.21101,1.12048,1.51141,2.46175,2.96462,4.69476,6.62159,9.38262,11.58974,13.87389,19.39517,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24095,-0.24081,-0.2406,-0.23571,-0.18803,0.19737,1.09936,1.48985,2.44231,2.94746,4.68887,6.63183,9.41931,11.64917,13.95778,19.54046,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.23809,-0.23808,-0.23797,-0.23779,-0.23352,-0.18939,0.18408,1.07832,1.46829,2.42268,2.93002,4.68252,6.64148,9.4553,11.70785,14.04086,19.68489,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23528,-0.2352,-0.23505,-0.23132,-0.19054,0.17113,1.05738,1.44673,2.40287,2.91234,4.67573,6.65056,9.4906,11.76576,14.12314,19.82845,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23255,-0.23248,-0.23236,-0.22911,-0.19147,0.15851,1.03654,1.42518,2.38288,2.8944,4.6685,6.65907,9.52521,11.82294,14.20463,19.97115,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22988,-0.22988,-0.22988,-0.22982,-0.22972,-0.2269,-0.19221,0.14624,1.01581,1.40364,2.36273,2.87622,4.66085,6.66703,9.55915,11.87938,14.28534,20.113,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22722,-0.22714,-0.22469,-0.19277,0.13431,0.99519,1.38213,2.34242,2.85782,4.65277,6.67443,9.59243,11.93509,14.36528,20.25402,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22468,-0.22461,-0.22249,-0.19316,0.12272,0.97471,1.36065,2.32197,2.83919,4.64429,6.6813,9.62504,11.99009,14.44446,20.3942,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22219,-0.22214,-0.2203,-0.19338,0.11146,0.95435,1.33922,2.30138,2.82035,4.63541,6.68763,9.65701,12.04437,14.52288,20.53356};
+    public static double[] column3 = {-20.53356,-14.52288,-12.04437,-9.65701,-6.68763,-4.63541,-2.82035,-2.30138,-1.33922,-0.95435,-0.11146,0.19338,0.2203,0.22214,0.22219,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,0.22222,-20.3942,-14.44446,-11.99009,-9.62504,-6.6813,-4.64429,-2.83919,-2.32197,-1.36065,-0.97471,-0.12272,0.19316,0.22249,0.22461,0.22468,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,0.22472,-20.25402,-14.36528,-11.93509,-9.59243,-6.67443,-4.65277,-2.85782,-2.34242,-1.38213,-0.99519,-0.13431,0.19277,0.22469,0.22714,0.22722,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,0.22727,-20.113,-14.28534,-11.87938,-9.55915,-6.66703,-4.66085,-2.87622,-2.36273,-1.40364,-1.01581,-0.14624,0.19221,0.2269,0.22972,0.22982,0.22988,0.22988,0.22988,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,0.22989,-19.97115,-14.20463,-11.82294,-9.52521,-6.65907,-4.6685,-2.8944,-2.38288,-1.42518,-1.03654,-0.15851,0.19147,0.22911,0.23236,0.23248,0.23255,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,0.23256,-19.82845,-14.12314,-11.76576,-9.4906,-6.65056,-4.67573,-2.91234,-2.40287,-1.44673,-1.05738,-0.17113,0.19054,0.23132,0.23505,0.2352,0.23528,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,0.23529,-19.68489,-14.04086,-11.70785,-9.4553,-6.64148,-4.68252,-2.93002,-2.42268,-1.46829,-1.07832,-0.18408,0.18939,0.23352,0.23779,0.23797,0.23808,0.23809,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,0.2381,-19.54046,-13.95778,-11.64917,-9.41931,-6.63183,-4.68887,-2.94746,-2.44231,-1.48985,-1.09936,-0.19737,0.18803,0.23571,0.2406,0.24081,0.24095,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,0.24096,-19.39517,-13.87389,-11.58974,-9.38262,-6.62159,-4.69476,-2.96462,-2.46175,-1.51141,-1.12048,-0.21101,0.18643,0.23788,0.24345,0.24371,0.24388,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,0.2439,-19.24898,-13.78919,-11.52953,-9.34521,-6.61075,-4.70019,-2.9815,-2.48099,-1.53294,-1.14168,-0.22498,0.18459,0.24003,0.24637,0.24667,0.24689,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,0.24691,-19.10191,-13.70366,-11.46855,-9.30709,-6.59931,-4.70514,-2.9981,-2.50001,-1.55444,-1.16295,-0.23929,0.18249,0.24214,0.24933,0.2497,0.24996,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,-18.95393,-13.6173,-11.40677,-9.26823,-6.58725,-4.70961,-3.01439,-2.51881,-1.57591,-1.18427,-0.25394,0.18012,0.24421,0.25236,0.2528,0.25312,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,0.25316,-18.80504,-13.53009,-11.34419,-9.22863,-6.57456,-4.71358,-3.03038,-2.53737,-1.59732,-1.20565,-0.26892,0.17746,0.24622,0.25544,0.25596,0.25635,0.2564,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,0.25641,-18.65522,-13.44202,-11.2808,-9.18828,-6.56124,-4.71704,-3.04604,-2.55569,-1.61867,-1.22706,-0.28422,0.1745,0.24817,0.25857,0.25919,0.25966,0.25973,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,0.25974,-18.50447,-13.35309,-11.21658,-9.14717,-6.54727,-4.71998,-3.06137,-2.57375,-1.63995,-1.2485,-0.29986,0.17123,0.25005,0.26175,0.26248,0.26306,0.26315,0.26315,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,0.26316,-18.35278,-13.26328,-11.15154,-9.10528,-6.53264,-4.7224,-3.07636,-2.59154,-1.66115,-1.26995,-0.31582,0.16764,0.25183,0.26497,0.26584,0.26654,0.26665,0.26666,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,0.26667,-18.20013,-13.17258,-11.08565,-9.06261,-6.51735,-4.72427,-3.09099,-2.60905,-1.68225,-1.29141,-0.33209,0.16371,0.25352,0.26825,0.26926,0.2701,0.27025,0.27026,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,0.27027,-18.04652,-13.08098,-11.0189,-9.01915,-6.50137,-4.72559,-3.10525,-2.62626,-1.70325,-1.31287,-0.34868,0.15942,0.2551,0.27156,0.27274,0.27376,0.27394,0.27396,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,0.27397,-17.89193,-12.98848,-10.95129,-8.97488,-6.4847,-4.72635,-3.11914,-2.64317,-1.72412,-1.3343,-0.36557,0.15478,0.25654,0.27491,0.27629,0.27751,0.27774,0.27776,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,0.27778,-17.73636,-12.89505,-10.88281,-8.92979,-6.46733,-4.72653,-3.13263,-2.65977,-1.74481,-1.35571,-0.38277,0.14975,0.25785,0.27829,0.2799,0.28135,0.28164,0.28167,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,0.28169,-17.57979,-12.80069,-10.81343,-8.88387,-6.44924,-4.72613,-3.14572,-2.67603,-1.76547,-1.37708,-0.40026,0.14434,0.25899,0.28169,0.28355,0.28528,0.28565,0.28569,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,0.28571,-17.42221,-12.70539,-10.74316,-8.83711,-6.43042,-4.72512,-3.15838,-2.69195,-1.78591,-1.39839,-0.41803,0.13853,0.25995,0.28511,0.28726,0.28931,0.28977,0.28982,0.28985,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,0.28986,-17.26361,-12.60913,-10.67197,-8.7895,-6.41086,-4.7235,-3.17062,-2.70751,-1.80618,-1.41963,-0.43608,0.13231,0.26072,0.28854,0.29101,0.29344,0.294,0.29407,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,0.29412,-17.10397,-12.5119,-10.59986,-8.74102,-6.39055,-4.72125,-3.18241,-2.7227,-1.82627,-1.44079,-0.4544,0.12566,0.26128,0.29196,0.2948,0.29766,0.29835,0.29844,0.2985,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,0.29851,-16.94329,-12.4137,-10.52681,-8.69167,-6.36948,-4.71836,-3.19374,-2.73751,-1.84616,-1.46186,-0.47299,0.11859,0.2616,0.29537,0.29862,0.30198,0.30283,0.30294,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,0.30303,-16.78156,-12.3145,-10.45281,-8.64142,-6.34762,-4.71482,-3.2046,-2.75191,-1.86584,-1.48281,-0.49182,0.11107,0.26167,0.29875,0.30246,0.30639,0.30743,0.30757,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,0.30769,-16.61875,-12.21429,-10.37785,-8.59027,-6.32497,-4.71061,-3.21497,-2.76591,-1.88528,-1.50365,-0.51089,0.10311,0.26146,0.30209,0.30631,0.3109,0.31216,0.31234,0.31249,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,0.3125,-16.45487,-12.11307,-10.30192,-8.5382,-6.30151,-4.70571,-3.22484,-2.77947,-1.90449,-1.52434,-0.53019,0.09469,0.26097,0.30538,0.31016,0.31549,0.31702,0.31724,0.31745,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,0.31746,-16.28989,-12.01082,-10.22499,-8.48519,-6.27723,-4.70013,-3.23419,-2.79259,-1.92343,-1.54487,-0.5497,0.0858,0.26015,0.30859,0.31399,0.32016,0.32202,0.3223,0.32256,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,0.32258,-16.1238,-11.90752,-10.14706,-8.43125,-6.25212,-4.69382,-3.24301,-2.80525,-1.9421,-1.56524,-0.56942,0.07645,0.25901,0.31171,0.3178,0.32492,0.32715,0.3275,0.32784,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,0.32787,-15.9566,-11.80316,-10.06812,-8.37634,-6.22616,-4.6868,-3.25128,-2.81743,-1.96048,-1.58541,-0.58933,0.06662,0.2575,0.31472,0.32155,0.32974,0.33242,0.33285,0.3333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,0.33333,-15.78826,-11.69773,-9.98815,-8.32046,-6.19933,-4.67903,-3.25898,-2.82912,-1.97855,-1.60538,-0.60941,0.05632,0.25562,0.31759,0.32525,0.33463,0.33782,0.33836,0.33893,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,0.33898,-15.61878,-11.59122,-9.90713,-8.26359,-6.17162,-4.6705,-3.2661,-2.8403,-1.99629,-1.62513,-0.62966,0.04553,0.25334,0.32031,0.32886,0.33957,0.34336,0.34402,0.34476,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,0.34483,-15.44813,-11.4836,-9.82505,-8.20572,-6.14302,-4.6612,-3.27263,-2.85096,-2.01369,-1.64464,-0.65006,0.03427,0.25064,0.32285,0.33236,0.34455,0.34903,0.34985,0.35078,0.35087,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,0.35088,-15.27632,-11.37487,-9.7419,-8.14683,-6.11351,-4.65111,-3.27854,-2.86107,-2.03073,-1.6639,-0.67058,0.02252,0.24751,0.32519,0.33573,0.34955,0.35484,0.35583,0.357,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,-15.10332,-11.26502,-9.65766,-8.08691,-6.08307,-4.64022,-3.28381,-2.87062,-2.04739,-1.68287,-0.69122,0.01028,0.24391,0.32729,0.33895,0.35456,0.36076,0.36196,0.36345,0.36363,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,0.36364,-14.92912,-11.15402,-9.57232,-8.02594,-6.05169,-4.6285,-3.28844,-2.87959,-2.06365,-1.70155,-0.71195,-0.00243,0.23984,0.32914,0.34198,0.35956,0.3668,0.36825,0.37011,0.37036,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,0.37037,-14.7537,-11.04186,-9.48586,-7.9639,-6.01934,-4.61594,-3.2924,-2.88796,-2.0795,-1.71992,-0.73277,-0.01561,0.23527,0.3307,0.34481,0.36453,0.37295,0.37469,0.37701,0.37734,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,0.37736,-14.57706,-10.92853,-9.39827,-7.90078,-5.98602,-4.60252,-3.29567,-2.89572,-2.0949,-1.73795,-0.75364,-0.02927,0.23019,0.33194,0.3474,0.36945,0.37919,0.38127,0.38414,0.38458,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,0.38462,-14.39918,-10.81401,-9.30952,-7.83657,-5.95171,-4.58823,-3.29823,-2.90283,-2.10985,-1.75563,-0.77455,-0.0434,0.22458,0.33284,0.34972,0.37428,0.38552,0.38799,0.39152,0.39211,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,0.39216,-14.22004,-10.69829,-9.21961,-7.77124,-5.91639,-4.57304,-3.30007,-2.9093,-2.12432,-1.77292,-0.79548,-0.05798,0.21843,0.33336,0.35174,0.37901,0.3919,0.39482,0.39914,0.39993,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,-14.03963,-10.58135,-9.12852,-7.70479,-5.88004,-4.55694,-3.30116,-2.91508,-2.13829,-1.78982,-0.81641,-0.073,0.21172,0.33347,0.35343,0.38359,0.39833,0.40177,0.40703,0.40806,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,0.40816,-13.85794,-10.46318,-9.03623,-7.63718,-5.84265,-4.5399,-3.30149,-2.92017,-2.15174,-1.80631,-0.83731,-0.08847,0.20446,0.33315,0.35475,0.388,0.40477,0.4088,0.41517,0.41652,0.41666,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,0.41667,-13.67495,-10.34375,-8.94273,-7.56842,-5.80418,-4.52192,-3.30103,-2.92455,-2.16465,-1.82234,-0.85817,-0.10436,0.19661,0.33236,0.35567,0.39221,0.41121,0.4159,0.42357,0.42532,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,0.42553,-13.49066,-10.22307,-8.848,-7.49847,-5.76464,-4.50297,-3.29976,-2.92818,-2.17699,-1.83792,-0.87895,-0.12067,0.18819,0.33108,0.35616,0.39617,0.41761,0.42304,0.43223,0.43448,0.43477,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,0.43478,-13.30504,-10.1011,-8.75202,-7.42733,-5.724,-4.48303,-3.29767,-2.93105,-2.18874,-1.853,-0.89964,-0.13737,0.17918,0.32928,0.35619,0.39985,0.42394,0.4302,0.44114,0.44402,0.44443,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,0.44444,-13.11808,-9.97784,-8.65479,-7.35497,-5.68224,-4.46207,-3.29473,-2.93314,-2.19988,-1.86757,-0.92022,-0.15445,0.16958,0.32693,0.35572,0.40321,0.43016,0.43734,0.45029,0.45395,0.45452,0.45454,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,0.45455,-12.92977,-9.85326,-8.55627,-7.28138,-5.63934,-4.44009,-3.29092,-2.93443,-2.21039,-1.8816,-0.94064,-0.17189,0.15939,0.324,0.35473,0.40621,0.43623,0.44442,0.45967,0.46428,0.46508,0.46511,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,0.46512,-12.7401,-9.72737,-8.45646,-7.20654,-5.59528,-4.41706,-3.28622,-2.93489,-2.22024,-1.89508,-0.9609,-0.18967,0.14861,0.32049,0.35318,0.40881,0.44212,0.45142,0.46927,0.47504,0.47614,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,0.47619,-12.54906,-9.60013,-8.35534,-7.13043,-5.55005,-4.39296,-3.2806,-2.9345,-2.2294,-1.90796,-0.98096,-0.20777,0.13725,0.31635,0.35105,0.41097,0.44777,0.45828,0.47906,0.48622,0.48772,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,0.4878,-12.35663,-9.47154,-8.25289,-7.05304,-5.50362,-4.36777,-3.27404,-2.93324,-2.23786,-1.92023,-1.00079,-0.22617,0.1253,0.31159,0.34831,0.41265,0.45314,0.46496,0.48902,0.49784,0.49986,0.49999,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,-12.1628,-9.34158,-8.1491,-6.97435,-5.45598,-4.34147,-3.26653,-2.93107,-2.24558,-1.93186,-1.02036,-0.24484,0.11279,0.30617,0.34494,0.41381,0.45819,0.47141,0.49911,0.5099,0.51261,0.51281,0.51281,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,0.51282,-11.96757,-9.21023,-8.04395,-6.89435,-5.40711,-4.31403,-3.25803,-2.92799,-2.25254,-1.94283,-1.03965,-0.26376,0.09972,0.3001,0.34092,0.41441,0.46286,0.47758,0.50929,0.5224,0.526,0.52629,0.5263,0.52631,0.52631,0.52632,0.52632,0.52632,0.52632,0.52632,0.52632,-11.77092,-9.0775,-7.93744,-6.81301,-5.35698,-4.28545,-3.24853,-2.92397,-2.25872,-1.95311,-1.05863,-0.2829,0.0861,0.29335,0.33623,0.41442,0.46711,0.48342,0.51952,0.53533,0.54006,0.5405,0.54052,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,0.54054,-11.57284,-8.94335,-7.82954,-6.73032,-5.30559,-4.25569,-3.238,-2.91898,-2.26409,-1.96266,-1.07726,-0.30223,0.07195,0.28592,0.33085,0.41381,0.47088,0.48888,0.52975,0.54867,0.55483,0.55548,0.55552,0.55555,0.55555,0.55556,0.55556,0.55556,0.55556,0.55556,0.55556,-11.37334,-8.80779,-7.72024,-6.64627,-5.25291,-4.22473,-3.22641,-2.91299,-2.26862,-1.97147,-1.09552,-0.32171,0.0573,0.27782,0.32479,0.41253,0.47413,0.49391,0.53993,0.56242,0.57035,0.5713,0.57136,0.57141,0.57142,0.57143,0.57143,0.57143,0.57143,0.57143,0.57143,-11.17239,-8.67079,-7.60953,-6.56084,-5.19892,-4.19257,-3.21375,-2.90599,-2.27229,-1.97951,-1.11337,-0.34133,0.04215,0.26904,0.31802,0.41058,0.47682,0.49844,0.55,0.57652,0.58666,0.58802,0.58812,0.58821,0.58822,0.58823,0.58824,0.58824,0.58824,0.58824,0.58824,-10.97001,-8.53236,-7.49739,-6.47401,-5.14362,-4.15917,-3.2,-2.89795,-2.27506,-1.98674,-1.13078,-0.36104,0.02654,0.25958,0.31055,0.40792,0.4789,0.50244,0.55989,0.59096,0.60379,0.60572,0.60587,0.60601,0.60603,0.60606,0.60606,0.60606,0.60606,0.60606,0.60606,-10.76618,-8.39248,-7.38382,-6.38578,-5.08697,-4.12452,-3.18512,-2.88884,-2.27693,-1.99314,-1.14772,-0.38081,0.0105,0.24946,0.30238,0.40454,0.48033,0.50585,0.56953,0.60567,0.62175,0.62445,0.62469,0.62491,0.62495,0.62499,0.625,0.625,0.625,0.625,0.625,-10.5609,-8.25115,-7.26881,-6.29613,-5.02897,-4.08859,-3.16911,-2.87865,-2.27785,-1.99869,-1.16416,-0.40061,-0.00596,0.23868,0.29351,0.40041,0.48107,0.50863,0.57887,0.6206,0.64056,0.64429,0.64465,0.645,0.64507,0.64514,0.64516,0.64516,0.64516,0.64516,0.64516,-10.35418,-8.10836,-7.15235,-6.20506,-4.96959,-4.05138,-3.15193,-2.86735,-2.2778,-2.00335,-1.18006,-0.4204,-0.02279,0.22726,0.28395,0.39554,0.48109,0.51073,0.58783,0.63569,0.66023,0.66532,0.66585,0.66638,0.66649,0.66663,0.66666,0.66667,0.66667,0.66667,0.66667,-10.14602,-7.96411,-7.03443,-6.11254,-4.90884,-4.01286,-3.13356,-2.85492,-2.27676,-2.0071,-1.19539,-0.44015,-0.03997,0.21523,0.27372,0.38991,0.48037,0.51212,0.59634,0.65086,0.68075,0.68759,0.68836,0.68917,0.68935,0.68959,0.68964,0.68965,0.68965,0.68966,0.68966,-9.93643,-7.81839,-6.91505,-6.01858,-4.84669,-3.97301,-3.11399,-2.84134,-2.2747,-2.00992,-1.21013,-0.4598,-0.05746,0.20259,0.26282,0.38353,0.47888,0.51276,0.60434,0.66603,0.70209,0.71116,0.71227,0.71348,0.71377,0.71415,0.71425,0.71428,0.71428,0.71429,0.71429,-9.72543,-7.67121,-6.79421,-5.92316,-4.78313,-3.93183,-3.0932,-2.82658,-2.2716,-2.01177,-1.22422,-0.47934,-0.07523,0.18939,0.25129,0.3764,0.4766,0.51263,0.61176,0.68111,0.72422,0.7361,0.73765,0.73943,0.73987,0.74049,0.74067,0.74073,0.74074,0.74074,0.74074,-9.51301,-7.52258,-6.67191,-5.82629,-4.71815,-3.8893,-3.07116,-2.81062,-2.26743,-2.01263,-1.23766,-0.49872,-0.09323,0.17564,0.23915,0.36852,0.47353,0.51171,0.61854,0.69602,0.74709,0.76242,0.76456,0.76712,0.76779,0.76878,0.76909,0.7692,0.76922,0.76923,0.76923,-9.2992,-7.3725,-6.54814,-5.72796,-4.65176,-3.8454,-3.04787,-2.79345,-2.26217,-2.01247,-1.25039,-0.51789,-0.11143,0.16138,0.22642,0.35992,0.46966,0.50999,0.62463,0.71067,0.77062,0.79015,0.79306,0.79667,0.79765,0.79921,0.79973,0.79994,0.79998,0.79999,0.8,-9.08403,-7.22098,-6.42292,-5.62818,-4.58393,-3.80013,-3.0233,-2.77506,-2.25581,-2.01128,-1.2624,-0.53683,-0.12979,0.14665,0.21313,0.35062,0.46499,0.50744,0.62999,0.72495,0.79472,0.81927,0.82315,0.82817,0.82959,0.83196,0.83283,0.8332,0.83328,0.83331,0.83333,-8.86753,-7.06804,-6.29626,-5.52694,-4.51467,-3.75347,-2.99744,-2.75541,-2.24831,-2.00903,-1.27365,-0.55549,-0.14827,0.13148,0.19933,0.34063,0.45953,0.50409,0.63456,0.7388,0.81929,0.84976,0.85486,0.86169,0.86371,0.86723,0.86863,0.86929,0.86945,0.86952,0.86956,-8.64971,-6.9137,-6.16816,-5.42426,-4.44398,-3.70543,-2.97028,-2.73451,-2.23967,-2.0057,-1.28412,-0.57383,-0.16682,0.1159,0.18504,0.32999,0.45329,0.49991,0.63833,0.75211,0.84422,0.88156,0.88814,0.89728,0.90009,0.90521,0.90742,0.90854,0.90885,0.90899,0.90908,-8.43064,-6.75798,-6.03865,-5.32014,-4.37186,-3.656,-2.94181,-2.71234,-2.22986,-2.00128,-1.29377,-0.59183,-0.1854,0.09997,0.1703,0.31872,0.44628,0.49494,0.64125,0.76482,0.86938,0.91458,0.92295,0.93495,0.93878,0.94607,0.94945,0.95131,0.95188,0.95215,0.95234,-8.21034,-6.6009,-5.90776,-5.21461,-4.29832,-3.60517,-2.91202,-2.68888,-2.21888,-1.99573,-1.30259,-0.60944,-0.20397,0.08371,0.15516,0.30685,0.43854,0.48917,0.64333,0.77686,0.89464,0.94871,0.95918,0.97468,0.9798,0.98995,0.99499,0.998,0.999,0.9995,0.9999,-7.98888,-6.44251,-5.77549,-5.10768,-4.22336,-3.55295,-2.88091,-2.66413,-2.2067,-1.98906,-1.31054,-0.62662,-0.2225,0.06718,0.13964,0.29443,0.43008,0.48265,0.64453,0.78816,0.91988,0.98381,0.99672,1.0164,1.02311,1.03695,1.04427,1.04898,1.05068,1.05159,1.05239,-7.76632,-6.28285,-5.6419,-4.99937,-4.147,-3.49935,-2.84848,-2.6381,-2.19332,-1.98124,-1.3176,-0.64335,-0.24094,0.0504,0.12381,0.2815,0.42095,0.47538,0.64488,0.79868,0.94496,1.01973,1.03543,1.06001,1.06864,1.08711,1.09749,1.10465,1.10743,1.10901,1.11054,-7.54272,-6.12196,-5.50701,-4.88971,-4.06926,-3.44438,-2.81472,-2.61076,-2.17873,-1.97227,-1.32376,-0.65959,-0.25925,0.03344,0.10769,0.26808,0.41116,0.46739,0.64436,0.80837,0.96977,1.05631,1.07513,1.10537,1.11628,1.14042,1.15477,1.16534,1.16974,1.1724,1.1752,-7.31818,-5.9599,-5.37087,-4.77875,-3.99016,-3.38804,-2.77964,-2.58214,-2.16293,-1.96213,-1.329,-0.67532,-0.2774,0.01631,0.09132,0.25422,0.40075,0.45873,0.643,0.8172,0.99418,1.09338,1.11566,1.15229,1.16584,1.1968,1.21618,1.23132,1.23805,1.24235,1.24728,-7.09277,-5.79673,-5.23353,-4.66651,-3.90973,-3.33035,-2.74325,-2.55222,-2.14591,-1.95083,-1.3333,-0.6905,-0.29535,-0.00092,0.07476,0.23996,0.38977,0.44942,0.6408,0.82516,1.0181,1.13075,1.15682,1.20059,1.21716,1.25611,1.28167,1.30279,1.31275,1.31944,1.32774,-6.86661,-5.63252,-5.09505,-4.55304,-3.82798,-3.27134,-2.70556,-2.52102,-2.12768,-1.93836,-1.33665,-0.70512,-0.31307,-0.01824,0.05803,0.22535,0.37824,0.43949,0.63779,0.83223,1.04144,1.16827,1.19842,1.25004,1.26999,1.31815,1.35114,1.37981,1.39408,1.40413,1.41753,-6.6398,-5.46735,-4.95549,-4.43839,-3.74497,-3.21103,-2.66657,-2.48855,-2.10823,-1.92472,-1.33904,-0.71915,-0.33054,-0.0356,0.04116,0.2104,0.3662,0.42899,0.634,0.83841,1.06413,1.20578,1.24028,1.30042,1.32412,1.38267,1.42439,1.46232,1.48216,1.49673,1.51752,-6.41249,-5.3013,-4.81492,-4.32263,-3.66073,-3.14944,-2.62631,-2.45482,-2.08758,-1.90992,-1.34047,-0.73257,-0.34772,-0.05297,0.02421,0.19517,0.3537,0.41794,0.62944,0.84369,1.08608,1.24313,1.28225,1.35153,1.37929,1.44942,1.50114,1.55016,1.57695,1.59738,1.62838,-6.1848,-5.13449,-4.67344,-4.20582,-3.5753,-3.0866,-2.5848,-2.41984,-2.06573,-1.89395,-1.34092,-0.74537,-0.36458,-0.07032,0.00719,0.17968,0.34075,0.40638,0.62415,0.84809,1.10726,1.28019,1.32414,1.40314,1.43529,1.51808,1.5811,1.64305,1.67825,1.70603,1.75053,-5.95691,-4.96701,-4.53112,-4.08802,-3.48874,-3.02256,-2.54206,-2.38364,-2.04269,-1.87683,-1.34039,-0.75752,-0.38111,-0.08763,-0.00987,0.16397,0.3274,0.39434,0.61815,0.85161,1.12762,1.31684,1.36584,1.45507,1.49188,1.58838,1.6639,1.74062,1.78572,1.82241,1.8841,-5.72899,-4.79899,-4.38807,-3.96932,-3.40109,-2.95735,-2.49811,-2.34623,-2.01848,-1.85856,-1.33889,-0.76902,-0.39729,-0.10486,-0.02693,0.14807,0.31368,0.38186,0.61146,0.85426,1.14712,1.35299,1.4072,1.50712,1.54886,1.66001,1.74919,1.84244,1.89894,1.94611,2.02891,-5.50124,-4.63057,-4.24439,-3.84981,-3.31243,-2.89101,-2.45298,-2.30764,-1.99311,-1.83916,-1.3364,-0.77986,-0.41309,-0.12199,-0.04397,0.13199,0.29961,0.36889,0.60412,0.85607,1.16574,1.38855,1.44813,1.55914,1.60604,1.73271,1.8366,1.94806,2.01739,2.07661,2.18448,-5.27389,-4.46189,-4.10022,-3.72957,-3.22281,-2.82359,-2.4067,-2.2679,-1.9666,-1.81864,-1.33294,-0.79002,-0.42851,-0.13901,-0.06097,0.11578,0.28516,0.35565,0.59615,0.85703,1.18347,1.42345,1.48852,1.61099,1.66325,1.80621,1.9258,2.05701,2.14053,2.21328,2.35015,-5.04718,-4.29311,-3.95567,-3.60872,-3.13232,-2.75514,-2.35931,-2.22702,-1.93896,-1.79701,-1.3285,-0.7995,-0.44352,-0.15589,-0.07791,0.09945,0.27047,0.34198,0.58757,0.85718,1.20028,1.45762,1.5283,1.66253,1.72033,1.88029,2.01644,2.16884,2.2678,2.35549,2.52507,-4.82141,-4.12443,-3.8109,-3.48137,-3.04102,-2.68572,-2.31084,-2.18505,-1.91022,-1.77428,-1.32309,-0.80829,-0.45812,-0.17261,-0.09478,0.08302,0.25558,0.32796,0.5784,0.85653,1.21618,1.49101,1.5674,1.71366,1.77716,1.95472,2.10825,2.28311,2.39867,2.50257,2.70836,-4.59687,-3.95605,-3.66608,-3.36566,-2.949,-2.61539,-2.26133,-2.14202,-1.88039,-1.75048,-1.31671,-0.81638,-0.47228,-0.18916,-0.11154,0.06651,0.24037,0.31362,0.56867,0.85508,1.23114,1.52357,1.60574,1.76427,1.83361,2.02933,2.20092,2.39942,2.53261,2.6539,2.89907,-4.37394,-3.7882,-3.52139,-3.24371,-2.85636,-2.54421,-2.21081,-2.09795,-1.84949,-1.72562,-1.30936,-0.82377,-0.486,-0.20552,-0.1282,0.04993,0.22492,0.29897,0.55839,0.85285,1.24516,1.55527,1.64329,1.81427,1.88959,2.10394,2.29423,2.51741,2.66915,2.80889,3.09631,-4.15301,-3.62113,-3.37703,-3.12169,-2.76321,-2.47226,-2.15935,-2.0529,-1.81756,-1.69971,-1.30105,-0.83044,-0.49927,-0.22168,-0.14472,0.03325,0.20925,0.28403,0.54757,0.84986,1.25824,1.58607,1.67999,1.8636,1.94499,2.1784,2.38795,2.63672,2.80786,2.96698,3.29921,-3.93453,-3.45513,-3.23322,-2.99978,-2.66965,-2.39961,-2.10697,-2.00688,-1.78462,-1.67279,-1.29178,-0.83639,-0.51207,-0.23763,-0.16111,0.01662,0.19339,0.26882,0.53624,0.84611,1.27037,1.61594,1.7158,1.91219,1.99973,2.25258,2.48187,2.75706,2.94834,3.12767,3.50703,-3.71902,-3.29053,-3.09023,-2.87816,-2.57583,-2.32635,-2.05375,-1.95996,-1.75069,-1.64485,-1.28155,-0.84162,-0.5244,-0.25335,-0.17733,0,0.17733,0.25335,0.5244,0.84162,1.28155,1.64485,1.75069,1.95996,2.05375,2.32635,2.57583,2.87816,3.09023,3.29053,3.71902,-3.50703,-3.12767,-2.94834,-2.75706,-2.48187,-2.25258,-1.99973,-1.91219,-1.7158,-1.61594,-1.27037,-0.84611,-0.53624,-0.26882,-0.19339,-0.01662,0.16111,0.23763,0.51207,0.83639,1.29178,1.67279,1.78462,2.00688,2.10697,2.39961,2.66965,2.99978,3.23322,3.45513,3.93453,-3.29921,-2.96698,-2.80786,-2.63672,-2.38795,-2.1784,-1.94499,-1.8636,-1.67999,-1.58607,-1.25824,-0.84986,-0.54757,-0.28403,-0.20925,-0.03325,0.14472,0.22168,0.49927,0.83044,1.30105,1.69971,1.81756,2.0529,2.15935,2.47226,2.76321,3.12169,3.37703,3.62113,4.15301,-3.09631,-2.80889,-2.66915,-2.51741,-2.29423,-2.10394,-1.88959,-1.81427,-1.64329,-1.55527,-1.24516,-0.85285,-0.55839,-0.29897,-0.22492,-0.04993,0.1282,0.20552,0.486,0.82377,1.30936,1.72562,1.84949,2.09795,2.21081,2.54421,2.85636,3.24371,3.52139,3.7882,4.37394,-2.89907,-2.6539,-2.53261,-2.39942,-2.20092,-2.02933,-1.83361,-1.76427,-1.60574,-1.52357,-1.23114,-0.85508,-0.56867,-0.31362,-0.24037,-0.06651,0.11154,0.18916,0.47228,0.81638,1.31671,1.75048,1.88039,2.14202,2.26133,2.61539,2.949,3.36566,3.66608,3.95605,4.59687,-2.70836,-2.50257,-2.39867,-2.28311,-2.10825,-1.95472,-1.77716,-1.71366,-1.5674,-1.49101,-1.21618,-0.85653,-0.5784,-0.32796,-0.25558,-0.08302,0.09478,0.17261,0.45812,0.80829,1.32309,1.77428,1.91022,2.18505,2.31084,2.68572,3.04102,3.48737,3.8109,4.12443,4.82141,-2.52507,-2.35549,-2.2678,-2.16884,-2.01644,-1.88029,-1.72033,-1.66253,-1.5283,-1.45762,-1.20028,-0.85718,-0.58757,-0.34198,-0.27047,-0.09945,0.07791,0.15589,0.44352,0.7995,1.3285,1.79701,1.93896,2.22702,2.35931,2.75514,3.13232,3.60872,3.95567,4.29311,5.04718,-2.35015,-2.21328,-2.14053,-2.05701,-1.9258,-1.80621,-1.66325,-1.61099,-1.48852,-1.42345,-1.18347,-0.85703,-0.59615,-0.35565,-0.28516,-0.11578,0.06097,0.13901,0.42851,0.79002,1.33294,1.81864,1.9666,2.2679,2.4067,2.82359,3.22281,3.72957,4.10022,4.46189,5.27389,-2.18448,-2.07661,-2.01739,-1.94806,-1.8366,-1.73271,-1.60604,-1.55914,-1.44813,-1.38855,-1.16574,-0.85607,-0.60412,-0.36889,-0.29961,-0.13199,0.04397,0.12199,0.41309,0.77986,1.3364,1.83916,1.99311,2.30764,2.45298,2.89101,3.31243,3.84981,4.24439,4.63057,5.50124,-2.02891,-1.94611,-1.89894,-1.84244,-1.74919,-1.66001,-1.54886,-1.50712,-1.4072,-1.35299,-1.14712,-0.85426,-0.61146,-0.38186,-0.31368,-0.14807,0.02693,0.10486,0.39729,0.76902,1.33889,1.85856,2.01848,2.34623,2.49811,2.95735,3.40109,3.96932,4.38807,4.79899,5.72899,-1.8841,-1.82241,-1.78572,-1.74062,-1.6639,-1.58838,-1.49188,-1.45507,-1.36584,-1.31684,-1.12762,-0.85161,-0.61815,-0.39434,-0.3274,-0.16397,0.00987,0.08763,0.38111,0.75752,1.34039,1.87683,2.04269,2.38364,2.54206,3.02256,3.48874,4.08802,4.53112,4.96701,5.95691,-1.75053,-1.70603,-1.67825,-1.64305,-1.5811,-1.51808,-1.43529,-1.40314,-1.32414,-1.28019,-1.10726,-0.84809,-0.62415,-0.40638,-0.34075,-0.17968,-0.00719,0.07032,0.36458,0.74537,1.34092,1.89395,2.06573,2.41984,2.5848,3.0866,3.5753,4.20582,4.67344,5.13449,6.1848,-1.62838,-1.59738,-1.57695,-1.55016,-1.50114,-1.44942,-1.37929,-1.35153,-1.28225,-1.24313,-1.08608,-0.84369,-0.62944,-0.41794,-0.3537,-0.19517,-0.02421,0.05297,0.34772,0.73257,1.34047,1.90992,2.08758,2.45482,2.62631,3.14944,3.66073,4.32263,4.81492,5.3013,6.41249,-1.51752,-1.49673,-1.48216,-1.46232,-1.42439,-1.38267,-1.32412,-1.30042,-1.24028,-1.20578,-1.06413,-0.83841,-0.634,-0.42899,-0.3662,-0.2104,-0.04116,0.0356,0.33054,0.71915,1.33904,1.92472,2.10823,2.48855,2.66657,3.21103,3.74497,4.43839,4.95549,5.46735,6.6398,-1.41753,-1.40413,-1.39408,-1.37981,-1.35114,-1.31815,-1.26999,-1.25004,-1.19842,-1.16827,-1.04144,-0.83223,-0.63779,-0.43949,-0.37824,-0.22535,-0.05803,0.01824,0.31307,0.70512,1.33665,1.93836,2.12768,2.52102,2.70556,3.27134,3.82798,4.55304,5.09505,5.63252,6.86661,-1.32774,-1.31944,-1.31275,-1.30279,-1.28167,-1.25611,-1.21716,-1.20059,-1.15682,-1.13075,-1.0181,-0.82516,-0.6408,-0.44942,-0.38977,-0.23996,-0.07476,0.00092,0.29535,0.6905,1.3333,1.95083,2.14591,2.55222,2.74325,3.33035,3.90973,4.66651,5.23353,5.79673,7.09277,-1.24728,-1.24235,-1.23805,-1.23132,-1.21618,-1.1968,-1.16584,-1.15229,-1.11566,-1.09338,-0.99418,-0.8172,-0.643,-0.45873,-0.40075,-0.25422,-0.09132,-0.01631,0.2774,0.67532,1.329,1.96213,2.16293,2.58214,2.77964,3.38804,3.99016,4.77875,5.37087,5.9599,7.31818,-1.1752,-1.1724,-1.16974,-1.16534,-1.15477,-1.14042,-1.11628,-1.10537,-1.07513,-1.05631,-0.96977,-0.80837,-0.64436,-0.46739,-0.41116,-0.26808,-0.10769,-0.03344,0.25925,0.65959,1.32376,1.97227,2.17873,2.61076,2.81472,3.44438,4.06926,4.88971,5.50701,6.12196,7.54272,-1.11054,-1.10901,-1.10743,-1.10465,-1.09749,-1.08711,-1.06864,-1.06001,-1.03543,-1.01973,-0.94496,-0.79868,-0.64488,-0.47538,-0.42095,-0.2815,-0.12381,-0.0504,0.24094,0.64335,1.3176,1.98124,2.19332,2.6381,2.84848,3.49935,4.147,4.99937,5.6419,6.28285,7.76632,-1.05239,-1.05159,-1.05068,-1.04898,-1.04427,-1.03695,-1.02311,-1.0164,-0.99672,-0.98381,-0.91988,-0.78816,-0.64453,-0.48265,-0.43008,-0.29443,-0.13964,-0.06718,0.2225,0.62662,1.31054,1.98906,2.2067,2.66413,2.88091,3.55295,4.22336,5.10768,5.77549,6.44251,7.98688,-0.9999,-0.9995,-0.999,-0.998,-0.99499,-0.98995,-0.9798,-0.97468,-0.95918,-0.94871,-0.89464,-0.77686,-0.64333,-0.48917,-0.43854,-0.30685,-0.15516,-0.08371,0.20397,0.60944,1.30259,1.99573,2.21888,2.68888,2.91202,3.60517,4.29832,5.21461,5.90776,6.6009,8.21034,-0.95234,-0.95215,-0.95188,-0.95131,-0.94945,-0.94607,-0.93878,-0.93495,-0.92295,-0.91458,-0.86938,-0.76482,-0.64125,-0.49494,-0.44628,-0.31872,-0.1703,-0.09997,0.1854,0.59183,1.29377,2.00128,2.22986,2.71234,2.94181,3.656,4.37186,5.32014,6.03865,6.75798,8.43064,-0.90908,-0.90899,-0.90885,-0.90854,-0.90742,-0.90521,-0.90009,-0.89728,-0.88814,-0.88156,-0.84422,-0.75211,-0.63833,-0.49991,-0.45329,-0.32999,-0.18504,-0.1159,0.16682,0.57383,1.28412,2.0057,2.23967,2.73451,2.97028,3.70543,4.44398,5.42426,6.16816,6.9137,8.64971,-0.86956,-0.86952,-0.86945,-0.86929,-0.86863,-0.86723,-0.86371,-0.86169,-0.85486,-0.84976,-0.81929,-0.7388,-0.63456,-0.50409,-0.45953,-0.34063,-0.19933,-0.13148,0.14827,0.55549,1.27365,2.00903,2.24831,2.75541,2.99744,3.75347,4.51467,5.52694,6.29626,7.06804,8.86753,-0.83333,-0.83331,-0.83328,-0.8332,-0.83283,-0.83196,-0.82959,-0.82817,-0.82315,-0.81927,-0.79472,-0.72495,-0.62999,-0.50744,-0.46499,-0.35062,-0.21313,-0.14665,0.12979,0.53683,1.2624,2.01128,2.25581,2.77506,3.0233,3.80013,4.58393,5.62818,6.42292,7.22098,9.08403,-0.8,-0.79999,-0.79998,-0.79994,-0.79973,-0.79921,-0.79765,-0.79667,-0.79306,-0.79015,-0.77062,-0.71067,-0.62463,-0.50999,-0.46966,-0.35992,-0.22642,-0.16138,0.11143,0.51789,1.25039,2.01247,2.26217,2.79345,3.04787,3.8454,4.65176,5.72796,6.54814,7.3725,9.2992,-0.76923,-0.76923,-0.76922,-0.7692,-0.76909,-0.76878,-0.76779,-0.76712,-0.76456,-0.76242,-0.74709,-0.69602,-0.61854,-0.51171,-0.47353,-0.36852,-0.23915,-0.17564,0.09323,0.49872,1.23766,2.01263,2.26743,2.81062,3.07116,3.8893,4.71815,5.82629,6.67191,7.52258,9.51301,-0.74074,-0.74074,-0.74074,-0.74073,-0.74067,-0.74049,-0.73987,-0.73943,-0.73765,-0.7361,-0.72422,-0.68111,-0.61176,-0.51263,-0.4766,-0.3764,-0.25129,-0.18939,0.07523,0.47934,1.22422,2.01177,2.2716,2.82658,3.0932,3.93183,4.78313,5.92316,6.79421,7.67121,9.72543,-0.71429,-0.71429,-0.71428,-0.71428,-0.71425,-0.71415,-0.71377,-0.71348,-0.71227,-0.71116,-0.70209,-0.66603,-0.60434,-0.51276,-0.47888,-0.38353,-0.26282,-0.20259,0.05746,0.4598,1.21013,2.00992,2.2747,2.84134,3.11399,3.97301,4.84669,6.01858,6.91505,7.81839,9.93643,-0.68966,-0.68966,-0.68965,-0.68965,-0.68964,-0.68959,-0.68935,-0.68917,-0.68836,-0.68759,-0.68075,-0.65086,-0.59634,-0.51212,-0.48037,-0.38991,-0.27372,-0.21523,0.03997,0.44015,1.19539,2.0071,2.27676,2.85492,3.13356,4.01286,4.90884,6.11254,7.03443,7.96411,10.14602,-0.66667,-0.66667,-0.66667,-0.66667,-0.66666,-0.66663,-0.66649,-0.66638,-0.66585,-0.66532,-0.66023,-0.63569,-0.58783,-0.51073,-0.48109,-0.39554,-0.28395,-0.22726,0.02279,0.4204,1.18006,2.00335,2.2778,2.86735,3.15193,4.05138,4.96959,6.20506,7.15235,8.10836,10.35418,-0.64516,-0.64516,-0.64516,-0.64516,-0.64516,-0.64514,-0.64507,-0.645,-0.64465,-0.64429,-0.64056,-0.6206,-0.57887,-0.50863,-0.48107,-0.40041,-0.29351,-0.23868,0.00596,0.40061,1.16416,1.99869,2.27785,2.87865,3.16911,4.08859,5.02897,6.29613,7.26881,8.25115,10.5609,-0.625,-0.625,-0.625,-0.625,-0.625,-0.62499,-0.62495,-0.62491,-0.62469,-0.62445,-0.62175,-0.60567,-0.56953,-0.50585,-0.48033,-0.40454,-0.30238,-0.24946,-0.0105,0.38081,1.14772,1.99314,2.27693,2.88884,3.18512,4.12452,5.08697,6.38578,7.38382,8.39248,10.76618,-0.60606,-0.60606,-0.60606,-0.60606,-0.60606,-0.60606,-0.60603,-0.60601,-0.60587,-0.60572,-0.60379,-0.59096,-0.55989,-0.50244,-0.4789,-0.40792,-0.31055,-0.25958,-0.02654,0.36104,1.13078,1.98674,2.27506,2.89795,3.2,4.15917,5.14362,6.47401,7.49739,8.53236,10.97001,-0.58824,-0.58824,-0.58824,-0.58824,-0.58824,-0.58823,-0.58822,-0.58821,-0.58812,-0.58802,-0.58666,-0.57652,-0.55,-0.49844,-0.47682,-0.41058,-0.31802,-0.26904,-0.04215,0.34133,1.11337,1.97951,2.27229,2.90599,3.21375,4.19257,5.19892,6.56084,7.60953,8.67079,11.17239,-0.57143,-0.57143,-0.57143,-0.57143,-0.57143,-0.57143,-0.57142,-0.57141,-0.57136,-0.5713,-0.57035,-0.56242,-0.53993,-0.49391,-0.47413,-0.41253,-0.32479,-0.27782,-0.0573,0.32171,1.09552,1.97147,2.26862,2.91299,3.22641,4.22473,5.25291,6.64627,7.72024,8.80779,11.37334,-0.55556,-0.55556,-0.55556,-0.55556,-0.55556,-0.55556,-0.55555,-0.55555,-0.55552,-0.55548,-0.55483,-0.54867,-0.52975,-0.48888,-0.47088,-0.41381,-0.33085,-0.28592,-0.07195,0.30223,1.07726,1.96266,2.26409,2.91898,3.238,4.25569,5.30559,6.73032,7.82954,8.94335,11.57284,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54054,-0.54052,-0.5405,-0.54006,-0.53533,-0.51952,-0.48342,-0.46711,-0.41442,-0.33623,-0.29335,-0.0861,0.2829,1.05863,1.95311,2.25872,2.92397,3.24853,4.28545,5.35698,6.81301,7.93744,9.0775,11.77092,-0.52632,-0.52632,-0.52632,-0.52632,-0.52632,-0.52632,-0.52631,-0.52631,-0.5263,-0.52629,-0.526,-0.5224,-0.50929,-0.47758,-0.46286,-0.41441,-0.34092,-0.3001,-0.09972,0.26376,1.03965,1.94283,2.25254,2.92799,3.25803,4.31403,5.40711,6.89435,8.04395,9.21023,11.96757,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51282,-0.51281,-0.51281,-0.51261,-0.5099,-0.49911,-0.47141,-0.45819,-0.41381,-0.34494,-0.30617,-0.11279,0.24484,1.02036,1.93186,2.24558,2.93107,3.26653,4.34147,5.45598,6.97435,8.1491,9.34158,12.1628,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.49999,-0.49986,-0.49784,-0.48902,-0.46496,-0.45314,-0.41265,-0.34831,-0.31159,-0.1253,0.22617,1.00079,1.92023,2.23786,2.93324,3.27404,4.36777,5.50362,7.05304,8.25289,9.47154,12.35663,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.4878,-0.48772,-0.48622,-0.47906,-0.45828,-0.44777,-0.41097,-0.35105,-0.31635,-0.13725,0.20777,0.98096,1.90796,2.2294,2.9345,3.2806,4.39296,5.55005,7.13043,8.35534,9.60013,12.54906,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47619,-0.47614,-0.47504,-0.46927,-0.45142,-0.44212,-0.40881,-0.35318,-0.32049,-0.14861,0.18967,0.9609,1.89508,2.22024,2.93489,3.28622,4.41706,5.59528,7.20654,8.45646,9.72737,12.7401,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46512,-0.46511,-0.46508,-0.46428,-0.45967,-0.44442,-0.43623,-0.40621,-0.35473,-0.324,-0.15939,0.17189,0.94064,1.8816,2.21039,2.93443,3.29092,4.44009,5.63934,7.28138,8.55627,9.85326,12.92977,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45455,-0.45454,-0.45452,-0.45395,-0.45029,-0.43734,-0.43016,-0.40321,-0.35572,-0.32693,-0.16958,0.15445,0.92022,1.86757,2.19988,2.93314,3.29473,4.46207,5.68224,7.35497,8.65479,9.97784,13.11808,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44444,-0.44443,-0.44402,-0.44114,-0.4302,-0.42394,-0.39985,-0.35619,-0.32928,-0.17918,0.13737,0.89964,1.853,2.18874,2.93105,3.29767,4.48303,5.724,7.42733,8.75202,10.1011,13.30504,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43478,-0.43477,-0.43448,-0.43223,-0.42304,-0.41761,-0.39617,-0.35616,-0.33108,-0.18819,0.12067,0.87895,1.83792,2.17699,2.92818,3.29976,4.50297,5.76464,7.49847,8.848,10.22307,13.49066,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42553,-0.42532,-0.42357,-0.4159,-0.41121,-0.39221,-0.35567,-0.33236,-0.19661,0.10436,0.85817,1.82234,2.16465,2.92455,3.30103,4.52192,5.80418,7.56842,8.94273,10.34375,13.67495,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41667,-0.41666,-0.41652,-0.41517,-0.4088,-0.40477,-0.388,-0.35475,-0.33315,-0.20446,0.08847,0.83731,1.80631,2.15174,2.92017,3.30149,4.5399,5.84265,7.63718,9.03623,10.46318,13.85794,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40816,-0.40806,-0.40703,-0.40177,-0.39833,-0.38359,-0.35343,-0.33347,-0.21172,0.073,0.81641,1.78982,2.13829,2.91508,3.30116,4.55694,5.88004,7.70479,9.12852,10.58135,14.03963,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.39993,-0.39914,-0.39482,-0.3919,-0.37901,-0.35174,-0.33336,-0.21843,0.05798,0.79548,1.77292,2.12432,2.9093,3.30007,4.57304,5.91639,7.77124,9.21961,10.69829,14.22004,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39216,-0.39211,-0.39152,-0.38799,-0.38552,-0.37428,-0.34972,-0.33284,-0.22458,0.0434,0.77455,1.75563,2.10985,2.90283,3.29823,4.58823,5.95171,7.83657,9.30952,10.81401,14.39918,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38462,-0.38458,-0.38414,-0.38127,-0.37919,-0.36945,-0.3474,-0.33194,-0.23019,0.02927,0.75364,1.73795,2.0949,2.89572,3.29567,4.60252,5.98602,7.90078,9.39827,10.92853,14.57706,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37736,-0.37734,-0.37701,-0.37469,-0.37295,-0.36453,-0.34481,-0.3307,-0.23527,0.01561,0.73277,1.71992,2.0795,2.88796,3.2924,4.61594,6.01934,7.9639,9.48586,11.04186,14.7537,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37037,-0.37036,-0.37011,-0.36825,-0.3668,-0.35956,-0.34198,-0.32914,-0.23984,0.00243,0.71195,1.70155,2.06365,2.87959,3.28844,4.6285,6.05169,8.02594,9.57232,11.15402,14.92912,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36364,-0.36363,-0.36345,-0.36196,-0.36076,-0.35456,-0.33895,-0.32729,-0.24391,-0.01028,0.69122,1.68287,2.04739,2.87062,3.28381,4.64022,6.08307,8.08691,9.65766,11.26502,15.10332,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.35714,-0.357,-0.35583,-0.35484,-0.34955,-0.33573,-0.32519,-0.24751,-0.02252,0.67058,1.6639,2.03073,2.86107,3.27854,4.65111,6.11351,8.14683,9.7419,11.37487,15.27632,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35088,-0.35087,-0.35078,-0.34985,-0.34903,-0.34455,-0.33236,-0.32285,-0.25064,-0.03427,0.65006,1.64464,2.01369,2.85096,3.27263,4.6612,6.14302,8.20572,9.82505,11.4836,15.44813,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34483,-0.34476,-0.34402,-0.34336,-0.33957,-0.32886,-0.32031,-0.25334,-0.04553,0.62966,1.62513,1.99629,2.8403,3.2661,4.6705,6.17162,8.26359,9.90713,11.59122,15.61878,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33898,-0.33893,-0.33836,-0.33782,-0.33463,-0.32525,-0.31759,-0.25562,-0.05632,0.60941,1.60538,1.97855,2.82912,3.25898,4.67903,6.19933,8.32046,9.98815,11.69773,15.78826,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.33333,-0.3333,-0.33285,-0.33242,-0.32974,-0.32155,-0.31472,-0.2575,-0.06662,0.58933,1.58541,1.96048,2.81743,3.25128,4.6868,6.22616,8.37634,10.06812,11.80316,15.9566,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32787,-0.32784,-0.3275,-0.32715,-0.32492,-0.3178,-0.31171,-0.25901,-0.07645,0.56942,1.56524,1.9421,2.80525,3.24301,4.69382,6.25212,8.43125,10.14706,11.90752,16.1238,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32258,-0.32256,-0.3223,-0.32202,-0.32016,-0.31399,-0.30859,-0.26015,-0.0858,0.5497,1.54487,1.92343,2.79259,3.23419,4.70013,6.27723,8.48519,10.22499,12.01082,16.28989,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31746,-0.31745,-0.31724,-0.31702,-0.31549,-0.31016,-0.30538,-0.26097,-0.09469,0.53019,1.52434,1.90449,2.77947,3.22484,4.70571,6.30151,8.5382,10.30192,12.11307,16.45487,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.3125,-0.31249,-0.31234,-0.31216,-0.3109,-0.30631,-0.30209,-0.26146,-0.10311,0.51089,1.50365,1.88528,2.76591,3.21497,4.71061,6.32497,8.59027,10.37785,12.21429,16.61875,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30769,-0.30757,-0.30743,-0.30639,-0.30246,-0.29875,-0.26167,-0.11107,0.49182,1.48281,1.86584,2.75191,3.2046,4.71482,6.34762,8.64142,10.45281,12.3145,16.78156,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30303,-0.30294,-0.30283,-0.30198,-0.29862,-0.29537,-0.2616,-0.11859,0.47299,1.46186,1.84616,2.73751,3.19374,4.71836,6.36948,8.69167,10.52681,12.4137,16.94329,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.29851,-0.2985,-0.29844,-0.29835,-0.29766,-0.2948,-0.29196,-0.26128,-0.12566,0.4544,1.44079,1.82627,2.7227,3.18241,4.72125,6.39055,8.74102,10.59986,12.5119,17.10397,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29412,-0.29407,-0.294,-0.29344,-0.29101,-0.28854,-0.26072,-0.13231,0.43608,1.41963,1.80618,2.70751,3.17062,4.7235,6.41086,8.7895,10.67197,12.60913,17.26361,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28986,-0.28985,-0.28982,-0.28977,-0.28931,-0.28726,-0.28511,-0.25995,-0.13853,0.41803,1.39839,1.78591,2.69195,3.15838,4.72512,6.43042,8.83711,10.74316,12.70539,17.42221,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28571,-0.28569,-0.28565,-0.28528,-0.28355,-0.28169,-0.25899,-0.14434,0.40026,1.37708,1.76547,2.67603,3.14572,4.72613,6.44924,8.88387,10.81343,12.80069,17.57979,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28169,-0.28167,-0.28164,-0.28135,-0.2799,-0.27829,-0.25785,-0.14975,0.38277,1.35571,1.74487,2.65977,3.13263,4.72653,6.46733,8.92979,10.88281,12.89505,17.73636,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27778,-0.27776,-0.27774,-0.27751,-0.27629,-0.27491,-0.25654,-0.15478,0.36557,1.3343,1.72412,2.64317,3.11914,4.72635,6.4847,8.97488,10.95129,12.98848,17.89193,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27397,-0.27396,-0.27394,-0.27376,-0.27274,-0.27156,-0.2551,-0.15942,0.34868,1.31287,1.70325,2.62626,3.10525,4.72559,6.50137,9.01915,11.0189,13.08098,18.04652,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27027,-0.27026,-0.27025,-0.2701,-0.26926,-0.26825,-0.25352,-0.16371,0.33209,1.29141,1.68225,2.60905,3.09099,4.72427,6.51735,9.06261,11.08565,13.17258,18.20013,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26667,-0.26666,-0.26665,-0.26654,-0.26584,-0.26497,-0.25183,-0.16764,0.31582,1.26995,1.66115,2.59154,3.07636,4.7224,6.53264,9.10528,11.15154,13.26328,18.35278,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26316,-0.26315,-0.26315,-0.26306,-0.26248,-0.26175,-0.25005,-0.17123,0.29986,1.2485,1.63995,2.57375,3.06137,4.71998,6.54727,9.14717,11.21658,13.35309,18.50447,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25974,-0.25973,-0.25966,-0.25919,-0.25857,-0.24817,-0.1745,0.28422,1.22706,1.61867,2.55569,3.04604,4.71704,6.56124,9.18828,11.2808,13.44202,18.65522,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.25641,-0.2564,-0.25635,-0.25596,-0.25544,-0.24622,-0.17746,0.26892,1.20565,1.59732,2.53737,3.03038,4.71358,6.57456,9.22863,11.34419,13.53009,18.80504,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25316,-0.25312,-0.2528,-0.25236,-0.24421,-0.18012,0.25394,1.18427,1.57591,2.51881,3.01439,4.70961,6.58725,9.26823,11.40677,13.6173,18.95393,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.24996,-0.2497,-0.24933,-0.24214,-0.18249,0.23929,1.16295,1.55444,2.50001,2.9981,4.70514,6.59931,9.30709,11.46855,13.70366,19.10191,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24691,-0.24689,-0.24667,-0.24637,-0.24003,-0.18459,0.22498,1.14168,1.53294,2.48099,2.9815,4.70019,6.61075,9.34521,11.52953,13.78919,19.24898,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.2439,-0.24388,-0.24371,-0.24345,-0.23788,-0.18643,0.21101,1.12048,1.51141,2.46175,2.96462,4.69476,6.62159,9.38262,11.58974,13.87389,19.39517,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24096,-0.24095,-0.24081,-0.2406,-0.23571,-0.18803,0.19737,1.09936,1.48985,2.44231,2.94746,4.68887,6.63183,9.41931,11.64917,13.95778,19.54046,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.2381,-0.23809,-0.23808,-0.23797,-0.23779,-0.23352,-0.18939,0.18408,1.07832,1.46829,2.42268,2.93002,4.68252,6.64148,9.4553,11.70785,14.04086,19.68489,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23529,-0.23528,-0.2352,-0.23505,-0.23132,-0.19054,0.17113,1.05738,1.44673,2.40287,2.91234,4.67573,6.65056,9.4906,11.76576,14.12314,19.82845,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23256,-0.23255,-0.23248,-0.23236,-0.22911,-0.19147,0.15851,1.03654,1.42518,2.38288,2.8944,4.6685,6.65907,9.52521,11.82294,14.20463,19.97115,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22989,-0.22988,-0.22988,-0.22988,-0.22982,-0.22972,-0.2269,-0.19221,0.14624,1.01581,1.40364,2.36273,2.87622,4.66085,6.66703,9.55915,11.87938,14.28534,20.113,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22727,-0.22722,-0.22714,-0.22469,-0.19277,0.13431,0.99519,1.38213,2.34242,2.85782,4.65277,6.67443,9.59243,11.93509,14.36528,20.25402,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22472,-0.22468,-0.22461,-0.22249,-0.19316,0.12272,0.97471,1.36065,2.32197,2.83919,4.64429,6.6813,9.62504,11.99009,14.44446,20.3942,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22222,-0.22219,-0.22214,-0.2203,-0.19338,0.11146,0.95435,1.33922,2.30138,2.82035,4.63541,6.68763,9.65701,12.04437,14.52288,20.53356};
 }

src/java/m/cfa/flood/V1_0.java

@@ -54,6 +54,7 @@
         putResult("start", model.getStart());
         putResult("end", model.getEnd());
         putResult("data_source", model.getDataSource());
+        putResult("skewErrorMessage", model.getSkewErrorMessage());
         String output = FileUtils.readFileToString(model.getOutput());
         putResult("output", output);
         putResult("graph", model.getGraph());

src/java/m/cfa/flood/guiFlood_Model.java

@@ -12,7 +12,7 @@
 import java.util.Date;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 13-June-2012
 */
@@ -39,6 +39,7 @@
     String start = "?";
     String end = "?";
     String dataSource = "?";
+    String skewErrorMessage = "?";
     
     //Gets
     public File getOutput(){ return new File(mainFolder, "flood_summary.txt"); }
@@ -47,7 +48,8 @@
     public String getStart(){ return start; }
     public String getEnd(){ return end; }
     public String getDataSource(){ return dataSource; }
-
+    public String getSkewErrorMessage(){ return skewErrorMessage; }
+    
     //Sets
     public void setMainFolder(String mainFolder_str){ mainFolder = mainFolder_str; }
     public void setDatabase(String database_str){ database = database_str; }
@@ -120,20 +122,18 @@
         //Decide which analysis to perform
         if(analysisType.equalsIgnoreCase("B17")){
             //Check if any flow data exists
-            Data data = new Data();
-            double[][] peakFlowData = data.extractFloodData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
+            double[][] peakFlowData = Data.extractFloodData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
             
             //Check if merging the datasets is desired, if so get the user data
             double[][] peakFlowData_user = new double[0][0];
             if(mergeDatasets){
-                peakFlowData_user = data.extractFloodData(mainFolder, storetResourceFile, "UserData", "", "", beginDate, endDate, userData);
+                peakFlowData_user = Data.extractFloodData(mainFolder, storetResourceFile, "UserData", "", "", beginDate, endDate, userData);
             }
             
             //Merge the two datasets (if user data is empty nothing will be merged)
-            DoubleArray doubleArray = new DoubleArray();
-            double[][] peakFlowData_combined = doubleArray.mergeData(peakFlowData, peakFlowData_user, mergeMethod);
+            double[][] peakFlowData_combined = DoubleArray.mergeData(peakFlowData, peakFlowData_user, mergeMethod);
             if(peakFlowData_combined.length == 0){
-                ArrayList<String> errorMessage = new ArrayList<String>();
+                ArrayList<String> errorMessage = new ArrayList<>();
                 if(peakFlowData.length == 0){
                     errorMessage.add("There is no available flood data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                     if(database.equalsIgnoreCase("CDWR")){
@@ -166,6 +166,7 @@
             len = String.valueOf(peakFlowData_combined.length);
             start = String.valueOf(peakFlowData_combined[0][0]);
             end = String.valueOf(peakFlowData_combined[peakFlowData_combined.length - 1][0]);
+            skewErrorMessage = bulletin17B.skewErrorMessage;
 
             //Write out the data summary to be displayed with the graph
             writeSummary(dataSummary);

src/java/m/cfa/loadest/guiLOADEST_Model.java

@@ -20,7 +20,7 @@
 import org.codehaus.jettison.json.JSONException;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible & Tyler Dell
 * @since 27-March-2013
 */
@@ -269,10 +269,10 @@
      */
     private void writeCalibration(String[][] sortedData_combined, String[][] WQdata_combined, String units) throws IOException {
         //Convert data for Calibration file
-        ArrayList<String> CDATE = new ArrayList<String>();
-        ArrayList<String> CTIME = new ArrayList<String>();
-        ArrayList<String> CFLOW = new ArrayList<String>();
-        ArrayList<String> CCONC = new ArrayList<String>();
+        ArrayList<String> CDATE = new ArrayList<>();
+        ArrayList<String> CTIME = new ArrayList<>();
+        ArrayList<String> CFLOW = new ArrayList<>();
+        ArrayList<String> CCONC = new ArrayList<>();
         for(int i=0;i<WQdata_combined.length;i++){
             for(int j=0; j<sortedData_combined.length;j++){
                 if(WQdata_combined[i][0].equalsIgnoreCase(sortedData_combined[j][0])){
@@ -428,7 +428,7 @@
         }else if(units.equalsIgnoreCase("ug/m3")){
             conversion = 1/(1000*Math.pow(100,3));
         }else{
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("LOADEST is only able to operate on water quality units of mg/L. The currently selected water quality test is in units of " + units + ", please select a different water quality test that is in mg/L.");
             writeError(errorMessage);
         }
@@ -452,7 +452,7 @@
     BufferedReader textReader = new BufferedReader(fr);
     int numberOfLines = readLines(path);
         if(numberOfLines == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("LOADEST failed to return information for the provided nutrient data, the data is likely too sparce to perform an analysis on, please select a different water quality test, provide more data, or select a shorter analysis period.");
             writeError(errorMessage);
         }
@@ -512,20 +512,19 @@
      */
     private void CalculateStatistics(String[][] sortedData, String timeStep) {
         //convert Data into proper format for calculations
-        ArrayList<Double> dataList = new ArrayList<Double>();
+        ArrayList<Double> dataList = new ArrayList<>();
         for(int i=0; i<sortedData.length; i++){
             dataList.add(Double.parseDouble(sortedData[i][1]));
         }
         
         //Calculate statistics
-        DoubleMath doubleMath = new DoubleMath();
-        double temp1 = doubleMath.round(doubleMath.max(dataList),3);//Call Max function
-        double temp2 = doubleMath.round(doubleMath.min(dataList),3);//Call Min function
-        double temp3 = doubleMath.round(doubleMath.Percentile_function(dataList,0.75),3);//Call Upper Quartile function
-        double temp4 = doubleMath.round(doubleMath.Percentile_function(dataList,0.25),3);//Call Lower Quartile function
-        double temp5 = doubleMath.round(doubleMath.median(dataList),3);//Call Median function
-        double temp6 = doubleMath.round(doubleMath.meanArithmetic(dataList),3);//Call Mean function
-        double temp7 = doubleMath.round(doubleMath.StandardDeviationSample(dataList),3);//Call standard deviation
+        double temp1 = DoubleMath.round(DoubleMath.max(dataList),3);//Call Max function
+        double temp2 = DoubleMath.round(DoubleMath.min(dataList),3);//Call Min function
+        double temp3 = DoubleMath.round(DoubleMath.Percentile_function(dataList,0.75),3);//Call Upper Quartile function
+        double temp4 = DoubleMath.round(DoubleMath.Percentile_function(dataList,0.25),3);//Call Lower Quartile function
+        double temp5 = DoubleMath.round(DoubleMath.median(dataList),3);//Call Median function
+        double temp6 = DoubleMath.round(DoubleMath.meanArithmetic(dataList),3);//Call Mean function
+        double temp7 = DoubleMath.round(DoubleMath.StandardDeviationSample(dataList),3);//Call standard deviation
         
         if(timeStep.equalsIgnoreCase("daily")){
             dailymax = temp1;
@@ -562,6 +561,7 @@
      * @throws IOException 
      * @throws InterruptedException 
      * @throws ParseException 
+     * @throws org.codehaus.jettison.json.JSONException 
      */
     public void run(Executable e, File storetResourceFile) throws IOException, InterruptedException, ParseException, JSONException {
         //If no date input, make it the maximum of available data
@@ -576,8 +576,7 @@
         }
         
         //Correct Inputs
-        Data data = new Data();
-        String[] resultArray = data.getWQtestDataInfo(wqTest, database);
+        String[] resultArray = Data.getWQtestDataInfo(wqTest, database);
         //String wqCode = resultArray[0];
         String wqLabel = resultArray[1];
         wqUnits = resultArray[2];
@@ -585,7 +584,7 @@
         //String endLoadUnits = resultArray[4];
         
         //Check if any flow and water quality data exists
-        Object[] returnArray1 = data.extractFlow_and_WQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
+        Object[] returnArray1 = Data.extractFlow_and_WQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
         String[][] sortableData = (String[][]) returnArray1[0];
         String[][] WQdata = (String[][]) returnArray1[1];
         
@@ -593,23 +592,21 @@
         String[][] sortableData_user = new String[0][0];
         String[][] WQdata_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            Object[] returnArray = user_Data.readUserFileLDC("UserData", stationID, userData, wqTest, beginDate, endDate);
+            Object[] returnArray = User_Data.readUserFileLDC("UserData", stationID, userData, wqTest, beginDate, endDate);
             sortableData_user = (String[][]) returnArray[0];
             WQdata_user = (String[][]) returnArray[1];
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
-        String[][] WQdata_combined = doubleArray.mergeData(WQdata, WQdata_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] WQdata_combined = DoubleArray.mergeData(WQdata, WQdata_user, mergeMethod);
         
         //Check if any data exists
-        ArrayList<String> errorMessage = new ArrayList<String>();
+        ArrayList<String> errorMessage = new ArrayList<>();
         if(sortedData_combined.length == 0){
             if(sortedData.length == 0){
                 errorMessage.add("There is no available flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
@@ -673,14 +670,14 @@
         String[][] dailyData = OpenLOADESTresultFile(mainFolder + File.separator + fileName + ".ind");
        
         //convert results to daily,monthly,yearly
-        String[][] dailyresultData = doubleArray.computeFlowMethod(dailyData, "daily", "total", true);
-        String[][] monthlyresultData = doubleArray.computeFlowMethod(dailyData, "monthly", "total", true);
-        String[][] yearlyresultData = doubleArray.computeFlowMethod(dailyData, "yearly", "total", true);
+        String[][] dailyresultData = DoubleArray.computeFlowMethod(dailyData, "daily", "total", true);
+        String[][] monthlyresultData = DoubleArray.computeFlowMethod(dailyData, "monthly", "total", true);
+        String[][] yearlyresultData = DoubleArray.computeFlowMethod(dailyData, "yearly", "total", true);
         
         // Calculate Daily stats
         CalculateStatistics(dailyresultData, "daily");
         double dailyIQR = dailyupperQuartile - dailylowerQuartile;// Find IQR
-        ArrayList<Double> dailyoutliers = new ArrayList<Double>();// Get daily outliers
+        ArrayList<Double> dailyoutliers = new ArrayList<>();// Get daily outliers
         for (int i = 0; i < dailyresultData.length; i++){
             double value = Double.parseDouble(dailyresultData[i][1]);
             if(value < (dailylowerQuartile - 1.5 * dailyIQR) || value > (dailyupperQuartile + 1.5 * dailyIQR)){        
@@ -691,7 +688,7 @@
         // Calculate Monthly stats
         CalculateStatistics(monthlyresultData, "monthly");
         double monthlyIQR = monthlyupperQuartile - monthlylowerQuartile;// Find IQR
-        ArrayList<Double> monthlyoutliers = new ArrayList<Double>();// Get monthly outliers
+        ArrayList<Double> monthlyoutliers = new ArrayList<>();// Get monthly outliers
         for (int i = 0; i < monthlyresultData.length; i++){
             double value = Double.parseDouble(monthlyresultData[i][1]);
             if(value < (monthlylowerQuartile - 1.5 * monthlyIQR) || value > (monthlyupperQuartile + 1.5 * monthlyIQR)){        
@@ -702,7 +699,7 @@
         // Calculate Yearly stats
         CalculateStatistics(yearlyresultData, "yearly");
         double yearlyIQR = yearlyupperQuartile - yearlylowerQuartile;// Find IQR
-        ArrayList<Double> yearlyoutliers = new ArrayList<Double>();// Get yearly outliers
+        ArrayList<Double> yearlyoutliers = new ArrayList<>();// Get yearly outliers
         for (int i = 0; i < yearlyresultData.length; i++){
             double value = Double.parseDouble(yearlyresultData[i][1]);
             if(value < (yearlylowerQuartile - 1.5 * yearlyIQR) || value > (yearlyupperQuartile + 1.5 * yearlyIQR)){        
@@ -711,9 +708,9 @@
         }
         
         //Prep. boxplot data for output function
-        ArrayList<ArrayList<Double>> dailyBoxplotOutliers = new ArrayList<ArrayList<Double>>();
-        ArrayList<ArrayList<Double>> monthlyBoxplotOutliers = new ArrayList<ArrayList<Double>>();
-        ArrayList<ArrayList<Double>> yearlyBoxplotOutliers = new ArrayList<ArrayList<Double>>();
+        ArrayList<ArrayList<Double>> dailyBoxplotOutliers = new ArrayList<>();
+        ArrayList<ArrayList<Double>> monthlyBoxplotOutliers = new ArrayList<>();
+        ArrayList<ArrayList<Double>> yearlyBoxplotOutliers = new ArrayList<>();
         dailyBoxplotOutliers.add(dailyoutliers);
         monthlyBoxplotOutliers.add(monthlyoutliers);
         yearlyBoxplotOutliers.add(yearlyoutliers);
@@ -722,13 +719,13 @@
         double[][] yearlyBoxplotData = {{yearlymax},{yearlyupperQuartile},{yearlymedian},{yearlylowerQuartile},{yearlymin}};
         
         //Put graph file writer call here
-        doubleArray.writeTimeSeries(mainFolder, dailyresultData, "daily", getDailyTimeseries().getName(), true);
-        doubleArray.writeTimeSeries(mainFolder, monthlyresultData, "monthly", getMonthlyTimeseries().getName(), true);
-        doubleArray.writeTimeSeries(mainFolder, yearlyresultData, "yearly", getYearlyTimeseries().getName(), true);
+        DoubleArray.writeTimeSeries(mainFolder, dailyresultData, "daily", getDailyTimeseries().getName(), true);
+        DoubleArray.writeTimeSeries(mainFolder, monthlyresultData, "monthly", getMonthlyTimeseries().getName(), true);
+        DoubleArray.writeTimeSeries(mainFolder, yearlyresultData, "yearly", getYearlyTimeseries().getName(), true);
         
-        doubleArray.writeBoxplot(mainFolder, dailyBoxplotOutliers, dailyBoxplotData, getDailyBoxplot().getName());
-        doubleArray.writeBoxplot(mainFolder, monthlyBoxplotOutliers, monthlyBoxplotData, getMonthlyBoxplot().getName());
-        doubleArray.writeBoxplot(mainFolder, yearlyBoxplotOutliers, yearlyBoxplotData, getYearlyBoxplot().getName());
+        DoubleArray.writeBoxplot(mainFolder, dailyBoxplotOutliers, dailyBoxplotData, getDailyBoxplot().getName());
+        DoubleArray.writeBoxplot(mainFolder, monthlyBoxplotOutliers, monthlyBoxplotData, getMonthlyBoxplot().getName());
+        DoubleArray.writeBoxplot(mainFolder, yearlyBoxplotOutliers, yearlyBoxplotData, getYearlyBoxplot().getName());
 
         // Find what units that LOADEST has given the Load in
         String graphUnits = "??";

src/java/m/cfa/regionalfdc/guiRegionalFDC_Model.java

@@ -25,7 +25,7 @@
 import org.jfree.data.xy.XYSeriesCollection;
 
 /**
-* Last Updated: 17-March-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 23-October-2011
 */
@@ -61,7 +61,7 @@
     public void setDatabases(String databaseList){ databases = databaseList.split("\t"); }//Break up the inputs per flow duration curve
     public void setStationIDs(String stationIDlist){ stationIDs = stationIDlist.split("\t"); }//Break up the inputs per flow duration curve
     public void setStationNames(String stationNameList){ stationNames = stationNameList.split("\t"); }//Break up the inputs per flow duration curve
-    public void setNormalizingMetricName(String normalizingMetricName){ normalizingMetricName = normalizingMetricName; }
+    public void setNormalizingMetricName(String metricName){ normalizingMetricName = metricName; }
     public void setNormalizingMetrics(String normalizingMetrics_str) throws IOException{
         //Break up formatted cross-section points and create a double array for easier use
         String[] metricsList = normalizingMetrics_str.split("\t");
@@ -88,7 +88,7 @@
             fdcData = fdcData_new;
         }else{
             //if the list is empty or formatted wrong, thrown an error
-            ArrayList<String> errorMessage =  new ArrayList<String>();
+            ArrayList<String> errorMessage =  new ArrayList<>();
             errorMessage.add("The list of flow duration curves provided is not in the expected tab-delimited format like: 'fdc_1\tflow_1\tfdc_2\tflow_2\n0\t550\t0\t4052\n25\t380\t20\t3706\n50\t376\t40\t3214\n75\t350\t60\t3191\n100\t300\t80\t2995\n-1\t-1\t100\t2500\n'");
             writeError(errorMessage);
         }
@@ -104,16 +104,14 @@
      * @return  a double[] of the flows associated with the current percentile
      */
     private void calculatePercentileSummmary(double[][] xyRanks, boolean firstEntry, int stationIndex){
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
         //Hard coded percentile summary table
         double[] frqDisp = {99, 95, 90, 75, 50, 25, 10, 5, 1};
         
         //Interpolate desired percentiles
-        double[] currentFDC = doubleArray.getColumn(xyRanks, 0);
-        double[] currentFlows = doubleArray.getColumn(xyRanks, 1);
-        double[] currentSummary = doubleMath.linearInterpolation(currentFDC, currentFlows, frqDisp);
-        currentSummary = doubleMath.roundColumn(currentSummary, 100);
+        double[] currentFDC = DoubleArray.getColumn(xyRanks, 0);
+        double[] currentFlows = DoubleArray.getColumn(xyRanks, 1);
+        double[] currentSummary = DoubleMath.linearInterpolation(currentFDC, currentFlows, frqDisp);
+        currentSummary = DoubleMath.roundColumn(currentSummary, 100);
         
         //Determine if this is the first entry and should thus include the exceedance percentile summary values
         if(firstEntry){
@@ -140,8 +138,8 @@
      */
     private double[][] normalizeFDCdata(double[] currentFDC, double[] currentFlows, double normalizingMetric){
         //Divide FDC flows by the normalizingMetric (drainage area, Q2, long-term average, etc)
-        ArrayList<Double> modifiedFDC = new ArrayList<Double>();
-        ArrayList<Double> modifiedFlows = new ArrayList<Double>();
+        ArrayList<Double> modifiedFDC = new ArrayList<>();
+        ArrayList<Double> modifiedFlows = new ArrayList<>();
         for(int i=0; i<currentFDC.length; i++){
             if(currentFDC[i] != -1){
                 modifiedFDC.add(currentFDC[i]);
@@ -174,11 +172,9 @@
         }
         
         //Interpolate a FDC at a standard location so a weighted average of multiple of these can be made
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        double[] currentFDC = doubleArray.getColumn(currentFDCdata, 0);
-        double[] currentFlows = doubleArray.getColumn(currentFDCdata, 1);
-        double[] summaryFDC = doubleMath.linearInterpolation(currentFDC, currentFlows, exceedances);
+        double[] currentFDC = DoubleArray.getColumn(currentFDCdata, 0);
+        double[] currentFlows = DoubleArray.getColumn(currentFDCdata, 1);
+        double[] summaryFDC = DoubleMath.linearInterpolation(currentFDC, currentFlows, exceedances);
         
         //Multiply the resulting interpolated FDC by the it's size for a weighted average later
         double currentSize = currentFDCdata.length;
@@ -197,7 +193,7 @@
      */
     private void writeResults(double[][] results) throws IOException{
         //Remove zero results
-        ArrayList<String> finalResults = new ArrayList<String>();
+        ArrayList<String> finalResults = new ArrayList<>();
         for(int i=0; i<results.length; i++){
             //Only keep non-zero data
             if(Double.compare(results[i][0],0) != 0){
@@ -240,8 +236,6 @@
      * @throws IOException 
      */
     public void run() throws IOException {
-        DoubleArray doubleArray = new DoubleArray();
-        
         //Graph the complete flow duration curve for the time period
         XYPlot plot = new XYPlot();
         //Create X Axis
@@ -258,14 +252,14 @@
         Color[] colorMatrix = {new Color(105, 0, 255), Color.blue, Color.cyan, Color.green, new Color(255, 135, 0), new Color(255, 0, 50), new Color(255, 0, 255, 100)};
         
         //Normalize each duration curve by it's provided index/metric
-        ArrayList<double[]> weightedFDC_all = new ArrayList<double[]>();
+        ArrayList<double[]> weightedFDC_all = new ArrayList<>();
         String[][] graphData = new String[fdcData.length][fdcData[0].length];
         int stationIndex = 0;
         summaryTable = "";
         double totalSize = 0;
         for(int i=0; i<fdcData[0].length; i++){
-            double[] currentFDC = doubleArray.getColumn(fdcData, i);
-            double[] currentFlows = doubleArray.getColumn(fdcData, i+1);
+            double[] currentFDC = DoubleArray.getColumn(fdcData, i);
+            double[] currentFlows = DoubleArray.getColumn(fdcData, i+1);
             double[][] normalizedFDC = normalizeFDCdata(currentFDC, currentFlows, normalizingMetrics[stationIndex]);
             calculatePercentileSummmary(normalizedFDC, false, stationIndex);
             totalSize = totalSize + normalizedFDC.length;
@@ -346,28 +340,25 @@
         plot.mapDatasetToRangeAxis(0, 0);
         
         //Output XY data for use with JHighCharts
-        doubleArray.writeXYseries(mainFolder, graphData, getRegionalFDCgraphOutput().getName());
-        
-        //Set extra graphing preferences
-        Graphing graphing = new Graphing();
+        DoubleArray.writeXYseries(mainFolder, graphData, getRegionalFDCgraphOutput().getName());
 
         //Add Flow Range Labels:
-        plot = graphing.addIntervalLabel(plot, "High Flow", 0, 10);
-        plot = graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
-        plot = graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
-        plot = graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
-        plot = graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
+        plot = Graphing.addIntervalLabel(plot, "High Flow", 0, 10);
+        plot = Graphing.addIntervalLabel(plot, "Moist Conditions", 10, 40);
+        plot = Graphing.addIntervalLabel(plot, "Mid-Range Flows", 40, 60);
+        plot = Graphing.addIntervalLabel(plot, "Dry Conditions", 60, 90);
+        plot = Graphing.addIntervalLabel(plot, "Low Flow", 90, 100);
         
         //Set extra plot preferences
-        plot = graphing.setLogYaxisPreferences(plot);
+        plot = Graphing.setLogYaxisPreferences(plot);
 
         //Graph plot onto JfreeChart
         String graphTitle = "Regionalized Flow Duration Curve, Normalized by: " + normalizingMetricName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, true);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, true);
         
         //Set legend Font
         LegendTitle legendTitle = chart.getLegend();
-        legendTitle.setItemFont(graphing.masterFont);
+        legendTitle.setItemFont(Graphing.masterFont);
 
         //Save resulting graph for proof it works
         try{

src/java/m/cfa/stagedischarge/guiStageDischarge_Model.java

@@ -17,7 +17,7 @@
 import org.jfree.chart.plot.XYPlot;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 24-June-2014
 */
@@ -47,9 +47,8 @@
      */
     private void graphStageDischarge(double[][] ratingCurveData){
         //Graph ratingCurveData
-        Graphing graphing = new Graphing();
         XYPlot plot = new XYPlot();
-        plot = graphing.addXYSeries(plot, ratingCurveData, Color.darkGray, 0);
+        plot = Graphing.addXYSeries(plot, ratingCurveData, Color.darkGray, 0);
         
         //Create Y Axis
         ValueAxis rangeAxis = new NumberAxis("Stage [ft]");
@@ -60,11 +59,11 @@
         plot.setDomainAxis(0, domainAxis);
         
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the charts out of the plots
         String graph_title = "Stage-Discharge Rating Curve for Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graph_title, graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart(graph_title, Graphing.titleFont, plot, false);
         
         //Save monthly timeseries graph for use later
         try{
@@ -115,12 +114,11 @@
     }
     public void run() throws IOException, Exception{
         //Get stage-discharge data
-        Data data = new Data();
-        double[][] stageDischargeData = data.extractStageDischarge(database, stationID);
+        double[][] stageDischargeData = Data.extractStageDischarge(database, stationID);
         
         //Check if any rating curve data exists
         if(stageDischargeData.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             errorMessage.add("There is no available stage-discharge/rating curve data in the " + database +  " database for station '" + stationID + "'.");
             writeError(errorMessage);
         }

src/java/m/cfa/storetservice/V1_0.java

@@ -22,8 +22,7 @@
     @Override
     protected String process() throws Exception {
         //Setup directory/result file
-        STORET_Data storet_Data = new STORET_Data();
-        result_file = storet_Data.downloadSTORET(getWorkspaceDir().toString(), 
+        result_file = STORET_Data.downloadSTORET(getWorkspaceDir().toString(), 
                                    getResourceFile("driver"), 
                                    false, 
                                    getStringParam("org_id"), 

src/java/m/cfa/timeseries/CDPHE_lowFlowStats.java

@@ -9,7 +9,7 @@
 import java.util.Date;
 
 /**
-* Last Updated: 16-March-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 16-December-2014
 */
@@ -30,9 +30,6 @@
                                      int m,
                                      double R,
                                      String waterYearBegin) throws IOException, ParseException{
-        DoubleArray doubleArray =  new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        
         if(flowData.length == 0){
             return -1;
         }
@@ -46,25 +43,25 @@
 //        }
         int nextYear = currentYear + 1;
         String beginDate = String.valueOf(currentYear) + "-" + waterYearBegin;//String beginDate = String.valueOf(currentYear) + "-04-01";
-        String previousDay = doubleArray.getDay(beginDate, -1);
+        String previousDay = DoubleArray.getDay(beginDate, -1);
         String endDate = String.valueOf(nextYear) + previousDay.substring(4);//String endDate = String.valueOf(nextYear) + "-03-31";
         
         //Calculate Flow statistics for each water-year in time period
-        ArrayList<Double> mDay_annualNonZero = new ArrayList<Double>();
+        ArrayList<Double> mDay_annualNonZero = new ArrayList<>();
         double mDay_annual = 0;
         boolean moreYears = finalYear > nextYear;
         while(moreYears){
             //Get current water year's data and calculate it's statistics
-            String[][] partialData = doubleArray.getPeriodData(flowData, beginDate, endDate);
+            String[][] partialData = DoubleArray.getPeriodData(flowData, beginDate, endDate);
             if(partialData.length > 0){
                 
                 //Calculate m-day statistics
-                Object[] resultArray = doubleArray.getMdayData(partialData, m, "arithmetic");
+                Object[] resultArray = DoubleArray.getMdayData(partialData, m, "arithmetic");
                 //ArrayList<String> average_Mday_date = (ArrayList<String>) resultArray[0];
                 ArrayList<Double> average_Mday = (ArrayList<Double>) resultArray[1];
 
                 //Calculate minimum flow and save it
-                double mDay_min = doubleMath.min(average_Mday);
+                double mDay_min = DoubleMath.min(average_Mday);
                 if(mDay_min > 0) mDay_annualNonZero.add(mDay_min);
                 mDay_annual++;
             }
@@ -74,7 +71,7 @@
                 currentYear++;
                 nextYear++;
                 beginDate = String.valueOf(currentYear) + "-" + waterYearBegin;//beginDate = String.valueOf(currentYear) + "-04-01";
-                previousDay = doubleArray.getDay(beginDate, -1);
+                previousDay = DoubleArray.getDay(beginDate, -1);
                 endDate = String.valueOf(nextYear) + previousDay.substring(4);//endDate = String.valueOf(nextYear) + "-03-31";
             }else{
                 moreYears = false;
@@ -82,15 +79,15 @@
         }
         
         //Convert low flows to natural-log low-flows
-        ArrayList<Double> lnMday_annualNonZero = new ArrayList<Double>();
+        ArrayList<Double> lnMday_annualNonZero = new ArrayList<>();
         for(int i=0; i<mDay_annualNonZero.size(); i++){
             lnMday_annualNonZero.add( Math.log(mDay_annualNonZero.get(i)) );
         }
         
         //Determine properties of natural-log low-flows
-        double U = doubleMath.meanArithmetic(lnMday_annualNonZero);//Mean
-        double S = doubleMath.StandardDeviationSample(lnMday_annualNonZero);//Standard Deviation
-        double G = doubleMath.SkewnessSample(lnMday_annualNonZero);//Skewness
+        double U = DoubleMath.meanArithmetic(lnMday_annualNonZero);//Mean
+        double S = DoubleMath.StandardDeviationSample(lnMday_annualNonZero);//Standard Deviation
+        double G = DoubleMath.SkewnessSample(lnMday_annualNonZero);//Skewness
         
         //Determine fraction of m-day low flows that are zero
         double nonZeroFlows = Double.parseDouble(String.valueOf(mDay_annualNonZero.size()));
@@ -109,7 +106,7 @@
         double designFlow = Math.exp(U + K*S);
         
         //Call file writer for outputs fo flow statistics
-        designFlow = doubleMath.round(designFlow, 2);
+        designFlow = DoubleMath.round(designFlow, 2);
         
         return designFlow;
     }
@@ -134,9 +131,6 @@
                                    int R,
                                    int clusterLength,
                                    int clusterCountMax) throws IOException, ParseException{
-        DoubleArray doubleArray =  new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        
         //Calculate annual design low flow
         double DFLOW_annual = CDPHE_Biological_calcs(flowData, m, R, clusterLength, clusterCountMax);
         
@@ -160,35 +154,35 @@
             DFLOW_dec = monthlyDFLOWs[11];
         }else{
             //Otherwise treat it as a normal biological flow
-            DFLOW_jan = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "01-01", "01-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_feb = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "02-01", "02-28"), m, R, clusterLength, clusterCountMax);
-            DFLOW_mar = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "03-01", "03-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_apr = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "04-01", "04-30"), m, R, clusterLength, clusterCountMax);
-            DFLOW_may = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "05-01", "05-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_jun = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "06-01", "06-30"), m, R, clusterLength, clusterCountMax);
-            DFLOW_jul = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "07-01", "07-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_aug = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "08-01", "08-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_sep = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "09-01", "09-30"), m, R, clusterLength, clusterCountMax);
-            DFLOW_oct = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "10-01", "10-31"), m, R, clusterLength, clusterCountMax);
-            DFLOW_nov = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "11-01", "11-30"), m, R, clusterLength, clusterCountMax);
-            DFLOW_dec = CDPHE_Biological_calcs(doubleArray.getSeasonalData(flowData, "12-01", "12-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_jan = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "01-01", "01-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_feb = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "02-01", "02-28"), m, R, clusterLength, clusterCountMax);
+            DFLOW_mar = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "03-01", "03-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_apr = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "04-01", "04-30"), m, R, clusterLength, clusterCountMax);
+            DFLOW_may = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "05-01", "05-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_jun = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "06-01", "06-30"), m, R, clusterLength, clusterCountMax);
+            DFLOW_jul = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "07-01", "07-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_aug = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "08-01", "08-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_sep = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "09-01", "09-30"), m, R, clusterLength, clusterCountMax);
+            DFLOW_oct = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "10-01", "10-31"), m, R, clusterLength, clusterCountMax);
+            DFLOW_nov = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "11-01", "11-30"), m, R, clusterLength, clusterCountMax);
+            DFLOW_dec = CDPHE_Biological_calcs(DoubleArray.getSeasonalData(flowData, "12-01", "12-31"), m, R, clusterLength, clusterCountMax);
         }
         
         //Calculate design flows
         double[] designFlows = new double[13];
-        designFlows[0] = doubleMath.round(DFLOW_annual, 2);   //entire record
-        designFlows[1] = doubleMath.round(DFLOW_jan, 2);   //January
-        designFlows[2] = doubleMath.round(DFLOW_feb, 2);   //February
-        designFlows[3] = doubleMath.round(DFLOW_mar, 2);   //March
-        designFlows[4] = doubleMath.round(DFLOW_apr, 2);   //April
-        designFlows[5] = doubleMath.round(DFLOW_may, 2);   //May
-        designFlows[6] = doubleMath.round(DFLOW_jun, 2);   //June
-        designFlows[7] = doubleMath.round(DFLOW_jul, 2);   //July
-        designFlows[8] = doubleMath.round(DFLOW_aug, 2);   //August
-        designFlows[9] = doubleMath.round(DFLOW_sep, 2);   //September
-        designFlows[10] = doubleMath.round(DFLOW_oct, 2);  //October
-        designFlows[11] = doubleMath.round(DFLOW_nov, 2);  //November
-        designFlows[12] = doubleMath.round(DFLOW_dec, 2);  //December
+        designFlows[0] = DoubleMath.round(DFLOW_annual, 2);   //entire record
+        designFlows[1] = DoubleMath.round(DFLOW_jan, 2);   //January
+        designFlows[2] = DoubleMath.round(DFLOW_feb, 2);   //February
+        designFlows[3] = DoubleMath.round(DFLOW_mar, 2);   //March
+        designFlows[4] = DoubleMath.round(DFLOW_apr, 2);   //April
+        designFlows[5] = DoubleMath.round(DFLOW_may, 2);   //May
+        designFlows[6] = DoubleMath.round(DFLOW_jun, 2);   //June
+        designFlows[7] = DoubleMath.round(DFLOW_jul, 2);   //July
+        designFlows[8] = DoubleMath.round(DFLOW_aug, 2);   //August
+        designFlows[9] = DoubleMath.round(DFLOW_sep, 2);   //September
+        designFlows[10] = DoubleMath.round(DFLOW_oct, 2);  //October
+        designFlows[11] = DoubleMath.round(DFLOW_nov, 2);  //November
+        designFlows[12] = DoubleMath.round(DFLOW_dec, 2);  //December
         
         return designFlows;
     }
@@ -212,11 +206,8 @@
                                    int R,
                                    int clusterLength,
                                    int clusterCountMax) throws IOException, ParseException{
-        DoubleArray doubleArray =  new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        
         //Calculate m-day statistics
-        Object[] resultArray = doubleArray.getMdayData(flowData, m, "harmonic");
+        Object[] resultArray = DoubleArray.getMdayData(flowData, m, "harmonic");
         ArrayList<String> average_Mday_date = (ArrayList<String>) resultArray[0];
         ArrayList<Double> average_Mday = (ArrayList<Double>) resultArray[1];
         
@@ -264,7 +255,7 @@
         }
         
         //Call file writer for outputs fo flow statistics
-        designFlow = doubleMath.round(designFlow, 3);
+        designFlow = DoubleMath.round(designFlow, 3);
         
         return designFlow;
     }
@@ -281,13 +272,11 @@
      * @return 
      */
     private double countExcursions(ArrayList<String> averageMday_date, ArrayList<Double> averageMday, int m, double trialDFLOW, int clusterLength, double clusterCountMax) throws ParseException{
-        DoubleArray doubleArray = new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        DateFormat desiredDateFormat = doubleArray.getDateFormat("daily",  false);
+        DateFormat desiredDateFormat = DoubleArray.getDateFormat("daily",  false);
         
         //Determine number of excursions periods
-        ArrayList<String> periodList_dates = new ArrayList<String>();
-        ArrayList<Integer> periodList_lengths = new ArrayList<Integer>();
+        ArrayList<String> periodList_dates = new ArrayList<>();
+        ArrayList<Integer> periodList_lengths = new ArrayList<>();
         for(int i=0; i<averageMday.size(); i++){
             //Check if m-day average flow is below the design flow (aka the start of an excursion period)
             if(averageMday.get(i) < trialDFLOW){
@@ -321,8 +310,8 @@
         }
         
         //Group the excursions periods into excursion clusters
-        ArrayList<String> clusterList_dates = new ArrayList<String>();
-        ArrayList<Double> clusterList_lengths = new ArrayList<Double>();
+        ArrayList<String> clusterList_dates = new ArrayList<>();
+        ArrayList<Double> clusterList_lengths = new ArrayList<>();
         double m_double = m;
         for(int i=0; i<periodList_dates.size(); i++){
             //Get the dates of the excursion period
@@ -346,7 +335,7 @@
                     }
                 }else{
                     //This is excursion period is in a new excursion cluster, so add it to the list
-                    String clusterEndDate = doubleArray.getDay(period_beginDate_String, clusterLength);
+                    String clusterEndDate = DoubleArray.getDay(period_beginDate_String, clusterLength);
                     double periodLength = periodList_lengths.get(i);
                     double clusterCount = periodLength / m_double;
                     if(clusterCount > clusterCountMax){
@@ -358,7 +347,7 @@
                 }
             }else{
                 //If this is the first excursion cluster, determine it's end date
-                String clusterEndDate = doubleArray.getDay(period_beginDate_String, clusterLength);
+                String clusterEndDate = DoubleArray.getDay(period_beginDate_String, clusterLength);
                 double periodLength = periodList_lengths.get(i);
                 double clusterCount = periodLength / m_double;
                 if(clusterCount > clusterCountMax){
@@ -371,7 +360,7 @@
         }
         
         //Sum the sizes of the excursion clusters
-        double excursionCountTotal = doubleMath.sum(clusterList_lengths);
+        double excursionCountTotal = DoubleMath.sum(clusterList_lengths);
         return excursionCountTotal;
     }
     /**
@@ -381,13 +370,11 @@
      * @return 
      */
     private int getExcursionLength(String beginDate, String endDate) throws ParseException{
-        DoubleArray doubleArray = new DoubleArray();
-        
         //Determine how many days pass before "nextDay" == "endDay"
-        String nextDay = doubleArray.getDay(beginDate, 1);
+        String nextDay = DoubleArray.getDay(beginDate, 1);
         int excursionLength = 2;
         while(!nextDay.equals(endDate)){
-            nextDay = doubleArray.getDay(nextDay, 1);
+            nextDay = DoubleArray.getDay(nextDay, 1);
             excursionLength++;
         }
         return excursionLength;
@@ -401,21 +388,18 @@
      * @throws IOException 
      */
     private double[] calc30E3(String[][] flowData, double DFLOW_annual) throws IOException, ParseException{
-        DoubleArray doubleArray =  new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        
         //Calculate m-day statistics
-        Object[] resultArray = doubleArray.getMdayData(flowData, 30, "harmonic");
+        Object[] resultArray = DoubleArray.getMdayData(flowData, 30, "harmonic");
         ArrayList<String> mDayAverage_dates = (ArrayList<String>) resultArray[0];
         ArrayList<Double> mDayAverage = (ArrayList<Double>) resultArray[1];
         
         //Determine the year and 'month' of each m-day flow
-        ArrayList<String> mDayAverage_month = new ArrayList<String>();
+        ArrayList<String> mDayAverage_month = new ArrayList<>();
         for(int i=0; i<mDayAverage.size(); i++){
             //Get the date for 14 days from the begin date, 
             //aka a total of 15 days of data and check if this is still in the same month
             String beginDate = mDayAverage_dates.get(i).substring(0,10);
-            String midDate = doubleArray.getDay(beginDate, 12);
+            String midDate = DoubleArray.getDay(beginDate, 12);
             
             String beginMonth = beginDate.substring(5,7);
             String midMonth = midDate.substring(5,7);
@@ -431,7 +415,7 @@
         double[] monthlyLowFlow = new double[12];
         for(int j=0; j<12; j++){
             //Get all flows for the current month
-            ArrayList<Double> currentMonthFlows = new ArrayList<Double>();
+            ArrayList<Double> currentMonthFlows = new ArrayList<>();
             for(int i=0; i<mDayAverage.size(); i++){
                 if(mDayAverage_month.get(i).equalsIgnoreCase(months[j])){
                     currentMonthFlows.add(mDayAverage.get(i));
@@ -439,7 +423,7 @@
             }
             
             //Determine m-day minimum flow for this month
-            double mDayAveage_MonthlyMin = doubleMath.min(currentMonthFlows);
+            double mDayAveage_MonthlyMin = DoubleMath.min(currentMonthFlows);
             
             //Check whether to return the annual 30E3 value or the monthly flow (Reg 31.9.3.e)
             if(currentMonthFlows.isEmpty() || DFLOW_annual > mDayAveage_MonthlyMin){
@@ -479,11 +463,9 @@
      * @throws ParseException 
      */
     public double CDPHE_HumanHealth(String[][] flowData) throws IOException, ParseException{
-        DoubleMath doubleMath = new DoubleMath();
-        
         //Calculate design flows
         double[] flowOnlyData = convertSecondColumn(flowData);
-        double designFlow = doubleMath.round(doubleMath.meanHarmonic(flowOnlyData), 2);
+        double designFlow = DoubleMath.round(DoubleMath.meanHarmonic(flowOnlyData), 2);
         
         return designFlow;
     }
@@ -510,10 +492,7 @@
      * @throws ParseException 
      */
     public String CDPHE_REG31(String[][] flowData) throws IOException, ParseException{
-        DoubleArray doubleArray = new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        
-        ArrayList<Integer> monthlyRowIndex = new ArrayList<Integer>();
+        ArrayList<Integer> monthlyRowIndex = new ArrayList<>();
         monthlyRowIndex.add(1);
         monthlyRowIndex.add(2);
         monthlyRowIndex.add(3);
@@ -530,22 +509,22 @@
         //Calculate acute biologically based low flows (1-day 3-year)
         System.out.println("Calcualting Reg. 31 1E3 Acute Monthly Low Flows...");
         double[] monthlyBiological_1day = CDPHE_Biological(flowData, 1, 3, 120, 5);
-        double monlyBiological_1day_min = doubleMath.min(doubleArray.getRows(monthlyBiological_1day, monthlyRowIndex));
+        double monlyBiological_1day_min = DoubleMath.min(DoubleArray.getRows(monthlyBiological_1day, monthlyRowIndex));
         
         //Calculate chronic biologically based low flows (7-day 3-year)
         System.out.println("Calcualting Reg. 31 7E3 Chronic Monthly Low Flows...");
         double[] monthlyBiological_7day = CDPHE_Biological(flowData, 7, 3, 120, 5);
-        double monlyBiological_7day_min = doubleMath.min(doubleArray.getRows(monthlyBiological_7day, monthlyRowIndex));
+        double monlyBiological_7day_min = DoubleMath.min(DoubleArray.getRows(monthlyBiological_7day, monthlyRowIndex));
         
         //Calculate chronic biologically based low flows (30-day 3-year)
         System.out.println("Calcualting Reg. 31 30E3 Chronic Monthly Low Flows...");
         double[] monthlyBiological_30day = CDPHE_Biological(flowData, 30, 3, 120, 5);
-        double monlyBiological_30day_min = doubleMath.min(doubleArray.getRows(monthlyBiological_30day, monthlyRowIndex));
+        double monlyBiological_30day_min = DoubleMath.min(DoubleArray.getRows(monthlyBiological_30day, monthlyRowIndex));
         
         //Calculate annual median of data with a 5-year return period
         System.out.println("Calcualting Reg. 31 1E5 Annual Median of Daily Average Flows...");
         double median_R_yearFlow = annualMedianReturnPeriod(flowData, 5);
-        median_R_yearFlow = doubleMath.round(median_R_yearFlow, 2);
+        median_R_yearFlow = DoubleMath.round(median_R_yearFlow, 2);
         
         //Format the results into a summary table
         String summaryTable = "Month\t1E3 Acute Monthly Low Flows\t7E3 Chronic Monthly Low Flows\t30E3 Chronic Monthly Low Flows";
@@ -560,20 +539,18 @@
     }
     private double annualMedianReturnPeriod(String[][] flowData, int R){
         //Calculate the annual median of daily average flow values with a recurrance intervale of 1 in "R" years
-        DoubleArray doubleArray =  new DoubleArray();
-        DoubleMath doubleMath =  new DoubleMath();
-        
-        //Calculate mediant for each year in time period
-        ArrayList<Double> medianFlows = new ArrayList<Double>();
+
+        //Calculate median for each year in time period
+        ArrayList<Double> medianFlows = new ArrayList<>();
         boolean moreYears = flowData.length > 0;
         String currentYear = flowData[0][0].substring(0,4);
         String finalYear = flowData[flowData.length - 1][0].substring(0,4);
         while(moreYears){
             //Get current year's data and calculate it's statistics
-            String[][] partialData = doubleArray.getYearsData(flowData, currentYear);
+            String[][] partialData = DoubleArray.getYearsData(flowData, currentYear);
             if(partialData.length > 0){
                 double[] flowOnlyData = convertSecondColumn(partialData);
-                medianFlows.add(doubleMath.median(flowOnlyData));
+                medianFlows.add(DoubleMath.median(flowOnlyData));
             }
             
             int nextYear = Integer.parseInt(currentYear) + 1;
@@ -585,7 +562,7 @@
         }
         
         //Calculate return period of data
-        double median_RyearFlow = doubleArray.calculateLowFlowReturnPeriod(medianFlows, R);
+        double median_RyearFlow = DoubleArray.calculateLowFlowReturnPeriod(medianFlows, R);
         return median_RyearFlow;
     }
 }

src/java/m/cfa/timeseries/guiTimeseries_Model.java

@@ -52,7 +52,7 @@
 import org.jfree.ui.RectangleInsets;
 
 /**
-* Last Updated: 29-April-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 24-June-2011
 */
@@ -333,24 +333,23 @@
      */
     private void CalculateStatistics(String[][] data, String flag) {
         //Convert into double list
-        ArrayList<Double> dataList = new ArrayList<Double>();
+        ArrayList<Double> dataList = new ArrayList<>();
         for(int i=0; i<data.length; i++){
             dataList.add(Double.parseDouble(data[i][1]));
         }
         
         //Calculate statistics
-        DoubleMath doubleMath = new DoubleMath();
-        double temp1 = doubleMath.round(doubleMath.max(dataList),3);//Call Max function
-        double temp2 = doubleMath.round(doubleMath.min(dataList),3);//Call Min function
-        double temp3 = doubleMath.round(doubleMath.Percentile_function(dataList,0.75),3);//Call Upper Quartile function
-        double temp4 = doubleMath.round(doubleMath.Percentile_function(dataList,0.25),3);//Call Lower Quartile function
-        double temp5 = doubleMath.round(doubleMath.median(dataList),3);//Call Median function
-        double temp6 = doubleMath.round(doubleMath.meanArithmetic(dataList),3);//Call Mean function
-        double temp7 = doubleMath.round(doubleMath.StandardDeviationSample(dataList),3);//Call standard deviation function
-        double temp8 = doubleMath.round(doubleMath.VarianceSample(dataList),3);//Call variance function
-        double temp9 = doubleMath.round(doubleMath.SkewnessSample(dataList),8);//Call skewness function
-        double temp10 = doubleMath.round(doubleMath.CoefficientOfVariation(dataList),3);//call coefficient of variation function
-        double temp11 = doubleMath.round(doubleMath.KendallCorrelationCoefficient(dataList), 4);
+        double temp1 = DoubleMath.round(DoubleMath.max(dataList),3);//Call Max function
+        double temp2 = DoubleMath.round(DoubleMath.min(dataList),3);//Call Min function
+        double temp3 = DoubleMath.round(DoubleMath.Percentile_function(dataList,0.75),3);//Call Upper Quartile function
+        double temp4 = DoubleMath.round(DoubleMath.Percentile_function(dataList,0.25),3);//Call Lower Quartile function
+        double temp5 = DoubleMath.round(DoubleMath.median(dataList),3);//Call Median function
+        double temp6 = DoubleMath.round(DoubleMath.meanArithmetic(dataList),3);//Call Mean function
+        double temp7 = DoubleMath.round(DoubleMath.StandardDeviationSample(dataList),3);//Call standard deviation function
+        double temp8 = DoubleMath.round(DoubleMath.VarianceSample(dataList),3);//Call variance function
+        double temp9 = DoubleMath.round(DoubleMath.SkewnessSample(dataList),8);//Call skewness function
+        double temp10 = DoubleMath.round(DoubleMath.CoefficientOfVariation(dataList),3);//call coefficient of variation function
+        double temp11 = DoubleMath.round(DoubleMath.KendallCorrelationCoefficient(dataList), 4);
         
         if(flag.equalsIgnoreCase("all")){
             max = temp1;
@@ -451,9 +450,7 @@
                                        boolean showLine,
                                        String yAxisTitle,
                                        String units) throws ParseException, IOException {
-        DoubleArray doubleArray = new DoubleArray();
-        Graphing graphing = new Graphing();
-        DateFormat periodDateFormat = doubleArray.getDateFormat("daily",  false);
+        DateFormat periodDateFormat = DoubleArray.getDateFormat("daily",  false);
         Date jfreeChartDateLimit = periodDateFormat.parse("1900-01-01");
         
         //Re-Format graphing data for output for use with JHighChart
@@ -477,7 +474,7 @@
         }
         
         String[][] graphData = new String[sortedData.length][5];
-        DateFormat desiredDateFormat = doubleArray.getDateFormat(timeStep, false);
+        DateFormat desiredDateFormat = DoubleArray.getDateFormat(timeStep, false);
         for(int i=0; i<sortedData.length; i++){
             Date newDate = desiredDateFormat.parse(sortedData[i][0]);
             graphData[i][0] = sortedData[i][0];
@@ -519,21 +516,21 @@
         
         //Write output for JHighChart timeseries for use on eRAMS
         Arrays.sort(graphData, new m.cfa.DateComparator());
-        doubleArray.writeTimeSeries(mainFolder, graphData, timeStep, getTimeseriesOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, timeStep, getTimeseriesOutput().getName(), false);
         
         //Create TimeSeries graph of merged data
         XYPlot plotTime = new XYPlot();
         boolean showLegend = false;
-        TimeSeries series = graphing.createTimeSeriesFromData(sortedData, stationID + ": Data", timeStep);
-        TimeSeries series2 = graphing.createTimeSeriesFromData(sortedData_user, stationID + ": User Data", timeStep);
+        TimeSeries series = Graphing.createTimeSeriesFromData(sortedData, stationID + ": Data", timeStep);
+        TimeSeries series2 = Graphing.createTimeSeriesFromData(sortedData_user, stationID + ": User Data", timeStep);
         
         //Create user data points
         if(sortedData_user.length != 0){//only show user points if it is not zero
-            plotTime = graphing.addTimeseriesData(plotTime, series, showLine, color, false, false, false, true, 0);
-            plotTime = graphing.addTimeseriesData(plotTime, series2, showLine, color2, false, false, false, true, 1);
+            plotTime = Graphing.addTimeseriesData(plotTime, series, showLine, color, false, false, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, series2, showLine, color2, false, false, false, true, 1);
             showLegend = true;
         }else{
-            plotTime = graphing.addTimeseriesData(plotTime, series, showLine, color, false, false, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, series, showLine, color, false, false, false, true, 0);
         }
         
         //Create period analysis average lines
@@ -557,7 +554,7 @@
                 periodSeries.add(new Day(period1End_Date), value);
             }
             
-            plotTime = graphing.addTimeseriesData(plotTime, periodSeries, true, Color.red, false, false, true, true, 2);
+            plotTime = Graphing.addTimeseriesData(plotTime, periodSeries, true, Color.red, false, false, true, true, 2);
             showLegend = true;
         }
         if(period2Data.length > 0){
@@ -580,7 +577,7 @@
                 periodSeries.add(new Day(period2End_Date), value);
             }
             
-            plotTime = graphing.addTimeseriesData(plotTime, periodSeries, true, new Color(255, 135, 0), false, false, true, true, 3);//gold
+            plotTime = Graphing.addTimeseriesData(plotTime, periodSeries, true, new Color(255, 135, 0), false, false, true, true, 3);//gold
             showLegend = true;
         }
         if(period3Data.length > 0){
@@ -603,7 +600,7 @@
                 periodSeries.add(new Day(period3End_Date), value);
             }
             
-            plotTime = graphing.addTimeseriesData(plotTime, periodSeries, true, Color.green, false, false, true, true, 4);
+            plotTime = Graphing.addTimeseriesData(plotTime, periodSeries, true, Color.green, false, false, true, true, 4);
             showLegend = true;
         }
       
@@ -618,16 +615,16 @@
         plotTime.setDomainAxis(0, domainTime);
 
         //Set extra plot preferences
-        plotTime = graphing.setTimeAxisPreferences(plotTime);
+        plotTime = Graphing.setTimeAxisPreferences(plotTime);
 
         //Create the chart with the plot and a legend
         String graphTitle = "Time Series for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plotTime, showLegend);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plotTime, showLegend);
         
         //Set legend Font
         if(showLegend){
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
         }
         
         //Save resulting graph for use later
@@ -645,12 +642,9 @@
      * @param yAxisTitle  a String of the title for the Y axis of the boxplot
      */
     private void createTimeseriesBoxplot(String[][] data, String yAxisTitle) throws IOException{        
-        DoubleArray doubleArray = new DoubleArray();
-        Graphing graphing = new Graphing();
-        
         //Prep. boxplot data for output function
-        ArrayList<ArrayList<Double>> boxplotOutliers = new ArrayList<ArrayList<Double>>();
-        ArrayList<Double> outliers = new ArrayList<Double>();// Get daily outliers
+        ArrayList<ArrayList<Double>> boxplotOutliers = new ArrayList<>();
+        ArrayList<Double> outliers = new ArrayList<>();// Get daily outliers
         double IQR = upperQuartile - lowerQuartile;// Find IQR
         for (int i = 0; i < data.length; i++){
             double value = Double.parseDouble(data[i][1]);
@@ -662,7 +656,7 @@
         double[][] boxplotData = {{max},{upperQuartile},{median},{lowerQuartile},{min}};
         
         //Write output for JHighChart boxplot for use on eRAMS
-        doubleArray.writeBoxplot(mainFolder, boxplotOutliers, boxplotData, getBoxplotOutput().getName());
+        DoubleArray.writeBoxplot(mainFolder, boxplotOutliers, boxplotData, getBoxplotOutput().getName());
         
         
         //Create boxplot of the timeseries data
@@ -671,14 +665,14 @@
         //Create X Axis
         ValueAxis xAxis = new NumberAxis("");
         xAxis.setRange(0, 10);
-        xAxis.setLabelFont(graphing.masterFont);
-        xAxis.setTickLabelFont(graphing.masterFont);
+        xAxis.setLabelFont(Graphing.masterFont);
+        xAxis.setTickLabelFont(Graphing.masterFont);
         xAxis.setTickLabelsVisible(false);
         plot.setDomainAxis(0, xAxis);
         
         ValueAxis yAxis = new NumberAxis(yAxisTitle);
-        yAxis.setLabelFont(graphing.masterFont);
-        yAxis.setTickLabelFont(graphing.masterFont);
+        yAxis.setLabelFont(Graphing.masterFont);
+        yAxis.setTickLabelFont(Graphing.masterFont);
         plot.setRangeAxis(0, yAxis);
 
         //Calculate and add Median to dataset
@@ -795,7 +789,7 @@
         
         
         //Create the chart with the plot and a legend
-        JFreeChart chart = new JFreeChart("Boxplot of Timeseries Data", graphing.titleFont, plot, true);
+        JFreeChart chart = new JFreeChart("Boxplot of Timeseries Data", Graphing.titleFont, plot, true);
 
         //Save resulting graph for use later
         try{
@@ -839,12 +833,11 @@
                                      Color color,
                                      Color color2,
                                      String xAxisTitle) throws ParseException, IOException {
-        DoubleArray doubleArray = new DoubleArray();
-        double[][] xyRanks = doubleArray.weibullPlottingPosition(sortedData);
-        double[][] xyRanks_user = doubleArray.weibullPlottingPosition(sortedData_user);
-        double[][] xyRanks_period1 = doubleArray.weibullPlottingPosition(period1Data);
-        double[][] xyRanks_period2 = doubleArray.weibullPlottingPosition(period2Data);
-        double[][] xyRanks_period3 = doubleArray.weibullPlottingPosition(period3Data);
+        double[][] xyRanks = DoubleArray.weibullPlottingPosition(sortedData);
+        double[][] xyRanks_user = DoubleArray.weibullPlottingPosition(sortedData_user);
+        double[][] xyRanks_period1 = DoubleArray.weibullPlottingPosition(period1Data);
+        double[][] xyRanks_period2 = DoubleArray.weibullPlottingPosition(period2Data);
+        double[][] xyRanks_period3 = DoubleArray.weibullPlottingPosition(period3Data);
         
         //Calculate cdf for the entire dataset
         XYSeries series = new XYSeries(stationID + ": Data");
@@ -900,7 +893,7 @@
             }
         }
         //Save cdf data for JHighCharts
-        doubleArray.writeXYseries(mainFolder, cdfData, getCDFoutput().getName());
+        DoubleArray.writeXYseries(mainFolder, cdfData, getCDFoutput().getName());
         
         //Create renderer, and axis for timeseries graph
         XYPlot plot = new XYPlot();
@@ -961,17 +954,16 @@
         plot.setDomainAxis(0, xAxis);
         
         //Set extra plot preferences
-        Graphing graphing = new Graphing();
-        plot = graphing.setLogXaxisPreferences(plot);
+        plot = Graphing.setLogXaxisPreferences(plot);
 
         //Create the charts out of the plots
         String graphTitle = "CDF for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, legendTF);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, legendTF);
         
         //Set legend Font
         if(legendTF){
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
         }
         
         //Save monthly timeseries graph for use later
@@ -1003,12 +995,8 @@
                                                String[][] period3Data,
                                                String yAxisTitle,
                                                boolean logYaxis_TF) throws IOException, ParseException {
-        DoubleArray doubleArray = new DoubleArray();
-        DoubleMath doubleMath = new DoubleMath();
-        Graphing graphing = new Graphing();
-        
         //Initialize variables
-        DateFormat desiredDateFormat = doubleArray.getDateFormat("daily", false);
+        DateFormat desiredDateFormat = DoubleArray.getDateFormat("daily", false);
         String[][] graphData = new String[366][6];
         String[] dayList = new String[366];
         int seriesIndex = 0;
@@ -1025,10 +1013,10 @@
         String currentDate_str = "2000-01-01";
         if(waterYearTF) currentDate_str = "1999-10-01";
         for(int j=1; j<=366; j++){
-            ArrayList<Double> dateData = new ArrayList<Double>();
-            ArrayList<Double> dateData_period1 = new ArrayList<Double>();
-            ArrayList<Double> dateData_period2 = new ArrayList<Double>();
-            ArrayList<Double> dateData_period3 = new ArrayList<Double>();
+            ArrayList<Double> dateData = new ArrayList<>();
+            ArrayList<Double> dateData_period1 = new ArrayList<>();
+            ArrayList<Double> dateData_period2 = new ArrayList<>();
+            ArrayList<Double> dateData_period3 = new ArrayList<>();
             dayList[j-1] = String.valueOf(j);
             
             for(int i=0; i<sortedData.length; i++){
@@ -1057,8 +1045,8 @@
             }
             
             //Calculate average/median
-            double dayValue_median = doubleMath.median(dateData);
-            double dayValue_mean = doubleMath.meanArithmetic(dateData);
+            double dayValue_median = DoubleMath.median(dateData);
+            double dayValue_mean = DoubleMath.meanArithmetic(dateData);
             Day currentDay = new Day(desiredDateFormat.parse(currentDate_str));
             median_TS.add(currentDay, dayValue_median);
             mean_TS.add(currentDay, dayValue_mean);
@@ -1070,9 +1058,9 @@
             double dayValue_period1 = -1;
             if(!dateData_period1.isEmpty()){
                 if(medianTF){
-                    dayValue_period1 = doubleMath.median(dateData_period1);
+                    dayValue_period1 = DoubleMath.median(dateData_period1);
                 }else{
-                    dayValue_period1 = doubleMath.meanArithmetic(dateData_period1);
+                    dayValue_period1 = DoubleMath.meanArithmetic(dateData_period1);
                 }
                 period1_TS.add(currentDay, dayValue_period1);
             }
@@ -1082,9 +1070,9 @@
             double dayValue_period2 = -1;
             if(!dateData_period2.isEmpty()){
                 if(medianTF){
-                    dayValue_period2 = doubleMath.median(dateData_period2);
+                    dayValue_period2 = DoubleMath.median(dateData_period2);
                 }else{
-                    dayValue_period2 = doubleMath.meanArithmetic(dateData_period2);
+                    dayValue_period2 = DoubleMath.meanArithmetic(dateData_period2);
                 }
                 period2_TS.add(currentDay, dayValue_period2);
             }
@@ -1094,33 +1082,33 @@
             double dayValue_period3 = -1;
             if(!dateData_period3.isEmpty()){
                 if(medianTF){
-                    dayValue_period3 = doubleMath.median(dateData_period3);
+                    dayValue_period3 = DoubleMath.median(dateData_period3);
                 }else{
-                    dayValue_period3 = doubleMath.meanArithmetic(dateData_period3);
+                    dayValue_period3 = DoubleMath.meanArithmetic(dateData_period3);
                 }
                 period3_TS.add(currentDay, dayValue_period3);
             }
             graphData[j-1][5] = String.valueOf(dayValue_period3);
             
             //Move to the next day
-            currentDate_str = doubleArray.getDay(currentDate_str, 1);
+            currentDate_str = DoubleArray.getDay(currentDate_str, 1);
         }
 
         //Create renderer, and axis for timeseries graph
-        plot = graphing.addTimeseriesData(plot, median_TS, true, Color.gray, false, false, true, true, seriesIndex);
+        plot = Graphing.addTimeseriesData(plot, median_TS, true, Color.gray, false, false, true, true, seriesIndex);
         seriesIndex++;
-        plot = graphing.addTimeseriesData(plot, mean_TS, true, Color.black, false, false, true, true, seriesIndex);
+        plot = Graphing.addTimeseriesData(plot, mean_TS, true, Color.black, false, false, true, true, seriesIndex);
         seriesIndex++;
         if(!period1_TS.isEmpty()){
-            plot = graphing.addTimeseriesData(plot, period1_TS, true, Color.red, false, false, true, true, seriesIndex);
+            plot = Graphing.addTimeseriesData(plot, period1_TS, true, Color.red, false, false, true, true, seriesIndex);
             seriesIndex++;
         }
         if(!period2_TS.isEmpty()){
-            plot = graphing.addTimeseriesData(plot, period2_TS, true, new Color(255, 135, 0), false, false, true, true, seriesIndex);
+            plot = Graphing.addTimeseriesData(plot, period2_TS, true, new Color(255, 135, 0), false, false, true, true, seriesIndex);
             seriesIndex++;
         }
         if(!period3_TS.isEmpty()){
-            plot = graphing.addTimeseriesData(plot, period3_TS, true, Color.green, false, false, true, true, seriesIndex);
+            plot = Graphing.addTimeseriesData(plot, period3_TS, true, Color.green, false, false, true, true, seriesIndex);
             seriesIndex++;
         }
         int recentYear = seriesIndex;
@@ -1152,10 +1140,10 @@
             if(waterYearTF){
                 //Get current water year's data
                 String previousYear = String.valueOf(Integer.parseInt(currentYear) - 1);
-                partialData = doubleArray.getPeriodData(sortedData, previousYear + "-10-01", currentYear + "-09-30");
+                partialData = DoubleArray.getPeriodData(sortedData, previousYear + "-10-01", currentYear + "-09-30");
             }else{
                 //Get current calendar year's data
-                partialData = doubleArray.getYearsData(sortedData, currentYear);
+                partialData = DoubleArray.getYearsData(sortedData, currentYear);
             }
             //Get current year's data and graph it
             for(int i=0; i<partialData.length; i++){
@@ -1172,8 +1160,8 @@
                     partialData[i][0] = "2000-" + month_day;
                 }
             }
-            TimeSeries currentYear_TS = graphing.createTimeSeriesFromData(partialData, "temp", "daily");
-            plot = graphing.addTimeseriesData(plot, currentYear_TS, true, Color.lightGray, false, false, false, false, seriesIndex);
+            TimeSeries currentYear_TS = Graphing.createTimeSeriesFromData(partialData, "temp", "daily");
+            plot = Graphing.addTimeseriesData(plot, currentYear_TS, true, Color.lightGray, false, false, false, false, seriesIndex);
             seriesIndex++;
             
             if(waterYearTF){
@@ -1204,9 +1192,9 @@
                 }catch(IndexOutOfBoundsException e){
                     //do nothing as it already has a -1 value
                 }
-                currentDate_str = doubleArray.getDay(currentDate_str, 1);
+                currentDate_str = DoubleArray.getDay(currentDate_str, 1);
             }
-            graphData = doubleArray.appendcolumn_Matrix(graphData, partialDayData);//Add day values (aka y points)
+            graphData = DoubleArray.appendcolumn_Matrix(graphData, partialDayData);//Add day values (aka y points)
             
             //Check to stop looping
             if(waterYearTF){
@@ -1231,12 +1219,12 @@
         }
         
         //Re-add the most recent year to the graph so it renders on top
-        TimeSeries finalYear_TS = graphing.createTimeSeriesFromData(mostRecentYearData, String.valueOf(finalYear), "daily");
-        plot = graphing.addTimeseriesData(plot, finalYear_TS, true, Color.cyan, false, false, true, true, recentYear);
+        TimeSeries finalYear_TS = Graphing.createTimeSeriesFromData(mostRecentYearData, String.valueOf(finalYear), "daily");
+        plot = Graphing.addTimeseriesData(plot, finalYear_TS, true, Color.cyan, false, false, true, true, recentYear);
         
         //Output monthly boxplot and timeseries data for use with JHighCharts
         if(rasterTF || envelopeTF){
-            doubleArray.writeTimeSeries(mainFolder, graphData, "daily", getTimeseriesEnvelopeOutput().getName(), false);
+            DoubleArray.writeTimeSeries(mainFolder, graphData, "daily", getTimeseriesEnvelopeOutput().getName(), false);
         }
         
         //Check if the user desires a raster graph
@@ -1267,15 +1255,15 @@
             plot.setDomainAxis(0, domainTime);
 
             //Set extra plot preferences
-            plot = graphing.setAxisPreferences(plot);
+            plot = Graphing.setAxisPreferences(plot);
 
             //Create the charts out of the plots
             String graphTitle = "Time Series Range for " + database + " Station: " + stationID + "; " + stationName;
-            JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, true);
+            JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, true);
 
             //Set legend Font
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
 
             //Save monthly timeseries graph for use later
             try{
@@ -1293,14 +1281,11 @@
      * and save the resulting graph to the specified location.
      */
     private void createTimeseriesRasterGraph(String[][] envelopePlotData, String zAxisTitle) throws IOException {
-        DoubleMath doubleMath = new DoubleMath();
-        Graphing graphing = new Graphing();
-        
         //Manipulate envelope plot data into raster plot data format
-        ArrayList<Double> tempData_dayOfYear = new ArrayList<Double>();
-        ArrayList<Double> tempData_year = new ArrayList<Double>();
-        ArrayList<Double> tempData_value = new ArrayList<Double>();
-        ArrayList<Double> tempData_noZeros = new ArrayList<Double>();
+        ArrayList<Double> tempData_dayOfYear = new ArrayList<>();
+        ArrayList<Double> tempData_year = new ArrayList<>();
+        ArrayList<Double> tempData_value = new ArrayList<>();
+        ArrayList<Double> tempData_noZeros = new ArrayList<>();
         double currentYear = Double.parseDouble(end.substring(0,4));
         for(int j=6; j< envelopePlotData[0].length; j++){//skip data columns 0=date, 1=median, 2=average, 3=period1, 4=period2, 5=period3 to get to the individual year(s) data
             for(int i=0; i<366; i++){//day loop
@@ -1322,8 +1307,8 @@
             rasterData[i][1] = tempData_year.get(i);
             rasterData[i][2] = tempData_value.get(i);
         }
-        double tempMin = doubleMath.min(tempData_value);
-        double tempMax = doubleMath.max(tempData_value);
+        double tempMin = DoubleMath.min(tempData_value);
+        double tempMax = DoubleMath.max(tempData_value);
         
         //Renderer
         XYZDataset xyzRasterData = new XYZArrayDataset(rasterData);
@@ -1338,7 +1323,7 @@
             value = Math.log(tempMax);
             delta = (Math.log(tempMax) - Math.log(tempMin))/(contourColors.length -1);
             if(tempMin == 0){
-                delta = (Math.log(tempMax) - Math.log(doubleMath.min(tempData_noZeros)))/(contourColors.length -1);
+                delta = (Math.log(tempMax) - Math.log(DoubleMath.min(tempData_noZeros)))/(contourColors.length -1);
             }
         }
         for(int i=0; i<contourColors.length; i++){
@@ -1376,11 +1361,11 @@
         plot.setDomainAxis(0, domainAxis);
         
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the charts out of the plots
         String graphTitle = "Raster Graph for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, false);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, false);
         
         //Add scale/legend
         NumberAxis scaleAxis = new NumberAxis(zAxisTitle);
@@ -1389,8 +1374,8 @@
         }
         scaleAxis.setAxisLinePaint(Color.white);
         scaleAxis.setTickMarkPaint(Color.white);
-        scaleAxis.setTickLabelFont(graphing.masterFont);
-        scaleAxis.setLabelFont(graphing.masterFont);
+        scaleAxis.setTickLabelFont(Graphing.masterFont);
+        scaleAxis.setLabelFont(Graphing.masterFont);
         PaintScaleLegend legend = new PaintScaleLegend(paintScale, scaleAxis);
         legend.setAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
         legend.setAxisOffset(5.0);
@@ -1504,10 +1489,6 @@
                                            String[][] period3Data,
                                            Color color,
                                            String xAxisTitle) throws IOException{
-        //Initialize other classes
-        Graphing graphing = new Graphing();
-        DoubleMath doubleMath = new DoubleMath();
-        
         //Determine bin type (arithmetic/logarithmic) and then range
         double[] lowerLimit = new double[numBins];
         double[] upperLimit = new double[numBins];
@@ -1554,7 +1535,7 @@
                     count++;
                 }
             }
-            String categoryTitle = String.valueOf(doubleMath.round(lowerLimit[j],1)) + " to " + String.valueOf(doubleMath.round(upperLimit[j],1));
+            String categoryTitle = String.valueOf(DoubleMath.round(lowerLimit[j],1)) + " to " + String.valueOf(DoubleMath.round(upperLimit[j],1));
             dataset.addValue(count, "All Data", categoryTitle);
             histogramData[j][0] = categoryTitle;
             histogramData[j][1] = String.valueOf(count);
@@ -1617,8 +1598,7 @@
             }
         }
         //Save histogram data for JHighCharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeXYseries(mainFolder, histogramData, getHistogramOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, histogramData, getHistogramOutput().getName());
         
         //Define renderer properties for bar graph
         int seriesIndex = 0;
@@ -1652,16 +1632,16 @@
         CategoryPlot plot = new CategoryPlot(dataset, xAxis, yAxis, renderer);
         
         //Set extra plot preferences
-        plot = graphing.setCategoryAxisPreferences(plot);
+        plot = Graphing.setCategoryAxisPreferences(plot);
         
         //Create the chart with the plot
         String graphTitle = "Histogram for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, legendTF);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, legendTF);
         
         //Set legend Font
         if(legendTF){
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
         }
         
         //Save resulting graph for use later
@@ -1699,27 +1679,25 @@
                                               String[][] period3Data,
                                               String yAxisTitle) throws IOException {
         //Convert sortedData to monthly data
-        DoubleArray doubleArray = new DoubleArray();
-        sortedData = doubleArray.computeFlowMethod(sortedData, "Monthly", "Average", false);
-        period1Data = doubleArray.computeFlowMethod(period1Data, "Monthly", "Average", false);
-        period2Data = doubleArray.computeFlowMethod(period2Data, "Monthly", "Average", false);
-        period3Data = doubleArray.computeFlowMethod(period3Data, "Monthly", "Average", false);
+        sortedData = DoubleArray.computeFlowMethod(sortedData, "Monthly", "Average", false);
+        period1Data = DoubleArray.computeFlowMethod(period1Data, "Monthly", "Average", false);
+        period2Data = DoubleArray.computeFlowMethod(period2Data, "Monthly", "Average", false);
+        period3Data = DoubleArray.computeFlowMethod(period3Data, "Monthly", "Average", false);
         
         //Calculate monthly averages for the entire dataset
         XYPlot plot = new XYPlot();
-        Graphing graphing = new Graphing();
         XYSeries series = new XYSeries(stationID + ": Data");
         XYSeries period1_series = new XYSeries(stationID + ": Period 1 Data");
         XYSeries period2_series = new XYSeries(stationID + ": Period 2 Data");
         XYSeries period3_series = new XYSeries(stationID + ": Period 3 Data");
-//        ArrayList<ArrayList<Double>> boxplotOutliers = new ArrayList<ArrayList<Double>>();
+//        ArrayList<ArrayList<Double>> boxplotOutliers = new ArrayList<>();
 //        double[][] boxplotData = new double[5][12];
         String[][] monthXYdata = new String[12][8];
         boolean showOutliers = false, showExtremeOutliers = false;
         int seriesIndex = 0;
         
         for(int j=1; j<=12; j++){
-            ArrayList<Double> monthlyData = new ArrayList<Double>();
+            ArrayList<Double> monthlyData = new ArrayList<>();
             double flow = 0, flow1 = 0, flow2 = 0, flow3 = 0;
             double ctr = 0, ctr1 = 0, ctr2 = 0, ctr3 = 0;
             
@@ -1789,7 +1767,7 @@
             //Create Monthly boxplot
             if(monthlyData.size() > 4){
                 //Create quartile rectangle, min-max line, and median line
-                Object[] returnArray = graphing.boxplot_shapes(plot, j, monthlyData, seriesIndex, showOutliers, showExtremeOutliers);
+                Object[] returnArray = Graphing.boxplot_shapes(plot, j, monthlyData, seriesIndex, showOutliers, showExtremeOutliers);
                 plot = (XYPlot) returnArray[0];
                 showOutliers = (boolean) returnArray[1];
                 showExtremeOutliers = (boolean) returnArray[2];
@@ -1869,13 +1847,13 @@
         boolean moreYears = sortedData.length > 0;
         while(moreYears){
             //Get current year's data and graph it
-            String[][] partialData = doubleArray.getYearsData(sortedData, currentYear);
+            String[][] partialData = DoubleArray.getYearsData(sortedData, currentYear);
             double[][] currentYearData = new double[partialData.length][2];
             for(int i=0; i<partialData.length; i++){
                 currentYearData[i][0] = Double.parseDouble(partialData[i][0].substring(5));//month
                 currentYearData[i][1] = Double.parseDouble(partialData[i][1]);//value
             }
-            graphing.addXYSeries(plot, currentYearData, Color.lightGray, seriesIndex);
+            Graphing.addXYSeries(plot, currentYearData, Color.lightGray, seriesIndex);
             seriesIndex++;
             
             //Save results for output for JHighCharts
@@ -1894,8 +1872,8 @@
                     //do nothing as it already has a -1 value
                 }
             }
-            monthXYdata = doubleArray.appendcolumn_Matrix(monthXYdata, monthList);//Add list of months (aka x points)
-            monthXYdata = doubleArray.appendcolumn_Matrix(monthXYdata, partialMonthData);//Add month values (aka y points)
+            monthXYdata = DoubleArray.appendcolumn_Matrix(monthXYdata, monthList);//Add list of months (aka x points)
+            monthXYdata = DoubleArray.appendcolumn_Matrix(monthXYdata, partialMonthData);//Add month values (aka y points)
             
             //Determine the next data year to continue looping over
             int nextYear = Integer.parseInt(currentYear) + 1;
@@ -1907,8 +1885,8 @@
         }
         
         //Output monthly boxplot and timeseries data for use with JHighCharts
-        doubleArray.writeXYseries(mainFolder, monthXYdata, getMonthlyTimeseriesOutput().getName());
-//        doubleArray.writeBoxplot(mainFolder, boxplotOutliers, boxplotData, getMonthlyBoxplotOutput().getName());
+        DoubleArray.writeXYseries(mainFolder, monthXYdata, getMonthlyTimeseriesOutput().getName());
+//        DoubleArray.writeBoxplot(mainFolder, boxplotOutliers, boxplotData, getMonthlyBoxplotOutput().getName());
         
         //Create Y Axis
         ValueAxis rangeAxis = new NumberAxis(yAxisTitle);
@@ -1922,16 +1900,16 @@
         plot.setDomainAxis(0, domainAxis);
         
         //Set extra plot preferences
-        plot = graphing.setAxisPreferences(plot);
+        plot = Graphing.setAxisPreferences(plot);
 
         //Create the charts out of the plots
         String graphTitle = "Monthly Averages for " + database + " Station: " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plot, legendTF);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plot, legendTF);
         
         //Set legend Font
         if(legendTF){
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
         }
         
         //Save monthly timeseries graph for use later
@@ -1966,14 +1944,13 @@
      * @throws InterruptedException 
      */
     public void run(File storetResourceFile) throws IOException, InterruptedException, ParseException, Exception {
-        DoubleArray doubleArray = new DoubleArray();
         //If no date input, make it the maximum of available data
         if(beginDate == null || beginDate.equalsIgnoreCase("")){
             beginDate = "1850-01-01";
         }
         if(endDate == null || endDate.equalsIgnoreCase("")){
             // Pull current date for upper limit of data search
-            DateFormat desiredDateFormat = doubleArray.getDateFormat("daily", false);
+            DateFormat desiredDateFormat = DoubleArray.getDateFormat("daily", false);
             Date currentDate = new Date();
             endDate = desiredDateFormat.format(currentDate);
         }
@@ -1986,11 +1963,10 @@
         Color color = Color.black, color2 = Color.black;
         boolean showLine = true;
         
-        Data data = new Data();
         String[][] sortableData = new String[0][2];
         if(wqTest.equalsIgnoreCase("flow")){
             //Check if any flow data exists
-            sortableData = data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
+            sortableData = Data.extractFlowData(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, userData);
 
             //Define other graph information
             graphUnits = "cfs";
@@ -2005,7 +1981,7 @@
             showLine = true;
         }else{
             //Search for WQ data
-            Object[] returnArray = data.extractWQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
+            Object[] returnArray = Data.extractWQdata(mainFolder, storetResourceFile, database, organizationID, stationID, beginDate, endDate, wqTest, userData);
             sortableData = (String[][]) returnArray[0];
             graphUnits = (String) returnArray[1];
             WQlabel = (String) returnArray[2];
@@ -2025,18 +2001,17 @@
         //Check if merging the datasets is desired, if so get the user data
         String[][] sortableData_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            sortableData_user = user_Data.readUserFile("UserData", stationID, userData, wqTest, beginDate, endDate);
+            sortableData_user = User_Data.readUserFile("UserData", stationID, userData, wqTest, beginDate, endDate);
         }
         
         //Sort the Data by date to remove duplicate date entries
-        String[][] sortedData = doubleArray.removeDuplicateDates(sortableData);
-        String[][] sortedData_user = doubleArray.removeDuplicateDates(sortableData_user);
+        String[][] sortedData = DoubleArray.removeDuplicateDates(sortableData);
+        String[][] sortedData_user = DoubleArray.removeDuplicateDates(sortableData_user);
 
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortedData, sortedData_user, mergeMethod);
         if(sortedData_combined.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             if(sortableData.length == 0){
                 errorMessage.add("There is no available " + wqTest + " data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                 if(database.equalsIgnoreCase("CDWR")){
@@ -2054,10 +2029,10 @@
         end = sortedData_combined[sortedData_combined.length - 1][0];
         
         //Get period data for analyses
-        String[][] period1Data = doubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
-        String[][] period2Data = doubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
-        String[][] period3Data = doubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
-        String[][] seasonalData = doubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
+        String[][] period1Data = DoubleArray.getPeriodData(sortedData_combined, period1Begin, period1End);
+        String[][] period2Data = DoubleArray.getPeriodData(sortedData_combined, period2Begin, period2End);
+        String[][] period3Data = DoubleArray.getPeriodData(sortedData_combined, period3Begin, period3End);
+        String[][] seasonalData = DoubleArray.getSeasonalData(sortedData_combined, seasonBegin, seasonEnd);
         
         //Perform operations on daily data before it is converted to the user desired timeStep
         createTimeseriesMonthlyGraph(sortedData_combined, period1Data, period2Data, period3Data, monthlyYaxisTitle);
@@ -2135,12 +2110,12 @@
         }
         
         //Perform analysis method on data
-        sortedData_combined = doubleArray.computeFlowMethod(sortedData_combined, timeStep, method, false);
-        sortedData_user = doubleArray.computeFlowMethod(sortedData_user, timeStep, method, false);
-        period1Data = doubleArray.computeFlowMethod(period1Data, timeStep, method, false);
-        period2Data = doubleArray.computeFlowMethod(period2Data, timeStep, method, false);
-        period3Data = doubleArray.computeFlowMethod(period3Data, timeStep, method, false);
-        seasonalData = doubleArray.computeFlowMethod(seasonalData, timeStep, method, false);
+        sortedData_combined = DoubleArray.computeFlowMethod(sortedData_combined, timeStep, method, false);
+        sortedData_user = DoubleArray.computeFlowMethod(sortedData_user, timeStep, method, false);
+        period1Data = DoubleArray.computeFlowMethod(period1Data, timeStep, method, false);
+        period2Data = DoubleArray.computeFlowMethod(period2Data, timeStep, method, false);
+        period3Data = DoubleArray.computeFlowMethod(period3Data, timeStep, method, false);
+        seasonalData = DoubleArray.computeFlowMethod(seasonalData, timeStep, method, false);
         
         //CalculateStatistics
         CalculateStatistics(sortedData_combined, "all");
@@ -2156,7 +2131,7 @@
         createTimeseriesCDF(sortedData_combined, sortedData_user, period1Data, period2Data, period3Data, color, color2, yAxisTitle);
         
         //Get today's date for the source reference
-        DateFormat sourceDateFormat = doubleArray.getDateFormat("15-min", false);
+        DateFormat sourceDateFormat = DoubleArray.getDateFormat("15-min", false);
         String today = sourceDateFormat.format(new Date());
         if(database.equalsIgnoreCase("USGS")){
             dataSource = "Stream flow data and water quality test data retrieved from the U.S. Geological Survey, National Water Information System: Web Interface. http://waterdata.usgs.gov/nwis, accessed: " + today;

src/java/m/cfa/timeseries15min/gui15minTimeseries_Model.java

@@ -30,7 +30,7 @@
 import org.jfree.data.time.TimeSeries;
 
 /**
-* Last Updated: 4-February-2016
+* Last Updated: 13-September-2016
 * @author Tyler Wible
 * @since 23-June-2014
 */
@@ -97,7 +97,7 @@
      */
     private void CalculateDailyStatistics(String[][] flowData) throws IOException, ParseException {
         //Calculate flow statistics for the entire analysis period
-        ArrayList<Double> allData = new ArrayList<Double>();
+        ArrayList<Double> allData = new ArrayList<>();
         for(int i=0; i<flowData.length; i++){
             allData.add(Double.parseDouble(flowData[i][1]));
         }
@@ -118,16 +118,15 @@
         standardDeviation = Double.parseDouble(resultSummary[5][1]);
         
         //Calculate Flow statistics for each day in time period
-        DoubleArray doubleArray = new DoubleArray();
         boolean moreDays = flowData.length > 0;
         String currentDay = flowData[0][0].substring(0,10);
         String finalDay = flowData[flowData.length - 1][0].substring(0,10);
         while(moreDays){
             //Get current year's data and calculate it's statistics
-            ArrayList<Double> partialData = doubleArray.getDaysData(flowData, currentDay);
+            ArrayList<Double> partialData = DoubleArray.getDaysData(flowData, currentDay);
             resultSummary = CalculateStatistics(partialData, resultSummary, currentDay);
             
-            String nextDay = doubleArray.getDay(currentDay, 1);
+            String nextDay = DoubleArray.getDay(currentDay, 1);
             if(finalDay.compareToIgnoreCase(String.valueOf(nextDay)) >= 0){
                 currentDay = String.valueOf(nextDay);
             }else{
@@ -138,23 +137,20 @@
         writeSummary(resultSummary);
     }
     private String[][] CalculateStatistics(ArrayList<Double> dataList, String[][] resultSummary, String header){
-        DoubleMath doubleMath = new DoubleMath();
-        DoubleArray doubleArray = new DoubleArray();
-        
-        double maxVal = doubleMath.max(dataList);
-        double minVal = doubleMath.min(dataList);
+        double maxVal = DoubleMath.max(dataList);
+        double minVal = DoubleMath.min(dataList);
         double rangeVal = maxVal - minVal;
-        double aveVal = doubleMath.meanArithmetic(dataList);
-        double stDev = doubleMath.StandardDeviationSample(dataList);
+        double aveVal = DoubleMath.meanArithmetic(dataList);
+        double stDev = DoubleMath.StandardDeviationSample(dataList);
         
         //Append current results to summary
         String[] resultArray = {header, 
-            String.valueOf(doubleMath.round(maxVal,3)), 
-            String.valueOf(doubleMath.round(minVal,3)),
-            String.valueOf(doubleMath.round(rangeVal,3)),
-            String.valueOf(doubleMath.round(aveVal,3)),
-            String.valueOf(doubleMath.round(stDev,3))};
-        resultSummary = doubleArray.appendcolumn_Matrix(resultSummary, resultArray);
+            String.valueOf(DoubleMath.round(maxVal,3)), 
+            String.valueOf(DoubleMath.round(minVal,3)),
+            String.valueOf(DoubleMath.round(rangeVal,3)),
+            String.valueOf(DoubleMath.round(aveVal,3)),
+            String.valueOf(DoubleMath.round(stDev,3))};
+        resultSummary = DoubleArray.appendcolumn_Matrix(resultSummary, resultArray);
         
         return resultSummary;
     }
@@ -207,21 +203,19 @@
         }
         
         //Output XY data for use with JHighCharts
-        DoubleArray doubleArray = new DoubleArray();
-        doubleArray.writeTimeSeries(mainFolder, graphData, "15-min", getTimeseriesOutput().getName(), false);
+        DoubleArray.writeTimeSeries(mainFolder, graphData, "15-min", getTimeseriesOutput().getName(), false);
         
         //Create renderer, and axis for timeseries graph
-        Graphing graphing = new Graphing();
         XYPlot plotTime = new XYPlot();
         boolean showLegend = false;
         
         //Create user data points
         if(sortedData_user.length != 0){//only show user points if it is not zero
-            plotTime = graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
-            plotTime = graphing.addTimeseriesData(plotTime, series2, true, Color.darkGray, false, false, false, true, 1);
+            plotTime = Graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, series2, true, Color.darkGray, false, false, false, true, 1);
             showLegend = true;
         }else{
-            plotTime = graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
+            plotTime = Graphing.addTimeseriesData(plotTime, series, true, Color.blue, false, false, false, true, 0);
         }
       
         //Create Y Axis
@@ -235,16 +229,16 @@
         plotTime.setDomainAxis(0, domainTime);
 
         //Set extra plot preferences
-        plotTime = graphing.setTimeAxisPreferences(plotTime);
+        plotTime = Graphing.setTimeAxisPreferences(plotTime);
 
         //Create the chart with the plot and a legend
         String graphTitle = "Time Series for " + database + " Station " + stationID + "; " + stationName;
-        JFreeChart chart = new JFreeChart(graphTitle, graphing.titleFont, plotTime, showLegend);
+        JFreeChart chart = new JFreeChart(graphTitle, Graphing.titleFont, plotTime, showLegend);
         
         //Set legend Font
         if(showLegend){
             LegendTitle legendTitle = chart.getLegend();
-            legendTitle.setItemFont(graphing.masterFont);
+            legendTitle.setItemFont(Graphing.masterFont);
         }
         
         //Save resulting graph for use later
@@ -311,25 +305,22 @@
         }
         
         //Check if any flow data exists
-        Data data = new Data();
-        String[][] sortableData = data.extractInstantaneousFlowData(mainFolder, database, stationID, beginDate, endDate, userData);
+        String[][] sortableData = Data.extractInstantaneousFlowData(mainFolder, database, stationID, beginDate, endDate, userData);
         
         //If the user wants the datasets (public and user) merged then retrieve the second dataset (user)
         String[][] sortableData_user = new String[0][0];
         if(mergeDatasets){
-            User_Data user_Data = new User_Data();
-            sortableData_user = user_Data.read15minUserFile(userData, "flow", beginDate, endDate);
+            sortableData_user = User_Data.read15minUserFile(userData, "flow", beginDate, endDate);
         }
         
         //Sort the Data by date to remove duplicate date entries
-        DoubleArray doubleArray = new DoubleArray();
         Arrays.sort(sortableData, new DateComparator());
         Arrays.sort(sortableData_user, new DateComparator());
         
         //Merge the two datasets (if user data is empty nothing will be merged)
-        String[][] sortedData_combined = doubleArray.mergeData(sortableData, sortableData_user, mergeMethod);
+        String[][] sortedData_combined = DoubleArray.mergeData(sortableData, sortableData_user, mergeMethod);
         if(sortedData_combined.length == 0){
-            ArrayList<String> errorMessage = new ArrayList<String>();
+            ArrayList<String> errorMessage = new ArrayList<>();
             if(sortableData.length == 0){
                 errorMessage.add("There is no available 15-minute (instantaneous) flow data in the " + database + " database for station '" + stationID + "' and the specified date range.");
                 if(database.equalsIgnoreCase("CDWR")){

web/META-INF/csip-conf.json

@@ -1,6 +1,5 @@
 { 
+  "csip.session.ttl"  : 300,
   "csip.archive.enabled"  : false,
-  "csip.archive.ttl"      : 600,
-  "csip.logging.enabled"  : false,
-  "csip.logging.ttl"      : 600
-}
+  "csip.logging.enabled"  : false
+  }