# AND.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 nighttemp data file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.geography.specifications.EarthPropertyFileSpecification

# The title
TITLE = AND nighttemp data for combined at admin level 0

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

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

# ISO3166-1 alpha3 code for the country
ISOKEY = AND
ADMIN_LEVEL = 0
UNITS = C
DATA_TYPE = nighttemp

# 120 calculations comma-separated, 10 consecutive calculations for each month (from January to December). Combined data from multiple years. Only Fields 1, 3, 4, and 5 are valid. All other Fields are NaN.
# Field 1: Mean
# 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: 45 degrees
# Minimum: -25 degrees

AND = -7.67,NaN,-1.3,-14.8,13.5,NaN,NaN,NaN,NaN,NaN,-7.61,NaN,-0.75,-14.53,13.78,NaN,NaN,NaN,NaN,NaN,-5.84,NaN,0.08,-10.67,10.75,NaN,NaN,NaN,NaN,NaN,-4.16,NaN,1.18,-8.88,10.06,NaN,NaN,NaN,NaN,NaN,0.68,NaN,7.66,-5.43,13.09,NaN,NaN,NaN,NaN,NaN,6.73,NaN,13.17,1.59,11.58,NaN,NaN,NaN,NaN,NaN,9.89,NaN,15.65,4.63,11.02,NaN,NaN,NaN,NaN,NaN,8.74,NaN,16.61,1.73,14.88,NaN,NaN,NaN,NaN,NaN,4.54,NaN,11.1,0.77,10.33,NaN,NaN,NaN,NaN,NaN,0.95,NaN,7.11,-3.92,11.03,NaN,NaN,NaN,NaN,NaN,-4.13,NaN,2.01,-10.39,12.4,NaN,NaN,NaN,NaN,NaN,-7.49,NaN,-3.23,-11.91,8.68,NaN,NaN,NaN,NaN,NaN
