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

# This is the name of the class that will interpret the rainfall data file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.geography.specifications.EarthPropertyFileSpecification

# The title
TITLE = BRN rainfall data for 2007 at admin level 1

# This is the date for which the values in this file are valid
# See http://purl.org/dc/terms/1.1/valid
VALID=start=2007

# The data is derived from the following primary source
#SOURCE = http://neo.sci.gsfc.nasa.gov/

# ISO3166-1 alpha3 code for the country
ISOKEY = BRN
ADMIN_LEVEL = 1
UNITS = MM
DATA_TYPE = rainfall

# 120 calculations comma-separated, 10 consecutive calculations for each month (from January to December)
# Field 1: Average
# Field 2: Standard Deviation
# Field 3: Maximum
# Field 4: Minimum
# Field 5: Range
# Field 6: Skewness
# Field 7: Kurtosis
# Field 8: Root Mean Square
# Field 9: Median
# Field 10: Sample Size
# No data points for a month indicated by 99999.0,0.0,0.0,0.0,0.0,0.0,-1.2,1.0,0.0,0.0
# Maximum: 2000.0
# Minimum: 1.0
# Data not available for locations above 35 degrees N and below 35 degrees S Latitude

BN-TE = 383.32,11.25,398.35,369.54,28.81,0.04,1.62,383.45,383.6,6.0,247.95,23.74,282.72,212.72,69.99,-0.08,2.32,248.89,251.47,6.0,102.69,7.06,112.84,92.6,20.23,0.02,2.1,102.89,102.54,6.0,338.68,35.72,380.69,287.19,93.5,-0.23,1.7,340.25,340.72,6.0,373.23,16.3,393.06,348.38,44.67,-0.16,2.08,373.52,369.38,6.0,491.97,41.38,539.08,420.54,118.54,-0.78,2.58,493.42,503.24,6.0,373.75,77.12,478.68,279.94,198.74,0.19,1.6,380.33,363.73,6.0,186.52,11.43,200.87,173.77,27.1,0.07,1.28,186.81,186.38,6.0,305.33,11.64,318.97,290.18,28.78,0.05,1.53,305.52,303.72,6.0,287.08,13.34,299.55,265.08,34.47,-0.63,2.15,287.34,288.35,6.0,280.12,21.98,308.23,257.2,51.02,0.27,1.44,280.84,276.05,6.0,282.47,8.67,294.63,273.2,21.43,0.24,1.67,282.58,281.69,6.0
BN-TU = 441.61,33.38,499.41,381.38,118.04,-0.12,2.11,442.82,443.16,25.0,415.64,55.54,499.41,308.23,191.19,-0.35,1.94,419.19,430.23,25.0,123.66,18.4,154.02,89.54,64.49,0.04,2.37,124.97,121.78,25.0,365.88,53.57,442.65,278.89,163.76,0.02,1.71,369.62,375.44,25.0,313.84,48.73,378.12,235.9,142.22,-0.11,1.75,317.45,314.72,25.0,558.12,26.96,616.82,522.59,94.23,0.49,2.38,558.75,555.72,25.0,473.94,49.81,538.59,373.13,165.46,-0.55,2.24,476.44,484.58,25.0,198.5,19.54,227.97,156.52,71.45,-0.25,2.34,199.42,196.06,25.0,341.72,24.22,392.34,286.19,106.16,0.21,3.02,342.54,337.42,25.0,300.94,25.55,337.42,246.52,90.89,-0.54,2.64,301.98,301.25,25.0,318.21,30.03,396.62,281.56,115.06,1.06,3.45,319.57,308.23,25.0,344.95,41.91,429.5,273.32,156.18,0.0,2.22,347.38,348.47,25.0
