def create(executionId, results, params, details): t = tempfile.mkstemp(prefix="doms_", suffix=".nc") tempFileName = t[1] dataset = Dataset(tempFileName, "w", format="NETCDF4") dataset.DOMS_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.DOMS_match_up = params["matchup"] dataset.DOMS_num_matchup_matched = details["numInSituMatched"] dataset.DOMS_num_primary_matched = details["numGriddedMatched"] 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_resolution = "point" dataset.geospatial_lon_resolution = "point" 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_resolution = "point" dataset.geospatial_vertical_positive = "down" dataset.DOMS_TimeWindow = params["timeTolerance"] / 60 / 60 dataset.DOMS_TimeWindow_Units = "hours" dataset.DOMS_SearchRadius = float(params["radiusTolerance"]) dataset.DOMS_SearchRadius_Units = "m" # dataset.URI_Subset = "http://webservice subsetting query request" dataset.URI_Matchup = "http://{webservice}/domsresults?id=" + executionId + "&output=NETCDF" dataset.DOMS_ParameterPrimary = params[ "parameter"] if "parameter" in params else "" dataset.DOMS_platforms = params["platforms"] dataset.DOMS_primary = params["primary"] dataset.DOMS_time_to_complete = details["timeToComplete"] dataset.DOMS_time_to_complete_units = "seconds" insituDatasets = params["matchup"] insituLinks = set() for insitu in insituDatasets: insituLinks.add(config.METADATA_LINKS[insitu]) dataset.DOMS_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 = "SatelliteData" insitu_group_name = "InsituData" #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