in analysis/webservice/algorithms/doms/BaseDomsHandler.py [0:0]
def create(executionId, results, params, details):
t = tempfile.mkstemp(prefix="cdms_", suffix=".nc")
tempFileName = t[1]
dataset = Dataset(tempFileName, "w", format="NETCDF4")
dataset.CDMS_matchID = executionId
DomsNetCDFFormatter.__addNetCDFConstants(dataset)
dataset.date_modified = datetime.utcnow().replace(tzinfo=UTC).strftime(ISO_8601)
dataset.date_created = datetime.utcnow().replace(tzinfo=UTC).strftime(ISO_8601)
dataset.time_coverage_start = params["startTime"].strftime(ISO_8601)
dataset.time_coverage_end = params["endTime"].strftime(ISO_8601)
dataset.time_coverage_resolution = "point"
dataset.CDMS_secondary = params["matchup"]
dataset.CDMS_num_matchup_matched = details["numSecondaryMatched"]
dataset.CDMS_num_primary_matched = details["numPrimaryMatched"]
bbox = geo.BoundingBox(asString=params["bbox"])
dataset.geospatial_lat_max = bbox.north
dataset.geospatial_lat_min = bbox.south
dataset.geospatial_lon_max = bbox.east
dataset.geospatial_lon_min = bbox.west
dataset.geospatial_lat_units = "degrees_north"
dataset.geospatial_lon_units = "degrees_east"
dataset.geospatial_vertical_min = float(params["depthMin"])
dataset.geospatial_vertical_max = float(params["depthMax"])
dataset.geospatial_vertical_units = "m"
dataset.geospatial_vertical_positive = "down"
dataset.CDMS_TimeWindow = params["timeTolerance"] / 60 / 60
dataset.CDMS_TimeWindow_Units = "hours"
dataset.CDMS_SearchRadius = float(params["radiusTolerance"])
dataset.CDMS_SearchRadius_Units = "m"
dataset.URI_Matchup = "https://doms.jpl.nasa.gov/domsresults?id=" + executionId + "&output=NETCDF"
dataset.CDMS_ParameterPrimary = params["parameter"] if ("parameter" in params and params['parameter'] is not None) else ""
dataset.CDMS_platforms = params["platforms"]
dataset.CDMS_primary = params["primary"]
dataset.CDMS_time_to_complete = details["timeToComplete"]
dataset.CDMS_time_to_complete_units = "seconds"
insituDatasets = params["matchup"]
insituLinks = set()
for insitu in insituDatasets:
if insitu in config.METADATA_LINKS:
insituLinks.add(config.METADATA_LINKS[insitu])
if insituLinks:
dataset.CDMS_DatasetMetadata = ', '.join(insituLinks)
platforms = set()
for primaryValue in results:
platforms.add(primaryValue['platform'])
for match in primaryValue['matches']:
platforms.add(match['platform'])
dataset.platform = ', '.join(platforms)
satellite_group_name = 'PrimaryData'
insitu_group_name = "SecondaryData"
#Create Satellite group, variables, and attributes
satelliteGroup = dataset.createGroup(satellite_group_name)
satelliteWriter = DomsNetCDFValueWriter(satelliteGroup, params["parameter"])
# Create InSitu group, variables, and attributes
insituGroup = dataset.createGroup(insitu_group_name)
insituWriter = DomsNetCDFValueWriter(insituGroup, params["parameter"])
# Add data to Insitu and Satellite groups, generate array of match ID pairs
matches = DomsNetCDFFormatter.__writeResults(results, satelliteWriter, insituWriter)
dataset.createDimension("MatchedRecords", size=None)
dataset.createDimension("MatchedGroups", size=2)
matchArray = dataset.createVariable("matchIDs", "f4", ("MatchedRecords", "MatchedGroups"))
matchArray[:] = matches
dataset.close()
f = open(tempFileName, "rb")
data = f.read()
f.close()
os.unlink(tempFileName)
return data